ETH Price: $2,907.25 (+3.03%)
 

Overview

Max Total Supply

0 DEPOSIT

Holders

968

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x15390a3c98fa5ba602f1b428bc21a3059362afaf
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Beanstalk is a permissionless fiat stablecoin protocol built on Ethereum.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Diamond

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 11 : Diamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.6;
pragma experimental ABIEncoderV2;

/******************************************************************************\
* Authors: Nick Mudge (https://twitter.com/mudgen)
*
* Implementation of a diamond.
/******************************************************************************/

import {LibDiamond} from "../libraries/LibDiamond.sol";
import {DiamondCutFacet} from "./facets/DiamondCutFacet.sol";
import {DiamondLoupeFacet} from "./facets/DiamondLoupeFacet.sol";
import {OwnershipFacet} from "./facets/OwnershipFacet.sol";
import {AppStorage} from "./AppStorage.sol";
import {IERC165} from "../interfaces/IERC165.sol";
import {IDiamondCut} from "../interfaces/IDiamondCut.sol";
import {IDiamondLoupe} from "../interfaces/IDiamondLoupe.sol";
import {IERC173} from "../interfaces/IERC173.sol";

contract Diamond {
    AppStorage internal s;

    receive() external payable {}

    constructor(address _contractOwner) {
        LibDiamond.setContractOwner(_contractOwner);
        LibDiamond.addDiamondFunctions(
            address(new DiamondCutFacet()),
            address(new DiamondLoupeFacet()),
            address(new OwnershipFacet())
        );
    }

    // Find facet for function that is called and execute the
    // function if a facet is found and return any value.
    fallback() external payable {
        LibDiamond.DiamondStorage storage ds;
        bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
        address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;
        require(facet != address(0), "Diamond: Function does not exist");
        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())
            switch result
                case 0 {
                    revert(0, returndatasize())
                }
                default {
                    return(0, returndatasize())
                }
        }
    }
}

File 2 of 11 : LibDiamond.sol
/*
 SPDX-License-Identifier: MIT
*/

pragma experimental ABIEncoderV2;
pragma solidity ^0.7.6;
/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import {IDiamondCut} from "../interfaces/IDiamondCut.sol";
import {IDiamondLoupe} from "../interfaces/IDiamondLoupe.sol";
import {IERC165} from "../interfaces/IERC165.sol";
import {IERC173} from "../interfaces/IERC173.sol";
import {LibMeta} from "./LibMeta.sol";

library LibDiamond {
    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");

    struct FacetAddressAndPosition {
        address facetAddress;
        uint16 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array
    }

    struct FacetFunctionSelectors {
        bytes4[] functionSelectors;
        uint16 facetAddressPosition; // position of facetAddress in facetAddresses array
    }

    struct DiamondStorage {
        // maps function selector to the facet address and
        // the position of the selector in the facetFunctionSelectors.selectors array
        mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;
        // maps facet addresses to function selectors
        mapping(address => FacetFunctionSelectors) facetFunctionSelectors;
        // facet addresses
        address[] facetAddresses;
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // owner of the contract
        address contractOwner;
    }

    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function setContractOwner(address _newOwner) internal {
        DiamondStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().contractOwner;
    }

    function enforceIsContractOwner() internal view {
        require(LibMeta.msgSender() == diamondStorage().contractOwner, "LibDiamond: Must be contract owner");
    }

    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    function addDiamondFunctions(
        address _diamondCutFacet,
        address _diamondLoupeFacet,
        address _ownershipFacet
    ) internal {
        IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](3);
        bytes4[] memory functionSelectors = new bytes4[](1);
        functionSelectors[0] = IDiamondCut.diamondCut.selector;
        cut[0] = IDiamondCut.FacetCut({facetAddress: _diamondCutFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors});
        functionSelectors = new bytes4[](5);
        functionSelectors[0] = IDiamondLoupe.facets.selector;
        functionSelectors[1] = IDiamondLoupe.facetFunctionSelectors.selector;
        functionSelectors[2] = IDiamondLoupe.facetAddresses.selector;
        functionSelectors[3] = IDiamondLoupe.facetAddress.selector;
        functionSelectors[4] = IERC165.supportsInterface.selector;
        cut[1] = IDiamondCut.FacetCut({
            facetAddress: _diamondLoupeFacet,
            action: IDiamondCut.FacetCutAction.Add,
            functionSelectors: functionSelectors
        });
        functionSelectors = new bytes4[](2);
        functionSelectors[0] = IERC173.transferOwnership.selector;
        functionSelectors[1] = IERC173.owner.selector;
        cut[2] = IDiamondCut.FacetCut({facetAddress: _ownershipFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors});
        diamondCut(cut, address(0), "");
    }

    // Internal function version of diamondCut
    function diamondCut(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _init,
        bytes memory _calldata
    ) internal {
        for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
            if (action == IDiamondCut.FacetCutAction.Add) {
                addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Replace) {
                replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Remove) {
                removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else {
                revert("LibDiamondCut: Incorrect FacetCutAction");
            }
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // uint16 selectorCount = uint16(diamondStorage().selectors.length);
        require(_facetAddress != address(0), "LibDiamondCut: Add facet cant be address(0)");
        uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
            ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length);
            ds.facetAddresses.push(_facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress == address(0), "LibDiamondCut: Cant add function that already exists");
            ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector);
            ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress;
            ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition;
            selectorPosition++;
        }
    }

    function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet cant be address(0)");
        uint16 selectorPosition = uint16(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
            ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = uint16(ds.facetAddresses.length);
            ds.facetAddresses.push(_facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress != _facetAddress, "LibDiamondCut: Cant replace function with same function");
            removeFunction(oldFacetAddress, selector);
            // add function
            ds.selectorToFacetAndPosition[selector].functionSelectorPosition = selectorPosition;
            ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(selector);
            ds.selectorToFacetAndPosition[selector].facetAddress = _facetAddress;
            selectorPosition++;
        }
    }

    function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // if function does not exist then do nothing and return
        require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            removeFunction(oldFacetAddress, selector);
        }
    }

    function removeFunction(address _facetAddress, bytes4 _selector) internal {
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Cant remove function that doesnt exist");
        // an immutable function is a function defined directly in a diamond
        require(_facetAddress != address(this), "LibDiamondCut: Cant remove immutable function");
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;
        uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];
            ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;
            ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint16(selectorPosition);
        }
        // delete the last selector
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();
        delete ds.selectorToFacetAndPosition[_selector];

        // if no more selectors for facet address then delete the facet address
        if (lastSelectorPosition == 0) {
            // replace facet address with last facet address and delete last facet address
            uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;
            uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
            if (facetAddressPosition != lastFacetAddressPosition) {
                address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];
                ds.facetAddresses[facetAddressPosition] = lastFacetAddress;
                ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = uint16(facetAddressPosition);
            }
            ds.facetAddresses.pop();
            delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
        }
    }

    function initializeDiamondCut(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty");
        } else {
            require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)");
            if (_init != address(this)) {
                enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");
            }
            (bool success, bytes memory error) = _init.delegatecall(_calldata);
            if (success == false) {
                if (error.length > 0) {
                    // bubble up the error
                    revert(string(error));
                } else {
                    revert("LibDiamondCut: _init function reverted");
                }
            }
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize != 0, _errorMessage);
    }
}

