ETH Price: $3,304.21 (-3.15%)
Gas: 18 Gwei

Token

TAMAG Accessory NiFTygotchi (TMA)
 

Overview

Max Total Supply

373 TMA

Holders

37

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
eier.eth
0x0293359127408ef1bddbf78a4f25791e8f2b0a9a
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:
TMA2

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-29
*/

// File: @openzeppelin\contracts\math\SafeMath.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: node_modules\@openzeppelin\contracts\introspection\IERC165.sol



pragma solidity ^0.6.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: node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155.sol



pragma solidity ^0.6.2;


/**
 * @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: node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155MetadataURI.sol



pragma solidity ^0.6.2;


/**
 * @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: node_modules\@openzeppelin\contracts\token\ERC1155\IERC1155Receiver.sol



pragma solidity ^0.6.0;


/**
 * _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.
        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. 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: node_modules\@openzeppelin\contracts\GSN\Context.sol



pragma solidity ^0.6.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 GSN 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 payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: node_modules\@openzeppelin\contracts\introspection\ERC165.sol



pragma solidity ^0.6.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts may inherit from this and call {_registerInterface} to declare
 * their support of an interface.
 */
contract ERC165 is IERC165 {
    /*
     * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7
     */
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;

    /**
     * @dev Mapping of interface ids to whether or not it's supported.
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
        // Derived contracts need only register support for their own interfaces,
        // we register support for ERC165 itself here
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     *
     * Time complexity O(1), guaranteed to always use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev Registers the contract as an implementer of the interface defined by
     * `interfaceId`. Support of the actual ERC165 interface is automatic and
     * registering its interface id is not required.
     *
     * See {IERC165-supportsInterface}.
     *
     * Requirements:
     *
     * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).
     */
    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

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



pragma solidity ^0.6.2;

/**
 * @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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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



pragma solidity ^0.6.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 SafeMath for uint256;
    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;

    /*
     *     bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e
     *     bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465
     *     bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a
     *     bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6
     *
     *     => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^
     *        0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26
     */
    bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;

    /*
     *     bytes4(keccak256('uri(uint256)')) == 0x0e89341c
     */
    bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;

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

        // register the supported interfaces to conform to ERC1155 via ERC165
        _registerInterface(_INTERFACE_ID_ERC1155);

        // register the supported interfaces to conform to ERC1155MetadataURI via ERC165
        _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
    }

    /**
     * @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) external view 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 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
        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) {
            require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
            batchBalances[i] = _balances[ids[i]][accounts[i]];
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view 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(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        address operator = _msgSender();

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

        _balances[id][from] = _balances[id][from].sub(amount, "ERC1155: insufficient balance for transfer");
        _balances[id][to] = _balances[id][to].add(amount);

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

        _doSafeTransferAcceptanceCheck(operator, 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(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        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];

            _balances[id][from] = _balances[id][from].sub(
                amount,
                "ERC1155: insufficient balance for transfer"
            );
            _balances[id][to] = _balances[id][to].add(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 `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` 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 account, uint256 id, uint256 amount, bytes memory data) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

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

        _balances[id][account] = _balances[id][account].add(amount);
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, 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 (uint i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);
        }

        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 `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(address account, uint256 id, uint256 amount) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

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

        _balances[id][account] = _balances[id][account].sub(
            amount,
            "ERC1155: burn amount exceeds balance"
        );

        emit TransferSingle(operator, account, 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 account, uint256[] memory ids, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

        for (uint i = 0; i < ids.length; i++) {
            _balances[ids[i]][account] = _balances[ids[i]][account].sub(
                amounts[i],
                "ERC1155: burn amount exceeds balance"
            );
        }

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

    /**
     * @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(to).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(to).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\ERC1155Burnable.sol



pragma solidity ^0.6.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: node_modules\@openzeppelin\contracts\utils\Pausable.sol



pragma solidity ^0.6.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.
 */
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 () internal {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view 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\token\ERC1155\ERC1155Pausable.sol



pragma solidity ^0.6.0;



/**
 * @dev ERC1155 token with pausable token transfers, minting and burning.
 *
 * Useful for scenarios such as preventing trades until the end of an evaluation
 * period, or having an emergency switch for freezing all token transfers in the
 * event of a large bug.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Pausable is ERC1155, Pausable {
    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     *
     * Requirements:
     *
     * - the contract must not be paused.
     */
    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);

        require(!paused(), "ERC1155Pausable: token transfer while paused");
    }
}

// File: contracts\MyOwnable.sol



pragma solidity ^0.6.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.
 */
