ETH Price: $2,628.11 (+1.47%)

Token

Slate Genesis (SLATE)
 

Overview

Max Total Supply

22 SLATE

Holders

15

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0x05f9c5791f7bcc0a97f454d457cb1fc37ac3362c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SLATE

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-20
*/

// SPDX-License-Identifier: None


//                                                                                           .',.         .....                   
//            ':c:cclllllcc:cc;'.          ...',;;,..        .'','.         .;loddoc,.      'oO0xc...';:codxkkxdc;,..             
//          .lk0KKKKKKKK000000Oxo:.    .,cdkkkOO00Odl;'.   .lO000Odc.      .:xKXXXKOkdc.   .:kKXKxoxOKKKXXXXKKK00Okxdc,.          
//         'cx0NNXXXXXXXXXXXKKKXKx:..;lk0KXXXNNXXKK0Oxdl' .:kXNXKKX0l.    .;d0XXKKK0KX0l.  .cO0kdokKNXXKKKKKKKKK0KKKK0Od;.        
//        .:d0XXKK0000KKKKKKKKXWNOdloO0XNNXXKKKKKK000KX0d,.:kKKK00XXd,    ,d0XKK00000XXx,  .lkkc;o0XXXX0kxddxkO000000KXXk:.       
//       .;oOXXKK00KXNN0xddddxk0kxdxOXNXXXXK0OO00OO00KNNkl,:k0K000XXx,   'o0XXK000000KNk;. 'lkd;,oO0K0xc,....;d0K00000KNXd.       
//       'lOXXKK000XWNOc'.....',;coOXXKXWWKxl:::coxOOKWN0o.;x0K000XXx'  .cOXXK0000000KNO:. ,dOx:,:cc;'.     .;dKXK000KXNXl.       
//      .:xKXXK0000NW0xoc:cc:,..'lOXXKXWNk:...   .':loxd:. ,d0K000NKo. .;xKXK0KKK0000KNk;..cOK0kOxc.       ,okKXK000KNNOc.        
//      .lOXXK00000KXK00O000Oxdl:oOKX0XWKo;.............   'oO0K00XXkc:lx0XKKXNKxdk00KN0c.'dKXKKN0l.    .;oOKXXKK0KXNNx'          
//      ,d0XXK00000KKKKKKKKKXNKkooxO00KXKOxxxolooddxdl:,'. .lO0K00KKK0KXXXKKNW0c.'oO0KXXkod0XX0KN0c.  .;d0XNXXKK0KNN0d;..         
//     .;xKXK00000XWXkodxxxxOK0d;'cxOOO0KKKK0KKKKKK000Oxxo:,lk0K000KKKKKKKKXWXl  .:x000KXXXXXK0XNO:   'oOXXKKK0K0KXK0OOko:,.      
//     .:xKXK0000KNNOc...'',,;,.  .,codxkkkkOO00000KKKKKK0kddxOK0000000000XWNd.   ,dO000KKKK000XXx,   .cxkkkkxkOOO0KKKK00OOd,     
//     .:xKXK00000XNOc.              ..'',;;;:clodxkO00000XX0dk0KK0000000KNWk'    .lO0K0000000KNKd'    .',,,'..';ok0KKK00KNKo.    
//     .cx0XK00000KNXOl.                        ..;ok0KK00KXNxd0KK000000KNW0:     .:k0K0000000KN0l.             .;xKK00000XNk,    
//     .:x0KK000000KNXOl.             ....        .;x0XK000XW0kKKK000000XNXo.      ;x0K0000000XNk;   ..........;ok0XK0000KNWO'    
//     .:xOKK0000000KNXx:.        .,lddxkxoc::;'',:oOXXK00XWWK0000K0000KNNk,       'dOK000000KNKd,'ldxkOOOkxxxOKXXXKK000KNXk;     
//      ,dO0K00000000XWOl,       .:d0XXXK0OOO0K0O0KXXXK0KXWXkookO0K0000XNKc.       .lO0K00000KNk:;o0XXXXKKKXXXXXXKK000KNWXd'      
//      .lkO000000000XWXk;       .cx0XXKKKKKXXXXXXXXKKKNWWKd,.,dkO0000KNNk'        .:x0000000XKo',o0KKKKKKKKKKK0000KKNNXOc.       
//       'lkOO00000KXWX0o.       .;dOOOO00KKKKKKKKKXNNNK0x:.  .:dxO0KKNNK:          .ckOO0KKXNKl..;dOO000000000KKXXXK0d;.         
//        .,cllllllldxl,           .:lodxxxxkkkkxxxxkko;..     .';dxOKKx,            .,codxkK0d'   .;loxkOOOOOkkkOko;.            
//           .........                ...'',,,;,,,'''..           .',;,.                ...','        ..',,,,,,''..               



// File: @openzeppelin/contracts/utils/Counters.sol


// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * 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[EIP 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: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: contracts/Slate.sol


pragma solidity ^0.8.4;

//                                                                                                .',.         .....                            
//                 ':c:cclllllcc:cc;'.          ...',;;,..        .'','.         .;loddoc,.      'oO0xc...';:codxkkxdc;,..                      
//               .lk0KKKKKKKK000000Oxo:.    .,cdkkkOO00Odl;'.   .lO000Odc.      .:xKXXXKOkdc.   .:kKXKxoxOKKKXXXXKKK00Okxdc,.                   
//              'cx0NNXXXXXXXXXXXKKKXKx:..;lk0KXXXNNXXKK0Oxdl' .:kXNXKKX0l.    .;d0XXKKK0KX0l.  .cO0kdokKNXXKKKKKKKKK0KKKK0Od;.                 
//             .:d0XXKK0000KKKKKKKKXWNOdloO0XNNXXKKKKKK000KX0d,.:kKKK00XXd,    ,d0XKK00000XXx,  .lkkc;o0XXXX0kxddxkO000000KXXk:.                
//            .;oOXXKK00KXNN0xddddxk0kxdxOXNXXXXK0OO00OO00KNNkl,:k0K000XXx,   'o0XXK000000KNk;. 'lkd;,oO0K0xc,....;d0K00000KNXd.                
//            'lOXXKK000XWNOc'.....',;coOXXKXWWKxl:::coxOOKWN0o.;x0K000XXx'  .cOXXK0000000KNO:. ,dOx:,:cc;'.     .;dKXK000KXNXl.                
//           .:xKXXK0000NW0xoc:cc:,..'lOXXKXWNk:...   .':loxd:. ,d0K000NKo. .;xKXK0KKK0000KNk;..cOK0kOxc.       ,okKXK000KNNOc.                 
//           .lOXXK00000KXK00O000Oxdl:oOKX0XWKo;.............   'oO0K00XXkc:lx0XKKXNKxdk00KN0c.'dKXKKN0l.    .;oOKXXKK0KXNNx'                   
//           ,d0XXK00000KKKKKKKKKXNKkooxO00KXKOxxxolooddxdl:,'. .lO0K00KKK0KXXXKKNW0c.'oO0KXXkod0XX0KN0c.  .;d0XNXXKK0KNN0d;..                  
//          .;xKXK00000XWXkodxxxxOK0d;'cxOOO0KKKK0KKKKKK000Oxxo:,lk0K000KKKKKKKKXWXl  .:x000KXXXXXK0XNO:   'oOXXKKK0K0KXK0OOko:,.               
//          .:xKXK0000KNNOc...'',,;,.  .,codxkkkkOO00000KKKKKK0kddxOK0000000000XWNd.   ,dO000KKKK000XXx,   .cxkkkkxkOOO0KKKK00OOd,              
//          .:xKXK00000XNOc.              ..'',;;;:clodxkO00000XX0dk0KK0000000KNWk'    .lO0K0000000KNKd'    .',,,'..';ok0KKK00KNKo.             
//          .cx0XK00000KNXOl.                        ..;ok0KK00KXNxd0KK000000KNW0:     .:k0K0000000KN0l.             .;xKK00000XNk,             
//          .:x0KK000000KNXOl.             ....        .;x0XK000XW0kKKK000000XNXo.      ;x0K0000000XNk;   ..........;ok0XK0000KNWO'             
//          .:xOKK0000000KNXx:.        .,lddxkxoc::;'',:oOXXK00XWWK0000K0000KNNk,       'dOK000000KNKd,'ldxkOOOkxxxOKXXXKK000KNXk;              
//           ,dO0K00000000XWOl,       .:d0XXXK0OOO0K0O0KXXXK0KXWXkookO0K0000XNKc.       .lO0K00000KNk:;o0XXXXKKKXXXXXXKK000KNWXd'               
//           .lkO000000000XWXk;       .cx0XXKKKKKXXXXXXXXKKKNWWKd,.,dkO0000KNNk'        .:x0000000XKo',o0KKKKKKKKKKK0000KKNNXOc.                
//            'lkOO00000KXWX0o.       .;dOOOO00KKKKKKKKKXNNNK0x:.  .:dxO0KKNNK:          .ckOO0KKXNKl..;dOO000000000KKXXXK0d;.                  
//             .,cllllllldxl,           .:lodxxxxkkkkxxxxkko;..     .';dxOKKx,            .,codxkK0d'   .;loxkOOOOOkkkOko;.                     
//                .........                ...'',,,;,,,'''..           .',;,.                ...','        ..',,,,,,''..                        