File 3 of 11 : DiamondCutFacet.sol
/*
 SPDX-License-Identifier: MIT
*/

pragma experimental ABIEncoderV2;
pragma solidity ^0.7.6;
/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import {IDiamondCut} from "../../interfaces/IDiamondCut.sol";
import {LibDiamond} from "../../libraries/LibDiamond.sol";

contract DiamondCutFacet is IDiamondCut {
    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external override {
        LibDiamond.enforceIsContractOwner();
        LibDiamond.diamondCut(_diamondCut, _init, _calldata);
    }
}

File 4 of 11 : DiamondLoupeFacet.sol
/*
 SPDX-License-Identifier: MIT
*/

pragma experimental ABIEncoderV2;
pragma solidity ^0.7.6;
/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamond Standard: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

import {LibDiamond} from "../../libraries/LibDiamond.sol";
import {IDiamondLoupe} from "../../interfaces/IDiamondLoupe.sol";
import {IERC165} from "../../interfaces/IERC165.sol";

contract DiamondLoupeFacet is IDiamondLoupe, IERC165 {
    // Diamond Loupe Functions
    ////////////////////////////////////////////////////////////////////
    /// These functions are expected to be called frequently by tools.
    //
    // struct Facet {
    //     address facetAddress;
    //     bytes4[] functionSelectors;
    // }

    /// @notice Gets all facets and their selectors.
    /// @return facets_ Facet
    function facets() external view override returns (Facet[] memory facets_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        uint256 numFacets = ds.facetAddresses.length;
        facets_ = new Facet[](numFacets);
        for (uint256 i; i < numFacets; i++) {
            address facetAddress_ = ds.facetAddresses[i];
            facets_[i].facetAddress = facetAddress_;
            facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;
        }
    }

    /// @notice Gets all the function selectors provided by a facet.
    /// @param _facet The facet address.
    /// @return facetFunctionSelectors_
    function facetFunctionSelectors(address _facet)
        external
        view
        override
        returns (bytes4[] memory facetFunctionSelectors_)
    {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;
    }

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external view override returns (address[] memory facetAddresses_) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetAddresses_ = ds.facetAddresses;
    }

    /// @notice Gets the facet that supports the given selector.
    /// @dev If facet is not found return address(0).
    /// @param _functionSelector The function selector.
    /// @return facetAddress_ The facet address.
    function facetAddress(bytes4 _functionSelector)
        external
        view
        override
        returns (address facetAddress_)
        {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;
    }

    // This implements ERC-165.
    function supportsInterface(bytes4 _interfaceId) external view override returns (bool) {
        LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();
        return ds.supportedInterfaces[_interfaceId];
    }
}

File 5 of 11 : OwnershipFacet.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.7.6;
pragma experimental ABIEncoderV2;

import {IERC173} from "../../interfaces/IERC173.sol";
import {LibDiamond} from "../../libraries/LibDiamond.sol";

contract OwnershipFacet is IERC173 {
    function transferOwnership(address _newOwner) external override {
        LibDiamond.enforceIsContractOwner();
        LibDiamond.setContractOwner(_newOwner);
    }

    function owner() external view override returns (address owner_) {
        owner_ = LibDiamond.contractOwner();
    }

}

File 6 of 11 : AppStorage.sol
/*
 SPDX-License-Identifier: MIT
*/

pragma solidity ^0.7.6;
pragma experimental ABIEncoderV2;

import "../interfaces/IDiamondCut.sol";

/**
 * @author Publius
 * @title App Storage defines the state object for Beanstalk.
**/
contract Account {

    struct Field {
        mapping(uint256 => uint256) plots;
        mapping(address => uint256) podAllowances;
    }

    struct AssetSilo {
        mapping(uint32 => uint256) withdrawals;
        mapping(uint32 => uint256) deposits;
        mapping(uint32 => uint256) depositSeeds;
    }

    struct Silo {
        uint256 stalk;
        uint256 seeds;
    }

    struct SeasonOfPlenty {
        uint256 base;
        uint256 roots;
        uint256 basePerRoot;
    }

    struct State {
        Field field;
        AssetSilo bean;
        AssetSilo lp;
        Silo s;
        uint32 lockedUntil;
        uint32 lastUpdate;
        uint32 lastSop;
        uint32 lastRain;
        SeasonOfPlenty sop;
        uint256 roots;
    }
}

contract Storage {
    struct Contracts {
        address bean;
        address pair;
        address pegPair;
        address weth;
    }

    // Field

    struct Field {
        uint256 soil;
        uint256 pods;
        uint256 harvested;
        uint256 harvestable;
    }

    // Governance

    struct Bip {
        address proposer;
        uint32 start;
        uint32 period;
        bool executed;
        int pauseOrUnpause;
        uint128 timestamp;
        uint256 roots;
        uint256 endTotalRoots;
    }

    struct DiamondCut {
        IDiamondCut.FacetCut[] diamondCut;
        address initAddress;
        bytes initData;
    }

    struct Governance {
        uint32[] activeBips;
        uint32 bipIndex;
        mapping(uint32 => DiamondCut) diamondCuts;
        mapping(uint32 => mapping(address => bool)) voted;
        mapping(uint32 => Bip) bips;
    }

    // Silo

    struct AssetSilo {
        uint256 deposited;
        uint256 withdrawn;
    }

    struct IncreaseSilo {
        uint256 beans;
        uint256 stalk;
    }

    struct SeasonOfPlenty {
        uint256 weth;
        uint256 base;
        uint32 last;
    }

    struct Silo {
        uint256 stalk;
        uint256 seeds;
        uint256 roots;
    }

    // Season

    struct Oracle {
        bool initialized;
        uint256 cumulative;
        uint256 pegCumulative;
        uint32 timestamp;
        uint32 pegTimestamp;
    }

    struct Rain {
        uint32 start;
        bool raining;
        uint256 pods;
        uint256 roots;
    }

    struct Season {
        uint32 current;
        uint256 start;
        uint256 period;
        uint256 timestamp;
    }

    struct Weather {
        uint256 startSoil;
        uint256 lastDSoil;
        uint96 lastSoilPercent;
        uint32 lastSowTime;
        uint32 nextSowTime;
        uint32 yield;
        bool didSowBelowMin;
        bool didSowFaster;
    }
}