contract MyOwnable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract.
     */
    constructor (address o) internal {
        _owner = o;
        emit OwnershipTransferred(address(0), o);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts\ICHI.sol

pragma solidity >=0.5.0;

interface ICHI {
    function freeFromUpTo(address from, uint256 value) external returns (uint256);
    function freeUpTo(uint256 value) external returns (uint256);

}

// File: contracts\CHIUser.sol

pragma solidity ^0.6.0;


abstract contract CHIUser {
    ICHI public chi;

    modifier discountCHI {
        uint256 gasStart = gasleft();
        _;
        uint256 gasSpent = 21000 + gasStart - gasleft() + 16 *
                        msg.data.length;
        // if (address(chi) != address(0)){
        chi.freeFromUpTo(msg.sender, (gasSpent + 14154) / 41947);
        // }
    }
    constructor(address _chi) public{
        chi = ICHI(_chi);
    }
}

// File: contracts\TMA2.sol

pragma solidity ^0.6.12;







contract TMA2 is ERC1155("ipfs://ipfs/QmPEdwpnrnqZm5XucradgP6u9cKUiBtmRLksfaJYRc3oAk/{id}.json"),
    MyOwnable,
    ERC1155Burnable, 
    ERC1155Pausable,
    CHIUser
    // ERC1155PresetMinterPauser, 
{
    using SafeMath for uint256;

    string public name;
    string public symbol;
   
    mapping (uint256 => uint256) public tokenSupply;

    constructor(string memory _name, string memory _symbol, address owner, address _chi) public MyOwnable(owner) CHIUser(_chi){
        name = _name;
        symbol = _symbol;
    }

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

    function setURI(string memory uri) public onlyOwner{
        _setURI(uri);
    }
    
    function totalSupply(
        uint256 _id
    ) public view returns (uint256) {
        return tokenSupply[_id];
    }
    mapping (address => mapping(uint256 => bool)) approvedMinter;

    function setApprovedMinter(address a, uint256 id, bool approved) public onlyOwner {
        approvedMinter[a][id] = approved;
    }
    function isApprovedMinter(address a, uint256 id) public view returns (bool){
        return approvedMinter[a][id];
    }

    function mint(address _to, uint256 _id, uint256 _quantity, bytes memory _data) public discountCHI{
        require(owner() == _msgSender() || approvedMinter[_msgSender()][_id], "Not approved to mint");
        _mint(_to, _id, _quantity, _data);
        tokenSupply[_id] = tokenSupply[_id].add(_quantity);
    }

    function mintToAddresses(address[] memory to, uint256 id, uint256[] memory amounts, bytes memory data) public discountCHI{
        require(owner() == _msgSender() || approvedMinter[_msgSender()][id], "Not approved to mint");
        uint256 amt = 0;
        for (uint256 i = 0; i < to.length; i++){
            _mint(to[i], id, amounts[i], data);
            amt = amt.add(amounts[i]);
        }
        tokenSupply[id] = tokenSupply[id].add(amt);
    }
    
    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public discountCHI{
        _mintBatch(to, ids, amounts, data);
        for (uint256 i = 0; i < ids.length; i++){
            require(owner() == _msgSender() || approvedMinter[_msgSender()][ids[i]], "Not approved to mint");
            tokenSupply[ids[i]] = tokenSupply[ids[i]].add(amounts[i]);
        }
    }

    function burn(address account, uint256 id, uint256 value) public override{
        ERC1155Burnable.burn(account, id, value);
        tokenSupply[id] = tokenSupply[id].sub(value);
    }

    function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public override {
        ERC1155Burnable.burnBatch(account, ids, values);
        for (uint256 i = 0; i < ids.length; i++){
            tokenSupply[ids[i]] = tokenSupply[ids[i]].sub(values[i]);
        }
    }

    mapping(uint256 => uint256) public bonusEffect;
    function setBonusEffect(uint256 tokenId, uint256 amt) public onlyOwner{
        bonusEffect[tokenId] = amt;
    }
    function close() public onlyOwner { 
        address payable p = payable(owner());
        selfdestruct(p); 
    }


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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"_chi","type":"address"}],"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":[{"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":"uint256","name":"","type":"uint256"}],"name":"bonusEffect","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":[],"name":"chi","outputs":[{"internalType":"contract ICHI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"close","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isApprovedMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintToAddresses","outputs":[],"stateMutability":"nonpayable","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":"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":"address","name":"a","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovedMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setBonusEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","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":"tokenSupply","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":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040516200576738038062005767833981810160405260808110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291908051906020019092919050505080826040518060800160405280604481526020016200572360449139620002006301ffc9a760e01b6200037860201b60201c565b62000211816200048160201b60201c565b6200022963d9b67a2660e01b6200037860201b60201c565b62000241630e89341c60e01b6200037860201b60201c565b5080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000600460146101000a81548160ff02191690831515021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508360069080519060200190620003549291906200049d565b5082600790805190602001906200036d9291906200049d565b505050505062000543565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141562000415576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b8060039080519060200190620004999291906200049d565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620004e057805160ff191683800117855562000511565b8280016001018555821562000511579182015b8281111562000510578251825591602001919060010190620004f3565b5b50905062000520919062000524565b5090565b5b808211156200053f57600081600090555060010162000525565b5090565b6151d080620005536000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c80636b20c45411610104578063a22cb465116100a2578063e985e9c511610071578063e985e9c5146111d6578063f242432a14611250578063f2fde38b1461135f578063f5298aca146113a3576101d9565b8063a22cb465146110ce578063bc99d8a81461111e578063bd85b03914611160578063c92aecc4146111a2576101d9565b80638456cb59116100de5780638456cb5914610fa95780638da5cb5b14610fb3578063957aee7b14610fe757806395d89b411461104b576101d9565b80636b20c45414610d44578063715018a614610eb0578063731133e914610eba576101d9565b80632693ebf21161017c5780633f4ba83a1161014b5780633f4ba83a14610b6f57806343d726d614610b795780634e1273f414610b835780635c975abb14610d24576101d9565b80632693ebf2146106e55780632eb2c2d61461072757806330772d471461094a5780633e614b7614610982576101d9565b806306fdde03116101b857806306fdde031461035e5780630e89341c146103e15780631f7fdffa1461048857806320e4506f1461068b576101d9565b8062fdd58e146101de57806301ffc9a71461024057806302fe5305146102a3575b600080fd5b61022a600480360360408110156101f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113fb565b6040518082815260200191505060405180910390f35b61028b6004803603602081101561025657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506114db565b60405180821515815260200191505060405180910390f35b61035c600480360360208110156102b957600080fd5b81019080803590602001906401000000008111156102d657600080fd5b8201836020820111156102e857600080fd5b8035906020019184600183028401116401000000008311171561030a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611542565b005b610366611618565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103a657808201518184015260208101905061038b565b50505050905090810190601f1680156103d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61040d600480360360208110156103f757600080fd5b81019080803590602001909291905050506116b6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561044d578082015181840152602081019050610432565b50505050905090810190601f16801561047a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106896004803603608081101561049e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104db57600080fd5b8201836020820111156104ed57600080fd5b8035906020019184602083028401116401000000008311171561050f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561056f57600080fd5b82018360208201111561058157600080fd5b803590602001918460208302840111640100000000831117156105a357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561060357600080fd5b82018360208201111561061557600080fd5b8035906020019184600183028401116401000000008311171561063757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061175a565b005b6106e3600480360360608110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050611a22565b005b610711600480360360208110156106fb57600080fd5b8101908080359060200190929190505050611b59565b6040518082815260200191505060405180910390f35b610948600480360360a081101561073d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561079a57600080fd5b8201836020820111156107ac57600080fd5b803590602001918460208302840111640100000000831117156107ce57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082e57600080fd5b82018360208201111561084057600080fd5b8035906020019184602083028401116401000000008311171561086257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108c257600080fd5b8201836020820111156108d457600080fd5b803590602001918460018302840111640100000000831117156108f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b71565b005b6109806004803603604081101561096057600080fd5b810190808035906020019092919080359060200190929190505050611ffc565b005b610b6d6004803603608081101561099857600080fd5b81019080803590602001906401000000008111156109b557600080fd5b8201836020820111156109c757600080fd5b803590602001918460208302840111640100000000831117156109e957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190640100000000811115610a5357600080fd5b820183602082011115610a6557600080fd5b80359060200191846020830284011164010000000083111715610a8757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ae757600080fd5b820183602082011115610af957600080fd5b80359060200191846001830284011164010000000083111715610b1b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120e2565b005b610b776123ae565b005b610b81612482565b005b610ccd60048036036040811015610b9957600080fd5b8101908080359060200190640100000000811115610bb657600080fd5b820183602082011115610bc857600080fd5b80359060200191846020830284011164010000000083111715610bea57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b80359060200191846020830284011164010000000083111715610c7e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612571565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d10578082015181840152602081019050610cf5565b505050509050019250505060405180910390f35b610d2c612763565b60405180821515815260200191505060405180910390f35b610eae60048036036060811015610d5a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610d9757600080fd5b820183602082011115610da957600080fd5b80359060200191846020830284011164010000000083111715610dcb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610e2b57600080fd5b820183602082011115610e3d57600080fd5b80359060200191846020830284011164010000000083111715610e5f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061277a565b005b610eb861281a565b005b610fa760048036036080811015610ed057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610f2157600080fd5b820183602082011115610f3357600080fd5b80359060200191846001830284011164010000000083111715610f5557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506129a5565b005b610fb1612c07565b005b610fbb612cdb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61103360048036036040811015610ffd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612d05565b60405180821515815260200191505060405180910390f35b611053612d6d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611093578082015181840152602081019050611078565b50505050905090810190601f1680156110c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61111c600480360360408110156110e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612e0b565b005b61114a6004803603602081101561113457600080fd5b8101908080359060200190929190505050612fa4565b6040518082815260200191505060405180910390f35b61118c6004803603602081101561117657600080fd5b8101908080359060200190929190505050612fbc565b6040518082815260200191505060405180910390f35b6111aa612fd9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611238600480360360408110156111ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fff565b60405180821515815260200191505060405180910390f35b61135d600480360360a081101561126657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156112d757600080fd5b8201836020820111156112e957600080fd5b8035906020019184600183028401116401000000008311171561130b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613093565b005b6113a16004803603602081101561137557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613408565b005b6113f9600480360360608110156113b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613618565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614f61602b913960400191505060405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b61154a613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6116158161366d565b50565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116ae5780601f10611683576101008083540402835291602001916116ae565b820191906000526020600020905b81548152906001019060200180831161169157829003601f168201915b505050505081565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561174e5780601f106117235761010080835404028352916020019161174e565b820191906000526020600020905b81548152906001019060200180831161173157829003601f168201915b50505050509050919050565b60005a905061176b85858585613687565b60005b84518110156119285761177f613665565b73ffffffffffffffffffffffffffffffffffffffff1661179d612cdb565b73ffffffffffffffffffffffffffffffffffffffff1614806118335750600960006117c6613665565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086838151811061180e57fe5b6020026020010151815260200190815260200160002060009054906101000a900460ff165b6118a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f7420617070726f76656420746f206d696e7400000000000000000000000081525060200191505060405180910390fd5b6118f18482815181106118b457fe5b6020026020010151600860008885815181106118cc57fe5b60200260200101518152602001908152602001600020546139a990919063ffffffff16565b6008600087848151811061190157fe5b6020026020010151815260200190815260200160002081905550808060010191505061176e565b506000803690506010025a836152080103019050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a85018161198a57fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156119de57600080fd5b505af11580156119f2573d6000803e3d6000fd5b505050506040513d6020811015611a0857600080fd5b810190808051906020019092919050505050505050505050565b611a2a613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60086020528060005260406000206000915090505481565b8151835114611bcb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151526028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061505c6025913960400191505060405180910390fd5b611c59613665565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c9f5750611c9e85611c99613665565b612fff565b5b611cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806150816032913960400191505060405180910390fd5b6000611cfe613665565b9050611d0e818787878787613a31565b60005b8451811015611edf576000858281518110611d2857fe5b602002602001015190506000858381518110611d4057fe5b60200260200101519050611dc7816040518060600160405280602a81526020016150d6602a91396001600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a479092919063ffffffff16565b6001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e7e816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a990919063ffffffff16565b6001600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050806001019050611d11565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611f8f578082015181840152602081019050611f74565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611fd1578082015181840152602081019050611fb6565b5050505090500194505050505060405180910390a4611ff4818787878787613b07565b505050505050565b612004613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a6000848152602001908152602001600020819055505050565b60005a90506120ef613665565b73ffffffffffffffffffffffffffffffffffffffff1661210d612cdb565b73ffffffffffffffffffffffffffffffffffffffff161480612190575060096000612136613665565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff165b612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f7420617070726f76656420746f206d696e7400000000000000000000000081525060200191505060405180910390fd5b6000805b86518110156122765761224187828151811061221e57fe5b60200260200101518787848151811061223357fe5b602002602001015187613e96565b61226785828151811061225057fe5b6020026020010151836139a990919063ffffffff16565b91508080600101915050612206565b5061229d8160086000888152602001908152602001600020546139a990919063ffffffff16565b6008600087815260200190815260200160002081905550506000803690506010025a836152080103019050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a85018161231657fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b505050506040513d602081101561239457600080fd5b810190808051906020019092919050505050505050505050565b6123b6613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612480614099565b565b61248a613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461254c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000612556612cdb565b90508073ffffffffffffffffffffffffffffffffffffffff16ff5b606081518351146125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806151296029913960400191505060405180910390fd5b6060835167ffffffffffffffff811180156125e757600080fd5b506040519080825280602002602001820160405280156126165781602001602082028036833780820191505090505b50905060005b845181101561275857600073ffffffffffffffffffffffffffffffffffffffff1685828151811061264957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156126be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180614f8c6031913960400191505060405180910390fd5b600160008583815181106126ce57fe5b6020026020010151815260200190815260200160002060008683815181106126f257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061274157fe5b60200260200101818152505080600101905061261c565b508091505092915050565b6000600460149054906101000a900460ff16905090565b61278583838361418c565b60005b8251811015612814576127dd8282815181106127a057fe5b6020026020010151600860008685815181106127b857fe5b602002602001015181526020019081526020016000205461423f90919063ffffffff16565b600860008584815181106127ed57fe5b60200260200101518152602001908152602001600020819055508080600101915050612788565b50505050565b612822613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60005a90506129b2613665565b73ffffffffffffffffffffffffffffffffffffffff166129d0612cdb565b73ffffffffffffffffffffffffffffffffffffffff161480612a535750600960006129f9613665565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff165b612ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f7420617070726f76656420746f206d696e7400000000000000000000000081525060200191505060405180910390fd5b612ad185858585613e96565b612af78360086000878152602001908152602001600020546139a990919063ffffffff16565b60086000868152602001908152602001600020819055506000803690506010025a836152080103019050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a850181612b6f57fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612bc357600080fd5b505af1158015612bd7573d6000803e3d6000fd5b505050506040513d6020811015612bed57600080fd5b810190808051906020019092919050505050505050505050565b612c0f613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612cd9614289565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e035780601f10612dd857610100808354040283529160200191612e03565b820191906000526020600020905b815481529060010190602001808311612de657829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff16612e2a613665565b73ffffffffffffffffffffffffffffffffffffffff161415612e97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806151006029913960400191505060405180910390fd5b8060026000612ea4613665565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612f51613665565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600a6020528060005260406000206000915090505481565b600060086000838152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061505c6025913960400191505060405180910390fd5b613121613665565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480613167575061316685613161613665565b612fff565b5b6131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150336029913960400191505060405180910390fd5b60006131c6613665565b90506131e68187876131d78861437d565b6131e08861437d565b87613a31565b613263836040518060600160405280602a81526020016150d6602a91396001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a479092919063ffffffff16565b6001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331a836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a990919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a46134008187878787876143ed565b505050505050565b613410613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146134d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613558576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614fbd6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6136238383836146fa565b61364981600860008581526020019081526020016000205461423f90919063ffffffff16565b6008600084815260200190815260200160002081905550505050565b600033905090565b8060039080519060200190613683929190614d93565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561370d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061517a6021913960400191505060405180910390fd5b8151835114613767576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151526028913960400191505060405180910390fd5b6000613771613665565b905061378281600087878787613a31565b60005b845181101561388b57613817600160008784815181106137a157fe5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485838151811061380157fe5b60200260200101516139a990919063ffffffff16565b6001600087848151811061382757fe5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050613785565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561393c578082015181840152602081019050613921565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561397e578082015181840152602081019050613963565b5050505090500194505050505060405180910390a46139a281600087878787613b07565b5050505050565b600080828401905083811015613a27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613a3f8686868686866147ad565b505050505050565b6000838311158290613af4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ab9578082015181840152602081019050613a9e565b50505050905090810190601f168015613ae65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b613b268473ffffffffffffffffffffffffffffffffffffffff16614821565b15613e8e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015613bde578082015181840152602081019050613bc3565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015613c20578082015181840152602081019050613c05565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613c5f578082015181840152602081019050613c44565b50505050905090810190601f168015613c8c5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015613cb157600080fd5b505af1925050508015613ce557506040513d6020811015613cd157600080fd5b810190808051906020019092919050505060015b613def57613cf1614e4e565b80613cfc5750613d9e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d63578082015181840152602081019050613d48565b50505050905090810190601f168015613d905780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180614f056034913960400191505060405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f396028913960400191505060405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061517a6021913960400191505060405180910390fd5b6000613f26613665565b9050613f4781600087613f388861437d565b613f418861437d565b87613a31565b613faa836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a990919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4614092816000878787876143ed565b5050505050565b600460149054906101000a900460ff1661411b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600460146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61415f613665565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b614194613665565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806141da57506141d9836141d4613665565b612fff565b5b61422f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150336029913960400191505060405180910390fd5b61423a838383614834565b505050565b600061428183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a47565b905092915050565b600460149054906101000a900460ff161561430c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600460146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614350613665565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b606080600167ffffffffffffffff8111801561439857600080fd5b506040519080825280602002602001820160405280156143c75781602001602082028036833780820191505090505b50905082816000815181106143d857fe5b60200260200101818152505080915050919050565b61440c8473ffffffffffffffffffffffffffffffffffffffff16614821565b156146f2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156144c55780820151818401526020810190506144aa565b50505050905090810190601f1680156144f25780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561451557600080fd5b505af192505050801561454957506040513d602081101561453557600080fd5b810190808051906020019092919050505060015b61465357614555614e4e565b806145605750614602565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145c75780820151818401526020810190506145ac565b50505050905090810190601f1680156145f45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180614f056034913960400191505060405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146146f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f396028913960400191505060405180910390fd5b505b505050505050565b614702613665565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480614748575061474783614742613665565b612fff565b5b61479d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150336029913960400191505060405180910390fd5b6147a8838383614b6f565b505050565b6147bb868686868686614d8b565b6147c3612763565b15614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615007602c913960400191505060405180910390fd5b505050505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156148ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150b36023913960400191505060405180910390fd5b8051825114614914576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151526028913960400191505060405180910390fd5b600061491e613665565b905061493e81856000868660405180602001604052806000815250613a31565b60005b8351811015614a61576149ed83828151811061495957fe5b6020026020010151604051806060016040528060248152602001614fe3602491396001600088868151811061498a57fe5b6020026020010151815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a479092919063ffffffff16565b600160008684815181106149fd57fe5b6020026020010151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050614941565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015614b12578082015181840152602081019050614af7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614b54578082015181840152602081019050614b39565b5050505090500194505050505060405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614bf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150b36023913960400191505060405180910390fd5b6000614bff613665565b9050614c2f81856000614c118761437d565b614c1a8761437d565b60405180602001604052806000815250613a31565b614cac82604051806060016040528060248152602001614fe3602491396001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a479092919063ffffffff16565b6001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a450505050565b505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614dd457805160ff1916838001178555614e02565b82800160010185558215614e02579182015b82811115614e01578251825591602001919060010190614de6565b5b509050614e0f9190614e13565b5090565b5b80821115614e2c576000816000905550600101614e14565b5090565b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015614e5e57614f01565b60046000803e614e6f600051614e41565b6308c379a08114614e805750614f01565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715614eac57505050614f01565b808201805167ffffffffffffffff811115614ecb575050505050614f01565b8060208301013d8501811115614ee657505050505050614f01565b614eef82614e30565b60208401016040528296505050505050505b9056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135355061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a2646970667358221220e71f401b45ed3fde01ff369b468ec029122ddf2fa70454b0221eb703469a87b264736f6c634300060c0033697066733a2f2f697066732f516d50456477706e726e715a6d355875637261646750367539634b556942746d524c6b7366614a595263336f416b2f7b69647d2e6a736f6e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000c2884de64ceff15211bb884a1e84f5aead9fdc7c0000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c000000000000000000000000000000000000000000000000000000000000001b54414d4147204163636573736f7279204e69465479676f7463686900000000000000000000000000000000000000000000000000000000000000000000000003544d410000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101d95760003560e01c80636b20c45411610104578063a22cb465116100a2578063e985e9c511610071578063e985e9c5146111d6578063f242432a14611250578063f2fde38b1461135f578063f5298aca146113a3576101d9565b8063a22cb465146110ce578063bc99d8a81461111e578063bd85b03914611160578063c92aecc4146111a2576101d9565b80638456cb59116100de5780638456cb5914610fa95780638da5cb5b14610fb3578063957aee7b14610fe757806395d89b411461104b576101d9565b80636b20c45414610d44578063715018a614610eb0578063731133e914610eba576101d9565b80632693ebf21161017c5780633f4ba83a1161014b5780633f4ba83a14610b6f57806343d726d614610b795780634e1273f414610b835780635c975abb14610d24576101d9565b80632693ebf2146106e55780632eb2c2d61461072757806330772d471461094a5780633e614b7614610982576101d9565b806306fdde03116101b857806306fdde031461035e5780630e89341c146103e15780631f7fdffa1461048857806320e4506f1461068b576101d9565b8062fdd58e146101de57806301ffc9a71461024057806302fe5305146102a3575b600080fd5b61022a600480360360408110156101f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113fb565b6040518082815260200191505060405180910390f35b61028b6004803603602081101561025657600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506114db565b60405180821515815260200191505060405180910390f35b61035c600480360360208110156102b957600080fd5b81019080803590602001906401000000008111156102d657600080fd5b8201836020820111156102e857600080fd5b8035906020019184600183028401116401000000008311171561030a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611542565b005b610366611618565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103a657808201518184015260208101905061038b565b50505050905090810190601f1680156103d35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61040d600480360360208110156103f757600080fd5b81019080803590602001909291905050506116b6565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561044d578082015181840152602081019050610432565b50505050905090810190601f16801561047a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106896004803603608081101561049e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104db57600080fd5b8201836020820111156104ed57600080fd5b8035906020019184602083028401116401000000008311171561050f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561056f57600080fd5b82018360208201111561058157600080fd5b803590602001918460208302840111640100000000831117156105a357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561060357600080fd5b82018360208201111561061557600080fd5b8035906020019184600183028401116401000000008311171561063757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061175a565b005b6106e3600480360360608110156106a157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803515159060200190929190505050611a22565b005b610711600480360360208110156106fb57600080fd5b8101908080359060200190929190505050611b59565b6040518082815260200191505060405180910390f35b610948600480360360a081101561073d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561079a57600080fd5b8201836020820111156107ac57600080fd5b803590602001918460208302840111640100000000831117156107ce57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082e57600080fd5b82018360208201111561084057600080fd5b8035906020019184602083028401116401000000008311171561086257600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108c257600080fd5b8201836020820111156108d457600080fd5b803590602001918460018302840111640100000000831117156108f657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b71565b005b6109806004803603604081101561096057600080fd5b810190808035906020019092919080359060200190929190505050611ffc565b005b610b6d6004803603608081101561099857600080fd5b81019080803590602001906401000000008111156109b557600080fd5b8201836020820111156109c757600080fd5b803590602001918460208302840111640100000000831117156109e957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190640100000000811115610a5357600080fd5b820183602082011115610a6557600080fd5b80359060200191846020830284011164010000000083111715610a8757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ae757600080fd5b820183602082011115610af957600080fd5b80359060200191846001830284011164010000000083111715610b1b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120e2565b005b610b776123ae565b005b610b81612482565b005b610ccd60048036036040811015610b9957600080fd5b8101908080359060200190640100000000811115610bb657600080fd5b820183602082011115610bc857600080fd5b80359060200191846020830284011164010000000083111715610bea57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b80359060200191846020830284011164010000000083111715610c7e57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050612571565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d10578082015181840152602081019050610cf5565b505050509050019250505060405180910390f35b610d2c612763565b60405180821515815260200191505060405180910390f35b610eae60048036036060811015610d5a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610d9757600080fd5b820183602082011115610da957600080fd5b80359060200191846020830284011164010000000083111715610dcb57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610e2b57600080fd5b820183602082011115610e3d57600080fd5b80359060200191846020830284011164010000000083111715610e5f57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929050505061277a565b005b610eb861281a565b005b610fa760048036036080811015610ed057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610f2157600080fd5b820183602082011115610f3357600080fd5b80359060200191846001830284011164010000000083111715610f5557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506129a5565b005b610fb1612c07565b005b610fbb612cdb565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61103360048036036040811015610ffd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612d05565b60405180821515815260200191505060405180910390f35b611053612d6d565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611093578082015181840152602081019050611078565b50505050905090810190601f1680156110c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61111c600480360360408110156110e457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612e0b565b005b61114a6004803603602081101561113457600080fd5b8101908080359060200190929190505050612fa4565b6040518082815260200191505060405180910390f35b61118c6004803603602081101561117657600080fd5b8101908080359060200190929190505050612fbc565b6040518082815260200191505060405180910390f35b6111aa612fd9565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611238600480360360408110156111ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612fff565b60405180821515815260200191505060405180910390f35b61135d600480360360a081101561126657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156112d757600080fd5b8201836020820111156112e957600080fd5b8035906020019184600183028401116401000000008311171561130b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613093565b005b6113a16004803603602081101561137557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613408565b005b6113f9600480360360608110156113b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613618565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614f61602b913960400191505060405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b61154a613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461160c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6116158161366d565b50565b60068054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116ae5780601f10611683576101008083540402835291602001916116ae565b820191906000526020600020905b81548152906001019060200180831161169157829003601f168201915b505050505081565b606060038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561174e5780601f106117235761010080835404028352916020019161174e565b820191906000526020600020905b81548152906001019060200180831161173157829003601f168201915b50505050509050919050565b60005a905061176b85858585613687565b60005b84518110156119285761177f613665565b73ffffffffffffffffffffffffffffffffffffffff1661179d612cdb565b73ffffffffffffffffffffffffffffffffffffffff1614806118335750600960006117c6613665565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086838151811061180e57fe5b6020026020010151815260200190815260200160002060009054906101000a900460ff165b6118a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f7420617070726f76656420746f206d696e7400000000000000000000000081525060200191505060405180910390fd5b6118f18482815181106118b457fe5b6020026020010151600860008885815181106118cc57fe5b60200260200101518152602001908152602001600020546139a990919063ffffffff16565b6008600087848151811061190157fe5b6020026020010151815260200190815260200160002081905550808060010191505061176e565b506000803690506010025a836152080103019050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a85018161198a57fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156119de57600080fd5b505af11580156119f2573d6000803e3d6000fd5b505050506040513d6020811015611a0857600080fd5b810190808051906020019092919050505050505050505050565b611a2a613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60086020528060005260406000206000915090505481565b8151835114611bcb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151526028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061505c6025913960400191505060405180910390fd5b611c59613665565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c9f5750611c9e85611c99613665565b612fff565b5b611cf4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806150816032913960400191505060405180910390fd5b6000611cfe613665565b9050611d0e818787878787613a31565b60005b8451811015611edf576000858281518110611d2857fe5b602002602001015190506000858381518110611d4057fe5b60200260200101519050611dc7816040518060600160405280602a81526020016150d6602a91396001600086815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a479092919063ffffffff16565b6001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611e7e816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a990919063ffffffff16565b6001600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050806001019050611d11565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015611f8f578082015181840152602081019050611f74565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015611fd1578082015181840152602081019050611fb6565b5050505090500194505050505060405180910390a4611ff4818787878787613b07565b505050505050565b612004613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a6000848152602001908152602001600020819055505050565b60005a90506120ef613665565b73ffffffffffffffffffffffffffffffffffffffff1661210d612cdb565b73ffffffffffffffffffffffffffffffffffffffff161480612190575060096000612136613665565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff165b612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f7420617070726f76656420746f206d696e7400000000000000000000000081525060200191505060405180910390fd5b6000805b86518110156122765761224187828151811061221e57fe5b60200260200101518787848151811061223357fe5b602002602001015187613e96565b61226785828151811061225057fe5b6020026020010151836139a990919063ffffffff16565b91508080600101915050612206565b5061229d8160086000888152602001908152602001600020546139a990919063ffffffff16565b6008600087815260200190815260200160002081905550506000803690506010025a836152080103019050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a85018161231657fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561236a57600080fd5b505af115801561237e573d6000803e3d6000fd5b505050506040513d602081101561239457600080fd5b810190808051906020019092919050505050505050505050565b6123b6613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612480614099565b565b61248a613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461254c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000612556612cdb565b90508073ffffffffffffffffffffffffffffffffffffffff16ff5b606081518351146125cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806151296029913960400191505060405180910390fd5b6060835167ffffffffffffffff811180156125e757600080fd5b506040519080825280602002602001820160405280156126165781602001602082028036833780820191505090505b50905060005b845181101561275857600073ffffffffffffffffffffffffffffffffffffffff1685828151811061264957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156126be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180614f8c6031913960400191505060405180910390fd5b600160008583815181106126ce57fe5b6020026020010151815260200190815260200160002060008683815181106126f257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482828151811061274157fe5b60200260200101818152505080600101905061261c565b508091505092915050565b6000600460149054906101000a900460ff16905090565b61278583838361418c565b60005b8251811015612814576127dd8282815181106127a057fe5b6020026020010151600860008685815181106127b857fe5b602002602001015181526020019081526020016000205461423f90919063ffffffff16565b600860008584815181106127ed57fe5b60200260200101518152602001908152602001600020819055508080600101915050612788565b50505050565b612822613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60005a90506129b2613665565b73ffffffffffffffffffffffffffffffffffffffff166129d0612cdb565b73ffffffffffffffffffffffffffffffffffffffff161480612a535750600960006129f9613665565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060009054906101000a900460ff165b612ac5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4e6f7420617070726f76656420746f206d696e7400000000000000000000000081525060200191505060405180910390fd5b612ad185858585613e96565b612af78360086000878152602001908152602001600020546139a990919063ffffffff16565b60086000868152602001908152602001600020819055506000803690506010025a836152080103019050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663079d229f3361a3db61374a850181612b6f57fe5b046040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612bc357600080fd5b505af1158015612bd7573d6000803e3d6000fd5b505050506040513d6020811015612bed57600080fd5b810190808051906020019092919050505050505050505050565b612c0f613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612cd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b612cd9614289565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002060009054906101000a900460ff16905092915050565b60078054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e035780601f10612dd857610100808354040283529160200191612e03565b820191906000526020600020905b815481529060010190602001808311612de657829003601f168201915b505050505081565b8173ffffffffffffffffffffffffffffffffffffffff16612e2a613665565b73ffffffffffffffffffffffffffffffffffffffff161415612e97576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806151006029913960400191505060405180910390fd5b8060026000612ea4613665565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612f51613665565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b600a6020528060005260406000206000915090505481565b600060086000838152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061505c6025913960400191505060405180910390fd5b613121613665565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480613167575061316685613161613665565b612fff565b5b6131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150336029913960400191505060405180910390fd5b60006131c6613665565b90506131e68187876131d78861437d565b6131e08861437d565b87613a31565b613263836040518060600160405280602a81526020016150d6602a91396001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a479092919063ffffffff16565b6001600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331a836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a990919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a46134008187878787876143ed565b505050505050565b613410613665565b73ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146134d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613558576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180614fbd6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6136238383836146fa565b61364981600860008581526020019081526020016000205461423f90919063ffffffff16565b6008600084815260200190815260200160002081905550505050565b600033905090565b8060039080519060200190613683929190614d93565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561370d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061517a6021913960400191505060405180910390fd5b8151835114613767576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151526028913960400191505060405180910390fd5b6000613771613665565b905061378281600087878787613a31565b60005b845181101561388b57613817600160008784815181106137a157fe5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205485838151811061380157fe5b60200260200101516139a990919063ffffffff16565b6001600087848151811061382757fe5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050613785565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561393c578082015181840152602081019050613921565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561397e578082015181840152602081019050613963565b5050505090500194505050505060405180910390a46139a281600087878787613b07565b5050505050565b600080828401905083811015613a27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b613a3f8686868686866147ad565b505050505050565b6000838311158290613af4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613ab9578082015181840152602081019050613a9e565b50505050905090810190601f168015613ae65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b613b268473ffffffffffffffffffffffffffffffffffffffff16614821565b15613e8e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015613bde578082015181840152602081019050613bc3565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015613c20578082015181840152602081019050613c05565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015613c5f578082015181840152602081019050613c44565b50505050905090810190601f168015613c8c5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015613cb157600080fd5b505af1925050508015613ce557506040513d6020811015613cd157600080fd5b810190808051906020019092919050505060015b613def57613cf1614e4e565b80613cfc5750613d9e565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d63578082015181840152602081019050613d48565b50505050905090810190601f168015613d905780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180614f056034913960400191505060405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613e8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f396028913960400191505060405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061517a6021913960400191505060405180910390fd5b6000613f26613665565b9050613f4781600087613f388861437d565b613f418861437d565b87613a31565b613faa836001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139a990919063ffffffff16565b6001600086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051808381526020018281526020019250505060405180910390a4614092816000878787876143ed565b5050505050565b600460149054906101000a900460ff1661411b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6000600460146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61415f613665565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b614194613665565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806141da57506141d9836141d4613665565b612fff565b5b61422f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150336029913960400191505060405180910390fd5b61423a838383614834565b505050565b600061428183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a47565b905092915050565b600460149054906101000a900460ff161561430c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b6001600460146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614350613665565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b606080600167ffffffffffffffff8111801561439857600080fd5b506040519080825280602002602001820160405280156143c75781602001602082028036833780820191505090505b50905082816000815181106143d857fe5b60200260200101818152505080915050919050565b61440c8473ffffffffffffffffffffffffffffffffffffffff16614821565b156146f2578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156144c55780820151818401526020810190506144aa565b50505050905090810190601f1680156144f25780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561451557600080fd5b505af192505050801561454957506040513d602081101561453557600080fd5b810190808051906020019092919050505060015b61465357614555614e4e565b806145605750614602565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156145c75780820151818401526020810190506145ac565b50505050905090810190601f1680156145f45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180614f056034913960400191505060405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146146f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614f396028913960400191505060405180910390fd5b505b505050505050565b614702613665565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480614748575061474783614742613665565b612fff565b5b61479d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806150336029913960400191505060405180910390fd5b6147a8838383614b6f565b505050565b6147bb868686868686614d8b565b6147c3612763565b15614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615007602c913960400191505060405180910390fd5b505050505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156148ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150b36023913960400191505060405180910390fd5b8051825114614914576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806151526028913960400191505060405180910390fd5b600061491e613665565b905061493e81856000868660405180602001604052806000815250613a31565b60005b8351811015614a61576149ed83828151811061495957fe5b6020026020010151604051806060016040528060248152602001614fe3602491396001600088868151811061498a57fe5b6020026020010151815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a479092919063ffffffff16565b600160008684815181106149fd57fe5b6020026020010151815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080600101915050614941565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015614b12578082015181840152602081019050614af7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614b54578082015181840152602081019050614b39565b5050505090500194505050505060405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614bf5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806150b36023913960400191505060405180910390fd5b6000614bff613665565b9050614c2f81856000614c118761437d565b614c1a8761437d565b60405180602001604052806000815250613a31565b614cac82604051806060016040528060248152602001614fe3602491396001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a479092919063ffffffff16565b6001600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a450505050565b505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614dd457805160ff1916838001178555614e02565b82800160010185558215614e02579182015b82811115614e01578251825591602001919060010190614de6565b5b509050614e0f9190614e13565b5090565b5b80821115614e2c576000816000905550600101614e14565b5090565b6000601f19601f8301169050919050565b60008160e01c9050919050565b600060443d1015614e5e57614f01565b60046000803e614e6f600051614e41565b6308c379a08114614e805750614f01565b60405160043d036004823e80513d602482011167ffffffffffffffff82111715614eac57505050614f01565b808201805167ffffffffffffffff811115614ecb575050505050614f01565b8060208301013d8501811115614ee657505050505050614f01565b614eef82614e30565b60208401016040528296505050505050505b9056fe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73455243313135353a2062616c616e636520717565727920666f7220746865207a65726f2061646472657373455243313135353a2062617463682062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135355061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368455243313135353a206d696e7420746f20746865207a65726f2061646472657373a2646970667358221220e71f401b45ed3fde01ff369b468ec029122ddf2fa70454b0221eb703469a87b264736f6c634300060c0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000c2884de64ceff15211bb884a1e84f5aead9fdc7c0000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c000000000000000000000000000000000000000000000000000000000000001b54414d4147204163636573736f7279204e69465479676f7463686900000000000000000000000000000000000000000000000000000000000000000000000003544d410000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): TAMAG Accessory NiFTygotchi
Arg [1] : _symbol (string): TMA
Arg [2] : owner (address): 0xC2884De64ceFF15211Bb884a1E84F5aeaD9fdc7c
Arg [3] : _chi (address): 0x0000000000004946c0e9F43F4Dee607b0eF1fA1c

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000c2884de64ceff15211bb884a1e84f5aead9fdc7c
Arg [3] : 0000000000000000000000000000000000004946c0e9f43f4dee607b0ef1fa1c
Arg [4] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [5] : 54414d4147204163636573736f7279204e69465479676f746368690000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 544d410000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43873:3627:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24985:223;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15326:142;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44565:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44124:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24735:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45920:414;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44856:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44181:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27697:1220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46896:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45447:461;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44492:65;;;:::i;:::-;;47017:117;;;:::i;:::-;;25374:634;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38660:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;46537:298;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42502:148;;;:::i;:::-;;45125:314;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44425:61;;;:::i;:::-;;41860:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44995:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44149:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26081:311;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46843:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44659:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43386:15;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26464:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26696:924;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42805:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46342:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24985:223;25063:7;25110:1;25091:21;;:7;:21;;;;25083:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25178:9;:13;25188:2;25178:13;;;;;;;;;;;:22;25192:7;25178:22;;;;;;;;;;;;;;;;25171:29;;24985:223;;;;:::o;15326:142::-;15403:4;15427:20;:33;15448:11;15427:33;;;;;;;;;;;;;;;;;;;;;;;;;;;15420:40;;15326:142;;;:::o;44565:82::-;42082:12;:10;:12::i;:::-;42072:22;;:6;;;;;;;;;;;:22;;;42064:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44627:12:::1;44635:3;44627:7;:12::i;:::-;44565:82:::0;:::o;44124:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24735:99::-;24789:13;24822:4;24815:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24735:99;;;:::o;45920:414::-;43442:16;43461:9;43442:28;;46047:34:::1;46058:2;46062:3;46067:7;46076:4;46047:10;:34::i;:::-;46097:9;46092:235;46116:3;:10;46112:1;:14;46092:235;;;46166:12;:10;:12::i;:::-;46155:23;;:7;:5;:7::i;:::-;:23;;;:63;;;;46182:14;:28;46197:12;:10;:12::i;:::-;46182:28;;;;;;;;;;;;;;;:36;46211:3;46215:1;46211:6;;;;;;;;;;;;;;46182:36;;;;;;;;;;;;;;;;;;;;;46155:63;46147:96;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;46280:35;46304:7;46312:1;46304:10;;;;;;;;;;;;;;46280:11;:19;46292:3;46296:1;46292:6;;;;;;;;;;;;;;46280:19;;;;;;;;;;;;:23;;:35;;;;:::i;:::-;46258:11;:19;46270:3;46274:1;46270:6;;;;;;;;;;;;;;46258:19;;;;;;;;;;;:57;;;;46128:3;;;;;;;46092:235;;;;43493:16:::0;43573:8;;:15;;43543:2;:45;43531:9;43520:8;43512:5;:16;:28;:76;43493:95;;43644:3;;;;;;;;;;;:16;;;43661:10;43694:5;43685;43674:8;:16;43673:26;;;;;;43644:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45920:414;;;;;;:::o;44856:133::-;42082:12;:10;:12::i;:::-;42072:22;;:6;;;;;;;;;;;:22;;;42064:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44973:8:::1;44949:14;:17;44964:1;44949:17;;;;;;;;;;;;;;;:21;44967:2;44949:21;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;44856:133:::0;;;:::o;44181:47::-;;;;;;;;;;;;;;;;;:::o;27697:1220::-;27962:7;:14;27948:3;:10;:28;27940:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28054:1;28040:16;;:2;:16;;;;28032:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28139:12;:10;:12::i;:::-;28131:20;;:4;:20;;;:60;;;;28155:36;28172:4;28178:12;:10;:12::i;:::-;28155:16;:36::i;:::-;28131:60;28109:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28282:16;28301:12;:10;:12::i;:::-;28282:31;;28326:60;28347:8;28357:4;28363:2;28367:3;28372:7;28381:4;28326:20;:60::i;:::-;28404:9;28399:358;28423:3;:10;28419:1;:14;28399:358;;;28455:10;28468:3;28472:1;28468:6;;;;;;;;;;;;;;28455:19;;28489:14;28506:7;28514:1;28506:10;;;;;;;;;;;;;;28489:27;;28555:126;28597:6;28555:126;;;;;;;;;;;;;;;;;:9;:13;28565:2;28555:13;;;;;;;;;;;:19;28569:4;28555:19;;;;;;;;;;;;;;;;:23;;:126;;;;;:::i;:::-;28533:9;:13;28543:2;28533:13;;;;;;;;;;;:19;28547:4;28533:19;;;;;;;;;;;;;;;:148;;;;28716:29;28738:6;28716:9;:13;28726:2;28716:13;;;;;;;;;;;:17;28730:2;28716:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;28696:9;:13;28706:2;28696:13;;;;;;;;;;;:17;28710:2;28696:17;;;;;;;;;;;;;;;:49;;;;28399:358;;28435:3;;;;;28399:358;;;;28804:2;28774:47;;28798:4;28774:47;;28788:8;28774:47;;;28808:3;28813:7;28774:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28834:75;28870:8;28880:4;28886:2;28890:3;28895:7;28904:4;28834:35;:75::i;:::-;27697:1220;;;;;;:::o;46896:115::-;42082:12;:10;:12::i;:::-;42072:22;;:6;;;;;;;;;;;:22;;;42064:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47000:3:::1;46977:11;:20;46989:7;46977:20;;;;;;;;;;;:26;;;;46896:115:::0;;:::o;45447:461::-;43442:16;43461:9;43442:28;;45598:12:::1;:10;:12::i;:::-;45587:23;;:7;:5;:7::i;:::-;:23;;;:59;;;;45614:14;:28;45629:12;:10;:12::i;:::-;45614:28;;;;;;;;;;;;;;;:32;45643:2;45614:32;;;;;;;;;;;;;;;;;;;;;45587:59;45579:92;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;45682:11;45713:9:::0;45708:140:::1;45732:2;:9;45728:1;:13;45708:140;;;45762:34;45768:2;45771:1;45768:5;;;;;;;;;;;;;;45775:2;45779:7;45787:1;45779:10;;;;;;;;;;;;;;45791:4;45762:5;:34::i;:::-;45817:19;45825:7;45833:1;45825:10;;;;;;;;;;;;;;45817:3;:7;;:19;;;;:::i;:::-;45811:25;;45743:3;;;;;;;45708:140;;;;45876:24;45896:3;45876:11;:15;45888:2;45876:15;;;;;;;;;;;;:19;;:24;;;;:::i;:::-;45858:11;:15;45870:2;45858:15;;;;;;;;;;;:42;;;;43481:1;43493:16:::0;43573:8;;:15;;43543:2;:45;43531:9;43520:8;43512:5;:16;:28;:76;43493:95;;43644:3;;;;;;;;;;;:16;;;43661:10;43694:5;43685;43674:8;:16;43673:26;;;;;;43644:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45447:461;;;;;;:::o;44492:65::-;42082:12;:10;:12::i;:::-;42072:22;;:6;;;;;;;;;;;:22;;;42064:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44539:10:::1;:8;:10::i;:::-;44492:65::o:0;47017:117::-;42082:12;:10;:12::i;:::-;42072:22;;:6;;;;;;;;;;;:22;;;42064:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47063:17:::1;47091:7;:5;:7::i;:::-;47063:36;;47123:1;47110:15;;;25374:634:::0;25538:16;25599:3;:10;25580:8;:15;:29;25572:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25668:30;25715:8;:15;25701:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25668:63;;25749:9;25744:224;25768:8;:15;25764:1;:19;25744:224;;;25836:1;25813:25;;:8;25822:1;25813:11;;;;;;;;;;;;;;:25;;;;25805:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25926:9;:17;25936:3;25940:1;25936:6;;;;;;;;;;;;;;25926:17;;;;;;;;;;;:30;25944:8;25953:1;25944:11;;;;;;;;;;;;;;25926:30;;;;;;;;;;;;;;;;25907:13;25921:1;25907:16;;;;;;;;;;;;;:49;;;;;25785:3;;;;;25744:224;;;;25987:13;25980:20;;;25374:634;;;;:::o;38660:78::-;38699:4;38723:7;;;;;;;;;;;38716:14;;38660:78;:::o;46537:298::-;46647:47;46673:7;46682:3;46687:6;46647:25;:47::i;:::-;46710:9;46705:123;46729:3;:10;46725:1;:14;46705:123;;;46782:34;46806:6;46813:1;46806:9;;;;;;;;;;;;;;46782:11;:19;46794:3;46798:1;46794:6;;;;;;;;;;;;;;46782:19;;;;;;;;;;;;:23;;:34;;;;:::i;:::-;46760:11;:19;46772:3;46776:1;46772:6;;;;;;;;;;;;;;46760:19;;;;;;;;;;;:56;;;;46741:3;;;;;;;46705:123;;;;46537:298;;;:::o;42502:148::-;42082:12;:10;:12::i;:::-;42072:22;;:6;;;;;;;;;;;:22;;;42064:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42609:1:::1;42572:40;;42593:6;;;;;;;;;;;42572:40;;;;;;;;;;;;42640:1;42623:6;;:19;;;;;;;;;;;;;;;;;;42502:148::o:0;45125:314::-;43442:16;43461:9;43442:28;;45252:12:::1;:10;:12::i;:::-;45241:23;;:7;:5;:7::i;:::-;:23;;;:60;;;;45268:14;:28;45283:12;:10;:12::i;:::-;45268:28;;;;;;;;;;;;;;;:33;45297:3;45268:33;;;;;;;;;;;;;;;;;;;;;45241:60;45233:93;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;45337:33;45343:3;45348;45353:9;45364:5;45337;:33::i;:::-;45400:31;45421:9;45400:11;:16;45412:3;45400:16;;;;;;;;;;;;:20;;:31;;;;:::i;:::-;45381:11;:16;45393:3;45381:16;;;;;;;;;;;:50;;;;43493:16:::0;43573:8;;:15;;43543:2;:45;43531:9;43520:8;43512:5;:16;:28;:76;43493:95;;43644:3;;;;;;;;;;;:16;;;43661:10;43694:5;43685;43674:8;:16;43673:26;;;;;;43644:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45125:314;;;;;;:::o;44425:61::-;42082:12;:10;:12::i;:::-;42072:22;;:6;;;;;;;;;;;:22;;;42064:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44470:8:::1;:6;:8::i;:::-;44425:61::o:0;41860:79::-;41898:7;41925:6;;;;;;;;;;;41918:13;;41860:79;:::o;44995:122::-;45065:4;45088:14;:17;45103:1;45088:17;;;;;;;;;;;;;;;:21;45106:2;45088:21;;;;;;;;;;;;;;;;;;;;;45081:28;;44995:122;;;;:::o;44149:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26081:311::-;26200:8;26184:24;;:12;:10;:12::i;:::-;:24;;;;26176:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26312:8;26267:18;:32;26286:12;:10;:12::i;:::-;26267:32;;;;;;;;;;;;;;;:42;26300:8;26267:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26365:8;26336:48;;26351:12;:10;:12::i;:::-;26336:48;;;26375:8;26336:48;;;;;;;;;;;;;;;;;;;;26081:311;;:::o;46843:46::-;;;;;;;;;;;;;;;;;:::o;44659:122::-;44730:7;44757:11;:16;44769:3;44757:16;;;;;;;;;;;;44750:23;;44659:122;;;:::o;43386:15::-;;;;;;;;;;;;;:::o;26464:160::-;26555:4;26579:18;:27;26598:7;26579:27;;;;;;;;;;;;;;;:37;26607:8;26579:37;;;;;;;;;;;;;;;;;;;;;;;;;26572:44;;26464:160;;;;:::o;26696:924::-;26936:1;26922:16;;:2;:16;;;;26914:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27021:12;:10;:12::i;:::-;27013:20;;:4;:20;;;:60;;;;27037:36;27054:4;27060:12;:10;:12::i;:::-;27037:16;:36::i;:::-;27013:60;26991:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27155:16;27174:12;:10;:12::i;:::-;27155:31;;27199:96;27220:8;27230:4;27236:2;27240:21;27258:2;27240:17;:21::i;:::-;27263:25;27281:6;27263:17;:25::i;:::-;27290:4;27199:20;:96::i;:::-;27330:77;27354:6;27330:77;;;;;;;;;;;;;;;;;:9;:13;27340:2;27330:13;;;;;;;;;;;:19;27344:4;27330:19;;;;;;;;;;;;;;;;:23;;:77;;;;;:::i;:::-;27308:9;:13;27318:2;27308:13;;;;;;;;;;;:19;27322:4;27308:19;;;;;;;;;;;;;;;:99;;;;27438:29;27460:6;27438:9;:13;27448:2;27438:13;;;;;;;;;;;:17;27452:2;27438:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;27418:9;:13;27428:2;27418:13;;;;;;;;;;;:17;27432:2;27418:17;;;;;;;;;;;;;;;:49;;;;27516:2;27485:46;;27510:4;27485:46;;27500:8;27485:46;;;27520:2;27524:6;27485:46;;;;;;;;;;;;;;;;;;;;;;;;27544:68;27575:8;27585:4;27591:2;27595;27599:6;27607:4;27544:30;:68::i;:::-;26696:924;;;;;;:::o;42805:244::-;42082:12;:10;:12::i;:::-;42072:22;;:6;;;;;;;;;;;:22;;;42064:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42914:1:::1;42894:22;;:8;:22;;;;42886:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43004:8;42975:38;;42996:6;;;;;;;;;;;42975:38;;;;;;;;;;;;43033:8;43024:6;;:17;;;;;;;;;;;;;;;;;;42805:244:::0;:::o;46342:187::-;46426:40;46447:7;46456:2;46460:5;46426:20;:40::i;:::-;46495:26;46515:5;46495:11;:15;46507:2;46495:15;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;46477:11;:15;46489:2;46477:15;;;;;;;;;;;:44;;;;46342:187;;;:::o;13972:106::-;14025:15;14060:10;14053:17;;13972:106;:::o;29761:88::-;29835:6;29828:4;:13;;;;;;;;;;;;:::i;:::-;;29761:88;:::o;31184:715::-;31333:1;31319:16;;:2;:16;;;;31311:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31406:7;:14;31392:3;:10;:28;31384:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31478:16;31497:12;:10;:12::i;:::-;31478:31;;31522:66;31543:8;31561:1;31565:2;31569:3;31574:7;31583:4;31522:20;:66::i;:::-;31606:6;31601:126;31622:3;:10;31618:1;:14;31601:126;;;31678:37;31693:9;:17;31703:3;31707:1;31703:6;;;;;;;;;;;;;;31693:17;;;;;;;;;;;:21;31711:2;31693:21;;;;;;;;;;;;;;;;31678:7;31686:1;31678:10;;;;;;;;;;;;;;:14;;:37;;;;:::i;:::-;31654:9;:17;31664:3;31668:1;31664:6;;;;;;;;;;;;;;31654:17;;;;;;;;;;;:21;31672:2;31654:21;;;;;;;;;;;;;;;:61;;;;31634:3;;;;;;;31601:126;;;;31780:2;31744:53;;31776:1;31744:53;;31758:8;31744:53;;;31784:3;31789:7;31744:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31810:81;31846:8;31864:1;31868:2;31872:3;31877:7;31886:4;31810:35;:81::i;:::-;31184:715;;;;;:::o;956:181::-;1014:7;1034:9;1050:1;1046;:5;1034:17;;1075:1;1070;:6;;1062:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1128:1;1121:8;;;956:181;;;;:::o;47144:353::-;47423:66;47450:8;47460:4;47466:2;47470:3;47475:7;47484:4;47423:26;:66::i;:::-;47144:353;;;;;;:::o;1859:192::-;1945:7;1978:1;1973;:6;;1981:12;1965:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2005:9;2021:1;2017;:5;2005:17;;2042:1;2035:8;;;1859:192;;;;;:::o;35603:799::-;35857:15;:2;:13;;;:15::i;:::-;35853:542;;;35910:2;35893:43;;;35937:8;35947:4;35953:3;35958:7;35967:4;35893:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35889:495;;;;:::i;:::-;;;;;;;;36257:6;36250:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35889:495;36306:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35889:495;36034:52;;;36022:64;;;:8;:64;;;;36018:163;;36111:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36018:163;35973:223;35853:542;35603:799;;;;;;:::o;30245:583::-;30379:1;30360:21;;:7;:21;;;;30352:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30432:16;30451:12;:10;:12::i;:::-;30432:31;;30476:107;30497:8;30515:1;30519:7;30528:21;30546:2;30528:17;:21::i;:::-;30551:25;30569:6;30551:17;:25::i;:::-;30578:4;30476:20;:107::i;:::-;30621:34;30648:6;30621:9;:13;30631:2;30621:13;;;;;;;;;;;:22;30635:7;30621:22;;;;;;;;;;;;;;;;:26;;:34;;;;:::i;:::-;30596:9;:13;30606:2;30596:13;;;;;;;;;;;:22;30610:7;30596:22;;;;;;;;;;;;;;;:59;;;;30708:7;30671:57;;30704:1;30671:57;;30686:8;30671:57;;;30717:2;30721:6;30671:57;;;;;;;;;;;;;;;;;;;;;;;;30741:79;30772:8;30790:1;30794:7;30803:2;30807:6;30815:4;30741:30;:79::i;:::-;30245:583;;;;;:::o;39709:120::-;39254:7;;;;;;;;;;;39246:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39778:5:::1;39768:7;;:15;;;;;;;;;;;;;;;;;;39799:22;39808:12;:10;:12::i;:::-;39799:22;;;;;;;;;;;;;;;;;;;;39709:120::o:0;37249:319::-;37391:12;:10;:12::i;:::-;37380:23;;:7;:23;;;:66;;;;37407:39;37424:7;37433:12;:10;:12::i;:::-;37407:16;:39::i;:::-;37380:66;37358:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37528:32;37539:7;37548:3;37553:6;37528:10;:32::i;:::-;37249:319;;;:::o;1420:136::-;1478:7;1505:43;1509:1;1512;1505:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1498:50;;1420:136;;;;:::o;39450:118::-;38978:7;;;;;;;;;;;38977:8;38969:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39520:4:::1;39510:7;;:14;;;;;;;;;;;;;;;;;;39540:20;39547:12;:10;:12::i;:::-;39540:20;;;;;;;;;;;;;;;;;;;;39450:118::o:0;36410:198::-;36476:16;36505:22;36544:1;36530:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36505:41;;36568:7;36557:5;36563:1;36557:8;;;;;;;;;;;;;:18;;;;;36595:5;36588:12;;;36410:198;;;:::o;34833:762::-;35062:15;:2;:13;;;:15::i;:::-;35058:530;;;35115:2;35098:38;;;35137:8;35147:4;35153:2;35157:6;35165:4;35098:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35094:483;;;;:::i;:::-;;;;;;;;35450:6;35443:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35094:483;35499:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35094:483;35232:47;;;35220:59;;;:8;:59;;;;35216:158;;35304:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35216:158;35171:218;35058:530;34833:762;;;;;;:::o;36954:287::-;37071:12;:10;:12::i;:::-;37060:23;;:7;:23;;;:66;;;;37087:39;37104:7;37113:12;:10;:12::i;:::-;37087:16;:39::i;:::-;37060:66;37038:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37208:25;37214:7;37223:2;37227:5;37208;:25::i;:::-;36954:287;;;:::o;40462:406::-;40715:66;40742:8;40752:4;40758:2;40762:3;40767:7;40776:4;40715:26;:66::i;:::-;40803:8;:6;:8::i;:::-;40802:9;40794:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40462:406;;;;;;:::o;16862:422::-;16922:4;17130:12;17241:7;17229:20;17221:28;;17275:1;17268:4;:8;17261:15;;;16862:422;;;:::o;32912:721::-;33052:1;33033:21;;:7;:21;;;;33025:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33127:7;:14;33113:3;:10;:28;33105:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33199:16;33218:12;:10;:12::i;:::-;33199:31;;33243:69;33264:8;33274:7;33291:1;33295:3;33300:7;33243:69;;;;;;;;;;;;:20;:69::i;:::-;33330:6;33325:225;33346:3;:10;33342:1;:14;33325:225;;;33407:131;33456:7;33464:1;33456:10;;;;;;;;;;;;;;33407:131;;;;;;;;;;;;;;;;;:9;:17;33417:3;33421:1;33417:6;;;;;;;;;;;;;;33407:17;;;;;;;;;;;:26;33425:7;33407:26;;;;;;;;;;;;;;;;:30;;:131;;;;;:::i;:::-;33378:9;:17;33388:3;33392:1;33388:6;;;;;;;;;;;;;;33378:17;;;;;;;;;;;:26;33396:7;33378:26;;;;;;;;;;;;;;;:160;;;;33358:3;;;;;;;33325:225;;;;33608:1;33567:58;;33591:7;33567:58;;33581:8;33567:58;;;33612:3;33617:7;33567:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32912:721;;;;:::o;32158:551::-;32273:1;32254:21;;:7;:21;;;;32246:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32328:16;32347:12;:10;:12::i;:::-;32328:31;;32372:105;32393:8;32403:7;32420:1;32424:21;32442:2;32424:17;:21::i;:::-;32447:25;32465:6;32447:17;:25::i;:::-;32372:105;;;;;;;;;;;;:20;:105::i;:::-;32515:111;32556:6;32515:111;;;;;;;;;;;;;;;;;:9;:13;32525:2;32515:13;;;;;;;;;;;:22;32529:7;32515:22;;;;;;;;;;;;;;;;:26;;:111;;;;;:::i;:::-;32490:9;:13;32500:2;32490:13;;;;;;;;;;;:22;32504:7;32490:22;;;;;;;;;;;;;;;:136;;;;32686:1;32644:57;;32669:7;32644:57;;32659:8;32644:57;;;32690:2;32694:6;32644:57;;;;;;;;;;;;;;;;;;;;;;;;32158:551;;;;:::o;34589:236::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;5:97::-;;93:2;89:7;84:2;77:5;73:14;69:28;59:38;;53:49;;;:::o;110:106::-;;200:5;195:3;191:15;169:37;;163:53;;;:::o;224:739::-;;297:4;279:16;276:26;273:2;;;305:5;;273:2;339:1;336;333;318:23;357:34;388:1;382:8;357:34;:::i;:::-;414:10;409:3;406:19;396:2;;429:5;;;396:2;460;454:9;514:1;496:16;492:24;489:1;483:4;468:49;543:4;537:11;624:16;617:4;609:6;605:17;602:39;576:18;568:6;565:30;556:91;553:2;;;655:5;;;;;553:2;693:6;687:4;683:17;725:3;719:10;748:18;740:6;737:30;734:2;;;770:5;;;;;;;734:2;814:6;807:4;802:3;798:14;794:27;847:16;841:4;837:27;832:3;829:36;826:2;;;868:5;;;;;;;;826:2;912:29;934:6;912:29;:::i;:::-;905:4;900:3;896:14;892:50;888:2;881:62;955:3;948:10;;267:696;;;;;;;;:::o

Swarm Source

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