682e09b2-8a52-43fd-9fd2-1a4d25cd281c
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30301 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 73990 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 73991 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 73992 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 73993 | capability.graph | complete | 1 / 3 | 1 week ago |
| 73994 | detector.run | complete | 1 / 3 | 1 week ago |
| 73995 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:644418] OpenAI Codex v0.77.0 (research preview)
[codex:644418] --------
[codex:644418] workdir: /tmp/codex-multi-iykkhe31
[codex:644418] model: gpt-5.2-codex
[codex:644418] provider: openai
[codex:644418] approval: never
[codex:644418] sandbox: read-only
[codex:644418] reasoning effort: xhigh
[codex:644418] reasoning summaries: auto
[codex:644418] session id: 019b653c-ba3d-7020-81cf-401c5929c25a
[codex:644418] --------
[codex:644418] user
[codex:644418] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:644418] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:644418] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:644418]
[codex:644418] Scope rules:
[codex:644418] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:644418] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:644418]
[codex:644418] Output MUST be valid JSON matching the provided schema.
[codex:644418] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:644418] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:644418]
[codex:644418] Output constraints (IMPORTANT):
[codex:644418] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:644418] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:644418] mcp startup: no servers
[codex:644418]
[codex:644418] thinking
[codex:644418] **Reading AUDIT_BUNDLE.txt**
[codex:644418] exec
[codex:644418] /bin/bash -lc ls in /tmp/codex-multi-iykkhe31 succeeded in 5ms:
[codex:644418] AUDIT_BUNDLE.txt
[codex:644418] codex-output-schema.json
[codex:644418] contracts
[codex:644418]
[codex:644418] thinking
[codex:644418] **Reading AUDIT_BUNDLE.txt**
[codex:644418] exec
[codex:644418] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:644418]
[codex:644418] ================================================================================
[codex:644418] FILE: contracts/@openzeppelin/contracts/access/AccessControl.sol
[codex:644418] ================================================================================
[codex:644418] // SPDX-License-Identifier: MIT
[codex:644418] // OpenZeppelin Contracts v4.4.1 (access/AccessControl.sol)
[codex:644418]
[codex:644418] pragma solidity ^0.8.0;
[codex:644418]
[codex:644418] import "./IAccessControl.sol";
[codex:644418] import "../utils/Context.sol";
[codex:644418] import "../utils/Strings.sol";
[codex:644418] import "../utils/introspection/ERC165.sol";
[codex:644418]
[codex:644418] /**
[codex:644418] * @dev Contract module that allows children to implement role-based access
[codex:644418] * control mechanisms. This is a lightweight version that doesn't allow enumerating role
[codex:644418] * members except through off-chain means by accessing the contract event logs. Some
[codex:644418] * applications may benefit from on-chain enumerability, for those cases see
[codex:644418]
[codex:644418] thinking
[codex:644418] **Handling truncated file output**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1,200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:644418]
[codex:644418] ================================================================================
[codex:644418] FILE: contracts/@openzeppelin/contracts/access/AccessControl.sol
[codex:644418] ================================================================================
[codex:644418] // SPDX-License-Identifier: MIT
[codex:644418] // OpenZeppelin Contracts v4.4.1 (access/AccessControl.sol)
[codex:644418]
[codex:644418] pragma solidity ^0.8.0;
[codex:644418]
[codex:644418] import "./IAccessControl.sol";
[codex:644418] import "../utils/Context.sol";
[codex:644418] import "../utils/Strings.sol";
[codex:644418] import "../utils/introspection/ERC165.sol";
[codex:644418]
[codex:644418] /**
[codex:644418] * @dev Contract module that allows children to implement role-based access
[codex:644418] * control mechanisms. This is a lightweight version that doesn't allow enumerating role
[codex:644418] * members except through off-chain means by accessing the contract event logs. Some
[codex:644418] * applications may benefit from on-chain enumerability, for those cases see
[codex:644418]
[codex:644418] thinking
[codex:644418] **Pausing for more input**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '200,400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] bytes32 previousAdminRole = getRoleAdmin(role);
[codex:644418] _roles[role].adminRole = adminRole;
[codex:644418] emit RoleAdminChanged(role, previousAdminRole, adminRole);
[codex:644418] }
[codex:644418]
[codex:644418] /**
[codex:644418] * @dev Grants `role` to `account`.
[codex:644418] *
[codex:644418] * Internal function without access restriction.
[codex:644418] */
[codex:644418] function _grantRole(bytes32 role, address account) internal virtual {
[codex:644418] if (!hasRole(role, account)) {
[codex:644418] _roles[role].members[account] = true;
[codex:644418] emit RoleGranted(role, account, _msgSender());
[codex:644418] }
[codex:644418] }
[codex:644418]
[codex:644418] /**
[codex:644418] * @dev Revokes `role` from `account`.
[codex:644418] *
[codex:644418]
[codex:644418] thinking
[codex:644418] **Continuing process**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '400,600p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 5ms:
[codex:644418] interface IERC20 {
[codex:644418] /**
[codex:644418] * @dev Returns the amount of tokens in existence.
[codex:644418] */
[codex:644418] function totalSupply() external view returns (uint256);
[codex:644418]
[codex:644418] /**
[codex:644418] * @dev Returns the amount of tokens owned by `account`.
[codex:644418] */
[codex:644418] function balanceOf(address account) external view returns (uint256);
[codex:644418]
[codex:644418] /**
[codex:644418] * @dev Moves `amount` tokens from the caller's account to `recipient`.
[codex:644418] *
[codex:644418] * Returns a boolean value indicating whether the operation succeeded.
[codex:644418] *
[codex:644418] * Emits a {Transfer} event.
[codex:644418] */
[codex:644418] function transfer(address recipient, uint256 amount) external returns (bool);
[codex:644418]
[codex:644418]
[codex:644418] thinking
[codex:644418] **Continuing inspection**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '600,800p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] *
[codex:644418] * - an externally-owned account
[codex:644418] * - a contract in construction
[codex:644418] * - an address where a contract will be created
[codex:644418] * - an address where a contract lived, but was destroyed
[codex:644418] * ====
[codex:644418] */
[codex:644418] function isContract(address account) internal view returns (bool) {
[codex:644418] // This method relies on extcodesize, which returns 0 for contracts in
[codex:644418] // construction, since the code is only stored at the end of the
[codex:644418] // constructor execution.
[codex:644418]
[codex:644418] uint256 size;
[codex:644418] assembly {
[codex:644418] size := extcodesize(account)
[codex:644418] }
[codex:644418] return size > 0;
[codex:644418] }
[codex:644418]
[codex:644418] /**
[codex:644418]
[codex:644418] thinking
[codex:644418] **Continuing analysis**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '800,1000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 5ms:
[codex:644418] FILE: contracts/@openzeppelin/contracts/utils/Context.sol
[codex:644418] ================================================================================
[codex:644418] // SPDX-License-Identifier: MIT
[codex:644418] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
[codex:644418]
[codex:644418] pragma solidity ^0.8.0;
[codex:644418]
[codex:644418] /**
[codex:644418] * @dev Provides information about the current execution context, including the
[codex:644418] * sender of the transaction and its data. While these are generally available
[codex:644418] * via msg.sender and msg.data, they should not be accessed in such a direct
[codex:644418] * manner, since when dealing with meta-transactions the account sending and
[codex:644418] * paying for execution may not be the actual sender (as far as an application
[codex:644418] * is concerned).
[codex:644418] *
[codex:644418] * This contract is only required for intermediate, library-like contracts.
[codex:644418] */
[codex:644418] abstract contract Context {
[codex:644418] function _msgSender() internal view virtual returns (address) {
[codex:644418] return msg.sender;
[codex:644418]
[codex:644418] thinking
[codex:644418] **Continuing processing**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1000,1200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] TokenDistributor public immutable tokenDistributor;
[codex:644418]
[codex:644418] // Reward rate (block)
[codex:644418] uint256 public currentRewardPerBlock;
[codex:644418]
[codex:644418] // Last reward adjustment block number
[codex:644418] uint256 public lastRewardAdjustment;
[codex:644418]
[codex:644418] // Last update block for rewards
[codex:644418] uint256 public lastUpdateBlock;
[codex:644418]
[codex:644418] // Current end block for the current reward period
[codex:644418] uint256 public periodEndBlock;
[codex:644418]
[codex:644418] // Reward per token stored
[codex:644418] uint256 public rewardPerTokenStored;
[codex:644418]
[codex:644418] // Total existing shares
[codex:644418] uint256 public totalShares;
[codex:644418]
[codex:644418]
[codex:644418] thinking
[codex:644418] **Proceeding with review**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1200,1400p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] /**
[codex:644418] * @notice Update the reward per block (in rewardToken)
[codex:644418] * @dev Only callable by owner. Owner is meant to be another smart contract.
[codex:644418] */
[codex:644418] function updateRewards(uint256 reward, uint256 rewardDurationInBlocks)
[codex:644418] external
[codex:644418] onlyRole(REWARD_UPDATE_ROLE)
[codex:644418] {
[codex:644418] // Adjust the current reward per block
[codex:644418] if (block.number >= periodEndBlock) {
[codex:644418] currentRewardPerBlock = reward / rewardDurationInBlocks;
[codex:644418] } else {
[codex:644418] currentRewardPerBlock =
[codex:644418] (reward + ((periodEndBlock - block.number) * currentRewardPerBlock)) /
[codex:644418] rewardDurationInBlocks;
[codex:644418] }
[codex:644418]
[codex:644418] lastUpdateBlock = block.number;
[codex:644418] periodEndBlock = block.number + rewardDurationInBlocks;
[codex:644418]
[codex:644418]
[codex:644418] thinking
[codex:644418] **Finishing exploration**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1400,1600p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 5ms:
[codex:644418] import {ReentrancyGuard} from '@openzeppelin/contracts/security/ReentrancyGuard.sol';
[codex:644418] import {IERC20, SafeERC20} from '@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol';
[codex:644418]
[codex:644418] import {IMintableERC20} from './IMintableERC20.sol';
[codex:644418]
[codex:644418] /**
[codex:644418] * @title TokenDistributor
[codex:644418] * @notice It handles the distribution of X2Y2 token.
[codex:644418] * It auto-adjusts block rewards over a set number of periods.
[codex:644418] */
[codex:644418] contract TokenDistributor is ReentrancyGuard {
[codex:644418] using SafeERC20 for IERC20;
[codex:644418] using SafeERC20 for IMintableERC20;
[codex:644418]
[codex:644418] struct StakingPeriod {
[codex:644418] uint256 rewardPerBlockForStaking;
[codex:644418] uint256 rewardPerBlockForOthers;
[codex:644418] uint256 periodLengthInBlock;
[codex:644418] }
[codex:644418]
[codex:644418]
[codex:644418] thinking
[codex:644418] **Needing more input to proceed**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1600,1800p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] emit Compound(msg.sender, pendingRewards);
[codex:644418] }
[codex:644418]
[codex:644418] /**
[codex:644418] * @notice Update pool rewards
[codex:644418] */
[codex:644418] function updatePool() external nonReentrant {
[codex:644418] _updatePool();
[codex:644418] }
[codex:644418]
[codex:644418] /**
[codex:644418] * @notice Withdraw staked tokens and compound pending rewards
[codex:644418] * @param amount amount to withdraw
[codex:644418] */
[codex:644418] function withdraw(uint256 amount) external nonReentrant {
[codex:644418] require(
[codex:644418] (userInfo[msg.sender].amount >= amount) && (amount > 0),
[codex:644418] 'Withdraw: Amount must be > 0 or lower than user balance'
[codex:644418] );
[codex:644418]
[codex:644418]
[codex:644418] thinking
[codex:644418] **Continuing exploration**
[codex:644418] exec
[codex:644418] /bin/bash -lc "sed -n '1800,2000p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] rewardPerBlockForStaking,
[codex:644418] rewardPerBlockForOthers
[codex:644418] );
[codex:644418] }
[codex:644418]
[codex:644418] /**
[codex:644418] * @notice Return reward multiplier over the given "from" to "to" block.
[codex:644418] * @param from block to start calculating reward
[codex:644418] * @param to block to finish calculating reward
[codex:644418] * @return the multiplier for the period
[codex:644418] */
[codex:644418] function _getMultiplier(uint256 from, uint256 to) internal view returns (uint256) {
[codex:644418] if (to <= endBlock) {
[codex:644418] return to - from;
[codex:644418] } else if (from >= endBlock) {
[codex:644418] return 0;
[codex:644418] } else {
[codex:644418] return endBlock - from;
[codex:644418] }
[codex:644418] }
[codex:644418]
[codex:644418]
[codex:644418]
[codex:644418]
[codex:644418]
[codex:644418] thinking
[codex:644418] **Analyzing FeeSharingSystem and TokenDistributor contracts**
[codex:644418] thinking
[codex:644418] **Reviewing reward minting and accounting nuances**
[codex:644418]
[codex:644418] There is a lot here! I’m examining how reward tokens are minted and accounted for in FeeSharingSystem and TokenDistributor, including potential issues like unstaked minted tokens causing stuck balances, allowance setting quirks that might break deposits, and how reward updates might miscalculate accrued rewards if not properly updated. I’ll look closely at how pending rewards affect total staked amounts and how updateRewards handles rewardPerTokenStored to see if any reward loss or dilution risks arise.
[codex:644418] thinking
[codex:644418] **Analyzing reward calculation logic and phase transitions**
[codex:644418]
[codex:644418] I’m carefully unpacking how updateRewards impacts reward accrual and the phase-based reward scheduling in TokenDistributor, including subtle consequences of updating lastUpdateBlock without refreshing rewardPerTokenStored that can cause lost rewards. I’m also considering how phase looping and multiplier calculations interplay with minting limits and share accounting to check for any inconsistencies or exploitable gaps.
[codex:644418] thinking
[codex:644418] **Examining withdrawal process and role assignment details**
[codex:644418]
[codex:644418] I’m reviewing how withdraw handles token transfers alongside reentrancy protection, plus how role administration and share calculations work to check if any subtle issues arise from role defaults or share pricing mechanics during deposits and withdrawals.
[codex:644418] thinking
[codex:644418] **Analyzing approval handling and reentrancy protections**
[codex:644418]
[codex:644418] I’m going through the allowance adjustments and mint calls to see if unchecked return values or token standards like USDT cause failures, and also checking if internal nonReentrant guards effectively block token mint and transfer reentrancy from external tokens.
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/FeeSharingSystem.sol | sed -n '140,240p'" in /tmp/codex-multi-iykkhe31 succeeded in 7ms:
[codex:644418] 140 function deposit(uint256 amount, bool claimRewardToken) external nonReentrant {
[codex:644418] 141 require(amount >= PRECISION_FACTOR, 'Deposit: Amount must be >= 1 X2Y2');
[codex:644418] 142
[codex:644418] 143 // Auto compounds for everyone
[codex:644418] 144 tokenDistributor.harvestAndCompound();
[codex:644418] 145
[codex:644418] 146 // Update reward for user
[codex:644418] 147 _updateReward(msg.sender);
[codex:644418] 148
[codex:644418] 149 // Retrieve total amount staked by this contract
[codex:644418] 150 (uint256 totalAmountStaked, ) = tokenDistributor.userInfo(address(this));
[codex:644418] 151
[codex:644418] 152 // Transfer X2Y2 tokens to this address
[codex:644418] 153 x2y2Token.safeTransferFrom(msg.sender, address(this), amount);
[codex:644418] 154
[codex:644418] 155 uint256 currentShares;
[codex:644418] 156
[codex:644418] 157 // Calculate the number of shares to issue for the user
[codex:644418] 158 if (totalShares != 0) {
[codex:644418] 159 currentShares = (amount * totalShares) / totalAmountStaked;
[codex:644418]
[codex:644418] thinking
[codex:644418] **Continuing to review updateRewards function**
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/FeeSharingSystem.sol | sed -n '238,320p'" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] 238 /**
[codex:644418] 239 * @notice Update the reward per block (in rewardToken)
[codex:644418] 240 * @dev Only callable by owner. Owner is meant to be another smart contract.
[codex:644418] 241 */
[codex:644418] 242 function updateRewards(uint256 reward, uint256 rewardDurationInBlocks)
[codex:644418] 243 external
[codex:644418] 244 onlyRole(REWARD_UPDATE_ROLE)
[codex:644418] 245 {
[codex:644418] 246 // Adjust the current reward per block
[codex:644418] 247 if (block.number >= periodEndBlock) {
[codex:644418] 248 currentRewardPerBlock = reward / rewardDurationInBlocks;
[codex:644418] 249 } else {
[codex:644418] 250 currentRewardPerBlock =
[codex:644418] 251 (reward + ((periodEndBlock - block.number) * currentRewardPerBlock)) /
[codex:644418] 252 rewardDurationInBlocks;
[codex:644418] 253 }
[codex:644418] 254
[codex:644418] 255 lastUpdateBlock = block.number;
[codex:644418] 256 periodEndBlock = block.number + rewardDurationInBlocks;
[codex:644418] 257
[codex:644418]
[codex:644418] thinking
[codex:644418] **Requesting line numbers for function**
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/FeeSharingSystem.sol | sed -n '320,380p'" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] 320
[codex:644418] 321 /**
[codex:644418] 322 * @notice Check current allowance and adjust if necessary
[codex:644418] 323 * @param _amount amount to transfer
[codex:644418] 324 * @param _to token to transfer
[codex:644418] 325 */
[codex:644418] 326 function _checkAndAdjustX2Y2TokenAllowanceIfRequired(uint256 _amount, address _to) internal {
[codex:644418] 327 if (x2y2Token.allowance(address(this), _to) < _amount) {
[codex:644418] 328 x2y2Token.approve(_to, type(uint256).max);
[codex:644418] 329 }
[codex:644418] 330 }
[codex:644418] 331
[codex:644418] 332 /**
[codex:644418] 333 * @notice Return last block where rewards must be distributed
[codex:644418] 334 */
[codex:644418] 335 function _lastRewardBlock() internal view returns (uint256) {
[codex:644418] 336 return block.number < periodEndBlock ? block.number : periodEndBlock;
[codex:644418] 337 }
[codex:644418] 338
[codex:644418] 339 /**
[codex:644418]
[codex:644418] thinking
[codex:644418] **Preparing to review TokenDistributor mint function**
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/TokenDistributor.sol | sed -n '200,320p'" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] 200 userInfo[msg.sender].rewardDebt =
[codex:644418] 201 (userInfo[msg.sender].amount * accTokenPerShare) /
[codex:644418] 202 PRECISION_FACTOR;
[codex:644418] 203
[codex:644418] 204 emit Compound(msg.sender, pendingRewards);
[codex:644418] 205 }
[codex:644418] 206
[codex:644418] 207 /**
[codex:644418] 208 * @notice Update pool rewards
[codex:644418] 209 */
[codex:644418] 210 function updatePool() external nonReentrant {
[codex:644418] 211 _updatePool();
[codex:644418] 212 }
[codex:644418] 213
[codex:644418] 214 /**
[codex:644418] 215 * @notice Withdraw staked tokens and compound pending rewards
[codex:644418] 216 * @param amount amount to withdraw
[codex:644418] 217 */
[codex:644418] 218 function withdraw(uint256 amount) external nonReentrant {
[codex:644418] 219 require(
[codex:644418]
[codex:644418] thinking
[codex:644418] **Adding line numbers for mint function**
[codex:644418] exec
[codex:644418] /bin/bash -lc "nl -ba contracts/contracts/TokenDistributor.sol | sed -n '320,420p'" in /tmp/codex-multi-iykkhe31 succeeded in 6ms:
[codex:644418] 320 return
[codex:644418] 321 (userInfo[user].amount * adjustedTokenPerShare) /
[codex:644418] 322 PRECISION_FACTOR -
[codex:644418] 323 userInfo[user].rewardDebt;
[codex:644418] 324 } else {
[codex:644418] 325 return
[codex:644418] 326 (userInfo[user].amount * accTokenPerShare) /
[codex:644418] 327 PRECISION_FACTOR -
[codex:644418] 328 userInfo[user].rewardDebt;
[codex:644418] 329 }
[codex:644418] 330 }
[codex:644418] 331
[codex:644418] 332 /**
[codex:644418] 333 * @notice Update reward variables of the pool
[codex:644418] 334 */
[codex:644418] 335 function _updatePool() internal {
[codex:644418] 336 if (block.number <= lastRewardBlock) {
[codex:644418] 337 return;
[codex:644418] 338 }
[codex:644418] 339
[codex:644418]
[codex:644418] thinking
[codex:644418] **Producing JSON vulnerability report**
[codex:644418]
[codex:644418] I’m putting together a detailed JSON output summarizing two main findings: a medium-severity reward accrual reset bug in `updateRewards` that can wipe staker rewards if triggered by a privileged updater, and a low-severity unchecked ERC20 return value issue on `approve` and `mint` calls that could cause silent failures in reward accounting. I want to clearly state severity, categories, exploit scenarios, recommendations, evidence with file lines, and ensure the output matches the requested schema format precisely.
[codex:644418] codex
[codex:644418] {"no_findings":false,"summary":"Found 2 issues: reward accrual can be reset on reward-rate updates, and unchecked ERC20 return values can silently desync accounting or approvals.","findings":[{"severity":"medium","category":"other","title":"Reward accrual can be wiped when updateRewards resets lastUpdateBlock","exploit_scenario":"A caller with REWARD_UPDATE_ROLE can call updateRewards after rewards have accrued. Because rewardPerTokenStored is not updated before lastUpdateBlock is reset, all rewards between the previous lastUpdateBlock and this update become unclaimable. Repeated updates can continuously zero out staker rewards without changing balances.","recommendation":"Before changing currentRewardPerBlock/periodEndBlock, snapshot rewards by updating rewardPerTokenStored and lastUpdateBlock (e.g., call _updateReward(address(0)) or set rewardPerTokenStored = _rewardPerToken(); lastUpdateBlock = _lastRewardBlock()).","evidence":"updateRewards updates lastUpdateBlock and periodEndBlock without first updating rewardPerTokenStored, so prior rewards are skipped.","locations":["contracts/contracts/FeeSharingSystem.sol:242","contracts/contracts/FeeSharingSystem.sol:255"]},{"severity":"low","category":"other","title":"Unchecked ERC20 return values on approve/mint can silently fail and desync accounting","exploit_scenario":"If x2y2Token returns false (non‑standard or mint disabled), FeeSharingSystem still proceeds and TokenDistributor skips reward accounting while minting (or minting to tokenSplitter) may silently fail. This can lead to stuck rewards, missing distributions, or unexpected reverts later.","recommendation":"Use SafeERC20 for approvals or require true return values; for minting, check the return value and revert on failure for both staking and tokenSplitter mints.","evidence":"approve() return value is ignored; mint() return value for tokenSplitter is ignored and staking mint only conditionally updates accounting.","locations":["contracts/contracts/FeeSharingSystem.sol:326","contracts/contracts/FeeSharingSystem.sol:328","contracts/contracts/TokenDistributor.sol:371","contracts/contracts/TokenDistributor.sol:380"]}]}
[codex:644418] tokens used
[codex:644418] 60,818
[codex:644418] {"no_findings":false,"summary":"Found 2 issues: reward accrual can be reset on reward-rate updates, and unchecked ERC20 return values can silently desync accounting or approvals.","findings":[{"severity":"medium","category":"other","title":"Reward accrual can be wiped when updateRewards resets lastUpdateBlock","exploit_scenario":"A caller with REWARD_UPDATE_ROLE can call updateRewards after rewards have accrued. Because rewardPerTokenStored is not updated before lastUpdateBlock is reset, all rewards between the previous lastUpdateBlock and this update become unclaimable. Repeated updates can continuously zero out staker rewards without changing balances.","recommendation":"Before changing currentRewardPerBlock/periodEndBlock, snapshot rewards by updating rewardPerTokenStored and lastUpdateBlock (e.g., call _updateReward(address(0)) or set rewardPerTokenStored = _rewardPerToken(); lastUpdateBlock = _lastRewardBlock()).","evidence":"updateRewards updates lastUpdateBlock and periodEndBlock without first updating rewardPerTokenStored, so prior rewards are skipped.","locations":["contracts/contracts/FeeSharingSystem.sol:242","contracts/contracts/FeeSharingSystem.sol:255"]},{"severity":"low","category":"other","title":"Unchecked ERC20 return values on approve/mint can silently fail and desync accounting","exploit_scenario":"If x2y2Token returns false (non‑standard or mint disabled), FeeSharingSystem still proceeds and TokenDistributor skips reward accounting while minting (or minting to tokenSplitter) may silently fail. This can lead to stuck rewards, missing distributions, or unexpected reverts later.","recommendation":"Use SafeERC20 for approvals or require true return values; for minting, check the return value and revert on failure for both staking and tokenSplitter mints.","evidence":"approve() return value is ignored; mint() return value for tokenSplitter is ignored and staking mint only conditionally updates accounting.","locations":["contracts/contracts/FeeSharingSystem.sol:326","contracts/contracts/FeeSharingSystem.sol:328","contracts/contracts/TokenDistributor.sol:371","contracts/contracts/TokenDistributor.sol:380"]}]}
{
"codex": {
"ran_at": "2025-12-28T14:01:54.377091+00:00",
"returncode": 0
},
"summary": "Found 2 issues: reward accrual can be reset on reward-rate updates, and unchecked ERC20 return values can silently desync accounting or approvals.",
"raw_final": {
"summary": "Found 2 issues: reward accrual can be reset on reward-rate updates, and unchecked ERC20 return values can silently desync accounting or approvals.",
"findings": [
{
"title": "Reward accrual can be wiped when updateRewards resets lastUpdateBlock",
"category": "other",
"evidence": "updateRewards updates lastUpdateBlock and periodEndBlock without first updating rewardPerTokenStored, so prior rewards are skipped.",
"severity": "medium",
"locations": [
"contracts/contracts/FeeSharingSystem.sol:242",
"contracts/contracts/FeeSharingSystem.sol:255"
],
"recommendation": "Before changing currentRewardPerBlock/periodEndBlock, snapshot rewards by updating rewardPerTokenStored and lastUpdateBlock (e.g., call _updateReward(address(0)) or set rewardPerTokenStored = _rewardPerToken(); lastUpdateBlock = _lastRewardBlock()).",
"exploit_scenario": "A caller with REWARD_UPDATE_ROLE can call updateRewards after rewards have accrued. Because rewardPerTokenStored is not updated before lastUpdateBlock is reset, all rewards between the previous lastUpdateBlock and this update become unclaimable. Repeated updates can continuously zero out staker rewards without changing balances."
},
{
"title": "Unchecked ERC20 return values on approve/mint can silently fail and desync accounting",
"category": "other",
"evidence": "approve() return value is ignored; mint() return value for tokenSplitter is ignored and staking mint only conditionally updates accounting.",
"severity": "low",
"locations": [
"contracts/contracts/FeeSharingSystem.sol:326",
"contracts/contracts/FeeSharingSystem.sol:328",
"contracts/contracts/TokenDistributor.sol:371",
"contracts/contracts/TokenDistributor.sol:380"
],
"recommendation": "Use SafeERC20 for approvals or require true return values; for minting, check the return value and revert on failure for both staking and tokenSplitter mints.",
"exploit_scenario": "If x2y2Token returns false (non\u2011standard or mint disabled), FeeSharingSystem still proceeds and TokenDistributor skips reward accounting while minting (or minting to tokenSplitter) may silently fail. This can lead to stuck rewards, missing distributions, or unexpected reverts later."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLVALUE 00000006: DUP1 00000007: ISZERO 00000008: PUSH2 0x0010 0000000b: JUMPI 0000000c: PUSH1 0x00 0000000e: DUP1 0000000f: REVERT 00000010: JUMPDEST 00000011: POP 00000012: PUSH1 0x04 00000014: CALLDATASIZE 00000015: LT 00000016: PUSH2 0x019a 00000019: JUMPI 0000001a: PUSH1 0x00 0000001c: CALLDATALOAD 0000001d: PUSH1 0xe0 0000001f: SHR 00000020: DUP1 00000021: PUSH4 0x4641257d 00000026: GT 00000027: PUSH2 0x00e4 0000002a: JUMPI 0000002b: DUP1 0000002c: PUSH4 0xa9f8d181 00000031: GT 00000032: PUSH2 0x0092 00000035: JUMPI 00000036: DUP1 00000037: PUSH4 0xa9f8d181 0000003c: EQ 0000003d: PUSH2 0x03ae 00000040: JUMPI 00000041: DUP1 00000042: PUSH4 0xcb4aec61 00000047: EQ 00000048: PUSH2 0x03b6 0000004b: JUMPI 0000004c: DUP1 0000004d: PUSH4 0xccd34cd5 00000052: EQ 00000053: PUSH2 0x03bf 00000056: JUMPI 00000057: DUP1 00000058: PUSH4 0xd547741f 0000005d: EQ 0000005e: PUSH2 0x03ce 00000061: JUMPI 00000062: DUP1 00000063: PUSH4 0xdf136d65 00000068: EQ 00000069: PUSH2 0x03e1 0000006c: JUMPI 0000006d: DUP1 0000006e: PUSH4 0xe098bd4b 00000073: EQ 00000074: PUSH2 0x03ea 00000077: JUMPI 00000078: DUP1 00000079: PUSH4 0xebde5ee6 0000007e: EQ 0000007f: PUSH2 0x03fd 00000082: JUMPI 00000083: DUP1 00000084: PUSH4 0xf7c618c1 00000089: EQ 0000008a: PUSH2 0x0424 0000008d: JUMPI 0000008e: PUSH1 0x00 00000090: DUP1 00000091: REVERT 00000092: JUMPDEST 00000093: DUP1 00000094: PUSH4 0x4641257d 00000099: EQ 0000009a: PUSH2 0x0335 0000009d: JUMPI 0000009e: DUP1 0000009f: PUSH4 0x5b0680f6 000000a4: EQ 000000a5: PUSH2 0x033d 000000a8: JUMPI 000000a9: DUP1 000000aa: PUSH4 0x91d14854 000000af: EQ 000000b0: PUSH2 0x0364 000000b3: JUMPI 000000b4: DUP1 000000b5: PUSH4 0x97e50818 000000ba: EQ 000000bb: PUSH2 0x0377 000000be: JUMPI 000000bf: DUP1 000000c0: PUSH4 0x9a408321 000000c5: EQ 000000c6: PUSH2 0x038a 000000c9: JUMPI 000000ca: DUP1 000000cb: PUSH4 0xa217fddf 000000d0: EQ 000000d1: PUSH2 0x039d 000000d4: JUMPI 000000d5: DUP1 000000d6: PUSH4 0xa218141b 000000db: EQ 000000dc: PUSH2 0x03a5 000000df: JUMPI 000000e0: PUSH1 0x00 000000e2: DUP1 000000e3: REVERT 000000e4: JUMPDEST 000000e5: DUP1 000000e6: PUSH4 0x2f2ff15d 000000eb: GT 000000ec: PUSH2 0x014c 000000ef: JUMPI 000000f0: DUP1 000000f1: PUSH4 0x2f2ff15d 000000f6: EQ 000000f7: PUSH2 0x02a7 000000fa: JUMPI 000000fb: DUP1 000000fc: PUSH4 0x2f4f21e2 00000101: EQ 00000102: PUSH2 0x02ba 00000105: JUMPI 00000106: DUP1 00000107: PUSH4 0x353efdcf 0000010c: EQ 0000010d: PUSH2 0x02cd 00000110: JUMPI 00000111: DUP1 00000112: PUSH4 0x36568abe 00000117: EQ 00000118: PUSH2 0x02f4 0000011b: JUMPI 0000011c: DUP1 0000011d: PUSH4 0x38d07436 00000122: EQ 00000123: PUSH2 0x0307 00000126: JUMPI 00000127: DUP1 00000128: PUSH4 0x3a98ef39 0000012d: EQ 0000012e: PUSH2 0x031a 00000131: JUMPI 00000132: DUP1 00000133: PUSH4 0x40d2abae 00000138: EQ 00000139: PUSH2 0x0323 0000013c: JUMPI 0000013d: DUP1 0000013e: PUSH4 0x442da82f 00000143: EQ 00000144: PUSH2 0x032c 00000147: JUMPI 00000148: PUSH1 0x00 0000014a: DUP1 0000014b: REVERT 0000014c: JUMPDEST 0000014d: DUP1 0000014e: PUSH4 0x01ffc9a7 00000153: EQ 00000154: PUSH2 0x019f 00000157: JUMPI 00000158: DUP1 00000159: PUSH4 0x097aad10 0000015e: EQ 0000015f: PUSH2 0x01c7 00000162: JUMPI 00000163: DUP1 00000164: PUSH4 0x18a6bc32 00000169: EQ 0000016a: PUSH2 0x01e8 0000016d: JUMPI 0000016e: DUP1 0000016f: PUSH4 0x1959a002 00000174: EQ 00000175: PUSH2 0x021c 00000178: JUMPI 00000179: DUP1 0000017a: PUSH4 0x1c1c6fe5 0000017f: EQ 00000180: PUSH2 0x0266 00000183: JUMPI 00000184: DUP1 00000185: PUSH4 0x248a9ca3 0000018a: EQ 0000018b: PUSH2 0x027b 0000018e: JUMPI 0000018f: DUP1 00000190: PUSH4 0x26170c3c 00000195: EQ 00000196: PUSH2 0x029f 00000199: JUMPI 0000019a: JUMPDEST 0000019b: PUSH1 0x00 0000019d: DUP1 0000019e: REVERT 0000019f: JUMPDEST 000001a0: PUSH2 0x01b2 000001a3: PUSH2 0x01ad 000001a6: CALLDATASIZE 000001a7: PUSH1 0x04 000001a9: PUSH2 0x1dc3 000001ac: JUMP 000001ad: JUMPDEST 000001ae: PUSH2 0x044b 000001b1: JUMP 000001b2: JUMPDEST 000001b3: PUSH1 0x40 000001b5: MLOAD 000001b6: SWAP1 000001b7: ISZERO 000001b8: ISZERO 000001b9: DUP2 000001ba: MSTORE 000001bb: PUSH1 0x20 000001bd: ADD 000001be: JUMPDEST 000001bf: PUSH1 0x40 000001c1: MLOAD 000001c2: DUP1 000001c3: SWAP2 000001c4: SUB 000001c5: SWAP1 000001c6: RETURN 000001c7: JUMPDEST 000001c8: PUSH2 0x01da 000001cb: PUSH2 0x01d5 000001ce: CALLDATASIZE 000001cf: PUSH1 0x04 000001d1: PUSH2 0x1e09 000001d4: JUMP 000001d5: JUMPDEST 000001d6: PUSH2 0x0482 000001d9: JUMP 000001da: JUMPDEST 000001db: PUSH1 0x40 000001dd: MLOAD 000001de: SWAP1 000001df: DUP2 000001e0: MSTORE 000001e1: PUSH1 0x20 000001e3: ADD 000001e4: PUSH2 0x01be 000001e7: JUMP 000001e8: JUMPDEST 000001e9: PUSH2 0x020f 000001ec: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 0000020d: DUP2 0000020e: JUMP 0000020f: JUMPDEST 00000210: PUSH1 0x40 00000212: MLOAD 00000213: PUSH2 0x01be 00000216: SWAP2 00000217: SWAP1 00000218: PUSH2 0x1e24 0000021b: JUMP 0000021c: JUMPDEST 0000021d: PUSH2 0x024b 00000220: PUSH2 0x022a 00000223: CALLDATASIZE 00000224: PUSH1 0x04 00000226: PUSH2 0x1e09 00000229: JUMP 0000022a: JUMPDEST 0000022b: PUSH1 0x08 0000022d: PUSH1 0x20 0000022f: MSTORE 00000230: PUSH1 0x00 00000232: SWAP1 00000233: DUP2 00000234: MSTORE 00000235: PUSH1 0x40 00000237: SWAP1 00000238: KECCAK256 00000239: DUP1 0000023a: SLOAD 0000023b: PUSH1 0x01 0000023d: DUP3 0000023e: ADD 0000023f: SLOAD 00000240: PUSH1 0x02 00000242: SWAP1 00000243: SWAP3 00000244: ADD 00000245: SLOAD 00000246: SWAP1 00000247: SWAP2 00000248: SWAP1 00000249: DUP4 0000024a: JUMP 0000024b: JUMPDEST 0000024c: PUSH1 0x40 0000024e: DUP1 0000024f: MLOAD 00000250: SWAP4 00000251: DUP5 00000252: MSTORE 00000253: PUSH1 0x20 00000255: DUP5 00000256: ADD 00000257: SWAP3 00000258: SWAP1 00000259: SWAP3 0000025a: MSTORE 0000025b: SWAP1 0000025c: DUP3 0000025d: ADD 0000025e: MSTORE 0000025f: PUSH1 0x60 00000261: ADD 00000262: PUSH2 0x01be 00000265: JUMP 00000266: JUMPDEST 00000267: PUSH2 0x0279 0000026a: PUSH2 0x0274 0000026d: CALLDATASIZE 0000026e: PUSH1 0x04 00000270: PUSH2 0x1e49 00000273: JUMP 00000274: JUMPDEST 00000275: PUSH2 0x048d 00000278: JUMP 00000279: JUMPDEST 0000027a: STOP 0000027b: JUMPDEST 0000027c: PUSH2 0x01da 0000027f: PUSH2 0x0289 00000282: CALLDATASIZE 00000283: PUSH1 0x04 00000285: PUSH2 0x1e66 00000288: JUMP 00000289: JUMPDEST 0000028a: PUSH1 0x00 0000028c: SWAP1 0000028d: DUP2 0000028e: MSTORE 0000028f: PUSH1 0x01 00000291: PUSH1 0x20 00000293: DUP2 00000294: SWAP1 00000295: MSTORE 00000296: PUSH1 0x40 00000298: SWAP1 00000299: SWAP2 0000029a: KECCAK256 0000029b: ADD 0000029c: SLOAD 0000029d: SWAP1 0000029e: JUMP 0000029f: JUMPDEST 000002a0: PUSH2 0x01da 000002a3: PUSH2 0x04df 000002a6: JUMP 000002a7: JUMPDEST 000002a8: PUSH2 0x0279 000002ab: PUSH2 0x02b5 000002ae: CALLDATASIZE 000002af: PUSH1 0x04 000002b1: PUSH2 0x1e7f 000002b4: JUMP 000002b5: JUMPDEST 000002b6: PUSH2 0x0648 000002b9: JUMP 000002ba: JUMPDEST 000002bb: PUSH2 0x01b2 000002be: PUSH2 0x02c8 000002c1: CALLDATASIZE 000002c2: PUSH1 0x04 000002c4: PUSH2 0x1eab 000002c7: JUMP 000002c8: JUMPDEST 000002c9: PUSH2 0x0674 000002cc: JUMP 000002cd: JUMPDEST 000002ce: PUSH2 0x01da 000002d1: PUSH32 0x2561bf26f818282a3be40719542054d2173eb0d38539e8a8d3cff22f29fd2384 000002f2: DUP2 000002f3: JUMP 000002f4: JUMPDEST 000002f5: PUSH2 0x0279 000002f8: PUSH2 0x0302 000002fb: CALLDATASIZE 000002fc: PUSH1 0x04 000002fe: PUSH2 0x1e7f 00000301: JUMP 00000302: JUMPDEST 00000303: PUSH2 0x09c1 00000306: JUMP 00000307: JUMPDEST 00000308: PUSH2 0x0279 0000030b: PUSH2 0x0315 0000030e: CALLDATASIZE 0000030f: PUSH1 0x04 00000311: PUSH2 0x1ed5 00000314: JUMP 00000315: JUMPDEST 00000316: PUSH2 0x0a3f 00000319: JUMP 0000031a: JUMPDEST 0000031b: PUSH2 0x01da 0000031e: PUSH1 0x07 00000320: SLOAD 00000321: DUP2 00000322: JUMP 00000323: JUMPDEST 00000324: PUSH2 0x01da 00000327: PUSH1 0x03 00000329: SLOAD 0000032a: DUP2 0000032b: JUMP 0000032c: JUMPDEST 0000032d: PUSH2 0x01da 00000330: PUSH1 0x05 00000332: SLOAD 00000333: DUP2 00000334: JUMP 00000335: JUMPDEST 00000336: PUSH2 0x0279 00000339: PUSH2 0x0b03 0000033c: JUMP 0000033d: JUMPDEST 0000033e: PUSH2 0x01da 00000341: PUSH32 0xd139c7f3a5460f246794bd24bff3478b49114f682a7cc4513889d72531631b96 00000362: DUP2 00000363: JUMP 00000364: JUMPDEST 00000365: PUSH2 0x01b2 00000368: PUSH2 0x0372 0000036b: CALLDATASIZE 0000036c: PUSH1 0x04 0000036e: PUSH2 0x1e7f 00000371: JUMP 00000372: JUMPDEST 00000373: PUSH2 0x0c9b 00000376: JUMP 00000377: JUMPDEST 00000378: PUSH2 0x0279 0000037b: PUSH2 0x0385 0000037e: CALLDATASIZE 0000037f: PUSH1 0x04 00000381: PUSH2 0x1f05 00000384: JUMP 00000385: JUMPDEST 00000386: PUSH2 0x0cc6 00000389: JUMP 0000038a: JUMPDEST 0000038b: PUSH2 0x0279 0000038e: PUSH2 0x0398 00000391: CALLDATASIZE 00000392: PUSH1 0x04 00000394: PUSH2 0x1ed5 00000397: JUMP 00000398: JUMPDEST 00000399: PUSH2 0x0d9d 0000039c: JUMP 0000039d: JUMPDEST 0000039e: PUSH2 0x01da 000003a1: PUSH1 0x00 000003a3: DUP2 000003a4: JUMP 000003a5: JUMPDEST 000003a6: PUSH2 0x01da 000003a9: PUSH1 0x04 000003ab: SLOAD 000003ac: DUP2 000003ad: JUMP 000003ae: JUMPDEST 000003af: PUSH2 0x01da 000003b2: PUSH2 0x110f 000003b5: JUMP 000003b6: JUMPDEST 000003b7: PUSH2 0x01da 000003ba: PUSH1 0x02 000003bc: SLOAD 000003bd: DUP2 000003be: JUMP 000003bf: JUMPDEST 000003c0: PUSH2 0x01da 000003c3: PUSH8 0x0de0b6b3a7640000 000003cc: DUP2 000003cd: JUMP 000003ce: JUMPDEST 000003cf: PUSH2 0x0279 000003d2: PUSH2 0x03dc 000003d5: CALLDATASIZE 000003d6: PUSH1 0x04 000003d8: PUSH2 0x1e7f 000003db: JUMP 000003dc: JUMPDEST 000003dd: PUSH2 0x111e 000003e0: JUMP 000003e1: JUMPDEST 000003e2: PUSH2 0x01da 000003e5: PUSH1 0x06 000003e7: SLOAD 000003e8: DUP2 000003e9: JUMP 000003ea: JUMPDEST 000003eb: PUSH2 0x01da 000003ee: PUSH2 0x03f8 000003f1: CALLDATASIZE 000003f2: PUSH1 0x04 000003f4: PUSH2 0x1e09 000003f7: JUMP 000003f8: JUMPDEST 000003f9: PUSH2 0x1145 000003fc: JUMP 000003fd: JUMPDEST 000003fe: PUSH2 0x020f 00000401: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9 00000422: DUP2 00000423: JUMP 00000424: JUMPDEST 00000425: PUSH2 0x020f 00000428: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000449: DUP2 0000044a: JUMP 0000044b: JUMPDEST 0000044c: PUSH1 0x00 0000044e: PUSH1 0x01 00000450: PUSH1 0x01 00000452: PUSH1 0xe0 00000454: SHL 00000455: SUB 00000456: NOT 00000457: DUP3 00000458: AND 00000459: PUSH4 0x7965db0b 0000045e: PUSH1 0xe0 00000460: SHL 00000461: EQ 00000462: DUP1 00000463: PUSH2 0x047c 00000466: JUMPI 00000467: POP 00000468: PUSH4 0x01ffc9a7 0000046d: PUSH1 0xe0 0000046f: SHL 00000470: PUSH1 0x01 00000472: PUSH1 0x01 00000474: PUSH1 0xe0 00000476: SHL 00000477: SUB 00000478: NOT 00000479: DUP4 0000047a: AND 0000047b: EQ 0000047c: JUMPDEST 0000047d: SWAP3 0000047e: SWAP2 0000047f: POP 00000480: POP 00000481: JUMP 00000482: JUMPDEST 00000483: PUSH1 0x00 00000485: PUSH2 0x047c 00000488: DUP3 00000489: PUSH2 0x12ce 0000048c: JUMP 0000048d: JUMPDEST 0000048e: PUSH1 0x02 00000490: PUSH1 0x00 00000492: SLOAD 00000493: EQ 00000494: ISZERO 00000495: PUSH2 0x04b9 00000498: JUMPI 00000499: PUSH1 0x40 0000049b: MLOAD 0000049c: PUSH3 0x461bcd 000004a0: PUSH1 0xe5 000004a2: SHL 000004a3: DUP2 000004a4: MSTORE 000004a5: PUSH1 0x04 000004a7: ADD 000004a8: PUSH2 0x04b0 000004ab: SWAP1 000004ac: PUSH2 0x1f27 000004af: JUMP 000004b0: JUMPDEST 000004b1: PUSH1 0x40 000004b3: MLOAD 000004b4: DUP1 000004b5: SWAP2 000004b6: SUB 000004b7: SWAP1 000004b8: REVERT 000004b9: JUMPDEST 000004ba: PUSH1 0x02 000004bc: PUSH1 0x00 000004be: SWAP1 000004bf: DUP2 000004c0: SSTORE 000004c1: CALLER 000004c2: DUP2 000004c3: MSTORE 000004c4: PUSH1 0x08 000004c6: PUSH1 0x20 000004c8: MSTORE 000004c9: PUSH1 0x40 000004cb: SWAP1 000004cc: KECCAK256 000004cd: SLOAD 000004ce: PUSH2 0x04d7 000004d1: SWAP1 000004d2: DUP3 000004d3: PUSH2 0x1344 000004d6: JUMP 000004d7: JUMPDEST 000004d8: POP 000004d9: PUSH1 0x01 000004db: PUSH1 0x00 000004dd: SSTORE 000004de: JUMP 000004df: JUMPDEST 000004e0: PUSH1 0x00 000004e2: DUP1 000004e3: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 00000504: PUSH1 0x01 00000506: PUSH1 0x01 00000508: PUSH1 0xa0 0000050a: SHL 0000050b: SUB 0000050c: AND 0000050d: PUSH4 0x1959a002 00000512: ADDRESS 00000513: PUSH1 0x40 00000515: MLOAD 00000516: DUP3 00000517: PUSH4 0xffffffff 0000051c: AND 0000051d: PUSH1 0xe0 0000051f: SHL 00000520: DUP2 00000521: MSTORE 00000522: PUSH1 0x04 00000524: ADD 00000525: PUSH2 0x052e 00000528: SWAP2 00000529: SWAP1 0000052a: PUSH2 0x1e24 0000052d: JUMP 0000052e: JUMPDEST 0000052f: PUSH1 0x40 00000531: DUP1 00000532: MLOAD 00000533: DUP1 00000534: DUP4 00000535: SUB 00000536: DUP2 00000537: DUP7 00000538: GAS 00000539: STATICCALL 0000053a: ISZERO 0000053b: DUP1 0000053c: ISZERO 0000053d: PUSH2 0x054a 00000540: JUMPI 00000541: RETURNDATASIZE 00000542: PUSH1 0x00 00000544: DUP1 00000545: RETURNDATACOPY 00000546: RETURNDATASIZE 00000547: PUSH1 0x00 00000549: REVERT 0000054a: JUMPDEST 0000054b: POP 0000054c: POP 0000054d: POP 0000054e: POP 0000054f: PUSH1 0x40 00000551: MLOAD 00000552: RETURNDATASIZE 00000553: PUSH1 0x1f 00000555: NOT 00000556: PUSH1 0x1f 00000558: DUP3 00000559: ADD 0000055a: AND 0000055b: DUP3 0000055c: ADD 0000055d: DUP1 0000055e: PUSH1 0x40 00000560: MSTORE 00000561: POP 00000562: DUP2 00000563: ADD 00000564: SWAP1 00000565: PUSH2 0x056e 00000568: SWAP2 00000569: SWAP1 0000056a: PUSH2 0x1f5e 0000056d: JUMP 0000056e: JUMPDEST 0000056f: POP 00000570: PUSH1 0x40 00000572: MLOAD 00000573: PUSH3 0x97aad1 00000577: PUSH1 0xe4 00000579: SHL 0000057a: DUP2 0000057b: MSTORE 0000057c: SWAP1 0000057d: SWAP2 0000057e: POP 0000057f: PUSH1 0x01 00000581: PUSH1 0x01 00000583: PUSH1 0xa0 00000585: SHL 00000586: SUB 00000587: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 000005a8: AND 000005a9: SWAP1 000005aa: PUSH4 0x097aad10 000005af: SWAP1 000005b0: PUSH2 0x05bd 000005b3: SWAP1 000005b4: ADDRESS 000005b5: SWAP1 000005b6: PUSH1 0x04 000005b8: ADD 000005b9: PUSH2 0x1e24 000005bc: JUMP 000005bd: JUMPDEST 000005be: PUSH1 0x20 000005c0: PUSH1 0x40 000005c2: MLOAD 000005c3: DUP1 000005c4: DUP4 000005c5: SUB 000005c6: DUP2 000005c7: DUP7 000005c8: GAS 000005c9: STATICCALL 000005ca: ISZERO 000005cb: DUP1 000005cc: ISZERO 000005cd: PUSH2 0x05da 000005d0: JUMPI 000005d1: RETURNDATASIZE 000005d2: PUSH1 0x00 000005d4: DUP1 000005d5: RETURNDATACOPY 000005d6: RETURNDATASIZE 000005d7: PUSH1 0x00 000005d9: REVERT 000005da: JUMPDEST 000005db: POP 000005dc: POP 000005dd: POP 000005de: POP 000005df: PUSH1 0x40 000005e1: MLOAD 000005e2: RETURNDATASIZE 000005e3: PUSH1 0x1f 000005e5: NOT 000005e6: PUSH1 0x1f 000005e8: DUP3 000005e9: ADD 000005ea: AND 000005eb: DUP3 000005ec: ADD 000005ed: DUP1 000005ee: PUSH1 0x40 000005f0: MSTORE 000005f1: POP 000005f2: DUP2 000005f3: ADD 000005f4: SWAP1 000005f5: PUSH2 0x05fe 000005f8: SWAP2 000005f9: SWAP1 000005fa: PUSH2 0x1f82 000005fd: JUMP 000005fe: JUMPDEST 000005ff: PUSH2 0x0608 00000602: SWAP1 00000603: DUP3 00000604: PUSH2 0x1fb1 00000607: JUMP 00000608: JUMPDEST 00000609: SWAP1 0000060a: POP 0000060b: PUSH1 0x07 0000060d: SLOAD 0000060e: PUSH1 0x00 00000610: EQ 00000611: PUSH2 0x0638 00000614: JUMPI 00000615: PUSH1 0x07 00000617: SLOAD 00000618: PUSH2 0x0629 0000061b: PUSH8 0x0de0b6b3a7640000 00000624: DUP4 00000625: PUSH2 0x1fc9 00000628: JUMP 00000629: JUMPDEST 0000062a: PUSH2 0x0633 0000062d: SWAP2 0000062e: SWAP1 0000062f: PUSH2 0x1fe8 00000632: JUMP 00000633: JUMPDEST 00000634: PUSH2 0x0642 00000637: JUMP 00000638: JUMPDEST 00000639: PUSH8 0x0de0b6b3a7640000 00000642: JUMPDEST 00000643: SWAP2 00000644: POP 00000645: POP 00000646: SWAP1 00000647: JUMP 00000648: JUMPDEST 00000649: PUSH1 0x00 0000064b: DUP3 0000064c: DUP2 0000064d: MSTORE 0000064e: PUSH1 0x01 00000650: PUSH1 0x20 00000652: DUP2 00000653: SWAP1 00000654: MSTORE 00000655: PUSH1 0x40 00000657: SWAP1 00000658: SWAP2 00000659: KECCAK256 0000065a: ADD 0000065b: SLOAD 0000065c: PUSH2 0x0665 0000065f: DUP2 00000660: CALLER 00000661: PUSH2 0x1609 00000664: JUMP 00000665: JUMPDEST 00000666: PUSH2 0x066f 00000669: DUP4 0000066a: DUP4 0000066b: PUSH2 0x166d 0000066e: JUMP 0000066f: JUMPDEST 00000670: POP 00000671: POP 00000672: POP 00000673: JUMP 00000674: JUMPDEST 00000675: PUSH1 0x00 00000677: PUSH1 0x02 00000679: PUSH1 0x00 0000067b: SLOAD 0000067c: EQ 0000067d: ISZERO 0000067e: PUSH2 0x0699 00000681: JUMPI 00000682: PUSH1 0x40 00000684: MLOAD 00000685: PUSH3 0x461bcd 00000689: PUSH1 0xe5 0000068b: SHL 0000068c: DUP2 0000068d: MSTORE 0000068e: PUSH1 0x04 00000690: ADD 00000691: PUSH2 0x04b0 00000694: SWAP1 00000695: PUSH2 0x1f27 00000698: JUMP 00000699: JUMPDEST 0000069a: PUSH1 0x02 0000069c: PUSH1 0x00 0000069e: SSTORE 0000069f: PUSH32 0x2561bf26f818282a3be40719542054d2173eb0d38539e8a8d3cff22f29fd2384 000006c0: PUSH2 0x06c9 000006c3: DUP2 000006c4: CALLER 000006c5: PUSH2 0x1609 000006c8: JUMP 000006c9: JUMPDEST 000006ca: PUSH8 0x0de0b6b3a7640000 000006d3: DUP4 000006d4: LT 000006d5: ISZERO 000006d6: PUSH2 0x06f1 000006d9: JUMPI 000006da: PUSH1 0x40 000006dc: MLOAD 000006dd: PUSH3 0x461bcd 000006e1: PUSH1 0xe5 000006e3: SHL 000006e4: DUP2 000006e5: MSTORE 000006e6: PUSH1 0x04 000006e8: ADD 000006e9: PUSH2 0x04b0 000006ec: SWAP1 000006ed: PUSH2 0x200a 000006f0: JUMP 000006f1: JUMPDEST 000006f2: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 00000713: PUSH1 0x01 00000715: PUSH1 0x01 00000717: PUSH1 0xa0 00000719: SHL 0000071a: SUB 0000071b: AND 0000071c: PUSH4 0x2a4e051b 00000721: PUSH1 0x40 00000723: MLOAD 00000724: DUP2 00000725: PUSH4 0xffffffff 0000072a: AND 0000072b: PUSH1 0xe0 0000072d: SHL 0000072e: DUP2 0000072f: MSTORE 00000730: PUSH1 0x04 00000732: ADD 00000733: PUSH1 0x00 00000735: PUSH1 0x40 00000737: MLOAD 00000738: DUP1 00000739: DUP4 0000073a: SUB 0000073b: DUP2 0000073c: PUSH1 0x00 0000073e: DUP8 0000073f: DUP1 00000740: EXTCODESIZE 00000741: ISZERO 00000742: DUP1 00000743: ISZERO 00000744: PUSH2 0x074c 00000747: JUMPI 00000748: PUSH1 0x00 0000074a: DUP1 0000074b: REVERT 0000074c: JUMPDEST 0000074d: POP 0000074e: GAS 0000074f: CALL 00000750: ISZERO 00000751: DUP1 00000752: ISZERO 00000753: PUSH2 0x0760 00000756: JUMPI 00000757: RETURNDATASIZE 00000758: PUSH1 0x00 0000075a: DUP1 0000075b: RETURNDATACOPY 0000075c: RETURNDATASIZE 0000075d: PUSH1 0x00 0000075f: REVERT 00000760: JUMPDEST 00000761: POP 00000762: POP 00000763: POP 00000764: POP 00000765: PUSH2 0x076d 00000768: DUP5 00000769: PUSH2 0x16d8 0000076c: JUMP 0000076d: JUMPDEST 0000076e: PUSH1 0x40 00000770: MLOAD 00000771: PUSH4 0x0cacd001 00000776: PUSH1 0xe1 00000778: SHL 00000779: DUP2 0000077a: MSTORE 0000077b: PUSH1 0x00 0000077d: SWAP1 0000077e: PUSH1 0x01 00000780: PUSH1 0x01 00000782: PUSH1 0xa0 00000784: SHL 00000785: SUB 00000786: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 000007a7: AND 000007a8: SWAP1 000007a9: PUSH4 0x1959a002 000007ae: SWAP1 000007af: PUSH2 0x07bc 000007b2: SWAP1 000007b3: ADDRESS 000007b4: SWAP1 000007b5: PUSH1 0x04 000007b7: ADD 000007b8: PUSH2 0x1e24 000007bb: JUMP 000007bc: JUMPDEST 000007bd: PUSH1 0x40 000007bf: DUP1 000007c0: MLOAD 000007c1: DUP1 000007c2: DUP4 000007c3: SUB 000007c4: DUP2 000007c5: DUP7 000007c6: GAS 000007c7: STATICCALL 000007c8: ISZERO 000007c9: DUP1 000007ca: ISZERO 000007cb: PUSH2 0x07d8 000007ce: JUMPI 000007cf: RETURNDATASIZE 000007d0: PUSH1 0x00 000007d2: DUP1 000007d3: RETURNDATACOPY 000007d4: RETURNDATASIZE 000007d5: PUSH1 0x00 000007d7: REVERT 000007d8: JUMPDEST 000007d9: POP 000007da: POP 000007db: POP 000007dc: POP 000007dd: PUSH1 0x40 000007df: MLOAD 000007e0: RETURNDATASIZE 000007e1: PUSH1 0x1f 000007e3: NOT 000007e4: PUSH1 0x1f 000007e6: DUP3 000007e7: ADD 000007e8: AND 000007e9: DUP3 000007ea: ADD 000007eb: DUP1 000007ec: PUSH1 0x40 000007ee: MSTORE 000007ef: POP 000007f0: DUP2 000007f1: ADD 000007f2: SWAP1 000007f3: PUSH2 0x07fc 000007f6: SWAP2 000007f7: SWAP1 000007f8: PUSH2 0x1f5e 000007fb: JUMP 000007fc: JUMPDEST 000007fd: POP 000007fe: SWAP1 000007ff: POP 00000800: PUSH2 0x0834 00000803: PUSH1 0x01 00000805: PUSH1 0x01 00000807: PUSH1 0xa0 00000809: SHL 0000080a: SUB 0000080b: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9 0000082c: AND 0000082d: CALLER 0000082e: ADDRESS 0000082f: DUP8 00000830: PUSH2 0x172d 00000833: JUMP 00000834: JUMPDEST 00000835: PUSH1 0x00 00000837: PUSH1 0x07 00000839: SLOAD 0000083a: PUSH1 0x00 0000083c: EQ 0000083d: PUSH2 0x087d 00000840: JUMPI 00000841: DUP2 00000842: PUSH1 0x07 00000844: SLOAD 00000845: DUP7 00000846: PUSH2 0x084f 00000849: SWAP2 0000084a: SWAP1 0000084b: PUSH2 0x1fc9 0000084e: JUMP 0000084f: JUMPDEST 00000850: PUSH2 0x0859 00000853: SWAP2 00000854: SWAP1 00000855: PUSH2 0x1fe8 00000858: JUMP 00000859: JUMPDEST 0000085a: SWAP1 0000085b: POP 0000085c: DUP1 0000085d: PUSH2 0x0878 00000860: JUMPI 00000861: PUSH1 0x40 00000863: MLOAD 00000864: PUSH3 0x461bcd 00000868: PUSH1 0xe5 0000086a: SHL 0000086b: DUP2 0000086c: MSTORE 0000086d: PUSH1 0x04 0000086f: ADD 00000870: PUSH2 0x04b0 00000873: SWAP1 00000874: PUSH2 0x204b 00000877: JUMP 00000878: JUMPDEST 00000879: PUSH2 0x0880 0000087c: JUMP 0000087d: JUMPDEST 0000087e: POP 0000087f: DUP4 00000880: JUMPDEST 00000881: PUSH1 0x01 00000883: PUSH1 0x01 00000885: PUSH1 0xa0 00000887: SHL 00000888: SUB 00000889: DUP7 0000088a: AND 0000088b: PUSH1 0x00 0000088d: SWAP1 0000088e: DUP2 0000088f: MSTORE 00000890: PUSH1 0x08 00000892: PUSH1 0x20 00000894: MSTORE 00000895: PUSH1 0x40 00000897: DUP2 00000898: KECCAK256 00000899: DUP1 0000089a: SLOAD 0000089b: DUP4 0000089c: SWAP3 0000089d: SWAP1 0000089e: PUSH2 0x08a8 000008a1: SWAP1 000008a2: DUP5 000008a3: SWAP1 000008a4: PUSH2 0x1fb1 000008a7: JUMP 000008a8: JUMPDEST 000008a9: SWAP3 000008aa: POP 000008ab: POP 000008ac: DUP2 000008ad: SWAP1 000008ae: SSTORE 000008af: POP 000008b0: DUP1 000008b1: PUSH1 0x07 000008b3: PUSH1 0x00 000008b5: DUP3 000008b6: DUP3 000008b7: SLOAD 000008b8: PUSH2 0x08c1 000008bb: SWAP2 000008bc: SWAP1 000008bd: PUSH2 0x1fb1 000008c0: JUMP 000008c1: JUMPDEST 000008c2: SWAP1 000008c3: SWAP2 000008c4: SSTORE 000008c5: POP 000008c6: PUSH2 0x08f1 000008c9: SWAP1 000008ca: POP 000008cb: DUP6 000008cc: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 000008ed: PUSH2 0x179e 000008f0: JUMP 000008f1: JUMPDEST 000008f2: PUSH1 0x40 000008f4: MLOAD 000008f5: PUSH4 0xb6b55f25 000008fa: PUSH1 0xe0 000008fc: SHL 000008fd: DUP2 000008fe: MSTORE 000008ff: PUSH1 0x04 00000901: DUP2 00000902: ADD 00000903: DUP7 00000904: SWAP1 00000905: MSTORE 00000906: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 00000927: PUSH1 0x01 00000929: PUSH1 0x01 0000092b: PUSH1 0xa0 0000092d: SHL 0000092e: SUB 0000092f: AND 00000930: SWAP1 00000931: PUSH4 0xb6b55f25 00000936: SWAP1 00000937: PUSH1 0x24 00000939: ADD 0000093a: PUSH1 0x00 0000093c: PUSH1 0x40 0000093e: MLOAD 0000093f: DUP1 00000940: DUP4 00000941: SUB 00000942: DUP2 00000943: PUSH1 0x00 00000945: DUP8 00000946: DUP1 00000947: EXTCODESIZE 00000948: ISZERO 00000949: DUP1 0000094a: ISZERO 0000094b: PUSH2 0x0953 0000094e: JUMPI 0000094f: PUSH1 0x00 00000951: DUP1 00000952: REVERT 00000953: JUMPDEST 00000954: POP 00000955: GAS 00000956: CALL 00000957: ISZERO 00000958: DUP1 00000959: ISZERO 0000095a: PUSH2 0x0967 0000095d: JUMPI 0000095e: RETURNDATASIZE 0000095f: PUSH1 0x00 00000961: DUP1 00000962: RETURNDATACOPY 00000963: RETURNDATASIZE 00000964: PUSH1 0x00 00000966: REVERT 00000967: JUMPDEST 00000968: POP 00000969: POP 0000096a: PUSH1 0x40 0000096c: DUP1 0000096d: MLOAD 0000096e: DUP9 0000096f: DUP2 00000970: MSTORE 00000971: PUSH1 0x00 00000973: PUSH1 0x20 00000975: DUP3 00000976: ADD 00000977: MSTORE 00000978: PUSH1 0x01 0000097a: PUSH1 0x01 0000097c: PUSH1 0xa0 0000097e: SHL 0000097f: SUB 00000980: DUP11 00000981: AND 00000982: SWAP4 00000983: POP 00000984: PUSH32 0x90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15 000009a5: SWAP3 000009a6: POP 000009a7: ADD 000009a8: PUSH1 0x40 000009aa: MLOAD 000009ab: DUP1 000009ac: SWAP2 000009ad: SUB 000009ae: SWAP1 000009af: LOG2 000009b0: PUSH1 0x01 000009b2: SWAP4 000009b3: POP 000009b4: POP 000009b5: POP 000009b6: POP 000009b7: PUSH1 0x01 000009b9: PUSH1 0x00 000009bb: SSTORE 000009bc: SWAP3 000009bd: SWAP2 000009be: POP 000009bf: POP 000009c0: JUMP 000009c1: JUMPDEST 000009c2: PUSH1 0x01 000009c4: PUSH1 0x01 000009c6: PUSH1 0xa0 000009c8: SHL 000009c9: SUB 000009ca: DUP2 000009cb: AND 000009cc: CALLER 000009cd: EQ 000009ce: PUSH2 0x0a31 000009d1: JUMPI 000009d2: PUSH1 0x40 000009d4: MLOAD 000009d5: PUSH3 0x461bcd 000009d9: PUSH1 0xe5 000009db: SHL 000009dc: DUP2 000009dd: MSTORE 000009de: PUSH1 0x20 000009e0: PUSH1 0x04 000009e2: DUP3 000009e3: ADD 000009e4: MSTORE 000009e5: PUSH1 0x2f 000009e7: PUSH1 0x24 000009e9: DUP3 000009ea: ADD 000009eb: MSTORE 000009ec: PUSH32 0x416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365 00000a0d: PUSH1 0x44 00000a0f: DUP3 00000a10: ADD 00000a11: MSTORE 00000a12: PUSH15 0x103937b632b9903337b91039b2b633 00000a22: PUSH1 0x89 00000a24: SHL 00000a25: PUSH1 0x64 00000a27: DUP3 00000a28: ADD 00000a29: MSTORE 00000a2a: PUSH1 0x84 00000a2c: ADD 00000a2d: PUSH2 0x04b0 00000a30: JUMP 00000a31: JUMPDEST 00000a32: PUSH2 0x0a3b 00000a35: DUP3 00000a36: DUP3 00000a37: PUSH2 0x18cc 00000a3a: JUMP 00000a3b: JUMPDEST 00000a3c: POP 00000a3d: POP 00000a3e: JUMP 00000a3f: JUMPDEST 00000a40: PUSH1 0x02 00000a42: PUSH1 0x00 00000a44: SLOAD 00000a45: EQ 00000a46: ISZERO 00000a47: PUSH2 0x0a62 00000a4a: JUMPI 00000a4b: PUSH1 0x40 00000a4d: MLOAD 00000a4e: PUSH3 0x461bcd 00000a52: PUSH1 0xe5 00000a54: SHL 00000a55: DUP2 00000a56: MSTORE 00000a57: PUSH1 0x04 00000a59: ADD 00000a5a: PUSH2 0x04b0 00000a5d: SWAP1 00000a5e: PUSH2 0x1f27 00000a61: JUMP 00000a62: JUMPDEST 00000a63: PUSH1 0x02 00000a65: PUSH1 0x00 00000a67: SSTORE 00000a68: DUP2 00000a69: ISZERO 00000a6a: DUP1 00000a6b: ISZERO 00000a6c: SWAP1 00000a6d: PUSH2 0x0a85 00000a70: JUMPI 00000a71: POP 00000a72: CALLER 00000a73: PUSH1 0x00 00000a75: SWAP1 00000a76: DUP2 00000a77: MSTORE 00000a78: PUSH1 0x08 00000a7a: PUSH1 0x20 00000a7c: MSTORE 00000a7d: PUSH1 0x40 00000a7f: SWAP1 00000a80: KECCAK256 00000a81: SLOAD 00000a82: DUP3 00000a83: GT 00000a84: ISZERO 00000a85: JUMPDEST 00000a86: PUSH2 0x0af0 00000a89: JUMPI 00000a8a: PUSH1 0x40 00000a8c: MLOAD 00000a8d: PUSH3 0x461bcd 00000a91: PUSH1 0xe5 00000a93: SHL 00000a94: DUP2 00000a95: MSTORE 00000a96: PUSH1 0x20 00000a98: PUSH1 0x04 00000a9a: DUP3 00000a9b: ADD 00000a9c: MSTORE 00000a9d: PUSH1 0x36 00000a9f: PUSH1 0x24 00000aa1: DUP3 00000aa2: ADD 00000aa3: MSTORE 00000aa4: PUSH32 0x57697468647261773a2053686172657320657175616c20746f2030206f72206c 00000ac5: PUSH1 0x44 00000ac7: DUP3 00000ac8: ADD 00000ac9: MSTORE 00000aca: PUSH22 0x6172676572207468616e207573657220736861726573 00000ae1: PUSH1 0x50 00000ae3: SHL 00000ae4: PUSH1 0x64 00000ae6: DUP3 00000ae7: ADD 00000ae8: MSTORE 00000ae9: PUSH1 0x84 00000aeb: ADD 00000aec: PUSH2 0x04b0 00000aef: JUMP 00000af0: JUMPDEST 00000af1: PUSH2 0x0afa 00000af4: DUP3 00000af5: DUP3 00000af6: PUSH2 0x1344 00000af9: JUMP 00000afa: JUMPDEST 00000afb: POP 00000afc: POP 00000afd: PUSH1 0x01 00000aff: PUSH1 0x00 00000b01: SSTORE 00000b02: JUMP 00000b03: JUMPDEST 00000b04: PUSH1 0x02 00000b06: PUSH1 0x00 00000b08: SLOAD 00000b09: EQ 00000b0a: ISZERO 00000b0b: PUSH2 0x0b26 00000b0e: JUMPI 00000b0f: PUSH1 0x40 00000b11: MLOAD 00000b12: PUSH3 0x461bcd 00000b16: PUSH1 0xe5 00000b18: SHL 00000b19: DUP2 00000b1a: MSTORE 00000b1b: PUSH1 0x04 00000b1d: ADD 00000b1e: PUSH2 0x04b0 00000b21: SWAP1 00000b22: PUSH2 0x1f27 00000b25: JUMP 00000b26: JUMPDEST 00000b27: PUSH1 0x02 00000b29: PUSH1 0x00 00000b2b: DUP2 00000b2c: SWAP1 00000b2d: SSTORE 00000b2e: POP 00000b2f: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 00000b50: PUSH1 0x01 00000b52: PUSH1 0x01 00000b54: PUSH1 0xa0 00000b56: SHL 00000b57: SUB 00000b58: AND 00000b59: PUSH4 0x2a4e051b 00000b5e: PUSH1 0x40 00000b60: MLOAD 00000b61: DUP2 00000b62: PUSH4 0xffffffff 00000b67: AND 00000b68: PUSH1 0xe0 00000b6a: SHL 00000b6b: DUP2 00000b6c: MSTORE 00000b6d: PUSH1 0x04 00000b6f: ADD 00000b70: PUSH1 0x00 00000b72: PUSH1 0x40 00000b74: MLOAD 00000b75: DUP1 00000b76: DUP4 00000b77: SUB 00000b78: DUP2 00000b79: PUSH1 0x00 00000b7b: DUP8 00000b7c: DUP1 00000b7d: EXTCODESIZE 00000b7e: ISZERO 00000b7f: DUP1 00000b80: ISZERO 00000b81: PUSH2 0x0b89 00000b84: JUMPI 00000b85: PUSH1 0x00 00000b87: DUP1 00000b88: REVERT 00000b89: JUMPDEST 00000b8a: POP 00000b8b: GAS 00000b8c: CALL 00000b8d: ISZERO 00000b8e: DUP1 00000b8f: ISZERO 00000b90: PUSH2 0x0b9d 00000b93: JUMPI 00000b94: RETURNDATASIZE 00000b95: PUSH1 0x00 00000b97: DUP1 00000b98: RETURNDATACOPY 00000b99: RETURNDATASIZE 00000b9a: PUSH1 0x00 00000b9c: REVERT 00000b9d: JUMPDEST 00000b9e: POP 00000b9f: POP 00000ba0: POP 00000ba1: POP 00000ba2: PUSH2 0x0baa 00000ba5: CALLER 00000ba6: PUSH2 0x16d8 00000ba9: JUMP 00000baa: JUMPDEST 00000bab: CALLER 00000bac: PUSH1 0x00 00000bae: SWAP1 00000baf: DUP2 00000bb0: MSTORE 00000bb1: PUSH1 0x08 00000bb3: PUSH1 0x20 00000bb5: MSTORE 00000bb6: PUSH1 0x40 00000bb8: SWAP1 00000bb9: KECCAK256 00000bba: PUSH1 0x02 00000bbc: ADD 00000bbd: SLOAD 00000bbe: DUP1 00000bbf: PUSH2 0x0c16 00000bc2: JUMPI 00000bc3: PUSH1 0x40 00000bc5: MLOAD 00000bc6: PUSH3 0x461bcd 00000bca: PUSH1 0xe5 00000bcc: SHL 00000bcd: DUP2 00000bce: MSTORE 00000bcf: PUSH1 0x20 00000bd1: PUSH1 0x04 00000bd3: DUP3 00000bd4: ADD 00000bd5: MSTORE 00000bd6: PUSH1 0x24 00000bd8: DUP1 00000bd9: DUP3 00000bda: ADD 00000bdb: MSTORE 00000bdc: PUSH32 0x486172766573743a2050656e64696e672072657761726473206d757374206265 00000bfd: PUSH1 0x44 00000bff: DUP3 00000c00: ADD 00000c01: MSTORE 00000c02: PUSH4 0x0203e203 00000c07: PUSH1 0xe4 00000c09: SHL 00000c0a: PUSH1 0x64 00000c0c: DUP3 00000c0d: ADD 00000c0e: MSTORE 00000c0f: PUSH1 0x84 00000c11: ADD 00000c12: PUSH2 0x04b0 00000c15: JUMP 00000c16: JUMPDEST 00000c17: CALLER 00000c18: PUSH1 0x00 00000c1a: DUP2 00000c1b: DUP2 00000c1c: MSTORE 00000c1d: PUSH1 0x08 00000c1f: PUSH1 0x20 00000c21: MSTORE 00000c22: PUSH1 0x40 00000c24: DUP2 00000c25: KECCAK256 00000c26: PUSH1 0x02 00000c28: ADD 00000c29: SSTORE 00000c2a: PUSH2 0x0c5e 00000c2d: SWAP1 00000c2e: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000c4f: PUSH1 0x01 00000c51: PUSH1 0x01 00000c53: PUSH1 0xa0 00000c55: SHL 00000c56: SUB 00000c57: AND 00000c58: SWAP1 00000c59: DUP4 00000c5a: PUSH2 0x1933 00000c5d: JUMP 00000c5e: JUMPDEST 00000c5f: PUSH1 0x40 00000c61: MLOAD 00000c62: DUP2 00000c63: DUP2 00000c64: MSTORE 00000c65: CALLER 00000c66: SWAP1 00000c67: PUSH32 0xc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba 00000c88: SWAP1 00000c89: PUSH1 0x20 00000c8b: ADD 00000c8c: PUSH1 0x40 00000c8e: MLOAD 00000c8f: DUP1 00000c90: SWAP2 00000c91: SUB 00000c92: SWAP1 00000c93: LOG2 00000c94: POP 00000c95: PUSH1 0x01 00000c97: PUSH1 0x00 00000c99: SSTORE 00000c9a: JUMP 00000c9b: JUMPDEST 00000c9c: PUSH1 0x00 00000c9e: SWAP2 00000c9f: DUP3 00000ca0: MSTORE 00000ca1: PUSH1 0x01 00000ca3: PUSH1 0x20 00000ca5: SWAP1 00000ca6: DUP2 00000ca7: MSTORE 00000ca8: PUSH1 0x40 00000caa: DUP1 00000cab: DUP5 00000cac: KECCAK256 00000cad: PUSH1 0x01 00000caf: PUSH1 0x01 00000cb1: PUSH1 0xa0 00000cb3: SHL 00000cb4: SUB 00000cb5: SWAP4 00000cb6: SWAP1 00000cb7: SWAP4 00000cb8: AND 00000cb9: DUP5 00000cba: MSTORE 00000cbb: SWAP2 00000cbc: SWAP1 00000cbd: MSTORE 00000cbe: SWAP1 00000cbf: KECCAK256 00000cc0: SLOAD 00000cc1: PUSH1 0xff 00000cc3: AND 00000cc4: SWAP1 00000cc5: JUMP 00000cc6: JUMPDEST 00000cc7: PUSH32 0xd139c7f3a5460f246794bd24bff3478b49114f682a7cc4513889d72531631b96 00000ce8: PUSH2 0x0cf1 00000ceb: DUP2 00000cec: CALLER 00000ced: PUSH2 0x1609 00000cf0: JUMP 00000cf1: JUMPDEST 00000cf2: PUSH1 0x05 00000cf4: SLOAD 00000cf5: NUMBER 00000cf6: LT 00000cf7: PUSH2 0x0d0c 00000cfa: JUMPI 00000cfb: PUSH2 0x0d04 00000cfe: DUP3 00000cff: DUP5 00000d00: PUSH2 0x1fe8 00000d03: JUMP 00000d04: JUMPDEST 00000d05: PUSH1 0x02 00000d07: SSTORE 00000d08: PUSH2 0x0d40 00000d0b: JUMP 00000d0c: JUMPDEST 00000d0d: DUP2 00000d0e: PUSH1 0x02 00000d10: SLOAD 00000d11: NUMBER 00000d12: PUSH1 0x05 00000d14: SLOAD 00000d15: PUSH2 0x0d1e 00000d18: SWAP2 00000d19: SWAP1 00000d1a: PUSH2 0x2072 00000d1d: JUMP 00000d1e: JUMPDEST 00000d1f: PUSH2 0x0d28 00000d22: SWAP2 00000d23: SWAP1 00000d24: PUSH2 0x1fc9 00000d27: JUMP 00000d28: JUMPDEST 00000d29: PUSH2 0x0d32 00000d2c: SWAP1 00000d2d: DUP6 00000d2e: PUSH2 0x1fb1 00000d31: JUMP 00000d32: JUMPDEST 00000d33: PUSH2 0x0d3c 00000d36: SWAP2 00000d37: SWAP1 00000d38: PUSH2 0x1fe8 00000d3b: JUMP 00000d3c: JUMPDEST 00000d3d: PUSH1 0x02 00000d3f: SSTORE 00000d40: JUMPDEST 00000d41: NUMBER 00000d42: PUSH1 0x04 00000d44: DUP2 00000d45: SWAP1 00000d46: SSTORE 00000d47: PUSH2 0x0d51 00000d4a: SWAP1 00000d4b: DUP4 00000d4c: SWAP1 00000d4d: PUSH2 0x1fb1 00000d50: JUMP 00000d51: JUMPDEST 00000d52: PUSH1 0x05 00000d54: SSTORE 00000d55: PUSH1 0x02 00000d57: SLOAD 00000d58: PUSH1 0x40 00000d5a: DUP1 00000d5b: MLOAD 00000d5c: DUP5 00000d5d: DUP2 00000d5e: MSTORE 00000d5f: PUSH1 0x20 00000d61: DUP2 00000d62: ADD 00000d63: SWAP3 00000d64: SWAP1 00000d65: SWAP3 00000d66: MSTORE 00000d67: DUP2 00000d68: ADD 00000d69: DUP5 00000d6a: SWAP1 00000d6b: MSTORE 00000d6c: PUSH32 0x55b4fa63fe43865f67b4f2c4a4df1cf9e6c1f85767211b44b45cf4649b2c2b51 00000d8d: SWAP1 00000d8e: PUSH1 0x60 00000d90: ADD 00000d91: PUSH1 0x40 00000d93: MLOAD 00000d94: DUP1 00000d95: SWAP2 00000d96: SUB 00000d97: SWAP1 00000d98: LOG1 00000d99: POP 00000d9a: POP 00000d9b: POP 00000d9c: JUMP 00000d9d: JUMPDEST 00000d9e: PUSH1 0x02 00000da0: PUSH1 0x00 00000da2: SLOAD 00000da3: EQ 00000da4: ISZERO 00000da5: PUSH2 0x0dc0 00000da8: JUMPI 00000da9: PUSH1 0x40 00000dab: MLOAD 00000dac: PUSH3 0x461bcd 00000db0: PUSH1 0xe5 00000db2: SHL 00000db3: DUP2 00000db4: MSTORE 00000db5: PUSH1 0x04 00000db7: ADD 00000db8: PUSH2 0x04b0 00000dbb: SWAP1 00000dbc: PUSH2 0x1f27 00000dbf: JUMP 00000dc0: JUMPDEST 00000dc1: PUSH1 0x02 00000dc3: PUSH1 0x00 00000dc5: SSTORE 00000dc6: PUSH8 0x0de0b6b3a7640000 00000dcf: DUP3 00000dd0: LT 00000dd1: ISZERO 00000dd2: PUSH2 0x0ded 00000dd5: JUMPI 00000dd6: PUSH1 0x40 00000dd8: MLOAD 00000dd9: PUSH3 0x461bcd 00000ddd: PUSH1 0xe5 00000ddf: SHL 00000de0: DUP2 00000de1: MSTORE 00000de2: PUSH1 0x04 00000de4: ADD 00000de5: PUSH2 0x04b0 00000de8: SWAP1 00000de9: PUSH2 0x200a 00000dec: JUMP 00000ded: JUMPDEST 00000dee: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 00000e0f: PUSH1 0x01 00000e11: PUSH1 0x01 00000e13: PUSH1 0xa0 00000e15: SHL 00000e16: SUB 00000e17: AND 00000e18: PUSH4 0x2a4e051b 00000e1d: PUSH1 0x40 00000e1f: MLOAD 00000e20: DUP2 00000e21: PUSH4 0xffffffff 00000e26: AND 00000e27: PUSH1 0xe0 00000e29: SHL 00000e2a: DUP2 00000e2b: MSTORE 00000e2c: PUSH1 0x04 00000e2e: ADD 00000e2f: PUSH1 0x00 00000e31: PUSH1 0x40 00000e33: MLOAD 00000e34: DUP1 00000e35: DUP4 00000e36: SUB 00000e37: DUP2 00000e38: PUSH1 0x00 00000e3a: DUP8 00000e3b: DUP1 00000e3c: EXTCODESIZE 00000e3d: ISZERO 00000e3e: DUP1 00000e3f: ISZERO 00000e40: PUSH2 0x0e48 00000e43: JUMPI 00000e44: PUSH1 0x00 00000e46: DUP1 00000e47: REVERT 00000e48: JUMPDEST 00000e49: POP 00000e4a: GAS 00000e4b: CALL 00000e4c: ISZERO 00000e4d: DUP1 00000e4e: ISZERO 00000e4f: PUSH2 0x0e5c 00000e52: JUMPI 00000e53: RETURNDATASIZE 00000e54: PUSH1 0x00 00000e56: DUP1 00000e57: RETURNDATACOPY 00000e58: RETURNDATASIZE 00000e59: PUSH1 0x00 00000e5b: REVERT 00000e5c: JUMPDEST 00000e5d: POP 00000e5e: POP 00000e5f: POP 00000e60: POP 00000e61: PUSH2 0x0e69 00000e64: CALLER 00000e65: PUSH2 0x16d8 00000e68: JUMP 00000e69: JUMPDEST 00000e6a: PUSH1 0x40 00000e6c: MLOAD 00000e6d: PUSH4 0x0cacd001 00000e72: PUSH1 0xe1 00000e74: SHL 00000e75: DUP2 00000e76: MSTORE 00000e77: PUSH1 0x00 00000e79: SWAP1 00000e7a: PUSH1 0x01 00000e7c: PUSH1 0x01 00000e7e: PUSH1 0xa0 00000e80: SHL 00000e81: SUB 00000e82: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 00000ea3: AND 00000ea4: SWAP1 00000ea5: PUSH4 0x1959a002 00000eaa: SWAP1 00000eab: PUSH2 0x0eb8 00000eae: SWAP1 00000eaf: ADDRESS 00000eb0: SWAP1 00000eb1: PUSH1 0x04 00000eb3: ADD 00000eb4: PUSH2 0x1e24 00000eb7: JUMP 00000eb8: JUMPDEST 00000eb9: PUSH1 0x40 00000ebb: DUP1 00000ebc: MLOAD 00000ebd: DUP1 00000ebe: DUP4 00000ebf: SUB 00000ec0: DUP2 00000ec1: DUP7 00000ec2: GAS 00000ec3: STATICCALL 00000ec4: ISZERO 00000ec5: DUP1 00000ec6: ISZERO 00000ec7: PUSH2 0x0ed4 00000eca: JUMPI 00000ecb: RETURNDATASIZE 00000ecc: PUSH1 0x00 00000ece: DUP1 00000ecf: RETURNDATACOPY 00000ed0: RETURNDATASIZE 00000ed1: PUSH1 0x00 00000ed3: REVERT 00000ed4: JUMPDEST 00000ed5: POP 00000ed6: POP 00000ed7: POP 00000ed8: POP 00000ed9: PUSH1 0x40 00000edb: MLOAD 00000edc: RETURNDATASIZE 00000edd: PUSH1 0x1f 00000edf: NOT 00000ee0: PUSH1 0x1f 00000ee2: DUP3 00000ee3: ADD 00000ee4: AND 00000ee5: DUP3 00000ee6: ADD 00000ee7: DUP1 00000ee8: PUSH1 0x40 00000eea: MSTORE 00000eeb: POP 00000eec: DUP2 00000eed: ADD 00000eee: SWAP1 00000eef: PUSH2 0x0ef8 00000ef2: SWAP2 00000ef3: SWAP1 00000ef4: PUSH2 0x1f5e 00000ef7: JUMP 00000ef8: JUMPDEST 00000ef9: POP 00000efa: SWAP1 00000efb: POP 00000efc: PUSH2 0x0f30 00000eff: PUSH1 0x01 00000f01: PUSH1 0x01 00000f03: PUSH1 0xa0 00000f05: SHL 00000f06: SUB 00000f07: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9 00000f28: AND 00000f29: CALLER 00000f2a: ADDRESS 00000f2b: DUP7 00000f2c: PUSH2 0x172d 00000f2f: JUMP 00000f30: JUMPDEST 00000f31: PUSH1 0x00 00000f33: PUSH1 0x07 00000f35: SLOAD 00000f36: PUSH1 0x00 00000f38: EQ 00000f39: PUSH2 0x0f79 00000f3c: JUMPI 00000f3d: DUP2 00000f3e: PUSH1 0x07 00000f40: SLOAD 00000f41: DUP6 00000f42: PUSH2 0x0f4b 00000f45: SWAP2 00000f46: SWAP1 00000f47: PUSH2 0x1fc9 00000f4a: JUMP 00000f4b: JUMPDEST 00000f4c: PUSH2 0x0f55 00000f4f: SWAP2 00000f50: SWAP1 00000f51: PUSH2 0x1fe8 00000f54: JUMP 00000f55: JUMPDEST 00000f56: SWAP1 00000f57: POP 00000f58: DUP1 00000f59: PUSH2 0x0f74 00000f5c: JUMPI 00000f5d: PUSH1 0x40 00000f5f: MLOAD 00000f60: PUSH3 0x461bcd 00000f64: PUSH1 0xe5 00000f66: SHL 00000f67: DUP2 00000f68: MSTORE 00000f69: PUSH1 0x04 00000f6b: ADD 00000f6c: PUSH2 0x04b0 00000f6f: SWAP1 00000f70: PUSH2 0x204b 00000f73: JUMP 00000f74: JUMPDEST 00000f75: PUSH2 0x0f7c 00000f78: JUMP 00000f79: JUMPDEST 00000f7a: POP 00000f7b: DUP3 00000f7c: JUMPDEST 00000f7d: CALLER 00000f7e: PUSH1 0x00 00000f80: SWAP1 00000f81: DUP2 00000f82: MSTORE 00000f83: PUSH1 0x08 00000f85: PUSH1 0x20 00000f87: MSTORE 00000f88: PUSH1 0x40 00000f8a: DUP2 00000f8b: KECCAK256 00000f8c: DUP1 00000f8d: SLOAD 00000f8e: DUP4 00000f8f: SWAP3 00000f90: SWAP1 00000f91: PUSH2 0x0f9b 00000f94: SWAP1 00000f95: DUP5 00000f96: SWAP1 00000f97: PUSH2 0x1fb1 00000f9a: JUMP 00000f9b: JUMPDEST 00000f9c: SWAP3 00000f9d: POP 00000f9e: POP 00000f9f: DUP2 00000fa0: SWAP1 00000fa1: SSTORE 00000fa2: POP 00000fa3: DUP1 00000fa4: PUSH1 0x07 00000fa6: PUSH1 0x00 00000fa8: DUP3 00000fa9: DUP3 00000faa: SLOAD 00000fab: PUSH2 0x0fb4 00000fae: SWAP2 00000faf: SWAP1 00000fb0: PUSH2 0x1fb1 00000fb3: JUMP 00000fb4: JUMPDEST 00000fb5: SWAP1 00000fb6: SWAP2 00000fb7: SSTORE 00000fb8: POP 00000fb9: PUSH1 0x00 00000fbb: SWAP1 00000fbc: POP 00000fbd: DUP4 00000fbe: ISZERO 00000fbf: PUSH2 0x1024 00000fc2: JUMPI 00000fc3: POP 00000fc4: CALLER 00000fc5: PUSH1 0x00 00000fc7: SWAP1 00000fc8: DUP2 00000fc9: MSTORE 00000fca: PUSH1 0x08 00000fcc: PUSH1 0x20 00000fce: MSTORE 00000fcf: PUSH1 0x40 00000fd1: SWAP1 00000fd2: KECCAK256 00000fd3: PUSH1 0x02 00000fd5: ADD 00000fd6: SLOAD 00000fd7: DUP1 00000fd8: ISZERO 00000fd9: PUSH2 0x1024 00000fdc: JUMPI 00000fdd: CALLER 00000fde: PUSH1 0x00 00000fe0: DUP2 00000fe1: DUP2 00000fe2: MSTORE 00000fe3: PUSH1 0x08 00000fe5: PUSH1 0x20 00000fe7: MSTORE 00000fe8: PUSH1 0x40 00000fea: DUP2 00000feb: KECCAK256 00000fec: PUSH1 0x02 00000fee: ADD 00000fef: SSTORE 00000ff0: PUSH2 0x1024 00000ff3: SWAP1 00000ff4: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001015: PUSH1 0x01 00001017: PUSH1 0x01 00001019: PUSH1 0xa0 0000101b: SHL 0000101c: SUB 0000101d: AND 0000101e: SWAP1 0000101f: DUP4 00001020: PUSH2 0x1933 00001023: JUMP 00001024: JUMPDEST 00001025: PUSH2 0x104e 00001028: DUP6 00001029: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 0000104a: PUSH2 0x179e 0000104d: JUMP 0000104e: JUMPDEST 0000104f: PUSH1 0x40 00001051: MLOAD 00001052: PUSH4 0xb6b55f25 00001057: PUSH1 0xe0 00001059: SHL 0000105a: DUP2 0000105b: MSTORE 0000105c: PUSH1 0x04 0000105e: DUP2 0000105f: ADD 00001060: DUP7 00001061: SWAP1 00001062: MSTORE 00001063: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 00001084: PUSH1 0x01 00001086: PUSH1 0x01 00001088: PUSH1 0xa0 0000108a: SHL 0000108b: SUB 0000108c: AND 0000108d: SWAP1 0000108e: PUSH4 0xb6b55f25 00001093: SWAP1 00001094: PUSH1 0x24 00001096: ADD 00001097: PUSH1 0x00 00001099: PUSH1 0x40 0000109b: MLOAD 0000109c: DUP1 0000109d: DUP4 0000109e: SUB 0000109f: DUP2 000010a0: PUSH1 0x00 000010a2: DUP8 000010a3: DUP1 000010a4: EXTCODESIZE 000010a5: ISZERO 000010a6: DUP1 000010a7: ISZERO 000010a8: PUSH2 0x10b0 000010ab: JUMPI 000010ac: PUSH1 0x00 000010ae: DUP1 000010af: REVERT 000010b0: JUMPDEST 000010b1: POP 000010b2: GAS 000010b3: CALL 000010b4: ISZERO 000010b5: DUP1 000010b6: ISZERO 000010b7: PUSH2 0x10c4 000010ba: JUMPI 000010bb: RETURNDATASIZE 000010bc: PUSH1 0x00 000010be: DUP1 000010bf: RETURNDATACOPY 000010c0: RETURNDATASIZE 000010c1: PUSH1 0x00 000010c3: REVERT 000010c4: JUMPDEST 000010c5: POP 000010c6: POP 000010c7: PUSH1 0x40 000010c9: DUP1 000010ca: MLOAD 000010cb: DUP9 000010cc: DUP2 000010cd: MSTORE 000010ce: PUSH1 0x20 000010d0: DUP2 000010d1: ADD 000010d2: DUP6 000010d3: SWAP1 000010d4: MSTORE 000010d5: CALLER 000010d6: SWAP4 000010d7: POP 000010d8: PUSH32 0x90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15 000010f9: SWAP3 000010fa: POP 000010fb: ADD 000010fc: PUSH1 0x40 000010fe: MLOAD 000010ff: DUP1 00001100: SWAP2 00001101: SUB 00001102: SWAP1 00001103: LOG2 00001104: POP 00001105: POP 00001106: PUSH1 0x01 00001108: PUSH1 0x00 0000110a: SSTORE 0000110b: POP 0000110c: POP 0000110d: POP 0000110e: JUMP 0000110f: JUMPDEST 00001110: PUSH1 0x00 00001112: PUSH2 0x1119 00001115: PUSH2 0x1963 00001118: JUMP 00001119: JUMPDEST 0000111a: SWAP1 0000111b: POP 0000111c: SWAP1 0000111d: JUMP 0000111e: JUMPDEST 0000111f: PUSH1 0x00 00001121: DUP3 00001122: DUP2 00001123: MSTORE 00001124: PUSH1 0x01 00001126: PUSH1 0x20 00001128: DUP2 00001129: SWAP1 0000112a: MSTORE 0000112b: PUSH1 0x40 0000112d: SWAP1 0000112e: SWAP2 0000112f: KECCAK256 00001130: ADD 00001131: SLOAD 00001132: PUSH2 0x113b 00001135: DUP2 00001136: CALLER 00001137: PUSH2 0x1609 0000113a: JUMP 0000113b: JUMPDEST 0000113c: PUSH2 0x066f 0000113f: DUP4 00001140: DUP4 00001141: PUSH2 0x18cc 00001144: JUMP 00001145: JUMPDEST 00001146: PUSH1 0x00 00001148: DUP1 00001149: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 0000116a: PUSH1 0x01 0000116c: PUSH1 0x01 0000116e: PUSH1 0xa0 00001170: SHL 00001171: SUB 00001172: AND 00001173: PUSH4 0x1959a002 00001178: ADDRESS 00001179: PUSH1 0x40 0000117b: MLOAD 0000117c: DUP3 0000117d: PUSH4 0xffffffff 00001182: AND 00001183: PUSH1 0xe0 00001185: SHL 00001186: DUP2 00001187: MSTORE 00001188: PUSH1 0x04 0000118a: ADD 0000118b: PUSH2 0x1194 0000118e: SWAP2 0000118f: SWAP1 00001190: PUSH2 0x1e24 00001193: JUMP 00001194: JUMPDEST 00001195: PUSH1 0x40 00001197: DUP1 00001198: MLOAD 00001199: DUP1 0000119a: DUP4 0000119b: SUB 0000119c: DUP2 0000119d: DUP7 0000119e: GAS 0000119f: STATICCALL 000011a0: ISZERO 000011a1: DUP1 000011a2: ISZERO 000011a3: PUSH2 0x11b0 000011a6: JUMPI 000011a7: RETURNDATASIZE 000011a8: PUSH1 0x00 000011aa: DUP1 000011ab: RETURNDATACOPY 000011ac: RETURNDATASIZE 000011ad: PUSH1 0x00 000011af: REVERT 000011b0: JUMPDEST 000011b1: POP 000011b2: POP 000011b3: POP 000011b4: POP 000011b5: PUSH1 0x40 000011b7: MLOAD 000011b8: RETURNDATASIZE 000011b9: PUSH1 0x1f 000011bb: NOT 000011bc: PUSH1 0x1f 000011be: DUP3 000011bf: ADD 000011c0: AND 000011c1: DUP3 000011c2: ADD 000011c3: DUP1 000011c4: PUSH1 0x40 000011c6: MSTORE 000011c7: POP 000011c8: DUP2 000011c9: ADD 000011ca: SWAP1 000011cb: PUSH2 0x11d4 000011ce: SWAP2 000011cf: SWAP1 000011d0: PUSH2 0x1f5e 000011d3: JUMP 000011d4: JUMPDEST 000011d5: POP 000011d6: PUSH1 0x40 000011d8: MLOAD 000011d9: PUSH3 0x97aad1 000011dd: PUSH1 0xe4 000011df: SHL 000011e0: DUP2 000011e1: MSTORE 000011e2: SWAP1 000011e3: SWAP2 000011e4: POP 000011e5: PUSH1 0x01 000011e7: PUSH1 0x01 000011e9: PUSH1 0xa0 000011eb: SHL 000011ec: SUB 000011ed: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 0000120e: AND 0000120f: SWAP1 00001210: PUSH4 0x097aad10 00001215: SWAP1 00001216: PUSH2 0x1223 00001219: SWAP1 0000121a: ADDRESS 0000121b: SWAP1 0000121c: PUSH1 0x04 0000121e: ADD 0000121f: PUSH2 0x1e24 00001222: JUMP 00001223: JUMPDEST 00001224: PUSH1 0x20 00001226: PUSH1 0x40 00001228: MLOAD 00001229: DUP1 0000122a: DUP4 0000122b: SUB 0000122c: DUP2 0000122d: DUP7 0000122e: GAS 0000122f: STATICCALL 00001230: ISZERO 00001231: DUP1 00001232: ISZERO 00001233: PUSH2 0x1240 00001236: JUMPI 00001237: RETURNDATASIZE 00001238: PUSH1 0x00 0000123a: DUP1 0000123b: RETURNDATACOPY 0000123c: RETURNDATASIZE 0000123d: PUSH1 0x00 0000123f: REVERT 00001240: JUMPDEST 00001241: POP 00001242: POP 00001243: POP 00001244: POP 00001245: PUSH1 0x40 00001247: MLOAD 00001248: RETURNDATASIZE 00001249: PUSH1 0x1f 0000124b: NOT 0000124c: PUSH1 0x1f 0000124e: DUP3 0000124f: ADD 00001250: AND 00001251: DUP3 00001252: ADD 00001253: DUP1 00001254: PUSH1 0x40 00001256: MSTORE 00001257: POP 00001258: DUP2 00001259: ADD 0000125a: SWAP1 0000125b: PUSH2 0x1264 0000125e: SWAP2 0000125f: SWAP1 00001260: PUSH2 0x1f82 00001263: JUMP 00001264: JUMPDEST 00001265: PUSH2 0x126e 00001268: SWAP1 00001269: DUP3 0000126a: PUSH2 0x1fb1 0000126d: JUMP 0000126e: JUMPDEST 0000126f: PUSH1 0x01 00001271: PUSH1 0x01 00001273: PUSH1 0xa0 00001275: SHL 00001276: SUB 00001277: DUP5 00001278: AND 00001279: PUSH1 0x00 0000127b: SWAP1 0000127c: DUP2 0000127d: MSTORE 0000127e: PUSH1 0x08 00001280: PUSH1 0x20 00001282: MSTORE 00001283: PUSH1 0x40 00001285: SWAP1 00001286: KECCAK256 00001287: SLOAD 00001288: SWAP1 00001289: SWAP2 0000128a: POP 0000128b: ISZERO 0000128c: PUSH2 0x12c4 0000128f: JUMPI 00001290: PUSH1 0x07 00001292: SLOAD 00001293: PUSH1 0x01 00001295: PUSH1 0x01 00001297: PUSH1 0xa0 00001299: SHL 0000129a: SUB 0000129b: DUP5 0000129c: AND 0000129d: PUSH1 0x00 0000129f: SWAP1 000012a0: DUP2 000012a1: MSTORE 000012a2: PUSH1 0x08 000012a4: PUSH1 0x20 000012a6: MSTORE 000012a7: PUSH1 0x40 000012a9: SWAP1 000012aa: KECCAK256 000012ab: SLOAD 000012ac: PUSH2 0x12b5 000012af: SWAP1 000012b0: DUP4 000012b1: PUSH2 0x1fc9 000012b4: JUMP 000012b5: JUMPDEST 000012b6: PUSH2 0x12bf 000012b9: SWAP2 000012ba: SWAP1 000012bb: PUSH2 0x1fe8 000012be: JUMP 000012bf: JUMPDEST 000012c0: PUSH2 0x12c7 000012c3: JUMP 000012c4: JUMPDEST 000012c5: PUSH1 0x00 000012c7: JUMPDEST 000012c8: SWAP4 000012c9: SWAP3 000012ca: POP 000012cb: POP 000012cc: POP 000012cd: JUMP 000012ce: JUMPDEST 000012cf: PUSH1 0x01 000012d1: PUSH1 0x01 000012d3: PUSH1 0xa0 000012d5: SHL 000012d6: SUB 000012d7: DUP2 000012d8: AND 000012d9: PUSH1 0x00 000012db: SWAP1 000012dc: DUP2 000012dd: MSTORE 000012de: PUSH1 0x08 000012e0: PUSH1 0x20 000012e2: MSTORE 000012e3: PUSH1 0x40 000012e5: DUP2 000012e6: KECCAK256 000012e7: PUSH1 0x02 000012e9: DUP2 000012ea: ADD 000012eb: SLOAD 000012ec: PUSH1 0x01 000012ee: SWAP1 000012ef: SWAP2 000012f0: ADD 000012f1: SLOAD 000012f2: PUSH8 0x0de0b6b3a7640000 000012fb: SWAP1 000012fc: PUSH2 0x1303 000012ff: PUSH2 0x197a 00001302: JUMP 00001303: JUMPDEST 00001304: PUSH2 0x130d 00001307: SWAP2 00001308: SWAP1 00001309: PUSH2 0x2072 0000130c: JUMP 0000130d: JUMPDEST 0000130e: PUSH1 0x01 00001310: PUSH1 0x01 00001312: PUSH1 0xa0 00001314: SHL 00001315: SUB 00001316: DUP6 00001317: AND 00001318: PUSH1 0x00 0000131a: SWAP1 0000131b: DUP2 0000131c: MSTORE 0000131d: PUSH1 0x08 0000131f: PUSH1 0x20 00001321: MSTORE 00001322: PUSH1 0x40 00001324: SWAP1 00001325: KECCAK256 00001326: SLOAD 00001327: PUSH2 0x1330 0000132a: SWAP2 0000132b: SWAP1 0000132c: PUSH2 0x1fc9 0000132f: JUMP 00001330: JUMPDEST 00001331: PUSH2 0x133a 00001334: SWAP2 00001335: SWAP1 00001336: PUSH2 0x1fe8 00001339: JUMP 0000133a: JUMPDEST 0000133b: PUSH2 0x047c 0000133e: SWAP2 0000133f: SWAP1 00001340: PUSH2 0x1fb1 00001343: JUMP 00001344: JUMPDEST 00001345: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 00001366: PUSH1 0x01 00001368: PUSH1 0x01 0000136a: PUSH1 0xa0 0000136c: SHL 0000136d: SUB 0000136e: AND 0000136f: PUSH4 0x2a4e051b 00001374: PUSH1 0x40 00001376: MLOAD 00001377: DUP2 00001378: PUSH4 0xffffffff 0000137d: AND 0000137e: PUSH1 0xe0 00001380: SHL 00001381: DUP2 00001382: MSTORE 00001383: PUSH1 0x04 00001385: ADD 00001386: PUSH1 0x00 00001388: PUSH1 0x40 0000138a: MLOAD 0000138b: DUP1 0000138c: DUP4 0000138d: SUB 0000138e: DUP2 0000138f: PUSH1 0x00 00001391: DUP8 00001392: DUP1 00001393: EXTCODESIZE 00001394: ISZERO 00001395: DUP1 00001396: ISZERO 00001397: PUSH2 0x139f 0000139a: JUMPI 0000139b: PUSH1 0x00 0000139d: DUP1 0000139e: REVERT 0000139f: JUMPDEST 000013a0: POP 000013a1: GAS 000013a2: CALL 000013a3: ISZERO 000013a4: DUP1 000013a5: ISZERO 000013a6: PUSH2 0x13b3 000013a9: JUMPI 000013aa: RETURNDATASIZE 000013ab: PUSH1 0x00 000013ad: DUP1 000013ae: RETURNDATACOPY 000013af: RETURNDATASIZE 000013b0: PUSH1 0x00 000013b2: REVERT 000013b3: JUMPDEST 000013b4: POP 000013b5: POP 000013b6: POP 000013b7: POP 000013b8: PUSH2 0x13c0 000013bb: CALLER 000013bc: PUSH2 0x16d8 000013bf: JUMP 000013c0: JUMPDEST 000013c1: PUSH1 0x40 000013c3: MLOAD 000013c4: PUSH4 0x0cacd001 000013c9: PUSH1 0xe1 000013cb: SHL 000013cc: DUP2 000013cd: MSTORE 000013ce: PUSH1 0x00 000013d0: SWAP1 000013d1: PUSH1 0x01 000013d3: PUSH1 0x01 000013d5: PUSH1 0xa0 000013d7: SHL 000013d8: SUB 000013d9: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 000013fa: AND 000013fb: SWAP1 000013fc: PUSH4 0x1959a002 00001401: SWAP1 00001402: PUSH2 0x140f 00001405: SWAP1 00001406: ADDRESS 00001407: SWAP1 00001408: PUSH1 0x04 0000140a: ADD 0000140b: PUSH2 0x1e24 0000140e: JUMP 0000140f: JUMPDEST 00001410: PUSH1 0x40 00001412: DUP1 00001413: MLOAD 00001414: DUP1 00001415: DUP4 00001416: SUB 00001417: DUP2 00001418: DUP7 00001419: GAS 0000141a: STATICCALL 0000141b: ISZERO 0000141c: DUP1 0000141d: ISZERO 0000141e: PUSH2 0x142b 00001421: JUMPI 00001422: RETURNDATASIZE 00001423: PUSH1 0x00 00001425: DUP1 00001426: RETURNDATACOPY 00001427: RETURNDATASIZE 00001428: PUSH1 0x00 0000142a: REVERT 0000142b: JUMPDEST 0000142c: POP 0000142d: POP 0000142e: POP 0000142f: POP 00001430: PUSH1 0x40 00001432: MLOAD 00001433: RETURNDATASIZE 00001434: PUSH1 0x1f 00001436: NOT 00001437: PUSH1 0x1f 00001439: DUP3 0000143a: ADD 0000143b: AND 0000143c: DUP3 0000143d: ADD 0000143e: DUP1 0000143f: PUSH1 0x40 00001441: MSTORE 00001442: POP 00001443: DUP2 00001444: ADD 00001445: SWAP1 00001446: PUSH2 0x144f 00001449: SWAP2 0000144a: SWAP1 0000144b: PUSH2 0x1f5e 0000144e: JUMP 0000144f: JUMPDEST 00001450: POP 00001451: SWAP1 00001452: POP 00001453: PUSH1 0x00 00001455: PUSH1 0x07 00001457: SLOAD 00001458: DUP5 00001459: DUP4 0000145a: PUSH2 0x1463 0000145d: SWAP2 0000145e: SWAP1 0000145f: PUSH2 0x1fc9 00001462: JUMP 00001463: JUMPDEST 00001464: PUSH2 0x146d 00001467: SWAP2 00001468: SWAP1 00001469: PUSH2 0x1fe8 0000146c: JUMP 0000146d: JUMPDEST 0000146e: CALLER 0000146f: PUSH1 0x00 00001471: SWAP1 00001472: DUP2 00001473: MSTORE 00001474: PUSH1 0x08 00001476: PUSH1 0x20 00001478: MSTORE 00001479: PUSH1 0x40 0000147b: DUP2 0000147c: KECCAK256 0000147d: DUP1 0000147e: SLOAD 0000147f: SWAP3 00001480: SWAP4 00001481: POP 00001482: DUP7 00001483: SWAP3 00001484: SWAP1 00001485: SWAP2 00001486: SWAP1 00001487: PUSH2 0x1491 0000148a: SWAP1 0000148b: DUP5 0000148c: SWAP1 0000148d: PUSH2 0x2072 00001490: JUMP 00001491: JUMPDEST 00001492: SWAP3 00001493: POP 00001494: POP 00001495: DUP2 00001496: SWAP1 00001497: SSTORE 00001498: POP 00001499: DUP4 0000149a: PUSH1 0x07 0000149c: PUSH1 0x00 0000149e: DUP3 0000149f: DUP3 000014a0: SLOAD 000014a1: PUSH2 0x14aa 000014a4: SWAP2 000014a5: SWAP1 000014a6: PUSH2 0x2072 000014a9: JUMP 000014aa: JUMPDEST 000014ab: SWAP1 000014ac: SWAP2 000014ad: SSTORE 000014ae: POP 000014af: POP 000014b0: PUSH1 0x40 000014b2: MLOAD 000014b3: PUSH4 0x2e1a7d4d 000014b8: PUSH1 0xe0 000014ba: SHL 000014bb: DUP2 000014bc: MSTORE 000014bd: PUSH1 0x04 000014bf: DUP2 000014c0: ADD 000014c1: DUP3 000014c2: SWAP1 000014c3: MSTORE 000014c4: PUSH32 0x000000000000000000000000b329e39ebefd16f40d38f07643652ce17ca5bac1 000014e5: PUSH1 0x01 000014e7: PUSH1 0x01 000014e9: PUSH1 0xa0 000014eb: SHL 000014ec: SUB 000014ed: AND 000014ee: SWAP1 000014ef: PUSH4 0x2e1a7d4d 000014f4: SWAP1 000014f5: PUSH1 0x24 000014f7: ADD 000014f8: PUSH1 0x00 000014fa: PUSH1 0x40 000014fc: MLOAD 000014fd: DUP1 000014fe: DUP4 000014ff: SUB 00001500: DUP2 00001501: PUSH1 0x00 00001503: DUP8 00001504: DUP1 00001505: EXTCODESIZE 00001506: ISZERO 00001507: DUP1 00001508: ISZERO 00001509: PUSH2 0x1511 0000150c: JUMPI 0000150d: PUSH1 0x00 0000150f: DUP1 00001510: REVERT 00001511: JUMPDEST 00001512: POP 00001513: GAS 00001514: CALL 00001515: ISZERO 00001516: DUP1 00001517: ISZERO 00001518: PUSH2 0x1525 0000151b: JUMPI 0000151c: RETURNDATASIZE 0000151d: PUSH1 0x00 0000151f: DUP1 00001520: RETURNDATACOPY 00001521: RETURNDATASIZE 00001522: PUSH1 0x00 00001524: REVERT 00001525: JUMPDEST 00001526: POP 00001527: POP 00001528: POP 00001529: POP 0000152a: PUSH1 0x00 0000152c: DUP4 0000152d: ISZERO 0000152e: PUSH2 0x1593 00001531: JUMPI 00001532: POP 00001533: CALLER 00001534: PUSH1 0x00 00001536: SWAP1 00001537: DUP2 00001538: MSTORE 00001539: PUSH1 0x08 0000153b: PUSH1 0x20 0000153d: MSTORE 0000153e: PUSH1 0x40 00001540: SWAP1 00001541: KECCAK256 00001542: PUSH1 0x02 00001544: ADD 00001545: SLOAD 00001546: DUP1 00001547: ISZERO 00001548: PUSH2 0x1593 0000154b: JUMPI 0000154c: CALLER 0000154d: PUSH1 0x00 0000154f: DUP2 00001550: DUP2 00001551: MSTORE 00001552: PUSH1 0x08 00001554: PUSH1 0x20 00001556: MSTORE 00001557: PUSH1 0x40 00001559: DUP2 0000155a: KECCAK256 0000155b: PUSH1 0x02 0000155d: ADD 0000155e: SSTORE 0000155f: PUSH2 0x1593 00001562: SWAP1 00001563: PUSH32 0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001584: PUSH1 0x01 00001586: PUSH1 0x01 00001588: PUSH1 0xa0 0000158a: SHL 0000158b: SUB 0000158c: AND 0000158d: SWAP1 0000158e: DUP4 0000158f: PUSH2 0x1933 00001592: JUMP 00001593: JUMPDEST 00001594: PUSH2 0x15c7 00001597: PUSH1 0x01 00001599: PUSH1 0x01 0000159b: PUSH1 0xa0 0000159d: SHL 0000159e: SUB 0000159f: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9 000015c0: AND 000015c1: CALLER 000015c2: DUP5 000015c3: PUSH2 0x1933 000015c6: JUMP 000015c7: JUMPDEST 000015c8: PUSH1 0x40 000015ca: DUP1 000015cb: MLOAD 000015cc: DUP4 000015cd: DUP2 000015ce: MSTORE 000015cf: PUSH1 0x20 000015d1: DUP2 000015d2: ADD 000015d3: DUP4 000015d4: SWAP1 000015d5: MSTORE 000015d6: CALLER 000015d7: SWAP2 000015d8: PUSH32 0xf279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b568 000015f9: SWAP2 000015fa: ADD 000015fb: PUSH1 0x40 000015fd: MLOAD 000015fe: DUP1 000015ff: SWAP2 00001600: SUB 00001601: SWAP1 00001602: LOG2 00001603: POP 00001604: POP 00001605: POP 00001606: POP 00001607: POP 00001608: JUMP 00001609: JUMPDEST 0000160a: PUSH2 0x1613 0000160d: DUP3 0000160e: DUP3 0000160f: PUSH2 0x0c9b 00001612: JUMP 00001613: JUMPDEST 00001614: PUSH2 0x0a3b 00001617: JUMPI 00001618: PUSH2 0x162b 0000161b: DUP2 0000161c: PUSH1 0x01 0000161e: PUSH1 0x01 00001620: PUSH1 0xa0 00001622: SHL 00001623: SUB 00001624: AND 00001625: PUSH1 0x14 00001627: PUSH2 0x19dd 0000162a: JUMP 0000162b: JUMPDEST 0000162c: PUSH2 0x1636 0000162f: DUP4 00001630: PUSH1 0x20 00001632: PUSH2 0x19dd 00001635: JUMP 00001636: JUMPDEST 00001637: PUSH1 0x40 00001639: MLOAD 0000163a: PUSH1 0x20 0000163c: ADD 0000163d: PUSH2 0x1647 00001640: SWAP3 00001641: SWAP2 00001642: SWAP1 00001643: PUSH2 0x20b5 00001646: JUMP 00001647: JUMPDEST 00001648: PUSH1 0x40 0000164a: DUP1 0000164b: MLOAD 0000164c: PUSH1 0x1f 0000164e: NOT 0000164f: DUP2 00001650: DUP5 00001651: SUB 00001652: ADD 00001653: DUP2 00001654: MSTORE 00001655: SWAP1 00001656: DUP3 00001657: SWAP1 00001658: MSTORE 00001659: PUSH3 0x461bcd 0000165d: PUSH1 0xe5 0000165f: SHL 00001660: DUP3 00001661: MSTORE 00001662: PUSH2 0x04b0 00001665: SWAP2 00001666: PUSH1 0x04 00001668: ADD 00001669: PUSH2 0x2124 0000166c: JUMP 0000166d: JUMPDEST 0000166e: PUSH2 0x1677 00001671: DUP3 00001672: DUP3 00001673: PUSH2 0x0c9b 00001676: JUMP 00001677: JUMPDEST 00001678: PUSH2 0x0a3b 0000167b: JUMPI 0000167c: PUSH1 0x00 0000167e: DUP3 0000167f: DUP2 00001680: MSTORE 00001681: PUSH1 0x01 00001683: PUSH1 0x20 00001685: DUP2 00001686: DUP2 00001687: MSTORE 00001688: PUSH1 0x40 0000168a: DUP1 0000168b: DUP5 0000168c: KECCAK256 0000168d: PUSH1 0x01 0000168f: PUSH1 0x01 00001691: PUSH1 0xa0 00001693: SHL 00001694: SUB 00001695: DUP7 00001696: AND 00001697: DUP1 00001698: DUP7 00001699: MSTORE 0000169a: SWAP3 0000169b: MSTORE 0000169c: DUP1 0000169d: DUP5 0000169e: KECCAK256 0000169f: DUP1 000016a0: SLOAD 000016a1: PUSH1 0xff 000016a3: NOT 000016a4: AND 000016a5: SWAP1 000016a6: SWAP4 000016a7: OR 000016a8: SWAP1 000016a9: SWAP3 000016aa: SSTORE 000016ab: SWAP1 000016ac: MLOAD 000016ad: CALLER 000016ae: SWAP3 000016af: DUP6 000016b0: SWAP2 000016b1: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d 000016d2: SWAP2 000016d3: SWAP1 000016d4: LOG4 000016d5: POP 000016d6: POP 000016d7: JUMP 000016d8: JUMPDEST 000016d9: PUSH1 0x04 000016db: SLOAD 000016dc: NUMBER 000016dd: EQ 000016de: PUSH2 0x16f8 000016e1: JUMPI 000016e2: PUSH2 0x16e9 000016e5: PUSH2 0x197a 000016e8: JUMP 000016e9: JUMPDEST 000016ea: PUSH1 0x06 000016ec: SSTORE 000016ed: PUSH2 0x16f4 000016f0: PUSH2 0x1963 000016f3: JUMP 000016f4: JUMPDEST 000016f5: PUSH1 0x04 000016f7: SSTORE 000016f8: JUMPDEST 000016f9: PUSH2 0x1701 000016fc: DUP2 000016fd: PUSH2 0x12ce 00001700: JUMP 00001701: JUMPDEST 00001702: PUSH1 0x01 00001704: PUSH1 0x01 00001706: PUSH1 0xa0 00001708: SHL 00001709: SUB 0000170a: SWAP1 0000170b: SWAP2 0000170c: AND 0000170d: PUSH1 0x00 0000170f: SWAP1 00001710: DUP2 00001711: MSTORE 00001712: PUSH1 0x08 00001714: PUSH1 0x20 00001716: MSTORE 00001717: PUSH1 0x40 00001719: SWAP1 0000171a: KECCAK256 0000171b: PUSH1 0x02 0000171d: DUP2 0000171e: ADD 0000171f: SWAP2 00001720: SWAP1 00001721: SWAP2 00001722: SSTORE 00001723: PUSH1 0x06 00001725: SLOAD 00001726: PUSH1 0x01 00001728: SWAP1 00001729: SWAP2 0000172a: ADD 0000172b: SSTORE 0000172c: JUMP 0000172d: JUMPDEST 0000172e: PUSH1 0x40 00001730: MLOAD 00001731: PUSH1 0x01 00001733: PUSH1 0x01 00001735: PUSH1 0xa0 00001737: SHL 00001738: SUB 00001739: DUP1 0000173a: DUP6 0000173b: AND 0000173c: PUSH1 0x24 0000173e: DUP4 0000173f: ADD 00001740: MSTORE 00001741: DUP4 00001742: AND 00001743: PUSH1 0x44 00001745: DUP3 00001746: ADD 00001747: MSTORE 00001748: PUSH1 0x64 0000174a: DUP2 0000174b: ADD 0000174c: DUP3 0000174d: SWAP1 0000174e: MSTORE 0000174f: PUSH2 0x1798 00001752: SWAP1 00001753: DUP6 00001754: SWAP1 00001755: PUSH4 0x23b872dd 0000175a: PUSH1 0xe0 0000175c: SHL 0000175d: SWAP1 0000175e: PUSH1 0x84 00001760: ADD 00001761: JUMPDEST 00001762: PUSH1 0x40 00001764: DUP1 00001765: MLOAD 00001766: PUSH1 0x1f 00001768: NOT 00001769: DUP2 0000176a: DUP5 0000176b: SUB 0000176c: ADD 0000176d: DUP2 0000176e: MSTORE 0000176f: SWAP2 00001770: SWAP1 00001771: MSTORE 00001772: PUSH1 0x20 00001774: DUP2 00001775: ADD 00001776: DUP1 00001777: MLOAD 00001778: PUSH1 0x01 0000177a: PUSH1 0x01 0000177c: PUSH1 0xe0 0000177e: SHL 0000177f: SUB 00001780: AND 00001781: PUSH1 0x01 00001783: PUSH1 0x01 00001785: PUSH1 0xe0 00001787: SHL 00001788: SUB 00001789: NOT 0000178a: SWAP1 0000178b: SWAP4 0000178c: AND 0000178d: SWAP3 0000178e: SWAP1 0000178f: SWAP3 00001790: OR 00001791: SWAP1 00001792: SWAP2 00001793: MSTORE 00001794: PUSH2 0x1b79 00001797: JUMP 00001798: JUMPDEST 00001799: POP 0000179a: POP 0000179b: POP 0000179c: POP 0000179d: JUMP 0000179e: JUMPDEST 0000179f: PUSH1 0x40 000017a1: MLOAD 000017a2: PUSH4 0x6eb1769f 000017a7: PUSH1 0xe1 000017a9: SHL 000017aa: DUP2 000017ab: MSTORE 000017ac: ADDRESS 000017ad: PUSH1 0x04 000017af: DUP3 000017b0: ADD 000017b1: MSTORE 000017b2: PUSH1 0x01 000017b4: PUSH1 0x01 000017b6: PUSH1 0xa0 000017b8: SHL 000017b9: SUB 000017ba: DUP3 000017bb: DUP2 000017bc: AND 000017bd: PUSH1 0x24 000017bf: DUP4 000017c0: ADD 000017c1: MSTORE 000017c2: DUP4 000017c3: SWAP2 000017c4: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9 000017e5: SWAP1 000017e6: SWAP2 000017e7: AND 000017e8: SWAP1 000017e9: PUSH4 0xdd62ed3e 000017ee: SWAP1 000017ef: PUSH1 0x44 000017f1: ADD 000017f2: PUSH1 0x20 000017f4: PUSH1 0x40 000017f6: MLOAD 000017f7: DUP1 000017f8: DUP4 000017f9: SUB 000017fa: DUP2 000017fb: DUP7 000017fc: GAS 000017fd: STATICCALL 000017fe: ISZERO 000017ff: DUP1 00001800: ISZERO 00001801: PUSH2 0x180e 00001804: JUMPI 00001805: RETURNDATASIZE 00001806: PUSH1 0x00 00001808: DUP1 00001809: RETURNDATACOPY 0000180a: RETURNDATASIZE 0000180b: PUSH1 0x00 0000180d: REVERT 0000180e: JUMPDEST 0000180f: POP 00001810: POP 00001811: POP 00001812: POP 00001813: PUSH1 0x40 00001815: MLOAD 00001816: RETURNDATASIZE 00001817: PUSH1 0x1f 00001819: NOT 0000181a: PUSH1 0x1f 0000181c: DUP3 0000181d: ADD 0000181e: AND 0000181f: DUP3 00001820: ADD 00001821: DUP1 00001822: PUSH1 0x40 00001824: MSTORE 00001825: POP 00001826: DUP2 00001827: ADD 00001828: SWAP1 00001829: PUSH2 0x1832 0000182c: SWAP2 0000182d: SWAP1 0000182e: PUSH2 0x1f82 00001831: JUMP 00001832: JUMPDEST 00001833: LT 00001834: ISZERO 00001835: PUSH2 0x0a3b 00001838: JUMPI 00001839: PUSH1 0x40 0000183b: MLOAD 0000183c: PUSH4 0x095ea7b3 00001841: PUSH1 0xe0 00001843: SHL 00001844: DUP2 00001845: MSTORE 00001846: PUSH1 0x01 00001848: PUSH1 0x01 0000184a: PUSH1 0xa0 0000184c: SHL 0000184d: SUB 0000184e: DUP3 0000184f: DUP2 00001850: AND 00001851: PUSH1 0x04 00001853: DUP4 00001854: ADD 00001855: MSTORE 00001856: PUSH1 0x00 00001858: NOT 00001859: PUSH1 0x24 0000185b: DUP4 0000185c: ADD 0000185d: MSTORE 0000185e: PUSH32 0x0000000000000000000000001e4ede388cbc9f4b5c79681b7f94d36a11abebc9 0000187f: AND 00001880: SWAP1 00001881: PUSH4 0x095ea7b3 00001886: SWAP1 00001887: PUSH1 0x44 00001889: ADD 0000188a: PUSH1 0x20 0000188c: PUSH1 0x40 0000188e: MLOAD 0000188f: DUP1 00001890: DUP4 00001891: SUB 00001892: DUP2 00001893: PUSH1 0x00 00001895: DUP8 00001896: GAS 00001897: CALL 00001898: ISZERO 00001899: DUP1 0000189a: ISZERO 0000189b: PUSH2 0x18a8 0000189e: JUMPI 0000189f: RETURNDATASIZE 000018a0: PUSH1 0x00 000018a2: DUP1 000018a3: RETURNDATACOPY 000018a4: RETURNDATASIZE 000018a5: PUSH1 0x00 000018a7: REVERT 000018a8: JUMPDEST 000018a9: POP 000018aa: POP 000018ab: POP 000018ac: POP 000018ad: PUSH1 0x40 000018af: MLOAD 000018b0: RETURNDATASIZE 000018b1: PUSH1 0x1f 000018b3: NOT 000018b4: PUSH1 0x1f 000018b6: DUP3 000018b7: ADD 000018b8: AND 000018b9: DUP3 000018ba: ADD 000018bb: DUP1 000018bc: PUSH1 0x40 000018be: MSTORE 000018bf: POP 000018c0: DUP2 000018c1: ADD 000018c2: SWAP1 000018c3: PUSH2 0x066f 000018c6: SWAP2 000018c7: SWAP1 000018c8: PUSH2 0x2157 000018cb: JUMP 000018cc: JUMPDEST 000018cd: PUSH2 0x18d6 000018d0: DUP3 000018d1: DUP3 000018d2: PUSH2 0x0c9b 000018d5: JUMP 000018d6: JUMPDEST 000018d7: ISZERO 000018d8: PUSH2 0x0a3b 000018db: JUMPI 000018dc: PUSH1 0x00 000018de: DUP3 000018df: DUP2 000018e0: MSTORE 000018e1: PUSH1 0x01 000018e3: PUSH1 0x20 000018e5: SWAP1 000018e6: DUP2 000018e7: MSTORE 000018e8: PUSH1 0x40 000018ea: DUP1 000018eb: DUP4 000018ec: KECCAK256 000018ed: PUSH1 0x01 000018ef: PUSH1 0x01 000018f1: PUSH1 0xa0 000018f3: SHL 000018f4: SUB 000018f5: DUP6 000018f6: AND 000018f7: DUP1 000018f8: DUP6 000018f9: MSTORE 000018fa: SWAP3 000018fb: MSTORE 000018fc: DUP1 000018fd: DUP4 000018fe: KECCAK256 000018ff: DUP1 00001900: SLOAD 00001901: PUSH1 0xff 00001903: NOT 00001904: AND 00001905: SWAP1 00001906: SSTORE 00001907: MLOAD 00001908: CALLER 00001909: SWAP3 0000190a: DUP6 0000190b: SWAP2 0000190c: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b 0000192d: SWAP2 0000192e: SWAP1 0000192f: LOG4 00001930: POP 00001931: POP 00001932: JUMP 00001933: JUMPDEST 00001934: PUSH1 0x40 00001936: MLOAD 00001937: PUSH1 0x01 00001939: PUSH1 0x01 0000193b: PUSH1 0xa0 0000193d: SHL 0000193e: SUB 0000193f: DUP4 00001940: AND 00001941: PUSH1 0x24 00001943: DUP3 00001944: ADD 00001945: MSTORE 00001946: PUSH1 0x44 00001948: DUP2 00001949: ADD 0000194a: DUP3 0000194b: SWAP1 0000194c: MSTORE 0000194d: PUSH2 0x066f 00001950: SWAP1 00001951: DUP5 00001952: SWAP1 00001953: PUSH4 0xa9059cbb 00001958: PUSH1 0xe0 0000195a: SHL 0000195b: SWAP1 0000195c: PUSH1 0x64 0000195e: ADD 0000195f: PUSH2 0x1761 00001962: JUMP 00001963: JUMPDEST 00001964: PUSH1 0x00 00001966: PUSH1 0x05 00001968: SLOAD 00001969: NUMBER 0000196a: LT 0000196b: PUSH2 0x1975 0000196e: JUMPI 0000196f: POP 00001970: PUSH1 0x05 00001972: SLOAD 00001973: SWAP1 00001974: JUMP 00001975: JUMPDEST 00001976: POP 00001977: NUMBER 00001978: SWAP1 00001979: JUMP 0000197a: JUMPDEST 0000197b: PUSH1 0x00 0000197d: PUSH1 0x07 0000197f: SLOAD 00001980: PUSH1 0x00 00001982: EQ 00001983: ISZERO 00001984: PUSH2 0x198e 00001987: JUMPI 00001988: POP 00001989: PUSH1 0x06 0000198b: SLOAD 0000198c: SWAP1 0000198d: JUMP 0000198e: JUMPDEST 0000198f: PUSH1 0x07 00001991: SLOAD 00001992: PUSH8 0x0de0b6b3a7640000 0000199b: PUSH1 0x02 0000199d: SLOAD 0000199e: PUSH2 0x19a7 000019a1: SWAP2 000019a2: SWAP1 000019a3: PUSH2 0x1fc9 000019a6: JUMP 000019a7: JUMPDEST 000019a8: PUSH1 0x04 000019aa: SLOAD 000019ab: PUSH2 0x19b2 000019ae: PUSH2 0x1963 000019b1: JUMP 000019b2: JUMPDEST 000019b3: PUSH2 0x19bc 000019b6: SWAP2 000019b7: SWAP1 000019b8: PUSH2 0x2072 000019bb: JUMP 000019bc: JUMPDEST 000019bd: PUSH2 0x19c6 000019c0: SWAP2 000019c1: SWAP1 000019c2: PUSH2 0x1fc9 000019c5: JUMP 000019c6: JUMPDEST 000019c7: PUSH2 0x19d0 000019ca: SWAP2 000019cb: SWAP1 000019cc: PUSH2 0x1fe8 000019cf: JUMP 000019d0: JUMPDEST 000019d1: PUSH1 0x06 000019d3: SLOAD 000019d4: PUSH2 0x1119 000019d7: SWAP2 000019d8: SWAP1 000019d9: PUSH2 0x1fb1 000019dc: JUMP 000019dd: JUMPDEST 000019de: PUSH1 0x60 000019e0: PUSH1 0x00 000019e2: PUSH2 0x19ec 000019e5: DUP4 000019e6: PUSH1 0x02 000019e8: PUSH2 0x1fc9 000019eb: JUMP 000019ec: JUMPDEST 000019ed: PUSH2 0x19f7 000019f0: SWAP1 000019f1: PUSH1 0x02 000019f3: PUSH2 0x1fb1 000019f6: JUMP 000019f7: JUMPDEST 000019f8: PUSH8 0xffffffffffffffff 00001a01: DUP2 00001a02: GT 00001a03: ISZERO 00001a04: PUSH2 0x1a0f 00001a07: JUMPI 00001a08: PUSH2 0x1a0f 00001a0b: PUSH2 0x2174 00001a0e: JUMP 00001a0f: JUMPDEST 00001a10: PUSH1 0x40 00001a12: MLOAD 00001a13: SWAP1 00001a14: DUP1 00001a15: DUP3 00001a16: MSTORE 00001a17: DUP1 00001a18: PUSH1 0x1f 00001a1a: ADD 00001a1b: PUSH1 0x1f 00001a1d: NOT 00001a1e: AND 00001a1f: PUSH1 0x20 00001a21: ADD 00001a22: DUP3 00001a23: ADD 00001a24: PUSH1 0x40 00001a26: MSTORE 00001a27: DUP1 00001a28: ISZERO 00001a29: PUSH2 0x1a39 00001a2c: JUMPI 00001a2d: PUSH1 0x20 00001a2f: DUP3 00001a30: ADD 00001a31: DUP2 00001a32: DUP1 00001a33: CALLDATASIZE 00001a34: DUP4 00001a35: CALLDATACOPY 00001a36: ADD 00001a37: SWAP1 00001a38: POP 00001a39: JUMPDEST 00001a3a: POP 00001a3b: SWAP1 00001a3c: POP 00001a3d: PUSH1 0x03 00001a3f: PUSH1 0xfc 00001a41: SHL 00001a42: DUP2 00001a43: PUSH1 0x00 00001a45: DUP2 00001a46: MLOAD 00001a47: DUP2 00001a48: LT 00001a49: PUSH2 0x1a54 00001a4c: JUMPI 00001a4d: PUSH2 0x1a54 00001a50: PUSH2 0x218a 00001a53: JUMP 00001a54: JUMPDEST 00001a55: PUSH1 0x20 00001a57: ADD 00001a58: ADD 00001a59: SWAP1 00001a5a: PUSH1 0x01 00001a5c: PUSH1 0x01 00001a5e: PUSH1 0xf8 00001a60: SHL 00001a61: SUB 00001a62: NOT 00001a63: AND 00001a64: SWAP1 00001a65: DUP2 00001a66: PUSH1 0x00 00001a68: BYTE 00001a69: SWAP1 00001a6a: MSTORE8 00001a6b: POP 00001a6c: PUSH1 0x0f 00001a6e: PUSH1 0xfb 00001a70: SHL 00001a71: DUP2 00001a72: PUSH1 0x01 00001a74: DUP2 00001a75: MLOAD 00001a76: DUP2 00001a77: LT 00001a78: PUSH2 0x1a83 00001a7b: JUMPI 00001a7c: PUSH2 0x1a83 00001a7f: PUSH2 0x218a 00001a82: JUMP 00001a83: JUMPDEST 00001a84: PUSH1 0x20 00001a86: ADD 00001a87: ADD 00001a88: SWAP1 00001a89: PUSH1 0x01 00001a8b: PUSH1 0x01 00001a8d: PUSH1 0xf8 00001a8f: SHL 00001a90: SUB 00001a91: NOT 00001a92: AND 00001a93: SWAP1 00001a94: DUP2 00001a95: PUSH1 0x00 00001a97: BYTE 00001a98: SWAP1 00001a99: MSTORE8 00001a9a: POP 00001a9b: PUSH1 0x00 00001a9d: PUSH2 0x1aa7 00001aa0: DUP5 00001aa1: PUSH1 0x02 00001aa3: PUSH2 0x1fc9 00001aa6: JUMP 00001aa7: JUMPDEST 00001aa8: PUSH2 0x1ab2 00001aab: SWAP1 00001aac: PUSH1 0x01 00001aae: PUSH2 0x1fb1 00001ab1: JUMP 00001ab2: JUMPDEST 00001ab3: SWAP1 00001ab4: POP 00001ab5: JUMPDEST 00001ab6: PUSH1 0x01 00001ab8: DUP2 00001ab9: GT 00001aba: ISZERO 00001abb: PUSH2 0x1b2a 00001abe: JUMPI 00001abf: PUSH16 0x181899199a1a9b1b9c1cb0b131b232b3 00001ad0: PUSH1 0x81 00001ad2: SHL 00001ad3: DUP6 00001ad4: PUSH1 0x0f 00001ad6: AND 00001ad7: PUSH1 0x10 00001ad9: DUP2 00001ada: LT 00001adb: PUSH2 0x1ae6 00001ade: JUMPI 00001adf: PUSH2 0x1ae6 00001ae2: PUSH2 0x218a 00001ae5: JUMP 00001ae6: JUMPDEST 00001ae7: BYTE 00001ae8: PUSH1 0xf8 00001aea: SHL 00001aeb: DUP3 00001aec: DUP3 00001aed: DUP2 00001aee: MLOAD 00001aef: DUP2 00001af0: LT 00001af1: PUSH2 0x1afc 00001af4: JUMPI 00001af5: PUSH2 0x1afc 00001af8: PUSH2 0x218a 00001afb: JUMP 00001afc: JUMPDEST 00001afd: PUSH1 0x20 00001aff: ADD 00001b00: ADD 00001b01: SWAP1 00001b02: PUSH1 0x01 00001b04: PUSH1 0x01 00001b06: PUSH1 0xf8 00001b08: SHL 00001b09: SUB 00001b0a: NOT 00001b0b: AND 00001b0c: SWAP1 00001b0d: DUP2 00001b0e: PUSH1 0x00 00001b10: BYTE 00001b11: SWAP1 00001b12: MSTORE8 00001b13: POP 00001b14: PUSH1 0x04 00001b16: SWAP5 00001b17: SWAP1 00001b18: SWAP5 00001b19: SHR 00001b1a: SWAP4 00001b1b: PUSH2 0x1b23 00001b1e: DUP2 00001b1f: PUSH2 0x21a0 00001b22: JUMP 00001b23: JUMPDEST 00001b24: SWAP1 00001b25: POP 00001b26: PUSH2 0x1ab5 00001b29: JUMP 00001b2a: JUMPDEST 00001b2b: POP 00001b2c: DUP4 00001b2d: ISZERO 00001b2e: PUSH2 0x12c7 00001b31: JUMPI 00001b32: PUSH1 0x40 00001b34: MLOAD 00001b35: PUSH3 0x461bcd 00001b39: PUSH1 0xe5 00001b3b: SHL 00001b3c: DUP2 00001b3d: MSTORE 00001b3e: PUSH1 0x20 00001b40: PUSH1 0x04 00001b42: DUP3 00001b43: ADD 00001b44: DUP2 00001b45: SWAP1 00001b46: MSTORE 00001b47: PUSH1 0x24 00001b49: DUP3 00001b4a: ADD 00001b4b: MSTORE 00001b4c: PUSH32 0x537472696e67733a20686578206c656e67746820696e73756666696369656e74 00001b6d: PUSH1 0x44 00001b6f: DUP3 00001b70: ADD 00001b71: MSTORE 00001b72: PUSH1 0x64 00001b74: ADD 00001b75: PUSH2 0x04b0 00001b78: JUMP 00001b79: JUMPDEST 00001b7a: PUSH1 0x00 00001b7c: PUSH2 0x1bce 00001b7f: DUP3 00001b80: PUSH1 0x40 00001b82: MLOAD 00001b83: DUP1 00001b84: PUSH1 0x40 00001b86: ADD 00001b87: PUSH1 0x40 00001b89: MSTORE 00001b8a: DUP1 00001b8b: PUSH1 0x20 00001b8d: DUP2 00001b8e: MSTORE 00001b8f: PUSH1 0x20 00001b91: ADD 00001b92: PUSH32 0x5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564 00001bb3: DUP2 00001bb4: MSTORE 00001bb5: POP 00001bb6: DUP6 00001bb7: PUSH1 0x01 00001bb9: PUSH1 0x01 00001bbb: PUSH1 0xa0 00001bbd: SHL 00001bbe: SUB 00001bbf: AND 00001bc0: PUSH2 0x1c4b 00001bc3: SWAP1 00001bc4: SWAP3 00001bc5: SWAP2 00001bc6: SWAP1 00001bc7: PUSH4 0xffffffff 00001bcc: AND 00001bcd: JUMP 00001bce: JUMPDEST 00001bcf: DUP1 00001bd0: MLOAD 00001bd1: SWAP1 00001bd2: SWAP2 00001bd3: POP 00001bd4: ISZERO 00001bd5: PUSH2 0x066f 00001bd8: JUMPI 00001bd9: DUP1 00001bda: DUP1 00001bdb: PUSH1 0x20 00001bdd: ADD 00001bde: SWAP1 00001bdf: MLOAD 00001be0: DUP2 00001be1: ADD 00001be2: SWAP1 00001be3: PUSH2 0x1bec 00001be6: SWAP2 00001be7: SWAP1 00001be8: PUSH2 0x2157 00001beb: JUMP 00001bec: JUMPDEST 00001bed: PUSH2 0x066f 00001bf0: JUMPI 00001bf1: PUSH1 0x40 00001bf3: MLOAD 00001bf4: PUSH3 0x461bcd 00001bf8: PUSH1 0xe5 00001bfa: SHL 00001bfb: DUP2 00001bfc: MSTORE 00001bfd: PUSH1 0x20 00001bff: PUSH1 0x04 00001c01: DUP3 00001c02: ADD 00001c03: MSTORE 00001c04: PUSH1 0x2a 00001c06: PUSH1 0x24 00001c08: DUP3 00001c09: ADD 00001c0a: MSTORE 00001c0b: PUSH32 0x5361666545524332303a204552433230206f7065726174696f6e20646964206e 00001c2c: PUSH1 0x44 00001c2e: DUP3 00001c2f: ADD 00001c30: MSTORE 00001c31: PUSH10 0x1bdd081cdd58d8d95959 00001c3c: PUSH1 0xb2 00001c3e: SHL 00001c3f: PUSH1 0x64 00001c41: DUP3 00001c42: ADD 00001c43: MSTORE 00001c44: PUSH1 0x84 00001c46: ADD 00001c47: PUSH2 0x04b0 00001c4a: JUMP 00001c4b: JUMPDEST 00001c4c: PUSH1 0x60 00001c4e: PUSH2 0x1c5a 00001c51: DUP5 00001c52: DUP5 00001c53: PUSH1 0x00 00001c55: DUP6 00001c56: PUSH2 0x1c62 00001c59: JUMP 00001c5a: JUMPDEST 00001c5b: SWAP5 00001c5c: SWAP4 00001c5d: POP 00001c5e: POP 00001c5f: POP 00001c60: POP 00001c61: JUMP 00001c62: JUMPDEST 00001c63: PUSH1 0x60 00001c65: DUP3 00001c66: SELFBALANCE 00001c67: LT 00001c68: ISZERO 00001c69: PUSH2 0x1cc3 00001c6c: JUMPI 00001c6d: PUSH1 0x40 00001c6f: MLOAD 00001c70: PUSH3 0x461bcd 00001c74: PUSH1 0xe5 00001c76: SHL 00001c77: DUP2 00001c78: MSTORE 00001c79: PUSH1 0x20 00001c7b: PUSH1 0x04 00001c7d: DUP3 00001c7e: ADD 00001c7f: MSTORE 00001c80: PUSH1 0x26 00001c82: PUSH1 0x24 00001c84: DUP3 00001c85: ADD 00001c86: MSTORE 00001c87: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e636520666f 00001ca8: PUSH1 0x44 00001caa: DUP3 00001cab: ADD 00001cac: MSTORE 00001cad: PUSH6 0x1c8818d85b1b 00001cb4: PUSH1 0xd2 00001cb6: SHL 00001cb7: PUSH1 0x64 00001cb9: DUP3 00001cba: ADD 00001cbb: MSTORE 00001cbc: PUSH1 0x84 00001cbe: ADD 00001cbf: PUSH2 0x04b0 00001cc2: JUMP 00001cc3: JUMPDEST 00001cc4: DUP5 00001cc5: EXTCODESIZE 00001cc6: PUSH2 0x1d11 00001cc9: JUMPI 00001cca: PUSH1 0x40 00001ccc: MLOAD 00001ccd: PUSH3 0x461bcd 00001cd1: PUSH1 0xe5 00001cd3: SHL 00001cd4: DUP2 00001cd5: MSTORE 00001cd6: PUSH1 0x20 00001cd8: PUSH1 0x04 00001cda: DUP3 00001cdb: ADD 00001cdc: MSTORE 00001cdd: PUSH1 0x1d 00001cdf: PUSH1 0x24 00001ce1: DUP3 00001ce2: ADD 00001ce3: MSTORE 00001ce4: PUSH32 0x416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000 00001d05: PUSH1 0x44 00001d07: DUP3 00001d08: ADD 00001d09: MSTORE 00001d0a: PUSH1 0x64 00001d0c: ADD 00001d0d: PUSH2 0x04b0 00001d10: JUMP 00001d11: JUMPDEST 00001d12: PUSH1 0x00 00001d14: DUP1 00001d15: DUP7 00001d16: PUSH1 0x01 00001d18: PUSH1 0x01 00001d1a: PUSH1 0xa0 00001d1c: SHL 00001d1d: SUB 00001d1e: AND 00001d1f: DUP6 00001d20: DUP8 00001d21: PUSH1 0x40 00001d23: MLOAD 00001d24: PUSH2 0x1d2d 00001d27: SWAP2 00001d28: SWAP1 00001d29: PUSH2 0x21b7 00001d2c: JUMP 00001d2d: JUMPDEST 00001d2e: PUSH1 0x00 00001d30: PUSH1 0x40 00001d32: MLOAD 00001d33: DUP1 00001d34: DUP4 00001d35: SUB 00001d36: DUP2 00001d37: DUP6 00001d38: DUP8 00001d39: GAS 00001d3a: CALL 00001d3b: SWAP3 00001d3c: POP 00001d3d: POP 00001d3e: POP 00001d3f: RETURNDATASIZE 00001d40: DUP1 00001d41: PUSH1 0x00 00001d43: DUP2 00001d44: EQ 00001d45: PUSH2 0x1d6a 00001d48: JUMPI 00001d49: PUSH1 0x40 00001d4b: MLOAD 00001d4c: SWAP2 00001d4d: POP 00001d4e: PUSH1 0x1f 00001d50: NOT 00001d51: PUSH1 0x3f 00001d53: RETURNDATASIZE 00001d54: ADD 00001d55: AND 00001d56: DUP3 00001d57: ADD 00001d58: PUSH1 0x40 00001d5a: MSTORE 00001d5b: RETURNDATASIZE 00001d5c: DUP3 00001d5d: MSTORE 00001d5e: RETURNDATASIZE 00001d5f: PUSH1 0x00 00001d61: PUSH1 0x20 00001d63: DUP5 00001d64: ADD 00001d65: RETURNDATACOPY 00001d66: PUSH2 0x1d6f 00001d69: JUMP 00001d6a: JUMPDEST 00001d6b: PUSH1 0x60 00001d6d: SWAP2 00001d6e: POP 00001d6f: JUMPDEST 00001d70: POP 00001d71: SWAP2 00001d72: POP 00001d73: SWAP2 00001d74: POP 00001d75: PUSH2 0x1d7f 00001d78: DUP3 00001d79: DUP3 00001d7a: DUP7 00001d7b: PUSH2 0x1d8a 00001d7e: JUMP 00001d7f: JUMPDEST 00001d80: SWAP8 00001d81: SWAP7 00001d82: POP 00001d83: POP 00001d84: POP 00001d85: POP 00001d86: POP 00001d87: POP 00001d88: POP 00001d89: JUMP 00001d8a: JUMPDEST 00001d8b: PUSH1 0x60 00001d8d: DUP4 00001d8e: ISZERO 00001d8f: PUSH2 0x1d99 00001d92: JUMPI 00001d93: POP 00001d94: DUP2 00001d95: PUSH2 0x12c7 00001d98: JUMP 00001d99: JUMPDEST 00001d9a: DUP3 00001d9b: MLOAD 00001d9c: ISZERO 00001d9d: PUSH2 0x1da9 00001da0: JUMPI 00001da1: DUP3 00001da2: MLOAD 00001da3: DUP1 00001da4: DUP5 00001da5: PUSH1 0x20 00001da7: ADD 00001da8: REVERT 00001da9: JUMPDEST 00001daa: DUP2 00001dab: PUSH1 0x40 00001dad: MLOAD 00001dae: PUSH3 0x461bcd 00001db2: PUSH1 0xe5 00001db4: SHL 00001db5: DUP2 00001db6: MSTORE 00001db7: PUSH1 0x04 00001db9: ADD 00001dba: PUSH2 0x04b0 00001dbd: SWAP2 00001dbe: SWAP1 00001dbf: PUSH2 0x2124 00001dc2: JUMP 00001dc3: JUMPDEST 00001dc4: PUSH1 0x00 00001dc6: PUSH1 0x20 00001dc8: DUP3 00001dc9: DUP5 00001dca: SUB 00001dcb: SLT 00001dcc: ISZERO 00001dcd: PUSH2 0x1dd5 00001dd0: JUMPI 00001dd1: PUSH1 0x00 00001dd3: DUP1 00001dd4: REVERT 00001dd5: JUMPDEST 00001dd6: DUP2 00001dd7: CALLDATALOAD 00001dd8: PUSH1 0x01 00001dda: PUSH1 0x01 00001ddc: PUSH1 0xe0 00001dde: SHL 00001ddf: SUB 00001de0: NOT 00001de1: DUP2 00001de2: AND 00001de3: DUP2 00001de4: EQ 00001de5: PUSH2 0x12c7 00001de8: JUMPI 00001de9: PUSH1 0x00 00001deb: DUP1 00001dec: REVERT 00001ded: JUMPDEST 00001dee: DUP1 00001def: CALLDATALOAD 00001df0: PUSH1 0x01 00001df2: PUSH1 0x01 00001df4: PUSH1 0xa0 00001df6: SHL 00001df7: SUB 00001df8: DUP2 00001df9: AND 00001dfa: DUP2 00001dfb: EQ 00001dfc: PUSH2 0x1e04 00001dff: JUMPI 00001e00: PUSH1 0x00 00001e02: DUP1 00001e03: REVERT 00001e04: JUMPDEST 00001e05: SWAP2 00001e06: SWAP1 00001e07: POP 00001e08: JUMP 00001e09: JUMPDEST 00001e0a: PUSH1 0x00 00001e0c: PUSH1 0x20 00001e0e: DUP3 00001e0f: DUP5 00001e10: SUB 00001e11: SLT 00001e12: ISZERO 00001e13: PUSH2 0x1e1b 00001e16: JUMPI 00001e17: PUSH1 0x00 00001e19: DUP1 00001e1a: REVERT 00001e1b: JUMPDEST 00001e1c: PUSH2 0x12c7 00001e1f: DUP3 00001e20: PUSH2 0x1ded 00001e23: JUMP 00001e24: JUMPDEST 00001e25: PUSH1 0x01 00001e27: PUSH1 0x01 00001e29: PUSH1 0xa0 00001e2b: SHL 00001e2c: SUB 00001e2d: SWAP2 00001e2e: SWAP1 00001e2f: SWAP2 00001e30: AND 00001e31: DUP2 00001e32: MSTORE 00001e33: PUSH1 0x20 00001e35: ADD 00001e36: SWAP1 00001e37: JUMP 00001e38: JUMPDEST 00001e39: DUP1 00001e3a: ISZERO 00001e3b: ISZERO 00001e3c: DUP2 00001e3d: EQ 00001e3e: PUSH2 0x1e46 00001e41: JUMPI 00001e42: PUSH1 0x00 00001e44: DUP1 00001e45: REVERT 00001e46: JUMPDEST 00001e47: POP 00001e48: JUMP 00001e49: JUMPDEST 00001e4a: PUSH1 0x00 00001e4c: PUSH1 0x20 00001e4e: DUP3 00001e4f: DUP5 00001e50: SUB 00001e51: SLT 00001e52: ISZERO 00001e53: PUSH2 0x1e5b 00001e56: JUMPI 00001e57: PUSH1 0x00 00001e59: DUP1 00001e5a: REVERT 00001e5b: JUMPDEST 00001e5c: DUP2 00001e5d: CALLDATALOAD 00001e5e: PUSH2 0x12c7 00001e61: DUP2 00001e62: PUSH2 0x1e38 00001e65: JUMP 00001e66: JUMPDEST 00001e67: PUSH1 0x00 00001e69: PUSH1 0x20 00001e6b: DUP3 00001e6c: DUP5 00001e6d: SUB 00001e6e: SLT 00001e6f: ISZERO 00001e70: PUSH2 0x1e78 00001e73: JUMPI 00001e74: PUSH1 0x00 00001e76: DUP1 00001e77: REVERT 00001e78: JUMPDEST 00001e79: POP 00001e7a: CALLDATALOAD 00001e7b: SWAP2 00001e7c: SWAP1 00001e7d: POP 00001e7e: JUMP 00001e7f: JUMPDEST 00001e80: PUSH1 0x00 00001e82: DUP1 00001e83: PUSH1 0x40 00001e85: DUP4 00001e86: DUP6 00001e87: SUB 00001e88: SLT 00001e89: ISZERO 00001e8a: PUSH2 0x1e92 00001e8d: JUMPI 00001e8e: PUSH1 0x00 00001e90: DUP1 00001e91: REVERT 00001e92: JUMPDEST 00001e93: DUP3 00001e94: CALLDATALOAD 00001e95: SWAP2 00001e96: POP 00001e97: PUSH2 0x1ea2 00001e9a: PUSH1 0x20 00001e9c: DUP5 00001e9d: ADD 00001e9e: PUSH2 0x1ded 00001ea1: JUMP 00001ea2: JUMPDEST 00001ea3: SWAP1 00001ea4: POP 00001ea5: SWAP3 00001ea6: POP 00001ea7: SWAP3 00001ea8: SWAP1 00001ea9: POP 00001eaa: JUMP 00001eab: JUMPDEST 00001eac: PUSH1 0x00 00001eae: DUP1 00001eaf: PUSH1 0x40 00001eb1: DUP4 00001eb2: DUP6 00001eb3: SUB 00001eb4: SLT 00001eb5: ISZERO 00001eb6: PUSH2 0x1ebe 00001eb9: JUMPI 00001eba: PUSH1 0x00 00001ebc: DUP1 00001ebd: REVERT 00001ebe: JUMPDEST 00001ebf: PUSH2 0x1ec7 00001ec2: DUP4 00001ec3: PUSH2 0x1ded 00001ec6: JUMP 00001ec7: JUMPDEST 00001ec8: SWAP5 00001ec9: PUSH1 0x20 00001ecb: SWAP4 00001ecc: SWAP1 00001ecd: SWAP4 00001ece: ADD 00001ecf: CALLDATALOAD 00001ed0: SWAP4 00001ed1: POP 00001ed2: POP 00001ed3: POP 00001ed4: JUMP 00001ed5: JUMPDEST 00001ed6: PUSH1 0x00 00001ed8: DUP1 00001ed9: PUSH1 0x40 00001edb: DUP4 00001edc: DUP6 00001edd: SUB 00001ede: SLT 00001edf: ISZERO 00001ee0: PUSH2 0x1ee8 00001ee3: JUMPI 00001ee4: PUSH1 0x00 00001ee6: DUP1 00001ee7: REVERT 00001ee8: JUMPDEST 00001ee9: DUP3 00001eea: CALLDATALOAD 00001eeb: SWAP2 00001eec: POP 00001eed: PUSH1 0x20 00001eef: DUP4 00001ef0: ADD 00001ef1: CALLDATALOAD 00001ef2: PUSH2 0x1efa 00001ef5: DUP2 00001ef6: PUSH2 0x1e38 00001ef9: JUMP 00001efa: JUMPDEST 00001efb: DUP1 00001efc: SWAP2 00001efd: POP 00001efe: POP 00001eff: SWAP3 00001f00: POP 00001f01: SWAP3 00001f02: SWAP1 00001f03: POP 00001f04: JUMP 00001f05: JUMPDEST 00001f06: PUSH1 0x00 00001f08: DUP1 00001f09: PUSH1 0x40 00001f0b: DUP4 00001f0c: DUP6 00001f0d: SUB 00001f0e: SLT 00001f0f: ISZERO 00001f10: PUSH2 0x1f18 00001f13: JUMPI 00001f14: PUSH1 0x00 00001f16: DUP1 00001f17: REVERT 00001f18: JUMPDEST 00001f19: POP 00001f1a: POP 00001f1b: DUP1 00001f1c: CALLDATALOAD 00001f1d: SWAP3 00001f1e: PUSH1 0x20 00001f20: SWAP1 00001f21: SWAP2 00001f22: ADD 00001f23: CALLDATALOAD 00001f24: SWAP2 00001f25: POP 00001f26: JUMP 00001f27: JUMPDEST 00001f28: PUSH1 0x20 00001f2a: DUP1 00001f2b: DUP3 00001f2c: MSTORE 00001f2d: PUSH1 0x1f 00001f2f: SWAP1 00001f30: DUP3 00001f31: ADD 00001f32: MSTORE 00001f33: PUSH32 0x5265656e7472616e637947756172643a207265656e7472616e742063616c6c00 00001f54: PUSH1 0x40 00001f56: DUP3 00001f57: ADD 00001f58: MSTORE 00001f59: PUSH1 0x60 00001f5b: ADD 00001f5c: SWAP1 00001f5d: JUMP 00001f5e: JUMPDEST 00001f5f: PUSH1 0x00 00001f61: DUP1 00001f62: PUSH1 0x40 00001f64: DUP4 00001f65: DUP6 00001f66: SUB 00001f67: SLT 00001f68: ISZERO 00001f69: PUSH2 0x1f71 00001f6c: JUMPI 00001f6d: PUSH1 0x00 00001f6f: DUP1 00001f70: REVERT 00001f71: JUMPDEST 00001f72: POP 00001f73: POP 00001f74: DUP1 00001f75: MLOAD 00001f76: PUSH1 0x20 00001f78: SWAP1 00001f79: SWAP2 00001f7a: ADD 00001f7b: MLOAD 00001f7c: SWAP1 00001f7d: SWAP3 00001f7e: SWAP1 00001f7f: SWAP2 00001f80: POP 00001f81: JUMP 00001f82: JUMPDEST 00001f83: PUSH1 0x00 00001f85: PUSH1 0x20 00001f87: DUP3 00001f88: DUP5 00001f89: SUB 00001f8a: SLT 00001f8b: ISZERO 00001f8c: PUSH2 0x1f94 00001f8f: JUMPI 00001f90: PUSH1 0x00 00001f92: DUP1 00001f93: REVERT 00001f94: JUMPDEST 00001f95: POP 00001f96: MLOAD 00001f97: SWAP2 00001f98: SWAP1 00001f99: POP 00001f9a: JUMP 00001f9b: JUMPDEST 00001f9c: PUSH4 0x4e487b71 00001fa1: PUSH1 0xe0 00001fa3: SHL 00001fa4: PUSH1 0x00 00001fa6: MSTORE 00001fa7: PUSH1 0x11 00001fa9: PUSH1 0x04 00001fab: MSTORE 00001fac: PUSH1 0x24 00001fae: PUSH1 0x00 00001fb0: REVERT 00001fb1: JUMPDEST 00001fb2: PUSH1 0x00 00001fb4: DUP3 00001fb5: NOT 00001fb6: DUP3 00001fb7: GT 00001fb8: ISZERO 00001fb9: PUSH2 0x1fc4 00001fbc: JUMPI 00001fbd: PUSH2 0x1fc4 00001fc0: PUSH2 0x1f9b 00001fc3: JUMP 00001fc4: JUMPDEST 00001fc5: POP 00001fc6: ADD 00001fc7: SWAP1 00001fc8: JUMP 00001fc9: JUMPDEST 00001fca: PUSH1 0x00 00001fcc: DUP2 00001fcd: PUSH1 0x00 00001fcf: NOT 00001fd0: DIV 00001fd1: DUP4 00001fd2: GT 00001fd3: DUP3 00001fd4: ISZERO 00001fd5: ISZERO 00001fd6: AND 00001fd7: ISZERO 00001fd8: PUSH2 0x1fe3 00001fdb: JUMPI 00001fdc: PUSH2 0x1fe3 00001fdf: PUSH2 0x1f9b 00001fe2: JUMP 00001fe3: JUMPDEST 00001fe4: POP 00001fe5: MUL 00001fe6: SWAP1 00001fe7: JUMP 00001fe8: JUMPDEST 00001fe9: PUSH1 0x00 00001feb: DUP3 00001fec: PUSH2 0x2005 00001fef: JUMPI 00001ff0: PUSH4 0x4e487b71 00001ff5: PUSH1 0xe0 00001ff7: SHL 00001ff8: PUSH1 0x00 00001ffa: MSTORE 00001ffb: PUSH1 0x12 00001ffd: PUSH1 0x04 00001fff: MSTORE 00002000: PUSH1 0x24 00002002: PUSH1 0x00 00002004: REVERT 00002005: JUMPDEST 00002006: POP 00002007: DIV 00002008: SWAP1 00002009: JUMP 0000200a: JUMPDEST 0000200b: PUSH1 0x20 0000200d: DUP1 0000200e: DUP3 0000200f: MSTORE 00002010: PUSH1 0x21 00002012: SWAP1 00002013: DUP3 00002014: ADD 00002015: MSTORE 00002016: PUSH32 0x4465706f7369743a20416d6f756e74206d757374206265203e3d203120583259 00002037: PUSH1 0x40 00002039: DUP3 0000203a: ADD 0000203b: MSTORE 0000203c: PUSH1 0x19 0000203e: PUSH1 0xf9 00002040: SHL 00002041: PUSH1 0x60 00002043: DUP3 00002044: ADD 00002045: MSTORE 00002046: PUSH1 0x80 00002048: ADD 00002049: SWAP1 0000204a: JUMP 0000204b: JUMPDEST 0000204c: PUSH1 0x20 0000204e: DUP1 0000204f: DUP3 00002050: MSTORE 00002051: PUSH1 0x0d 00002053: SWAP1 00002054: DUP3 00002055: ADD 00002056: MSTORE 00002057: PUSH13 0x11195c1bdcda5d0e8811985a5b 00002065: PUSH1 0x9a 00002067: SHL 00002068: PUSH1 0x40 0000206a: DUP3 0000206b: ADD 0000206c: MSTORE 0000206d: PUSH1 0x60 0000206f: ADD 00002070: SWAP1 00002071: JUMP 00002072: JUMPDEST 00002073: PUSH1 0x00 00002075: DUP3 00002076: DUP3 00002077: LT 00002078: ISZERO 00002079: PUSH2 0x2084 0000207c: JUMPI 0000207d: PUSH2 0x2084 00002080: PUSH2 0x1f9b 00002083: JUMP 00002084: JUMPDEST 00002085: POP 00002086: SUB 00002087: SWAP1 00002088: JUMP 00002089: JUMPDEST 0000208a: PUSH1 0x00 0000208c: JUMPDEST 0000208d: DUP4 0000208e: DUP2 0000208f: LT 00002090: ISZERO 00002091: PUSH2 0x20a4 00002094: JUMPI 00002095: DUP2 00002096: DUP2 00002097: ADD 00002098: MLOAD 00002099: DUP4 0000209a: DUP3 0000209b: ADD 0000209c: MSTORE 0000209d: PUSH1 0x20 0000209f: ADD 000020a0: PUSH2 0x208c 000020a3: JUMP 000020a4: JUMPDEST 000020a5: DUP4 000020a6: DUP2 000020a7: GT 000020a8: ISZERO 000020a9: PUSH2 0x1798 000020ac: JUMPI 000020ad: POP 000020ae: POP 000020af: PUSH1 0x00 000020b1: SWAP2 000020b2: ADD 000020b3: MSTORE 000020b4: JUMP 000020b5: JUMPDEST 000020b6: PUSH23 0x020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1 000020ce: PUSH1 0x4d 000020d0: SHL 000020d1: DUP2 000020d2: MSTORE 000020d3: PUSH1 0x00 000020d5: DUP4 000020d6: MLOAD 000020d7: PUSH2 0x20e7 000020da: DUP2 000020db: PUSH1 0x17 000020dd: DUP6 000020de: ADD 000020df: PUSH1 0x20 000020e1: DUP9 000020e2: ADD 000020e3: PUSH2 0x2089 000020e6: JUMP 000020e7: JUMPDEST 000020e8: PUSH17 0x01034b99036b4b9b9b4b733903937b6329 000020fa: PUSH1 0x7d 000020fc: SHL 000020fd: PUSH1 0x17 000020ff: SWAP2 00002100: DUP5 00002101: ADD 00002102: SWAP2 00002103: DUP3 00002104: ADD 00002105: MSTORE 00002106: DUP4 00002107: MLOAD 00002108: PUSH2 0x2118 0000210b: DUP2 0000210c: PUSH1 0x28 0000210e: DUP5 0000210f: ADD 00002110: PUSH1 0x20 00002112: DUP9 00002113: ADD 00002114: PUSH2 0x2089 00002117: JUMP 00002118: JUMPDEST 00002119: ADD 0000211a: PUSH1 0x28 0000211c: ADD 0000211d: SWAP5 0000211e: SWAP4 0000211f: POP 00002120: POP 00002121: POP 00002122: POP 00002123: JUMP 00002124: JUMPDEST 00002125: PUSH1 0x20 00002127: DUP2 00002128: MSTORE 00002129: PUSH1 0x00 0000212b: DUP3 0000212c: MLOAD 0000212d: DUP1 0000212e: PUSH1 0x20 00002130: DUP5 00002131: ADD 00002132: MSTORE 00002133: PUSH2 0x2143 00002136: DUP2 00002137: PUSH1 0x40 00002139: DUP6 0000213a: ADD 0000213b: PUSH1 0x20 0000213d: DUP8 0000213e: ADD 0000213f: PUSH2 0x2089 00002142: JUMP 00002143: JUMPDEST 00002144: PUSH1 0x1f 00002146: ADD 00002147: PUSH1 0x1f 00002149: NOT 0000214a: AND 0000214b: SWAP2 0000214c: SWAP1 0000214d: SWAP2 0000214e: ADD 0000214f: PUSH1 0x40 00002151: ADD 00002152: SWAP3 00002153: SWAP2 00002154: POP 00002155: POP 00002156: JUMP 00002157: JUMPDEST 00002158: PUSH1 0x00 0000215a: PUSH1 0x20 0000215c: DUP3 0000215d: DUP5 0000215e: SUB 0000215f: SLT 00002160: ISZERO 00002161: PUSH2 0x2169 00002164: JUMPI 00002165: PUSH1 0x00 00002167: DUP1 00002168: REVERT 00002169: JUMPDEST 0000216a: DUP2 0000216b: MLOAD 0000216c: PUSH2 0x12c7 0000216f: DUP2 00002170: PUSH2 0x1e38 00002173: JUMP 00002174: JUMPDEST 00002175: PUSH4 0x4e487b71 0000217a: PUSH1 0xe0 0000217c: SHL 0000217d: PUSH1 0x00 0000217f: MSTORE 00002180: PUSH1 0x41 00002182: PUSH1 0x04 00002184: MSTORE 00002185: PUSH1 0x24 00002187: PUSH1 0x00 00002189: REVERT 0000218a: JUMPDEST 0000218b: PUSH4 0x4e487b71 00002190: PUSH1 0xe0 00002192: SHL 00002193: PUSH1 0x00 00002195: MSTORE 00002196: PUSH1 0x32 00002198: PUSH1 0x04 0000219a: MSTORE 0000219b: PUSH1 0x24 0000219d: PUSH1 0x00 0000219f: REVERT 000021a0: JUMPDEST 000021a1: PUSH1 0x00 000021a3: DUP2 000021a4: PUSH2 0x21af 000021a7: JUMPI 000021a8: PUSH2 0x21af 000021ab: PUSH2 0x1f9b 000021ae: JUMP 000021af: JUMPDEST 000021b0: POP 000021b1: PUSH1 0x00 000021b3: NOT 000021b4: ADD 000021b5: SWAP1 000021b6: JUMP 000021b7: JUMPDEST 000021b8: PUSH1 0x00 000021ba: DUP3 000021bb: MLOAD 000021bc: PUSH2 0x21c9 000021bf: DUP2 000021c0: DUP5 000021c1: PUSH1 0x20 000021c3: DUP8 000021c4: ADD 000021c5: PUSH2 0x2089 000021c8: JUMP 000021c9: JUMPDEST 000021ca: SWAP2 000021cb: SWAP1 000021cc: SWAP2 000021cd: ADD 000021ce: SWAP3 000021cf: SWAP2 000021d0: POP 000021d1: POP 000021d2: JUMP 000021d3: INVALID 000021d4: LOG2 000021d5: PUSH5 0x6970667358 000021db: UNKNOWN(0x22) 000021dc: SLT 000021dd: KECCAK256 000021de: UNKNOWN(0xD2) 000021df: DUP7 000021e0: DUP9 000021e1: DUP7 000021e2: UNKNOWN(0xC4) 000021e3: UNKNOWN(0x28) 000021e4: UNKNOWN(0xCC) 000021e5: TIMESTAMP 000021e6: SWAP9 000021e7: XOR 000021e8: SLT 000021e9: PUSH27 0x9a43a60dd6f8c0c39093dfe63a21359a8263681f64736f6c634300 00002205: ADDMOD 00002206: SIGNEXTEND 00002207: STOP 00002208: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x16894135515c5b782568b2691a51f0138c3eda1889853b7ac46bd364cc8958a8
call_targets:
0xc8c3cc5be962b6d281e4a53dbcce1359f76a1b85
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x16894135515c5b782568b2691a51f0138c3eda1889853b7ac46bd364cc8958a8",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xc8c3cc5be962b6d281e4a53dbcce1359f76a1b85"
],
"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": "0xa9f8d181",
"selector": "0xa9f8d181",
"calldata_variants": [
"0xa9f8d181",
"0xa9f8d1810000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcb4aec61",
"selector": "0xcb4aec61",
"calldata_variants": [
"0xcb4aec61",
"0xcb4aec610000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xccd34cd5",
"selector": "0xccd34cd5",
"calldata_variants": [
"0xccd34cd5",
"0xccd34cd50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdf136d65",
"selector": "0xdf136d65",
"calldata_variants": [
"0xdf136d65",
"0xdf136d650000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe098bd4b",
"selector": "0xe098bd4b",
"calldata_variants": [
"0xe098bd4b",
"0xe098bd4b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xebde5ee6",
"selector": "0xebde5ee6",
"calldata_variants": [
"0xebde5ee6",
"0xebde5ee60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf7c618c1",
"selector": "0xf7c618c1",
"calldata_variants": [
"0xf7c618c1",
"0xf7c618c10000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1871,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2390,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2956,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 9,
"guards_detected": [],
"untrusted_call_count": 9
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x16894135515c5b782568b2691a51f0138c3eda1889853b7ac46bd364cc8958a8
call_targets:
0xc8c3cc5be962b6d281e4a53dbcce1359f76a1b85
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x16894135515c5b782568b2691a51f0138c3eda1889853b7ac46bd364cc8958a8",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xc8c3cc5be962b6d281e4a53dbcce1359f76a1b85"
],
"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": "0xa9f8d181",
"selector": "0xa9f8d181",
"calldata_variants": [
"0xa9f8d181",
"0xa9f8d1810000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcb4aec61",
"selector": "0xcb4aec61",
"calldata_variants": [
"0xcb4aec61",
"0xcb4aec610000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xccd34cd5",
"selector": "0xccd34cd5",
"calldata_variants": [
"0xccd34cd5",
"0xccd34cd50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdf136d65",
"selector": "0xdf136d65",
"calldata_variants": [
"0xdf136d65",
"0xdf136d650000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe098bd4b",
"selector": "0xe098bd4b",
"calldata_variants": [
"0xe098bd4b",
"0xe098bd4b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xebde5ee6",
"selector": "0xebde5ee6",
"calldata_variants": [
"0xebde5ee6",
"0xebde5ee60000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf7c618c1",
"selector": "0xf7c618c1",
"calldata_variants": [
"0xf7c618c1",
"0xf7c618c10000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1871,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2390,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2956,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 9,
"guards_detected": []
}
|
| medium | other | codex | Reward accrual can be wiped when updateRewards resets lastUpdateBlock | 75 | no | — |
viewevidence_json{
"evidence": "updateRewards updates lastUpdateBlock and periodEndBlock without first updating rewardPerTokenStored, so prior rewards are skipped.",
"locations": [
"contracts/contracts/FeeSharingSystem.sol:242",
"contracts/contracts/FeeSharingSystem.sol:255"
],
"recommendation": "Before changing currentRewardPerBlock/periodEndBlock, snapshot rewards by updating rewardPerTokenStored and lastUpdateBlock (e.g., call _updateReward(address(0)) or set rewardPerTokenStored = _rewardPerToken(); lastUpdateBlock = _lastRewardBlock()).",
"exploit_scenario": "A caller with REWARD_UPDATE_ROLE can call updateRewards after rewards have accrued. Because rewardPerTokenStored is not updated before lastUpdateBlock is reset, all rewards between the previous lastUpdateBlock and this update become unclaimable. Repeated updates can continuously zero out staker rewards without changing balances."
}
|
| low | other | codex | Unchecked ERC20 return values on approve/mint can silently fail and desync accounting | 65 | no | — |
viewevidence_json{
"evidence": "approve() return value is ignored; mint() return value for tokenSplitter is ignored and staking mint only conditionally updates accounting.",
"locations": [
"contracts/contracts/FeeSharingSystem.sol:326",
"contracts/contracts/FeeSharingSystem.sol:328",
"contracts/contracts/TokenDistributor.sol:371",
"contracts/contracts/TokenDistributor.sol:380"
],
"recommendation": "Use SafeERC20 for approvals or require true return values; for minting, check the return value and revert on failure for both staking and tokenSplitter mints.",
"exploit_scenario": "If x2y2Token returns false (non\u2011standard or mint disabled), FeeSharingSystem still proceeds and TokenDistributor skips reward accounting while minting (or minting to tokenSplitter) may silently fail. This can lead to stuck rewards, missing distributions, or unexpected reverts later."
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 8
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 17
}
|