struct AppStorage {
    uint8 index;
    int8[32] cases;
    bool paused;
    uint128 pausedAt;
    Storage.Season season;
    Storage.Contracts c;
    Storage.Field f;
    Storage.Governance g;
    Storage.Oracle o;
    Storage.Rain r;
    Storage.Silo s;
    uint256 depreciated1;
    Storage.Weather w;
    Storage.AssetSilo bean;
    Storage.AssetSilo lp;
    Storage.IncreaseSilo si;
    Storage.SeasonOfPlenty sop;
    uint256 depreciated2;
    uint256 depreciated3;
    uint256 depreciated4;
    uint256 depreciated5;
    uint256 depreciated6;
    mapping (uint32 => uint256) sops;
    mapping (address => Account.State) a;
    uint32 bip0Start;
}

File 7 of 11 : IERC165.sol
// SPDX-License-Identifier: MIT
pragma experimental ABIEncoderV2;
pragma solidity ^0.7.6;
interface IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceId The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 8 of 11 : IDiamondCut.sol
// SPDX-License-Identifier: MIT
pragma experimental ABIEncoderV2;
pragma solidity ^0.7.6;
/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
/******************************************************************************/

interface IDiamondCut {
    enum FacetCutAction {Add, Replace, Remove}

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external;

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}

File 9 of 11 : IDiamondLoupe.sol
// SPDX-License-Identifier: MIT
pragma experimental ABIEncoderV2;
pragma solidity ^0.7.6;
// A loupe is a small magnifying glass used to look at diamonds.
// These functions look at diamonds
interface IDiamondLoupe {
    /// These functions are expected to be called frequently
    /// by tools.

    struct Facet {
        address facetAddress;
        bytes4[] functionSelectors;
    }

    /// @notice Gets all facet addresses and their four byte function selectors.
    /// @return facets_ Facet
    function facets() external view returns (Facet[] memory facets_);

    /// @notice Gets all the function selectors supported by a specific facet.
    /// @param _facet The facet address.
    /// @return facetFunctionSelectors_
    function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);

    /// @notice Get all the facet addresses used by a diamond.
    /// @return facetAddresses_
    function facetAddresses() external view returns (address[] memory facetAddresses_);

    /// @notice Gets the facet that supports the given selector.
    /// @dev If facet is not found return address(0).
    /// @param _functionSelector The function selector.
    /// @return facetAddress_ The facet address.
    function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);
}

File 10 of 11 : IERC173.sol
// SPDX-License-Identifier: MIT
pragma experimental ABIEncoderV2;
pragma solidity ^0.7.6;
/// @title ERC-173 Contract Ownership Standard
///  Note: the ERC-165 identifier for this interface is 0x7f5828d0
/* is ERC165 */
interface IERC173 {
    /// @notice Get the address of the owner
    /// @return owner_ The address of the owner.
    function owner() external view returns (address owner_);

