S Price: $0.068013 (+0.36%)
Gas: 55 Gwei

Contract

0x6a98B62242Ea969EaE40edd5f48805De9d2248F3

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Withdraw Gas461256312025-09-08 7:42:59140 days ago1757317379IN
0x6a98B622...e9d2248F3
0 S0.0023735566
Withdraw459931872025-09-06 23:19:57141 days ago1757200797IN
0x6a98B622...e9d2248F3
0 S0.0036452955
Set State443490462025-08-24 17:42:55154 days ago1756057375IN
0x6a98B622...e9d2248F3
0 S0.0028219955
Set State443490202025-08-24 17:42:46154 days ago1756057366IN
0x6a98B622...e9d2248F3
0 S0.0028219955
Close Position443490082025-08-24 17:42:42154 days ago1756057362IN
0x6a98B622...e9d2248F3
0 S0.158090455
Set State443483212025-08-24 17:30:37154 days ago1756056637IN
0x6a98B622...e9d2248F3
0 S0.0028206755
Open Position443483102025-08-24 17:30:25154 days ago1756056625IN
0x6a98B622...e9d2248F3
0 S0.0283253855
Swap443483042025-08-24 17:30:09154 days ago1756056609IN
0x6a98B622...e9d2248F3
0 S0.012147955
Open Position443482982025-08-24 17:29:49154 days ago1756056589IN
0x6a98B622...e9d2248F3
0 S0.0315312855
Swap443482952025-08-24 17:29:41154 days ago1756056581IN
0x6a98B622...e9d2248F3
0 S0.0133760555
Set State443482902025-08-24 17:29:27154 days ago1756056567IN
0x6a98B622...e9d2248F3
0 S0.0028219955
Close Position443482832025-08-24 17:29:02154 days ago1756056542IN
0x6a98B622...e9d2248F3
0 S0.1580921655
Set State443475472025-08-24 17:04:31154 days ago1756055071IN
0x6a98B622...e9d2248F3
0 S0.0028206755
Open Position443475362025-08-24 17:04:26154 days ago1756055066IN
0x6a98B622...e9d2248F3
0 S0.0283295655
Swap443475252025-08-24 17:04:22154 days ago1756055062IN
0x6a98B622...e9d2248F3
0 S0.012536755
Open Position443475122025-08-24 17:04:15154 days ago1756055055IN
0x6a98B622...e9d2248F3
0 S0.031534855
Swap443475042025-08-24 17:04:10154 days ago1756055050IN
0x6a98B622...e9d2248F3
0 S0.0133763355
Set State443474852025-08-24 17:04:00154 days ago1756055040IN
0x6a98B622...e9d2248F3
0 S0.0028219955
Close Position443474682025-08-24 17:03:53154 days ago1756055033IN
0x6a98B622...e9d2248F3
0 S0.158090455
Set State443448712025-08-24 16:12:46155 days ago1756051966IN
0x6a98B622...e9d2248F3
0 S0.0028206755
Open Position443448662025-08-24 16:12:41155 days ago1756051961IN
0x6a98B622...e9d2248F3
0 S0.0327040455
Swap443448562025-08-24 16:12:36155 days ago1756051956IN
0x6a98B622...e9d2248F3
0 S0.0121166655
Set State443239592025-08-24 12:05:06155 days ago1756037106IN
0x6a98B622...e9d2248F3
0 S0.0028219955
Close Position443239532025-08-24 12:05:02155 days ago1756037102IN
0x6a98B622...e9d2248F3
0 S0.159036455
Set State443237622025-08-24 12:02:09155 days ago1756036929IN
0x6a98B622...e9d2248F3
0 S0.0028206755
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
461256312025-09-08 7:42:59140 days ago1757317379
0x6a98B622...e9d2248F3
0.96920227 S
443490462025-08-24 17:42:55154 days ago1756057375
0x6a98B622...e9d2248F3
0.00227221 S
443490202025-08-24 17:42:46154 days ago1756057366
0x6a98B622...e9d2248F3
0.00227221 S
443490082025-08-24 17:42:42154 days ago1756057362
0x6a98B622...e9d2248F3
0.16312103 S
443483212025-08-24 17:30:37154 days ago1756056637
0x6a98B622...e9d2248F3
0.00227221 S
443483102025-08-24 17:30:25154 days ago1756056625
0x6a98B622...e9d2248F3
0.03125809 S
443483042025-08-24 17:30:09154 days ago1756056609
0x6a98B622...e9d2248F3
0.01463495 S
443482952025-08-24 17:29:41154 days ago1756056581
0x6a98B622...e9d2248F3
0.01610917 S
443482902025-08-24 17:29:27154 days ago1756056567
0x6a98B622...e9d2248F3
0.00227221 S
443482832025-08-24 17:29:02154 days ago1756056542
0x6a98B622...e9d2248F3
0.16312279 S
443475472025-08-24 17:04:31154 days ago1756055071
0x6a98B622...e9d2248F3
0.00227221 S
443475362025-08-24 17:04:26154 days ago1756055066
0x6a98B622...e9d2248F3
0.03126161 S
443475252025-08-24 17:04:22154 days ago1756055062
0x6a98B622...e9d2248F3
0.01512093 S
443475042025-08-24 17:04:10154 days ago1756055050
0x6a98B622...e9d2248F3
0.01610928 S
443474852025-08-24 17:04:00154 days ago1756055040
0x6a98B622...e9d2248F3
0.00227221 S
443474682025-08-24 17:03:53154 days ago1756055033
0x6a98B622...e9d2248F3
0.16312103 S
443448712025-08-24 16:12:46155 days ago1756051966
0x6a98B622...e9d2248F3
0.00227221 S
443448662025-08-24 16:12:41155 days ago1756051961
0x6a98B622...e9d2248F3
0.03563609 S
443448562025-08-24 16:12:36155 days ago1756051956
0x6a98B622...e9d2248F3
0.01459524 S
443239592025-08-24 12:05:06155 days ago1756037106
0x6a98B622...e9d2248F3
0.00227221 S
443239532025-08-24 12:05:02155 days ago1756037102
0x6a98B622...e9d2248F3
0.16406703 S
443237622025-08-24 12:02:09155 days ago1756036929
0x6a98B622...e9d2248F3
0.00227221 S
443237512025-08-24 12:02:01155 days ago1756036921
0x6a98B622...e9d2248F3
0.03563961 S
443237462025-08-24 12:01:57155 days ago1756036917
0x6a98B622...e9d2248F3
0.01513308 S
443237332025-08-24 12:01:47155 days ago1756036907
0x6a98B622...e9d2248F3
0.00227221 S
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x421297F3...ce437d860
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
SdemoniakMagicAgentShadowSmartVault

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 666 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : SdemoniakMagicAgentShadowSmartVault.sol
// File: contracts\ILK\core\interfaces\IDexTools.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
/**
Interface de base 
 */
interface IDex {
    struct TokenAmount {
        address token;
        uint256 amount;
    }
    function registered(address pool) external view returns (bool);
    function getPath(address tokenA, address tokenB) external view returns (bytes memory path);
    function swap(TokenAmount calldata tokenA, address tokenB, address to) external returns (uint256);
    function openPosition(address pool, TokenAmount memory token0, TokenAmount memory token1, int24 tickLow, int24 tickUp) external returns (uint256 positionID, uint128 liquidity, uint256 amount0, uint256 amount1);
    function increasePosition(uint256 positionID, TokenAmount memory token0, TokenAmount memory token1) external returns (uint128 liquidity, uint256 amount0, uint256 amount1);
    
