ETH Price: $3,132.52 (-0.13%)

Token

Royal Fools (RF)
 

Overview

Max Total Supply

6,690 RF

Holders

2,280

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 RF
0x37b2C58C5A365d155DAe307e1Dc567c7116EED04
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Tragicomedy novel, a parody of modern gallant life, in the manner of medieval times. The plot of "Royal Fools" is based on the adventures of a troupe of itinerant artists performing in the provincial towns of the XIV century Europe. All are fictitious, any resemblances are coincidental.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RoyalFools

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-26
*/

/*
     ##### /##                                 ###
  ######  / ##                                  ###
 /#   /  /  ##                                   ##
/    /  /   ##                                   ##
    /  /    /                                    ##
   ## ##   /       /###   ##   ####      /###    ##
   ## ##  /       / ###  / ##    ###  / / ###  / ##
   ## ###/       /   ###/  ##     ###/ /   ###/  ##
   ## ##  ###   ##    ##   ##      ## ##    ##   ##
   ## ##    ##  ##    ##   ##      ## ##    ##   ##
   #  ##    ##  ##    ##   ##      ## ##    ##   ##
      /     ##  ##    ##   ##      ## ##    ##   ##
  /##/      ### ##    ##   ##      ## ##    /#   ##
 /  ####    ##   ######     #########  ####/ ##  ### /
/    ##     #     ####        #### ###  ###   ##  ##/
#                                   ###
 ##                          #####   ###
                           /#######  /#
                          /      ###/

                       ##### ##                 ###
                    ######  /### /               ###
                   /#   /  /  ##/                 ##
                  /    /  /    #                  ##
                      /  /                        ##
                     ## ##       /###     /###    ##       /###
                     ## ##      / ###  / / ###  / ##      / #### /
                     ## ###### /   ###/ /   ###/  ##     ##  ###/
                     ## ##### ##    ## ##    ##   ##    ####
                     ## ##    ##    ## ##    ##   ##      ###
                     #  ##    ##    ## ##    ##   ##        ###
                        #     ##    ## ##    ##   ##          ###
                    /####     ##    ## ##    ##   ##     /###  ##
                   /  #####    ######   ######    ### / / #### /
                  /    ###      ####     ####      ##/     ###/
                  #
                   ##
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

   /**
    * @dev Converts a `uint256` to its ASCII `string` decimal representation.
    */
   function toString(uint256 value) internal pure returns (string memory) {
      if (value == 0) {
         return "0";
      }
      uint256 temp = value;
      uint256 digits;
      while (temp != 0) {
         digits++;
         temp /= 10;
      }
      bytes memory buffer = new bytes(digits);
      while (value != 0) {
         digits -= 1;
         buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
         value /= 10;
      }
      return string(buffer);
   }

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

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

   /**
    * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
    */
   function toHexString(address addr) internal pure returns (string memory) {
      return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
   }
}

// File: Address.sol
pragma solidity ^0.8.0;

/**
 * @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 on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
        uint256 size;
        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");

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

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

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

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

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

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

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

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

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

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

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

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

// File: Context.sol
pragma solidity ^0.8.0;

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

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

// File: Ownable.sol
pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: IERC721Receiver.sol
pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: IERC165.sol
pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
   /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
   function supportsInterface(bytes4 interfaceId) external view returns(bool);
}

// File: ERC165.sol
pragma solidity ^0.8.0;

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

// File: IERC721.sol
pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: IERC721Enumerable.sol
pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

// File: IERC721Metadata.sol
pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: Pausable.sol
pragma solidity ^0.8.0;

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

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

    bool private _paused;

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

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

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

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

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        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: ERC721A.sol
pragma solidity ^0.8.0;

contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex = 1;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        return currentIndex;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), 'ERC721A: global index out of bounds');
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), 'ERC721A: owner index out of bounds');
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert('ERC721A: unable to get token of owner by index');
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        require(owner != address(0), 'ERC721A: balance query for the zero address');
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; curr--) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }

        revert('ERC721A: unable to determine the owner of token');
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token');

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, 'ERC721A: approval to current owner');

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            'ERC721A: approve caller is not owner nor approved for all'
        );

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        require(_exists(tokenId), 'ERC721A: approved query for nonexistent token');

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), 'ERC721A: approve to caller');

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        safeTransferFrom(from, to, tokenId, '');
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: transfer to non ERC721Receiver implementer'
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), 'ERC721A: mint to the zero address');
        require(quantity != 0, 'ERC721A: quantity must be greater than 0');

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe) {
                    require(
                        _checkOnERC721Received(address(0), to, updatedIndex, _data),
                        'ERC721A: transfer to non ERC721Receiver implementer'
                    );
                }

                updatedIndex++;
            }

            currentIndex = updatedIndex;
        }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, prevOwnership.addr);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert('ERC721A: transfer to non ERC721Receiver implementer');
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}




/*
███████████                          █████                                         ███
░░███░░░░░███                        ░░███                                         ░░░
 ░███    ░███   ██████   ██████    ███████  █████████████    ██████   ████████     ████   █████
 ░██████████   ███░░███ ░░░░░███  ███░░███ ░░███░░███░░███  ░░░░░███ ░░███░░███   ░░███  ███░░
 ░███░░░░░███ ░███ ░███  ███████ ░███ ░███  ░███ ░███ ░███   ███████  ░███ ░███    ░███ ░░█████
 ░███    ░███ ░███ ░███ ███░░███ ░███ ░███  ░███ ░███ ░███  ███░░███  ░███ ░███    ░███  ░░░░███
 █████   █████░░██████ ░░████████░░████████ █████░███ █████░░████████ ░███████     █████ ██████
░░░░░   ░░░░░  ░░░░░░   ░░░░░░░░  ░░░░░░░░ ░░░░░ ░░░ ░░░░░  ░░░░░░░░  ░███░░░     ░░░░░ ░░░░░░
                                                                      ░███
                                                                      █████
                                                                     ░░░░░
                      █████       █████
                     ░░███       ░░███
 ████████    ██████  ███████      ░███████    ██████  ████████   ██████
░░███░░███  ███░░███░░░███░       ░███░░███  ███░░███░░███░░███ ███░░███
 ░███ ░███ ░███ ░███  ░███        ░███ ░███ ░███████  ░███ ░░░ ░███████
 ░███ ░███ ░███ ░███  ░███ ███    ░███ ░███ ░███░░░   ░███     ░███░░░
 ████ █████░░██████   ░░█████     ████ █████░░██████  █████    ░░██████
░░░░ ░░░░░  ░░░░░░     ░░░░░     ░░░░ ░░░░░  ░░░░░░  ░░░░░      ░░░░░░
*/

pragma solidity ^0.8.17;