    /// @notice Set the address of the new owner of the contract
    /// @dev Set _newOwner to address(0) to renounce any ownership.
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

File 11 of 11 : LibMeta.sol
/*
 SPDX-License-Identifier: MIT
*/

pragma experimental ABIEncoderV2;
pragma solidity ^0.7.6;

library LibMeta {
    bytes32 internal constant EIP712_DOMAIN_TYPEHASH =
        keccak256(bytes("EIP712Domain(string name,string version,uint256 salt,address verifyingContract)"));

    function domainSeparator(string memory name, string memory version) internal view returns (bytes32 domainSeparator_) {
        domainSeparator_ = keccak256(
            abi.encode(EIP712_DOMAIN_TYPEHASH, keccak256(bytes(name)), keccak256(bytes(version)), getChainID(), address(this))
        );
    }

    function getChainID() internal pure returns (uint256 id) {
        assembly {
            id := chainid()
        }
    }

    function msgSender() internal view returns (address sender_) {
        if (msg.sender == address(this)) {
            bytes memory array = msg.data;
            uint256 index = msg.data.length;
            assembly {
                // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.
                sender_ := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)
            }
        } else {
            sender_ = msg.sender;
        }
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620049d6380380620049d6833981016040819052620000349162001004565b6200004a81620000ea60201b6200009c1760201c565b620000e36040516200005c9062000fbb565b604051809103906000f08015801562000079573d6000803e3d6000fd5b50604051620000889062000fc9565b604051809103906000f080158015620000a5573d6000803e3d6000fd5b50604051620000b49062000fd7565b604051809103906000f080158015620000d1573d6000803e3d6000fd5b506200014c60201b620000fc1760201c565b506200155f565b6000620000f662000455565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b6200016e62000fe5565b815260200190600190039081620001645750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b81600081518110620001bd57fe5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106200020857fe5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b816000815181106200024c57fe5b6001600160e01b03199092166020928302919091019091015280516356fe50af60e11b90829060019081106200027e57fe5b6001600160e01b03199092166020928302919091019091015280516314bbdacb60e21b9082906002908110620002b057fe5b6001600160e01b03199092166020928302919091019091015280516366ffd66360e11b9082906003908110620002e257fe5b6001600160e01b03199092166020928302919091019091015280516301ffc9a760e01b90829060049081106200031457fe5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03861681529081016000815260200182815250826001815181106200035f57fe5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b81600081518110620003a357fe5b6001600160e01b0319909216602092830291909101909101528051638da5cb5b60e01b9082906001908110620003d557fe5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03851681529081016000815260200182815250826002815181106200042057fe5b60200260200101819052506200044e826000604051806020016040528060008152506200047960201b60201c565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b8351811015620005ea5760008482815181106200049557fe5b602002602001015160200151905060006002811115620004b157fe5b816002811115620004be57fe5b14156200050d5762000507858381518110620004d657fe5b602002602001015160000151868481518110620004ef57fe5b6020026020010151604001516200063960201b60201c565b620005e0565b60018160028111156200051c57fe5b14156200056557620005078583815181106200053457fe5b6020026020010151600001518684815181106200054d57fe5b6020026020010151604001516200084560201b60201c565b60028160028111156200057457fe5b1415620005bd57620005078583815181106200058c57fe5b602002602001015160000151868481518110620005a557fe5b60200260200101516040015162000a6f60201b60201c565b60405162461bcd60e51b8152600401620005d79062001280565b60405180910390fd5b506001016200047c565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405162000620939291906200108d565b60405180910390a162000634828262000b36565b505050565b60008151116200065d5760405162461bcd60e51b8152600401620005d79062001235565b60006200066962000455565b90506001600160a01b038316620006945760405162461bcd60e51b8152600401620005d790620014e5565b6001600160a01b038316600090815260018201602052604090205461ffff81166200073a57620006de84604051806060016040528060248152602001620049b26024913962000c74565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156200044e5760008482815181106200075657fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03168015620007a95760405162461bcd60e51b8152600401620005d790620013ce565b506001600160a01b0386166000818152600186810160209081526040808420805480850182559085528285206008820401805463ffffffff60079093166004026101000a928302191660e089901c929092029190911790556001600160e01b0319909516835287905292902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff86160217905591820191016200073d565b6000815111620008695760405162461bcd60e51b8152600401620005d79062001235565b60006200087562000455565b90506001600160a01b038316620008a05760405162461bcd60e51b8152600401620005d790620014e5565b6001600160a01b038316600090815260018201602052604090205461ffff81166200094657620008ea84604051806060016040528060248152602001620049b26024913962000c74565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156200044e5760008482815181106200096257fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b03908116908716811415620009bb5760405162461bcd60e51b8152600401620005d790620012c7565b620009c7818362000c98565b506001600160e01b03198116600081815260208681526040808320805461ffff60a01b1916600160a01b61ffff8a16021781556001600160a01b038b168085526001808b018552928520805480850182559086528486206008820401805463ffffffff60079093166004026101000a928302191660e09990991c91909102979097179096559390925286905281546001600160a01b0319169092179055918201910162000949565b600081511162000a935760405162461bcd60e51b8152600401620005d79062001235565b600062000a9f62000455565b90506001600160a01b0383161562000acb5760405162461bcd60e51b8152600401620005d7906200142b565b60005b825181101562000b3057600083828151811062000ae757fe5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b031662000b25818362000c98565b505060010162000ace565b50505050565b6001600160a01b03821662000b6d5780511562000b675760405162461bcd60e51b8152600401620005d79062001192565b62000c70565b600081511162000b915760405162461bcd60e51b8152600401620005d79062001324565b6001600160a01b038216301462000bc75762000bc7826040518060600160405280602881526020016200498a6028913962000c74565b600080836001600160a01b03168360405162000be491906200106f565b600060405180830381855af49150503d806000811462000c21576040519150601f19603f3d011682016040523d82523d6000602084013e62000c26565b606091505b5090925090508162000b305780511562000c56578060405162461bcd60e51b8152600401620005d791906200117d565b60405162461bcd60e51b8152600401620005d790620011ef565b5050565b813b818162000b305760405162461bcd60e51b8152600401620005d791906200117d565b600062000ca462000455565b90506001600160a01b03831662000ccf5760405162461bcd60e51b8152600401620005d79062001488565b6001600160a01b03831630141562000cfb5760405162461bcd60e51b8152600401620005d79062001381565b6001600160e01b03198216600090815260208281526040808320546001600160a01b03871684526001850190925290912054600160a01b90910461ffff16906000190180821462000e1f576001600160a01b0385166000908152600184016020526040812080548390811062000d6d57fe5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b92508291908590811062000db957fe5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b0385166000908152600184016020526040902080548062000e4357fe5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080546001600160b01b0319169055806200044e5760028301546001600160a01b03861660009081526001858101602052604090912001546000199091019061ffff1680821462000f5b57600085600201838154811062000ee457fe5b6000918252602090912001546002870180546001600160a01b03909216925082918490811062000f1057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b8460020180548062000f6957fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6115238062002b1a83390190565b61064a806200403d83390190565b610303806200468783390190565b6040805160608082018352600080835260208301529181019190915290565b60006020828403121562001016578081fd5b81516001600160a01b03811681146200102d578182fd5b9392505050565b6001600160a01b03169052565b600081518084526200105b81602086016020860162001530565b601f01601f19169290920160200192915050565b600082516200108381846020870162001530565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b848110156200114a57898303607f19018652815180516001600160a01b03168452848101518985019060038110620010e757fe5b858701526040918201519185018a9052815190819052908501908a90898601905b80831015620011345783516001600160e01b031916825292870192600192909201919087019062001108565b50978601979450505090830190600101620010b3565b50506200115a8289018b62001034565b87810360408901526200116e818a62001041565b9b9a5050505050505050505050565b6000602082526200102d602083018462001041565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e2072656040820152651d995c9d195960d21b606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201526a1858d95d081d1bc818dd5d60aa1b606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f727265637420466163657443756040820152663a20b1ba34b7b760c91b606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e74207265706c6163652066756e6360408201527f74696f6e20776974682073616d652066756e6374696f6e000000000000000000606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602d908201527f4c69624469616d6f6e644375743a2043616e742072656d6f766520696d6d757460408201526c30b1363290333ab731ba34b7b760991b606082015260800190565b60208082526034908201527f4c69624469616d6f6e644375743a2043616e74206164642066756e6374696f6e60408201527f207468617420616c726561647920657869737473000000000000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e742072656d6f76652066756e637460408201527f696f6e207468617420646f65736e742065786973740000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204164642066616365742063616e7420626560408201526a206164647265737328302960a81b606082015260800190565b60005b838110156200154d57818101518382015260200162001533565b8381111562000b305750506000910152565b6115ab806200156f6000396000f3fe60806040523661000b57005b600080356001600160e01b03191681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602081905260409091205481906001600160a01b0316806100785760405162461bcd60e51b815260040161006f9061129a565b60405180910390fd5b3660008037600080366000845af43d6000803e808015610097573d6000f35b3d6000fd5b60006100a661046c565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b61011c610f55565b8152602001906001900390816101145750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b8160008151811061016957fe5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106101b357fe5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b816000815181106101f657fe5b6001600160e01b03199092166020928302919091019091015280517fadfca15e00000000000000000000000000000000000000000000000000000000908290600190811061024057fe5b6001600160e01b03199092166020928302919091019091015280517f52ef6b2c00000000000000000000000000000000000000000000000000000000908290600290811061028a57fe5b6001600160e01b03199092166020928302919091019091015280517fcdffacc60000000000000000000000000000000000000000000000000000000090829060039081106102d457fe5b6001600160e01b03199092166020928302919091019091015280517f01ffc9a700000000000000000000000000000000000000000000000000000000908290600490811061031e57fe5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038616815290810160008152602001828152508260018151811061036857fe5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106103ab57fe5b6001600160e01b03199092166020928302919091019091015280517f8da5cb5b0000000000000000000000000000000000000000000000000000000090829060019081106103f557fe5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038516815290810160008152602001828152508260028151811061043f57fe5b602002602001018190525061046582600060405180602001604052806000815250610490565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b83518110156105cd5760008482815181106104aa57fe5b6020026020010151602001519050600060028111156104c557fe5b8160028111156104d157fe5b14156105145761050f8583815181106104e657fe5b6020026020010151600001518684815181106104fe57fe5b602002602001015160400151610618565b6105c4565b600181600281111561052257fe5b14156105605761050f85838151811061053757fe5b60200260200101516000015186848151811061054f57fe5b602002602001015160400151610812565b600281600281111561056e57fe5b14156105ac5761050f85838151811061058357fe5b60200260200101516000015186848151811061059b57fe5b602002602001015160400151610a28565b60405162461bcd60e51b815260040161006f906111e0565b50600101610493565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161060193929190610fc9565b60405180910390a16106138282610ae2565b505050565b60008151116106395760405162461bcd60e51b815260040161006f90611183565b600061064361046c565b90506001600160a01b03831661066b5760405162461bcd60e51b815260040161006f906114a0565b6001600160a01b038316600090815260018201602052604090205461ffff811661070d576106b18460405180606001604052806024815260200161155260249139610c0a565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b835181101561046557600084828151811061072757fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156107775760405162461bcd60e51b815260040161006f90611389565b506001600160a01b0386166000818152600186810160209081526040808420805480850182559085528285206008820401805463ffffffff60079093166004026101000a928302191660e089901c929092029190911790556001600160e01b0319909516835287905292902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff8616021790559182019101610710565b60008151116108335760405162461bcd60e51b815260040161006f90611183565b600061083d61046c565b90506001600160a01b0383166108655760405162461bcd60e51b815260040161006f906114a0565b6001600160a01b038316600090815260018201602052604090205461ffff8116610907576108ab8460405180606001604052806024815260200161155260249139610c0a565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b835181101561046557600084828151811061092157fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b039081169087168114156109775760405162461bcd60e51b815260040161006f9061123d565b6109818183610c2b565b506001600160e01b03198116600081815260208681526040808320805461ffff60a01b1916600160a01b61ffff8a16021781556001600160a01b038b168085526001808b018552928520805480850182559086528486206008820401805463ffffffff60079093166004026101000a928302191660e09990991c91909102979097179096559390925286905281546001600160a01b0319169092179055918201910161090a565b6000815111610a495760405162461bcd60e51b815260040161006f90611183565b6000610a5361046c565b90506001600160a01b03831615610a7c5760405162461bcd60e51b815260040161006f906113e6565b60005b8251811015610adc576000838281518110610a9657fe5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b0316610ad28183610c2b565b5050600101610a7f565b50505050565b6001600160a01b038216610b1457805115610b0f5760405162461bcd60e51b815260040161006f906110c9565b610c06565b6000815111610b355760405162461bcd60e51b815260040161006f906112cf565b6001600160a01b0382163014610b6757610b678260405180606001604052806028815260200161152a60289139610c0a565b600080836001600160a01b031683604051610b829190610fad565b600060405180830381855af49150503d8060008114610bbd576040519150601f19603f3d011682016040523d82523d6000602084013e610bc2565b606091505b50909250905081610adc57805115610bee578060405162461bcd60e51b815260040161006f91906110af565b60405162461bcd60e51b815260040161006f90611126565b5050565b813b8181610adc5760405162461bcd60e51b815260040161006f91906110af565b6000610c3561046c565b90506001600160a01b038316610c5d5760405162461bcd60e51b815260040161006f90611443565b6001600160a01b038316301415610c865760405162461bcd60e51b815260040161006f9061132c565b6001600160e01b03198216600090815260208281526040808320546001600160a01b03871684526001850190925290912054600160a01b90910461ffff169060001901808214610da7576001600160a01b03851660009081526001840160205260408120805483908110610cf657fe5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610d4157fe5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480610dca57fe5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080547fffffffffffffffffffff00000000000000000000000000000000000000000000169055806104655760028301546001600160a01b03861660009081526001858101602052604090912001546000199091019061ffff16808214610ef6576000856002018381548110610e8057fe5b6000918252602090912001546002870180546001600160a01b039092169250829184908110610eab57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b84600201805480610f0357fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6040805160608082018352600080835260208301529181019190915290565b6001600160a01b03169052565b60008151808452610f998160208601602086016114fd565b601f01601f19169290920160200192915050565b60008251610fbf8184602087016114fd565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b8481101561108057607f198a840301865281518884016001600160a01b038251168552858201516003811061102057fe5b858701526040918201519185018a9052815190819052908501908a90898601905b8083101561106b5783516001600160e01b0319168252928701926001929092019190870190611041565b50978601979450505090830190600101610fef565b505061108e8289018b610f74565b87810360408901526110a0818a610f81565b9b9a5050505050505050505050565b6000602082526110c26020830184610f81565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560408201527f7665727465640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201527f6163657420746f20637574000000000000000000000000000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560408201527f74416374696f6e00000000000000000000000000000000000000000000000000606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e74207265706c6163652066756e6360408201527f74696f6e20776974682073616d652066756e6374696f6e000000000000000000606082015260800190565b6020808252818101527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604082015260600190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602d908201527f4c69624469616d6f6e644375743a2043616e742072656d6f766520696d6d757460408201527f61626c652066756e6374696f6e00000000000000000000000000000000000000606082015260800190565b60208082526034908201527f4c69624469616d6f6e644375743a2043616e74206164642066756e6374696f6e60408201527f207468617420616c726561647920657869737473000000000000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e742072656d6f76652066756e637460408201527f696f6e207468617420646f65736e742065786973740000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204164642066616365742063616e7420626560408201527f2061646472657373283029000000000000000000000000000000000000000000606082015260800190565b60005b83811015611518578181015183820152602001611500565b83811115610adc575050600091015256fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a264697066735822122036be5caefc205aca91a276d6945ac21210af74089e11449e8d857b108dcf610664736f6c63430007060033608060405234801561001057600080fd5b50611503806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80631f931c1c14610030575b600080fd5b61004361003e366004610ccf565b610045565b005b61004d61009e565b61009761005a8587611394565b8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100ec92505050565b5050505050565b6100a6610274565b600401546001600160a01b03166100bb610298565b6001600160a01b0316146100ea5760405162461bcd60e51b81526004016100e190610fb0565b60405180910390fd5b565b60005b835181101561022957600084828151811061010657fe5b60200260200101516020015190506000600281111561012157fe5b81600281111561012d57fe5b14156101705761016b85838151811061014257fe5b60200260200101516000015186848151811061015a57fe5b6020026020010151604001516102f5565b610220565b600181600281111561017e57fe5b14156101bc5761016b85838151811061019357fe5b6020026020010151600001518684815181106101ab57fe5b6020026020010151604001516104ef565b60028160028111156101ca57fe5b14156102085761016b8583815181106101df57fe5b6020026020010151600001518684815181106101f757fe5b602002602001015160400151610705565b60405162461bcd60e51b81526004016100e19061106a565b506001016100ef565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161025d93929190610df6565b60405180910390a161026f82826107bf565b505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b6000333014156102ef57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506102f29050565b50335b90565b60008151116103165760405162461bcd60e51b81526004016100e19061100d565b6000610320610274565b90506001600160a01b0383166103485760405162461bcd60e51b81526004016100e1906112f5565b6001600160a01b038316600090815260018201602052604090205461ffff81166103ea5761038e846040518060600160405280602481526020016114aa602491396108e7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b835181101561009757600084828151811061040457fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156104545760405162461bcd60e51b81526004016100e1906111de565b506001600160a01b0386166000818152600186810160209081526040808420805480850182559085528285206008820401805463ffffffff60079093166004026101000a928302191660e089901c929092029190911790556001600160e01b0319909516835287905292902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff86160217905591820191016103ed565b60008151116105105760405162461bcd60e51b81526004016100e19061100d565b600061051a610274565b90506001600160a01b0383166105425760405162461bcd60e51b81526004016100e1906112f5565b6001600160a01b038316600090815260018201602052604090205461ffff81166105e457610588846040518060600160405280602481526020016114aa602491396108e7565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b83518110156100975760008482815181106105fe57fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b039081169087168114156106545760405162461bcd60e51b81526004016100e1906110c7565b61065e8183610908565b506001600160e01b03198116600081815260208681526040808320805461ffff60a01b1916600160a01b61ffff8a16021781556001600160a01b038b168085526001808b018552928520805480850182559086528486206008820401805463ffffffff60079093166004026101000a928302191660e09990991c91909102979097179096559390925286905281546001600160a01b031916909217905591820191016105e7565b60008151116107265760405162461bcd60e51b81526004016100e19061100d565b6000610730610274565b90506001600160a01b038316156107595760405162461bcd60e51b81526004016100e19061123b565b60005b82518110156107b957600083828151811061077357fe5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b03166107af8183610908565b505060010161075c565b50505050565b6001600160a01b0382166107f1578051156107ec5760405162461bcd60e51b81526004016100e190610ef6565b6108e3565b60008151116108125760405162461bcd60e51b81526004016100e190611124565b6001600160a01b03821630146108445761084482604051806060016040528060288152602001611482602891396108e7565b600080836001600160a01b03168360405161085f9190610dda565b600060405180830381855af49150503d806000811461089a576040519150601f19603f3d011682016040523d82523d6000602084013e61089f565b606091505b509092509050816107b9578051156108cb578060405162461bcd60e51b81526004016100e19190610edc565b60405162461bcd60e51b81526004016100e190610f53565b5050565b813b81816107b95760405162461bcd60e51b81526004016100e19190610edc565b6000610912610274565b90506001600160a01b03831661093a5760405162461bcd60e51b81526004016100e190611298565b6001600160a01b0383163014156109635760405162461bcd60e51b81526004016100e190611181565b6001600160e01b03198216600090815260208281526040808320546001600160a01b03871684526001850190925290912054600160a01b90910461ffff169060001901808214610a84576001600160a01b038516600090815260018401602052604081208054839081106109d357fe5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610a1e57fe5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480610aa757fe5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080547fffffffffffffffffffff00000000000000000000000000000000000000000000169055806100975760028301546001600160a01b03861660009081526001858101602052604090912001546000199091019061ffff16808214610bd3576000856002018381548110610b5d57fe5b6000918252602090912001546002870180546001600160a01b039092169250829184908110610b8857fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b84600201805480610be057fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b80356001600160a01b0381168114610c4957600080fd5b919050565b600082601f830112610c5e578081fd5b81356020610c73610c6e83611376565b611352565b8281528181019085830183850287018401881015610c8f578586fd5b855b85811015610cc25781356001600160e01b031981168114610cb0578788fd5b84529284019290840190600101610c91565b5090979650505050505050565b600080600080600060608688031215610ce6578081fd5b853567ffffffffffffffff80821115610cfd578283fd5b818801915088601f830112610d10578283fd5b813581811115610d1e578384fd5b60208a818284028601011115610d32578485fd5b8084019850819750610d45818b01610c32565b965060408a0135935082841115610d5a578485fd5b838a0193508a601f850112610d6d578485fd5b8335915082821115610d7d578485fd5b8a81838601011115610d8d578485fd5b979a96995094975050909401935090919050565b6001600160a01b03169052565b60008151808452610dc6816020860160208601611455565b601f01601f19169290920160200192915050565b60008251610dec818460208701611455565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b84811015610ead57607f198a840301865281518884016001600160a01b0382511685528582015160038110610e4d57fe5b858701526040918201519185018a9052815190819052908501908a90898601905b80831015610e985783516001600160e01b0319168252928701926001929092019190870190610e6e565b50978601979450505090830190600101610e1c565b5050610ebb8289018b610da1565b8781036040890152610ecd818a610dae565b9b9a5050505050505050505050565b600060208252610eef6020830184610dae565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560408201527f7665727465640000000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60408201527f6572000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201527f6163657420746f20637574000000000000000000000000000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560408201527f74416374696f6e00000000000000000000000000000000000000000000000000606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e74207265706c6163652066756e6360408201527f74696f6e20776974682073616d652066756e6374696f6e000000000000000000606082015260800190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602d908201527f4c69624469616d6f6e644375743a2043616e742072656d6f766520696d6d757460408201527f61626c652066756e6374696f6e00000000000000000000000000000000000000606082015260800190565b60208082526034908201527f4c69624469616d6f6e644375743a2043616e74206164642066756e6374696f6e60408201527f207468617420616c726561647920657869737473000000000000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e742072656d6f76652066756e637460408201527f696f6e207468617420646f65736e742065786973740000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204164642066616365742063616e7420626560408201527f2061646472657373283029000000000000000000000000000000000000000000606082015260800190565b60405181810167ffffffffffffffff8111828210171561136e57fe5b604052919050565b600067ffffffffffffffff82111561138a57fe5b5060209081020190565b60006113a2610c6e84611376565b8381526020808201919084845b87811015611449578135870160608082360312156113cb578788fd5b604080519182019167ffffffffffffffff80841182851017156113ea57fe5b8383526113f685610c32565b82528785013593506003841061140a578a8bfd5b838883015282850135935080841115611421578a8bfd5b5061142e36848601610c4e565b918101919091528752505093820193908201906001016113af565b50919695505050505050565b60005b83811015611470578181015183820152602001611458565b838111156107b9575050600091015256fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212201f711ec97d47f31714bcdb6285fe6a4f5dfeead1c7d65ec0ab2dd2e1c134226064736f6c63430007060033608060405234801561001057600080fd5b5061062a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80637a0ed627116100505780637a0ed627146100aa578063adfca15e146100bf578063cdffacc6146100df57610067565b806301ffc9a71461006c57806352ef6b2c14610095575b600080fd5b61007f61007a36600461048f565b6100ff565b60405161008c91906105e9565b60405180910390f35b61009d610132565b60405161008c919061050f565b6100b261019e565b60405161008c919061056f565b6100d26100cd366004610461565b610331565b60405161008c919061055c565b6100f26100ed36600461048f565b6103f0565b60405161008c91906104fb565b60008061010a610425565b6001600160e01b0319841660009081526003909101602052604090205460ff16915050919050565b6060600061013e610425565b6002810180546040805160208084028201810190925282815293945083018282801561019357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610175575b505050505091505090565b606060006101aa610425565b60028101549091508067ffffffffffffffff811180156101c957600080fd5b5060405190808252806020026020018201604052801561020357816020015b6101f0610449565b8152602001906001900390816101e85790505b50925060005b8181101561032b57600083600201828154811061022257fe5b9060005260206000200160009054906101000a90046001600160a01b031690508085838151811061024f57fe5b6020908102919091018101516001600160a01b03928316905290821660009081526001860182526040908190208054825181850281018501909352808352919290919083018282801561030357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116102b05790505b505050505085838151811061031457fe5b602090810291909101810151015250600101610209565b50505090565b6060600061033d610425565b6001600160a01b038416600090815260018201602090815260409182902080548351818402810184019094528084529394509192908301828280156103e357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116103905790505b5050505050915050919050565b6000806103fb610425565b6001600160e01b03199093166000908152602093909352505060409020546001600160a01b031690565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60408051808201909152600081526060602082015290565b600060208284031215610472578081fd5b81356001600160a01b0381168114610488578182fd5b9392505050565b6000602082840312156104a0578081fd5b81356001600160e01b031981168114610488578182fd5b6000815180845260208085019450808401835b838110156104f05781516001600160e01b031916875295820195908201906001016104ca565b509495945050505050565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b818110156105505783516001600160a01b03168352928401929184019160010161052b565b50909695505050505050565b60006020825261048860208301846104b7565b60208082528251828201819052600091906040908185019080840286018301878501865b838110156105db57888303603f19018552815180516001600160a01b031684528701518784018790526105c8878501826104b7565b9588019593505090860190600101610593565b509098975050505050505050565b90151581526020019056fea2646970667358221220930a765058e4f33dfb9aa2b72ee51e7104710d642a841a91aa938dc0612aff0b64736f6c63430007060033608060405234801561001057600080fd5b506102e3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80638da5cb5b1461003b578063f2fde38b14610059575b600080fd5b61004361006e565b604051610050919061023c565b60405180910390f35b61006c61006736600461020e565b61007d565b005b6000610078610091565b905090565b6100856100ad565b61008e81610115565b50565b600061009b61018d565b600401546001600160a01b0316919050565b6100b561018d565b600401546001600160a01b03166100ca6101b1565b6001600160a01b031614610113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161010a90610250565b60405180910390fd5b565b600061011f61018d565b6004810180546001600160a01b038581167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60003330141561020857600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061020b9050565b50335b90565b60006020828403121561021f578081fd5b81356001600160a01b0381168114610235578182fd5b9392505050565b6001600160a01b0391909116815260200190565b60208082526022908201527f4c69624469616d6f6e643a204d75737420626520636f6e7472616374206f776e60408201527f657200000000000000000000000000000000000000000000000000000000000060608201526080019056fea26469706673582212209398a464093f41c33e78447848e3933f95ccee622b944ad017f46407325b77ac64736f6c634300070600334c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465000000000000000000000000925753106fcdb6d2f30c3db295328a0a1c5fd1d1

Deployed Bytecode

0x60806040523661000b57005b600080356001600160e01b03191681527fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c602081905260409091205481906001600160a01b0316806100785760405162461bcd60e51b815260040161006f9061129a565b60405180910390fd5b3660008037600080366000845af43d6000803e808015610097573d6000f35b3d6000fd5b60006100a661046c565b6004810180546001600160a01b038581166001600160a01b031983168117909355604051939450169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60408051600380825260808201909252600091816020015b61011c610f55565b8152602001906001900390816101145750506040805160018082528183019092529192506000919060208083019080368337019050509050631f931c1c60e01b8160008151811061016957fe5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b03871681529081016000815260200182815250826000815181106101b357fe5b602090810291909101015260408051600580825260c0820190925290816020016020820280368337019050509050637a0ed62760e01b816000815181106101f657fe5b6001600160e01b03199092166020928302919091019091015280517fadfca15e00000000000000000000000000000000000000000000000000000000908290600190811061024057fe5b6001600160e01b03199092166020928302919091019091015280517f52ef6b2c00000000000000000000000000000000000000000000000000000000908290600290811061028a57fe5b6001600160e01b03199092166020928302919091019091015280517fcdffacc60000000000000000000000000000000000000000000000000000000090829060039081106102d457fe5b6001600160e01b03199092166020928302919091019091015280517f01ffc9a700000000000000000000000000000000000000000000000000000000908290600490811061031e57fe5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038616815290810160008152602001828152508260018151811061036857fe5b6020908102919091010152604080516002808252606082019092529081602001602082028036833701905050905063f2fde38b60e01b816000815181106103ab57fe5b6001600160e01b03199092166020928302919091019091015280517f8da5cb5b0000000000000000000000000000000000000000000000000000000090829060019081106103f557fe5b6001600160e01b031990921660209283029190910182015260408051606081019091526001600160a01b038516815290810160008152602001828152508260028151811061043f57fe5b602002602001018190525061046582600060405180602001604052806000815250610490565b5050505050565b7fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90565b60005b83518110156105cd5760008482815181106104aa57fe5b6020026020010151602001519050600060028111156104c557fe5b8160028111156104d157fe5b14156105145761050f8583815181106104e657fe5b6020026020010151600001518684815181106104fe57fe5b602002602001015160400151610618565b6105c4565b600181600281111561052257fe5b14156105605761050f85838151811061053757fe5b60200260200101516000015186848151811061054f57fe5b602002602001015160400151610812565b600281600281111561056e57fe5b14156105ac5761050f85838151811061058357fe5b60200260200101516000015186848151811061059b57fe5b602002602001015160400151610a28565b60405162461bcd60e51b815260040161006f906111e0565b50600101610493565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161060193929190610fc9565b60405180910390a16106138282610ae2565b505050565b60008151116106395760405162461bcd60e51b815260040161006f90611183565b600061064361046c565b90506001600160a01b03831661066b5760405162461bcd60e51b815260040161006f906114a0565b6001600160a01b038316600090815260018201602052604090205461ffff811661070d576106b18460405180606001604052806024815260200161155260249139610c0a565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b835181101561046557600084828151811061072757fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b031680156107775760405162461bcd60e51b815260040161006f90611389565b506001600160a01b0386166000818152600186810160209081526040808420805480850182559085528285206008820401805463ffffffff60079093166004026101000a928302191660e089901c929092029190911790556001600160e01b0319909516835287905292902080546001600160a01b03191690911761ffff60a01b1916600160a01b61ffff8616021790559182019101610710565b60008151116108335760405162461bcd60e51b815260040161006f90611183565b600061083d61046c565b90506001600160a01b0383166108655760405162461bcd60e51b815260040161006f906114a0565b6001600160a01b038316600090815260018201602052604090205461ffff8116610907576108ab8460405180606001604052806024815260200161155260249139610c0a565b6002820180546001600160a01b038616600081815260018087016020908152604083208201805461ffff191661ffff90961695909517909455845490810185559381529190912090910180546001600160a01b03191690911790555b60005b835181101561046557600084828151811061092157fe5b6020908102919091018101516001600160e01b031981166000908152918690526040909120549091506001600160a01b039081169087168114156109775760405162461bcd60e51b815260040161006f9061123d565b6109818183610c2b565b506001600160e01b03198116600081815260208681526040808320805461ffff60a01b1916600160a01b61ffff8a16021781556001600160a01b038b168085526001808b018552928520805480850182559086528486206008820401805463ffffffff60079093166004026101000a928302191660e09990991c91909102979097179096559390925286905281546001600160a01b0319169092179055918201910161090a565b6000815111610a495760405162461bcd60e51b815260040161006f90611183565b6000610a5361046c565b90506001600160a01b03831615610a7c5760405162461bcd60e51b815260040161006f906113e6565b60005b8251811015610adc576000838281518110610a9657fe5b6020908102919091018101516001600160e01b031981166000908152918590526040909120549091506001600160a01b0316610ad28183610c2b565b5050600101610a7f565b50505050565b6001600160a01b038216610b1457805115610b0f5760405162461bcd60e51b815260040161006f906110c9565b610c06565b6000815111610b355760405162461bcd60e51b815260040161006f906112cf565b6001600160a01b0382163014610b6757610b678260405180606001604052806028815260200161152a60289139610c0a565b600080836001600160a01b031683604051610b829190610fad565b600060405180830381855af49150503d8060008114610bbd576040519150601f19603f3d011682016040523d82523d6000602084013e610bc2565b606091505b50909250905081610adc57805115610bee578060405162461bcd60e51b815260040161006f91906110af565b60405162461bcd60e51b815260040161006f90611126565b5050565b813b8181610adc5760405162461bcd60e51b815260040161006f91906110af565b6000610c3561046c565b90506001600160a01b038316610c5d5760405162461bcd60e51b815260040161006f90611443565b6001600160a01b038316301415610c865760405162461bcd60e51b815260040161006f9061132c565b6001600160e01b03198216600090815260208281526040808320546001600160a01b03871684526001850190925290912054600160a01b90910461ffff169060001901808214610da7576001600160a01b03851660009081526001840160205260408120805483908110610cf657fe5b600091825260208083206008830401546001600160a01b038a168452600188019091526040909220805460079092166004026101000a90920460e01b925082919085908110610d4157fe5b600091825260208083206008830401805463ffffffff60079094166004026101000a938402191660e09590951c929092029390931790556001600160e01b031992909216825284905260409020805461ffff60a01b1916600160a01b61ffff8516021790555b6001600160a01b03851660009081526001840160205260409020805480610dca57fe5b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a0219169055919092556001600160e01b0319861682528490526040902080547fffffffffffffffffffff00000000000000000000000000000000000000000000169055806104655760028301546001600160a01b03861660009081526001858101602052604090912001546000199091019061ffff16808214610ef6576000856002018381548110610e8057fe5b6000918252602090912001546002870180546001600160a01b039092169250829184908110610eab57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905592909116815260018781019092526040902001805461ffff191661ffff83161790555b84600201805480610f0357fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03891682526001878101909152604090912001805461ffff1916905550505050505050565b6040805160608082018352600080835260208301529181019190915290565b6001600160a01b03169052565b60008151808452610f998160208601602086016114fd565b601f01601f19169290920160200192915050565b60008251610fbf8184602087016114fd565b9190910192915050565b606080825284518282018190526000919060809081850190602080820287018401818b01875b8481101561108057607f198a840301865281518884016001600160a01b038251168552858201516003811061102057fe5b858701526040918201519185018a9052815190819052908501908a90898601905b8083101561106b5783516001600160e01b0319168252928701926001929092019190870190611041565b50978601979450505090830190600101610fef565b505061108e8289018b610f74565b87810360408901526110a0818a610f81565b9b9a5050505050505050505050565b6000602082526110c26020830184610f81565b9392505050565b6020808252603c908201527f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860408201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000606082015260800190565b60208082526026908201527f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560408201527f7665727465640000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660408201527f6163657420746f20637574000000000000000000000000000000000000000000606082015260800190565b60208082526027908201527f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560408201527f74416374696f6e00000000000000000000000000000000000000000000000000606082015260800190565b60208082526037908201527f4c69624469616d6f6e644375743a2043616e74207265706c6163652066756e6360408201527f74696f6e20776974682073616d652066756e6374696f6e000000000000000000606082015260800190565b6020808252818101527f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374604082015260600190565b6020808252603d908201527f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460408201527f7920627574205f696e6974206973206e6f742061646472657373283029000000606082015260800190565b6020808252602d908201527f4c69624469616d6f6e644375743a2043616e742072656d6f766520696d6d757460408201527f61626c652066756e6374696f6e00000000000000000000000000000000000000606082015260800190565b60208082526034908201527f4c69624469616d6f6e644375743a2043616e74206164642066756e6374696f6e60408201527f207468617420616c726561647920657869737473000000000000000000000000606082015260800190565b60208082526036908201527f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260408201527f657373206d757374206265206164647265737328302900000000000000000000606082015260800190565b60208082526035908201527f4c69624469616d6f6e644375743a2043616e742072656d6f76652066756e637460408201527f696f6e207468617420646f65736e742065786973740000000000000000000000606082015260800190565b6020808252602b908201527f4c69624469616d6f6e644375743a204164642066616365742063616e7420626560408201527f2061646472657373283029000000000000000000000000000000000000000000606082015260800190565b60005b83811015611518578181015183820152602001611500565b83811115610adc575050600091015256fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a264697066735822122036be5caefc205aca91a276d6945ac21210af74089e11449e8d857b108dcf610664736f6c63430007060033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000925753106fcdb6d2f30c3db295328a0a1c5fd1d1

-----Decoded View---------------
Arg [0] : _contractOwner (address): 0x925753106FCdB6D2f30C3db295328a0A1c5fD1D1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000925753106fcdb6d2f30c3db295328a0a1c5fd1d1


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.