    //after use SetApproval(address IDex, true).
    function decreasePosition(uint256 positionID, uint128 liquidity) external returns (uint256 amount0, uint256 amount1);
    function closePosition(uint256 positionID) external;
    function showRewards(address pair, uint256 tokenId) external view returns (TokenAmount[] memory tokens);
    function claimRewards(uint256 tokenId, address pair, bool exit) external returns (TokenAmount[] memory tokens);
    function stakeFrom(address pool, uint256 positionID, TokenAmount memory tokenToStake) external returns (uint128);
    function nfpManager() external view returns (address);
}
// File: contracts\openzeppelin\contracts\token\ERC20\IERC20.sol
pragma solidity ^0.8.19;
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: contracts\openzeppelin\contracts\utils\introspection\IERC165.sol
pragma solidity ^0.8.19;
/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: contracts\openzeppelin\contracts\token\ERC721\IERC721.sol
pragma solidity ^0.8.19;
/**
 * @dev Required interface of an ERC-721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);
    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC-721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
     *   {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;
    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;
    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the address zero.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;
    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);
    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: contracts\openzeppelin\contracts\token\ERC721\extensions\IERC721Enumerable.sol
pragma solidity ^0.8.19;
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);
    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: contracts\openzeppelin\contracts\token\ERC721\IERC721Receiver.sol
pragma solidity ^0.8.19;
/**
 * @title ERC-721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC-721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be
     * reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
// File: contracts\sdaemon0x\tools\SdemoniakMagicInterfaces.sol
pragma solidity ^0.8.19;
interface IPair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function tickSpacing() external view returns (int24);
    function slot0() external view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked);
}
interface IVault {
    function controller() external view returns (address);
    function run() external view returns (bool);
    function setRun(bool go) external;
}
interface IMissionFarmer {
    enum Direction {
        BOTH,
        UP,
        DOWN
    }
    struct Mission {
        uint24      ranges;               
        bool        useTickLimitLow;
        int24       tickLimitLow;
        int24       tickLimitLowOpen;
        bool        useTickLimitHigh;
        int24       tickLimitHigh;
        int24       tickLimitHighOpen;
        Direction   direction;
        bool        autoClaim;
        bool        autoCompound;
    }
    struct Data {
        IPair       pair;
        address     token0;
        address     token1;
        int24       tickSpacing;
    }
    function getMission(uint256 tokenID) external view returns (Mission calldata mission);
    function setMission(uint256 tokenID, Mission calldata mission) external;
    function setRanges(uint256 tokenID, uint24 range) external;
    function setTickLimitLow(uint256 tokenID, bool useTickLimitLow, int24 tickLimitLow, int24 tickLimitLowOpen) external;
    function setTickLimitHigh(uint256 tokenID, bool useTickLimitHigh, int24 tickLimitHigh, int24  tickLimitHighOpen) external;
    function setDirection(uint256 tokenID, Direction dir) external;
    function setAutoClaim(uint256 tokenID, bool toggle) external;
    function setAutoCompound(uint256 tokenID, bool toggle) external;
    
    function setPair(uint256 tokenID, address _pair) external;
    function getData(uint256 tokenID) external view returns (Data calldata data);
    function clone(uint256 from, uint256 to) external;
    function start(uint256 tokenID) external;
    function stop(uint256 tokenID) external;
    function nfpManager(uint256 tokenID) external view returns (address);
    function setDex(uint256 tokenID, IDex newDex) external;
    function getDex(uint256 tokenID) external view returns (IDex);
    function setState(uint256 tokenID, string memory state, bool error_) external; 
}
// File: contracts/sdaemon0x/tools/SdemoniakMagicAgentShadowSmartVault.sol
pragma solidity ^0.8.19;
/**
    Sdemoniak Magic Smart Vault
    Author: Amadeos
    Comment: The core of the sdemoniak agent protocols!
    This contract is the main contract of sdemoniak
    It's a vault available for the NFT holder "Sdemoniak Magic Agent" symbol "Magic"
    This vault contains the bool run settables by the ownerOf ("holder") YOU, IF YOU ARE SMART via the mission.
    Like this, We can check if data is coherent before launch bot.
    This state prevent to manipulate in bad time and to share 'control' with more right to the owner. This last delegate the vault contents to be work by an IA Agent off chain when the state run is on.
        - run off if false:
    In this state, the ownerOf ("holder") of the nft is the only accessors to withdraw ERC20 and NFT.
        - run on is true:
    In this state, the controller (IA Agent off chain) can request to swap, mint, increase, decrease, close position. 
    Only the contract holds always ERC20 and TokenID for position. 
    Token A and token B or Token ID is always in contract.
    In swap, the IA Agent need to mark the rebalance and memoruze to use direction behavior.
    When the position is close, 1 options (auto-claim) the tokenId for the position is sent to the ownerOf ("holder") of the nft
    The owner of the NFT is always able to stop delgation by set state to false.
            .... in 
            function stop(uint256 tokenID) external onlyNftOwner(tokenID) {
                IVault sv = IVault(magicAgent.SmartVaults(tokenID));
                sv.setRun(false);
            }
            ....
*/
interface ISdemoniakMagicFV is IERC721Enumerable {
    function computeDevFee(uint256 amount) external view returns (address dev_, uint256 fee, uint256 rest);
    function computeReferralFee(uint256 tokenId, uint256 amount) external view returns (address ref1, uint256 fee1, address ref2, uint256 fee2, uint256 rest);
    function computeFees(uint256 tokenId, uint256 amount) external view returns (address dev_, uint256 feeDev, address ref1, uint256 fee1, address ref2, uint256 fee2, uint256 rest);
    function addRewards(uint256 tokenId, IDex.TokenAmount[] calldata rewards) external;
}
interface IVaultGas {
    function depositGas() external payable;
}
contract SdemoniakMagicAgentShadowSmartVault is IVault, IVaultGas, IERC165, IERC721Receiver {
    function thanksSonic() external {
        (bool _success,) = address(0xDC2B0D2Dd2b7759D97D50db4eabDC36973110830).call(abi.encodeWithSignature("selfRegister(uint256)", 170));
        require(_success);
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165) returns (bool) {
        return interfaceId == type(IERC721Receiver).interfaceId || interfaceId == type(IERC165).interfaceId;
    }
    IMissionFarmer      public constant im = IMissionFarmer(0xDc3F37aC18c5d5Fc9928D70E2D5c00d055B99Cd3);
    address             public constant shadow = 0x3333b97138D4b086720b5aE8A7844b1345a33333;
    ISdemoniakMagicFV   public immutable agentNFT; 
    uint256             public immutable nftId; //the immutable key to link forever to SdemoniakMagicAgent 
    
    address             public controller; //SdeamoniaK wallet controller
    bool                public run = false; 
    IERC721             public nfpManager;
    IDex                public dex;
    IPair               public pair;
    uint256             public positionID;
    int24               public mark_tick;  
    constructor(address parent, uint256 _nftId, address _controller) {
        agentNFT = ISdemoniakMagicFV(parent);
        nftId = _nftId;
        controller = _controller;
    }
    function onERC721Received(address, address from_, uint256 tokenId_, bytes calldata) external returns (bytes4) {
        if (from_ == agentNFT.ownerOf(nftId)) {
            if (msg.sender == im.nfpManager(nftId)) {
                require(!run && positionID == 0);
                positionID = tokenId_;
            }
        }
        return IERC721Receiver.onERC721Received.selector;
    }
    modifier onlyTheOwner() {
        require(msg.sender == agentNFT.ownerOf(nftId));
        _;
    }
    // only via mission.
    function setRun(bool go) external {
        require(msg.sender == address(im)); //only via the mission to run (mission check if base data seems correct)
        if (go) {
            IMissionFarmer.Data memory m = im.getData(nftId);
            dex = im.getDex(nftId);
            nfpManager = IERC721(dex.nfpManager());
            pair = m.pair;
            IERC20 token0 = IERC20(m.token0);
            IERC20 token1 = IERC20(m.token1);
            address d = address(dex);
            token0.approve(d, type(uint256).max);
            token1.approve(d, type(uint256).max);
            nfpManager.setApprovalForAll(d, true);
            uint256 bal0 = token0.balanceOf(address(this));
            uint256 bal1 = token1.balanceOf(address(this));
            require (bal0 + bal1 + positionID > 0);
        }
        run = go;
        if (!run && positionID != 0) {
            if (nfpManager.ownerOf(positionID) == address(this)) {
                _closePosition(false, false);
            }
        }
    }
   
    function _wdERC20(address to, IERC20 token) internal {
        uint256 bal = token.balanceOf(address(this));    
        _wdERC20b(token, to, bal);
    }
    function _wdERC20b(IERC20 token, address to, uint256 amount) internal {
        if (amount > 0 && address(token) != address(0)) token.transfer(to, amount);
    }
    
    function claimCurrentReward(bool autoCompound) external onlyTheOwner {
        _claimCurrentReward(msg.sender, autoCompound);
    }
    function _claimCurrentReward(address to, bool autoCompound) internal {
        require(positionID != 0 && nfpManager.ownerOf(positionID) == address(this));
        IMissionFarmer.Data memory m = im.getData(nftId);
        
        IERC20 token0 = IERC20(m.token0);
        IERC20 token1 = IERC20(m.token1);
        uint256 bal0 = token0.balanceOf(address(this));
        uint256 bal1 = token1.balanceOf(address(this));
        IDex.TokenAmount[] memory tokens = dex.claimRewards(positionID, address(pair), true);
        agentNFT.addRewards(nftId, tokens);
        
        if (!autoCompound) {
            uint256 bal0_b = token0.balanceOf(address(this));
            uint256 bal1_b = token1.balanceOf(address(this));
            if (bal0_b > bal0) token0.transfer(to, bal0_b - bal0);
            if (bal1_b > bal1) token1.transfer(to, bal1_b - bal1);
            _wdERC20(to, IERC20(shadow));
        }
    }
    function depositGas() external payable {
        require(msg.value > 0);
    }
    function withdrawGas() external onlyTheOwner {
        uint256 bal = address(this).balance;
        (bool ok,) = payable(msg.sender).call{value: bal}("");
        require(ok);
    }
    function withdraw() external onlyTheOwner {
        require(!run);
        IMissionFarmer.Data memory m = im.getData(nftId);
        _wdERC20(msg.sender, IERC20(m.token0));
        _wdERC20(msg.sender, IERC20(m.token1));
        _wdERC20(msg.sender, IERC20(shadow));
    }
    function withdrawERC721(IERC721 nft, uint256 id) external onlyTheOwner {
        require(!run);
        require(nft.ownerOf(id) == address(this));
        nft.safeTransferFrom(address(this), msg.sender, id);
        if (nfpManager == nft) {
            if (id == positionID) {
                positionID = 0;
            }
        }
    }
    function recoverERC20(IERC20 token) external onlyTheOwner {
        require(!run);
        _wdERC20(msg.sender, token);
    }
    
    function setControler(address _controller) external {
        require(msg.sender == controller);
        controller = _controller;
    }
    event onGasController(uint256 price);
    modifier onlyTheController() {
        uint256 g = gasleft();
        require(run);
        require(msg.sender == controller);
        _;
        uint256 p = ((g - gasleft()) + 21000) * tx.gasprice;
        (bool ok,) = payable(msg.sender).call{value: p}("");
        require(ok);
        emit onGasController(p);
    }
    function setState(string memory state, bool err) onlyTheController external {
        im.setState(nftId, state, err);
    }
    function swap(address tokenSrc, uint256 amountIn, address token_dst, bool mark) onlyTheController external returns (uint256) {
        if (mark) {
           (,mark_tick,,,,,) = pair.slot0();
        }
        
        IERC20 t = IERC20(tokenSrc);
        (address devl, uint256 fee0, address ref1, uint256 fee1, address ref2, uint256 fee2, uint256 rest) = agentNFT.computeFees(nftId, amountIn);
        _wdERC20b(t, devl, fee0);
        _wdERC20b(t, ref1, fee1);
        _wdERC20b(t, ref2, fee2);
        IDex.TokenAmount memory tam = IDex.TokenAmount(address(t), rest);
        return dex.swap(tam, token_dst, address(this));
    }
    function openPosition(address pool, address token0_addr, address token1_addr, int24 tickLow, int24 tickUp, uint256 amount0, uint256 amount1) onlyTheController external returns (uint256) {
        require(positionID == 0);
        (positionID,,,) = dex.openPosition(pool, IDex.TokenAmount(token0_addr, amount0), IDex.TokenAmount(token1_addr, amount1), tickLow, tickUp);
        return positionID;
    }   
   function increasePosition(IERC20 token0, IERC20 token1) external onlyTheController {
        require(positionID != 0 && nfpManager.ownerOf(positionID) == address(this));
        dex.increasePosition(positionID, IDex.TokenAmount(address(token0), token0.balanceOf(address(this))), IDex.TokenAmount(address(token1), token1.balanceOf(address(this))) );
    }
    function closePosition(bool claimReward, bool autoCompound) external onlyTheController {
        _closePosition(claimReward, autoCompound);
    }
    function _closePosition(bool claimReward, bool autoCompound) internal  {
        require(positionID != 0 && nfpManager.ownerOf(positionID) == address(this));
        //manage reward
        address owner = agentNFT.ownerOf(nftId);
        if (claimReward) {
            _claimCurrentReward(owner, autoCompound);
        }
        else {
            IDex.TokenAmount[] memory tokens = dex.showRewards(address(pair), positionID);
            agentNFT.addRewards(nftId, tokens);
        }
        
        dex.closePosition(positionID);
        nfpManager.safeTransferFrom(address(this), owner, positionID);
        positionID = 0;
    }
}

Settings
{
  "metadata": {
    "appendCBOR": true,
    "bytecodeHash": "ipfs",
    "useLiteralContent": false
  },
  "optimizer": {
    "enabled": true,
    "runs": 666
  },
  "viaIR": true,
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"parent","type":"address"},{"internalType":"uint256","name":"_nftId","type":"uint256"},{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"onGasController","type":"event"},{"inputs":[],"name":"agentNFT","outputs":[{"internalType":"contract ISdemoniakMagicFV","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"autoCompound","type":"bool"}],"name":"claimCurrentReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"claimReward","type":"bool"},{"internalType":"bool","name":"autoCompound","type":"bool"}],"name":"closePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dex","outputs":[{"internalType":"contract IDex","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"im","outputs":[{"internalType":"contract IMissionFarmer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token0","type":"address"},{"internalType":"contract IERC20","name":"token1","type":"address"}],"name":"increasePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mark_tick","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nfpManager","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"token0_addr","type":"address"},{"internalType":"address","name":"token1_addr","type":"address"},{"internalType":"int24","name":"tickLow","type":"int24"},{"internalType":"int24","name":"tickUp","type":"int24"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"openPosition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"run","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setControler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"go","type":"bool"}],"name":"setRun","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"state","type":"string"},{"internalType":"bool","name":"err","type":"bool"}],"name":"setState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shadow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenSrc","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"token_dst","type":"address"},{"internalType":"bool","name":"mark","type":"bool"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thanksSonic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"nft","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdrawERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawGas","outputs":[],"stateMutability":"nonpayable","type":"function"}]