contract SLATE is ERC1155, Ownable, Pausable, ERC1155Burnable, ERC1155Supply, ReentrancyGuard {
    using Counters for Counters.Counter;
    using Strings for uint256;
    
    Counters.Counter private _tokenCounter;
    string private salt;

    uint256 public referralRate = 1000;
    uint256 public maxMintsPerWallet = 10;
    mapping(uint256 => uint256) public tokenPrice;
    mapping(uint256 => uint256) public maxSupply;
    mapping (uint256 => mapping (address => uint256)) mintCount;

    string public URIExtension = ".json";
    bool public publicSaleActive = false;
    string public name;
    string public symbol;

    constructor(string memory _name, string memory _symbol, string memory s) ERC1155("") { 
        name = _name;
        symbol = _symbol;
        salt = s;
    }
    
    modifier checkWl(address account, bytes32 hash) {
        if(!publicSaleActive) {
            require(keccak256(abi.encodePacked(salt, account)) == hash, "Address not whitelisted");
        }
        _;
    }

    modifier preMintChecks(address account, uint256 tokenId, uint256 amount) {
        require(tokenId <= _tokenCounter.current(), "Invalid tokenId");
        require(account != address(0), "Cannot mint to null account");

        uint256 _currentMints = mintCount[tokenId][account];
        uint256 _nextMintCount = _currentMints + amount;

        require(_nextMintCount <= maxMintsPerWallet, "Minting would exceed user minting limit");
        uint256 _currentSupply = totalSupply(tokenId);
        uint256 _nextSupply = _currentSupply + amount;

        require(_nextSupply <= maxSupply[tokenId], "Minting would exceed max supply");
        uint256 _price = tokenPrice[tokenId] * amount;
        require(msg.value >= _price, "Insufficient value to cover price");
        mintCount[tokenId][account] = _nextMintCount;
        _;
    }
    
    function setWLS(string memory _s) public onlyOwner {
        salt = _s;
    }

    function setMaxMintsPerWallet(uint256 _maxMints) public onlyOwner {
        maxMintsPerWallet = _maxMints;
    }

    function addToken(uint256 _tokenPrice, uint256 _maxSupply) public onlyOwner {
        require(_maxSupply > 0, "Max supply cannot be 0");

        _tokenCounter.increment();
        tokenPrice[_tokenCounter.current()] = _tokenPrice;
        maxSupply[_tokenCounter.current()] = _maxSupply;

    }

    function setTokenPrice(uint256 _tokenId, uint256 _tokenPrice) public onlyOwner {
        require(_tokenId <= _tokenCounter.current(), "Invalid tokenId");
        tokenPrice[_tokenCounter.current()] = _tokenPrice;
    }

    function setTokenSupply(uint256 _tokenId, uint256 _tokenSupply) public onlyOwner {
        require(_tokenId <= _tokenCounter.current(), "Invalid tokenId");
        require(_tokenSupply > totalSupply(_tokenSupply), "New supply is lower than current supply");
        maxSupply[_tokenCounter.current()] = _tokenSupply;
    }

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function pause() public onlyOwner {
        _pause();
    }
    function unpause() public onlyOwner {
        _unpause();
    }

    function setPublicSale(bool publicSaleStatus) public onlyOwner {
        publicSaleActive = publicSaleStatus;
    }

    function referrerComissionRate() public view returns (uint256) {
        return referralRate/100;
    }

    function setReferrerComissionRate(uint256 percentage) public onlyOwner {
        referralRate = percentage * 100;
    }

    function mint(address account, uint256 id, uint256 amount, address referrer, bytes32 hash)
        public
        payable
        whenNotPaused
        checkWl(account, hash) preMintChecks(account, id, amount)
    {
        _mint(account, id, amount, bytes(""));
        if(account!=referrer) {
            if(walletAlreadyMinted(account, id)) {
                _refferalHandler(referrer);
            }
        }
    }

    function walletAlreadyMinted(address _minter, uint256 tokenId)
        private view
        returns(bool walletMinted)
        {
        if(_minter == address(0)) { return true; }
        uint256 _currentMints = mintCount[tokenId][_minter];
        if(_currentMints==0) {
            return false;
        }
        else {
            return true;
        }
    }

    function _refferalHandler(address _referrer) private nonReentrant {
        if(_referrer == address(0)) { return; }
        uint256 _referrerBalance = 0;
        for(uint256 i = 1; i <= _tokenCounter.current(); i++) {
            _referrerBalance = _referrerBalance + balanceOf(_referrer, i);
        }
        if(_referrerBalance == 0) {return;}
        uint256 referralAmount =  msg.value * referralRate / 10000;
        (bool sent, ) = _referrer.call{value: referralAmount}("");
        require(sent, "Failed to transfer referral amount");
    }

    function withdraw() public onlyOwner {
        uint256 amount = address(this).balance;
        (bool sent, ) = owner().call{value: amount}("");
        require(sent, "Failed to withdraw");
    }

    function uri(uint256 id) public view virtual override returns (string memory) {
        require(totalSupply(id) > 0, "Invalid token id");
        string memory _uri = string(abi.encodePacked(super.uri(id), id.toString(), URIExtension));
        return _uri;
    }

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }

    function _mint(address to, uint256 id, uint256 amount, bytes memory data) 
        internal
        whenNotPaused
        override(ERC1155)
    {
        super._mint(to, id, amount, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"s","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"URIExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenPrice","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrerComissionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMints","type":"uint256"}],"name":"setMaxMintsPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"publicSaleStatus","type":"bool"}],"name":"setPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setReferrerComissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_tokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_tokenSupply","type":"uint256"}],"name":"setTokenSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_s","type":"string"}],"name":"setWLS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6103e8600855600a60095560c06040526005608081905264173539b7b760d91b60a09081526200003391600d91906200015c565b50600e805460ff191690553480156200004b57600080fd5b5060405162003525380380620035258339810160408190526200006e91620002b9565b6040805160208101909152600081526200008881620000f1565b5062000094336200010a565b6003805460ff60a01b1916905560016005558251620000bb90600f9060208601906200015c565b508151620000d19060109060208501906200015c565b508051620000e79060079060208401906200015c565b505050506200039d565b8051620001069060029060208401906200015c565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200016a906200034a565b90600052602060002090601f0160209004810192826200018e5760008555620001d9565b82601f10620001a957805160ff1916838001178555620001d9565b82800160010185558215620001d9579182015b82811115620001d9578251825591602001919060010190620001bc565b50620001e7929150620001eb565b5090565b5b80821115620001e75760008155600101620001ec565b600082601f8301126200021457600080fd5b81516001600160401b038082111562000231576200023162000387565b604051601f8301601f19908116603f011681019082821181831017156200025c576200025c62000387565b816040528381526020925086838588010111156200027957600080fd5b600091505b838210156200029d57858201830151818301840152908201906200027e565b83821115620002af5760008385830101525b9695505050505050565b600080600060608486031215620002cf57600080fd5b83516001600160401b0380821115620002e757600080fd5b620002f58783880162000202565b945060208601519150808211156200030c57600080fd5b6200031a8783880162000202565b935060408601519150808211156200033157600080fd5b50620003408682870162000202565b9150509250925092565b600181811c908216806200035f57607f821691505b602082108114156200038157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61317880620003ad6000396000f3fe6080604052600436106102195760003560e01c8063715018a611610123578063bc8893b4116100ab578063eb685c471161006f578063eb685c471461064e578063f242432a1461066e578063f2fde38b1461068e578063f516a2e6146106ae578063f5298aca146106c457600080fd5b8063bc8893b414610571578063bd85b0391461058b578063d4ddce8a146105b8578063db07ad28146105e5578063e985e9c51461060557600080fd5b806395d89b41116100f257806395d89b41146104f1578063963c354614610506578063a053ce1f14610526578063a22cb4651461053c578063abd972631461055c57600080fd5b8063715018a6146104725780638456cb5914610487578063869f75941461049c5780638da5cb5b146104c957600080fd5b80633ccfd60b116101a657806354e81f411161017557806354e81f41146103de5780635aca1bb6146103fe5780635c975abb1461041e5780635cfbd28b1461043d5780636b20c4541461045257600080fd5b80633ccfd60b146103585780633f4ba83a1461036d5780634e1273f4146103825780634f558e79146103af57600080fd5b806306fdde03116101ed57806306fdde03146102b65780630e89341c146102d857806317b9ebec146102f8578063278d17ad146103185780632eb2c2d61461033857600080fd5b8062fdd58e1461021e57806301ffc9a71461025157806302fe53051461028157806304c87d7b146102a3575b600080fd5b34801561022a57600080fd5b5061023e6102393660046127c2565b6106e4565b6040519081526020015b60405180910390f35b34801561025d57600080fd5b5061027161026c366004612959565b61077e565b6040519015158152602001610248565b34801561028d57600080fd5b506102a161029c366004612993565b6107ce565b005b6102a16102b136600461281f565b610804565b3480156102c257600080fd5b506102cb610b50565b6040516102489190612c5b565b3480156102e457600080fd5b506102cb6102f33660046129dc565b610bde565b34801561030457600080fd5b506102a16103133660046129f5565b610c6f565b34801561032457600080fd5b506102a16103333660046129f5565b610d33565b34801561034457600080fd5b506102a1610353366004612615565b610dfa565b34801561036457600080fd5b506102a1610e91565b34801561037957600080fd5b506102a1610f69565b34801561038e57600080fd5b506103a261039d36600461286d565b610f9d565b6040516102489190612c1a565b3480156103bb57600080fd5b506102716103ca3660046129dc565b600090815260046020526040902054151590565b3480156103ea57600080fd5b506102a16103f93660046129dc565b6110c7565b34801561040a57600080fd5b506102a161041936600461293e565b611102565b34801561042a57600080fd5b50600354600160a01b900460ff16610271565b34801561044957600080fd5b506102cb61113f565b34801561045e57600080fd5b506102a161046d366004612724565b61114c565b34801561047e57600080fd5b506102a1611194565b34801561049357600080fd5b506102a16111c8565b3480156104a857600080fd5b5061023e6104b73660046129dc565b600b6020526000908152604090205481565b3480156104d557600080fd5b506003546040516001600160a01b039091168152602001610248565b3480156104fd57600080fd5b506102cb6111fa565b34801561051257600080fd5b506102a16105213660046129dc565b611207565b34801561053257600080fd5b5061023e60085481565b34801561054857600080fd5b506102a1610557366004612798565b611236565b34801561056857600080fd5b5061023e611241565b34801561057d57600080fd5b50600e546102719060ff1681565b34801561059757600080fd5b5061023e6105a63660046129dc565b60009081526004602052604090205490565b3480156105c457600080fd5b5061023e6105d33660046129dc565b600a6020526000908152604090205481565b3480156105f157600080fd5b506102a1610600366004612993565b611257565b34801561061157600080fd5b506102716106203660046125e2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561065a57600080fd5b506102a16106693660046129f5565b611294565b34801561067a57600080fd5b506102a16106893660046126bf565b6112ee565b34801561069a57600080fd5b506102a16106a93660046125c7565b611333565b3480156106ba57600080fd5b5061023e60095481565b3480156106d057600080fd5b506102a16106df3660046127ec565b6113cb565b60006001600160a01b0383166107555760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806107af57506001600160e01b031982166303a24d0760e21b145b8061077857506301ffc9a760e01b6001600160e01b0319831614610778565b6003546001600160a01b031633146107f85760405162461bcd60e51b815260040161074c90612e68565b6108018161140e565b50565b600354600160a01b900460ff161561082e5760405162461bcd60e51b815260040161074c90612d6c565b600e548590829060ff166108b45780600783604051602001610851929190612b55565b60405160208183030381529060405280519060200120146108b45760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f742077686974656c6973746564000000000000000000604482015260640161074c565b8686866108c060065490565b8211156108df5760405162461bcd60e51b815260040161074c90612d43565b6001600160a01b0383166109355760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74206d696e7420746f206e756c6c206163636f756e740000000000604482015260640161074c565b6000828152600c602090815260408083206001600160a01b0387168452909152812054906109638383612f09565b90506009548111156109c75760405162461bcd60e51b815260206004820152602760248201527f4d696e74696e6720776f756c64206578636565642075736572206d696e74696e60448201526619c81b1a5b5a5d60ca1b606482015260840161074c565b600084815260046020526040812054906109e18583612f09565b6000878152600b6020526040902054909150811115610a425760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604482015260640161074c565b6000868152600a6020526040812054610a5c908790612f35565b905080341015610ab85760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e742076616c756520746f20636f76657220707269636044820152606560f81b606482015260840161074c565b83600c600089815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550610b0e8f8f8f60405180602001604052806000815250611421565b8b6001600160a01b03168f6001600160a01b031614610b3f57610b318f8f61145d565b15610b3f57610b3f8c6114b1565b505050505050505050505050505050565b600f8054610b5d90612f97565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8990612f97565b8015610bd65780601f10610bab57610100808354040283529160200191610bd6565b820191906000526020600020905b815481529060010190602001808311610bb957829003601f168201915b505050505081565b60008181526004602052604081205460609110610c305760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081d1bdad95b881a5960821b604482015260640161074c565b6000610c3b83611637565b610c44846116cb565b600d604051602001610c5893929190612b18565b60408051601f198184030181529190529392505050565b6003546001600160a01b03163314610c995760405162461bcd60e51b815260040161074c90612e68565b60008111610ce25760405162461bcd60e51b815260206004820152601660248201527504d617820737570706c792063616e6e6f7420626520360541b604482015260640161074c565b610cf0600680546001019055565b81600a6000610cfe60065490565b81526020019081526020016000208190555080600b6000610d1e60065490565b81526020810191909152604001600020555050565b6003546001600160a01b03163314610d5d5760405162461bcd60e51b815260040161074c90612e68565b600654821115610d7f5760405162461bcd60e51b815260040161074c90612d43565b6000818152600460205260409020548111610dec5760405162461bcd60e51b815260206004820152602760248201527f4e657720737570706c79206973206c6f776572207468616e2063757272656e7460448201526620737570706c7960c81b606482015260840161074c565b80600b6000610d1e60065490565b6001600160a01b038516331480610e165750610e168533610620565b610e7d5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161074c565b610e8a85858585856117d1565b5050505050565b6003546001600160a01b03163314610ebb5760405162461bcd60e51b815260040161074c90612e68565b476000610ed06003546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f1a576040519150601f19603f3d011682016040523d82523d6000602084013e610f1f565b606091505b5050905080610f655760405162461bcd60e51b81526020600482015260126024820152714661696c656420746f20776974686472617760701b604482015260640161074c565b5050565b6003546001600160a01b03163314610f935760405162461bcd60e51b815260040161074c90612e68565b610f9b61197b565b565b606081518351146110025760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161074c565b6000835167ffffffffffffffff81111561101e5761101e613070565b604051908082528060200260200182016040528015611047578160200160208202803683370190505b50905060005b84518110156110bf5761109285828151811061106b5761106b61305a565b60200260200101518583815181106110855761108561305a565b60200260200101516106e4565b8282815181106110a4576110a461305a565b60209081029190910101526110b881612fff565b905061104d565b509392505050565b6003546001600160a01b031633146110f15760405162461bcd60e51b815260040161074c90612e68565b6110fc816064612f35565b60085550565b6003546001600160a01b0316331461112c5760405162461bcd60e51b815260040161074c90612e68565b600e805460ff1916911515919091179055565b600d8054610b5d90612f97565b6001600160a01b03831633148061116857506111688333610620565b6111845760405162461bcd60e51b815260040161074c90612cfa565b61118f838383611a18565b505050565b6003546001600160a01b031633146111be5760405162461bcd60e51b815260040161074c90612e68565b610f9b6000611ba6565b6003546001600160a01b031633146111f25760405162461bcd60e51b815260040161074c90612e68565b610f9b611bf8565b60108054610b5d90612f97565b6003546001600160a01b031633146112315760405162461bcd60e51b815260040161074c90612e68565b600955565b610f65338383611c5d565b600060646008546112529190612f21565b905090565b6003546001600160a01b031633146112815760405162461bcd60e51b815260040161074c90612e68565b8051610f65906007906020840190612406565b6003546001600160a01b031633146112be5760405162461bcd60e51b815260040161074c90612e68565b6006548211156112e05760405162461bcd60e51b815260040161074c90612d43565b80600a6000610d1e60065490565b6001600160a01b03851633148061130a575061130a8533610620565b6113265760405162461bcd60e51b815260040161074c90612cfa565b610e8a8585858585611d3e565b6003546001600160a01b0316331461135d5760405162461bcd60e51b815260040161074c90612e68565b6001600160a01b0381166113c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161074c565b61080181611ba6565b6001600160a01b0383163314806113e757506113e78333610620565b6114035760405162461bcd60e51b815260040161074c90612cfa565b61118f838383611e6a565b8051610f65906002906020840190612406565b600354600160a01b900460ff161561144b5760405162461bcd60e51b815260040161074c90612d6c565b61145784848484611f6b565b50505050565b60006001600160a01b03831661147557506001610778565b6000828152600c602090815260408083206001600160a01b0387168452909152902054806114a7576000915050610778565b6001915050610778565b600260055414156115045760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161074c565b60026005556001600160a01b03811661151c5761162f565b600060015b60065481116115525761153483826106e4565b61153e9083612f09565b91508061154a81612fff565b915050611521565b508061155e575061162f565b6000612710600854346115719190612f35565b61157b9190612f21565b90506000836001600160a01b03168260405160006040518083038185875af1925050503d80600081146115ca576040519150601f19603f3d011682016040523d82523d6000602084013e6115cf565b606091505b505090508061162b5760405162461bcd60e51b815260206004820152602260248201527f4661696c656420746f207472616e7366657220726566657272616c20616d6f756044820152611b9d60f21b606482015260840161074c565b5050505b506001600555565b60606002805461164690612f97565b80601f016020809104026020016040519081016040528092919081815260200182805461167290612f97565b80156116bf5780601f10611694576101008083540402835291602001916116bf565b820191906000526020600020905b8154815290600101906020018083116116a257829003601f168201915b50505050509050919050565b6060816116ef5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611719578061170381612fff565b91506117129050600a83612f21565b91506116f3565b60008167ffffffffffffffff81111561173457611734613070565b6040519080825280601f01601f19166020018201604052801561175e576020820181803683370190505b5090505b84156117c957611773600183612f54565b9150611780600a8661301a565b61178b906030612f09565b60f81b8183815181106117a0576117a061305a565b60200101906001600160f81b031916908160001a9053506117c2600a86612f21565b9450611762565b949350505050565b81518351146117f25760405162461bcd60e51b815260040161074c90612e9d565b6001600160a01b0384166118185760405162461bcd60e51b815260040161074c90612d96565b3361182781878787878761206c565b60005b845181101561190d5760008582815181106118475761184761305a565b6020026020010151905060008583815181106118655761186561305a565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156118b55760405162461bcd60e51b815260040161074c90612e1e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906118f2908490612f09565b925050819055505050508061190690612fff565b905061182a565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161195d929190612c2d565b60405180910390a461197381878787878761207a565b505050505050565b600354600160a01b900460ff166119cb5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161074c565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038316611a3e5760405162461bcd60e51b815260040161074c90612ddb565b8051825114611a5f5760405162461bcd60e51b815260040161074c90612e9d565b6000339050611a828185600086866040518060200160405280600081525061206c565b60005b8351811015611b47576000848281518110611aa257611aa261305a565b602002602001015190506000848381518110611ac057611ac061305a565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015611b105760405162461bcd60e51b815260040161074c90612cb6565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580611b3f81612fff565b915050611a85565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b98929190612c2d565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600354600160a01b900460ff1615611c225760405162461bcd60e51b815260040161074c90612d6c565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119fb3390565b816001600160a01b0316836001600160a01b03161415611cd15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161074c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416611d645760405162461bcd60e51b815260040161074c90612d96565b33611d83818787611d74886121e5565b611d7d886121e5565b8761206c565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611dc45760405162461bcd60e51b815260040161074c90612e1e565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611e01908490612f09565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611e61828888888888612230565b50505050505050565b6001600160a01b038316611e905760405162461bcd60e51b815260040161074c90612ddb565b33611ebf81856000611ea1876121e5565b611eaa876121e5565b6040518060200160405280600081525061206c565b6000838152602081815260408083206001600160a01b038816845290915290205482811015611f005760405162461bcd60e51b815260040161074c90612cb6565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b038416611fcb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161074c565b33611fdc81600087611d74886121e5565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061200c908490612f09565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610e8a81600087878787612230565b6119738686868686866122fa565b6001600160a01b0384163b156119735760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906120be9089908990889088908890600401612b82565b602060405180830381600087803b1580156120d857600080fd5b505af1925050508015612108575060408051601f3d908101601f1916820190925261210591810190612976565b60015b6121b557612114613086565b806308c379a0141561214e57506121296130a2565b806121345750612150565b8060405162461bcd60e51b815260040161074c9190612c5b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161074c565b6001600160e01b0319811663bc197c8160e01b14611e615760405162461bcd60e51b815260040161074c90612c6e565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061221f5761221f61305a565b602090810291909101015292915050565b6001600160a01b0384163b156119735760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906122749089908990889088908890600401612be0565b602060405180830381600087803b15801561228e57600080fd5b505af19250505080156122be575060408051601f3d908101601f191682019092526122bb91810190612976565b60015b6122ca57612114613086565b6001600160e01b0319811663f23a6e6160e01b14611e615760405162461bcd60e51b815260040161074c90612c6e565b6001600160a01b0385166123815760005b835181101561237f578281815181106123265761232661305a565b6020026020010151600460008684815181106123445761234461305a565b6020026020010151815260200190815260200160002060008282546123699190612f09565b90915550612378905081612fff565b905061230b565b505b6001600160a01b0384166119735760005b8351811015611e61578281815181106123ad576123ad61305a565b6020026020010151600460008684815181106123cb576123cb61305a565b6020026020010151815260200190815260200160002060008282546123f09190612f54565b909155506123ff905081612fff565b9050612392565b82805461241290612f97565b90600052602060002090601f016020900481019282612434576000855561247a565b82601f1061244d57805160ff191683800117855561247a565b8280016001018555821561247a579182015b8281111561247a57825182559160200191906001019061245f565b5061248692915061248a565b5090565b5b80821115612486576000815560010161248b565b600067ffffffffffffffff8311156124b9576124b9613070565b6040516124d0601f8501601f191660200182612fd2565b8091508381528484840111156124e557600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461251457600080fd5b919050565b600082601f83011261252a57600080fd5b8135602061253782612ee5565b6040516125448282612fd2565b8381528281019150858301600585901b8701840188101561256457600080fd5b60005b8581101561258357813584529284019290840190600101612567565b5090979650505050505050565b8035801515811461251457600080fd5b600082601f8301126125b157600080fd5b6125c08383356020850161249f565b9392505050565b6000602082840312156125d957600080fd5b6125c0826124fd565b600080604083850312156125f557600080fd5b6125fe836124fd565b915061260c602084016124fd565b90509250929050565b600080600080600060a0868803121561262d57600080fd5b612636866124fd565b9450612644602087016124fd565b9350604086013567ffffffffffffffff8082111561266157600080fd5b61266d89838a01612519565b9450606088013591508082111561268357600080fd5b61268f89838a01612519565b935060808801359150808211156126a557600080fd5b506126b2888289016125a0565b9150509295509295909350565b600080600080600060a086880312156126d757600080fd5b6126e0866124fd565b94506126ee602087016124fd565b93506040860135925060608601359150608086013567ffffffffffffffff81111561271857600080fd5b6126b2888289016125a0565b60008060006060848603121561273957600080fd5b612742846124fd565b9250602084013567ffffffffffffffff8082111561275f57600080fd5b61276b87838801612519565b9350604086013591508082111561278157600080fd5b5061278e86828701612519565b9150509250925092565b600080604083850312156127ab57600080fd5b6127b4836124fd565b915061260c60208401612590565b600080604083850312156127d557600080fd5b6127de836124fd565b946020939093013593505050565b60008060006060848603121561280157600080fd5b61280a846124fd565b95602085013595506040909401359392505050565b600080600080600060a0868803121561283757600080fd5b612840866124fd565b9450602086013593506040860135925061285c606087016124fd565b949793965091946080013592915050565b6000806040838503121561288057600080fd5b823567ffffffffffffffff8082111561289857600080fd5b818501915085601f8301126128ac57600080fd5b813560206128b982612ee5565b6040516128c68282612fd2565b8381528281019150858301600585901b870184018b10156128e657600080fd5b600096505b84871015612910576128fc816124fd565b8352600196909601959183019183016128eb565b509650508601359250508082111561292757600080fd5b5061293485828601612519565b9150509250929050565b60006020828403121561295057600080fd5b6125c082612590565b60006020828403121561296b57600080fd5b81356125c08161312c565b60006020828403121561298857600080fd5b81516125c08161312c565b6000602082840312156129a557600080fd5b813567ffffffffffffffff8111156129bc57600080fd5b8201601f810184136129cd57600080fd5b6117c98482356020840161249f565b6000602082840312156129ee57600080fd5b5035919050565b60008060408385031215612a0857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015612a4757815187529582019590820190600101612a2b565b509495945050505050565b60008151808452612a6a816020860160208601612f6b565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612a9857607f831692505b6020808410821415612aba57634e487b7160e01b600052602260045260246000fd5b818015612ace5760018114612adf57612b0c565b60ff19861689528489019650612b0c565b60008881526020902060005b86811015612b045781548b820152908501908301612aeb565b505084890196505b50505050505092915050565b60008451612b2a818460208901612f6b565b845190830190612b3e818360208901612f6b565b612b4a81830186612a7e565b979650505050505050565b6000612b618285612a7e565b60609390931b6bffffffffffffffffffffffff191683525050601401919050565b6001600160a01b0386811682528516602082015260a060408201819052600090612bae90830186612a17565b8281036060840152612bc08186612a17565b90508281036080840152612bd48185612a52565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612b4a90830184612a52565b6020815260006125c06020830184612a17565b604081526000612c406040830185612a17565b8281036020840152612c528185612a17565b95945050505050565b6020815260006125c06020830184612a52565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b6020808252600f908201526e125b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b600067ffffffffffffffff821115612eff57612eff613070565b5060051b60200190565b60008219821115612f1c57612f1c61302e565b500190565b600082612f3057612f30613044565b500490565b6000816000190483118215151615612f4f57612f4f61302e565b500290565b600082821015612f6657612f6661302e565b500390565b60005b83811015612f86578181015183820152602001612f6e565b838111156114575750506000910152565b600181811c90821680612fab57607f821691505b60208210811415612fcc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715612ff857612ff8613070565b6040525050565b60006000198214156130135761301361302e565b5060010190565b60008261302957613029613044565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561309f5760046000803e5060005160e01c5b90565b600060443d10156130b05790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156130e057505050505090565b82850191508151818111156130f85750505050505090565b843d87010160208285010111156131125750505050505090565b61312160208286010187612fd2565b509095945050505050565b6001600160e01b03198116811461080157600080fdfea26469706673582212207b79fbd94614c2a2c2ac7cd4455c902048dc0aac89ad5a315d5abb657d27b7ca64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d536c6174652047656e65736973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005534c41544500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000405a4a7a47434733636f7a7050616b5a6f5165733946745134366d617458746e4e546f656a3951714b454d546e51375069643342474d7648766942626548623741