contract RoyalFools is Ownable, ERC721A, Pausable {
    string public originFoolsURI;
    string constant SECRETPHRASE = "13477431";

    uint256 public constant FOOLSONWALLET = 1;
    uint256 public constant TOSSACOIN = 0 ether;

    uint256 public royalCourt = 7431;
    uint256 private inPrison = 741;
    uint256 internal totalMinted;

    mapping(address => uint256) public howManyFools;

    constructor(
        string memory foolURI,
        uint256 _royalCourt,
        uint256 _inPrison) ERC721A("Royal Fools", "RF") {

            theDungeonMaster(foolURI);
            royalCourt = _royalCourt;
            inPrison = _inPrison;
    }

    modifier fairOnFire {
        require(totalSupply() <= royalCourt, "Sale has ended");
        _;
    }

    modifier wholsTheKingHere() {
        require(owner() == msg.sender);
        _;
    }

    function saleOff() public wholsTheKingHere {
        _pause();
    }

    function saleOn() public wholsTheKingHere {
        _unpause();
    }

    function theDungeonMaster(string memory foolURI) public wholsTheKingHere {
        originFoolsURI = foolURI;
    }

    function setInPrison(uint256 value) public wholsTheKingHere {
        inPrison = value;
    }

    function setMaxMintSupply(uint256 maxMintSupply) external wholsTheKingHere {
        royalCourt = maxMintSupply;
    }

    function totalFoolsMinted() public view returns (uint) {
        return totalMinted;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return originFoolsURI;
    }

    function homeBoy() public wholsTheKingHere {
        _safeMint(msg.sender, inPrison);
    }

    function godsMessage(uint256 _count, address[] calldata addresses) external wholsTheKingHere {
        uint256 supply = totalSupply();

        require(supply <= royalCourt, "Total supply spent");
        require(supply + _count + inPrison <= royalCourt, "Total supply exceeded");

        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Can't add a null address");
            _safeMint(addresses[i],_count);
        }
    }

    function mintFool() public payable fairOnFire {
        uint256 mintIndex = totalSupply();

        require(mintIndex + FOOLSONWALLET + inPrison <= royalCourt, "Total supply exceeded");
        require(howManyFools[msg.sender] < FOOLSONWALLET);
        require(msg.value == TOSSACOIN, "Incorrect value");
        _safeMint(msg.sender, FOOLSONWALLET);
        howManyFools[msg.sender] += FOOLSONWALLET;
        totalMinted++;
    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal whenNotPaused override {
        super._beforeTokenTransfers(from, to, startTokenId, quantity);
    }

    function LhlTaKool() public pure returns(string memory) {
        return SECRETPHRASE;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"foolURI","type":"string"},{"internalType":"uint256","name":"_royalCourt","type":"uint256"},{"internalType":"uint256","name":"_inPrison","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"FOOLSONWALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LhlTaKool","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"TOSSACOIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"godsMessage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"homeBoy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"howManyFools","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originFoolsURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalCourt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleOff","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleOn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setInPrison","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintSupply","type":"uint256"}],"name":"setMaxMintSupply","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":"string","name":"foolURI","type":"string"}],"name":"theDungeonMaster","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFoolsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260018055611d07600a556102e5600b553480156200002157600080fd5b5060405162004fbf38038062004fbf83398181016040528101906200004791906200045c565b6040518060400160405280600b81526020017f526f79616c20466f6f6c730000000000000000000000000000000000000000008152506040518060400160405280600281526020017f5246000000000000000000000000000000000000000000000000000000000000815250620000d3620000c76200013c60201b60201c565b6200014460201b60201c565b8160029081620000e4919062000718565b508060039081620000f6919062000718565b5050506001600860006101000a81548160ff02191690831515021790555062000125836200020860201b60201c565b81600a8190555080600b81905550505050620007ff565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b3373ffffffffffffffffffffffffffffffffffffffff166200022f6200026560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200025057600080fd5b806009908162000261919062000718565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620002f782620002ac565b810181811067ffffffffffffffff82111715620003195762000318620002bd565b5b80604052505050565b60006200032e6200028e565b90506200033c8282620002ec565b919050565b600067ffffffffffffffff8211156200035f576200035e620002bd565b5b6200036a82620002ac565b9050602081019050919050565b60005b83811015620003975780820151818401526020810190506200037a565b60008484015250505050565b6000620003ba620003b48462000341565b62000322565b905082815260208101848484011115620003d957620003d8620002a7565b5b620003e684828562000377565b509392505050565b600082601f830112620004065762000405620002a2565b5b815162000418848260208601620003a3565b91505092915050565b6000819050919050565b620004368162000421565b81146200044257600080fd5b50565b60008151905062000456816200042b565b92915050565b60008060006060848603121562000478576200047762000298565b5b600084015167ffffffffffffffff8111156200049957620004986200029d565b5b620004a786828701620003ee565b9350506020620004ba8682870162000445565b9250506040620004cd8682870162000445565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200052a57607f821691505b60208210810362000540576200053f620004e2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200056b565b620005b686836200056b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620005f9620005f3620005ed8462000421565b620005ce565b62000421565b9050919050565b6000819050919050565b6200061583620005d8565b6200062d620006248262000600565b84845462000578565b825550505050565b600090565b6200064462000635565b620006518184846200060a565b505050565b5b8181101562000679576200066d6000826200063a565b60018101905062000657565b5050565b601f821115620006c857620006928162000546565b6200069d846200055b565b81016020851015620006ad578190505b620006c5620006bc856200055b565b83018262000656565b50505b505050565b600082821c905092915050565b6000620006ed60001984600802620006cd565b1980831691505092915050565b6000620007088383620006da565b9150826002028217905092915050565b6200072382620004d7565b67ffffffffffffffff8111156200073f576200073e620002bd565b5b6200074b825462000511565b620007588282856200067d565b600060209050601f8311600181146200079057600084156200077b578287015190505b620007878582620006fa565b865550620007f7565b601f198416620007a08662000546565b60005b82811015620007ca57848901518255600182019150602085019450602081019050620007a3565b86831015620007ea5784890151620007e6601f891682620006da565b8355505b6001600288020188555050505b505050505050565b6147b0806200080f6000396000f3fe6080604052600436106102045760003560e01c806378471f1911610118578063ae27b7e9116100a0578063ceeeb3f91161006f578063ceeeb3f914610736578063d28021bb14610773578063ddf52f0b1461078a578063e985e9c5146107a1578063f2fde38b146107de57610204565b8063ae27b7e91461067c578063b21108d8146106a7578063b88d4fde146106d0578063c87b56dd146106f957610204565b806395d89b41116100e757806395d89b41146105ca578063a22cb465146105f5578063a8c678031461061e578063ab1b586214610649578063adf1b2961461065357610204565b806378471f19146105205780638488ded91461054b5780638da5cb5b1461057657806390ea24c5146105a157610204565b806342842e0e1161019b57806370a082311161016a57806370a0823114610461578063715018a61461049e57806371bd4109146104b55780637389fbb7146104e0578063773ef1cf1461050957610204565b806342842e0e146103935780634f6ccce7146103bc5780635c975abb146103f95780636352211e1461042457610204565b8063095ea7b3116101d7578063095ea7b3146102d957806318160ddd1461030257806323b872dd1461032d5780632f745c591461035657610204565b80630136aa3d1461020957806301ffc9a71461023457806306fdde0314610271578063081812fc1461029c575b600080fd5b34801561021557600080fd5b5061021e610807565b60405161022b9190612d11565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612d9f565b610895565b6040516102689190612de7565b60405180910390f35b34801561027d57600080fd5b506102866109df565b6040516102939190612d11565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190612e38565b610a71565b6040516102d09190612ea6565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190612eed565b610af6565b005b34801561030e57600080fd5b50610317610c0e565b6040516103249190612f3c565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190612f57565b610c18565b005b34801561036257600080fd5b5061037d60048036038101906103789190612eed565b610c28565b60405161038a9190612f3c565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190612f57565b610e18565b005b3480156103c857600080fd5b506103e360048036038101906103de9190612e38565b610e38565b6040516103f09190612f3c565b60405180910390f35b34801561040557600080fd5b5061040e610e8b565b60405161041b9190612de7565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190612e38565b610ea2565b6040516104589190612ea6565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190612faa565b610eb8565b6040516104959190612f3c565b60405180910390f35b3480156104aa57600080fd5b506104b3610fa0565b005b3480156104c157600080fd5b506104ca611028565b6040516104d79190612f3c565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190612e38565b61102d565b005b34801561051557600080fd5b5061051e611076565b005b34801561052c57600080fd5b506105356110bf565b6040516105429190612f3c565b60405180910390f35b34801561055757600080fd5b506105606110c4565b60405161056d9190612f3c565b60405180910390f35b34801561058257600080fd5b5061058b6110ca565b6040516105989190612ea6565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c3919061303c565b6110f3565b005b3480156105d657600080fd5b506105df6112cf565b6040516105ec9190612d11565b60405180910390f35b34801561060157600080fd5b5061061c600480360381019061061791906130c8565b611361565b005b34801561062a57600080fd5b506106336114e1565b6040516106409190612d11565b60405180910390f35b61065161151e565b005b34801561065f57600080fd5b5061067a60048036038101906106759190613238565b6116e0565b005b34801561068857600080fd5b50610691611732565b60405161069e9190612f3c565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190612e38565b61173c565b005b3480156106dc57600080fd5b506106f760048036038101906106f29190613322565b611785565b005b34801561070557600080fd5b50610720600480360381019061071b9190612e38565b6117e1565b60405161072d9190612d11565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190612faa565b611888565b60405161076a9190612f3c565b60405180910390f35b34801561077f57600080fd5b506107886118a0565b005b34801561079657600080fd5b5061079f6118e9565b005b3480156107ad57600080fd5b506107c860048036038101906107c391906133a5565b611936565b6040516107d59190612de7565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190612faa565b6119ca565b005b6009805461081490613414565b80601f016020809104026020016040519081016040528092919081815260200182805461084090613414565b801561088d5780601f106108625761010080835404028352916020019161088d565b820191906000526020600020905b81548152906001019060200180831161087057829003601f168201915b505050505081565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d782611ac1565b5b9050919050565b6060600280546109ee90613414565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a90613414565b8015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b5050505050905090565b6000610a7c82611b2b565b610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab2906134b7565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0182610ea2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6890613549565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b90611b39565b73ffffffffffffffffffffffffffffffffffffffff161480610bbf5750610bbe81610bb9611b39565b611936565b5b610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf5906135db565b60405180910390fd5b610c09838383611b41565b505050565b6000600154905090565b610c23838383611bf3565b505050565b6000610c3383610eb8565b8210610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b9061366d565b60405180910390fd5b6000610c7e610c0e565b905060008060005b83811015610dd6576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d7857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dc857868403610dbf578195505050505050610e12565b83806001019450505b508080600101915050610c86565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e09906136ff565b60405180910390fd5b92915050565b610e3383838360405180602001604052806000815250611785565b505050565b6000610e42610c0e565b8210610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90613791565b60405180910390fd5b819050919050565b6000600860009054906101000a900460ff16905090565b6000610ead82612131565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90613823565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610fa8611b39565b73ffffffffffffffffffffffffffffffffffffffff16610fc66110ca565b73ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110139061388f565b60405180910390fd5b61102660006122cb565b565b600181565b3373ffffffffffffffffffffffffffffffffffffffff1661104c6110ca565b73ffffffffffffffffffffffffffffffffffffffff161461106c57600080fd5b80600a8190555050565b3373ffffffffffffffffffffffffffffffffffffffff166110956110ca565b73ffffffffffffffffffffffffffffffffffffffff16146110b557600080fd5b6110bd61238f565b565b600081565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff166111126110ca565b73ffffffffffffffffffffffffffffffffffffffff161461113257600080fd5b600061113c610c0e565b9050600a54811115611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a906138fb565b60405180910390fd5b600a54600b548583611195919061394a565b61119f919061394a565b11156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906139ca565b60405180910390fd5b60005b838390508110156112c857600073ffffffffffffffffffffffffffffffffffffffff16848483818110611219576112186139ea565b5b905060200201602081019061122e9190612faa565b73ffffffffffffffffffffffffffffffffffffffff1603611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90613a65565b60405180910390fd5b6112b584848381811061129a576112996139ea565b5b90506020020160208101906112af9190612faa565b866123f2565b80806112c090613a85565b9150506111e3565b5050505050565b6060600380546112de90613414565b80601f016020809104026020016040519081016040528092919081815260200182805461130a90613414565b80156113575780601f1061132c57610100808354040283529160200191611357565b820191906000526020600020905b81548152906001019060200180831161133a57829003601f168201915b5050505050905090565b611369611b39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613b19565b60405180910390fd5b80600760006113e3611b39565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611490611b39565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114d59190612de7565b60405180910390a35050565b60606040518060400160405280600881526020017f3133343737343331000000000000000000000000000000000000000000000000815250905090565b600a54611529610c0e565b111561156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190613b85565b60405180910390fd5b6000611574610c0e565b9050600a54600b54600183611589919061394a565b611593919061394a565b11156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb906139ca565b60405180910390fd5b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061162057600080fd5b60003414611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90613bf1565b60405180910390fd5b61166e3360016123f2565b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116be919061394a565b92505081905550600c60008154809291906116d890613a85565b919050555050565b3373ffffffffffffffffffffffffffffffffffffffff166116ff6110ca565b73ffffffffffffffffffffffffffffffffffffffff161461171f57600080fd5b806009908161172e9190613dbd565b5050565b6000600c54905090565b3373ffffffffffffffffffffffffffffffffffffffff1661175b6110ca565b73ffffffffffffffffffffffffffffffffffffffff161461177b57600080fd5b80600b8190555050565b611790848484611bf3565b61179c84848484612410565b6117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d290613f01565b60405180910390fd5b50505050565b60606117ec82611b2b565b61182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613f93565b60405180910390fd5b6000611835612597565b905060008151036118555760405180602001604052806000815250611880565b8061185f84612629565b60405160200161187092919061403b565b6040516020818303038152906040525b915050919050565b600d6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff166118bf6110ca565b73ffffffffffffffffffffffffffffffffffffffff16146118df57600080fd5b6118e7612789565b565b3373ffffffffffffffffffffffffffffffffffffffff166119086110ca565b73ffffffffffffffffffffffffffffffffffffffff161461192857600080fd5b61193433600b546123f2565b565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119d2611b39565b73ffffffffffffffffffffffffffffffffffffffff166119f06110ca565b73ffffffffffffffffffffffffffffffffffffffff1614611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d9061388f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac906140dc565b60405180910390fd5b611abe816122cb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611bfe82612131565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611c25611b39565b73ffffffffffffffffffffffffffffffffffffffff161480611c815750611c4a611b39565b73ffffffffffffffffffffffffffffffffffffffff16611c6984610a71565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c9d5750611c9c8260000151611c97611b39565b611936565b5b905080611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd69061416e565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614200565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db790614292565b60405180910390fd5b611dcd85858560016127ec565b611ddd6000848460000151611b41565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036120c15761202081611b2b565b156120c05782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461212a8585856001612806565b5050505050565b612139612c47565b61214282611b2b565b612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890614324565b60405180910390fd5b60008290505b6000811061228a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461227b5780925050506122c6565b50808060019003915050612187565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd906143b6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61239761280c565b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123db611b39565b6040516123e89190612ea6565b60405180910390a1565b61240c828260405180602001604052806000815250612855565b5050565b60006124318473ffffffffffffffffffffffffffffffffffffffff16612867565b1561258a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261245a611b39565b8786866040518563ffffffff1660e01b815260040161247c949392919061442b565b6020604051808303816000875af19250505080156124b857506040513d601f19601f820116820180604052508101906124b5919061448c565b60015b61253a573d80600081146124e8576040519150601f19603f3d011682016040523d82523d6000602084013e6124ed565b606091505b506000815103612532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252990613f01565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061258f565b600190505b949350505050565b6060600980546125a690613414565b80601f01602080910402602001604051908101604052809291908181526020018280546125d290613414565b801561261f5780601f106125f45761010080835404028352916020019161261f565b820191906000526020600020905b81548152906001019060200180831161260257829003601f168201915b5050505050905090565b606060008203612670576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612784565b600082905060005b600082146126a257808061268b90613a85565b915050600a8261269b91906144e8565b9150612678565b60008167ffffffffffffffff8111156126be576126bd61310d565b5b6040519080825280601f01601f1916602001820160405280156126f05781602001600182028036833780820191505090505b5090505b6000851461277d576001826127099190614519565b9150600a85612718919061454d565b6030612724919061394a565b60f81b81838151811061273a576127396139ea565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561277691906144e8565b94506126f4565b8093505050505b919050565b61279161287a565b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127d5611b39565b6040516127e29190612ea6565b60405180910390a1565b6127f461287a565b612800848484846128c4565b50505050565b50505050565b612814610e8b565b612853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284a906145ca565b60405180910390fd5b565b61286283838360016128ca565b505050565b600080823b905060008111915050919050565b612882610e8b565b156128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990614636565b60405180910390fd5b565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612937906146c8565b60405180910390fd5b60008403612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a9061475a565b60405180910390fd5b61299060008683876127ec565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612c2a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612c1557612bd56000888488612410565b612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90613f01565b60405180910390fd5b5b81806001019250508080600101915050612b5e565b508060018190555050612c406000868387612806565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cbb578082015181840152602081019050612ca0565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce382612c81565b612ced8185612c8c565b9350612cfd818560208601612c9d565b612d0681612cc7565b840191505092915050565b60006020820190508181036000830152612d2b8184612cd8565b905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d7c81612d47565b8114612d8757600080fd5b50565b600081359050612d9981612d73565b92915050565b600060208284031215612db557612db4612d3d565b5b6000612dc384828501612d8a565b91505092915050565b60008115159050919050565b612de181612dcc565b82525050565b6000602082019050612dfc6000830184612dd8565b92915050565b6000819050919050565b612e1581612e02565b8114612e2057600080fd5b50565b600081359050612e3281612e0c565b92915050565b600060208284031215612e4e57612e4d612d3d565b5b6000612e5c84828501612e23565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e9082612e65565b9050919050565b612ea081612e85565b82525050565b6000602082019050612ebb6000830184612e97565b92915050565b612eca81612e85565b8114612ed557600080fd5b50565b600081359050612ee781612ec1565b92915050565b60008060408385031215612f0457612f03612d3d565b5b6000612f1285828601612ed8565b9250506020612f2385828601612e23565b9150509250929050565b612f3681612e02565b82525050565b6000602082019050612f516000830184612f2d565b92915050565b600080600060608486031215612f7057612f6f612d3d565b5b6000612f7e86828701612ed8565b9350506020612f8f86828701612ed8565b9250506040612fa086828701612e23565b9150509250925092565b600060208284031215612fc057612fbf612d3d565b5b6000612fce84828501612ed8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612ffc57612ffb612fd7565b5b8235905067ffffffffffffffff81111561301957613018612fdc565b5b60208301915083602082028301111561303557613034612fe1565b5b9250929050565b60008060006040848603121561305557613054612d3d565b5b600061306386828701612e23565b935050602084013567ffffffffffffffff81111561308457613083612d42565b5b61309086828701612fe6565b92509250509250925092565b6130a581612dcc565b81146130b057600080fd5b50565b6000813590506130c28161309c565b92915050565b600080604083850312156130df576130de612d3d565b5b60006130ed85828601612ed8565b92505060206130fe858286016130b3565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61314582612cc7565b810181811067ffffffffffffffff821117156131645761316361310d565b5b80604052505050565b6000613177612d33565b9050613183828261313c565b919050565b600067ffffffffffffffff8211156131a3576131a261310d565b5b6131ac82612cc7565b9050602081019050919050565b82818337600083830152505050565b60006131db6131d684613188565b61316d565b9050828152602081018484840111156131f7576131f6613108565b5b6132028482856131b9565b509392505050565b600082601f83011261321f5761321e612fd7565b5b813561322f8482602086016131c8565b91505092915050565b60006020828403121561324e5761324d612d3d565b5b600082013567ffffffffffffffff81111561326c5761326b612d42565b5b6132788482850161320a565b91505092915050565b600067ffffffffffffffff82111561329c5761329b61310d565b5b6132a582612cc7565b9050602081019050919050565b60006132c56132c084613281565b61316d565b9050828152602081018484840111156132e1576132e0613108565b5b6132ec8482856131b9565b509392505050565b600082601f83011261330957613308612fd7565b5b81356133198482602086016132b2565b91505092915050565b6000806000806080858703121561333c5761333b612d3d565b5b600061334a87828801612ed8565b945050602061335b87828801612ed8565b935050604061336c87828801612e23565b925050606085013567ffffffffffffffff81111561338d5761338c612d42565b5b613399878288016132f4565b91505092959194509250565b600080604083850312156133bc576133bb612d3d565b5b60006133ca85828601612ed8565b92505060206133db85828601612ed8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061342c57607f821691505b60208210810361343f5761343e6133e5565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006134a1602d83612c8c565b91506134ac82613445565b604082019050919050565b600060208201905081810360008301526134d081613494565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613533602283612c8c565b915061353e826134d7565b604082019050919050565b6000602082019050818103600083015261356281613526565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006135c5603983612c8c565b91506135d082613569565b604082019050919050565b600060208201905081810360008301526135f4816135b8565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613657602283612c8c565b9150613662826135fb565b604082019050919050565b600060208201905081810360008301526136868161364a565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006136e9602e83612c8c565b91506136f48261368d565b604082019050919050565b60006020820190508181036000830152613718816136dc565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b600061377b602383612c8c565b91506137868261371f565b604082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061380d602b83612c8c565b9150613818826137b1565b604082019050919050565b6000602082019050818103600083015261383c81613800565b9050919050565b7f4e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000613879600c83612c8c565b915061388482613843565b602082019050919050565b600060208201905081810360008301526138a88161386c565b9050919050565b7f546f74616c20737570706c79207370656e740000000000000000000000000000600082015250565b60006138e5601283612c8c565b91506138f0826138af565b602082019050919050565b60006020820190508181036000830152613914816138d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061395582612e02565b915061396083612e02565b92508282019050808211156139785761397761391b565b5b92915050565b7f546f74616c20737570706c792065786365656465640000000000000000000000600082015250565b60006139b4601583612c8c565b91506139bf8261397e565b602082019050919050565b600060208201905081810360008301526139e3816139a7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e2774206164642061206e756c6c20616464726573730000000000000000600082015250565b6000613a4f601883612c8c565b9150613a5a82613a19565b602082019050919050565b60006020820190508181036000830152613a7e81613a42565b9050919050565b6000613a9082612e02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ac257613ac161391b565b5b600182019050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613b03601a83612c8c565b9150613b0e82613acd565b602082019050919050565b60006020820190508181036000830152613b3281613af6565b9050919050565b7f53616c652068617320656e646564000000000000000000000000000000000000600082015250565b6000613b6f600e83612c8c565b9150613b7a82613b39565b602082019050919050565b60006020820190508181036000830152613b9e81613b62565b9050919050565b7f496e636f72726563742076616c75650000000000000000000000000000000000600082015250565b6000613bdb600f83612c8c565b9150613be682613ba5565b602082019050919050565b60006020820190508181036000830152613c0a81613bce565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c36565b613c7d8683613c36565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613cba613cb5613cb084612e02565b613c95565b612e02565b9050919050565b6000819050919050565b613cd483613c9f565b613ce8613ce082613cc1565b848454613c43565b825550505050565b600090565b613cfd613cf0565b613d08818484613ccb565b505050565b5b81811015613d2c57613d21600082613cf5565b600181019050613d0e565b5050565b601f821115613d7157613d4281613c11565b613d4b84613c26565b81016020851015613d5a578190505b613d6e613d6685613c26565b830182613d0d565b50505b505050565b600082821c905092915050565b6000613d9460001984600802613d76565b1980831691505092915050565b6000613dad8383613d83565b9150826002028217905092915050565b613dc682612c81565b67ffffffffffffffff811115613ddf57613dde61310d565b5b613de98254613414565b613df4828285613d30565b600060209050601f831160018114613e275760008415613e15578287015190505b613e1f8582613da1565b865550613e87565b601f198416613e3586613c11565b60005b82811015613e5d57848901518255600182019150602085019450602081019050613e38565b86831015613e7a5784890151613e76601f891682613d83565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613eeb603383612c8c565b9150613ef682613e8f565b604082019050919050565b60006020820190508181036000830152613f1a81613ede565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613f7d602f83612c8c565b9150613f8882613f21565b604082019050919050565b60006020820190508181036000830152613fac81613f70565b9050919050565b600081905092915050565b6000613fc982612c81565b613fd38185613fb3565b9350613fe3818560208601612c9d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614025600583613fb3565b915061403082613fef565b600582019050919050565b60006140478285613fbe565b91506140538284613fbe565b915061405e82614018565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140c6602683612c8c565b91506140d18261406a565b604082019050919050565b600060208201905081810360008301526140f5816140b9565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614158603283612c8c565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006141ea602683612c8c565b91506141f58261418e565b604082019050919050565b60006020820190508181036000830152614219816141dd565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061427c602583612c8c565b915061428782614220565b604082019050919050565b600060208201905081810360008301526142ab8161426f565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b600061430e602a83612c8c565b9150614319826142b2565b604082019050919050565b6000602082019050818103600083015261433d81614301565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006143a0602f83612c8c565b91506143ab82614344565b604082019050919050565b600060208201905081810360008301526143cf81614393565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006143fd826143d6565b61440781856143e1565b9350614417818560208601612c9d565b61442081612cc7565b840191505092915050565b60006080820190506144406000830187612e97565b61444d6020830186612e97565b61445a6040830185612f2d565b818103606083015261446c81846143f2565b905095945050505050565b60008151905061448681612d73565b92915050565b6000602082840312156144a2576144a1612d3d565b5b60006144b084828501614477565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144f382612e02565b91506144fe83612e02565b92508261450e5761450d6144b9565b5b828204905092915050565b600061452482612e02565b915061452f83612e02565b92508282039050818111156145475761454661391b565b5b92915050565b600061455882612e02565b915061456383612e02565b925082614573576145726144b9565b5b828206905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006145b4601483612c8c565b91506145bf8261457e565b602082019050919050565b600060208201905081810360008301526145e3816145a7565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614620601083612c8c565b915061462b826145ea565b602082019050919050565b6000602082019050818103600083015261464f81614613565b9050919050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b2602183612c8c565b91506146bd82614656565b604082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614744602883612c8c565b915061474f826146e8565b604082019050919050565b6000602082019050818103600083015261477381614737565b905091905056fea264697066735822122034f9015726ccfb517bed6ecb0f6cf3744198d5c471b2063d7b804b5e2c0b0da764736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001d0700000000000000000000000000000000000000000000000000000000000002e5000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d53704c36725679726a5a7546594b52696f634c373364393365466138444461647575776d504b526f796252572f000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102045760003560e01c806378471f1911610118578063ae27b7e9116100a0578063ceeeb3f91161006f578063ceeeb3f914610736578063d28021bb14610773578063ddf52f0b1461078a578063e985e9c5146107a1578063f2fde38b146107de57610204565b8063ae27b7e91461067c578063b21108d8146106a7578063b88d4fde146106d0578063c87b56dd146106f957610204565b806395d89b41116100e757806395d89b41146105ca578063a22cb465146105f5578063a8c678031461061e578063ab1b586214610649578063adf1b2961461065357610204565b806378471f19146105205780638488ded91461054b5780638da5cb5b1461057657806390ea24c5146105a157610204565b806342842e0e1161019b57806370a082311161016a57806370a0823114610461578063715018a61461049e57806371bd4109146104b55780637389fbb7146104e0578063773ef1cf1461050957610204565b806342842e0e146103935780634f6ccce7146103bc5780635c975abb146103f95780636352211e1461042457610204565b8063095ea7b3116101d7578063095ea7b3146102d957806318160ddd1461030257806323b872dd1461032d5780632f745c591461035657610204565b80630136aa3d1461020957806301ffc9a71461023457806306fdde0314610271578063081812fc1461029c575b600080fd5b34801561021557600080fd5b5061021e610807565b60405161022b9190612d11565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190612d9f565b610895565b6040516102689190612de7565b60405180910390f35b34801561027d57600080fd5b506102866109df565b6040516102939190612d11565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190612e38565b610a71565b6040516102d09190612ea6565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190612eed565b610af6565b005b34801561030e57600080fd5b50610317610c0e565b6040516103249190612f3c565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f9190612f57565b610c18565b005b34801561036257600080fd5b5061037d60048036038101906103789190612eed565b610c28565b60405161038a9190612f3c565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190612f57565b610e18565b005b3480156103c857600080fd5b506103e360048036038101906103de9190612e38565b610e38565b6040516103f09190612f3c565b60405180910390f35b34801561040557600080fd5b5061040e610e8b565b60405161041b9190612de7565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190612e38565b610ea2565b6040516104589190612ea6565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190612faa565b610eb8565b6040516104959190612f3c565b60405180910390f35b3480156104aa57600080fd5b506104b3610fa0565b005b3480156104c157600080fd5b506104ca611028565b6040516104d79190612f3c565b60405180910390f35b3480156104ec57600080fd5b5061050760048036038101906105029190612e38565b61102d565b005b34801561051557600080fd5b5061051e611076565b005b34801561052c57600080fd5b506105356110bf565b6040516105429190612f3c565b60405180910390f35b34801561055757600080fd5b506105606110c4565b60405161056d9190612f3c565b60405180910390f35b34801561058257600080fd5b5061058b6110ca565b6040516105989190612ea6565b60405180910390f35b3480156105ad57600080fd5b506105c860048036038101906105c3919061303c565b6110f3565b005b3480156105d657600080fd5b506105df6112cf565b6040516105ec9190612d11565b60405180910390f35b34801561060157600080fd5b5061061c600480360381019061061791906130c8565b611361565b005b34801561062a57600080fd5b506106336114e1565b6040516106409190612d11565b60405180910390f35b61065161151e565b005b34801561065f57600080fd5b5061067a60048036038101906106759190613238565b6116e0565b005b34801561068857600080fd5b50610691611732565b60405161069e9190612f3c565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190612e38565b61173c565b005b3480156106dc57600080fd5b506106f760048036038101906106f29190613322565b611785565b005b34801561070557600080fd5b50610720600480360381019061071b9190612e38565b6117e1565b60405161072d9190612d11565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190612faa565b611888565b60405161076a9190612f3c565b60405180910390f35b34801561077f57600080fd5b506107886118a0565b005b34801561079657600080fd5b5061079f6118e9565b005b3480156107ad57600080fd5b506107c860048036038101906107c391906133a5565b611936565b6040516107d59190612de7565b60405180910390f35b3480156107ea57600080fd5b5061080560048036038101906108009190612faa565b6119ca565b005b6009805461081490613414565b80601f016020809104026020016040519081016040528092919081815260200182805461084090613414565b801561088d5780601f106108625761010080835404028352916020019161088d565b820191906000526020600020905b81548152906001019060200180831161087057829003601f168201915b505050505081565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061096057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109c857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d857506109d782611ac1565b5b9050919050565b6060600280546109ee90613414565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1a90613414565b8015610a675780601f10610a3c57610100808354040283529160200191610a67565b820191906000526020600020905b815481529060010190602001808311610a4a57829003601f168201915b5050505050905090565b6000610a7c82611b2b565b610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab2906134b7565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0182610ea2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6890613549565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b90611b39565b73ffffffffffffffffffffffffffffffffffffffff161480610bbf5750610bbe81610bb9611b39565b611936565b5b610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf5906135db565b60405180910390fd5b610c09838383611b41565b505050565b6000600154905090565b610c23838383611bf3565b505050565b6000610c3383610eb8565b8210610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b9061366d565b60405180910390fd5b6000610c7e610c0e565b905060008060005b83811015610dd6576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610d7857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dc857868403610dbf578195505050505050610e12565b83806001019450505b508080600101915050610c86565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e09906136ff565b60405180910390fd5b92915050565b610e3383838360405180602001604052806000815250611785565b505050565b6000610e42610c0e565b8210610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90613791565b60405180910390fd5b819050919050565b6000600860009054906101000a900460ff16905090565b6000610ead82612131565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90613823565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610fa8611b39565b73ffffffffffffffffffffffffffffffffffffffff16610fc66110ca565b73ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110139061388f565b60405180910390fd5b61102660006122cb565b565b600181565b3373ffffffffffffffffffffffffffffffffffffffff1661104c6110ca565b73ffffffffffffffffffffffffffffffffffffffff161461106c57600080fd5b80600a8190555050565b3373ffffffffffffffffffffffffffffffffffffffff166110956110ca565b73ffffffffffffffffffffffffffffffffffffffff16146110b557600080fd5b6110bd61238f565b565b600081565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff166111126110ca565b73ffffffffffffffffffffffffffffffffffffffff161461113257600080fd5b600061113c610c0e565b9050600a54811115611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a906138fb565b60405180910390fd5b600a54600b548583611195919061394a565b61119f919061394a565b11156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d7906139ca565b60405180910390fd5b60005b838390508110156112c857600073ffffffffffffffffffffffffffffffffffffffff16848483818110611219576112186139ea565b5b905060200201602081019061122e9190612faa565b73ffffffffffffffffffffffffffffffffffffffff1603611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90613a65565b60405180910390fd5b6112b584848381811061129a576112996139ea565b5b90506020020160208101906112af9190612faa565b866123f2565b80806112c090613a85565b9150506111e3565b5050505050565b6060600380546112de90613414565b80601f016020809104026020016040519081016040528092919081815260200182805461130a90613414565b80156113575780601f1061132c57610100808354040283529160200191611357565b820191906000526020600020905b81548152906001019060200180831161133a57829003601f168201915b5050505050905090565b611369611b39565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cd90613b19565b60405180910390fd5b80600760006113e3611b39565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611490611b39565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114d59190612de7565b60405180910390a35050565b60606040518060400160405280600881526020017f3133343737343331000000000000000000000000000000000000000000000000815250905090565b600a54611529610c0e565b111561156a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156190613b85565b60405180910390fd5b6000611574610c0e565b9050600a54600b54600183611589919061394a565b611593919061394a565b11156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb906139ca565b60405180910390fd5b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061162057600080fd5b60003414611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90613bf1565b60405180910390fd5b61166e3360016123f2565b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116be919061394a565b92505081905550600c60008154809291906116d890613a85565b919050555050565b3373ffffffffffffffffffffffffffffffffffffffff166116ff6110ca565b73ffffffffffffffffffffffffffffffffffffffff161461171f57600080fd5b806009908161172e9190613dbd565b5050565b6000600c54905090565b3373ffffffffffffffffffffffffffffffffffffffff1661175b6110ca565b73ffffffffffffffffffffffffffffffffffffffff161461177b57600080fd5b80600b8190555050565b611790848484611bf3565b61179c84848484612410565b6117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d290613f01565b60405180910390fd5b50505050565b60606117ec82611b2b565b61182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290613f93565b60405180910390fd5b6000611835612597565b905060008151036118555760405180602001604052806000815250611880565b8061185f84612629565b60405160200161187092919061403b565b6040516020818303038152906040525b915050919050565b600d6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff166118bf6110ca565b73ffffffffffffffffffffffffffffffffffffffff16146118df57600080fd5b6118e7612789565b565b3373ffffffffffffffffffffffffffffffffffffffff166119086110ca565b73ffffffffffffffffffffffffffffffffffffffff161461192857600080fd5b61193433600b546123f2565b565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119d2611b39565b73ffffffffffffffffffffffffffffffffffffffff166119f06110ca565b73ffffffffffffffffffffffffffffffffffffffff1614611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d9061388f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac906140dc565b60405180910390fd5b611abe816122cb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611bfe82612131565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611c25611b39565b73ffffffffffffffffffffffffffffffffffffffff161480611c815750611c4a611b39565b73ffffffffffffffffffffffffffffffffffffffff16611c6984610a71565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c9d5750611c9c8260000151611c97611b39565b611936565b5b905080611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd69061416e565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614200565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db790614292565b60405180910390fd5b611dcd85858560016127ec565b611ddd6000848460000151611b41565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036120c15761202081611b2b565b156120c05782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461212a8585856001612806565b5050505050565b612139612c47565b61214282611b2b565b612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890614324565b60405180910390fd5b60008290505b6000811061228a576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461227b5780925050506122c6565b50808060019003915050612187565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd906143b6565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61239761280c565b6000600860006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6123db611b39565b6040516123e89190612ea6565b60405180910390a1565b61240c828260405180602001604052806000815250612855565b5050565b60006124318473ffffffffffffffffffffffffffffffffffffffff16612867565b1561258a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261245a611b39565b8786866040518563ffffffff1660e01b815260040161247c949392919061442b565b6020604051808303816000875af19250505080156124b857506040513d601f19601f820116820180604052508101906124b5919061448c565b60015b61253a573d80600081146124e8576040519150601f19603f3d011682016040523d82523d6000602084013e6124ed565b606091505b506000815103612532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252990613f01565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061258f565b600190505b949350505050565b6060600980546125a690613414565b80601f01602080910402602001604051908101604052809291908181526020018280546125d290613414565b801561261f5780601f106125f45761010080835404028352916020019161261f565b820191906000526020600020905b81548152906001019060200180831161260257829003601f168201915b5050505050905090565b606060008203612670576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612784565b600082905060005b600082146126a257808061268b90613a85565b915050600a8261269b91906144e8565b9150612678565b60008167ffffffffffffffff8111156126be576126bd61310d565b5b6040519080825280601f01601f1916602001820160405280156126f05781602001600182028036833780820191505090505b5090505b6000851461277d576001826127099190614519565b9150600a85612718919061454d565b6030612724919061394a565b60f81b81838151811061273a576127396139ea565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561277691906144e8565b94506126f4565b8093505050505b919050565b61279161287a565b6001600860006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586127d5611b39565b6040516127e29190612ea6565b60405180910390a1565b6127f461287a565b612800848484846128c4565b50505050565b50505050565b612814610e8b565b612853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284a906145ca565b60405180910390fd5b565b61286283838360016128ca565b505050565b600080823b905060008111915050919050565b612882610e8b565b156128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990614636565b60405180910390fd5b565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612940576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612937906146c8565b60405180910390fd5b60008403612983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297a9061475a565b60405180910390fd5b61299060008683876127ec565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612c2a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612c1557612bd56000888488612410565b612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90613f01565b60405180910390fd5b5b81806001019250508080600101915050612b5e565b508060018190555050612c406000868387612806565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612cbb578082015181840152602081019050612ca0565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ce382612c81565b612ced8185612c8c565b9350612cfd818560208601612c9d565b612d0681612cc7565b840191505092915050565b60006020820190508181036000830152612d2b8184612cd8565b905092915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d7c81612d47565b8114612d8757600080fd5b50565b600081359050612d9981612d73565b92915050565b600060208284031215612db557612db4612d3d565b5b6000612dc384828501612d8a565b91505092915050565b60008115159050919050565b612de181612dcc565b82525050565b6000602082019050612dfc6000830184612dd8565b92915050565b6000819050919050565b612e1581612e02565b8114612e2057600080fd5b50565b600081359050612e3281612e0c565b92915050565b600060208284031215612e4e57612e4d612d3d565b5b6000612e5c84828501612e23565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e9082612e65565b9050919050565b612ea081612e85565b82525050565b6000602082019050612ebb6000830184612e97565b92915050565b612eca81612e85565b8114612ed557600080fd5b50565b600081359050612ee781612ec1565b92915050565b60008060408385031215612f0457612f03612d3d565b5b6000612f1285828601612ed8565b9250506020612f2385828601612e23565b9150509250929050565b612f3681612e02565b82525050565b6000602082019050612f516000830184612f2d565b92915050565b600080600060608486031215612f7057612f6f612d3d565b5b6000612f7e86828701612ed8565b9350506020612f8f86828701612ed8565b9250506040612fa086828701612e23565b9150509250925092565b600060208284031215612fc057612fbf612d3d565b5b6000612fce84828501612ed8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612ffc57612ffb612fd7565b5b8235905067ffffffffffffffff81111561301957613018612fdc565b5b60208301915083602082028301111561303557613034612fe1565b5b9250929050565b60008060006040848603121561305557613054612d3d565b5b600061306386828701612e23565b935050602084013567ffffffffffffffff81111561308457613083612d42565b5b61309086828701612fe6565b92509250509250925092565b6130a581612dcc565b81146130b057600080fd5b50565b6000813590506130c28161309c565b92915050565b600080604083850312156130df576130de612d3d565b5b60006130ed85828601612ed8565b92505060206130fe858286016130b3565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61314582612cc7565b810181811067ffffffffffffffff821117156131645761316361310d565b5b80604052505050565b6000613177612d33565b9050613183828261313c565b919050565b600067ffffffffffffffff8211156131a3576131a261310d565b5b6131ac82612cc7565b9050602081019050919050565b82818337600083830152505050565b60006131db6131d684613188565b61316d565b9050828152602081018484840111156131f7576131f6613108565b5b6132028482856131b9565b509392505050565b600082601f83011261321f5761321e612fd7565b5b813561322f8482602086016131c8565b91505092915050565b60006020828403121561324e5761324d612d3d565b5b600082013567ffffffffffffffff81111561326c5761326b612d42565b5b6132788482850161320a565b91505092915050565b600067ffffffffffffffff82111561329c5761329b61310d565b5b6132a582612cc7565b9050602081019050919050565b60006132c56132c084613281565b61316d565b9050828152602081018484840111156132e1576132e0613108565b5b6132ec8482856131b9565b509392505050565b600082601f83011261330957613308612fd7565b5b81356133198482602086016132b2565b91505092915050565b6000806000806080858703121561333c5761333b612d3d565b5b600061334a87828801612ed8565b945050602061335b87828801612ed8565b935050604061336c87828801612e23565b925050606085013567ffffffffffffffff81111561338d5761338c612d42565b5b613399878288016132f4565b91505092959194509250565b600080604083850312156133bc576133bb612d3d565b5b60006133ca85828601612ed8565b92505060206133db85828601612ed8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061342c57607f821691505b60208210810361343f5761343e6133e5565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006134a1602d83612c8c565b91506134ac82613445565b604082019050919050565b600060208201905081810360008301526134d081613494565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613533602283612c8c565b915061353e826134d7565b604082019050919050565b6000602082019050818103600083015261356281613526565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006135c5603983612c8c565b91506135d082613569565b604082019050919050565b600060208201905081810360008301526135f4816135b8565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613657602283612c8c565b9150613662826135fb565b604082019050919050565b600060208201905081810360008301526136868161364a565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b60006136e9602e83612c8c565b91506136f48261368d565b604082019050919050565b60006020820190508181036000830152613718816136dc565b9050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b600061377b602383612c8c565b91506137868261371f565b604082019050919050565b600060208201905081810360008301526137aa8161376e565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061380d602b83612c8c565b9150613818826137b1565b604082019050919050565b6000602082019050818103600083015261383c81613800565b9050919050565b7f4e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b6000613879600c83612c8c565b915061388482613843565b602082019050919050565b600060208201905081810360008301526138a88161386c565b9050919050565b7f546f74616c20737570706c79207370656e740000000000000000000000000000600082015250565b60006138e5601283612c8c565b91506138f0826138af565b602082019050919050565b60006020820190508181036000830152613914816138d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061395582612e02565b915061396083612e02565b92508282019050808211156139785761397761391b565b5b92915050565b7f546f74616c20737570706c792065786365656465640000000000000000000000600082015250565b60006139b4601583612c8c565b91506139bf8261397e565b602082019050919050565b600060208201905081810360008301526139e3816139a7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e2774206164642061206e756c6c20616464726573730000000000000000600082015250565b6000613a4f601883612c8c565b9150613a5a82613a19565b602082019050919050565b60006020820190508181036000830152613a7e81613a42565b9050919050565b6000613a9082612e02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ac257613ac161391b565b5b600182019050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613b03601a83612c8c565b9150613b0e82613acd565b602082019050919050565b60006020820190508181036000830152613b3281613af6565b9050919050565b7f53616c652068617320656e646564000000000000000000000000000000000000600082015250565b6000613b6f600e83612c8c565b9150613b7a82613b39565b602082019050919050565b60006020820190508181036000830152613b9e81613b62565b9050919050565b7f496e636f72726563742076616c75650000000000000000000000000000000000600082015250565b6000613bdb600f83612c8c565b9150613be682613ba5565b602082019050919050565b60006020820190508181036000830152613c0a81613bce565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613c737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613c36565b613c7d8683613c36565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613cba613cb5613cb084612e02565b613c95565b612e02565b9050919050565b6000819050919050565b613cd483613c9f565b613ce8613ce082613cc1565b848454613c43565b825550505050565b600090565b613cfd613cf0565b613d08818484613ccb565b505050565b5b81811015613d2c57613d21600082613cf5565b600181019050613d0e565b5050565b601f821115613d7157613d4281613c11565b613d4b84613c26565b81016020851015613d5a578190505b613d6e613d6685613c26565b830182613d0d565b50505b505050565b600082821c905092915050565b6000613d9460001984600802613d76565b1980831691505092915050565b6000613dad8383613d83565b9150826002028217905092915050565b613dc682612c81565b67ffffffffffffffff811115613ddf57613dde61310d565b5b613de98254613414565b613df4828285613d30565b600060209050601f831160018114613e275760008415613e15578287015190505b613e1f8582613da1565b865550613e87565b601f198416613e3586613c11565b60005b82811015613e5d57848901518255600182019150602085019450602081019050613e38565b86831015613e7a5784890151613e76601f891682613d83565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000613eeb603383612c8c565b9150613ef682613e8f565b604082019050919050565b60006020820190508181036000830152613f1a81613ede565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613f7d602f83612c8c565b9150613f8882613f21565b604082019050919050565b60006020820190508181036000830152613fac81613f70565b9050919050565b600081905092915050565b6000613fc982612c81565b613fd38185613fb3565b9350613fe3818560208601612c9d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614025600583613fb3565b915061403082613fef565b600582019050919050565b60006140478285613fbe565b91506140538284613fbe565b915061405e82614018565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006140c6602683612c8c565b91506140d18261406a565b604082019050919050565b600060208201905081810360008301526140f5816140b9565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614158603283612c8c565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006141ea602683612c8c565b91506141f58261418e565b604082019050919050565b60006020820190508181036000830152614219816141dd565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061427c602583612c8c565b915061428782614220565b604082019050919050565b600060208201905081810360008301526142ab8161426f565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b600061430e602a83612c8c565b9150614319826142b2565b604082019050919050565b6000602082019050818103600083015261433d81614301565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006143a0602f83612c8c565b91506143ab82614344565b604082019050919050565b600060208201905081810360008301526143cf81614393565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006143fd826143d6565b61440781856143e1565b9350614417818560208601612c9d565b61442081612cc7565b840191505092915050565b60006080820190506144406000830187612e97565b61444d6020830186612e97565b61445a6040830185612f2d565b818103606083015261446c81846143f2565b905095945050505050565b60008151905061448681612d73565b92915050565b6000602082840312156144a2576144a1612d3d565b5b60006144b084828501614477565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144f382612e02565b91506144fe83612e02565b92508261450e5761450d6144b9565b5b828204905092915050565b600061452482612e02565b915061452f83612e02565b92508282039050818111156145475761454661391b565b5b92915050565b600061455882612e02565b915061456383612e02565b925082614573576145726144b9565b5b828206905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006145b4601483612c8c565b91506145bf8261457e565b602082019050919050565b600060208201905081810360008301526145e3816145a7565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614620601083612c8c565b915061462b826145ea565b602082019050919050565b6000602082019050818103600083015261464f81614613565b9050919050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b2602183612c8c565b91506146bd82614656565b604082019050919050565b600060208201905081810360008301526146e1816146a5565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614744602883612c8c565b915061474f826146e8565b604082019050919050565b6000602082019050818103600083015261477381614737565b905091905056fea264697066735822122034f9015726ccfb517bed6ecb0f6cf3744198d5c471b2063d7b804b5e2c0b0da764736f6c63430008110033

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

00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000001d0700000000000000000000000000000000000000000000000000000000000002e5000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d53704c36725679726a5a7546594b52696f634c373364393365466138444461647575776d504b526f796252572f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : foolURI (string): https://gateway.pinata.cloud/ipfs/QmSpL6rVyrjZuFYKRiocL73d93eFa8DDaduuwmPKRoybRW/
Arg [1] : _royalCourt (uint256): 7431
Arg [2] : _inPrison (uint256): 741

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001d07
Arg [2] : 00000000000000000000000000000000000000000000000000000000000002e5
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [4] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [5] : 732f516d53704c36725679726a5a7546594b52696f634c373364393365466138
Arg [6] : 444461647575776d504b526f796252572f000000000000000000000000000000


Deployed Bytecode Sourcemap

47387:3018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47444:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31066:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32952:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34523:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34044:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29323:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35399:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29987:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35632:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29500:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27036:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32761:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31502:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15693:100;;;;;;;;;;;;;:::i;:::-;;47529:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48656:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48350:71;;;;;;;;;;;;;:::i;:::-;;47577:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47629:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15089:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49108:485;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33121:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34809:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50308:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49601:439;;;:::i;:::-;;48429:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48784:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48553:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35880:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33296:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47742:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48272:70;;;;;;;;;;;;;:::i;:::-;;49007:93;;;;;;;;;;;;;:::i;:::-;;35168:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15943:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47444:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31066:372::-;31168:4;31220:25;31205:40;;;:11;:40;;;;:105;;;;31277:33;31262:48;;;:11;:48;;;;31205:105;:172;;;;31342:35;31327:50;;;:11;:50;;;;31205:172;:225;;;;31394:36;31418:11;31394:23;:36::i;:::-;31205:225;31185:245;;31066:372;;;:::o;32952:100::-;33006:13;33039:5;33032:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32952:100;:::o;34523:214::-;34591:7;34619:16;34627:7;34619;:16::i;:::-;34611:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;34705:15;:24;34721:7;34705:24;;;;;;;;;;;;;;;;;;;;;34698:31;;34523:214;;;:::o;34044:413::-;34117:13;34133:24;34149:7;34133:15;:24::i;:::-;34117:40;;34182:5;34176:11;;:2;:11;;;34168:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34277:5;34261:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34286:37;34303:5;34310:12;:10;:12::i;:::-;34286:16;:37::i;:::-;34261:62;34239:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34421:28;34430:2;34434:7;34443:5;34421:8;:28::i;:::-;34106:351;34044:413;;:::o;29323:100::-;29376:7;29403:12;;29396:19;;29323:100;:::o;35399:162::-;35525:28;35535:4;35541:2;35545:7;35525:9;:28::i;:::-;35399:162;;;:::o;29987:1007::-;30076:7;30112:16;30122:5;30112:9;:16::i;:::-;30104:5;:24;30096:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;30178:22;30203:13;:11;:13::i;:::-;30178:38;;30227:19;30257:25;30446:9;30441:466;30461:14;30457:1;:18;30441:466;;;30501:31;30535:11;:14;30547:1;30535:14;;;;;;;;;;;30501:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30598:1;30572:28;;:9;:14;;;:28;;;30568:111;;30645:9;:14;;;30625:34;;30568:111;30722:5;30701:26;;:17;:26;;;30697:195;;30771:5;30756:11;:20;30752:85;;30812:1;30805:8;;;;;;;;;30752:85;30859:13;;;;;;;30697:195;30482:425;30477:3;;;;;;;30441:466;;;;30930:56;;;;;;;;;;:::i;:::-;;;;;;;;29987:1007;;;;;:::o;35632:177::-;35762:39;35779:4;35785:2;35789:7;35762:39;;;;;;;;;;;;:16;:39::i;:::-;35632:177;;;:::o;29500:187::-;29567:7;29603:13;:11;:13::i;:::-;29595:5;:21;29587:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;29674:5;29667:12;;29500:187;;;:::o;27036:86::-;27083:4;27107:7;;;;;;;;;;;27100:14;;27036:86;:::o;32761:124::-;32825:7;32852:20;32864:7;32852:11;:20::i;:::-;:25;;;32845:32;;32761:124;;;:::o;31502:221::-;31566:7;31611:1;31594:19;;:5;:19;;;31586:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;31687:12;:19;31700:5;31687:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31679:36;;31672:43;;31502:221;;;:::o;15693:100::-;15311:12;:10;:12::i;:::-;15300:23;;:7;:5;:7::i;:::-;:23;;;15292:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;15756:30:::1;15783:1;15756:18;:30::i;:::-;15693:100::o:0;47529:41::-;47569:1;47529:41;:::o;48656:120::-;48233:10;48222:21;;:7;:5;:7::i;:::-;:21;;;48214:30;;;;;;48755:13:::1;48742:10;:26;;;;48656:120:::0;:::o;48350:71::-;48233:10;48222:21;;:7;:5;:7::i;:::-;:21;;;48214:30;;;;;;48403:10:::1;:8;:10::i;:::-;48350:71::o:0;47577:43::-;47613:7;47577:43;:::o;47629:32::-;;;;:::o;15089:84::-;15135:7;15160:6;;;;;;;;;;;15153:13;;15089:84;:::o;49108:485::-;48233:10;48222:21;;:7;:5;:7::i;:::-;:21;;;48214:30;;;;;;49212:14:::1;49229:13;:11;:13::i;:::-;49212:30;;49273:10;;49263:6;:20;;49255:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;49355:10;;49343:8;;49334:6;49325;:15;;;;:::i;:::-;:26;;;;:::i;:::-;:40;;49317:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;49409:9;49404:182;49428:9;;:16;;49424:1;:20;49404:182;;;49498:1;49474:26;;:9;;49484:1;49474:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;::::0;49466:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;49544:30;49554:9;;49564:1;49554:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49567:6;49544:9;:30::i;:::-;49446:3;;;;;:::i;:::-;;;;49404:182;;;;49201:392;49108:485:::0;;;:::o;33121:104::-;33177:13;33210:7;33203:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33121:104;:::o;34809:288::-;34916:12;:10;:12::i;:::-;34904:24;;:8;:24;;;34896:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;35017:8;34972:18;:32;34991:12;:10;:12::i;:::-;34972:32;;;;;;;;;;;;;;;:42;35005:8;34972:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;35070:8;35041:48;;35056:12;:10;:12::i;:::-;35041:48;;;35080:8;35041:48;;;;;;:::i;:::-;;;;;;;;34809:288;;:::o;50308:94::-;50349:13;50382:12;;;;;;;;;;;;;;;;;50375:19;;50308:94;:::o;49601:439::-;48118:10;;48101:13;:11;:13::i;:::-;:27;;48093:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;49658:17:::1;49678:13;:11;:13::i;:::-;49658:33;;49752:10;;49740:8;;47569:1;49712:9;:25;;;;:::i;:::-;:36;;;;:::i;:::-;:50;;49704:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;47569:1;49807:12;:24;49820:10;49807:24;;;;;;;;;;;;;;;;:40;49799:49;;;::::0;::::1;;47613:7;49867:9;:22;49859:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;49920:36;49930:10;47569:1;49920:9;:36::i;:::-;47569:1;49967:12;:24;49980:10;49967:24;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;50019:11;;:13;;;;;;;;;:::i;:::-;;;;;;49647:393;49601:439::o:0;48429:116::-;48233:10;48222:21;;:7;:5;:7::i;:::-;:21;;;48214:30;;;;;;48530:7:::1;48513:14;:24;;;;;;:::i;:::-;;48429:116:::0;:::o;48784:92::-;48833:4;48857:11;;48850:18;;48784:92;:::o;48553:95::-;48233:10;48222:21;;:7;:5;:7::i;:::-;:21;;;48214:30;;;;;;48635:5:::1;48624:8;:16;;;;48553:95:::0;:::o;35880:355::-;36039:28;36049:4;36055:2;36059:7;36039:9;:28::i;:::-;36100:48;36123:4;36129:2;36133:7;36142:5;36100:22;:48::i;:::-;36078:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;35880:355;;;;:::o;33296:344::-;33369:13;33403:16;33411:7;33403;:16::i;:::-;33395:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33484:21;33508:10;:8;:10::i;:::-;33484:34;;33561:1;33542:7;33536:21;:26;:96;;;;;;;;;;;;;;;;;33589:7;33598:18;:7;:16;:18::i;:::-;33572:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33536:96;33529:103;;;33296:344;;;:::o;47742:47::-;;;;;;;;;;;;;;;;;:::o;48272:70::-;48233:10;48222:21;;:7;:5;:7::i;:::-;:21;;;48214:30;;;;;;48326:8:::1;:6;:8::i;:::-;48272:70::o:0;49007:93::-;48233:10;48222:21;;:7;:5;:7::i;:::-;:21;;;48214:30;;;;;;49061:31:::1;49071:10;49083:8;;49061:9;:31::i;:::-;49007:93::o:0;35168:164::-;35265:4;35289:18;:25;35308:5;35289:25;;;;;;;;;;;;;;;:35;35315:8;35289:35;;;;;;;;;;;;;;;;;;;;;;;;;35282:42;;35168:164;;;;:::o;15943:196::-;15311:12;:10;:12::i;:::-;15300:23;;:7;:5;:7::i;:::-;:23;;;15292:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16050:1:::1;16030:22;;:8;:22;;::::0;16022:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16104:28;16123:8;16104:18;:28::i;:::-;15943:196:::0;:::o;18946:157::-;19031:4;19070:25;19055:40;;;:11;:40;;;;19048:47;;18946:157;;;:::o;36490:111::-;36547:4;36581:12;;36571:7;:22;36564:29;;36490:111;;;:::o;13993:94::-;14045:7;14070:10;14063:17;;13993:94;:::o;41410:196::-;41552:2;41525:15;:24;41541:7;41525:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41590:7;41586:2;41570:28;;41579:5;41570:28;;;;;;;;;;;;41410:196;;;:::o;39290:2002::-;39405:35;39443:20;39455:7;39443:11;:20::i;:::-;39405:58;;39476:22;39518:13;:18;;;39502:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;39577:12;:10;:12::i;:::-;39553:36;;:20;39565:7;39553:11;:20::i;:::-;:36;;;39502:87;:154;;;;39606:50;39623:13;:18;;;39643:12;:10;:12::i;:::-;39606:16;:50::i;:::-;39502:154;39476:181;;39678:17;39670:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;39793:4;39771:26;;:13;:18;;;:26;;;39763:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39873:1;39859:16;;:2;:16;;;39851:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39930:43;39952:4;39958:2;39962:7;39971:1;39930:21;:43::i;:::-;40038:49;40055:1;40059:7;40068:13;:18;;;40038:8;:49::i;:::-;40413:1;40383:12;:18;40396:4;40383:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40457:1;40429:12;:16;40442:2;40429:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40503:2;40475:11;:20;40487:7;40475:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;40565:15;40520:11;:20;40532:7;40520:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40833:19;40865:1;40855:7;:11;40833:33;;40926:1;40885:43;;:11;:24;40897:11;40885:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40881:295;;40953:20;40961:11;40953:7;:20::i;:::-;40949:212;;;41030:13;:18;;;40998:11;:24;41010:11;40998:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;41113:13;:28;;;41071:11;:24;41083:11;41071:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40949:212;40881:295;40358:829;41223:7;41219:2;41204:27;;41213:4;41204:27;;;;;;;;;;;;41242:42;41263:4;41269:2;41273:7;41282:1;41242:20;:42::i;:::-;39394:1898;;39290:2002;;;:::o;32162:537::-;32223:21;;:::i;:::-;32265:16;32273:7;32265;:16::i;:::-;32257:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32371:12;32386:7;32371:22;;32366:245;32403:1;32395:4;:9;32366:245;;32433:31;32467:11;:17;32479:4;32467:17;;;;;;;;;;;32433:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32533:1;32507:28;;:9;:14;;;:28;;;32503:93;;32567:9;32560:16;;;;;;32503:93;32414:197;32406:6;;;;;;;;32366:245;;;;32634:57;;;;;;;;;;:::i;:::-;;;;;;;;32162:537;;;;:::o;16294:184::-;16366:16;16385:6;;;;;;;;;;;16366:25;;16409:8;16400:6;;:17;;;;;;;;;;;;;;;;;;16462:8;16431:40;;16452:8;16431:40;;;;;;;;;;;;16357:121;16294:184;:::o;27891:120::-;26900:16;:14;:16::i;:::-;27960:5:::1;27950:7;;:15;;;;;;;;;;;;;;;;;;27981:22;27990:12;:10;:12::i;:::-;27981:22;;;;;;:::i;:::-;;;;;;;;27891:120::o:0;36609:104::-;36678:27;36688:2;36692:8;36678:27;;;;;;;;;;;;:9;:27::i;:::-;36609:104;;:::o;42171:804::-;42326:4;42347:15;:2;:13;;;:15::i;:::-;42343:625;;;42399:2;42383:36;;;42420:12;:10;:12::i;:::-;42434:4;42440:7;42449:5;42383:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42379:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42646:1;42629:6;:13;:18;42625:273;;42672:61;;;;;;;;;;:::i;:::-;;;;;;;;42625:273;42848:6;42842:13;42833:6;42829:2;42825:15;42818:38;42379:534;42516:45;;;42506:55;;;:6;:55;;;;42499:62;;;;;42343:625;42952:4;42945:11;;42171:804;;;;;;;:::o;48884:115::-;48944:13;48977:14;48970:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48884:115;:::o;2270:493::-;2326:13;2363:1;2354:5;:10;2350:48;;2378:10;;;;;;;;;;;;;;;;;;;;;2350:48;2406:12;2421:5;2406:20;;2435:14;2458:70;2473:1;2465:4;:9;2458:70;;2488:8;;;;;:::i;:::-;;;;2516:2;2508:10;;;;;:::i;:::-;;;2458:70;;;2536:19;2568:6;2558:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2536:39;;2584:143;2600:1;2591:5;:10;2584:143;;2625:1;2615:11;;;;;:::i;:::-;;;2689:2;2681:5;:10;;;;:::i;:::-;2668:2;:24;;;;:::i;:::-;2655:39;;2638:6;2645;2638:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2715:2;2706:11;;;;;:::i;:::-;;;2584:143;;;2749:6;2735:21;;;;;2270:493;;;;:::o;27632:118::-;26641:19;:17;:19::i;:::-;27702:4:::1;27692:7;;:14;;;;;;;;;;;;;;;;;;27722:20;27729:12;:10;:12::i;:::-;27722:20;;;;;;:::i;:::-;;;;;;;;27632:118::o:0;50048:252::-;26641:19;:17;:19::i;:::-;50231:61:::1;50259:4;50265:2;50269:12;50283:8;50231:27;:61::i;:::-;50048:252:::0;;;;:::o;44034:158::-;;;;;:::o;27380:108::-;27447:8;:6;:8::i;:::-;27439:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;27380:108::o;37076:163::-;37199:32;37205:2;37209:8;37219:5;37226:4;37199:5;:32::i;:::-;37076:163;;;:::o;4754:385::-;4814:4;5020:12;5087:7;5075:20;5067:28;;5130:1;5123:4;:8;5116:15;;;4754:385;;;:::o;27195:108::-;27266:8;:6;:8::i;:::-;27265:9;27257:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;27195:108::o;43463:159::-;;;;;:::o;37498:1538::-;37637:20;37660:12;;37637:35;;37705:1;37691:16;;:2;:16;;;37683:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37776:1;37764:8;:13;37756:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37835:61;37865:1;37869:2;37873:12;37887:8;37835:21;:61::i;:::-;38210:8;38174:12;:16;38187:2;38174:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38275:8;38234:12;:16;38247:2;38234:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38334:2;38301:11;:25;38313:12;38301:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38401:15;38351:11;:25;38363:12;38351:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38434:20;38457:12;38434:35;;38491:9;38486:415;38506:8;38502:1;:12;38486:415;;;38570:12;38566:2;38545:38;;38562:1;38545:38;;;;;;;;;;;;38606:4;38602:249;;;38669:59;38700:1;38704:2;38708:12;38722:5;38669:22;:59::i;:::-;38635:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;38602:249;38871:14;;;;;;;38516:3;;;;;;;38486:415;;;;38932:12;38917;:27;;;;38149:807;38968:60;38997:1;39001:2;39005:12;39019:8;38968:20;:60::i;:::-;37626:1410;37498:1538;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:149;1712:7;1752:66;1745:5;1741:78;1730:89;;1676:149;;;:::o;1831:120::-;1903:23;1920:5;1903:23;:::i;:::-;1896:5;1893:34;1883:62;;1941:1;1938;1931:12;1883:62;1831:120;:::o;1957:137::-;2002:5;2040:6;2027:20;2018:29;;2056:32;2082:5;2056:32;:::i;:::-;1957:137;;;;:::o;2100:327::-;2158:6;2207:2;2195:9;2186:7;2182:23;2178:32;2175:119;;;2213:79;;:::i;:::-;2175:119;2333:1;2358:52;2402:7;2393:6;2382:9;2378:22;2358:52;:::i;:::-;2348:62;;2304:116;2100:327;;;;:::o;2433:90::-;2467:7;2510:5;2503:13;2496:21;2485:32;;2433:90;;;:::o;2529:109::-;2610:21;2625:5;2610:21;:::i;:::-;2605:3;2598:34;2529:109;;:::o;2644:210::-;2731:4;2769:2;2758:9;2754:18;2746:26;;2782:65;2844:1;2833:9;2829:17;2820:6;2782:65;:::i;:::-;2644:210;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:329::-;5926:6;5975:2;5963:9;5954:7;5950:23;5946:32;5943:119;;;5981:79;;:::i;:::-;5943:119;6101:1;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6072:117;5867:329;;;;:::o;6202:117::-;6311:1;6308;6301:12;6325:117;6434:1;6431;6424:12;6448:117;6557:1;6554;6547:12;6588:568;6661:8;6671:6;6721:3;6714:4;6706:6;6702:17;6698:27;6688:122;;6729:79;;:::i;:::-;6688:122;6842:6;6829:20;6819:30;;6872:18;6864:6;6861:30;6858:117;;;6894:79;;:::i;:::-;6858:117;7008:4;7000:6;6996:17;6984:29;;7062:3;7054:4;7046:6;7042:17;7032:8;7028:32;7025:41;7022:128;;;7069:79;;:::i;:::-;7022:128;6588:568;;;;;:::o;7162:704::-;7257:6;7265;7273;7322:2;7310:9;7301:7;7297:23;7293:32;7290:119;;;7328:79;;:::i;:::-;7290:119;7448:1;7473:53;7518:7;7509:6;7498:9;7494:22;7473:53;:::i;:::-;7463:63;;7419:117;7603:2;7592:9;7588:18;7575:32;7634:18;7626:6;7623:30;7620:117;;;7656:79;;:::i;:::-;7620:117;7769:80;7841:7;7832:6;7821:9;7817:22;7769:80;:::i;:::-;7751:98;;;;7546:313;7162:704;;;;;:::o;7872:116::-;7942:21;7957:5;7942:21;:::i;:::-;7935:5;7932:32;7922:60;;7978:1;7975;7968:12;7922:60;7872:116;:::o;7994:133::-;8037:5;8075:6;8062:20;8053:29;;8091:30;8115:5;8091:30;:::i;:::-;7994:133;;;;:::o;8133:468::-;8198:6;8206;8255:2;8243:9;8234:7;8230:23;8226:32;8223:119;;;8261:79;;:::i;:::-;8223:119;8381:1;8406:53;8451:7;8442:6;8431:9;8427:22;8406:53;:::i;:::-;8396:63;;8352:117;8508:2;8534:50;8576:7;8567:6;8556:9;8552:22;8534:50;:::i;:::-;8524:60;;8479:115;8133:468;;;;;:::o;8607:117::-;8716:1;8713;8706:12;8730:180;8778:77;8775:1;8768:88;8875:4;8872:1;8865:15;8899:4;8896:1;8889:15;8916:281;8999:27;9021:4;8999:27;:::i;:::-;8991:6;8987:40;9129:6;9117:10;9114:22;9093:18;9081:10;9078:34;9075:62;9072:88;;;9140:18;;:::i;:::-;9072:88;9180:10;9176:2;9169:22;8959:238;8916:281;;:::o;9203:129::-;9237:6;9264:20;;:::i;:::-;9254:30;;9293:33;9321:4;9313:6;9293:33;:::i;:::-;9203:129;;;:::o;9338:308::-;9400:4;9490:18;9482:6;9479:30;9476:56;;;9512:18;;:::i;:::-;9476:56;9550:29;9572:6;9550:29;:::i;:::-;9542:37;;9634:4;9628;9624:15;9616:23;;9338:308;;;:::o;9652:146::-;9749:6;9744:3;9739;9726:30;9790:1;9781:6;9776:3;9772:16;9765:27;9652:146;;;:::o;9804:425::-;9882:5;9907:66;9923:49;9965:6;9923:49;:::i;:::-;9907:66;:::i;:::-;9898:75;;9996:6;9989:5;9982:21;10034:4;10027:5;10023:16;10072:3;10063:6;10058:3;10054:16;10051:25;10048:112;;;10079:79;;:::i;:::-;10048:112;10169:54;10216:6;10211:3;10206;10169:54;:::i;:::-;9888:341;9804:425;;;;;:::o;10249:340::-;10305:5;10354:3;10347:4;10339:6;10335:17;10331:27;10321:122;;10362:79;;:::i;:::-;10321:122;10479:6;10466:20;10504:79;10579:3;10571:6;10564:4;10556:6;10552:17;10504:79;:::i;:::-;10495:88;;10311:278;10249:340;;;;:::o;10595:509::-;10664:6;10713:2;10701:9;10692:7;10688:23;10684:32;10681:119;;;10719:79;;:::i;:::-;10681:119;10867:1;10856:9;10852:17;10839:31;10897:18;10889:6;10886:30;10883:117;;;10919:79;;:::i;:::-;10883:117;11024:63;11079:7;11070:6;11059:9;11055:22;11024:63;:::i;:::-;11014:73;;10810:287;10595:509;;;;:::o;11110:307::-;11171:4;11261:18;11253:6;11250:30;11247:56;;;11283:18;;:::i;:::-;11247:56;11321:29;11343:6;11321:29;:::i;:::-;11313:37;;11405:4;11399;11395:15;11387:23;;11110:307;;;:::o;11423:423::-;11500:5;11525:65;11541:48;11582:6;11541:48;:::i;:::-;11525:65;:::i;:::-;11516:74;;11613:6;11606:5;11599:21;11651:4;11644:5;11640:16;11689:3;11680:6;11675:3;11671:16;11668:25;11665:112;;;11696:79;;:::i;:::-;11665:112;11786:54;11833:6;11828:3;11823;11786:54;:::i;:::-;11506:340;11423:423;;;;;:::o;11865:338::-;11920:5;11969:3;11962:4;11954:6;11950:17;11946:27;11936:122;;11977:79;;:::i;:::-;11936:122;12094:6;12081:20;12119:78;12193:3;12185:6;12178:4;12170:6;12166:17;12119:78;:::i;:::-;12110:87;;11926:277;11865:338;;;;:::o;12209:943::-;12304:6;12312;12320;12328;12377:3;12365:9;12356:7;12352:23;12348:33;12345:120;;;12384:79;;:::i;:::-;12345:120;12504:1;12529:53;12574:7;12565:6;12554:9;12550:22;12529:53;:::i;:::-;12519:63;;12475:117;12631:2;12657:53;12702:7;12693:6;12682:9;12678:22;12657:53;:::i;:::-;12647:63;;12602:118;12759:2;12785:53;12830:7;12821:6;12810:9;12806:22;12785:53;:::i;:::-;12775:63;;12730:118;12915:2;12904:9;12900:18;12887:32;12946:18;12938:6;12935:30;12932:117;;;12968:79;;:::i;:::-;12932:117;13073:62;13127:7;13118:6;13107:9;13103:22;13073:62;:::i;:::-;13063:72;;12858:287;12209:943;;;;;;;:::o;13158:474::-;13226:6;13234;13283:2;13271:9;13262:7;13258:23;13254:32;13251:119;;;13289:79;;:::i;:::-;13251:119;13409:1;13434:53;13479:7;13470:6;13459:9;13455:22;13434:53;:::i;:::-;13424:63;;13380:117;13536:2;13562:53;13607:7;13598:6;13587:9;13583:22;13562:53;:::i;:::-;13552:63;;13507:118;13158:474;;;;;:::o;13638:180::-;13686:77;13683:1;13676:88;13783:4;13780:1;13773:15;13807:4;13804:1;13797:15;13824:320;13868:6;13905:1;13899:4;13895:12;13885:22;;13952:1;13946:4;13942:12;13973:18;13963:81;;14029:4;14021:6;14017:17;14007:27;;13963:81;14091:2;14083:6;14080:14;14060:18;14057:38;14054:84;;14110:18;;:::i;:::-;14054:84;13875:269;13824:320;;;:::o;14150:232::-;14290:34;14286:1;14278:6;14274:14;14267:58;14359:15;14354:2;14346:6;14342:15;14335:40;14150:232;:::o;14388:366::-;14530:3;14551:67;14615:2;14610:3;14551:67;:::i;:::-;14544:74;;14627:93;14716:3;14627:93;:::i;:::-;14745:2;14740:3;14736:12;14729:19;;14388:366;;;:::o;14760:419::-;14926:4;14964:2;14953:9;14949:18;14941:26;;15013:9;15007:4;15003:20;14999:1;14988:9;14984:17;14977:47;15041:131;15167:4;15041:131;:::i;:::-;15033:139;;14760:419;;;:::o;15185:221::-;15325:34;15321:1;15313:6;15309:14;15302:58;15394:4;15389:2;15381:6;15377:15;15370:29;15185:221;:::o;15412:366::-;15554:3;15575:67;15639:2;15634:3;15575:67;:::i;:::-;15568:74;;15651:93;15740:3;15651:93;:::i;:::-;15769:2;15764:3;15760:12;15753:19;;15412:366;;;:::o;15784:419::-;15950:4;15988:2;15977:9;15973:18;15965:26;;16037:9;16031:4;16027:20;16023:1;16012:9;16008:17;16001:47;16065:131;16191:4;16065:131;:::i;:::-;16057:139;;15784:419;;;:::o;16209:244::-;16349:34;16345:1;16337:6;16333:14;16326:58;16418:27;16413:2;16405:6;16401:15;16394:52;16209:244;:::o;16459:366::-;16601:3;16622:67;16686:2;16681:3;16622:67;:::i;:::-;16615:74;;16698:93;16787:3;16698:93;:::i;:::-;16816:2;16811:3;16807:12;16800:19;;16459:366;;;:::o;16831:419::-;16997:4;17035:2;17024:9;17020:18;17012:26;;17084:9;17078:4;17074:20;17070:1;17059:9;17055:17;17048:47;17112:131;17238:4;17112:131;:::i;:::-;17104:139;;16831:419;;;:::o;17256:221::-;17396:34;17392:1;17384:6;17380:14;17373:58;17465:4;17460:2;17452:6;17448:15;17441:29;17256:221;:::o;17483:366::-;17625:3;17646:67;17710:2;17705:3;17646:67;:::i;:::-;17639:74;;17722:93;17811:3;17722:93;:::i;:::-;17840:2;17835:3;17831:12;17824:19;;17483:366;;;:::o;17855:419::-;18021:4;18059:2;18048:9;18044:18;18036:26;;18108:9;18102:4;18098:20;18094:1;18083:9;18079:17;18072:47;18136:131;18262:4;18136:131;:::i;:::-;18128:139;;17855:419;;;:::o;18280:233::-;18420:34;18416:1;18408:6;18404:14;18397:58;18489:16;18484:2;18476:6;18472:15;18465:41;18280:233;:::o;18519:366::-;18661:3;18682:67;18746:2;18741:3;18682:67;:::i;:::-;18675:74;;18758:93;18847:3;18758:93;:::i;:::-;18876:2;18871:3;18867:12;18860:19;;18519:366;;;:::o;18891:419::-;19057:4;19095:2;19084:9;19080:18;19072:26;;19144:9;19138:4;19134:20;19130:1;19119:9;19115:17;19108:47;19172:131;19298:4;19172:131;:::i;:::-;19164:139;;18891:419;;;:::o;19316:222::-;19456:34;19452:1;19444:6;19440:14;19433:58;19525:5;19520:2;19512:6;19508:15;19501:30;19316:222;:::o;19544:366::-;19686:3;19707:67;19771:2;19766:3;19707:67;:::i;:::-;19700:74;;19783:93;19872:3;19783:93;:::i;:::-;19901:2;19896:3;19892:12;19885:19;;19544:366;;;:::o;19916:419::-;20082:4;20120:2;20109:9;20105:18;20097:26;;20169:9;20163:4;20159:20;20155:1;20144:9;20140:17;20133:47;20197:131;20323:4;20197:131;:::i;:::-;20189:139;;19916:419;;;:::o;20341:230::-;20481:34;20477:1;20469:6;20465:14;20458:58;20550:13;20545:2;20537:6;20533:15;20526:38;20341:230;:::o;20577:366::-;20719:3;20740:67;20804:2;20799:3;20740:67;:::i;:::-;20733:74;;20816:93;20905:3;20816:93;:::i;:::-;20934:2;20929:3;20925:12;20918:19;;20577:366;;;:::o;20949:419::-;21115:4;21153:2;21142:9;21138:18;21130:26;;21202:9;21196:4;21192:20;21188:1;21177:9;21173:17;21166:47;21230:131;21356:4;21230:131;:::i;:::-;21222:139;;20949:419;;;:::o;21374:162::-;21514:14;21510:1;21502:6;21498:14;21491:38;21374:162;:::o;21542:366::-;21684:3;21705:67;21769:2;21764:3;21705:67;:::i;:::-;21698:74;;21781:93;21870:3;21781:93;:::i;:::-;21899:2;21894:3;21890:12;21883:19;;21542:366;;;:::o;21914:419::-;22080:4;22118:2;22107:9;22103:18;22095:26;;22167:9;22161:4;22157:20;22153:1;22142:9;22138:17;22131:47;22195:131;22321:4;22195:131;:::i;:::-;22187:139;;21914:419;;;:::o;22339:168::-;22479:20;22475:1;22467:6;22463:14;22456:44;22339:168;:::o;22513:366::-;22655:3;22676:67;22740:2;22735:3;22676:67;:::i;:::-;22669:74;;22752:93;22841:3;22752:93;:::i;:::-;22870:2;22865:3;22861:12;22854:19;;22513:366;;;:::o;22885:419::-;23051:4;23089:2;23078:9;23074:18;23066:26;;23138:9;23132:4;23128:20;23124:1;23113:9;23109:17;23102:47;23166:131;23292:4;23166:131;:::i;:::-;23158:139;;22885:419;;;:::o;23310:180::-;23358:77;23355:1;23348:88;23455:4;23452:1;23445:15;23479:4;23476:1;23469:15;23496:191;23536:3;23555:20;23573:1;23555:20;:::i;:::-;23550:25;;23589:20;23607:1;23589:20;:::i;:::-;23584:25;;23632:1;23629;23625:9;23618:16;;23653:3;23650:1;23647:10;23644:36;;;23660:18;;:::i;:::-;23644:36;23496:191;;;;:::o;23693:171::-;23833:23;23829:1;23821:6;23817:14;23810:47;23693:171;:::o;23870:366::-;24012:3;24033:67;24097:2;24092:3;24033:67;:::i;:::-;24026:74;;24109:93;24198:3;24109:93;:::i;:::-;24227:2;24222:3;24218:12;24211:19;;23870:366;;;:::o;24242:419::-;24408:4;24446:2;24435:9;24431:18;24423:26;;24495:9;24489:4;24485:20;24481:1;24470:9;24466:17;24459:47;24523:131;24649:4;24523:131;:::i;:::-;24515:139;;24242:419;;;:::o;24667:180::-;24715:77;24712:1;24705:88;24812:4;24809:1;24802:15;24836:4;24833:1;24826:15;24853:174;24993:26;24989:1;24981:6;24977:14;24970:50;24853:174;:::o;25033:366::-;25175:3;25196:67;25260:2;25255:3;25196:67;:::i;:::-;25189:74;;25272:93;25361:3;25272:93;:::i;:::-;25390:2;25385:3;25381:12;25374:19;;25033:366;;;:::o;25405:419::-;25571:4;25609:2;25598:9;25594:18;25586:26;;25658:9;25652:4;25648:20;25644:1;25633:9;25629:17;25622:47;25686:131;25812:4;25686:131;:::i;:::-;25678:139;;25405:419;;;:::o;25830:233::-;25869:3;25892:24;25910:5;25892:24;:::i;:::-;25883:33;;25938:66;25931:5;25928:77;25925:103;;26008:18;;:::i;:::-;25925:103;26055:1;26048:5;26044:13;26037:20;;25830:233;;;:::o;26069:176::-;26209:28;26205:1;26197:6;26193:14;26186:52;26069:176;:::o;26251:366::-;26393:3;26414:67;26478:2;26473:3;26414:67;:::i;:::-;26407:74;;26490:93;26579:3;26490:93;:::i;:::-;26608:2;26603:3;26599:12;26592:19;;26251:366;;;:::o;26623:419::-;26789:4;26827:2;26816:9;26812:18;26804:26;;26876:9;26870:4;26866:20;26862:1;26851:9;26847:17;26840:47;26904:131;27030:4;26904:131;:::i;:::-;26896:139;;26623:419;;;:::o;27048:164::-;27188:16;27184:1;27176:6;27172:14;27165:40;27048:164;:::o;27218:366::-;27360:3;27381:67;27445:2;27440:3;27381:67;:::i;:::-;27374:74;;27457:93;27546:3;27457:93;:::i;:::-;27575:2;27570:3;27566:12;27559:19;;27218:366;;;:::o;27590:419::-;27756:4;27794:2;27783:9;27779:18;27771:26;;27843:9;27837:4;27833:20;27829:1;27818:9;27814:17;27807:47;27871:131;27997:4;27871:131;:::i;:::-;27863:139;;27590:419;;;:::o;28015:165::-;28155:17;28151:1;28143:6;28139:14;28132:41;28015:165;:::o;28186:366::-;28328:3;28349:67;28413:2;28408:3;28349:67;:::i;:::-;28342:74;;28425:93;28514:3;28425:93;:::i;:::-;28543:2;28538:3;28534:12;28527:19;;28186:366;;;:::o;28558:419::-;28724:4;28762:2;28751:9;28747:18;28739:26;;28811:9;28805:4;28801:20;28797:1;28786:9;28782:17;28775:47;28839:131;28965:4;28839:131;:::i;:::-;28831:139;;28558:419;;;:::o;28983:141::-;29032:4;29055:3;29047:11;;29078:3;29075:1;29068:14;29112:4;29109:1;29099:18;29091:26;;28983:141;;;:::o;29130:93::-;29167:6;29214:2;29209;29202:5;29198:14;29194:23;29184:33;;29130:93;;;:::o;29229:107::-;29273:8;29323:5;29317:4;29313:16;29292:37;;29229:107;;;;:::o;29342:393::-;29411:6;29461:1;29449:10;29445:18;29484:97;29514:66;29503:9;29484:97;:::i;:::-;29602:39;29632:8;29621:9;29602:39;:::i;:::-;29590:51;;29674:4;29670:9;29663:5;29659:21;29650:30;;29723:4;29713:8;29709:19;29702:5;29699:30;29689:40;;29418:317;;29342:393;;;;;:::o;29741:60::-;29769:3;29790:5;29783:12;;29741:60;;;:::o;29807:142::-;29857:9;29890:53;29908:34;29917:24;29935:5;29917:24;:::i;:::-;29908:34;:::i;:::-;29890:53;:::i;:::-;29877:66;;29807:142;;;:::o;29955:75::-;29998:3;30019:5;30012:12;;29955:75;;;:::o;30036:269::-;30146:39;30177:7;30146:39;:::i;:::-;30207:91;30256:41;30280:16;30256:41;:::i;:::-;30248:6;30241:4;30235:11;30207:91;:::i;:::-;30201:4;30194:105;30112:193;30036:269;;;:::o;30311:73::-;30356:3;30311:73;:::o;30390:189::-;30467:32;;:::i;:::-;30508:65;30566:6;30558;30552:4;30508:65;:::i;:::-;30443:136;30390:189;;:::o;30585:186::-;30645:120;30662:3;30655:5;30652:14;30645:120;;;30716:39;30753:1;30746:5;30716:39;:::i;:::-;30689:1;30682:5;30678:13;30669:22;;30645:120;;;30585:186;;:::o;30777:543::-;30878:2;30873:3;30870:11;30867:446;;;30912:38;30944:5;30912:38;:::i;:::-;30996:29;31014:10;30996:29;:::i;:::-;30986:8;30982:44;31179:2;31167:10;31164:18;31161:49;;;31200:8;31185:23;;31161:49;31223:80;31279:22;31297:3;31279:22;:::i;:::-;31269:8;31265:37;31252:11;31223:80;:::i;:::-;30882:431;;30867:446;30777:543;;;:::o;31326:117::-;31380:8;31430:5;31424:4;31420:16;31399:37;;31326:117;;;;:::o;31449:169::-;31493:6;31526:51;31574:1;31570:6;31562:5;31559:1;31555:13;31526:51;:::i;:::-;31522:56;31607:4;31601;31597:15;31587:25;;31500:118;31449:169;;;;:::o;31623:295::-;31699:4;31845:29;31870:3;31864:4;31845:29;:::i;:::-;31837:37;;31907:3;31904:1;31900:11;31894:4;31891:21;31883:29;;31623:295;;;;:::o;31923:1395::-;32040:37;32073:3;32040:37;:::i;:::-;32142:18;32134:6;32131:30;32128:56;;;32164:18;;:::i;:::-;32128:56;32208:38;32240:4;32234:11;32208:38;:::i;:::-;32293:67;32353:6;32345;32339:4;32293:67;:::i;:::-;32387:1;32411:4;32398:17;;32443:2;32435:6;32432:14;32460:1;32455:618;;;;33117:1;33134:6;33131:77;;;33183:9;33178:3;33174:19;33168:26;33159:35;;33131:77;33234:67;33294:6;33287:5;33234:67;:::i;:::-;33228:4;33221:81;33090:222;32425:887;;32455:618;32507:4;32503:9;32495:6;32491:22;32541:37;32573:4;32541:37;:::i;:::-;32600:1;32614:208;32628:7;32625:1;32622:14;32614:208;;;32707:9;32702:3;32698:19;32692:26;32684:6;32677:42;32758:1;32750:6;32746:14;32736:24;;32805:2;32794:9;32790:18;32777:31;;32651:4;32648:1;32644:12;32639:17;;32614:208;;;32850:6;32841:7;32838:19;32835:179;;;32908:9;32903:3;32899:19;32893:26;32951:48;32993:4;32985:6;32981:17;32970:9;32951:48;:::i;:::-;32943:6;32936:64;32858:156;32835:179;33060:1;33056;33048:6;33044:14;33040:22;33034:4;33027:36;32462:611;;;32425:887;;32015:1303;;;31923:1395;;:::o;33324:238::-;33464:34;33460:1;33452:6;33448:14;33441:58;33533:21;33528:2;33520:6;33516:15;33509:46;33324:238;:::o;33568:366::-;33710:3;33731:67;33795:2;33790:3;33731:67;:::i;:::-;33724:74;;33807:93;33896:3;33807:93;:::i;:::-;33925:2;33920:3;33916:12;33909:19;;33568:366;;;:::o;33940:419::-;34106:4;34144:2;34133:9;34129:18;34121:26;;34193:9;34187:4;34183:20;34179:1;34168:9;34164:17;34157:47;34221:131;34347:4;34221:131;:::i;:::-;34213:139;;33940:419;;;:::o;34365:234::-;34505:34;34501:1;34493:6;34489:14;34482:58;34574:17;34569:2;34561:6;34557:15;34550:42;34365:234;:::o;34605:366::-;34747:3;34768:67;34832:2;34827:3;34768:67;:::i;:::-;34761:74;;34844:93;34933:3;34844:93;:::i;:::-;34962:2;34957:3;34953:12;34946:19;;34605:366;;;:::o;34977:419::-;35143:4;35181:2;35170:9;35166:18;35158:26;;35230:9;35224:4;35220:20;35216:1;35205:9;35201:17;35194:47;35258:131;35384:4;35258:131;:::i;:::-;35250:139;;34977:419;;;:::o;35402:148::-;35504:11;35541:3;35526:18;;35402:148;;;;:::o;35556:390::-;35662:3;35690:39;35723:5;35690:39;:::i;:::-;35745:89;35827:6;35822:3;35745:89;:::i;:::-;35738:96;;35843:65;35901:6;35896:3;35889:4;35882:5;35878:16;35843:65;:::i;:::-;35933:6;35928:3;35924:16;35917:23;;35666:280;35556:390;;;;:::o;35952:155::-;36092:7;36088:1;36080:6;36076:14;36069:31;35952:155;:::o;36113:400::-;36273:3;36294:84;36376:1;36371:3;36294:84;:::i;:::-;36287:91;;36387:93;36476:3;36387:93;:::i;:::-;36505:1;36500:3;36496:11;36489:18;;36113:400;;;:::o;36519:701::-;36800:3;36822:95;36913:3;36904:6;36822:95;:::i;:::-;36815:102;;36934:95;37025:3;37016:6;36934:95;:::i;:::-;36927:102;;37046:148;37190:3;37046:148;:::i;:::-;37039:155;;37211:3;37204:10;;36519:701;;;;;:::o;37226:225::-;37366:34;37362:1;37354:6;37350:14;37343:58;37435:8;37430:2;37422:6;37418:15;37411:33;37226:225;:::o;37457:366::-;37599:3;37620:67;37684:2;37679:3;37620:67;:::i;:::-;37613:74;;37696:93;37785:3;37696:93;:::i;:::-;37814:2;37809:3;37805:12;37798:19;;37457:366;;;:::o;37829:419::-;37995:4;38033:2;38022:9;38018:18;38010:26;;38082:9;38076:4;38072:20;38068:1;38057:9;38053:17;38046:47;38110:131;38236:4;38110:131;:::i;:::-;38102:139;;37829:419;;;:::o;38254:237::-;38394:34;38390:1;38382:6;38378:14;38371:58;38463:20;38458:2;38450:6;38446:15;38439:45;38254:237;:::o;38497:366::-;38639:3;38660:67;38724:2;38719:3;38660:67;:::i;:::-;38653:74;;38736:93;38825:3;38736:93;:::i;:::-;38854:2;38849:3;38845:12;38838:19;;38497:366;;;:::o;38869:419::-;39035:4;39073:2;39062:9;39058:18;39050:26;;39122:9;39116:4;39112:20;39108:1;39097:9;39093:17;39086:47;39150:131;39276:4;39150:131;:::i;:::-;39142:139;;38869:419;;;:::o;39294:225::-;39434:34;39430:1;39422:6;39418:14;39411:58;39503:8;39498:2;39490:6;39486:15;39479:33;39294:225;:::o;39525:366::-;39667:3;39688:67;39752:2;39747:3;39688:67;:::i;:::-;39681:74;;39764:93;39853:3;39764:93;:::i;:::-;39882:2;39877:3;39873:12;39866:19;;39525:366;;;:::o;39897:419::-;40063:4;40101:2;40090:9;40086:18;40078:26;;40150:9;40144:4;40140:20;40136:1;40125:9;40121:17;40114:47;40178:131;40304:4;40178:131;:::i;:::-;40170:139;;39897:419;;;:::o;40322:224::-;40462:34;40458:1;40450:6;40446:14;40439:58;40531:7;40526:2;40518:6;40514:15;40507:32;40322:224;:::o;40552:366::-;40694:3;40715:67;40779:2;40774:3;40715:67;:::i;:::-;40708:74;;40791:93;40880:3;40791:93;:::i;:::-;40909:2;40904:3;40900:12;40893:19;;40552:366;;;:::o;40924:419::-;41090:4;41128:2;41117:9;41113:18;41105:26;;41177:9;41171:4;41167:20;41163:1;41152:9;41148:17;41141:47;41205:131;41331:4;41205:131;:::i;:::-;41197:139;;40924:419;;;:::o;41349:229::-;41489:34;41485:1;41477:6;41473:14;41466:58;41558:12;41553:2;41545:6;41541:15;41534:37;41349:229;:::o;41584:366::-;41726:3;41747:67;41811:2;41806:3;41747:67;:::i;:::-;41740:74;;41823:93;41912:3;41823:93;:::i;:::-;41941:2;41936:3;41932:12;41925:19;;41584:366;;;:::o;41956:419::-;42122:4;42160:2;42149:9;42145:18;42137:26;;42209:9;42203:4;42199:20;42195:1;42184:9;42180:17;42173:47;42237:131;42363:4;42237:131;:::i;:::-;42229:139;;41956:419;;;:::o;42381:234::-;42521:34;42517:1;42509:6;42505:14;42498:58;42590:17;42585:2;42577:6;42573:15;42566:42;42381:234;:::o;42621:366::-;42763:3;42784:67;42848:2;42843:3;42784:67;:::i;:::-;42777:74;;42860:93;42949:3;42860:93;:::i;:::-;42978:2;42973:3;42969:12;42962:19;;42621:366;;;:::o;42993:419::-;43159:4;43197:2;43186:9;43182:18;43174:26;;43246:9;43240:4;43236:20;43232:1;43221:9;43217:17;43210:47;43274:131;43400:4;43274:131;:::i;:::-;43266:139;;42993:419;;;:::o;43418:98::-;43469:6;43503:5;43497:12;43487:22;;43418:98;;;:::o;43522:168::-;43605:11;43639:6;43634:3;43627:19;43679:4;43674:3;43670:14;43655:29;;43522:168;;;;:::o;43696:373::-;43782:3;43810:38;43842:5;43810:38;:::i;:::-;43864:70;43927:6;43922:3;43864:70;:::i;:::-;43857:77;;43943:65;44001:6;43996:3;43989:4;43982:5;43978:16;43943:65;:::i;:::-;44033:29;44055:6;44033:29;:::i;:::-;44028:3;44024:39;44017:46;;43786:283;43696:373;;;;:::o;44075:640::-;44270:4;44308:3;44297:9;44293:19;44285:27;;44322:71;44390:1;44379:9;44375:17;44366:6;44322:71;:::i;:::-;44403:72;44471:2;44460:9;44456:18;44447:6;44403:72;:::i;:::-;44485;44553:2;44542:9;44538:18;44529:6;44485:72;:::i;:::-;44604:9;44598:4;44594:20;44589:2;44578:9;44574:18;44567:48;44632:76;44703:4;44694:6;44632:76;:::i;:::-;44624:84;;44075:640;;;;;;;:::o;44721:141::-;44777:5;44808:6;44802:13;44793:22;;44824:32;44850:5;44824:32;:::i;:::-;44721:141;;;;:::o;44868:349::-;44937:6;44986:2;44974:9;44965:7;44961:23;44957:32;44954:119;;;44992:79;;:::i;:::-;44954:119;45112:1;45137:63;45192:7;45183:6;45172:9;45168:22;45137:63;:::i;:::-;45127:73;;45083:127;44868:349;;;;:::o;45223:180::-;45271:77;45268:1;45261:88;45368:4;45365:1;45358:15;45392:4;45389:1;45382:15;45409:185;45449:1;45466:20;45484:1;45466:20;:::i;:::-;45461:25;;45500:20;45518:1;45500:20;:::i;:::-;45495:25;;45539:1;45529:35;;45544:18;;:::i;:::-;45529:35;45586:1;45583;45579:9;45574:14;;45409:185;;;;:::o;45600:194::-;45640:4;45660:20;45678:1;45660:20;:::i;:::-;45655:25;;45694:20;45712:1;45694:20;:::i;:::-;45689:25;;45738:1;45735;45731:9;45723:17;;45762:1;45756:4;45753:11;45750:37;;;45767:18;;:::i;:::-;45750:37;45600:194;;;;:::o;45800:176::-;45832:1;45849:20;45867:1;45849:20;:::i;:::-;45844:25;;45883:20;45901:1;45883:20;:::i;:::-;45878:25;;45922:1;45912:35;;45927:18;;:::i;:::-;45912:35;45968:1;45965;45961:9;45956:14;;45800:176;;;;:::o;45982:170::-;46122:22;46118:1;46110:6;46106:14;46099:46;45982:170;:::o;46158:366::-;46300:3;46321:67;46385:2;46380:3;46321:67;:::i;:::-;46314:74;;46397:93;46486:3;46397:93;:::i;:::-;46515:2;46510:3;46506:12;46499:19;;46158:366;;;:::o;46530:419::-;46696:4;46734:2;46723:9;46719:18;46711:26;;46783:9;46777:4;46773:20;46769:1;46758:9;46754:17;46747:47;46811:131;46937:4;46811:131;:::i;:::-;46803:139;;46530:419;;;:::o;46955:166::-;47095:18;47091:1;47083:6;47079:14;47072:42;46955:166;:::o;47127:366::-;47269:3;47290:67;47354:2;47349:3;47290:67;:::i;:::-;47283:74;;47366:93;47455:3;47366:93;:::i;:::-;47484:2;47479:3;47475:12;47468:19;;47127:366;;;:::o;47499:419::-;47665:4;47703:2;47692:9;47688:18;47680:26;;47752:9;47746:4;47742:20;47738:1;47727:9;47723:17;47716:47;47780:131;47906:4;47780:131;:::i;:::-;47772:139;;47499:419;;;:::o;47924:220::-;48064:34;48060:1;48052:6;48048:14;48041:58;48133:3;48128:2;48120:6;48116:15;48109:28;47924:220;:::o;48150:366::-;48292:3;48313:67;48377:2;48372:3;48313:67;:::i;:::-;48306:74;;48389:93;48478:3;48389:93;:::i;:::-;48507:2;48502:3;48498:12;48491:19;;48150:366;;;:::o;48522:419::-;48688:4;48726:2;48715:9;48711:18;48703:26;;48775:9;48769:4;48765:20;48761:1;48750:9;48746:17;48739:47;48803:131;48929:4;48803:131;:::i;:::-;48795:139;;48522:419;;;:::o;48947:227::-;49087:34;49083:1;49075:6;49071:14;49064:58;49156:10;49151:2;49143:6;49139:15;49132:35;48947:227;:::o;49180:366::-;49322:3;49343:67;49407:2;49402:3;49343:67;:::i;:::-;49336:74;;49419:93;49508:3;49419:93;:::i;:::-;49537:2;49532:3;49528:12;49521:19;;49180:366;;;:::o;49552:419::-;49718:4;49756:2;49745:9;49741:18;49733:26;;49805:9;49799:4;49795:20;49791:1;49780:9;49776:17;49769:47;49833:131;49959:4;49833:131;:::i;:::-;49825:139;;49552:419;;;:::o

Swarm Source

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