0x60c0346200014557601f62002db138819003918201601f19168301916001600160401b038311848410176200014a5780849260609460405283398101031262000145576200004d8162000160565b6200006060406020840151930162000160565b600080546001600160a01b0393841660805260a0949094526001600160a81b03199093169116179055604051612c3b908162000176823960805181818161041601528181610b46015281816113160152818161165e0152818161177501528181611c1d01528181611cba01528181611d3601528181611eec015281816120850152612587015260a0518181816103e80152818161065d01528181610a2a01528181610b6901528181610e65015281816112e3015281816116290152818161179701528181611be801528181611cff01528181611eb40152818161205001526124780152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001455756fe608060408181526004918236101561001657600080fd5b60009260e08435811c92836301ffc9a714612107575082631261795d1461202e578263150b7a0214611e4c5782633ccfd60b14611cde5782633fd773e914611c995782634b91c03314611bbc5782635943409814611b325782635f5f62f914611af1578263692058c214611ac85782636c6603141461171b57826398bbc3c7146116f25782639e8c708e146115fd578263a7c1c38b14611276578263a8aa1b311461124d578263ac600a3c1461121d578263ae9bb69214611208578263c0406226146111e2578263c17d504b14610a70578263c52ac0bd14610a4d578263c6bc518214610a11578263ce05f8c7146109f2578263cfd454d314610767578263eef9203a1461059d57848363f3e414f8146103ae57508263f484bec2146101a85750508063f77c4791146101835763fb0ea8351461015257600080fd5b3461017f578160031936011261017f576020905173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd38152f35b5080fd5b503461017f578160031936011261017f576001600160a01b0360209254169051908152f35b90929150346103aa573660031901126103a6576101c361215b565b916101cc612171565b926101d5612187565b93606435918260020b8093036103a157608435918260020b8093036103a15787925a9484549860ff8a60a01c161561039d576001600160a01b03809a16330361039d57875461039d578960025416938a8a5191610231836121bb565b16815260a43560208201528a8a5192610249846121bb565b16825260c435602083015289519a8b9663ba90a46960e01b885216898701526024860161028891602080916001600160a01b0381511684520151910152565b80516001600160a01b0316606486015260200151608485015260a484015260c4830152815a9360e492608095f193841561039357859461034a575b506102d2908483555a90612444565b90615208820180921161033757506102eb903a90612bc6565b928080808087335af16102fc61223f565b501561033457507fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe6602080948351908152a151908152f35b80fd5b634e487b7160e01b855260119052602484fd5b9093506080813d821161038b575b8161036560809383612201565b81010312610387578061037f60206102d293519201612be8565b5093906102c3565b8480fd5b3d9150610358565b83513d87823e3d90fd5b8580fd5b600080fd5b8280fd5b8380fd5b8083863461059957806003193601126105995781356001600160a01b03808216809203610387576024359280516331a9108f60e11b8082527f0000000000000000000000000000000000000000000000000000000000000000878301526020918281602481887f0000000000000000000000000000000000000000000000000000000000000000165afa90811561058f579085918a91610553575b5016330361054f5760ff885460a01c1661054f57825190815285878201528181602481885afa91821561054557889261050b575b5050823091160361039d57823b1561039d578051632142170760e11b81523086820190815233602082015260408101869052909190879083908190606001038183885af190811561050257509086916104ee575b505060015416146104e0575050f35b8154146104ea5750f35b5580f35b6104f7906121ed565b6103875784876104d1565b513d88823e3d90fd5b90809250813d831161053e575b6105228183612201565b8101031261053a576105339061226f565b888061047d565b8680fd5b503d610518565b83513d8a823e3d90fd5b8780fd5b809250848092503d8311610588575b61056c8183612201565b810103126105845761057e859161226f565b8b610449565b8880fd5b503d610562565b84513d8b823e3d90fd5b5050fd5b5083833461017f578060031936011261017f5782359267ffffffffffffffff84116103a657366023850112156103a65783810135936105db85612223565b946105e884519687612201565b80865236602482840101116103875760249291818692602095869301838a0137870101526106146121ac565b5a90855460ff8160a01c161561053a576001600160a01b0316330361039d5773dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd3803b1561053a5785516363adb18760e11b81527f000000000000000000000000000000000000000000000000000000000000000085820152606060248201528851606482018190529092885b8281106107535750928092818a6084828683998484819a8501015215156044830152601f801991011681010301925af1801561074957610735575b50506106dc905a90612444565b90615208820180921161033757506106f5903a90612bc6565b8380808084335af161070561223f565b50156103aa577fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe69251908152a180f35b61073e906121ed565b6103875784866106cf565b86513d84823e3d90fd5b8a8101880151858201608401528701610694565b509050346103a657816003193601126103a65761078261215b565b9061078b612171565b5a85549360ff8560a01c161561053a576001600160a01b03809516330361053a57835480151580610976575b1561054f57878680600254169316928851976370a0823160e01b96878a5230898b01526020998a816024818a5afa90811561096c57859161093b575b508b5196610800886121bb565b87528a87015216958951908152308882015288816024818a5afa9081156109315783916108f5575b5091606094939161089861087d9860a4958d5191610845836121bb565b82528c8201528c51998a978896639f71e76160e01b88528d8801526024870190602080916001600160a01b0381511684520151910152565b80516001600160a01b03166064860152602001516084850152565b5af180156108eb576108b1575b6106dc91505a90612444565b6060823d82116108e3575b816108c960609383612201565b8101031261039d576108dd6106dc92612be8565b506108a5565b3d91506108bc565b85513d88823e3d90fd5b80935089809250959492953d831161092a575b6109128183612201565b810103126103a1579051919290918991906060610828565b503d610908565b8a513d85823e3d90fd5b8095508b8092503d8311610965575b6109548183612201565b810103126103a1578b9351386107f3565b503d61094a565b8c513d87823e3d90fd5b506024602087600154168951928380926331a9108f60e11b8252868b8301525afa9081156109e85789916109af575b50861630146107b7565b90506020813d82116109e0575b816109c960209383612201565b81010312610584576109da9061226f565b386109a5565b3d91506109bc565b88513d8b823e3d90fd5b509050346103a657826003193601126103a65760209250549051908152f35b5050503461017f578160031936011261017f57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050503461017f578160031936011261017f5760209060055460020b9051908152f35b509050346103a657602091826003193601126103aa57610a8e61219d565b73dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd380330361039d5781610e63575b5060ff9060ff60a01b865491151560a01b169060ff60a01b19161780865560a01c161580610e59575b610ae1578380f35b6001600160a01b039283600154169383549483516331a9108f60e11b9081815287878201528481602481865afa908115610e4f578991610e1a575b5083163014610b2e575b505050508380f35b600091848815159182610dad575b50501561017f57827f000000000000000000000000000000000000000000000000000000000000000016917f000000000000000000000000000000000000000000000000000000000000000091865190815282888201528581602481875afa958615610da3578296610d67575b50506000610bed9198856002541686600354168a8a5195869485938493630c67cbcb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03915afa908115610d5c57600091610d3b575b50823b156103a157610c2a92600092838851809681958294630bfc87c360e11b84528d84016123dd565b03925af18015610d3057610d1c575b5080600254168454813b1561053a578691602483928751948593849263a126d60160e01b84528b8401525af18015610d1257908691610cfe575b505060015416835491813b1561039d578351632142170760e11b8152308682019081526001600160a01b03909216602083015260408201939093529192918591849182908490829060600103925af1908115610cf55750908391610ce1575b50505538808080808080610b26565b610cea906121ed565b61017f578138610cd2565b513d85823e3d90fd5b610d07906121ed565b610387578438610c73565b84513d88823e3d90fd5b610d279195506121ed565b60009338610c39565b84513d6000823e3d90fd5b610d56913d8091833e610d4e8183612201565b810190612335565b38610c00565b86513d6000823e3d90fd5b9080929650813d8311610d9c575b610d7f8183612201565b81010312610387576000610d95610bed9261226f565b9591610ba9565b503d610d75565b87513d84823e3d90fd5b602492508751928380928682528c8c8301525afa908115610e10578391610ddb575b50831630148438610b3c565b90508481813d8311610e09575b610df28183612201565b810103126103a657610e039061226f565b38610dcf565b503d610de8565b86513d85823e3d90fd5b90508481813d8311610e48575b610e318183612201565b8101031261058457610e429061226f565b38610b1c565b503d610e27565b86513d8b823e3d90fd5b5081541515610ad9565b7f0000000000000000000000000000000000000000000000000000000000000000908351630178fe3f60e01b815282868201526024926080828581865afa918215610e4f579088918a936111b2575b508487518095819363b5f0f1b760e01b83528b8301525afa9182156111a8578892611169575b50876001600160a01b038093166001600160a01b03198181600254161760025587516398bbc3c760e01b81528a818b81865afa9081156110e9579086918591611131575b5016816001541617600155848451169060035416176003558387818b860151169401511693875163095ea7b360e01b90818152838b8201526000199081898201528c81604481898b5af18015611127576110f3575b508951918252838b830152878201528a81604481878a5af180156110e9576110b5575b5060015416803b156103a657604483928951948593849263a22cb46560e01b84528d84015260018a8401525af18015610e4f576110a2575b50845192878482816370a0823160e01b95868252308c8301525afa938415610e4f57908892918a95611071575b508651809481938252308a8301525afa908115611067578791611038575b506110259061102d92612312565b845490612312565b156103875738610ab0565b90508581813d8311611060575b61104f8183612201565b810103126103a1575161102d611017565b503d611045565b84513d89823e3d90fd5b8381949296503d831161109b575b6110898183612201565b810103126103a1578791519338610ff9565b503d61107f565b6110ae909891986121ed565b9638610fcc565b8a81813d83116110e2575b6110ca8183612201565b810103126103aa576110db90612305565b5038610f94565b503d6110c0565b89513d86823e3d90fd5b8c81813d8311611120575b6111088183612201565b8101031261039d5761111990612305565b5038610f71565b503d6110fe565b8b513d88823e3d90fd5b8092508c8092503d8311611162575b61114a8183612201565b810103126103aa5761115c869161226f565b38610f1c565b503d611140565b9091508681813d83116111a1575b6111818183612201565b8101031261054f57516001600160a01b038116810361054f579038610ed8565b503d611177565b85513d8a823e3d90fd5b6111d491935060803d81116111db575b6111cc8183612201565b810190612291565b9138610eb2565b503d6111c2565b5050503461017f578160031936011261017f5760ff6020925460a01c1690519015158152f35b84806003193601126103345734156103345780f35b5050503461017f578160031936011261017f5760209051733333b97138d4b086720b5ae8a7844b1345a333338152f35b5050503461017f578160031936011261017f576020906001600160a01b03600354169051908152f35b908385346103345760803660031901126103345761129261215b565b9261129b612187565b936064359586151587036103aa575a9184549760ff8960a01c161561039d576001600160a01b03809916330361039d5790889161152e575b1685519163ae9c5d0960e01b83527f000000000000000000000000000000000000000000000000000000000000000085840152602435602484015280836044818c7f0000000000000000000000000000000000000000000000000000000000000000165afa928315611524578687889089928a948b968c9961149a575b5050611379936084969361136d899794611373946113c49b612b2a565b86612b2a565b83612b2a565b875190611385826121bb565b81528660209a8b95868401528060025416908a519b8c968795639d9d3a0d60e01b87528b870190602080916001600160a01b0381511684520151910152565b1660448401523060648401525af194851561149057839561145f575b506113ec905a90612444565b90615208820180921161144c5750611405903a90612bc6565b908080808085335af161141661223f565b50156103345750837fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe6918351908152a151908152f35b634e487b7160e01b835260119052602482fd5b9094508581813d8311611489575b6114778183612201565b810103126103a65751936113ec6113e0565b503d61146d565b84513d85823e3d90fd5b96509750505050505082813d831161151d575b6114b78183612201565b810103126103875760846113c4916113796114d18561226f565b6020860151956113736114e58c830161226f565b606083015161136d6114f96080860161226f565b9260c060a0870151960151969b90929395969b945094979950509396819550611350565b503d6114ad565b87513d88823e3d90fd5b9082859160035416885192838092633850c7bd60e01b82525afa90811561152457908992918791611573575b5062ffffff19600554169062ffffff16176005556112d3565b80929350848092503d83116115f6575b61158d8183612201565b8101031261039d5780518981160361039d576115ab60208201612283565b906115b7888201612bd9565b506115c460608201612bd9565b506115d160808201612bd9565b5060a081015160ff81160361053a57906115ef60c08b949301612305565b508a61155a565b503d611583565b509050346103a65760203660031901126103a65761161961215b565b918051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000000908301526001600160a01b0391602081602481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156116e9575084916116b0575b5016330361017f5760ff825460a01c1661017f576116ad9033612ab0565b80f35b90506020813d82116116e1575b816116ca60209383612201565b810103126103aa576116db9061226f565b3861168f565b3d91506116bd565b513d86823e3d90fd5b5050503461017f578160031936011261017f576020906001600160a01b03600154169051908152f35b509050346103a657816003193601126103a65761173661219d565b61173e6121ac565b5a91855460ff8160a01c161561053a576001600160a01b03809116330361053a578454879381151580611a48575b156105845788837f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000938a51966331a9108f60e11b8852858b890152602088602481865afa978815611a3e578498611a03575b501561193e575050506117f4915083612451565b80600254168554813b15610387578491602483928a51948593849263a126d60160e01b84528c8401525af1801561193457908491611920575b505060015416845491813b156103aa578651632142170760e11b8152308782019081526001600160a01b03909216602083015260408201939093528391839182908490829060600103925af1801561191657611902575b508255611892905a90612444565b9061520882018092116118ef57506118ab903a90612bc6565b908280808085335af16118bc61223f565b50156103a6577fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe69160209151908152a180f35b634e487b7160e01b845260119052602483fd5b61190c82916121ed565b6103345738611884565b85513d84823e3d90fd5b611929906121ed565b6103a657823861182d565b87513d86823e3d90fd5b6002546003548c51630c67cbcb60e01b81529088166001600160a01b03168c82019081526020810193909352939450849184918816908290819060400103915afa9182156109315783926119e7575b50803b156103a6576119b593838a8c5196879586948593630bfc87c360e11b855284016123dd565b03925af180156119dd576119ca575b506117f4565b6119d59193506121ed565b8591386119c4565b87513d8a823e3d90fd5b6119fc9192503d8085833e610d4e8183612201565b903861198d565b9097506020813d8211611a36575b81611a1e60209383612201565b810103126103aa57611a2f9061226f565b96386117e0565b3d9150611a11565b8c513d86823e3d90fd5b506024602084600154168a51928380926331a9108f60e11b8252878d8301525afa908115611abe578a91611a81575b508316301461176c565b90506020813d8211611ab6575b81611a9b60209383612201565b81010312611ab257611aac9061226f565b38611a77565b8980fd5b3d9150611a8e565b89513d8c823e3d90fd5b5050503461017f578160031936011261017f576020906001600160a01b03600254169051908152f35b843461033457602036600319011261033457611b0b61215b565b8154906001600160a01b039081831633036103aa5716906001600160a01b03191617815580f35b5083833461017f578160031936011261017f57805160208101916307983f4560e21b835260aa602483015260248252606082019082821067ffffffffffffffff831117611ba957525182918291908273dc2b0d2dd2b7759d97d50db4eabdc369731108305af1611ba061223f565b50156103345780f35b634e487b7160e01b855260418652602485fd5b509050346103a65760203660031901126103a657611bd861219d565b918051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000000908301526001600160a01b0391602081602481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156116e957508491611c60575b5016330361017f576116ad9033612451565b90506020813d8211611c91575b81611c7a60209383612201565b810103126103aa57611c8b9061226f565b38611c4e565b3d9150611c6d565b5050503461017f578160031936011261017f57602090516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b848285346103a657826003193601126103a65780516331a9108f60e11b81527f00000000000000000000000000000000000000000000000000000000000000008382018190526001600160a01b0392916020816024817f000000000000000000000000000000000000000000000000000000000000000088165afa908115611e42579084918791611e07575b501633036103875760ff855460a01c16610387578151630178fe3f60e01b81529384015260808360248173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa8015611dfd57611dd6938591611ddf575b50611dcd8360208301511633612ab0565b01511633612ab0565b6116ad3361299f565b611df7915060803d81116111db576111cc8183612201565b85611dbc565b81513d86823e3d90fd5b9150506020813d8211611e3a575b81611e2260209383612201565b8101031261039d57611e34849161226f565b87611d6a565b3d9150611e15565b83513d88823e3d90fd5b509050346103a65760803660031901126103a657611e6861215b565b50611e71612171565b9260643567ffffffffffffffff8082116103a657366023830112156103a657818401359081116103a657369101602401116103345782516331a9108f60e11b81527f00000000000000000000000000000000000000000000000000000000000000008382018190526020956001600160a01b039287816024817f000000000000000000000000000000000000000000000000000000000000000088165afa80156120245784908690611fee575b81925016911614611f3a575b8451630a85bd0160e11b81528690f35b845190631ca84c6960e31b825284820152858160248173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa908115611fe4578391611faf575b50163314611f85575b8080611f2a565b60ff815460a01c161580611fa6575b15610334575060443590553880611f7e565b50815415611f94565b90508581813d8311611fdd575b611fc68183612201565b810103126103a657611fd79061226f565b38611f75565b503d611fbc565b85513d85823e3d90fd5b50508781813d831161201d575b6120058183612201565b810103126103875783612018819261226f565b611f1e565b503d611ffb565b87513d87823e3d90fd5b848285346103a657826003193601126103a6578051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000000908301526001600160a01b0391602081602481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610cf5575083916120ce575b50163303610334578080808047335af1611ba061223f565b90506020813d82116120ff575b816120e860209383612201565b810103126103a6576120f99061226f565b836120b6565b3d91506120db565b859083346103a65760203660031901126103a6573563ffffffff60e01b81168091036103a65760209250630a85bd0160e11b811490811561214a575b5015158152f35b6301ffc9a760e01b14905083612143565b600435906001600160a01b03821682036103a157565b602435906001600160a01b03821682036103a157565b604435906001600160a01b03821682036103a157565b6004359081151582036103a157565b6024359081151582036103a157565b6040810190811067ffffffffffffffff8211176121d757604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116121d757604052565b90601f8019910116810190811067ffffffffffffffff8211176121d757604052565b67ffffffffffffffff81116121d757601f01601f191660200190565b3d1561226a573d9061225082612223565b9161225e6040519384612201565b82523d6000602084013e565b606090565b51906001600160a01b03821682036103a157565b51908160020b82036103a157565b908160809103126103a157604051906080820182811067ffffffffffffffff8211176121d75760405280516001600160a01b03811681036103a1576122fd9160609184526122e16020820161226f565b60208501526122f26040820161226f565b604085015201612283565b606082015290565b519081151582036103a157565b9190820180921161231f57565b634e487b7160e01b600052601160045260246000fd5b602080828403126103a157815167ffffffffffffffff928382116103a157019083601f830112156103a15781519283116121d75760409283519461237e838360051b0187612201565b818652828087019260061b850101938185116103a1578301915b8483106123a85750505050505090565b85838303126103a15783869182516123bf816121bb565b6123c88661226f565b81528286015183820152815201920191612398565b906060604092838101928152602091818584809401528651809552019401926000905b83821061240f57505050505090565b90919293948382826124376001948a51602080916001600160a01b0381511684520151910152565b0196019493920190612400565b9190820391821161231f57565b60049182549060009180151580612918575b156103a65760408051630178fe3f60e01b81527f00000000000000000000000000000000000000000000000000000000000000008782018190529192602491608081848173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa9081156127a05787916128fa575b506001600160a01b03916020968387818a8601511694015116958751946370a0823160e01b938487528d30908801528a878981895afa9687156128f057908e98979695949392918d976128ac575b508a5198858a5230908a01528b8989818d5afa98891561285e57908f8c8f93849c612868575b5083929185946064928d9897600254169087600354169051998a96879563463c7ab360e11b8752860152840152600160448401525af192831561285e578d93612841575b507f00000000000000000000000000000000000000000000000000000000000000001690813b1561283d57918c918f93836125d3958e5196879586948593630bfc87c360e11b855284016123dd565b03925af1801561283357612820575b50156125f6575b5050505050505050505050565b865190808252308c83015288828681865afa918215612816579089918b936127e5575b50885195869182528d309083015281895afa9384156127db57908892918a956127aa575b50838111612714575b50505050818111612672575b505050505050612662915061299f565b38808080808080808080806125e9565b9186866126856126b6999a948896612444565b865163a9059cbb60e01b81526001600160a01b03909316948301948552602085015290978893849291839160400190565b03925af190811561270b57506126d1575b8080808695612652565b82813d8311612704575b6126e58183612201565b810103126103345750906126fb61266292612305565b509038806126c7565b503d6126db565b513d84823e3d90fd5b6127559361272191612444565b908a8a8d8a519687958694859363a9059cbb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03925af180156127a05761276c575b858180612646565b8581813d8311612799575b6127818183612201565b8101031261053a5761279290612305565b5038612764565b503d612777565b85513d89823e3d90fd5b8381949296503d83116127d4575b6127c28183612201565b810103126103a157879151933861263d565b503d6127b8565b87513d8b823e3d90fd5b8281939294503d831161280f575b6127fd8183612201565b810103126103a1578890519138612619565b503d6127f3565b88513d8c823e3d90fd5b61282c909a919a6121ed565b98386125e2565b89513d8d823e3d90fd5b8c80fd5b6128579193508d3d8091833e610d4e8183612201565b9138612584565b8b513d8f823e3d90fd5b935050509192939495969798508b81813d83116128a5575b61288a8183612201565b8101031261283d575197969594939291908c908f8c8a612540565b503d612880565b8c8092999a5081939495969798503d83116128e9575b6128cc8183612201565b810103126128e557908d9796959493929151953861251a565b8b80fd5b503d6128c2565b8a513d8e823e3d90fd5b612912915060803d81116111db576111cc8183612201565b386124cc565b5060246001600160a01b0360208160015416604051938480926331a9108f60e11b8252878c8301525afa918215612994578592612959575b50163014612463565b9091506020813d821161298c575b8161297460209383612201565b81010312610387576129859061226f565b9038612950565b3d9150612967565b6040513d87823e3d90fd5b6040516370a0823160e01b8152306004820152733333b97138d4b086720b5ae8a7844b1345a33333916020918281602481875afa908115612a6f57600091612a83575b5080151580612a7b575b6129f7575b50505050565b60405163a9059cbb60e01b81526001600160a01b039290921660048301526024820152918190839060449082906000905af18015612a6f57612a3b575b80806129f1565b81813d8311612a68575b612a4f8183612201565b810103126103a157612a6090612305565b503880612a34565b503d612a45565b6040513d6000823e3d90fd5b5060016129ec565b908382813d8311612aa9575b612a998183612201565b81010312610334575051386129e2565b503d612a8f565b6040516370a0823160e01b81523060048201529291906020846024816001600160a01b0386165afa918215612a6f57600092612af4575b612af2939450612b2a565b565b91936020813d8211612b22575b81612b0e60209383612201565b810103126103875751929350839291612ae7565b3d9150612b01565b9180151580612bb4575b612b3d57505050565b60405163a9059cbb60e01b81526001600160a01b03928316600482015260248101919091529160209183916044918391600091165af18015612a6f57612b805750565b6020813d8211612bac575b81612b9860209383612201565b810103126103a157612ba990612305565b50565b3d9150612b8b565b506001600160a01b0383161515612b34565b8181029291811591840414171561231f57565b519061ffff821682036103a157565b51906fffffffffffffffffffffffffffffffff821682036103a15756fea264697066735822122016534d47faa73e46d6c96a77ae74bba3fbc64a194fb7a655b06160ff0b87843d64736f6c63430008130033000000000000000000000000677a4cf9f9d0ec0dad50268667086926d143502700000000000000000000000000000000000000000000000000000000000000030000000000000000000000005df6dd0a53fda7ec70809b591905efe14fe5d1fe