Deployed Bytecode

0x6080604052600436106102195760003560e01c8063715018a611610123578063bc8893b4116100ab578063eb685c471161006f578063eb685c471461064e578063f242432a1461066e578063f2fde38b1461068e578063f516a2e6146106ae578063f5298aca146106c457600080fd5b8063bc8893b414610571578063bd85b0391461058b578063d4ddce8a146105b8578063db07ad28146105e5578063e985e9c51461060557600080fd5b806395d89b41116100f257806395d89b41146104f1578063963c354614610506578063a053ce1f14610526578063a22cb4651461053c578063abd972631461055c57600080fd5b8063715018a6146104725780638456cb5914610487578063869f75941461049c5780638da5cb5b146104c957600080fd5b80633ccfd60b116101a657806354e81f411161017557806354e81f41146103de5780635aca1bb6146103fe5780635c975abb1461041e5780635cfbd28b1461043d5780636b20c4541461045257600080fd5b80633ccfd60b146103585780633f4ba83a1461036d5780634e1273f4146103825780634f558e79146103af57600080fd5b806306fdde03116101ed57806306fdde03146102b65780630e89341c146102d857806317b9ebec146102f8578063278d17ad146103185780632eb2c2d61461033857600080fd5b8062fdd58e1461021e57806301ffc9a71461025157806302fe53051461028157806304c87d7b146102a3575b600080fd5b34801561022a57600080fd5b5061023e6102393660046127c2565b6106e4565b6040519081526020015b60405180910390f35b34801561025d57600080fd5b5061027161026c366004612959565b61077e565b6040519015158152602001610248565b34801561028d57600080fd5b506102a161029c366004612993565b6107ce565b005b6102a16102b136600461281f565b610804565b3480156102c257600080fd5b506102cb610b50565b6040516102489190612c5b565b3480156102e457600080fd5b506102cb6102f33660046129dc565b610bde565b34801561030457600080fd5b506102a16103133660046129f5565b610c6f565b34801561032457600080fd5b506102a16103333660046129f5565b610d33565b34801561034457600080fd5b506102a1610353366004612615565b610dfa565b34801561036457600080fd5b506102a1610e91565b34801561037957600080fd5b506102a1610f69565b34801561038e57600080fd5b506103a261039d36600461286d565b610f9d565b6040516102489190612c1a565b3480156103bb57600080fd5b506102716103ca3660046129dc565b600090815260046020526040902054151590565b3480156103ea57600080fd5b506102a16103f93660046129dc565b6110c7565b34801561040a57600080fd5b506102a161041936600461293e565b611102565b34801561042a57600080fd5b50600354600160a01b900460ff16610271565b34801561044957600080fd5b506102cb61113f565b34801561045e57600080fd5b506102a161046d366004612724565b61114c565b34801561047e57600080fd5b506102a1611194565b34801561049357600080fd5b506102a16111c8565b3480156104a857600080fd5b5061023e6104b73660046129dc565b600b6020526000908152604090205481565b3480156104d557600080fd5b506003546040516001600160a01b039091168152602001610248565b3480156104fd57600080fd5b506102cb6111fa565b34801561051257600080fd5b506102a16105213660046129dc565b611207565b34801561053257600080fd5b5061023e60085481565b34801561054857600080fd5b506102a1610557366004612798565b611236565b34801561056857600080fd5b5061023e611241565b34801561057d57600080fd5b50600e546102719060ff1681565b34801561059757600080fd5b5061023e6105a63660046129dc565b60009081526004602052604090205490565b3480156105c457600080fd5b5061023e6105d33660046129dc565b600a6020526000908152604090205481565b3480156105f157600080fd5b506102a1610600366004612993565b611257565b34801561061157600080fd5b506102716106203660046125e2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561065a57600080fd5b506102a16106693660046129f5565b611294565b34801561067a57600080fd5b506102a16106893660046126bf565b6112ee565b34801561069a57600080fd5b506102a16106a93660046125c7565b611333565b3480156106ba57600080fd5b5061023e60095481565b3480156106d057600080fd5b506102a16106df3660046127ec565b6113cb565b60006001600160a01b0383166107555760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b14806107af57506001600160e01b031982166303a24d0760e21b145b8061077857506301ffc9a760e01b6001600160e01b0319831614610778565b6003546001600160a01b031633146107f85760405162461bcd60e51b815260040161074c90612e68565b6108018161140e565b50565b600354600160a01b900460ff161561082e5760405162461bcd60e51b815260040161074c90612d6c565b600e548590829060ff166108b45780600783604051602001610851929190612b55565b60405160208183030381529060405280519060200120146108b45760405162461bcd60e51b815260206004820152601760248201527f41646472657373206e6f742077686974656c6973746564000000000000000000604482015260640161074c565b8686866108c060065490565b8211156108df5760405162461bcd60e51b815260040161074c90612d43565b6001600160a01b0383166109355760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74206d696e7420746f206e756c6c206163636f756e740000000000604482015260640161074c565b6000828152600c602090815260408083206001600160a01b0387168452909152812054906109638383612f09565b90506009548111156109c75760405162461bcd60e51b815260206004820152602760248201527f4d696e74696e6720776f756c64206578636565642075736572206d696e74696e60448201526619c81b1a5b5a5d60ca1b606482015260840161074c565b600084815260046020526040812054906109e18583612f09565b6000878152600b6020526040902054909150811115610a425760405162461bcd60e51b815260206004820152601f60248201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604482015260640161074c565b6000868152600a6020526040812054610a5c908790612f35565b905080341015610ab85760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e742076616c756520746f20636f76657220707269636044820152606560f81b606482015260840161074c565b83600c600089815260200190815260200160002060008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550610b0e8f8f8f60405180602001604052806000815250611421565b8b6001600160a01b03168f6001600160a01b031614610b3f57610b318f8f61145d565b15610b3f57610b3f8c6114b1565b505050505050505050505050505050565b600f8054610b5d90612f97565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8990612f97565b8015610bd65780601f10610bab57610100808354040283529160200191610bd6565b820191906000526020600020905b815481529060010190602001808311610bb957829003601f168201915b505050505081565b60008181526004602052604081205460609110610c305760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081d1bdad95b881a5960821b604482015260640161074c565b6000610c3b83611637565b610c44846116cb565b600d604051602001610c5893929190612b18565b60408051601f198184030181529190529392505050565b6003546001600160a01b03163314610c995760405162461bcd60e51b815260040161074c90612e68565b60008111610ce25760405162461bcd60e51b815260206004820152601660248201527504d617820737570706c792063616e6e6f7420626520360541b604482015260640161074c565b610cf0600680546001019055565b81600a6000610cfe60065490565b81526020019081526020016000208190555080600b6000610d1e60065490565b81526020810191909152604001600020555050565b6003546001600160a01b03163314610d5d5760405162461bcd60e51b815260040161074c90612e68565b600654821115610d7f5760405162461bcd60e51b815260040161074c90612d43565b6000818152600460205260409020548111610dec5760405162461bcd60e51b815260206004820152602760248201527f4e657720737570706c79206973206c6f776572207468616e2063757272656e7460448201526620737570706c7960c81b606482015260840161074c565b80600b6000610d1e60065490565b6001600160a01b038516331480610e165750610e168533610620565b610e7d5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161074c565b610e8a85858585856117d1565b5050505050565b6003546001600160a01b03163314610ebb5760405162461bcd60e51b815260040161074c90612e68565b476000610ed06003546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610f1a576040519150601f19603f3d011682016040523d82523d6000602084013e610f1f565b606091505b5050905080610f655760405162461bcd60e51b81526020600482015260126024820152714661696c656420746f20776974686472617760701b604482015260640161074c565b5050565b6003546001600160a01b03163314610f935760405162461bcd60e51b815260040161074c90612e68565b610f9b61197b565b565b606081518351146110025760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161074c565b6000835167ffffffffffffffff81111561101e5761101e613070565b604051908082528060200260200182016040528015611047578160200160208202803683370190505b50905060005b84518110156110bf5761109285828151811061106b5761106b61305a565b60200260200101518583815181106110855761108561305a565b60200260200101516106e4565b8282815181106110a4576110a461305a565b60209081029190910101526110b881612fff565b905061104d565b509392505050565b6003546001600160a01b031633146110f15760405162461bcd60e51b815260040161074c90612e68565b6110fc816064612f35565b60085550565b6003546001600160a01b0316331461112c5760405162461bcd60e51b815260040161074c90612e68565b600e805460ff1916911515919091179055565b600d8054610b5d90612f97565b6001600160a01b03831633148061116857506111688333610620565b6111845760405162461bcd60e51b815260040161074c90612cfa565b61118f838383611a18565b505050565b6003546001600160a01b031633146111be5760405162461bcd60e51b815260040161074c90612e68565b610f9b6000611ba6565b6003546001600160a01b031633146111f25760405162461bcd60e51b815260040161074c90612e68565b610f9b611bf8565b60108054610b5d90612f97565b6003546001600160a01b031633146112315760405162461bcd60e51b815260040161074c90612e68565b600955565b610f65338383611c5d565b600060646008546112529190612f21565b905090565b6003546001600160a01b031633146112815760405162461bcd60e51b815260040161074c90612e68565b8051610f65906007906020840190612406565b6003546001600160a01b031633146112be5760405162461bcd60e51b815260040161074c90612e68565b6006548211156112e05760405162461bcd60e51b815260040161074c90612d43565b80600a6000610d1e60065490565b6001600160a01b03851633148061130a575061130a8533610620565b6113265760405162461bcd60e51b815260040161074c90612cfa565b610e8a8585858585611d3e565b6003546001600160a01b0316331461135d5760405162461bcd60e51b815260040161074c90612e68565b6001600160a01b0381166113c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161074c565b61080181611ba6565b6001600160a01b0383163314806113e757506113e78333610620565b6114035760405162461bcd60e51b815260040161074c90612cfa565b61118f838383611e6a565b8051610f65906002906020840190612406565b600354600160a01b900460ff161561144b5760405162461bcd60e51b815260040161074c90612d6c565b61145784848484611f6b565b50505050565b60006001600160a01b03831661147557506001610778565b6000828152600c602090815260408083206001600160a01b0387168452909152902054806114a7576000915050610778565b6001915050610778565b600260055414156115045760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161074c565b60026005556001600160a01b03811661151c5761162f565b600060015b60065481116115525761153483826106e4565b61153e9083612f09565b91508061154a81612fff565b915050611521565b508061155e575061162f565b6000612710600854346115719190612f35565b61157b9190612f21565b90506000836001600160a01b03168260405160006040518083038185875af1925050503d80600081146115ca576040519150601f19603f3d011682016040523d82523d6000602084013e6115cf565b606091505b505090508061162b5760405162461bcd60e51b815260206004820152602260248201527f4661696c656420746f207472616e7366657220726566657272616c20616d6f756044820152611b9d60f21b606482015260840161074c565b5050505b506001600555565b60606002805461164690612f97565b80601f016020809104026020016040519081016040528092919081815260200182805461167290612f97565b80156116bf5780601f10611694576101008083540402835291602001916116bf565b820191906000526020600020905b8154815290600101906020018083116116a257829003601f168201915b50505050509050919050565b6060816116ef5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611719578061170381612fff565b91506117129050600a83612f21565b91506116f3565b60008167ffffffffffffffff81111561173457611734613070565b6040519080825280601f01601f19166020018201604052801561175e576020820181803683370190505b5090505b84156117c957611773600183612f54565b9150611780600a8661301a565b61178b906030612f09565b60f81b8183815181106117a0576117a061305a565b60200101906001600160f81b031916908160001a9053506117c2600a86612f21565b9450611762565b949350505050565b81518351146117f25760405162461bcd60e51b815260040161074c90612e9d565b6001600160a01b0384166118185760405162461bcd60e51b815260040161074c90612d96565b3361182781878787878761206c565b60005b845181101561190d5760008582815181106118475761184761305a565b6020026020010151905060008583815181106118655761186561305a565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156118b55760405162461bcd60e51b815260040161074c90612e1e565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906118f2908490612f09565b925050819055505050508061190690612fff565b905061182a565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161195d929190612c2d565b60405180910390a461197381878787878761207a565b505050505050565b600354600160a01b900460ff166119cb5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161074c565b6003805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038316611a3e5760405162461bcd60e51b815260040161074c90612ddb565b8051825114611a5f5760405162461bcd60e51b815260040161074c90612e9d565b6000339050611a828185600086866040518060200160405280600081525061206c565b60005b8351811015611b47576000848281518110611aa257611aa261305a565b602002602001015190506000848381518110611ac057611ac061305a565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015611b105760405162461bcd60e51b815260040161074c90612cb6565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580611b3f81612fff565b915050611a85565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611b98929190612c2d565b60405180910390a450505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600354600160a01b900460ff1615611c225760405162461bcd60e51b815260040161074c90612d6c565b6003805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586119fb3390565b816001600160a01b0316836001600160a01b03161415611cd15760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161074c565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416611d645760405162461bcd60e51b815260040161074c90612d96565b33611d83818787611d74886121e5565b611d7d886121e5565b8761206c565b6000848152602081815260408083206001600160a01b038a16845290915290205483811015611dc45760405162461bcd60e51b815260040161074c90612e1e565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611e01908490612f09565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611e61828888888888612230565b50505050505050565b6001600160a01b038316611e905760405162461bcd60e51b815260040161074c90612ddb565b33611ebf81856000611ea1876121e5565b611eaa876121e5565b6040518060200160405280600081525061206c565b6000838152602081815260408083206001600160a01b038816845290915290205482811015611f005760405162461bcd60e51b815260040161074c90612cb6565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b038416611fcb5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161074c565b33611fdc81600087611d74886121e5565b6000848152602081815260408083206001600160a01b03891684529091528120805485929061200c908490612f09565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610e8a81600087878787612230565b6119738686868686866122fa565b6001600160a01b0384163b156119735760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906120be9089908990889088908890600401612b82565b602060405180830381600087803b1580156120d857600080fd5b505af1925050508015612108575060408051601f3d908101601f1916820190925261210591810190612976565b60015b6121b557612114613086565b806308c379a0141561214e57506121296130a2565b806121345750612150565b8060405162461bcd60e51b815260040161074c9190612c5b565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161074c565b6001600160e01b0319811663bc197c8160e01b14611e615760405162461bcd60e51b815260040161074c90612c6e565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061221f5761221f61305a565b602090810291909101015292915050565b6001600160a01b0384163b156119735760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906122749089908990889088908890600401612be0565b602060405180830381600087803b15801561228e57600080fd5b505af19250505080156122be575060408051601f3d908101601f191682019092526122bb91810190612976565b60015b6122ca57612114613086565b6001600160e01b0319811663f23a6e6160e01b14611e615760405162461bcd60e51b815260040161074c90612c6e565b6001600160a01b0385166123815760005b835181101561237f578281815181106123265761232661305a565b6020026020010151600460008684815181106123445761234461305a565b6020026020010151815260200190815260200160002060008282546123699190612f09565b90915550612378905081612fff565b905061230b565b505b6001600160a01b0384166119735760005b8351811015611e61578281815181106123ad576123ad61305a565b6020026020010151600460008684815181106123cb576123cb61305a565b6020026020010151815260200190815260200160002060008282546123f09190612f54565b909155506123ff905081612fff565b9050612392565b82805461241290612f97565b90600052602060002090601f016020900481019282612434576000855561247a565b82601f1061244d57805160ff191683800117855561247a565b8280016001018555821561247a579182015b8281111561247a57825182559160200191906001019061245f565b5061248692915061248a565b5090565b5b80821115612486576000815560010161248b565b600067ffffffffffffffff8311156124b9576124b9613070565b6040516124d0601f8501601f191660200182612fd2565b8091508381528484840111156124e557600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461251457600080fd5b919050565b600082601f83011261252a57600080fd5b8135602061253782612ee5565b6040516125448282612fd2565b8381528281019150858301600585901b8701840188101561256457600080fd5b60005b8581101561258357813584529284019290840190600101612567565b5090979650505050505050565b8035801515811461251457600080fd5b600082601f8301126125b157600080fd5b6125c08383356020850161249f565b9392505050565b6000602082840312156125d957600080fd5b6125c0826124fd565b600080604083850312156125f557600080fd5b6125fe836124fd565b915061260c602084016124fd565b90509250929050565b600080600080600060a0868803121561262d57600080fd5b612636866124fd565b9450612644602087016124fd565b9350604086013567ffffffffffffffff8082111561266157600080fd5b61266d89838a01612519565b9450606088013591508082111561268357600080fd5b61268f89838a01612519565b935060808801359150808211156126a557600080fd5b506126b2888289016125a0565b9150509295509295909350565b600080600080600060a086880312156126d757600080fd5b6126e0866124fd565b94506126ee602087016124fd565b93506040860135925060608601359150608086013567ffffffffffffffff81111561271857600080fd5b6126b2888289016125a0565b60008060006060848603121561273957600080fd5b612742846124fd565b9250602084013567ffffffffffffffff8082111561275f57600080fd5b61276b87838801612519565b9350604086013591508082111561278157600080fd5b5061278e86828701612519565b9150509250925092565b600080604083850312156127ab57600080fd5b6127b4836124fd565b915061260c60208401612590565b600080604083850312156127d557600080fd5b6127de836124fd565b946020939093013593505050565b60008060006060848603121561280157600080fd5b61280a846124fd565b95602085013595506040909401359392505050565b600080600080600060a0868803121561283757600080fd5b612840866124fd565b9450602086013593506040860135925061285c606087016124fd565b949793965091946080013592915050565b6000806040838503121561288057600080fd5b823567ffffffffffffffff8082111561289857600080fd5b818501915085601f8301126128ac57600080fd5b813560206128b982612ee5565b6040516128c68282612fd2565b8381528281019150858301600585901b870184018b10156128e657600080fd5b600096505b84871015612910576128fc816124fd565b8352600196909601959183019183016128eb565b509650508601359250508082111561292757600080fd5b5061293485828601612519565b9150509250929050565b60006020828403121561295057600080fd5b6125c082612590565b60006020828403121561296b57600080fd5b81356125c08161312c565b60006020828403121561298857600080fd5b81516125c08161312c565b6000602082840312156129a557600080fd5b813567ffffffffffffffff8111156129bc57600080fd5b8201601f810184136129cd57600080fd5b6117c98482356020840161249f565b6000602082840312156129ee57600080fd5b5035919050565b60008060408385031215612a0857600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015612a4757815187529582019590820190600101612a2b565b509495945050505050565b60008151808452612a6a816020860160208601612f6b565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680612a9857607f831692505b6020808410821415612aba57634e487b7160e01b600052602260045260246000fd5b818015612ace5760018114612adf57612b0c565b60ff19861689528489019650612b0c565b60008881526020902060005b86811015612b045781548b820152908501908301612aeb565b505084890196505b50505050505092915050565b60008451612b2a818460208901612f6b565b845190830190612b3e818360208901612f6b565b612b4a81830186612a7e565b979650505050505050565b6000612b618285612a7e565b60609390931b6bffffffffffffffffffffffff191683525050601401919050565b6001600160a01b0386811682528516602082015260a060408201819052600090612bae90830186612a17565b8281036060840152612bc08186612a17565b90508281036080840152612bd48185612a52565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090612b4a90830184612a52565b6020815260006125c06020830184612a17565b604081526000612c406040830185612a17565b8281036020840152612c528185612a17565b95945050505050565b6020815260006125c06020830184612a52565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526029908201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260408201526808185c1c1c9bdd995960ba1b606082015260800190565b6020808252600f908201526e125b9d985b1a59081d1bdad95b9259608a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b600067ffffffffffffffff821115612eff57612eff613070565b5060051b60200190565b60008219821115612f1c57612f1c61302e565b500190565b600082612f3057612f30613044565b500490565b6000816000190483118215151615612f4f57612f4f61302e565b500290565b600082821015612f6657612f6661302e565b500390565b60005b83811015612f86578181015183820152602001612f6e565b838111156114575750506000910152565b600181811c90821680612fab57607f821691505b60208210811415612fcc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715612ff857612ff8613070565b6040525050565b60006000198214156130135761301361302e565b5060010190565b60008261302957613029613044565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561309f5760046000803e5060005160e01c5b90565b600060443d10156130b05790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156130e057505050505090565b82850191508151818111156130f85750505050505090565b843d87010160208285010111156131125750505050505090565b61312160208286010187612fd2565b509095945050505050565b6001600160e01b03198116811461080157600080fdfea26469706673582212207b79fbd94614c2a2c2ac7cd4455c902048dc0aac89ad5a315d5abb657d27b7ca64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000d536c6174652047656e65736973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005534c41544500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000405a4a7a47434733636f7a7050616b5a6f5165733946745134366d617458746e4e546f656a3951714b454d546e51375069643342474d7648766942626548623741