Deployed Bytecode

0x608060408181526004918236101561001657600080fd5b60009260e08435811c92836301ffc9a714612107575082631261795d1461202e578263150b7a0214611e4c5782633ccfd60b14611cde5782633fd773e914611c995782634b91c03314611bbc5782635943409814611b325782635f5f62f914611af1578263692058c214611ac85782636c6603141461171b57826398bbc3c7146116f25782639e8c708e146115fd578263a7c1c38b14611276578263a8aa1b311461124d578263ac600a3c1461121d578263ae9bb69214611208578263c0406226146111e2578263c17d504b14610a70578263c52ac0bd14610a4d578263c6bc518214610a11578263ce05f8c7146109f2578263cfd454d314610767578263eef9203a1461059d57848363f3e414f8146103ae57508263f484bec2146101a85750508063f77c4791146101835763fb0ea8351461015257600080fd5b3461017f578160031936011261017f576020905173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd38152f35b5080fd5b503461017f578160031936011261017f576001600160a01b0360209254169051908152f35b90929150346103aa573660031901126103a6576101c361215b565b916101cc612171565b926101d5612187565b93606435918260020b8093036103a157608435918260020b8093036103a15787925a9484549860ff8a60a01c161561039d576001600160a01b03809a16330361039d57875461039d578960025416938a8a5191610231836121bb565b16815260a43560208201528a8a5192610249846121bb565b16825260c435602083015289519a8b9663ba90a46960e01b885216898701526024860161028891602080916001600160a01b0381511684520151910152565b80516001600160a01b0316606486015260200151608485015260a484015260c4830152815a9360e492608095f193841561039357859461034a575b506102d2908483555a90612444565b90615208820180921161033757506102eb903a90612bc6565b928080808087335af16102fc61223f565b501561033457507fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe6602080948351908152a151908152f35b80fd5b634e487b7160e01b855260119052602484fd5b9093506080813d821161038b575b8161036560809383612201565b81010312610387578061037f60206102d293519201612be8565b5093906102c3565b8480fd5b3d9150610358565b83513d87823e3d90fd5b8580fd5b600080fd5b8280fd5b8380fd5b8083863461059957806003193601126105995781356001600160a01b03808216809203610387576024359280516331a9108f60e11b8082527f0000000000000000000000000000000000000000000000000000000000000003878301526020918281602481887f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa90811561058f579085918a91610553575b5016330361054f5760ff885460a01c1661054f57825190815285878201528181602481885afa91821561054557889261050b575b5050823091160361039d57823b1561039d578051632142170760e11b81523086820190815233602082015260408101869052909190879083908190606001038183885af190811561050257509086916104ee575b505060015416146104e0575050f35b8154146104ea5750f35b5580f35b6104f7906121ed565b6103875784876104d1565b513d88823e3d90fd5b90809250813d831161053e575b6105228183612201565b8101031261053a576105339061226f565b888061047d565b8680fd5b503d610518565b83513d8a823e3d90fd5b8780fd5b809250848092503d8311610588575b61056c8183612201565b810103126105845761057e859161226f565b8b610449565b8880fd5b503d610562565b84513d8b823e3d90fd5b5050fd5b5083833461017f578060031936011261017f5782359267ffffffffffffffff84116103a657366023850112156103a65783810135936105db85612223565b946105e884519687612201565b80865236602482840101116103875760249291818692602095869301838a0137870101526106146121ac565b5a90855460ff8160a01c161561053a576001600160a01b0316330361039d5773dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd3803b1561053a5785516363adb18760e11b81527f000000000000000000000000000000000000000000000000000000000000000385820152606060248201528851606482018190529092885b8281106107535750928092818a6084828683998484819a8501015215156044830152601f801991011681010301925af1801561074957610735575b50506106dc905a90612444565b90615208820180921161033757506106f5903a90612bc6565b8380808084335af161070561223f565b50156103aa577fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe69251908152a180f35b61073e906121ed565b6103875784866106cf565b86513d84823e3d90fd5b8a8101880151858201608401528701610694565b509050346103a657816003193601126103a65761078261215b565b9061078b612171565b5a85549360ff8560a01c161561053a576001600160a01b03809516330361053a57835480151580610976575b1561054f57878680600254169316928851976370a0823160e01b96878a5230898b01526020998a816024818a5afa90811561096c57859161093b575b508b5196610800886121bb565b87528a87015216958951908152308882015288816024818a5afa9081156109315783916108f5575b5091606094939161089861087d9860a4958d5191610845836121bb565b82528c8201528c51998a978896639f71e76160e01b88528d8801526024870190602080916001600160a01b0381511684520151910152565b80516001600160a01b03166064860152602001516084850152565b5af180156108eb576108b1575b6106dc91505a90612444565b6060823d82116108e3575b816108c960609383612201565b8101031261039d576108dd6106dc92612be8565b506108a5565b3d91506108bc565b85513d88823e3d90fd5b80935089809250959492953d831161092a575b6109128183612201565b810103126103a1579051919290918991906060610828565b503d610908565b8a513d85823e3d90fd5b8095508b8092503d8311610965575b6109548183612201565b810103126103a1578b9351386107f3565b503d61094a565b8c513d87823e3d90fd5b506024602087600154168951928380926331a9108f60e11b8252868b8301525afa9081156109e85789916109af575b50861630146107b7565b90506020813d82116109e0575b816109c960209383612201565b81010312610584576109da9061226f565b386109a5565b3d91506109bc565b88513d8b823e3d90fd5b509050346103a657826003193601126103a65760209250549051908152f35b5050503461017f578160031936011261017f57602090517f00000000000000000000000000000000000000000000000000000000000000038152f35b5050503461017f578160031936011261017f5760209060055460020b9051908152f35b509050346103a657602091826003193601126103aa57610a8e61219d565b73dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd380330361039d5781610e63575b5060ff9060ff60a01b865491151560a01b169060ff60a01b19161780865560a01c161580610e59575b610ae1578380f35b6001600160a01b039283600154169383549483516331a9108f60e11b9081815287878201528481602481865afa908115610e4f578991610e1a575b5083163014610b2e575b505050508380f35b600091848815159182610dad575b50501561017f57827f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d143502716917f000000000000000000000000000000000000000000000000000000000000000391865190815282888201528581602481875afa958615610da3578296610d67575b50506000610bed9198856002541686600354168a8a5195869485938493630c67cbcb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03915afa908115610d5c57600091610d3b575b50823b156103a157610c2a92600092838851809681958294630bfc87c360e11b84528d84016123dd565b03925af18015610d3057610d1c575b5080600254168454813b1561053a578691602483928751948593849263a126d60160e01b84528b8401525af18015610d1257908691610cfe575b505060015416835491813b1561039d578351632142170760e11b8152308682019081526001600160a01b03909216602083015260408201939093529192918591849182908490829060600103925af1908115610cf55750908391610ce1575b50505538808080808080610b26565b610cea906121ed565b61017f578138610cd2565b513d85823e3d90fd5b610d07906121ed565b610387578438610c73565b84513d88823e3d90fd5b610d279195506121ed565b60009338610c39565b84513d6000823e3d90fd5b610d56913d8091833e610d4e8183612201565b810190612335565b38610c00565b86513d6000823e3d90fd5b9080929650813d8311610d9c575b610d7f8183612201565b81010312610387576000610d95610bed9261226f565b9591610ba9565b503d610d75565b87513d84823e3d90fd5b602492508751928380928682528c8c8301525afa908115610e10578391610ddb575b50831630148438610b3c565b90508481813d8311610e09575b610df28183612201565b810103126103a657610e039061226f565b38610dcf565b503d610de8565b86513d85823e3d90fd5b90508481813d8311610e48575b610e318183612201565b8101031261058457610e429061226f565b38610b1c565b503d610e27565b86513d8b823e3d90fd5b5081541515610ad9565b7f0000000000000000000000000000000000000000000000000000000000000003908351630178fe3f60e01b815282868201526024926080828581865afa918215610e4f579088918a936111b2575b508487518095819363b5f0f1b760e01b83528b8301525afa9182156111a8578892611169575b50876001600160a01b038093166001600160a01b03198181600254161760025587516398bbc3c760e01b81528a818b81865afa9081156110e9579086918591611131575b5016816001541617600155848451169060035416176003558387818b860151169401511693875163095ea7b360e01b90818152838b8201526000199081898201528c81604481898b5af18015611127576110f3575b508951918252838b830152878201528a81604481878a5af180156110e9576110b5575b5060015416803b156103a657604483928951948593849263a22cb46560e01b84528d84015260018a8401525af18015610e4f576110a2575b50845192878482816370a0823160e01b95868252308c8301525afa938415610e4f57908892918a95611071575b508651809481938252308a8301525afa908115611067578791611038575b506110259061102d92612312565b845490612312565b156103875738610ab0565b90508581813d8311611060575b61104f8183612201565b810103126103a1575161102d611017565b503d611045565b84513d89823e3d90fd5b8381949296503d831161109b575b6110898183612201565b810103126103a1578791519338610ff9565b503d61107f565b6110ae909891986121ed565b9638610fcc565b8a81813d83116110e2575b6110ca8183612201565b810103126103aa576110db90612305565b5038610f94565b503d6110c0565b89513d86823e3d90fd5b8c81813d8311611120575b6111088183612201565b8101031261039d5761111990612305565b5038610f71565b503d6110fe565b8b513d88823e3d90fd5b8092508c8092503d8311611162575b61114a8183612201565b810103126103aa5761115c869161226f565b38610f1c565b503d611140565b9091508681813d83116111a1575b6111818183612201565b8101031261054f57516001600160a01b038116810361054f579038610ed8565b503d611177565b85513d8a823e3d90fd5b6111d491935060803d81116111db575b6111cc8183612201565b810190612291565b9138610eb2565b503d6111c2565b5050503461017f578160031936011261017f5760ff6020925460a01c1690519015158152f35b84806003193601126103345734156103345780f35b5050503461017f578160031936011261017f5760209051733333b97138d4b086720b5ae8a7844b1345a333338152f35b5050503461017f578160031936011261017f576020906001600160a01b03600354169051908152f35b908385346103345760803660031901126103345761129261215b565b9261129b612187565b936064359586151587036103aa575a9184549760ff8960a01c161561039d576001600160a01b03809916330361039d5790889161152e575b1685519163ae9c5d0960e01b83527f000000000000000000000000000000000000000000000000000000000000000385840152602435602484015280836044818c7f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa928315611524578687889089928a948b968c9961149a575b5050611379936084969361136d899794611373946113c49b612b2a565b86612b2a565b83612b2a565b875190611385826121bb565b81528660209a8b95868401528060025416908a519b8c968795639d9d3a0d60e01b87528b870190602080916001600160a01b0381511684520151910152565b1660448401523060648401525af194851561149057839561145f575b506113ec905a90612444565b90615208820180921161144c5750611405903a90612bc6565b908080808085335af161141661223f565b50156103345750837fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe6918351908152a151908152f35b634e487b7160e01b835260119052602482fd5b9094508581813d8311611489575b6114778183612201565b810103126103a65751936113ec6113e0565b503d61146d565b84513d85823e3d90fd5b96509750505050505082813d831161151d575b6114b78183612201565b810103126103875760846113c4916113796114d18561226f565b6020860151956113736114e58c830161226f565b606083015161136d6114f96080860161226f565b9260c060a0870151960151969b90929395969b945094979950509396819550611350565b503d6114ad565b87513d88823e3d90fd5b9082859160035416885192838092633850c7bd60e01b82525afa90811561152457908992918791611573575b5062ffffff19600554169062ffffff16176005556112d3565b80929350848092503d83116115f6575b61158d8183612201565b8101031261039d5780518981160361039d576115ab60208201612283565b906115b7888201612bd9565b506115c460608201612bd9565b506115d160808201612bd9565b5060a081015160ff81160361053a57906115ef60c08b949301612305565b508a61155a565b503d611583565b509050346103a65760203660031901126103a65761161961215b565b918051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000003908301526001600160a01b0391602081602481867f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa9182156116e9575084916116b0575b5016330361017f5760ff825460a01c1661017f576116ad9033612ab0565b80f35b90506020813d82116116e1575b816116ca60209383612201565b810103126103aa576116db9061226f565b3861168f565b3d91506116bd565b513d86823e3d90fd5b5050503461017f578160031936011261017f576020906001600160a01b03600154169051908152f35b509050346103a657816003193601126103a65761173661219d565b61173e6121ac565b5a91855460ff8160a01c161561053a576001600160a01b03809116330361053a578454879381151580611a48575b156105845788837f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027167f0000000000000000000000000000000000000000000000000000000000000003938a51966331a9108f60e11b8852858b890152602088602481865afa978815611a3e578498611a03575b501561193e575050506117f4915083612451565b80600254168554813b15610387578491602483928a51948593849263a126d60160e01b84528c8401525af1801561193457908491611920575b505060015416845491813b156103aa578651632142170760e11b8152308782019081526001600160a01b03909216602083015260408201939093528391839182908490829060600103925af1801561191657611902575b508255611892905a90612444565b9061520882018092116118ef57506118ab903a90612bc6565b908280808085335af16118bc61223f565b50156103a6577fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe69160209151908152a180f35b634e487b7160e01b845260119052602483fd5b61190c82916121ed565b6103345738611884565b85513d84823e3d90fd5b611929906121ed565b6103a657823861182d565b87513d86823e3d90fd5b6002546003548c51630c67cbcb60e01b81529088166001600160a01b03168c82019081526020810193909352939450849184918816908290819060400103915afa9182156109315783926119e7575b50803b156103a6576119b593838a8c5196879586948593630bfc87c360e11b855284016123dd565b03925af180156119dd576119ca575b506117f4565b6119d59193506121ed565b8591386119c4565b87513d8a823e3d90fd5b6119fc9192503d8085833e610d4e8183612201565b903861198d565b9097506020813d8211611a36575b81611a1e60209383612201565b810103126103aa57611a2f9061226f565b96386117e0565b3d9150611a11565b8c513d86823e3d90fd5b506024602084600154168a51928380926331a9108f60e11b8252878d8301525afa908115611abe578a91611a81575b508316301461176c565b90506020813d8211611ab6575b81611a9b60209383612201565b81010312611ab257611aac9061226f565b38611a77565b8980fd5b3d9150611a8e565b89513d8c823e3d90fd5b5050503461017f578160031936011261017f576020906001600160a01b03600254169051908152f35b843461033457602036600319011261033457611b0b61215b565b8154906001600160a01b039081831633036103aa5716906001600160a01b03191617815580f35b5083833461017f578160031936011261017f57805160208101916307983f4560e21b835260aa602483015260248252606082019082821067ffffffffffffffff831117611ba957525182918291908273dc2b0d2dd2b7759d97d50db4eabdc369731108305af1611ba061223f565b50156103345780f35b634e487b7160e01b855260418652602485fd5b509050346103a65760203660031901126103a657611bd861219d565b918051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000003908301526001600160a01b0391602081602481867f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa9182156116e957508491611c60575b5016330361017f576116ad9033612451565b90506020813d8211611c91575b81611c7a60209383612201565b810103126103aa57611c8b9061226f565b38611c4e565b3d9150611c6d565b5050503461017f578160031936011261017f57602090516001600160a01b037f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027168152f35b848285346103a657826003193601126103a65780516331a9108f60e11b81527f00000000000000000000000000000000000000000000000000000000000000038382018190526001600160a01b0392916020816024817f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d143502788165afa908115611e42579084918791611e07575b501633036103875760ff855460a01c16610387578151630178fe3f60e01b81529384015260808360248173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa8015611dfd57611dd6938591611ddf575b50611dcd8360208301511633612ab0565b01511633612ab0565b6116ad3361299f565b611df7915060803d81116111db576111cc8183612201565b85611dbc565b81513d86823e3d90fd5b9150506020813d8211611e3a575b81611e2260209383612201565b8101031261039d57611e34849161226f565b87611d6a565b3d9150611e15565b83513d88823e3d90fd5b509050346103a65760803660031901126103a657611e6861215b565b50611e71612171565b9260643567ffffffffffffffff8082116103a657366023830112156103a657818401359081116103a657369101602401116103345782516331a9108f60e11b81527f00000000000000000000000000000000000000000000000000000000000000038382018190526020956001600160a01b039287816024817f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d143502788165afa80156120245784908690611fee575b81925016911614611f3a575b8451630a85bd0160e11b81528690f35b845190631ca84c6960e31b825284820152858160248173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa908115611fe4578391611faf575b50163314611f85575b8080611f2a565b60ff815460a01c161580611fa6575b15610334575060443590553880611f7e565b50815415611f94565b90508581813d8311611fdd575b611fc68183612201565b810103126103a657611fd79061226f565b38611f75565b503d611fbc565b85513d85823e3d90fd5b50508781813d831161201d575b6120058183612201565b810103126103875783612018819261226f565b611f1e565b503d611ffb565b87513d87823e3d90fd5b848285346103a657826003193601126103a6578051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000003908301526001600160a01b0391602081602481867f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa918215610cf5575083916120ce575b50163303610334578080808047335af1611ba061223f565b90506020813d82116120ff575b816120e860209383612201565b810103126103a6576120f99061226f565b836120b6565b3d91506120db565b859083346103a65760203660031901126103a6573563ffffffff60e01b81168091036103a65760209250630a85bd0160e11b811490811561214a575b5015158152f35b6301ffc9a760e01b14905083612143565b600435906001600160a01b03821682036103a157565b602435906001600160a01b03821682036103a157565b604435906001600160a01b03821682036103a157565b6004359081151582036103a157565b6024359081151582036103a157565b6040810190811067ffffffffffffffff8211176121d757604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116121d757604052565b90601f8019910116810190811067ffffffffffffffff8211176121d757604052565b67ffffffffffffffff81116121d757601f01601f191660200190565b3d1561226a573d9061225082612223565b9161225e6040519384612201565b82523d6000602084013e565b606090565b51906001600160a01b03821682036103a157565b51908160020b82036103a157565b908160809103126103a157604051906080820182811067ffffffffffffffff8211176121d75760405280516001600160a01b03811681036103a1576122fd9160609184526122e16020820161226f565b60208501526122f26040820161226f565b604085015201612283565b606082015290565b519081151582036103a157565b9190820180921161231f57565b634e487b7160e01b600052601160045260246000fd5b602080828403126103a157815167ffffffffffffffff928382116103a157019083601f830112156103a15781519283116121d75760409283519461237e838360051b0187612201565b818652828087019260061b850101938185116103a1578301915b8483106123a85750505050505090565b85838303126103a15783869182516123bf816121bb565b6123c88661226f565b81528286015183820152815201920191612398565b906060604092838101928152602091818584809401528651809552019401926000905b83821061240f57505050505090565b90919293948382826124376001948a51602080916001600160a01b0381511684520151910152565b0196019493920190612400565b9190820391821161231f57565b60049182549060009180151580612918575b156103a65760408051630178fe3f60e01b81527f00000000000000000000000000000000000000000000000000000000000000038782018190529192602491608081848173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa9081156127a05787916128fa575b506001600160a01b03916020968387818a8601511694015116958751946370a0823160e01b938487528d30908801528a878981895afa9687156128f057908e98979695949392918d976128ac575b508a5198858a5230908a01528b8989818d5afa98891561285e57908f8c8f93849c612868575b5083929185946064928d9897600254169087600354169051998a96879563463c7ab360e11b8752860152840152600160448401525af192831561285e578d93612841575b507f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d14350271690813b1561283d57918c918f93836125d3958e5196879586948593630bfc87c360e11b855284016123dd565b03925af1801561283357612820575b50156125f6575b5050505050505050505050565b865190808252308c83015288828681865afa918215612816579089918b936127e5575b50885195869182528d309083015281895afa9384156127db57908892918a956127aa575b50838111612714575b50505050818111612672575b505050505050612662915061299f565b38808080808080808080806125e9565b9186866126856126b6999a948896612444565b865163a9059cbb60e01b81526001600160a01b03909316948301948552602085015290978893849291839160400190565b03925af190811561270b57506126d1575b8080808695612652565b82813d8311612704575b6126e58183612201565b810103126103345750906126fb61266292612305565b509038806126c7565b503d6126db565b513d84823e3d90fd5b6127559361272191612444565b908a8a8d8a519687958694859363a9059cbb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03925af180156127a05761276c575b858180612646565b8581813d8311612799575b6127818183612201565b8101031261053a5761279290612305565b5038612764565b503d612777565b85513d89823e3d90fd5b8381949296503d83116127d4575b6127c28183612201565b810103126103a157879151933861263d565b503d6127b8565b87513d8b823e3d90fd5b8281939294503d831161280f575b6127fd8183612201565b810103126103a1578890519138612619565b503d6127f3565b88513d8c823e3d90fd5b61282c909a919a6121ed565b98386125e2565b89513d8d823e3d90fd5b8c80fd5b6128579193508d3d8091833e610d4e8183612201565b9138612584565b8b513d8f823e3d90fd5b935050509192939495969798508b81813d83116128a5575b61288a8183612201565b8101031261283d575197969594939291908c908f8c8a612540565b503d612880565b8c8092999a5081939495969798503d83116128e9575b6128cc8183612201565b810103126128e557908d9796959493929151953861251a565b8b80fd5b503d6128c2565b8a513d8e823e3d90fd5b612912915060803d81116111db576111cc8183612201565b386124cc565b5060246001600160a01b0360208160015416604051938480926331a9108f60e11b8252878c8301525afa918215612994578592612959575b50163014612463565b9091506020813d821161298c575b8161297460209383612201565b81010312610387576129859061226f565b9038612950565b3d9150612967565b6040513d87823e3d90fd5b6040516370a0823160e01b8152306004820152733333b97138d4b086720b5ae8a7844b1345a33333916020918281602481875afa908115612a6f57600091612a83575b5080151580612a7b575b6129f7575b50505050565b60405163a9059cbb60e01b81526001600160a01b039290921660048301526024820152918190839060449082906000905af18015612a6f57612a3b575b80806129f1565b81813d8311612a68575b612a4f8183612201565b810103126103a157612a6090612305565b503880612a34565b503d612a45565b6040513d6000823e3d90fd5b5060016129ec565b908382813d8311612aa9575b612a998183612201565b81010312610334575051386129e2565b503d612a8f565b6040516370a0823160e01b81523060048201529291906020846024816001600160a01b0386165afa918215612a6f57600092612af4575b612af2939450612b2a565b565b91936020813d8211612b22575b81612b0e60209383612201565b810103126103875751929350839291612ae7565b3d9150612b01565b9180151580612bb4575b612b3d57505050565b60405163a9059cbb60e01b81526001600160a01b03928316600482015260248101919091529160209183916044918391600091165af18015612a6f57612b805750565b6020813d8211612bac575b81612b9860209383612201565b810103126103a157612ba990612305565b50565b3d9150612b8b565b506001600160a01b0383161515612b34565b8181029291811591840414171561231f57565b519061ffff821682036103a157565b51906fffffffffffffffffffffffffffffffff821682036103a15756fea264697066735822122016534d47faa73e46d6c96a77ae74bba3fbc64a194fb7a655b06160ff0b87843d64736f6c63430008130033

Deployed Bytecode Sourcemap

14992:8351:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15586:42;14992:8351;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;20698:9;;;14992:8351;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;20749:10;:24;14992:8351;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;22035:38;;14992:8351;;;;;;;;:::i;:::-;;;;;;;22075:38;;14992:8351;;;;;;;;;22012:119;;14992:8351;22012:119;;;14992:8351;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;22012:119;;;14992:8351;22012:119;14992:8351;22012:119;;;;;;;;;;;14992:8351;;20811:13;14992:8351;;;;20815:9;20811:13;;:::i;:::-;14992:8351;20828:5;14992:8351;;;;;;;20837:11;20809:39;20837:11;;20809:39;;:::i;:::-;20749:10;;;;;;;20872:38;;;;:::i;:::-;;14992:8351;;;;20948:18;14992:8351;;;;;;;;20948:18;14992:8351;;;;;;;;;-1:-1:-1;;;14992:8351:0;;;;;;;;22012:119;;;;14992:8351;22012:119;;;;;;;;;14992:8351;22012:119;;;:::i;:::-;;;14992:8351;;;;;;;20811:13;14992:8351;;;;;:::i;:::-;;22012:119;;;;14992:8351;;;;22012:119;;;-1:-1:-1;22012:119:0;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;16874:23;;;16891:5;16874:23;;;14992:8351;;16874:8;;;14992:8351;16874:8;;;14992:8351;16874:23;;;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;;;;;;;;;;;20079:15;;;;;;;14992:8351;20079:15;;14992:8351;20079:15;;;;;;;;;;;;;14992:8351;20106:4;;;;14992:8351;;20079:32;14992:8351;;20123:51;;;;;14992:8351;;-1:-1:-1;;;20123:51:0;;20106:4;20123:51;;;14992:8351;;;16860:10;14992:8351;;;;;;;;;;;;;16860:10;;14992:8351;;;;;;20123:51;;;;;;;;;;;;;;;;;14992:8351;;;;;;20189:17;20185:120;;14992:8351;;;20185:120;14992:8351;;20227:16;20223:71;;14992:8351;;20223:71;14992:8351;20223:71;14992:8351;20123:51;;;;:::i;:::-;14992:8351;;20123:51;;;;;14992:8351;;;;;;;;20079:15;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;20079:15;;;;14992:8351;;;;20079:15;;;;;;14992:8351;;;;;;;;;;;;;16874:23;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;:::i;:::-;16874:23;;;14992:8351;;;;16874:23;;;;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20698:9;14992:8351;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;20749:10;:24;14992:8351;;15586:42;21067:30;;;;;14992:8351;;-1:-1:-1;;;21067:30:0;;21079:5;21067:30;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21067:30;;;;;;;;;;;14992:8351;20815:9;;20811:13;20815:9;;20811:13;;:::i;:::-;14992:8351;20828:5;14992:8351;;;;;;;20837:11;20809:39;20837:11;;20809:39;;:::i;:::-;20749:10;;;;;;20872:38;;;;:::i;:::-;;14992:8351;;;20948:18;14992:8351;;;;;20948:18;14992:8351;;21067:30;;;;:::i;:::-;14992:8351;;21067:30;;;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;20698:9;14992:8351;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;20749:10;:24;14992:8351;;;;22277:15;;;:66;;;14992:8351;;;;;;;22355:3;14992:8351;;;;;;;;;;;22422:31;;;;22447:4;22422:31;;;14992:8351;;22422:31;;;14992:8351;22422:31;;;;;;;;;;;;;14992:8351;;;;;;;;:::i;:::-;;;22388:66;;;14992:8351;;;;;22490:31;;;22447:4;22490:31;;;14992:8351;22490:31;;14992:8351;22490:31;;;;;;;;;;;;;14992:8351;;;22355:169;14992:8351;;;;;;;;;;;;;;:::i;:::-;;;22456:66;;;14992:8351;;;;;;;;;;;22355:169;;;;;14992:8351;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;22355:169;;;;;;;;14992:8351;20811:13;20815:9;;;20811:13;;:::i;22355:169::-;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;20811:13;14992:8351;;:::i;:::-;;22355:169;;;;;-1:-1:-1;22355:169:0;;;14992:8351;;;;;;;;;22490:31;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;22490:31;;;;14992:8351;;;22355:169;22490:31;;;;;;;;14992:8351;;;;;;;;;22422:31;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;22422:31;;;;;;;;;14992:8351;;;;;;;;;22277:66;14992:8351;;;;22296:10;14992:8351;;;;;;;;;;;22296:30;;;;;;14992:8351;22296:30;;;;;;;;;;;22277:66;-1:-1:-1;14992:8351:0;;22338:4;22296:47;22277:66;;22296:30;;;14992:8351;22296:30;;;;;;;;;14992:8351;22296:30;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;22296:30;;;;;;-1:-1:-1;22296:30:0;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15783:42;14992:8351;;;;;;;;;;;;;;;;;;;;16182:36;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15586:42;17003:10;;:25;14992:8351;;17113:663;;;14992:8351;;;;-1:-1:-1;;;14992:8351:0;;;;;;;;;-1:-1:-1;;;14992:8351:0;;;;;;;;;17809:4;:23;;;14992:8351;17805:171;;14992:8351;;;17805:171;-1:-1:-1;;;;;14992:8351:0;;17853:10;14992:8351;;;;;;;;;;;17853:30;;;;;;;;14992:8351;17853:30;;14992:8351;17853:30;;;;;;;;;;;;;17805:171;-1:-1:-1;14992:8351:0;;17895:4;17853:47;17849:116;;17805:171;;;;;14992:8351;;;17849:116;14992:8351;22781:15;;;;;:66;;;;17849:116;14992:8351;;;;;22900:8;;14992:8351;22917:5;;14992:8351;;;22900:23;;;;;;;14992:8351;22900:23;;14992:8351;22900:23;;;;;;;;;;;;;17849:116;22934:252;;14992:8351;23083:42;22934:252;14992:8351;;23083:3;14992:8351;;;;;;;;;;;;;;;;;;;23083:42;;;;14992:8351;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;23083:42;;;;;;;;;;14992:8351;23083:42;;;17849:116;23140:34;;;;;;;14992:8351;;;;;;;;;;;;;;;23140:34;;;;;;:::i;:::-;;;;;;;;;;;17849:116;14992:8351;;23083:3;14992:8351;;;;23206:29;;;;;14992:8351;;;;;;;;;;;;;;;23206:29;;;;;14992:8351;23206:29;;;;;;;;;;;17849:116;14992:8351;;17853:10;14992:8351;;;;23246:61;;;;;;14992:8351;;-1:-1:-1;;;23246:61:0;;17895:4;23246:61;;;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23246:61;;;;;;;;;;;;;;;17849:116;14992:8351;;;17849:116;;;;;;;;;23246:61;;;;:::i;:::-;14992:8351;;23246:61;;;;;14992:8351;;;;;;;;23206:29;;;;:::i;:::-;14992:8351;;23206:29;;;;;14992:8351;;;;;;;;;23140:34;;;;;;:::i;:::-;14992:8351;23140:34;;;;;14992:8351;;;;;;;;;23083:42;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;14992:8351;;;;;;;;;22900:23;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;23083:42;14992:8351;;:::i;:::-;22900:23;;;;;;;;;;14992:8351;;;;;;;;;22781:66;14992:8351;;;;;22800:30;;;;;;;;;;;14992:8351;22800:30;;;;;;;;;;;22781:66;-1:-1:-1;14992:8351:0;;17895:4;22800:47;22781:66;;;;22800:30;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;22800:30;;;;;;;;;14992:8351;;;;;;;;;17853:30;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;17853:30;;;;;;;;;14992:8351;;;;;;;;;17809:23;14992:8351;;;17817:15;;17809:23;;17113:663;17178:5;14992:8351;;;;;;17167:17;;;;;;14992:8351;;17167:17;;;;;;;;;;;;;;;;;;;;17113:663;14992:8351;;;;;;;;;;;17205:16;;;;;14992:8351;17205:16;;;;;;;;;;;17113:663;14992:8351;;-1:-1:-1;;;;;14992:8351:0;;;-1:-1:-1;;;;;14992:8351:0;;;17199:22;14992:8351;;;17199:22;14992:8351;;;;;;17257:16;;;;;;;;;;;;;;;;;;;;;17113:663;14992:8351;;;17236:38;14992:8351;;;17236:38;14992:8351;;;;;;;;;;;;17340:8;;;;;;14992:8351;;17387:8;;14992:8351;;;;;;;;17450:36;;;;;;;;14992:8351;17468:17;;14992:8351;;;;;;17450:36;;14992:8351;17450:36;;;;;;;;;;;17113:663;14992:8351;;;17501:36;;;;;;;14992:8351;;;;;17501:36;;14992:8351;17501:36;;;;;;;;;;;17113:663;14992:8351;17236:38;14992:8351;;17552:37;;;;;14992:8351;;;;;;;;;;;;;17552:37;;;;;14992:8351;17236:38;14992:8351;;;;17552:37;;;;;;;;17113:663;14992:8351;;;;;;;;;;;17619:31;;;;17644:4;17619:31;;;14992:8351;17619:31;;;;;;;;;;;;;;;17113:663;14992:8351;;;17680:31;;;;;;17644:4;17680:31;;;14992:8351;17680:31;;;;;;;;;;;17113:663;17735:11;;;:24;:11;;:::i;:::-;14992:8351;;17735:24;;:::i;:::-;:28;14992:8351;;17113:663;;;17680:31;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;17735:24;17680:31;;;;;;;;14992:8351;;;;;;;;;17619:31;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;17619:31;;;;;;;;;17552:37;;;;;;;:::i;:::-;;;;;17501:36;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;17501:36;;;;;;;;;14992:8351;;;;;;;;;17450:36;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;17450:36;;;;;;;;;14992:8351;;;;;;;;;17257:16;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;:::i;:::-;17257:16;;;;;;;;17205;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;17205:16;;;;;;;;;;14992:8351;;;;;;;;;17167:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19462:9;:13;14992:8351;;;;;;;;;;;;;;;;;;;;;;15681:42;14992:8351;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;20698:9;14992:8351;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;20749:10;:24;14992:8351;;21247:68;;;;;14992:8351;;;;;;;;21474:37;;21495:5;21474:37;;;14992:8351;;;;;;;21474:8;;14992:8351;21474:8;;;14992:8351;21474:37;;;;;;;;14992:8351;;;;;;;;;;21474:37;;;14992:8351;21541:4;;21611;21541;14992:8351;21541:4;;;;;;21576;21541;14992:8351;21541:4;;:::i;:::-;21576;;:::i;:::-;21611;;:::i;:::-;14992:8351;;;;;;:::i;:::-;;;;;21657:34;;;;;;14992:8351;;21709:3;14992:8351;;;;;;;;;;;;;21709:39;;;;;14992:8351;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;21742:4;14992:8351;;;;21709:39;;;;;;;;;;;14992:8351;20815:9;20811:13;20815:9;;20811:13;;:::i;:::-;14992:8351;20828:5;14992:8351;;;;;;;20837:11;20809:39;20837:11;;20809:39;;:::i;:::-;20749:10;;;;;;;20872:38;;;;:::i;:::-;;14992:8351;;;;;20948:18;14992:8351;;;;;;20948:18;14992:8351;;;;;;-1:-1:-1;;;14992:8351:0;;;;;;;;21709:39;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;20811:13;21709:39;;;;;;;;14992:8351;;;;;;;;;21474:37;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;21611:4;14992:8351;;;:::i;:::-;;;;;;21576:4;14992:8351;;;;;:::i;:::-;;;;;21541:4;14992:8351;;;;;:::i;:::-;;;;;;;;;;21474:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;14992:8351;;;;;;;;;21247:68;14992:8351;;;;;;;;;;;;;;;;21291:12;;;;;;;;;14992:8351;;;;;21291:12;;;21247:68;14992:8351;;;21271:32;14992:8351;;;;;;21271:32;14992:8351;21247:68;;21291:12;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21291:12;;;;;;;;14992:8351;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;;;;;16874:23;;16891:5;16874:23;;;14992:8351;-1:-1:-1;;;;;16874:8:0;14992:8351;16874:8;14992:8351;16874:8;;;14992:8351;16874:23;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;;;;;;;;;20432:5;16860:10;;20432:5;:::i;:::-;14992:8351;;16874:23;;;14992:8351;16874:23;;;;;;;;;14992:8351;16874:23;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;16874:23;;;;;;-1:-1:-1;16874:23:0;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16019:37:0;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;20698:9;14992:8351;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;20749:10;:24;14992:8351;;;;;22781:15;;;;:66;;;14992:8351;;;;22900:8;;;14992:8351;22917:5;14992:8351;;;;;;;22900:23;;;;;;14992:8351;22900:23;;14992:8351;22900:23;;;;;;;;;;;;;14992:8351;-1:-1:-1;22934:252:0;;;22993:12;;;;;;;;:::i;:::-;14992:8351;23206:3;14992:8351;;;;23206:29;;;;;14992:8351;;;;;;;;;;;;;;;23206:29;;;;;14992:8351;23206:29;;;;;;;;;;;22934:252;14992:8351;;23246:10;14992:8351;;;;23246:61;;;;;;14992:8351;;-1:-1:-1;;;23246:61:0;;23282:4;23246:61;;;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;;;;;;;23246:61;;;;;;;;;;22934:252;-1:-1:-1;14992:8351:0;;20811:13;;20815:9;20811:13;;:::i;:::-;14992:8351;20828:5;14992:8351;;;;;;;20837:11;20809:39;20837:11;;20809:39;;:::i;:::-;20749:10;;;;;;;20872:38;;;;:::i;:::-;;14992:8351;;;20948:18;14992:8351;22900:23;14992:8351;;;;;20948:18;14992:8351;;;-1:-1:-1;;;14992:8351:0;;;;;;;;23246:61;;;;;:::i;:::-;14992:8351;;23246:61;;;;14992:8351;;;;;;;;;23206:29;;;;:::i;:::-;14992:8351;;23206:29;;;;;14992:8351;;;;;;;;;22934:252;23083:3;14992:8351;;;;;-1:-1:-1;;;23083:42:0;;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;23083:42;;;14992:8351;;;;;;;;;;;;-1:-1:-1;14992:8351:0;;;;;;;;;;;;;23083:42;;;;;;;;;;;;;22934:252;23140:34;;;;;;;14992:8351;;;;;;;;;;;;;;;23140:34;;;;;:::i;:::-;;;;;;;;;;;22934:252;;;;23140:34;;;;;;:::i;:::-;14992:8351;23140:34;;;;;14992:8351;;;;;;;;;23083:42;;;;;;;;;;;;;;:::i;:::-;;;;;22900:23;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;22900:23;;;;;;;-1:-1:-1;22900:23:0;;;14992:8351;;;;;;;;;22781:66;14992:8351;;22800:30;14992:8351;22800:10;14992:8351;;;;;;;;;;;22800:30;;;;;;14992:8351;22800:30;;;;;;;;;;;22781:66;-1:-1:-1;14992:8351:0;;22842:4;22800:47;22781:66;;22800:30;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;22800:30;;;14992:8351;;;;22800:30;;;-1:-1:-1;22800:30:0;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16063:30:0;14992:8351;;;;;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;14992:8351:0;;;;20529:10;:24;14992:8351;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;;;;;15210:53;;;;;;;;;15259:3;15210:53;;;14992:8351;15210:53;;;14992:8351;;;;;;;;;;;;;;15153:111;14992:8351;;;;15153:111;14992:8351;15161:42;15153:111;;;;:::i;:::-;;14992:8351;;;;;;-1:-1:-1;;;14992:8351:0;;;;;15210:53;14992:8351;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;;;;;16874:23;;16891:5;16874:23;;;14992:8351;-1:-1:-1;;;;;16874:8:0;14992:8351;16874:8;14992:8351;16874:8;;;14992:8351;16874:23;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;18443:12;16860:10;;18443:12;:::i;16874:23::-;;;14992:8351;16874:23;;;;;;;;;14992:8351;16874:23;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;16874:23;;;;;;-1:-1:-1;16874:23:0;;14992:8351;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15730:45:0;14992:8351;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16874:23:0;;16891:5;16874:23;;;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;;16874:23;14992:8351;;;16874:8;14992:8351;;16874:23;;;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;;;;;;;;;;;-1:-1:-1;;;19789:17:0;;;;;14992:8351;19789:17;14992:8351;;;15586:42;19789:17;;;;;;19887:16;19789:17;;;;;14992:8351;19845:8;19838:16;19845:8;16874:23;19845:8;;14992:8351;;16860:10;19838:16;:::i;:::-;19894:8;14992:8351;;16860:10;19887:16;:::i;:::-;19936:14;16860:10;19936:14;:::i;19789:17::-;;;;;;;;;;;;;;:::i;:::-;;;;;14992:8351;;;;;;;;;16874:23;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;:::i;:::-;16874:23;;;;;;-1:-1:-1;16874:23:0;;;14992:8351;;;;;;;;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16547:23:0;;16564:5;16547:23;;;14992:8351;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;16547:8;14992:8351;;16547:23;;;;;;;;;;;;14992:8351;;;;;;;16538:32;16534:211;;14992:8351;;;-1:-1:-1;;;14992:8351:0;;;;;16534:211;14992:8351;;;;;;16605:20;;;;;14992:8351;16605:20;;14992:8351;16605:20;15586:42;16605:20;;;;;;;;;;;16534:211;14992:8351;;16591:10;:34;16587:147;;16534:211;;;;;16587:147;14992:8351;;;;;;16654:4;:23;;;16587:147;14992:8351;;;;;;;;16587:147;;;;16654:23;14992:8351;;;16662:15;16654:23;;16605:20;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;16605:20;;;;;;;;;14992:8351;;;;;;;;;16547:23;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;;:::i;:::-;16547:23;;;;;;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16874:23;;16891:5;16874:23;;;14992:8351;-1:-1:-1;;;;;16874:8:0;:23;:8;14992:8351;16874:8;;;14992:8351;16874:23;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;19560:21;;;;;16860:10;19605:40;;;;:::i;16874:23::-;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;16874:23;;;;;;-1:-1:-1;16874:23:0;;14992:8351;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;15424:48:0;;;:92;;;;14992:8351;;;;;;;15424:92;-1:-1:-1;;;15476:40:0;;-1:-1:-1;15424:92:0;;;14992:8351;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;14992:8351:0;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;14992:8351:0;;;;:::o;:::-;;;:::o;:::-;;;-1:-1:-1;;;;;14992:8351:0;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18470:928::-;18558:10;14992:8351;;;;-1:-1:-1;18558:15:0;;;;:66;;;18470:928;14992:8351;;;;;;-1:-1:-1;;;18667:17:0;;18678:5;18667:17;;;14992:8351;;;;;;;18667:17;14992:8351;;;15586:42;18667:17;;;;;;;;;;;18470:928;14992:8351;-1:-1:-1;;;;;14992:8351:0;;18728:8;;;;;;;14992:8351;;18771:8;;14992:8351;;;;;;;;;18806:31;;;;18831:4;;18806:31;;;14992:8351;18806:31;;;;;;;;;;;;;;;;;;;;;;;;;;18470:928;14992:8351;;;18863:31;;;;18831:4;18863:31;;;14992:8351;18863:31;;;;;;;;;;;;;;;;;;;;;18470:928;14992:8351;;;;;;;;;;;18940:3;14992:8351;;;;18977:4;14992:8351;;;;;;;;;;;;18940:49;;;;14992:8351;;;;18984:4;14992:8351;;;;18940:49;;;;;;;;;;;18470:928;19000:8;;14992:8351;19000:34;;;;;;14992:8351;;;;;;19000:34;14992:8351;;;;;;;;;;;;;19000:34;;;;;:::i;:::-;;;;;;;;;;;18470:928;19059:13;;19055:336;;18470:928;;;;;;;;;;;;:::o;19055:336::-;14992:8351;;19106:31;;;;18831:4;19106:31;;;14992:8351;19106:31;;;;;;;;;;;;;;;;;;;19055:336;14992:8351;;;19169:31;;;;;18831:4;;19169:31;;;14992:8351;19169:31;;;;;;;;;;;;;;;;;19055:336;19219:13;;;;19215:53;;19055:336;19287:13;;;;;;;19283:53;;19055:336;19364:14;;;;;;;;;;:::i;:::-;19055:336;;;;;;;;;;;;;19283:53;19322:13;;;;19302:34;19322:13;;;;;;:::i;:::-;14992:8351;;-1:-1:-1;;;19302:34:0;;-1:-1:-1;;;;;14992:8351:0;;;19302:34;;;14992:8351;;;;;;;;;;;;;-1:-1:-1;14992:8351:0;;;;;;19302:34;;;;;;;;;;;;;19283:53;;;;;;;;19302:34;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;19364:14;14992:8351;;:::i;:::-;;19302:34;;;;;;;;;;;14992:8351;;;;;;;;19215:53;19234:34;19254:13;;;;:::i;:::-;14992:8351;;;;;;;;;;;;;;;;19234:34;;;;14992:8351;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;19234:34;;;;;;;;;;;19215:53;;;;;;19234:34;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;19234:34;;;;;;;;;14992:8351;;;;;;;;;19169:31;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;19169:31;;;;;;;;;;14992:8351;;;;;;;;;19106:31;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;19106:31;;;;;;;;;;14992:8351;;;;;;;;;19000:34;;;;;;;:::i;:::-;;;;;;14992:8351;;;;;;;;;19000:34;14992:8351;;;18940:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;14992:8351;;;;;;;;;18863:31;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;;;;;;;;;;;18863:31;;;;;;;18806;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;;;;;;;18806:31;;;;14992:8351;;;;18806:31;;;;;;14992:8351;;;;;;;;;18667:17;;;;;;;;;;;;;;:::i;:::-;;;;18558:66;14992:8351;;-1:-1:-1;;;;;18577:30:0;14992:8351;18577:10;14992:8351;;;;;;;;;;;18577:30;;;;;;14992:8351;18577:30;;;;;;;;;;;18558:66;-1:-1:-1;14992:8351:0;18619:4;18577:47;18558:66;;18577:30;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;18577:30;;;;;;;-1:-1:-1;18577:30:0;;;14992:8351;;;;;;;;;17994:156;14992:8351;;-1:-1:-1;;;18072:30:0;;18096:4;18072:30;;;14992:8351;;;18072:30;;;14992:8351;;;;18072:30;;;;;;;-1:-1:-1;18072:30:0;;;17994:156;18241:10;;;;:42;;;17994:156;18237:74;;17994:156;;;;;:::o;18237:74::-;14992:8351;;-1:-1:-1;;;18285:26:0;;-1:-1:-1;;;;;14992:8351:0;;;;18072:30;18285:26;;14992:8351;;;;;;;;;;;;;;-1:-1:-1;;18285:26:0;;;;;;;;18237:74;;;;;18285:26;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;18285:26;;;;;;;;;;14992:8351;;;-1:-1:-1;14992:8351:0;;;;;18241:42;;18255:28;18241:42;;18072:30;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;18072:30;;;;;;;;17994:156;14992:8351;;-1:-1:-1;;;18072:30:0;;18096:4;18072:30;;;14992:8351;;17994:156;;18072:30;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;;18072:30;;;;;;;-1:-1:-1;18072:30:0;;;17994:156;18138:3;;;;;:::i;:::-;17994:156::o;18072:30::-;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;-1:-1:-1;14992:8351:0;;;18072:30;;;;;-1:-1:-1;18072:30:0;;18156:163;;18241:10;;;:42;;;18156:163;18237:74;;18156:163;;;:::o;18237:74::-;14992:8351;;-1:-1:-1;;;18285:26:0;;-1:-1:-1;;;;;14992:8351:0;;;18285:26;;;14992:8351;;;;;;;;;18285:26;;14992:8351;;;;;;-1:-1:-1;;14992:8351:0;18285:26;;;;;;;;18156:163;:::o;18285:26::-;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;18156:163::o;18285:26::-;;;-1:-1:-1;18285:26:0;;18241:42;14992:8351;-1:-1:-1;;;;;14992:8351:0;;18255:28;;18241:42;;14992:8351;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o

Swarm Source

ipfs://16534d47faa73e46d6c96a77ae74bba3fbc64a194fb7a655b06160ff0b87843d

Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.