-----Decoded View---------------
Arg [0] : _name (string): Slate Genesis
Arg [1] : _symbol (string): SLATE
Arg [2] : s (string): ZJzGCG3cozpPakZoQes9FtQ46matXtnNToej9QqKEMTnQ7Pid3BGMvHviBbeHb7A

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [4] : 536c6174652047656e6573697300000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [6] : 534c415445000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [8] : 5a4a7a47434733636f7a7050616b5a6f5165733946745134366d617458746e4e
Arg [9] : 546f656a3951714b454d546e51375069643342474d7648766942626548623741


Deployed Bytecode Sourcemap

54422:5964:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34859:231;;;;;;;;;;-1:-1:-1;34859:231:0;;;;;:::i;:::-;;:::i;:::-;;;25522:25:1;;;25510:2;25495:18;34859:231:0;;;;;;;;33882:310;;;;;;;;;;-1:-1:-1;33882:310:0;;;;;:::i;:::-;;:::i;:::-;;;13899:14:1;;13892:22;13874:41;;13862:2;13847:18;33882:310:0;13734:187:1;57411:89:0;;;;;;;;;;-1:-1:-1;57411:89:0;;;;;:::i;:::-;;:::i;:::-;;58015:431;;;;;;:::i;:::-;;:::i;55018:18::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;59609:267::-;;;;;;;;;;-1:-1:-1;59609:267:0;;;;;:::i;:::-;;:::i;56538:302::-;;;;;;;;;;-1:-1:-1;56538:302:0;;;;;:::i;:::-;;:::i;57077:326::-;;;;;;;;;;-1:-1:-1;57077:326:0;;;;;:::i;:::-;;:::i;36798:442::-;;;;;;;;;;-1:-1:-1;36798:442:0;;;;;:::i;:::-;;:::i;59403:198::-;;;;;;;;;;;;;:::i;57575:65::-;;;;;;;;;;;;;:::i;35256:524::-;;;;;;;;;;-1:-1:-1;35256:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;49298:122::-;;;;;;;;;;-1:-1:-1;49298:122:0;;;;;:::i;:::-;49355:4;49176:16;;;:12;:16;;;;;;-1:-1:-1;;;49298:122:0;57886:121;;;;;;;;;;-1:-1:-1;57886:121:0;;;;;:::i;:::-;;:::i;57648:117::-;;;;;;;;;;-1:-1:-1;57648:117:0;;;;;:::i;:::-;;:::i;11189:86::-;;;;;;;;;;-1:-1:-1;11260:7:0;;-1:-1:-1;;;11260:7:0;;;;11189:86;;54932:36;;;;;;;;;;;;;:::i;50917:353::-;;;;;;;;;;-1:-1:-1;50917:353:0;;;;;:::i;:::-;;:::i;14088:103::-;;;;;;;;;;;;;:::i;57508:61::-;;;;;;;;;;;;;:::i;54813:44::-;;;;;;;;;;-1:-1:-1;54813:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;13437:87;;;;;;;;;;-1:-1:-1;13510:6:0;;13437:87;;-1:-1:-1;;;;;13510:6:0;;;11540:51:1;;11528:2;11513:18;13437:87:0;11394:203:1;55043:20:0;;;;;;;;;;;;;:::i;56416:114::-;;;;;;;;;;-1:-1:-1;56416:114:0;;;;;:::i;:::-;;:::i;54676:34::-;;;;;;;;;;;;;;;;35853:155;;;;;;;;;;-1:-1:-1;35853:155:0;;;;;:::i;:::-;;:::i;57773:105::-;;;;;;;;;;;;;:::i;54975:36::-;;;;;;;;;;-1:-1:-1;54975:36:0;;;;;;;;49087:113;;;;;;;;;;-1:-1:-1;49087:113:0;;;;;:::i;:::-;49149:7;49176:16;;;:12;:16;;;;;;;49087:113;54761:45;;;;;;;;;;-1:-1:-1;54761:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;56329:79;;;;;;;;;;-1:-1:-1;56329:79:0;;;;;:::i;:::-;;:::i;36080:168::-;;;;;;;;;;-1:-1:-1;36080:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;36203:27:0;;;36179:4;36203:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;36080:168;56848:221;;;;;;;;;;-1:-1:-1;56848:221:0;;;;;:::i;:::-;;:::i;36320:401::-;;;;;;;;;;-1:-1:-1;36320:401:0;;;;;:::i;:::-;;:::i;14346:201::-;;;;;;;;;;-1:-1:-1;14346:201:0;;;;;:::i;:::-;;:::i;54717:37::-;;;;;;;;;;;;;;;;50588:321;;;;;;;;;;-1:-1:-1;50588:321:0;;;;;:::i;:::-;;:::i;34859:231::-;34945:7;-1:-1:-1;;;;;34973:21:0;;34965:77;;;;-1:-1:-1;;;34965:77:0;;15878:2:1;34965:77:0;;;15860:21:1;15917:2;15897:18;;;15890:30;15956:34;15936:18;;;15929:62;-1:-1:-1;;;16007:18:1;;;16000:41;16058:19;;34965:77:0;;;;;;;;;-1:-1:-1;35060:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;35060:22:0;;;;;;;;;;34859:231;;;;;:::o;33882:310::-;33984:4;-1:-1:-1;;;;;;34021:41:0;;-1:-1:-1;;;34021:41:0;;:110;;-1:-1:-1;;;;;;;34079:52:0;;-1:-1:-1;;;34079:52:0;34021:110;:163;;;-1:-1:-1;;;;;;;;;;25299:40:0;;;34148:36;25190:157;57411:89;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;57477:15:::1;57485:6;57477:7;:15::i;:::-;57411:89:::0;:::o;58015:431::-;11260:7;;-1:-1:-1;;;11260:7:0;;;;11514:9;11506:38;;;;-1:-1:-1;;;11506:38:0;;;;;;;:::i;:::-;55310:16:::1;::::0;58179:7;;58188:4;;55310:16:::1;;55306:135;;55397:4;55378;55384:7;55361:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55351:42;;;;;;:50;55343:86;;;::::0;-1:-1:-1;;;55343:86:0;;21614:2:1;55343:86:0::1;::::0;::::1;21596:21:1::0;21653:2;21633:18;;;21626:30;21692:25;21672:18;;;21665:53;21735:18;;55343:86:0::1;21412:347:1::0;55343:86:0::1;58208:7:::2;58217:2;58221:6;55571:23;:13;3780:14:::0;;3688:114;55571:23:::2;55560:7;:34;;55552:62;;;;-1:-1:-1::0;;;55552:62:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;55633:21:0;::::2;55625:61;;;::::0;-1:-1:-1;;;55625:61:0;;20082:2:1;55625:61:0::2;::::0;::::2;20064:21:1::0;20121:2;20101:18;;;20094:30;20160:29;20140:18;;;20133:57;20207:18;;55625:61:0::2;19880:351:1::0;55625:61:0::2;55699:21;55723:18:::0;;;:9:::2;:18;::::0;;;;;;;-1:-1:-1;;;;;55723:27:0;::::2;::::0;;;;;;;;;55786:22:::2;55802:6:::0;55723:27;55786:22:::2;:::i;:::-;55761:47;;55847:17;;55829:14;:35;;55821:87;;;::::0;-1:-1:-1;;;55821:87:0;;22777:2:1;55821:87:0::2;::::0;::::2;22759:21:1::0;22816:2;22796:18;;;22789:30;22855:34;22835:18;;;22828:62;-1:-1:-1;;;22906:18:1;;;22899:37;22953:19;;55821:87:0::2;22575:403:1::0;55821:87:0::2;55919:22;49176:16:::0;;;:12;:16;;;;;;;55997:23:::2;56014:6:::0;49176:16;55997:23:::2;:::i;:::-;56056:18;::::0;;;:9:::2;:18;::::0;;;;;55975:45;;-1:-1:-1;56041:33:0;::::2;;56033:77;;;::::0;-1:-1:-1;;;56033:77:0;;19722:2:1;56033:77:0::2;::::0;::::2;19704:21:1::0;19761:2;19741:18;;;19734:30;19800:33;19780:18;;;19773:61;19851:18;;56033:77:0::2;19520:355:1::0;56033:77:0::2;56121:14;56138:19:::0;;;:10:::2;:19;::::0;;;;;:28:::2;::::0;56160:6;;56138:28:::2;:::i;:::-;56121:45;;56198:6;56185:9;:19;;56177:65;;;::::0;-1:-1:-1;;;56177:65:0;;24414:2:1;56177:65:0::2;::::0;::::2;24396:21:1::0;24453:2;24433:18;;;24426:30;24492:34;24472:18;;;24465:62;-1:-1:-1;;;24543:18:1;;;24536:31;24584:19;;56177:65:0::2;24212:397:1::0;56177:65:0::2;56283:14;56253:9;:18;56263:7;56253:18;;;;;;;;;;;:27;56272:7;-1:-1:-1::0;;;;;56253:27:0::2;-1:-1:-1::0;;;;;56253:27:0::2;;;;;;;;;;;;:44;;;;58245:37:::3;58251:7;58260:2;58264:6;58272:9;;;;;;;;;;;::::0;58245:5:::3;:37::i;:::-;58305:8;-1:-1:-1::0;;;;;58296:17:0::3;:7;-1:-1:-1::0;;;;;58296:17:0::3;;58293:146;;58333:32;58353:7;58362:2;58333:19;:32::i;:::-;58330:98;;;58386:26;58403:8;58386:16;:26::i;:::-;55541:776:::2;;;;;55451:1;;;11555::::1;;58015:431:::0;;;;;:::o;55018:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59609:267::-;59724:1;49176:16;;;:12;:16;;;;;;59672:13;;-1:-1:-1;59698:48:0;;;;-1:-1:-1;;;59698:48:0;;18207:2:1;59698:48:0;;;18189:21:1;18246:2;18226:18;;;18219:30;-1:-1:-1;;;18265:18:1;;;18258:46;18321:18;;59698:48:0;18005:340:1;59698:48:0;59757:18;59802:13;59812:2;59802:9;:13::i;:::-;59817;:2;:11;:13::i;:::-;59832:12;59785:60;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;59785:60:0;;;;;;;;;;59609:267;-1:-1:-1;;;59609:267:0:o;56538:302::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;56646:1:::1;56633:10;:14;56625:49;;;::::0;-1:-1:-1;;;56625:49:0;;16697:2:1;56625:49:0::1;::::0;::::1;16679:21:1::0;16736:2;16716:18;;;16709:30;-1:-1:-1;;;16755:18:1;;;16748:52;16817:18;;56625:49:0::1;16495:346:1::0;56625:49:0::1;56687:25;:13;3899:19:::0;;3917:1;3899:19;;;3810:127;56687:25:::1;56761:11;56723:10;:35;56734:23;:13;3780:14:::0;;3688:114;56734:23:::1;56723:35;;;;;;;;;;;:49;;;;56820:10;56783:9;:34;56793:23;:13;3780:14:::0;;3688:114;56793:23:::1;56783:34:::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;56783:34:0;:47;-1:-1:-1;;56538:302:0:o;57077:326::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;57189:13:::1;3780:14:::0;57177:8:::1;:35;;57169:63;;;;-1:-1:-1::0;;;57169:63:0::1;;;;;;;:::i;:::-;49149:7:::0;49176:16;;;:12;:16;;;;;;57251:12:::1;:40;57243:92;;;::::0;-1:-1:-1;;;57243:92:0;;21966:2:1;57243:92:0::1;::::0;::::1;21948:21:1::0;22005:2;21985:18;;;21978:30;22044:34;22024:18;;;22017:62;-1:-1:-1;;;22095:18:1;;;22088:37;22142:19;;57243:92:0::1;21764:403:1::0;57243:92:0::1;57383:12;57346:9;:34;57356:23;:13;3780:14:::0;;3688:114;36798:442;-1:-1:-1;;;;;37031:20:0;;9923:10;37031:20;;:60;;-1:-1:-1;37055:36:0;37072:4;9923:10;36080:168;:::i;37055:36::-;37009:160;;;;-1:-1:-1;;;37009:160:0;;19303:2:1;37009:160:0;;;19285:21:1;19342:2;19322:18;;;19315:30;19381:34;19361:18;;;19354:62;-1:-1:-1;;;19432:18:1;;;19425:48;19490:19;;37009:160:0;19101:414:1;37009:160:0;37180:52;37203:4;37209:2;37213:3;37218:7;37227:4;37180:22;:52::i;:::-;36798:442;;;;;:::o;59403:198::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;59468:21:::1;59451:14;59516:7;13510:6:::0;;-1:-1:-1;;;;;13510:6:0;;13437:87;59516:7:::1;-1:-1:-1::0;;;;;59516:12:0::1;59536:6;59516:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59500:47;;;59566:4;59558:35;;;::::0;-1:-1:-1;;;59558:35:0;;15531:2:1;59558:35:0::1;::::0;::::1;15513:21:1::0;15570:2;15550:18;;;15543:30;-1:-1:-1;;;15589:18:1;;;15582:48;15647:18;;59558:35:0::1;15329:342:1::0;59558:35:0::1;59440:161;;59403:198::o:0;57575:65::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;57622:10:::1;:8;:10::i;:::-;57575:65::o:0;35256:524::-;35412:16;35473:3;:10;35454:8;:15;:29;35446:83;;;;-1:-1:-1;;;35446:83:0;;23595:2:1;35446:83:0;;;23577:21:1;23634:2;23614:18;;;23607:30;23673:34;23653:18;;;23646:62;-1:-1:-1;;;23724:18:1;;;23717:39;23773:19;;35446:83:0;23393:405:1;35446:83:0;35542:30;35589:8;:15;35575:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35575:30:0;;35542:63;;35623:9;35618:122;35642:8;:15;35638:1;:19;35618:122;;;35698:30;35708:8;35717:1;35708:11;;;;;;;;:::i;:::-;;;;;;;35721:3;35725:1;35721:6;;;;;;;;:::i;:::-;;;;;;;35698:9;:30::i;:::-;35679:13;35693:1;35679:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;35659:3;;;:::i;:::-;;;35618:122;;;-1:-1:-1;35759:13:0;35256:524;-1:-1:-1;;;35256:524:0:o;57886:121::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;57983:16:::1;:10:::0;57996:3:::1;57983:16;:::i;:::-;57968:12;:31:::0;-1:-1:-1;57886:121:0:o;57648:117::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;57722:16:::1;:35:::0;;-1:-1:-1;;57722:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;57648:117::o;54932:36::-;;;;;;;:::i;50917:353::-;-1:-1:-1;;;;;51082:23:0;;9923:10;51082:23;;:66;;-1:-1:-1;51109:39:0;51126:7;9923:10;36080:168;:::i;51109:39::-;51060:157;;;;-1:-1:-1;;;51060:157:0;;;;;;;:::i;:::-;51230:32;51241:7;51250:3;51255:6;51230:10;:32::i;:::-;50917:353;;;:::o;14088:103::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;14153:30:::1;14180:1;14153:18;:30::i;57508:61::-:0;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;57553:8:::1;:6;:8::i;55043:20::-:0;;;;;;;:::i;56416:114::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;56493:17:::1;:29:::0;56416:114::o;35853:155::-;35948:52;9923:10;35981:8;35991;35948:18;:52::i;57773:105::-;57827:7;57867:3;57854:12;;:16;;;;:::i;:::-;57847:23;;57773:105;:::o;56329:79::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;56391:9;;::::1;::::0;:4:::1;::::0;:9:::1;::::0;::::1;::::0;::::1;:::i;56848:221::-:0;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;56958:13:::1;3780:14:::0;56946:8:::1;:35;;56938:63;;;;-1:-1:-1::0;;;56938:63:0::1;;;;;;;:::i;:::-;57050:11;57012:10;:35;57023:23;:13;3780:14:::0;;3688:114;36320:401;-1:-1:-1;;;;;36528:20:0;;9923:10;36528:20;;:60;;-1:-1:-1;36552:36:0;36569:4;9923:10;36080:168;:::i;36552:36::-;36506:151;;;;-1:-1:-1;;;36506:151:0;;;;;;;:::i;:::-;36668:45;36686:4;36692:2;36696;36700:6;36708:4;36668:17;:45::i;14346:201::-;13510:6;;-1:-1:-1;;;;;13510:6:0;9923:10;13657:23;13649:68;;;;-1:-1:-1;;;13649:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14435:22:0;::::1;14427:73;;;::::0;-1:-1:-1;;;14427:73:0;;16290:2:1;14427:73:0::1;::::0;::::1;16272:21:1::0;16329:2;16309:18;;;16302:30;16368:34;16348:18;;;16341:62;-1:-1:-1;;;16419:18:1;;;16412:36;16465:19;;14427:73:0::1;16088:402:1::0;14427:73:0::1;14511:28;14530:8;14511:18;:28::i;50588:321::-:0;-1:-1:-1;;;;;50728:23:0;;9923:10;50728:23;;:66;;-1:-1:-1;50755:39:0;50772:7;9923:10;36080:168;:::i;50755:39::-;50706:157;;;;-1:-1:-1;;;50706:157:0;;;;;;;:::i;:::-;50876:25;50882:7;50891:2;50895:5;50876;:25::i;40800:88::-;40867:13;;;;:4;;:13;;;;;:::i;60183:200::-;11260:7;;-1:-1:-1;;;11260:7:0;;;;11514:9;11506:38;;;;-1:-1:-1;;;11506:38:0;;;;;;;:::i;:::-;60342:33:::1;60354:2;60358;60362:6;60370:4;60342:11;:33::i;:::-;60183:200:::0;;;;:::o;58454:375::-;58556:17;-1:-1:-1;;;;;58598:21:0;;58595:42;;-1:-1:-1;58630:4:0;58623:11;;58595:42;58647:21;58671:18;;;:9;:18;;;;;;;;-1:-1:-1;;;;;58671:27:0;;;;;;;;;;58712:16;58709:113;;58752:5;58745:12;;;;;58709:113;58806:4;58799:11;;;;;58837:558;8217:1;8815:7;;:19;;8807:63;;;;-1:-1:-1;;;8807:63:0;;25218:2:1;8807:63:0;;;25200:21:1;25257:2;25237:18;;;25230:30;25296:33;25276:18;;;25269:61;25347:18;;8807:63:0;25016:355:1;8807:63:0;8217:1;8948:7;:18;-1:-1:-1;;;;;58917:23:0;::::1;58914:39;;58944:7;;58914:39;58963:24;59018:1;59002:142;59026:13;3780:14:::0;59021:1:::1;:28;59002:142;;59109:23;59119:9;59130:1;59109:9;:23::i;:::-;59090:42;::::0;:16;:42:::1;:::i;:::-;59071:61:::0;-1:-1:-1;59051:3:0;::::1;::::0;::::1;:::i;:::-;;;;59002:142;;;-1:-1:-1::0;59157:21:0;59154:35:::1;;59181:7;;;59154:35;59199:22;59252:5;59237:12;;59225:9;:24;;;;:::i;:::-;:32;;;;:::i;:::-;59199:58;;59269:9;59284;-1:-1:-1::0;;;;;59284:14:0::1;59306;59284:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59268:57;;;59344:4;59336:51;;;::::0;-1:-1:-1;;;59336:51:0;;22374:2:1;59336:51:0::1;::::0;::::1;22356:21:1::0;22413:2;22393:18;;;22386:30;22452:34;22432:18;;;22425:62;-1:-1:-1;;;22503:18:1;;;22496:32;22545:19;;59336:51:0::1;22172:398:1::0;59336:51:0::1;58903:492;;;8979:1;-1:-1:-1::0;8173:1:0;9127:7;:22;58837:558::o;34603:105::-;34663:13;34696:4;34689:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34603:105;;;:::o;4646:723::-;4702:13;4923:10;4919:53;;-1:-1:-1;;4950:10:0;;;;;;;;;;;;-1:-1:-1;;;4950:10:0;;;;;4646:723::o;4919:53::-;4997:5;4982:12;5038:78;5045:9;;5038:78;;5071:8;;;;:::i;:::-;;-1:-1:-1;5094:10:0;;-1:-1:-1;5102:2:0;5094:10;;:::i;:::-;;;5038:78;;;5126:19;5158:6;5148:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5148:17:0;;5126:39;;5176:154;5183:10;;5176:154;;5210:11;5220:1;5210:11;;:::i;:::-;;-1:-1:-1;5279:10:0;5287:2;5279:5;:10;:::i;:::-;5266:24;;:2;:24;:::i;:::-;5253:39;;5236:6;5243;5236:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;5236:56:0;;;;;;;;-1:-1:-1;5307:11:0;5316:2;5307:11;;:::i;:::-;;;5176:154;;;5354:6;4646:723;-1:-1:-1;;;;4646:723:0:o;38882:1074::-;39109:7;:14;39095:3;:10;:28;39087:81;;;;-1:-1:-1;;;39087:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39187:16:0;;39179:66;;;;-1:-1:-1;;;39179:66:0;;;;;;;:::i;:::-;9923:10;39302:60;9923:10;39333:4;39339:2;39343:3;39348:7;39357:4;39302:20;:60::i;:::-;39380:9;39375:421;39399:3;:10;39395:1;:14;39375:421;;;39431:10;39444:3;39448:1;39444:6;;;;;;;;:::i;:::-;;;;;;;39431:19;;39465:14;39482:7;39490:1;39482:10;;;;;;;;:::i;:::-;;;;;;;;;;;;39509:19;39531:13;;;;;;;;;;-1:-1:-1;;;;;39531:19:0;;;;;;;;;;;;39482:10;;-1:-1:-1;39573:21:0;;;;39565:76;;;;-1:-1:-1;;;39565:76:0;;;;;;;:::i;:::-;39685:9;:13;;;;;;;;;;;-1:-1:-1;;;;;39685:19:0;;;;;;;;;;39707:20;;;39685:42;;39757:17;;;;;;;:27;;39707:20;;39685:9;39757:27;;39707:20;;39757:27;:::i;:::-;;;;;;;;39416:380;;;39411:3;;;;:::i;:::-;;;39375:421;;;;39843:2;-1:-1:-1;;;;;39813:47:0;39837:4;-1:-1:-1;;;;;39813:47:0;39827:8;-1:-1:-1;;;;;39813:47:0;;39847:3;39852:7;39813:47;;;;;;;:::i;:::-;;;;;;;;39873:75;39909:8;39919:4;39925:2;39929:3;39934:7;39943:4;39873:35;:75::i;:::-;39076:880;38882:1074;;;;;:::o;12248:120::-;11260:7;;-1:-1:-1;;;11260:7:0;;;;11784:41;;;;-1:-1:-1;;;11784:41:0;;15182:2:1;11784:41:0;;;15164:21:1;15221:2;15201:18;;;15194:30;-1:-1:-1;;;15240:18:1;;;15233:50;15300:18;;11784:41:0;14980:344:1;11784:41:0;12307:7:::1;:15:::0;;-1:-1:-1;;;;12307:15:0::1;::::0;;12338:22:::1;9923:10:::0;12347:12:::1;12338:22;::::0;-1:-1:-1;;;;;11558:32:1;;;11540:51;;11528:2;11513:18;12338:22:0::1;;;;;;;12248:120::o:0;44035:891::-;-1:-1:-1;;;;;44187:18:0;;44179:66;;;;-1:-1:-1;;;44179:66:0;;;;;;;:::i;:::-;44278:7;:14;44264:3;:10;:28;44256:81;;;;-1:-1:-1;;;44256:81:0;;;;;;;:::i;:::-;44350:16;9923:10;44350:31;;44394:66;44415:8;44425:4;44439:1;44443:3;44448:7;44394:66;;;;;;;;;;;;:20;:66::i;:::-;44478:9;44473:373;44497:3;:10;44493:1;:14;44473:373;;;44529:10;44542:3;44546:1;44542:6;;;;;;;;:::i;:::-;;;;;;;44529:19;;44563:14;44580:7;44588:1;44580:10;;;;;;;;:::i;:::-;;;;;;;;;;;;44607:19;44629:13;;;;;;;;;;-1:-1:-1;;;;;44629:19:0;;;;;;;;;;;;44580:10;;-1:-1:-1;44671:21:0;;;;44663:70;;;;-1:-1:-1;;;44663:70:0;;;;;;;:::i;:::-;44777:9;:13;;;;;;;;;;;-1:-1:-1;;;;;44777:19:0;;;;;;;;;;44799:20;;44777:42;;44509:3;;;;:::i;:::-;;;;44473:373;;;;44901:1;-1:-1:-1;;;;;44863:55:0;44887:4;-1:-1:-1;;;;;44863:55:0;44877:8;-1:-1:-1;;;;;44863:55:0;;44905:3;44910:7;44863:55;;;;;;;:::i;:::-;;;;;;;;44168:758;44035:891;;;:::o;14707:191::-;14800:6;;;-1:-1:-1;;;;;14817:17:0;;;-1:-1:-1;;;;;;14817:17:0;;;;;;;14850:40;;14800:6;;;14817:17;14800:6;;14850:40;;14781:16;;14850:40;14770:128;14707:191;:::o;11989:118::-;11260:7;;-1:-1:-1;;;11260:7:0;;;;11514:9;11506:38;;;;-1:-1:-1;;;11506:38:0;;;;;;;:::i;:::-;12049:7:::1;:14:::0;;-1:-1:-1;;;;12049:14:0::1;-1:-1:-1::0;;;12049:14:0::1;::::0;;12079:20:::1;12086:12;9923:10:::0;;9843:98;45068:331;45223:8;-1:-1:-1;;;;;45214:17:0;:5;-1:-1:-1;;;;;45214:17:0;;;45206:71;;;;-1:-1:-1;;;45206:71:0;;23185:2:1;45206:71:0;;;23167:21:1;23224:2;23204:18;;;23197:30;23263:34;23243:18;;;23236:62;-1:-1:-1;;;23314:18:1;;;23307:39;23363:19;;45206:71:0;22983:405:1;45206:71:0;-1:-1:-1;;;;;45288:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;45288:46:0;;;;;;;;;;45350:41;;13874::1;;;45350::0;;13847:18:1;45350:41:0;;;;;;;45068:331;;;:::o;37704:820::-;-1:-1:-1;;;;;37892:16:0;;37884:66;;;;-1:-1:-1;;;37884:66:0;;;;;;;:::i;:::-;9923:10;38007:96;9923:10;38038:4;38044:2;38048:21;38066:2;38048:17;:21::i;:::-;38071:25;38089:6;38071:17;:25::i;:::-;38098:4;38007:20;:96::i;:::-;38116:19;38138:13;;;;;;;;;;;-1:-1:-1;;;;;38138:19:0;;;;;;;;;;38176:21;;;;38168:76;;;;-1:-1:-1;;;38168:76:0;;;;;;;:::i;:::-;38280:9;:13;;;;;;;;;;;-1:-1:-1;;;;;38280:19:0;;;;;;;;;;38302:20;;;38280:42;;38344:17;;;;;;;:27;;38302:20;;38280:9;38344:27;;38302:20;;38344:27;:::i;:::-;;;;-1:-1:-1;;38389:46:0;;;25732:25:1;;;25788:2;25773:18;;25766:34;;;-1:-1:-1;;;;;38389:46:0;;;;;;;;;;;;;;25705:18:1;38389:46:0;;;;;;;38448:68;38479:8;38489:4;38495:2;38499;38503:6;38511:4;38448:30;:68::i;:::-;37873:651;;37704:820;;;;;:::o;43184:648::-;-1:-1:-1;;;;;43311:18:0;;43303:66;;;;-1:-1:-1;;;43303:66:0;;;;;;;:::i;:::-;9923:10;43426:102;9923:10;43457:4;43382:16;43475:21;43493:2;43475:17;:21::i;:::-;43498:25;43516:6;43498:17;:25::i;:::-;43426:102;;;;;;;;;;;;:20;:102::i;:::-;43541:19;43563:13;;;;;;;;;;;-1:-1:-1;;;;;43563:19:0;;;;;;;;;;43601:21;;;;43593:70;;;;-1:-1:-1;;;43593:70:0;;;;;;;:::i;:::-;43699:9;:13;;;;;;;;;;;-1:-1:-1;;;;;43699:19:0;;;;;;;;;;;;43721:20;;;43699:42;;43770:54;;25732:25:1;;;25773:18;;;25766:34;;;43699:19:0;;43770:54;;;;;;25705:18:1;43770:54:0;;;;;;;43292:540;;43184:648;;;:::o;41274:569::-;-1:-1:-1;;;;;41427:16:0;;41419:62;;;;-1:-1:-1;;;41419:62:0;;24816:2:1;41419:62:0;;;24798:21:1;24855:2;24835:18;;;24828:30;24894:34;24874:18;;;24867:62;-1:-1:-1;;;24945:18:1;;;24938:31;24986:19;;41419:62:0;24614:397:1;41419:62:0;9923:10;41538:102;9923:10;41494:16;41581:2;41585:21;41603:2;41585:17;:21::i;41538:102::-;41653:9;:13;;;;;;;;;;;-1:-1:-1;;;;;41653:17:0;;;;;;;;;:27;;41674:6;;41653:9;:27;;41674:6;;41653:27;:::i;:::-;;;;-1:-1:-1;;41696:52:0;;;25732:25:1;;;25788:2;25773:18;;25766:34;;;-1:-1:-1;;;;;41696:52:0;;;;41729:1;;41696:52;;;;;;25705:18:1;41696:52:0;;;;;;;41761:74;41792:8;41810:1;41814:2;41818;41822:6;41830:4;41761:30;:74::i;59884:291::-;60101:66;60128:8;60138:4;60144:2;60148:3;60153:7;60162:4;60101:26;:66::i;47336:813::-;-1:-1:-1;;;;;47576:13:0;;16433:19;:23;47572:570;;47612:79;;-1:-1:-1;;;47612:79:0;;-1:-1:-1;;;;;47612:43:0;;;;;:79;;47656:8;;47666:4;;47672:3;;47677:7;;47686:4;;47612:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47612:79:0;;;;;;;;-1:-1:-1;;47612:79:0;;;;;;;;;;;;:::i;:::-;;;47608:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;48004:6;47997:14;;-1:-1:-1;;;47997:14:0;;;;;;;;:::i;47608:523::-;;;48053:62;;-1:-1:-1;;;48053:62:0;;14352:2:1;48053:62:0;;;14334:21:1;14391:2;14371:18;;;14364:30;14430:34;14410:18;;;14403:62;-1:-1:-1;;;14481:18:1;;;14474:50;14541:19;;48053:62:0;14150:416:1;47608:523:0;-1:-1:-1;;;;;;47773:60:0;;-1:-1:-1;;;47773:60:0;47769:159;;47858:50;;-1:-1:-1;;;47858:50:0;;;;;;;:::i;48157:198::-;48277:16;;;48291:1;48277:16;;;;;;;;;48223;;48252:22;;48277:16;;;;;;;;;;;;-1:-1:-1;48277:16:0;48252:41;;48315:7;48304:5;48310:1;48304:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;48342:5;48157:198;-1:-1:-1;;48157:198:0:o;46584:744::-;-1:-1:-1;;;;;46799:13:0;;16433:19;:23;46795:526;;46835:72;;-1:-1:-1;;;46835:72:0;;-1:-1:-1;;;;;46835:38:0;;;;;:72;;46874:8;;46884:4;;46890:2;;46894:6;;46902:4;;46835:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46835:72:0;;;;;;;;-1:-1:-1;;46835:72:0;;;;;;;;;;;;:::i;:::-;;;46831:479;;;;:::i;:::-;-1:-1:-1;;;;;;46957:55:0;;-1:-1:-1;;;46957:55:0;46953:154;;47037:50;;-1:-1:-1;;;47037:50:0;;;;;;;:::i;49495:655::-;-1:-1:-1;;;;;49817:18:0;;49813:160;;49857:9;49852:110;49876:3;:10;49872:1;:14;49852:110;;;49936:7;49944:1;49936:10;;;;;;;;:::i;:::-;;;;;;;49912:12;:20;49925:3;49929:1;49925:6;;;;;;;;:::i;:::-;;;;;;;49912:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;49888:3:0;;-1:-1:-1;49888:3:0;;:::i;:::-;;;49852:110;;;;49813:160;-1:-1:-1;;;;;49989:16:0;;49985:158;;50027:9;50022:110;50046:3;:10;50042:1;:14;50022:110;;;50106:7;50114:1;50106:10;;;;;;;;:::i;:::-;;;;;;;50082:12;:20;50095:3;50099:1;50095:6;;;;;;;;:::i;:::-;;;;;;;50082:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;50058:3:0;;-1:-1:-1;50058:3:0;;:::i;:::-;;;50022:110;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:735::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:163;1221:2;1218:1;1215:9;1207:163;;;1278:17;;1266:30;;1316:12;;;;1348;;;;1239:1;1232:9;1207:163;;;-1:-1:-1;1388:6:1;;665:735;-1:-1:-1;;;;;;;665:735:1:o;1405:160::-;1470:20;;1526:13;;1519:21;1509:32;;1499:60;;1555:1;1552;1545:12;1570:220;1612:5;1665:3;1658:4;1650:6;1646:17;1642:27;1632:55;;1683:1;1680;1673:12;1632:55;1705:79;1780:3;1771:6;1758:20;1751:4;1743:6;1739:17;1705:79;:::i;:::-;1696:88;1570:220;-1:-1:-1;;;1570:220:1:o;1795:186::-;1854:6;1907:2;1895:9;1886:7;1882:23;1878:32;1875:52;;;1923:1;1920;1913:12;1875:52;1946:29;1965:9;1946:29;:::i;1986:260::-;2054:6;2062;2115:2;2103:9;2094:7;2090:23;2086:32;2083:52;;;2131:1;2128;2121:12;2083:52;2154:29;2173:9;2154:29;:::i;:::-;2144:39;;2202:38;2236:2;2225:9;2221:18;2202:38;:::i;:::-;2192:48;;1986:260;;;;;:::o;2251:943::-;2405:6;2413;2421;2429;2437;2490:3;2478:9;2469:7;2465:23;2461:33;2458:53;;;2507:1;2504;2497:12;2458:53;2530:29;2549:9;2530:29;:::i;:::-;2520:39;;2578:38;2612:2;2601:9;2597:18;2578:38;:::i;:::-;2568:48;;2667:2;2656:9;2652:18;2639:32;2690:18;2731:2;2723:6;2720:14;2717:34;;;2747:1;2744;2737:12;2717:34;2770:61;2823:7;2814:6;2803:9;2799:22;2770:61;:::i;:::-;2760:71;;2884:2;2873:9;2869:18;2856:32;2840:48;;2913:2;2903:8;2900:16;2897:36;;;2929:1;2926;2919:12;2897:36;2952:63;3007:7;2996:8;2985:9;2981:24;2952:63;:::i;:::-;2942:73;;3068:3;3057:9;3053:19;3040:33;3024:49;;3098:2;3088:8;3085:16;3082:36;;;3114:1;3111;3104:12;3082:36;;3137:51;3180:7;3169:8;3158:9;3154:24;3137:51;:::i;:::-;3127:61;;;2251:943;;;;;;;;:::o;3199:606::-;3303:6;3311;3319;3327;3335;3388:3;3376:9;3367:7;3363:23;3359:33;3356:53;;;3405:1;3402;3395:12;3356:53;3428:29;3447:9;3428:29;:::i;:::-;3418:39;;3476:38;3510:2;3499:9;3495:18;3476:38;:::i;:::-;3466:48;;3561:2;3550:9;3546:18;3533:32;3523:42;;3612:2;3601:9;3597:18;3584:32;3574:42;;3667:3;3656:9;3652:19;3639:33;3695:18;3687:6;3684:30;3681:50;;;3727:1;3724;3717:12;3681:50;3750:49;3791:7;3782:6;3771:9;3767:22;3750:49;:::i;3810:669::-;3937:6;3945;3953;4006:2;3994:9;3985:7;3981:23;3977:32;3974:52;;;4022:1;4019;4012:12;3974:52;4045:29;4064:9;4045:29;:::i;:::-;4035:39;;4125:2;4114:9;4110:18;4097:32;4148:18;4189:2;4181:6;4178:14;4175:34;;;4205:1;4202;4195:12;4175:34;4228:61;4281:7;4272:6;4261:9;4257:22;4228:61;:::i;:::-;4218:71;;4342:2;4331:9;4327:18;4314:32;4298:48;;4371:2;4361:8;4358:16;4355:36;;;4387:1;4384;4377:12;4355:36;;4410:63;4465:7;4454:8;4443:9;4439:24;4410:63;:::i;:::-;4400:73;;;3810:669;;;;;:::o;4484:254::-;4549:6;4557;4610:2;4598:9;4589:7;4585:23;4581:32;4578:52;;;4626:1;4623;4616:12;4578:52;4649:29;4668:9;4649:29;:::i;:::-;4639:39;;4697:35;4728:2;4717:9;4713:18;4697:35;:::i;4743:254::-;4811:6;4819;4872:2;4860:9;4851:7;4847:23;4843:32;4840:52;;;4888:1;4885;4878:12;4840:52;4911:29;4930:9;4911:29;:::i;:::-;4901:39;4987:2;4972:18;;;;4959:32;;-1:-1:-1;;;4743:254:1:o;5002:322::-;5079:6;5087;5095;5148:2;5136:9;5127:7;5123:23;5119:32;5116:52;;;5164:1;5161;5154:12;5116:52;5187:29;5206:9;5187:29;:::i;:::-;5177:39;5263:2;5248:18;;5235:32;;-1:-1:-1;5314:2:1;5299:18;;;5286:32;;5002:322;-1:-1:-1;;;5002:322:1:o;5329:466::-;5424:6;5432;5440;5448;5456;5509:3;5497:9;5488:7;5484:23;5480:33;5477:53;;;5526:1;5523;5516:12;5477:53;5549:29;5568:9;5549:29;:::i;:::-;5539:39;;5625:2;5614:9;5610:18;5597:32;5587:42;;5676:2;5665:9;5661:18;5648:32;5638:42;;5699:38;5733:2;5722:9;5718:18;5699:38;:::i;:::-;5329:466;;;;-1:-1:-1;5329:466:1;;5784:3;5769:19;5756:33;;5329:466;-1:-1:-1;;5329:466:1:o;5800:1219::-;5918:6;5926;5979:2;5967:9;5958:7;5954:23;5950:32;5947:52;;;5995:1;5992;5985:12;5947:52;6035:9;6022:23;6064:18;6105:2;6097:6;6094:14;6091:34;;;6121:1;6118;6111:12;6091:34;6159:6;6148:9;6144:22;6134:32;;6204:7;6197:4;6193:2;6189:13;6185:27;6175:55;;6226:1;6223;6216:12;6175:55;6262:2;6249:16;6284:4;6307:43;6347:2;6307:43;:::i;:::-;6379:2;6373:9;6391:31;6419:2;6411:6;6391:31;:::i;:::-;6457:18;;;6491:15;;;;-1:-1:-1;6526:11:1;;;6568:1;6564:10;;;6556:19;;6552:28;;6549:41;-1:-1:-1;6546:61:1;;;6603:1;6600;6593:12;6546:61;6625:1;6616:10;;6635:169;6649:2;6646:1;6643:9;6635:169;;;6706:23;6725:3;6706:23;:::i;:::-;6694:36;;6667:1;6660:9;;;;;6750:12;;;;6782;;6635:169;;;-1:-1:-1;6823:6:1;-1:-1:-1;;6867:18:1;;6854:32;;-1:-1:-1;;6898:16:1;;;6895:36;;;6927:1;6924;6917:12;6895:36;;6950:63;7005:7;6994:8;6983:9;6979:24;6950:63;:::i;:::-;6940:73;;;5800:1219;;;;;:::o;7024:180::-;7080:6;7133:2;7121:9;7112:7;7108:23;7104:32;7101:52;;;7149:1;7146;7139:12;7101:52;7172:26;7188:9;7172:26;:::i;7209:245::-;7267:6;7320:2;7308:9;7299:7;7295:23;7291:32;7288:52;;;7336:1;7333;7326:12;7288:52;7375:9;7362:23;7394:30;7418:5;7394:30;:::i;7459:249::-;7528:6;7581:2;7569:9;7560:7;7556:23;7552:32;7549:52;;;7597:1;7594;7587:12;7549:52;7629:9;7623:16;7648:30;7672:5;7648:30;:::i;7713:450::-;7782:6;7835:2;7823:9;7814:7;7810:23;7806:32;7803:52;;;7851:1;7848;7841:12;7803:52;7891:9;7878:23;7924:18;7916:6;7913:30;7910:50;;;7956:1;7953;7946:12;7910:50;7979:22;;8032:4;8024:13;;8020:27;-1:-1:-1;8010:55:1;;8061:1;8058;8051:12;8010:55;8084:73;8149:7;8144:2;8131:16;8126:2;8122;8118:11;8084:73;:::i;8168:180::-;8227:6;8280:2;8268:9;8259:7;8255:23;8251:32;8248:52;;;8296:1;8293;8286:12;8248:52;-1:-1:-1;8319:23:1;;8168:180;-1:-1:-1;8168:180:1:o;8353:248::-;8421:6;8429;8482:2;8470:9;8461:7;8457:23;8453:32;8450:52;;;8498:1;8495;8488:12;8450:52;-1:-1:-1;;8521:23:1;;;8591:2;8576:18;;;8563:32;;-1:-1:-1;8353:248:1:o;8606:435::-;8659:3;8697:5;8691:12;8724:6;8719:3;8712:19;8750:4;8779:2;8774:3;8770:12;8763:19;;8816:2;8809:5;8805:14;8837:1;8847:169;8861:6;8858:1;8855:13;8847:169;;;8922:13;;8910:26;;8956:12;;;;8991:15;;;;8883:1;8876:9;8847:169;;;-1:-1:-1;9032:3:1;;8606:435;-1:-1:-1;;;;;8606:435:1:o;9046:257::-;9087:3;9125:5;9119:12;9152:6;9147:3;9140:19;9168:63;9224:6;9217:4;9212:3;9208:14;9201:4;9194:5;9190:16;9168:63;:::i;:::-;9285:2;9264:15;-1:-1:-1;;9260:29:1;9251:39;;;;9292:4;9247:50;;9046:257;-1:-1:-1;;9046:257:1:o;9308:973::-;9393:12;;9358:3;;9448:1;9468:18;;;;9521;;;;9548:61;;9602:4;9594:6;9590:17;9580:27;;9548:61;9628:2;9676;9668:6;9665:14;9645:18;9642:38;9639:161;;;9722:10;9717:3;9713:20;9710:1;9703:31;9757:4;9754:1;9747:15;9785:4;9782:1;9775:15;9639:161;9816:18;9843:104;;;;9961:1;9956:319;;;;9809:466;;9843:104;-1:-1:-1;;9876:24:1;;9864:37;;9921:16;;;;-1:-1:-1;9843:104:1;;9956:319;26072:1;26065:14;;;26109:4;26096:18;;10050:1;10064:165;10078:6;10075:1;10072:13;10064:165;;;10156:14;;10143:11;;;10136:35;10199:16;;;;10093:10;;10064:165;;;10068:3;;10258:6;10253:3;10249:16;10242:23;;9809:466;;;;;;;9308:973;;;;:::o;10286:550::-;10510:3;10548:6;10542:13;10564:53;10610:6;10605:3;10598:4;10590:6;10586:17;10564:53;:::i;:::-;10680:13;;10639:16;;;;10702:57;10680:13;10639:16;10736:4;10724:17;;10702:57;:::i;:::-;10775:55;10820:8;10813:5;10809:20;10801:6;10775:55;:::i;:::-;10768:62;10286:550;-1:-1:-1;;;;;;;10286:550:1:o;10841:338::-;10997:3;11028:38;11062:3;11054:6;11028:38;:::i;:::-;11097:2;11093:15;;;;-1:-1:-1;;11089:53:1;11075:68;;-1:-1:-1;;11170:2:1;11159:14;;10841:338;-1:-1:-1;10841:338:1:o;11602:826::-;-1:-1:-1;;;;;11999:15:1;;;11981:34;;12051:15;;12046:2;12031:18;;12024:43;11961:3;12098:2;12083:18;;12076:31;;;11924:4;;12130:57;;12167:19;;12159:6;12130:57;:::i;:::-;12235:9;12227:6;12223:22;12218:2;12207:9;12203:18;12196:50;12269:44;12306:6;12298;12269:44;:::i;:::-;12255:58;;12362:9;12354:6;12350:22;12344:3;12333:9;12329:19;12322:51;12390:32;12415:6;12407;12390:32;:::i;:::-;12382:40;11602:826;-1:-1:-1;;;;;;;;11602:826:1:o;12433:560::-;-1:-1:-1;;;;;12730:15:1;;;12712:34;;12782:15;;12777:2;12762:18;;12755:43;12829:2;12814:18;;12807:34;;;12872:2;12857:18;;12850:34;;;12692:3;12915;12900:19;;12893:32;;;12655:4;;12942:45;;12967:19;;12959:6;12942:45;:::i;12998:261::-;13177:2;13166:9;13159:21;13140:4;13197:56;13249:2;13238:9;13234:18;13226:6;13197:56;:::i;13264:465::-;13521:2;13510:9;13503:21;13484:4;13547:56;13599:2;13588:9;13584:18;13576:6;13547:56;:::i;:::-;13651:9;13643:6;13639:22;13634:2;13623:9;13619:18;13612:50;13679:44;13716:6;13708;13679:44;:::i;:::-;13671:52;13264:465;-1:-1:-1;;;;;13264:465:1:o;13926:219::-;14075:2;14064:9;14057:21;14038:4;14095:44;14135:2;14124:9;14120:18;14112:6;14095:44;:::i;14571:404::-;14773:2;14755:21;;;14812:2;14792:18;;;14785:30;14851:34;14846:2;14831:18;;14824:62;-1:-1:-1;;;14917:2:1;14902:18;;14895:38;14965:3;14950:19;;14571:404::o;16846:400::-;17048:2;17030:21;;;17087:2;17067:18;;;17060:30;17126:34;17121:2;17106:18;;17099:62;-1:-1:-1;;;17192:2:1;17177:18;;17170:34;17236:3;17221:19;;16846:400::o;17251:405::-;17453:2;17435:21;;;17492:2;17472:18;;;17465:30;17531:34;17526:2;17511:18;;17504:62;-1:-1:-1;;;17597:2:1;17582:18;;17575:39;17646:3;17631:19;;17251:405::o;17661:339::-;17863:2;17845:21;;;17902:2;17882:18;;;17875:30;-1:-1:-1;;;17936:2:1;17921:18;;17914:45;17991:2;17976:18;;17661:339::o;18350:340::-;18552:2;18534:21;;;18591:2;18571:18;;;18564:30;-1:-1:-1;;;18625:2:1;18610:18;;18603:46;18681:2;18666:18;;18350:340::o;18695:401::-;18897:2;18879:21;;;18936:2;18916:18;;;18909:30;18975:34;18970:2;18955:18;;18948:62;-1:-1:-1;;;19041:2:1;19026:18;;19019:35;19086:3;19071:19;;18695:401::o;20236:399::-;20438:2;20420:21;;;20477:2;20457:18;;;20450:30;20516:34;20511:2;20496:18;;20489:62;-1:-1:-1;;;20582:2:1;20567:18;;20560:33;20625:3;20610:19;;20236:399::o;20640:406::-;20842:2;20824:21;;;20881:2;20861:18;;;20854:30;20920:34;20915:2;20900:18;;20893:62;-1:-1:-1;;;20986:2:1;20971:18;;20964:40;21036:3;21021:19;;20640:406::o;21051:356::-;21253:2;21235:21;;;21272:18;;;21265:30;21331:34;21326:2;21311:18;;21304:62;21398:2;21383:18;;21051:356::o;23803:404::-;24005:2;23987:21;;;24044:2;24024:18;;;24017:30;24083:34;24078:2;24063:18;;24056:62;-1:-1:-1;;;24149:2:1;24134:18;;24127:38;24197:3;24182:19;;23803:404::o;25811:183::-;25871:4;25904:18;25896:6;25893:30;25890:56;;;25926:18;;:::i;:::-;-1:-1:-1;25971:1:1;25967:14;25983:4;25963:25;;25811:183::o;26125:128::-;26165:3;26196:1;26192:6;26189:1;26186:13;26183:39;;;26202:18;;:::i;:::-;-1:-1:-1;26238:9:1;;26125:128::o;26258:120::-;26298:1;26324;26314:35;;26329:18;;:::i;:::-;-1:-1:-1;26363:9:1;;26258:120::o;26383:168::-;26423:7;26489:1;26485;26481:6;26477:14;26474:1;26471:21;26466:1;26459:9;26452:17;26448:45;26445:71;;;26496:18;;:::i;:::-;-1:-1:-1;26536:9:1;;26383:168::o;26556:125::-;26596:4;26624:1;26621;26618:8;26615:34;;;26629:18;;:::i;:::-;-1:-1:-1;26666:9:1;;26556:125::o;26686:258::-;26758:1;26768:113;26782:6;26779:1;26776:13;26768:113;;;26858:11;;;26852:18;26839:11;;;26832:39;26804:2;26797:10;26768:113;;;26899:6;26896:1;26893:13;26890:48;;;-1:-1:-1;;26934:1:1;26916:16;;26909:27;26686:258::o;26949:380::-;27028:1;27024:12;;;;27071;;;27092:61;;27146:4;27138:6;27134:17;27124:27;;27092:61;27199:2;27191:6;27188:14;27168:18;27165:38;27162:161;;;27245:10;27240:3;27236:20;27233:1;27226:31;27280:4;27277:1;27270:15;27308:4;27305:1;27298:15;27162:161;;26949:380;;;:::o;27334:249::-;27444:2;27425:13;;-1:-1:-1;;27421:27:1;27409:40;;27479:18;27464:34;;27500:22;;;27461:62;27458:88;;;27526:18;;:::i;:::-;27562:2;27555:22;-1:-1:-1;;27334:249:1:o;27588:135::-;27627:3;-1:-1:-1;;27648:17:1;;27645:43;;;27668:18;;:::i;:::-;-1:-1:-1;27715:1:1;27704:13;;27588:135::o;27728:112::-;27760:1;27786;27776:35;;27791:18;;:::i;:::-;-1:-1:-1;27825:9:1;;27728:112::o;27845:127::-;27906:10;27901:3;27897:20;27894:1;27887:31;27937:4;27934:1;27927:15;27961:4;27958:1;27951:15;27977:127;28038:10;28033:3;28029:20;28026:1;28019:31;28069:4;28066:1;28059:15;28093:4;28090:1;28083:15;28109:127;28170:10;28165:3;28161:20;28158:1;28151:31;28201:4;28198:1;28191:15;28225:4;28222:1;28215:15;28241:127;28302:10;28297:3;28293:20;28290:1;28283:31;28333:4;28330:1;28323:15;28357:4;28354:1;28347:15;28373:179;28408:3;28450:1;28432:16;28429:23;28426:120;;;28496:1;28493;28490;28475:23;-1:-1:-1;28533:1:1;28527:8;28522:3;28518:18;28426:120;28373:179;:::o;28557:671::-;28596:3;28638:4;28620:16;28617:26;28614:39;;;28557:671;:::o;28614:39::-;28680:2;28674:9;-1:-1:-1;;28745:16:1;28741:25;;28738:1;28674:9;28717:50;28796:4;28790:11;28820:16;28855:18;28926:2;28919:4;28911:6;28907:17;28904:25;28899:2;28891:6;28888:14;28885:45;28882:58;;;28933:5;;;;;28557:671;:::o;28882:58::-;28970:6;28964:4;28960:17;28949:28;;29006:3;29000:10;29033:2;29025:6;29022:14;29019:27;;;29039:5;;;;;;28557:671;:::o;29019:27::-;29123:2;29104:16;29098:4;29094:27;29090:36;29083:4;29074:6;29069:3;29065:16;29061:27;29058:69;29055:82;;;29130:5;;;;;;28557:671;:::o;29055:82::-;29146:57;29197:4;29188:6;29180;29176:19;29172:30;29166:4;29146:57;:::i;:::-;-1:-1:-1;29219:3:1;;28557:671;-1:-1:-1;;;;;28557:671:1:o;29233:131::-;-1:-1:-1;;;;;;29307:32:1;;29297:43;;29287:71;;29354:1;29351;29344:12

Swarm Source

ipfs://7b79fbd94614c2a2c2ac7cd4455c902048dc0aac89ad5a315d5abb657d27b7ca
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.