ETH Price: $3,337.42 (+0.21%)
 

Overview

Max Total Supply

2,222 L2E

Holders

17

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0x31f1647a9defa455971ffc51cd7fa3d8e1f99956
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
L2EPassPrinter

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-19
*/

// SPDX-License-Identifier: MIT


// Amended by HashLips

/**
   __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
*/



pragma solidity ^0.8.0;

/**
 __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
 */
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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol



pragma solidity ^0.8.0;


/**
 __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
   __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
     */
    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;
    }

    /**
   __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
     */
    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");
    }

    /**
     __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol



pragma solidity ^0.8.0;

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;


/**
 __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
 */
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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol



pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
      __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol



pragma solidity ^0.8.0;


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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol



pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

    /**
 __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

    /**
      __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

    /**
     __         ______   ________         ______                                          
|  \       /      \ |        \       /      \                                         
| $$      |  $$$$$$\| $$$$$$$$      |  $$$$$$\  ______    ______   __    __   ______  
| $$       \$$__| $$| $$__          | $$ __\$$ /      \  /      \ |  \  |  \ /      \ 
| $$       /      $$| $$  \         | $$|    \|  $$$$$$\|  $$$$$$\| $$  | $$|  $$$$$$\
| $$      |  $$$$$$ | $$$$$         | $$ \$$$$| $$   \$$| $$  | $$| $$  | $$| $$  | $$
| $$_____ | $$_____ | $$_____       | $$__| $$| $$      | $$__/ $$| $$__/ $$| $$__/ $$
| $$     \| $$     \| $$     \       \$$    $$| $$       \$$    $$ \$$    $$| $$    $$
 \$$$$$$$$ \$$$$$$$$ \$$$$$$$$        \$$$$$$  \$$        \$$$$$$   \$$$$$$ | $$$$$$$ 
                                                                            | $$      
                                                                            | $$      
                                                                             \$$      
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

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

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

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

        return array;
    }
}

pragma solidity ^0.8.0;

contract L2EPassPrinter is ERC1155, Ownable {
    
  string public name;
  string public symbol;

  mapping(uint => string) public tokenURI;

  constructor() ERC1155("") {
    name = "[L2E]Pass";
    symbol = "L2E";
  }
  
  function mint(address _to, uint _id, uint _amount) external onlyOwner {
    _mint(_to, _id, _amount, "");
  }

  function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner {
    _mintBatch(_to, _ids, _amounts, "");
  }

  function burn(uint _id, uint _amount) external {
    _burn(msg.sender, _id, _amount);
  }

  function burnBatch(uint[] memory _ids, uint[] memory _amounts) external {
    _burnBatch(msg.sender, _ids, _amounts);
  }

  function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner {
    _burnBatch(_from, _burnIds, _burnAmounts);
    _mintBatch(_from, _mintIds, _mintAmounts, "");
  }

  function setURI(uint _id, string memory _uri) external onlyOwner {
    tokenURI[_id] = _uri;
    emit URI(_uri, _id);
  }
  

  function uri(uint _id) public override view returns (string memory) {
    return tokenURI[_id];
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051806020016040528060008152506200003381620000f660201b60201c565b5062000054620000486200011260201b60201c565b6200011a60201b60201c565b6040518060400160405280600981526020017f5b4c32455d50617373000000000000000000000000000000000000000000000081525060049080519060200190620000a1929190620001e0565b506040518060400160405280600381526020017f4c3245000000000000000000000000000000000000000000000000000000000081525060059080519060200190620000ef929190620001e0565b50620002f5565b80600290805190602001906200010e929190620001e0565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee90620002bf565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002d857607f821691505b60208210811415620002ef57620002ee62000290565b5b50919050565b613e5780620003056000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063c87b56dd11610071578063c87b56dd14610318578063d81d0a1514610348578063e985e9c514610364578063f242432a14610394578063f2fde38b146103b05761012b565b8063862440e2146102885780638da5cb5b146102a457806395d89b41146102c2578063a22cb465146102e0578063b390c0ab146102fc5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f414610216578063510f410414610246578063715018a61461026257806383ca4b6f1461026c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae578063156e29f6146101de575b600080fd5b61014a600480360381019061014591906125d1565b6103cc565b6040516101579190612620565b60405180910390f35b61017a60048036038101906101759190612693565b610495565b60405161018791906126db565b60405180910390f35b610198610577565b6040516101a5919061278f565b60405180910390f35b6101c860048036038101906101c391906127b1565b610605565b6040516101d5919061278f565b60405180910390f35b6101f860048036038101906101f391906127de565b6106aa565b005b610214600480360381019061020f9190612a2e565b610746565b005b610230600480360381019061022b9190612bc0565b6107e7565b60405161023d9190612cf6565b60405180910390f35b610260600480360381019061025b9190612d18565b610900565b005b61026a6109a9565b005b61028660048036038101906102819190612e03565b610a31565b005b6102a2600480360381019061029d9190612f1c565b610a40565b005b6102ac610b20565b6040516102b99190612f87565b60405180910390f35b6102ca610b4a565b6040516102d7919061278f565b60405180910390f35b6102fa60048036038101906102f59190612fce565b610bd8565b005b6103166004803603810190610311919061300e565b610bee565b005b610332600480360381019061032d91906127b1565b610bfd565b60405161033f919061278f565b60405180910390f35b610362600480360381019061035d919061304e565b610c9d565b005b61037e600480360381019061037991906130d9565b610d39565b60405161038b91906126db565b60405180910390f35b6103ae60048036038101906103a99190613119565b610dcd565b005b6103ca60048036038101906103c591906131b0565b610e6e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561043d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104349061324f565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610570575061056f82610f66565b5b9050919050565b600480546105849061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546105b09061329e565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b505050505081565b60606006600083815260200190815260200160002080546106259061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546106519061329e565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b50505050509050919050565b6106b2610fd0565b73ffffffffffffffffffffffffffffffffffffffff166106d0610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d9061331c565b60405180910390fd5b61074183838360405180602001604052806000815250610fd8565b505050565b61074e610fd0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079457506107938561078e610fd0565b610d39565b5b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906133ae565b60405180910390fd5b6107e0858585858561116e565b5050505050565b6060815183511461082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490613440565b60405180910390fd5b6000835167ffffffffffffffff81111561084a57610849612836565b5b6040519080825280602002602001820160405280156108785781602001602082028036833780820191505090505b50905060005b84518110156108f5576108c585828151811061089d5761089c613460565b5b60200260200101518583815181106108b8576108b7613460565b5b60200260200101516103cc565b8282815181106108d8576108d7613460565b5b602002602001018181525050806108ee906134be565b905061087e565b508091505092915050565b610908610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610926610b20565b73ffffffffffffffffffffffffffffffffffffffff161461097c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109739061331c565b60405180910390fd5b610987858585611482565b6109a285838360405180602001604052806000815250611733565b5050505050565b6109b1610fd0565b73ffffffffffffffffffffffffffffffffffffffff166109cf610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c9061331c565b60405180910390fd5b610a2f6000611951565b565b610a3c338383611482565b5050565b610a48610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610a66610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab39061331c565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610ae3929190612486565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b14919061278f565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b579061329e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b839061329e565b8015610bd05780601f10610ba557610100808354040283529160200191610bd0565b820191906000526020600020905b815481529060010190602001808311610bb357829003601f168201915b505050505081565b610bea610be3610fd0565b8383611a17565b5050565b610bf9338383611b84565b5050565b60066020528060005260406000206000915090508054610c1c9061329e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c489061329e565b8015610c955780601f10610c6a57610100808354040283529160200191610c95565b820191906000526020600020905b815481529060010190602001808311610c7857829003601f168201915b505050505081565b610ca5610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610cc3610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d109061331c565b60405180910390fd5b610d3483838360405180602001604052806000815250611733565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610dd5610fd0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e1b5750610e1a85610e15610fd0565b610d39565b5b610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613579565b60405180910390fd5b610e678585858585611da1565b5050505050565b610e76610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610e94610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee19061331c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f519061360b565b60405180910390fd5b610f6381611951565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f9061369d565b60405180910390fd5b6000611052610fd0565b90506110738160008761106488612023565b61106d88612023565b8761209d565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d291906136bd565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611150929190613713565b60405180910390a4611167816000878787876120a5565b5050505050565b81518351146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a9906137ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121990613840565b60405180910390fd5b600061122c610fd0565b905061123c81878787878761209d565b60005b84518110156113ed57600085828151811061125d5761125c613460565b5b60200260200101519050600085838151811061127c5761127b613460565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561131d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611314906138d2565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113d291906136bd565b92505081905550505050806113e6906134be565b905061123f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114649291906138f2565b60405180910390a461147a81878787878761228c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e99061399b565b60405180910390fd5b8051825114611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d906137ae565b60405180910390fd5b6000611540610fd0565b90506115608185600086866040518060200160405280600081525061209d565b60005b83518110156116ad57600084828151811061158157611580613460565b5b6020026020010151905060008483815181106115a05761159f613460565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163890613a2d565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806116a5906134be565b915050611563565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516117259291906138f2565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a9061369d565b60405180910390fd5b81518351146117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de906137ae565b60405180910390fd5b60006117f1610fd0565b90506118028160008787878761209d565b60005b84518110156118bb5783818151811061182157611820613460565b5b602002602001015160008087848151811061183f5761183e613460565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118a191906136bd565b9250508190555080806118b3906134be565b915050611805565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119339291906138f2565b60405180910390a461194a8160008787878761228c565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613abf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b7791906126db565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb9061399b565b60405180910390fd5b6000611bfe610fd0565b9050611c2e81856000611c1087612023565b611c1987612023565b6040518060200160405280600081525061209d565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90613a2d565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611d92929190613713565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890613840565b60405180910390fd5b6000611e1b610fd0565b9050611e3b818787611e2c88612023565b611e3588612023565b8761209d565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec9906138d2565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f8791906136bd565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612004929190613713565b60405180910390a461201a8288888888886120a5565b50505050505050565b60606000600167ffffffffffffffff81111561204257612041612836565b5b6040519080825280602002602001820160405280156120705781602001602082028036833780820191505090505b509050828160008151811061208857612087613460565b5b60200260200101818152505080915050919050565b505050505050565b6120c48473ffffffffffffffffffffffffffffffffffffffff16612473565b15612284578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161210a959493929190613b34565b602060405180830381600087803b15801561212457600080fd5b505af192505050801561215557506040513d601f19601f820116820180604052508101906121529190613ba3565b60015b6121fb57612161613bdd565b806308c379a014156121be5750612176613bff565b8061218157506121c0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b5919061278f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613d07565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990613d99565b60405180910390fd5b505b505050505050565b6122ab8473ffffffffffffffffffffffffffffffffffffffff16612473565b1561246b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016122f1959493929190613db9565b602060405180830381600087803b15801561230b57600080fd5b505af192505050801561233c57506040513d601f19601f820116820180604052508101906123399190613ba3565b60015b6123e257612348613bdd565b806308c379a014156123a5575061235d613bff565b8061236857506123a7565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c919061278f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990613d07565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090613d99565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546124929061329e565b90600052602060002090601f0160209004810192826124b457600085556124fb565b82601f106124cd57805160ff19168380011785556124fb565b828001600101855582156124fb579182015b828111156124fa5782518255916020019190600101906124df565b5b509050612508919061250c565b5090565b5b8082111561252557600081600090555060010161250d565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125688261253d565b9050919050565b6125788161255d565b811461258357600080fd5b50565b6000813590506125958161256f565b92915050565b6000819050919050565b6125ae8161259b565b81146125b957600080fd5b50565b6000813590506125cb816125a5565b92915050565b600080604083850312156125e8576125e7612533565b5b60006125f685828601612586565b9250506020612607858286016125bc565b9150509250929050565b61261a8161259b565b82525050565b60006020820190506126356000830184612611565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126708161263b565b811461267b57600080fd5b50565b60008135905061268d81612667565b92915050565b6000602082840312156126a9576126a8612533565b5b60006126b78482850161267e565b91505092915050565b60008115159050919050565b6126d5816126c0565b82525050565b60006020820190506126f060008301846126cc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612730578082015181840152602081019050612715565b8381111561273f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612761826126f6565b61276b8185612701565b935061277b818560208601612712565b61278481612745565b840191505092915050565b600060208201905081810360008301526127a98184612756565b905092915050565b6000602082840312156127c7576127c6612533565b5b60006127d5848285016125bc565b91505092915050565b6000806000606084860312156127f7576127f6612533565b5b600061280586828701612586565b9350506020612816868287016125bc565b9250506040612827868287016125bc565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61286e82612745565b810181811067ffffffffffffffff8211171561288d5761288c612836565b5b80604052505050565b60006128a0612529565b90506128ac8282612865565b919050565b600067ffffffffffffffff8211156128cc576128cb612836565b5b602082029050602081019050919050565b600080fd5b60006128f56128f0846128b1565b612896565b90508083825260208201905060208402830185811115612918576129176128dd565b5b835b81811015612941578061292d88826125bc565b84526020840193505060208101905061291a565b5050509392505050565b600082601f8301126129605761295f612831565b5b81356129708482602086016128e2565b91505092915050565b600080fd5b600067ffffffffffffffff82111561299957612998612836565b5b6129a282612745565b9050602081019050919050565b82818337600083830152505050565b60006129d16129cc8461297e565b612896565b9050828152602081018484840111156129ed576129ec612979565b5b6129f88482856129af565b509392505050565b600082601f830112612a1557612a14612831565b5b8135612a258482602086016129be565b91505092915050565b600080600080600060a08688031215612a4a57612a49612533565b5b6000612a5888828901612586565b9550506020612a6988828901612586565b945050604086013567ffffffffffffffff811115612a8a57612a89612538565b5b612a968882890161294b565b935050606086013567ffffffffffffffff811115612ab757612ab6612538565b5b612ac38882890161294b565b925050608086013567ffffffffffffffff811115612ae457612ae3612538565b5b612af088828901612a00565b9150509295509295909350565b600067ffffffffffffffff821115612b1857612b17612836565b5b602082029050602081019050919050565b6000612b3c612b3784612afd565b612896565b90508083825260208201905060208402830185811115612b5f57612b5e6128dd565b5b835b81811015612b885780612b748882612586565b845260208401935050602081019050612b61565b5050509392505050565b600082601f830112612ba757612ba6612831565b5b8135612bb7848260208601612b29565b91505092915050565b60008060408385031215612bd757612bd6612533565b5b600083013567ffffffffffffffff811115612bf557612bf4612538565b5b612c0185828601612b92565b925050602083013567ffffffffffffffff811115612c2257612c21612538565b5b612c2e8582860161294b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c6d8161259b565b82525050565b6000612c7f8383612c64565b60208301905092915050565b6000602082019050919050565b6000612ca382612c38565b612cad8185612c43565b9350612cb883612c54565b8060005b83811015612ce9578151612cd08882612c73565b9750612cdb83612c8b565b925050600181019050612cbc565b5085935050505092915050565b60006020820190508181036000830152612d108184612c98565b905092915050565b600080600080600060a08688031215612d3457612d33612533565b5b6000612d4288828901612586565b955050602086013567ffffffffffffffff811115612d6357612d62612538565b5b612d6f8882890161294b565b945050604086013567ffffffffffffffff811115612d9057612d8f612538565b5b612d9c8882890161294b565b935050606086013567ffffffffffffffff811115612dbd57612dbc612538565b5b612dc98882890161294b565b925050608086013567ffffffffffffffff811115612dea57612de9612538565b5b612df68882890161294b565b9150509295509295909350565b60008060408385031215612e1a57612e19612533565b5b600083013567ffffffffffffffff811115612e3857612e37612538565b5b612e448582860161294b565b925050602083013567ffffffffffffffff811115612e6557612e64612538565b5b612e718582860161294b565b9150509250929050565b600067ffffffffffffffff821115612e9657612e95612836565b5b612e9f82612745565b9050602081019050919050565b6000612ebf612eba84612e7b565b612896565b905082815260208101848484011115612edb57612eda612979565b5b612ee68482856129af565b509392505050565b600082601f830112612f0357612f02612831565b5b8135612f13848260208601612eac565b91505092915050565b60008060408385031215612f3357612f32612533565b5b6000612f41858286016125bc565b925050602083013567ffffffffffffffff811115612f6257612f61612538565b5b612f6e85828601612eee565b9150509250929050565b612f818161255d565b82525050565b6000602082019050612f9c6000830184612f78565b92915050565b612fab816126c0565b8114612fb657600080fd5b50565b600081359050612fc881612fa2565b92915050565b60008060408385031215612fe557612fe4612533565b5b6000612ff385828601612586565b925050602061300485828601612fb9565b9150509250929050565b6000806040838503121561302557613024612533565b5b6000613033858286016125bc565b9250506020613044858286016125bc565b9150509250929050565b60008060006060848603121561306757613066612533565b5b600061307586828701612586565b935050602084013567ffffffffffffffff81111561309657613095612538565b5b6130a28682870161294b565b925050604084013567ffffffffffffffff8111156130c3576130c2612538565b5b6130cf8682870161294b565b9150509250925092565b600080604083850312156130f0576130ef612533565b5b60006130fe85828601612586565b925050602061310f85828601612586565b9150509250929050565b600080600080600060a0868803121561313557613134612533565b5b600061314388828901612586565b955050602061315488828901612586565b9450506040613165888289016125bc565b9350506060613176888289016125bc565b925050608086013567ffffffffffffffff81111561319757613196612538565b5b6131a388828901612a00565b9150509295509295909350565b6000602082840312156131c6576131c5612533565b5b60006131d484828501612586565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613239602b83612701565b9150613244826131dd565b604082019050919050565b600060208201905081810360008301526132688161322c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132b657607f821691505b602082108114156132ca576132c961326f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613306602083612701565b9150613311826132d0565b602082019050919050565b60006020820190508181036000830152613335816132f9565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613398603283612701565b91506133a38261333c565b604082019050919050565b600060208201905081810360008301526133c78161338b565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061342a602983612701565b9150613435826133ce565b604082019050919050565b600060208201905081810360008301526134598161341d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134c98261259b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134fc576134fb61348f565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613563602983612701565b915061356e82613507565b604082019050919050565b6000602082019050818103600083015261359281613556565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135f5602683612701565b915061360082613599565b604082019050919050565b60006020820190508181036000830152613624816135e8565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613687602183612701565b91506136928261362b565b604082019050919050565b600060208201905081810360008301526136b68161367a565b9050919050565b60006136c88261259b565b91506136d38361259b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137085761370761348f565b5b828201905092915050565b60006040820190506137286000830185612611565b6137356020830184612611565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613798602883612701565b91506137a38261373c565b604082019050919050565b600060208201905081810360008301526137c78161378b565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061382a602583612701565b9150613835826137ce565b604082019050919050565b600060208201905081810360008301526138598161381d565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006138bc602a83612701565b91506138c782613860565b604082019050919050565b600060208201905081810360008301526138eb816138af565b9050919050565b6000604082019050818103600083015261390c8185612c98565b905081810360208301526139208184612c98565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613985602383612701565b915061399082613929565b604082019050919050565b600060208201905081810360008301526139b481613978565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613a17602483612701565b9150613a22826139bb565b604082019050919050565b60006020820190508181036000830152613a4681613a0a565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613aa9602983612701565b9150613ab482613a4d565b604082019050919050565b60006020820190508181036000830152613ad881613a9c565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613b0682613adf565b613b108185613aea565b9350613b20818560208601612712565b613b2981612745565b840191505092915050565b600060a082019050613b496000830188612f78565b613b566020830187612f78565b613b636040830186612611565b613b706060830185612611565b8181036080830152613b828184613afb565b90509695505050505050565b600081519050613b9d81612667565b92915050565b600060208284031215613bb957613bb8612533565b5b6000613bc784828501613b8e565b91505092915050565b60008160e01c9050919050565b600060033d1115613bfc5760046000803e613bf9600051613bd0565b90505b90565b600060443d1015613c0f57613c92565b613c17612529565b60043d036004823e80513d602482011167ffffffffffffffff82111715613c3f575050613c92565b808201805167ffffffffffffffff811115613c5d5750505050613c92565b80602083010160043d038501811115613c7a575050505050613c92565b613c8982602001850186612865565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613cf1603483612701565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613d83602883612701565b9150613d8e82613d27565b604082019050919050565b60006020820190508181036000830152613db281613d76565b9050919050565b600060a082019050613dce6000830188612f78565b613ddb6020830187612f78565b8181036040830152613ded8186612c98565b90508181036060830152613e018185612c98565b90508181036080830152613e158184613afb565b9050969550505050505056fea2646970667358221220f39afd40a4833cb6cb691d9a8e663fbfed16b338190bdfc3497dea078eaf3fa264736f6c63430008090033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061012b5760003560e01c8063862440e2116100ad578063c87b56dd11610071578063c87b56dd14610318578063d81d0a1514610348578063e985e9c514610364578063f242432a14610394578063f2fde38b146103b05761012b565b8063862440e2146102885780638da5cb5b146102a457806395d89b41146102c2578063a22cb465146102e0578063b390c0ab146102fc5761012b565b80632eb2c2d6116100f45780632eb2c2d6146101fa5780634e1273f414610216578063510f410414610246578063715018a61461026257806383ca4b6f1461026c5761012b565b8062fdd58e1461013057806301ffc9a71461016057806306fdde03146101905780630e89341c146101ae578063156e29f6146101de575b600080fd5b61014a600480360381019061014591906125d1565b6103cc565b6040516101579190612620565b60405180910390f35b61017a60048036038101906101759190612693565b610495565b60405161018791906126db565b60405180910390f35b610198610577565b6040516101a5919061278f565b60405180910390f35b6101c860048036038101906101c391906127b1565b610605565b6040516101d5919061278f565b60405180910390f35b6101f860048036038101906101f391906127de565b6106aa565b005b610214600480360381019061020f9190612a2e565b610746565b005b610230600480360381019061022b9190612bc0565b6107e7565b60405161023d9190612cf6565b60405180910390f35b610260600480360381019061025b9190612d18565b610900565b005b61026a6109a9565b005b61028660048036038101906102819190612e03565b610a31565b005b6102a2600480360381019061029d9190612f1c565b610a40565b005b6102ac610b20565b6040516102b99190612f87565b60405180910390f35b6102ca610b4a565b6040516102d7919061278f565b60405180910390f35b6102fa60048036038101906102f59190612fce565b610bd8565b005b6103166004803603810190610311919061300e565b610bee565b005b610332600480360381019061032d91906127b1565b610bfd565b60405161033f919061278f565b60405180910390f35b610362600480360381019061035d919061304e565b610c9d565b005b61037e600480360381019061037991906130d9565b610d39565b60405161038b91906126db565b60405180910390f35b6103ae60048036038101906103a99190613119565b610dcd565b005b6103ca60048036038101906103c591906131b0565b610e6e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561043d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104349061324f565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056057507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610570575061056f82610f66565b5b9050919050565b600480546105849061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546105b09061329e565b80156105fd5780601f106105d2576101008083540402835291602001916105fd565b820191906000526020600020905b8154815290600101906020018083116105e057829003601f168201915b505050505081565b60606006600083815260200190815260200160002080546106259061329e565b80601f01602080910402602001604051908101604052809291908181526020018280546106519061329e565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b50505050509050919050565b6106b2610fd0565b73ffffffffffffffffffffffffffffffffffffffff166106d0610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610726576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071d9061331c565b60405180910390fd5b61074183838360405180602001604052806000815250610fd8565b505050565b61074e610fd0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079457506107938561078e610fd0565b610d39565b5b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ca906133ae565b60405180910390fd5b6107e0858585858561116e565b5050505050565b6060815183511461082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490613440565b60405180910390fd5b6000835167ffffffffffffffff81111561084a57610849612836565b5b6040519080825280602002602001820160405280156108785781602001602082028036833780820191505090505b50905060005b84518110156108f5576108c585828151811061089d5761089c613460565b5b60200260200101518583815181106108b8576108b7613460565b5b60200260200101516103cc565b8282815181106108d8576108d7613460565b5b602002602001018181525050806108ee906134be565b905061087e565b508091505092915050565b610908610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610926610b20565b73ffffffffffffffffffffffffffffffffffffffff161461097c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109739061331c565b60405180910390fd5b610987858585611482565b6109a285838360405180602001604052806000815250611733565b5050505050565b6109b1610fd0565b73ffffffffffffffffffffffffffffffffffffffff166109cf610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c9061331c565b60405180910390fd5b610a2f6000611951565b565b610a3c338383611482565b5050565b610a48610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610a66610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab39061331c565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190610ae3929190612486565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b82604051610b14919061278f565b60405180910390a25050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610b579061329e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b839061329e565b8015610bd05780601f10610ba557610100808354040283529160200191610bd0565b820191906000526020600020905b815481529060010190602001808311610bb357829003601f168201915b505050505081565b610bea610be3610fd0565b8383611a17565b5050565b610bf9338383611b84565b5050565b60066020528060005260406000206000915090508054610c1c9061329e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c489061329e565b8015610c955780601f10610c6a57610100808354040283529160200191610c95565b820191906000526020600020905b815481529060010190602001808311610c7857829003601f168201915b505050505081565b610ca5610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610cc3610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d109061331c565b60405180910390fd5b610d3483838360405180602001604052806000815250611733565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610dd5610fd0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e1b5750610e1a85610e15610fd0565b610d39565b5b610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613579565b60405180910390fd5b610e678585858585611da1565b5050505050565b610e76610fd0565b73ffffffffffffffffffffffffffffffffffffffff16610e94610b20565b73ffffffffffffffffffffffffffffffffffffffff1614610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee19061331c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f519061360b565b60405180910390fd5b610f6381611951565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f9061369d565b60405180910390fd5b6000611052610fd0565b90506110738160008761106488612023565b61106d88612023565b8761209d565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d291906136bd565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611150929190613713565b60405180910390a4611167816000878787876120a5565b5050505050565b81518351146111b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a9906137ae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121990613840565b60405180910390fd5b600061122c610fd0565b905061123c81878787878761209d565b60005b84518110156113ed57600085828151811061125d5761125c613460565b5b60200260200101519050600085838151811061127c5761127b613460565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561131d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611314906138d2565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113d291906136bd565b92505081905550505050806113e6906134be565b905061123f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516114649291906138f2565b60405180910390a461147a81878787878761228c565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e99061399b565b60405180910390fd5b8051825114611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d906137ae565b60405180910390fd5b6000611540610fd0565b90506115608185600086866040518060200160405280600081525061209d565b60005b83518110156116ad57600084828151811061158157611580613460565b5b6020026020010151905060008483815181106115a05761159f613460565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163890613a2d565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806116a5906134be565b915050611563565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516117259291906138f2565b60405180910390a450505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a9061369d565b60405180910390fd5b81518351146117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de906137ae565b60405180910390fd5b60006117f1610fd0565b90506118028160008787878761209d565b60005b84518110156118bb5783818151811061182157611820613460565b5b602002602001015160008087848151811061183f5761183e613460565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118a191906136bd565b9250508190555080806118b3906134be565b915050611805565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119339291906138f2565b60405180910390a461194a8160008787878761228c565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90613abf565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b7791906126db565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611beb9061399b565b60405180910390fd5b6000611bfe610fd0565b9050611c2e81856000611c1087612023565b611c1987612023565b6040518060200160405280600081525061209d565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbc90613a2d565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611d92929190613713565b60405180910390a45050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0890613840565b60405180910390fd5b6000611e1b610fd0565b9050611e3b818787611e2c88612023565b611e3588612023565b8761209d565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec9906138d2565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f8791906136bd565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612004929190613713565b60405180910390a461201a8288888888886120a5565b50505050505050565b60606000600167ffffffffffffffff81111561204257612041612836565b5b6040519080825280602002602001820160405280156120705781602001602082028036833780820191505090505b509050828160008151811061208857612087613460565b5b60200260200101818152505080915050919050565b505050505050565b6120c48473ffffffffffffffffffffffffffffffffffffffff16612473565b15612284578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161210a959493929190613b34565b602060405180830381600087803b15801561212457600080fd5b505af192505050801561215557506040513d601f19601f820116820180604052508101906121529190613ba3565b60015b6121fb57612161613bdd565b806308c379a014156121be5750612176613bff565b8061218157506121c0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b5919061278f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f290613d07565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990613d99565b60405180910390fd5b505b505050505050565b6122ab8473ffffffffffffffffffffffffffffffffffffffff16612473565b1561246b578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016122f1959493929190613db9565b602060405180830381600087803b15801561230b57600080fd5b505af192505050801561233c57506040513d601f19601f820116820180604052508101906123399190613ba3565b60015b6123e257612348613bdd565b806308c379a014156123a5575061235d613bff565b8061236857506123a7565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c919061278f565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d990613d07565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246090613d99565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546124929061329e565b90600052602060002090601f0160209004810192826124b457600085556124fb565b82601f106124cd57805160ff19168380011785556124fb565b828001600101855582156124fb579182015b828111156124fa5782518255916020019190600101906124df565b5b509050612508919061250c565b5090565b5b8082111561252557600081600090555060010161250d565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125688261253d565b9050919050565b6125788161255d565b811461258357600080fd5b50565b6000813590506125958161256f565b92915050565b6000819050919050565b6125ae8161259b565b81146125b957600080fd5b50565b6000813590506125cb816125a5565b92915050565b600080604083850312156125e8576125e7612533565b5b60006125f685828601612586565b9250506020612607858286016125bc565b9150509250929050565b61261a8161259b565b82525050565b60006020820190506126356000830184612611565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6126708161263b565b811461267b57600080fd5b50565b60008135905061268d81612667565b92915050565b6000602082840312156126a9576126a8612533565b5b60006126b78482850161267e565b91505092915050565b60008115159050919050565b6126d5816126c0565b82525050565b60006020820190506126f060008301846126cc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612730578082015181840152602081019050612715565b8381111561273f576000848401525b50505050565b6000601f19601f8301169050919050565b6000612761826126f6565b61276b8185612701565b935061277b818560208601612712565b61278481612745565b840191505092915050565b600060208201905081810360008301526127a98184612756565b905092915050565b6000602082840312156127c7576127c6612533565b5b60006127d5848285016125bc565b91505092915050565b6000806000606084860312156127f7576127f6612533565b5b600061280586828701612586565b9350506020612816868287016125bc565b9250506040612827868287016125bc565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61286e82612745565b810181811067ffffffffffffffff8211171561288d5761288c612836565b5b80604052505050565b60006128a0612529565b90506128ac8282612865565b919050565b600067ffffffffffffffff8211156128cc576128cb612836565b5b602082029050602081019050919050565b600080fd5b60006128f56128f0846128b1565b612896565b90508083825260208201905060208402830185811115612918576129176128dd565b5b835b81811015612941578061292d88826125bc565b84526020840193505060208101905061291a565b5050509392505050565b600082601f8301126129605761295f612831565b5b81356129708482602086016128e2565b91505092915050565b600080fd5b600067ffffffffffffffff82111561299957612998612836565b5b6129a282612745565b9050602081019050919050565b82818337600083830152505050565b60006129d16129cc8461297e565b612896565b9050828152602081018484840111156129ed576129ec612979565b5b6129f88482856129af565b509392505050565b600082601f830112612a1557612a14612831565b5b8135612a258482602086016129be565b91505092915050565b600080600080600060a08688031215612a4a57612a49612533565b5b6000612a5888828901612586565b9550506020612a6988828901612586565b945050604086013567ffffffffffffffff811115612a8a57612a89612538565b5b612a968882890161294b565b935050606086013567ffffffffffffffff811115612ab757612ab6612538565b5b612ac38882890161294b565b925050608086013567ffffffffffffffff811115612ae457612ae3612538565b5b612af088828901612a00565b9150509295509295909350565b600067ffffffffffffffff821115612b1857612b17612836565b5b602082029050602081019050919050565b6000612b3c612b3784612afd565b612896565b90508083825260208201905060208402830185811115612b5f57612b5e6128dd565b5b835b81811015612b885780612b748882612586565b845260208401935050602081019050612b61565b5050509392505050565b600082601f830112612ba757612ba6612831565b5b8135612bb7848260208601612b29565b91505092915050565b60008060408385031215612bd757612bd6612533565b5b600083013567ffffffffffffffff811115612bf557612bf4612538565b5b612c0185828601612b92565b925050602083013567ffffffffffffffff811115612c2257612c21612538565b5b612c2e8582860161294b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c6d8161259b565b82525050565b6000612c7f8383612c64565b60208301905092915050565b6000602082019050919050565b6000612ca382612c38565b612cad8185612c43565b9350612cb883612c54565b8060005b83811015612ce9578151612cd08882612c73565b9750612cdb83612c8b565b925050600181019050612cbc565b5085935050505092915050565b60006020820190508181036000830152612d108184612c98565b905092915050565b600080600080600060a08688031215612d3457612d33612533565b5b6000612d4288828901612586565b955050602086013567ffffffffffffffff811115612d6357612d62612538565b5b612d6f8882890161294b565b945050604086013567ffffffffffffffff811115612d9057612d8f612538565b5b612d9c8882890161294b565b935050606086013567ffffffffffffffff811115612dbd57612dbc612538565b5b612dc98882890161294b565b925050608086013567ffffffffffffffff811115612dea57612de9612538565b5b612df68882890161294b565b9150509295509295909350565b60008060408385031215612e1a57612e19612533565b5b600083013567ffffffffffffffff811115612e3857612e37612538565b5b612e448582860161294b565b925050602083013567ffffffffffffffff811115612e6557612e64612538565b5b612e718582860161294b565b9150509250929050565b600067ffffffffffffffff821115612e9657612e95612836565b5b612e9f82612745565b9050602081019050919050565b6000612ebf612eba84612e7b565b612896565b905082815260208101848484011115612edb57612eda612979565b5b612ee68482856129af565b509392505050565b600082601f830112612f0357612f02612831565b5b8135612f13848260208601612eac565b91505092915050565b60008060408385031215612f3357612f32612533565b5b6000612f41858286016125bc565b925050602083013567ffffffffffffffff811115612f6257612f61612538565b5b612f6e85828601612eee565b9150509250929050565b612f818161255d565b82525050565b6000602082019050612f9c6000830184612f78565b92915050565b612fab816126c0565b8114612fb657600080fd5b50565b600081359050612fc881612fa2565b92915050565b60008060408385031215612fe557612fe4612533565b5b6000612ff385828601612586565b925050602061300485828601612fb9565b9150509250929050565b6000806040838503121561302557613024612533565b5b6000613033858286016125bc565b9250506020613044858286016125bc565b9150509250929050565b60008060006060848603121561306757613066612533565b5b600061307586828701612586565b935050602084013567ffffffffffffffff81111561309657613095612538565b5b6130a28682870161294b565b925050604084013567ffffffffffffffff8111156130c3576130c2612538565b5b6130cf8682870161294b565b9150509250925092565b600080604083850312156130f0576130ef612533565b5b60006130fe85828601612586565b925050602061310f85828601612586565b9150509250929050565b600080600080600060a0868803121561313557613134612533565b5b600061314388828901612586565b955050602061315488828901612586565b9450506040613165888289016125bc565b9350506060613176888289016125bc565b925050608086013567ffffffffffffffff81111561319757613196612538565b5b6131a388828901612a00565b9150509295509295909350565b6000602082840312156131c6576131c5612533565b5b60006131d484828501612586565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613239602b83612701565b9150613244826131dd565b604082019050919050565b600060208201905081810360008301526132688161322c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806132b657607f821691505b602082108114156132ca576132c961326f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613306602083612701565b9150613311826132d0565b602082019050919050565b60006020820190508181036000830152613335816132f9565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613398603283612701565b91506133a38261333c565b604082019050919050565b600060208201905081810360008301526133c78161338b565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061342a602983612701565b9150613435826133ce565b604082019050919050565b600060208201905081810360008301526134598161341d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134c98261259b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156134fc576134fb61348f565b5b600182019050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613563602983612701565b915061356e82613507565b604082019050919050565b6000602082019050818103600083015261359281613556565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135f5602683612701565b915061360082613599565b604082019050919050565b60006020820190508181036000830152613624816135e8565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000613687602183612701565b91506136928261362b565b604082019050919050565b600060208201905081810360008301526136b68161367a565b9050919050565b60006136c88261259b565b91506136d38361259b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137085761370761348f565b5b828201905092915050565b60006040820190506137286000830185612611565b6137356020830184612611565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613798602883612701565b91506137a38261373c565b604082019050919050565b600060208201905081810360008301526137c78161378b565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061382a602583612701565b9150613835826137ce565b604082019050919050565b600060208201905081810360008301526138598161381d565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006138bc602a83612701565b91506138c782613860565b604082019050919050565b600060208201905081810360008301526138eb816138af565b9050919050565b6000604082019050818103600083015261390c8185612c98565b905081810360208301526139208184612c98565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613985602383612701565b915061399082613929565b604082019050919050565b600060208201905081810360008301526139b481613978565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000613a17602483612701565b9150613a22826139bb565b604082019050919050565b60006020820190508181036000830152613a4681613a0a565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613aa9602983612701565b9150613ab482613a4d565b604082019050919050565b60006020820190508181036000830152613ad881613a9c565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613b0682613adf565b613b108185613aea565b9350613b20818560208601612712565b613b2981612745565b840191505092915050565b600060a082019050613b496000830188612f78565b613b566020830187612f78565b613b636040830186612611565b613b706060830185612611565b8181036080830152613b828184613afb565b90509695505050505050565b600081519050613b9d81612667565b92915050565b600060208284031215613bb957613bb8612533565b5b6000613bc784828501613b8e565b91505092915050565b60008160e01c9050919050565b600060033d1115613bfc5760046000803e613bf9600051613bd0565b90505b90565b600060443d1015613c0f57613c92565b613c17612529565b60043d036004823e80513d602482011167ffffffffffffffff82111715613c3f575050613c92565b808201805167ffffffffffffffff811115613c5d5750505050613c92565b80602083010160043d038501811115613c7a575050505050613c92565b613c8982602001850186612865565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613cf1603483612701565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613d83602883612701565b9150613d8e82613d27565b604082019050919050565b60006020820190508181036000830152613db281613d76565b9050919050565b600060a082019050613dce6000830188612f78565b613ddb6020830187612f78565b8181036040830152613ded8186612c98565b90508181036060830152613e018185612c98565b90508181036080830152613e158184613afb565b9050969550505050505056fea2646970667358221220f39afd40a4833cb6cb691d9a8e663fbfed16b338190bdfc3497dea078eaf3fa264736f6c63430008090033

Deployed Bytecode Sourcemap

41306:1240:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26785:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25808:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41361:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42440:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41543:111;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28724:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27182:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42035:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4746:103;;;:::i;:::-;;41906:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42306:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4095:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41384:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27779:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41809:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41411:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41660:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28006:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28246:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5004:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26785:231;26871:7;26918:1;26899:21;;:7;:21;;;;26891:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;26986:9;:13;26996:2;26986:13;;;;;;;;;;;:22;27000:7;26986:22;;;;;;;;;;;;;;;;26979:29;;26785:231;;;;:::o;25808:310::-;25910:4;25962:26;25947:41;;;:11;:41;;;;:110;;;;26020:37;26005:52;;;:11;:52;;;;25947:110;:163;;;;26074:36;26098:11;26074:23;:36::i;:::-;25947:163;25927:183;;25808:310;;;:::o;41361:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42440:101::-;42493:13;42522:8;:13;42531:3;42522:13;;;;;;;;;;;42515:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42440:101;;;:::o;41543:111::-;4326:12;:10;:12::i;:::-;4315:23;;:7;:5;:7::i;:::-;:23;;;4307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41620:28:::1;41626:3;41631;41636:7;41620:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;41543:111:::0;;;:::o;28724:442::-;28965:12;:10;:12::i;:::-;28957:20;;:4;:20;;;:60;;;;28981:36;28998:4;29004:12;:10;:12::i;:::-;28981:16;:36::i;:::-;28957:60;28935:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;29106:52;29129:4;29135:2;29139:3;29144:7;29153:4;29106:22;:52::i;:::-;28724:442;;;;;:::o;27182:524::-;27338:16;27399:3;:10;27380:8;:15;:29;27372:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27468:30;27515:8;:15;27501:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27468:63;;27549:9;27544:122;27568:8;:15;27564:1;:19;27544:122;;;27624:30;27634:8;27643:1;27634:11;;;;;;;;:::i;:::-;;;;;;;;27647:3;27651:1;27647:6;;;;;;;;:::i;:::-;;;;;;;;27624:9;:30::i;:::-;27605:13;27619:1;27605:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;27585:3;;;;:::i;:::-;;;27544:122;;;;27685:13;27678:20;;;27182:524;;;;:::o;42035:265::-;4326:12;:10;:12::i;:::-;4315:23;;:7;:5;:7::i;:::-;:23;;;4307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42201:41:::1;42212:5;42219:8;42229:12;42201:10;:41::i;:::-;42249:45;42260:5;42267:8;42277:12;42249:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;42035:265:::0;;;;;:::o;4746:103::-;4326:12;:10;:12::i;:::-;4315:23;;:7;:5;:7::i;:::-;:23;;;4307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4811:30:::1;4838:1;4811:18;:30::i;:::-;4746:103::o:0;41906:123::-;41985:38;41996:10;42008:4;42014:8;41985:10;:38::i;:::-;41906:123;;:::o;42306:124::-;4326:12;:10;:12::i;:::-;4315:23;;:7;:5;:7::i;:::-;:23;;;4307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42394:4:::1;42378:8;:13;42387:3;42378:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;42420:3;42410:14;42414:4;42410:14;;;;;;:::i;:::-;;;;;;;;42306:124:::0;;:::o;4095:87::-;4141:7;4168:6;;;;;;;;;;;4161:13;;4095:87;:::o;41384:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27779:155::-;27874:52;27893:12;:10;:12::i;:::-;27907:8;27917;27874:18;:52::i;:::-;27779:155;;:::o;41809:91::-;41863:31;41869:10;41881:3;41886:7;41863:5;:31::i;:::-;41809:91;;:::o;41411:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41660:143::-;4326:12;:10;:12::i;:::-;4315:23;;:7;:5;:7::i;:::-;:23;;;4307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41762:35:::1;41773:3;41778:4;41784:8;41762:35;;;;;;;;;;;::::0;:10:::1;:35::i;:::-;41660:143:::0;;;:::o;28006:168::-;28105:4;28129:18;:27;28148:7;28129:27;;;;;;;;;;;;;;;:37;28157:8;28129:37;;;;;;;;;;;;;;;;;;;;;;;;;28122:44;;28006:168;;;;:::o;28246:401::-;28462:12;:10;:12::i;:::-;28454:20;;:4;:20;;;:60;;;;28478:36;28495:4;28501:12;:10;:12::i;:::-;28478:16;:36::i;:::-;28454:60;28432:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;28594:45;28612:4;28618:2;28622;28626:6;28634:4;28594:17;:45::i;:::-;28246:401;;;;;:::o;5004:201::-;4326:12;:10;:12::i;:::-;4315:23;;:7;:5;:7::i;:::-;:23;;;4307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5113:1:::1;5093:22;;:8;:22;;;;5085:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5169:28;5188:8;5169:18;:28::i;:::-;5004:201:::0;:::o;16903:157::-;16988:4;17027:25;17012:40;;;:11;:40;;;;17005:47;;16903:157;;;:::o;2262:98::-;2315:7;2342:10;2335:17;;2262:98;:::o;34061:569::-;34228:1;34214:16;;:2;:16;;;;34206:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34281:16;34300:12;:10;:12::i;:::-;34281:31;;34325:102;34346:8;34364:1;34368:2;34372:21;34390:2;34372:17;:21::i;:::-;34395:25;34413:6;34395:17;:25::i;:::-;34422:4;34325:20;:102::i;:::-;34461:6;34440:9;:13;34450:2;34440:13;;;;;;;;;;;:17;34454:2;34440:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;34520:2;34483:52;;34516:1;34483:52;;34498:8;34483:52;;;34524:2;34528:6;34483:52;;;;;;;:::i;:::-;;;;;;;;34548:74;34579:8;34597:1;34601:2;34605;34609:6;34617:4;34548:30;:74::i;:::-;34195:435;34061:569;;;;:::o;31426:1074::-;31653:7;:14;31639:3;:10;:28;31631:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31745:1;31731:16;;:2;:16;;;;31723:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31802:16;31821:12;:10;:12::i;:::-;31802:31;;31846:60;31867:8;31877:4;31883:2;31887:3;31892:7;31901:4;31846:20;:60::i;:::-;31924:9;31919:421;31943:3;:10;31939:1;:14;31919:421;;;31975:10;31988:3;31992:1;31988:6;;;;;;;;:::i;:::-;;;;;;;;31975:19;;32009:14;32026:7;32034:1;32026:10;;;;;;;;:::i;:::-;;;;;;;;32009:27;;32053:19;32075:9;:13;32085:2;32075:13;;;;;;;;;;;:19;32089:4;32075:19;;;;;;;;;;;;;;;;32053:41;;32132:6;32117:11;:21;;32109:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32265:6;32251:11;:20;32229:9;:13;32239:2;32229:13;;;;;;;;;;;:19;32243:4;32229:19;;;;;;;;;;;;;;;:42;;;;32322:6;32301:9;:13;32311:2;32301:13;;;;;;;;;;;:17;32315:2;32301:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31960:380;;;31955:3;;;;:::i;:::-;;;31919:421;;;;32387:2;32357:47;;32381:4;32357:47;;32371:8;32357:47;;;32391:3;32396:7;32357:47;;;;;;;:::i;:::-;;;;;;;;32417:75;32453:8;32463:4;32469:2;32473:3;32478:7;32487:4;32417:35;:75::i;:::-;31620:880;31426:1074;;;;;:::o;36822:891::-;36990:1;36974:18;;:4;:18;;;;36966:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37065:7;:14;37051:3;:10;:28;37043:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37137:16;37156:12;:10;:12::i;:::-;37137:31;;37181:66;37202:8;37212:4;37226:1;37230:3;37235:7;37181:66;;;;;;;;;;;;:20;:66::i;:::-;37265:9;37260:373;37284:3;:10;37280:1;:14;37260:373;;;37316:10;37329:3;37333:1;37329:6;;;;;;;;:::i;:::-;;;;;;;;37316:19;;37350:14;37367:7;37375:1;37367:10;;;;;;;;:::i;:::-;;;;;;;;37350:27;;37394:19;37416:9;:13;37426:2;37416:13;;;;;;;;;;;:19;37430:4;37416:19;;;;;;;;;;;;;;;;37394:41;;37473:6;37458:11;:21;;37450:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37600:6;37586:11;:20;37564:9;:13;37574:2;37564:13;;;;;;;;;;;:19;37578:4;37564:19;;;;;;;;;;;;;;;:42;;;;37301:332;;;37296:3;;;;;:::i;:::-;;;;37260:373;;;;37688:1;37650:55;;37674:4;37650:55;;37664:8;37650:55;;;37692:3;37697:7;37650:55;;;;;;;:::i;:::-;;;;;;;;36955:758;36822:891;;;:::o;34986:735::-;35178:1;35164:16;;:2;:16;;;;35156:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35251:7;:14;35237:3;:10;:28;35229:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35323:16;35342:12;:10;:12::i;:::-;35323:31;;35367:66;35388:8;35406:1;35410:2;35414:3;35419:7;35428:4;35367:20;:66::i;:::-;35451:9;35446:103;35470:3;:10;35466:1;:14;35446:103;;;35527:7;35535:1;35527:10;;;;;;;;:::i;:::-;;;;;;;;35502:9;:17;35512:3;35516:1;35512:6;;;;;;;;:::i;:::-;;;;;;;;35502:17;;;;;;;;;;;:21;35520:2;35502:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;35482:3;;;;;:::i;:::-;;;;35446:103;;;;35602:2;35566:53;;35598:1;35566:53;;35580:8;35566:53;;;35606:3;35611:7;35566:53;;;;;;;:::i;:::-;;;;;;;;35632:81;35668:8;35686:1;35690:2;35694:3;35699:7;35708:4;35632:35;:81::i;:::-;35145:576;34986:735;;;;:::o;5365:191::-;5439:16;5458:6;;;;;;;;;;;5439:25;;5484:8;5475:6;;:17;;;;;;;;;;;;;;;;;;5539:8;5508:40;;5529:8;5508:40;;;;;;;;;;;;5428:128;5365:191;:::o;37855:331::-;38010:8;38001:17;;:5;:17;;;;37993:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38113:8;38075:18;:25;38094:5;38075:25;;;;;;;;;;;;;;;:35;38101:8;38075:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38159:8;38137:41;;38152:5;38137:41;;;38169:8;38137:41;;;;;;:::i;:::-;;;;;;;;37855:331;;;:::o;35971:648::-;36114:1;36098:18;;:4;:18;;;;36090:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36169:16;36188:12;:10;:12::i;:::-;36169:31;;36213:102;36234:8;36244:4;36258:1;36262:21;36280:2;36262:17;:21::i;:::-;36285:25;36303:6;36285:17;:25::i;:::-;36213:102;;;;;;;;;;;;:20;:102::i;:::-;36328:19;36350:9;:13;36360:2;36350:13;;;;;;;;;;;:19;36364:4;36350:19;;;;;;;;;;;;;;;;36328:41;;36403:6;36388:11;:21;;36380:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;36522:6;36508:11;:20;36486:9;:13;36496:2;36486:13;;;;;;;;;;;:19;36500:4;36486:19;;;;;;;;;;;;;;;:42;;;;36596:1;36557:54;;36582:4;36557:54;;36572:8;36557:54;;;36600:2;36604:6;36557:54;;;;;;;:::i;:::-;;;;;;;;36079:540;;35971:648;;;:::o;30248:820::-;30450:1;30436:16;;:2;:16;;;;30428:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30507:16;30526:12;:10;:12::i;:::-;30507:31;;30551:96;30572:8;30582:4;30588:2;30592:21;30610:2;30592:17;:21::i;:::-;30615:25;30633:6;30615:17;:25::i;:::-;30642:4;30551:20;:96::i;:::-;30660:19;30682:9;:13;30692:2;30682:13;;;;;;;;;;;:19;30696:4;30682:19;;;;;;;;;;;;;;;;30660:41;;30735:6;30720:11;:21;;30712:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30860:6;30846:11;:20;30824:9;:13;30834:2;30824:13;;;;;;;;;;;:19;30838:4;30824:19;;;;;;;;;;;;;;;:42;;;;30909:6;30888:9;:13;30898:2;30888:13;;;;;;;;;;;:17;30902:2;30888:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30964:2;30933:46;;30958:4;30933:46;;30948:8;30933:46;;;30968:2;30972:6;30933:46;;;;;;;:::i;:::-;;;;;;;;30992:68;31023:8;31033:4;31039:2;31043;31047:6;31055:4;30992:30;:68::i;:::-;30417:651;;30248:820;;;;;:::o;41074:198::-;41140:16;41169:22;41208:1;41194:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41169:41;;41232:7;41221:5;41227:1;41221:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;41259:5;41252:12;;;41074:198;;;:::o;39272:221::-;;;;;;;:::o;39501:744::-;39716:15;:2;:13;;;:15::i;:::-;39712:526;;;39769:2;39752:38;;;39791:8;39801:4;39807:2;39811:6;39819:4;39752:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39748:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40100:6;40093:14;;;;;;;;;;;:::i;:::-;;;;;;;;39748:479;;;40149:62;;;;;;;;;;:::i;:::-;;;;;;;;39748:479;39886:43;;;39874:55;;;:8;:55;;;;39870:154;;39954:50;;;;;;;;;;:::i;:::-;;;;;;;;39870:154;39825:214;39712:526;39501:744;;;;;;:::o;40253:813::-;40493:15;:2;:13;;;:15::i;:::-;40489:570;;;40546:2;40529:43;;;40573:8;40583:4;40589:3;40594:7;40603:4;40529:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40525:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40921:6;40914:14;;;;;;;;;;;:::i;:::-;;;;;;;;40525:523;;;40970:62;;;;;;;;;;:::i;:::-;;;;;;;;40525:523;40702:48;;;40690:60;;;:8;:60;;;;40686:159;;40775:50;;;;;;;;;;:::i;:::-;;;;;;;;40686:159;40609:251;40489:570;40253:813;;;;;;:::o;6871:387::-;6931:4;7139:12;7206:7;7194:20;7186:28;;7249:1;7242:4;:8;7235:15;;;6871:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:117::-;5672:1;5669;5662:12;5686:180;5734:77;5731:1;5724:88;5831:4;5828:1;5821:15;5855:4;5852:1;5845:15;5872:281;5955:27;5977:4;5955:27;:::i;:::-;5947:6;5943:40;6085:6;6073:10;6070:22;6049:18;6037:10;6034:34;6031:62;6028:88;;;6096:18;;:::i;:::-;6028:88;6136:10;6132:2;6125:22;5915:238;5872:281;;:::o;6159:129::-;6193:6;6220:20;;:::i;:::-;6210:30;;6249:33;6277:4;6269:6;6249:33;:::i;:::-;6159:129;;;:::o;6294:311::-;6371:4;6461:18;6453:6;6450:30;6447:56;;;6483:18;;:::i;:::-;6447:56;6533:4;6525:6;6521:17;6513:25;;6593:4;6587;6583:15;6575:23;;6294:311;;;:::o;6611:117::-;6720:1;6717;6710:12;6751:710;6847:5;6872:81;6888:64;6945:6;6888:64;:::i;:::-;6872:81;:::i;:::-;6863:90;;6973:5;7002:6;6995:5;6988:21;7036:4;7029:5;7025:16;7018:23;;7089:4;7081:6;7077:17;7069:6;7065:30;7118:3;7110:6;7107:15;7104:122;;;7137:79;;:::i;:::-;7104:122;7252:6;7235:220;7269:6;7264:3;7261:15;7235:220;;;7344:3;7373:37;7406:3;7394:10;7373:37;:::i;:::-;7368:3;7361:50;7440:4;7435:3;7431:14;7424:21;;7311:144;7295:4;7290:3;7286:14;7279:21;;7235:220;;;7239:21;6853:608;;6751:710;;;;;:::o;7484:370::-;7555:5;7604:3;7597:4;7589:6;7585:17;7581:27;7571:122;;7612:79;;:::i;:::-;7571:122;7729:6;7716:20;7754:94;7844:3;7836:6;7829:4;7821:6;7817:17;7754:94;:::i;:::-;7745:103;;7561:293;7484:370;;;;:::o;7860:117::-;7969:1;7966;7959:12;7983:307;8044:4;8134:18;8126:6;8123:30;8120:56;;;8156:18;;:::i;:::-;8120:56;8194:29;8216:6;8194:29;:::i;:::-;8186:37;;8278:4;8272;8268:15;8260:23;;7983:307;;;:::o;8296:154::-;8380:6;8375:3;8370;8357:30;8442:1;8433:6;8428:3;8424:16;8417:27;8296:154;;;:::o;8456:410::-;8533:5;8558:65;8574:48;8615:6;8574:48;:::i;:::-;8558:65;:::i;:::-;8549:74;;8646:6;8639:5;8632:21;8684:4;8677:5;8673:16;8722:3;8713:6;8708:3;8704:16;8701:25;8698:112;;;8729:79;;:::i;:::-;8698:112;8819:41;8853:6;8848:3;8843;8819:41;:::i;:::-;8539:327;8456:410;;;;;:::o;8885:338::-;8940:5;8989:3;8982:4;8974:6;8970:17;8966:27;8956:122;;8997:79;;:::i;:::-;8956:122;9114:6;9101:20;9139:78;9213:3;9205:6;9198:4;9190:6;9186:17;9139:78;:::i;:::-;9130:87;;8946:277;8885:338;;;;:::o;9229:1509::-;9383:6;9391;9399;9407;9415;9464:3;9452:9;9443:7;9439:23;9435:33;9432:120;;;9471:79;;:::i;:::-;9432:120;9591:1;9616:53;9661:7;9652:6;9641:9;9637:22;9616:53;:::i;:::-;9606:63;;9562:117;9718:2;9744:53;9789:7;9780:6;9769:9;9765:22;9744:53;:::i;:::-;9734:63;;9689:118;9874:2;9863:9;9859:18;9846:32;9905:18;9897:6;9894:30;9891:117;;;9927:79;;:::i;:::-;9891:117;10032:78;10102:7;10093:6;10082:9;10078:22;10032:78;:::i;:::-;10022:88;;9817:303;10187:2;10176:9;10172:18;10159:32;10218:18;10210:6;10207:30;10204:117;;;10240:79;;:::i;:::-;10204:117;10345:78;10415:7;10406:6;10395:9;10391:22;10345:78;:::i;:::-;10335:88;;10130:303;10500:3;10489:9;10485:19;10472:33;10532:18;10524:6;10521:30;10518:117;;;10554:79;;:::i;:::-;10518:117;10659:62;10713:7;10704:6;10693:9;10689:22;10659:62;:::i;:::-;10649:72;;10443:288;9229:1509;;;;;;;;:::o;10744:311::-;10821:4;10911:18;10903:6;10900:30;10897:56;;;10933:18;;:::i;:::-;10897:56;10983:4;10975:6;10971:17;10963:25;;11043:4;11037;11033:15;11025:23;;10744:311;;;:::o;11078:710::-;11174:5;11199:81;11215:64;11272:6;11215:64;:::i;:::-;11199:81;:::i;:::-;11190:90;;11300:5;11329:6;11322:5;11315:21;11363:4;11356:5;11352:16;11345:23;;11416:4;11408:6;11404:17;11396:6;11392:30;11445:3;11437:6;11434:15;11431:122;;;11464:79;;:::i;:::-;11431:122;11579:6;11562:220;11596:6;11591:3;11588:15;11562:220;;;11671:3;11700:37;11733:3;11721:10;11700:37;:::i;:::-;11695:3;11688:50;11767:4;11762:3;11758:14;11751:21;;11638:144;11622:4;11617:3;11613:14;11606:21;;11562:220;;;11566:21;11180:608;;11078:710;;;;;:::o;11811:370::-;11882:5;11931:3;11924:4;11916:6;11912:17;11908:27;11898:122;;11939:79;;:::i;:::-;11898:122;12056:6;12043:20;12081:94;12171:3;12163:6;12156:4;12148:6;12144:17;12081:94;:::i;:::-;12072:103;;11888:293;11811:370;;;;:::o;12187:894::-;12305:6;12313;12362:2;12350:9;12341:7;12337:23;12333:32;12330:119;;;12368:79;;:::i;:::-;12330:119;12516:1;12505:9;12501:17;12488:31;12546:18;12538:6;12535:30;12532:117;;;12568:79;;:::i;:::-;12532:117;12673:78;12743:7;12734:6;12723:9;12719:22;12673:78;:::i;:::-;12663:88;;12459:302;12828:2;12817:9;12813:18;12800:32;12859:18;12851:6;12848:30;12845:117;;;12881:79;;:::i;:::-;12845:117;12986:78;13056:7;13047:6;13036:9;13032:22;12986:78;:::i;:::-;12976:88;;12771:303;12187:894;;;;;:::o;13087:114::-;13154:6;13188:5;13182:12;13172:22;;13087:114;;;:::o;13207:184::-;13306:11;13340:6;13335:3;13328:19;13380:4;13375:3;13371:14;13356:29;;13207:184;;;;:::o;13397:132::-;13464:4;13487:3;13479:11;;13517:4;13512:3;13508:14;13500:22;;13397:132;;;:::o;13535:108::-;13612:24;13630:5;13612:24;:::i;:::-;13607:3;13600:37;13535:108;;:::o;13649:179::-;13718:10;13739:46;13781:3;13773:6;13739:46;:::i;:::-;13817:4;13812:3;13808:14;13794:28;;13649:179;;;;:::o;13834:113::-;13904:4;13936;13931:3;13927:14;13919:22;;13834:113;;;:::o;13983:732::-;14102:3;14131:54;14179:5;14131:54;:::i;:::-;14201:86;14280:6;14275:3;14201:86;:::i;:::-;14194:93;;14311:56;14361:5;14311:56;:::i;:::-;14390:7;14421:1;14406:284;14431:6;14428:1;14425:13;14406:284;;;14507:6;14501:13;14534:63;14593:3;14578:13;14534:63;:::i;:::-;14527:70;;14620:60;14673:6;14620:60;:::i;:::-;14610:70;;14466:224;14453:1;14450;14446:9;14441:14;;14406:284;;;14410:14;14706:3;14699:10;;14107:608;;;13983:732;;;;:::o;14721:373::-;14864:4;14902:2;14891:9;14887:18;14879:26;;14951:9;14945:4;14941:20;14937:1;14926:9;14922:17;14915:47;14979:108;15082:4;15073:6;14979:108;:::i;:::-;14971:116;;14721:373;;;;:::o;15100:1751::-;15295:6;15303;15311;15319;15327;15376:3;15364:9;15355:7;15351:23;15347:33;15344:120;;;15383:79;;:::i;:::-;15344:120;15503:1;15528:53;15573:7;15564:6;15553:9;15549:22;15528:53;:::i;:::-;15518:63;;15474:117;15658:2;15647:9;15643:18;15630:32;15689:18;15681:6;15678:30;15675:117;;;15711:79;;:::i;:::-;15675:117;15816:78;15886:7;15877:6;15866:9;15862:22;15816:78;:::i;:::-;15806:88;;15601:303;15971:2;15960:9;15956:18;15943:32;16002:18;15994:6;15991:30;15988:117;;;16024:79;;:::i;:::-;15988:117;16129:78;16199:7;16190:6;16179:9;16175:22;16129:78;:::i;:::-;16119:88;;15914:303;16284:2;16273:9;16269:18;16256:32;16315:18;16307:6;16304:30;16301:117;;;16337:79;;:::i;:::-;16301:117;16442:78;16512:7;16503:6;16492:9;16488:22;16442:78;:::i;:::-;16432:88;;16227:303;16597:3;16586:9;16582:19;16569:33;16629:18;16621:6;16618:30;16615:117;;;16651:79;;:::i;:::-;16615:117;16756:78;16826:7;16817:6;16806:9;16802:22;16756:78;:::i;:::-;16746:88;;16540:304;15100:1751;;;;;;;;:::o;16857:894::-;16975:6;16983;17032:2;17020:9;17011:7;17007:23;17003:32;17000:119;;;17038:79;;:::i;:::-;17000:119;17186:1;17175:9;17171:17;17158:31;17216:18;17208:6;17205:30;17202:117;;;17238:79;;:::i;:::-;17202:117;17343:78;17413:7;17404:6;17393:9;17389:22;17343:78;:::i;:::-;17333:88;;17129:302;17498:2;17487:9;17483:18;17470:32;17529:18;17521:6;17518:30;17515:117;;;17551:79;;:::i;:::-;17515:117;17656:78;17726:7;17717:6;17706:9;17702:22;17656:78;:::i;:::-;17646:88;;17441:303;16857:894;;;;;:::o;17757:308::-;17819:4;17909:18;17901:6;17898:30;17895:56;;;17931:18;;:::i;:::-;17895:56;17969:29;17991:6;17969:29;:::i;:::-;17961:37;;18053:4;18047;18043:15;18035:23;;17757:308;;;:::o;18071:412::-;18149:5;18174:66;18190:49;18232:6;18190:49;:::i;:::-;18174:66;:::i;:::-;18165:75;;18263:6;18256:5;18249:21;18301:4;18294:5;18290:16;18339:3;18330:6;18325:3;18321:16;18318:25;18315:112;;;18346:79;;:::i;:::-;18315:112;18436:41;18470:6;18465:3;18460;18436:41;:::i;:::-;18155:328;18071:412;;;;;:::o;18503:340::-;18559:5;18608:3;18601:4;18593:6;18589:17;18585:27;18575:122;;18616:79;;:::i;:::-;18575:122;18733:6;18720:20;18758:79;18833:3;18825:6;18818:4;18810:6;18806:17;18758:79;:::i;:::-;18749:88;;18565:278;18503:340;;;;:::o;18849:654::-;18927:6;18935;18984:2;18972:9;18963:7;18959:23;18955:32;18952:119;;;18990:79;;:::i;:::-;18952:119;19110:1;19135:53;19180:7;19171:6;19160:9;19156:22;19135:53;:::i;:::-;19125:63;;19081:117;19265:2;19254:9;19250:18;19237:32;19296:18;19288:6;19285:30;19282:117;;;19318:79;;:::i;:::-;19282:117;19423:63;19478:7;19469:6;19458:9;19454:22;19423:63;:::i;:::-;19413:73;;19208:288;18849:654;;;;;:::o;19509:118::-;19596:24;19614:5;19596:24;:::i;:::-;19591:3;19584:37;19509:118;;:::o;19633:222::-;19726:4;19764:2;19753:9;19749:18;19741:26;;19777:71;19845:1;19834:9;19830:17;19821:6;19777:71;:::i;:::-;19633:222;;;;:::o;19861:116::-;19931:21;19946:5;19931:21;:::i;:::-;19924:5;19921:32;19911:60;;19967:1;19964;19957:12;19911:60;19861:116;:::o;19983:133::-;20026:5;20064:6;20051:20;20042:29;;20080:30;20104:5;20080:30;:::i;:::-;19983:133;;;;:::o;20122:468::-;20187:6;20195;20244:2;20232:9;20223:7;20219:23;20215:32;20212:119;;;20250:79;;:::i;:::-;20212:119;20370:1;20395:53;20440:7;20431:6;20420:9;20416:22;20395:53;:::i;:::-;20385:63;;20341:117;20497:2;20523:50;20565:7;20556:6;20545:9;20541:22;20523:50;:::i;:::-;20513:60;;20468:115;20122:468;;;;;:::o;20596:474::-;20664:6;20672;20721:2;20709:9;20700:7;20696:23;20692:32;20689:119;;;20727:79;;:::i;:::-;20689:119;20847:1;20872:53;20917:7;20908:6;20897:9;20893:22;20872:53;:::i;:::-;20862:63;;20818:117;20974:2;21000:53;21045:7;21036:6;21025:9;21021:22;21000:53;:::i;:::-;20990:63;;20945:118;20596:474;;;;;:::o;21076:1039::-;21203:6;21211;21219;21268:2;21256:9;21247:7;21243:23;21239:32;21236:119;;;21274:79;;:::i;:::-;21236:119;21394:1;21419:53;21464:7;21455:6;21444:9;21440:22;21419:53;:::i;:::-;21409:63;;21365:117;21549:2;21538:9;21534:18;21521:32;21580:18;21572:6;21569:30;21566:117;;;21602:79;;:::i;:::-;21566:117;21707:78;21777:7;21768:6;21757:9;21753:22;21707:78;:::i;:::-;21697:88;;21492:303;21862:2;21851:9;21847:18;21834:32;21893:18;21885:6;21882:30;21879:117;;;21915:79;;:::i;:::-;21879:117;22020:78;22090:7;22081:6;22070:9;22066:22;22020:78;:::i;:::-;22010:88;;21805:303;21076:1039;;;;;:::o;22121:474::-;22189:6;22197;22246:2;22234:9;22225:7;22221:23;22217:32;22214:119;;;22252:79;;:::i;:::-;22214:119;22372:1;22397:53;22442:7;22433:6;22422:9;22418:22;22397:53;:::i;:::-;22387:63;;22343:117;22499:2;22525:53;22570:7;22561:6;22550:9;22546:22;22525:53;:::i;:::-;22515:63;;22470:118;22121:474;;;;;:::o;22601:1089::-;22705:6;22713;22721;22729;22737;22786:3;22774:9;22765:7;22761:23;22757:33;22754:120;;;22793:79;;:::i;:::-;22754:120;22913:1;22938:53;22983:7;22974:6;22963:9;22959:22;22938:53;:::i;:::-;22928:63;;22884:117;23040:2;23066:53;23111:7;23102:6;23091:9;23087:22;23066:53;:::i;:::-;23056:63;;23011:118;23168:2;23194:53;23239:7;23230:6;23219:9;23215:22;23194:53;:::i;:::-;23184:63;;23139:118;23296:2;23322:53;23367:7;23358:6;23347:9;23343:22;23322:53;:::i;:::-;23312:63;;23267:118;23452:3;23441:9;23437:19;23424:33;23484:18;23476:6;23473:30;23470:117;;;23506:79;;:::i;:::-;23470:117;23611:62;23665:7;23656:6;23645:9;23641:22;23611:62;:::i;:::-;23601:72;;23395:288;22601:1089;;;;;;;;:::o;23696:329::-;23755:6;23804:2;23792:9;23783:7;23779:23;23775:32;23772:119;;;23810:79;;:::i;:::-;23772:119;23930:1;23955:53;24000:7;23991:6;23980:9;23976:22;23955:53;:::i;:::-;23945:63;;23901:117;23696:329;;;;:::o;24031:230::-;24171:34;24167:1;24159:6;24155:14;24148:58;24240:13;24235:2;24227:6;24223:15;24216:38;24031:230;:::o;24267:366::-;24409:3;24430:67;24494:2;24489:3;24430:67;:::i;:::-;24423:74;;24506:93;24595:3;24506:93;:::i;:::-;24624:2;24619:3;24615:12;24608:19;;24267:366;;;:::o;24639:419::-;24805:4;24843:2;24832:9;24828:18;24820:26;;24892:9;24886:4;24882:20;24878:1;24867:9;24863:17;24856:47;24920:131;25046:4;24920:131;:::i;:::-;24912:139;;24639:419;;;:::o;25064:180::-;25112:77;25109:1;25102:88;25209:4;25206:1;25199:15;25233:4;25230:1;25223:15;25250:320;25294:6;25331:1;25325:4;25321:12;25311:22;;25378:1;25372:4;25368:12;25399:18;25389:81;;25455:4;25447:6;25443:17;25433:27;;25389:81;25517:2;25509:6;25506:14;25486:18;25483:38;25480:84;;;25536:18;;:::i;:::-;25480:84;25301:269;25250:320;;;:::o;25576:182::-;25716:34;25712:1;25704:6;25700:14;25693:58;25576:182;:::o;25764:366::-;25906:3;25927:67;25991:2;25986:3;25927:67;:::i;:::-;25920:74;;26003:93;26092:3;26003:93;:::i;:::-;26121:2;26116:3;26112:12;26105:19;;25764:366;;;:::o;26136:419::-;26302:4;26340:2;26329:9;26325:18;26317:26;;26389:9;26383:4;26379:20;26375:1;26364:9;26360:17;26353:47;26417:131;26543:4;26417:131;:::i;:::-;26409:139;;26136:419;;;:::o;26561:237::-;26701:34;26697:1;26689:6;26685:14;26678:58;26770:20;26765:2;26757:6;26753:15;26746:45;26561:237;:::o;26804:366::-;26946:3;26967:67;27031:2;27026:3;26967:67;:::i;:::-;26960:74;;27043:93;27132:3;27043:93;:::i;:::-;27161:2;27156:3;27152:12;27145:19;;26804:366;;;:::o;27176:419::-;27342:4;27380:2;27369:9;27365:18;27357:26;;27429:9;27423:4;27419:20;27415:1;27404:9;27400:17;27393:47;27457:131;27583:4;27457:131;:::i;:::-;27449:139;;27176:419;;;:::o;27601:228::-;27741:34;27737:1;27729:6;27725:14;27718:58;27810:11;27805:2;27797:6;27793:15;27786:36;27601:228;:::o;27835:366::-;27977:3;27998:67;28062:2;28057:3;27998:67;:::i;:::-;27991:74;;28074:93;28163:3;28074:93;:::i;:::-;28192:2;28187:3;28183:12;28176:19;;27835:366;;;:::o;28207:419::-;28373:4;28411:2;28400:9;28396:18;28388:26;;28460:9;28454:4;28450:20;28446:1;28435:9;28431:17;28424:47;28488:131;28614:4;28488:131;:::i;:::-;28480:139;;28207:419;;;:::o;28632:180::-;28680:77;28677:1;28670:88;28777:4;28774:1;28767:15;28801:4;28798:1;28791:15;28818:180;28866:77;28863:1;28856:88;28963:4;28960:1;28953:15;28987:4;28984:1;28977:15;29004:233;29043:3;29066:24;29084:5;29066:24;:::i;:::-;29057:33;;29112:66;29105:5;29102:77;29099:103;;;29182:18;;:::i;:::-;29099:103;29229:1;29222:5;29218:13;29211:20;;29004:233;;;:::o;29243:228::-;29383:34;29379:1;29371:6;29367:14;29360:58;29452:11;29447:2;29439:6;29435:15;29428:36;29243:228;:::o;29477:366::-;29619:3;29640:67;29704:2;29699:3;29640:67;:::i;:::-;29633:74;;29716:93;29805:3;29716:93;:::i;:::-;29834:2;29829:3;29825:12;29818:19;;29477:366;;;:::o;29849:419::-;30015:4;30053:2;30042:9;30038:18;30030:26;;30102:9;30096:4;30092:20;30088:1;30077:9;30073:17;30066:47;30130:131;30256:4;30130:131;:::i;:::-;30122:139;;29849:419;;;:::o;30274:225::-;30414:34;30410:1;30402:6;30398:14;30391:58;30483:8;30478:2;30470:6;30466:15;30459:33;30274:225;:::o;30505:366::-;30647:3;30668:67;30732:2;30727:3;30668:67;:::i;:::-;30661:74;;30744:93;30833:3;30744:93;:::i;:::-;30862:2;30857:3;30853:12;30846:19;;30505:366;;;:::o;30877:419::-;31043:4;31081:2;31070:9;31066:18;31058:26;;31130:9;31124:4;31120:20;31116:1;31105:9;31101:17;31094:47;31158:131;31284:4;31158:131;:::i;:::-;31150:139;;30877:419;;;:::o;31302:220::-;31442:34;31438:1;31430:6;31426:14;31419:58;31511:3;31506:2;31498:6;31494:15;31487:28;31302:220;:::o;31528:366::-;31670:3;31691:67;31755:2;31750:3;31691:67;:::i;:::-;31684:74;;31767:93;31856:3;31767:93;:::i;:::-;31885:2;31880:3;31876:12;31869:19;;31528:366;;;:::o;31900:419::-;32066:4;32104:2;32093:9;32089:18;32081:26;;32153:9;32147:4;32143:20;32139:1;32128:9;32124:17;32117:47;32181:131;32307:4;32181:131;:::i;:::-;32173:139;;31900:419;;;:::o;32325:305::-;32365:3;32384:20;32402:1;32384:20;:::i;:::-;32379:25;;32418:20;32436:1;32418:20;:::i;:::-;32413:25;;32572:1;32504:66;32500:74;32497:1;32494:81;32491:107;;;32578:18;;:::i;:::-;32491:107;32622:1;32619;32615:9;32608:16;;32325:305;;;;:::o;32636:332::-;32757:4;32795:2;32784:9;32780:18;32772:26;;32808:71;32876:1;32865:9;32861:17;32852:6;32808:71;:::i;:::-;32889:72;32957:2;32946:9;32942:18;32933:6;32889:72;:::i;:::-;32636:332;;;;;:::o;32974:227::-;33114:34;33110:1;33102:6;33098:14;33091:58;33183:10;33178:2;33170:6;33166:15;33159:35;32974:227;:::o;33207:366::-;33349:3;33370:67;33434:2;33429:3;33370:67;:::i;:::-;33363:74;;33446:93;33535:3;33446:93;:::i;:::-;33564:2;33559:3;33555:12;33548:19;;33207:366;;;:::o;33579:419::-;33745:4;33783:2;33772:9;33768:18;33760:26;;33832:9;33826:4;33822:20;33818:1;33807:9;33803:17;33796:47;33860:131;33986:4;33860:131;:::i;:::-;33852:139;;33579:419;;;:::o;34004:224::-;34144:34;34140:1;34132:6;34128:14;34121:58;34213:7;34208:2;34200:6;34196:15;34189:32;34004:224;:::o;34234:366::-;34376:3;34397:67;34461:2;34456:3;34397:67;:::i;:::-;34390:74;;34473:93;34562:3;34473:93;:::i;:::-;34591:2;34586:3;34582:12;34575:19;;34234:366;;;:::o;34606:419::-;34772:4;34810:2;34799:9;34795:18;34787:26;;34859:9;34853:4;34849:20;34845:1;34834:9;34830:17;34823:47;34887:131;35013:4;34887:131;:::i;:::-;34879:139;;34606:419;;;:::o;35031:229::-;35171:34;35167:1;35159:6;35155:14;35148:58;35240:12;35235:2;35227:6;35223:15;35216:37;35031:229;:::o;35266:366::-;35408:3;35429:67;35493:2;35488:3;35429:67;:::i;:::-;35422:74;;35505:93;35594:3;35505:93;:::i;:::-;35623:2;35618:3;35614:12;35607:19;;35266:366;;;:::o;35638:419::-;35804:4;35842:2;35831:9;35827:18;35819:26;;35891:9;35885:4;35881:20;35877:1;35866:9;35862:17;35855:47;35919:131;36045:4;35919:131;:::i;:::-;35911:139;;35638:419;;;:::o;36063:634::-;36284:4;36322:2;36311:9;36307:18;36299:26;;36371:9;36365:4;36361:20;36357:1;36346:9;36342:17;36335:47;36399:108;36502:4;36493:6;36399:108;:::i;:::-;36391:116;;36554:9;36548:4;36544:20;36539:2;36528:9;36524:18;36517:48;36582:108;36685:4;36676:6;36582:108;:::i;:::-;36574:116;;36063:634;;;;;:::o;36703:222::-;36843:34;36839:1;36831:6;36827:14;36820:58;36912:5;36907:2;36899:6;36895:15;36888:30;36703:222;:::o;36931:366::-;37073:3;37094:67;37158:2;37153:3;37094:67;:::i;:::-;37087:74;;37170:93;37259:3;37170:93;:::i;:::-;37288:2;37283:3;37279:12;37272:19;;36931:366;;;:::o;37303:419::-;37469:4;37507:2;37496:9;37492:18;37484:26;;37556:9;37550:4;37546:20;37542:1;37531:9;37527:17;37520:47;37584:131;37710:4;37584:131;:::i;:::-;37576:139;;37303:419;;;:::o;37728:223::-;37868:34;37864:1;37856:6;37852:14;37845:58;37937:6;37932:2;37924:6;37920:15;37913:31;37728:223;:::o;37957:366::-;38099:3;38120:67;38184:2;38179:3;38120:67;:::i;:::-;38113:74;;38196:93;38285:3;38196:93;:::i;:::-;38314:2;38309:3;38305:12;38298:19;;37957:366;;;:::o;38329:419::-;38495:4;38533:2;38522:9;38518:18;38510:26;;38582:9;38576:4;38572:20;38568:1;38557:9;38553:17;38546:47;38610:131;38736:4;38610:131;:::i;:::-;38602:139;;38329:419;;;:::o;38754:228::-;38894:34;38890:1;38882:6;38878:14;38871:58;38963:11;38958:2;38950:6;38946:15;38939:36;38754:228;:::o;38988:366::-;39130:3;39151:67;39215:2;39210:3;39151:67;:::i;:::-;39144:74;;39227:93;39316:3;39227:93;:::i;:::-;39345:2;39340:3;39336:12;39329:19;;38988:366;;;:::o;39360:419::-;39526:4;39564:2;39553:9;39549:18;39541:26;;39613:9;39607:4;39603:20;39599:1;39588:9;39584:17;39577:47;39641:131;39767:4;39641:131;:::i;:::-;39633:139;;39360:419;;;:::o;39785:98::-;39836:6;39870:5;39864:12;39854:22;;39785:98;;;:::o;39889:168::-;39972:11;40006:6;40001:3;39994:19;40046:4;40041:3;40037:14;40022:29;;39889:168;;;;:::o;40063:360::-;40149:3;40177:38;40209:5;40177:38;:::i;:::-;40231:70;40294:6;40289:3;40231:70;:::i;:::-;40224:77;;40310:52;40355:6;40350:3;40343:4;40336:5;40332:16;40310:52;:::i;:::-;40387:29;40409:6;40387:29;:::i;:::-;40382:3;40378:39;40371:46;;40153:270;40063:360;;;;:::o;40429:751::-;40652:4;40690:3;40679:9;40675:19;40667:27;;40704:71;40772:1;40761:9;40757:17;40748:6;40704:71;:::i;:::-;40785:72;40853:2;40842:9;40838:18;40829:6;40785:72;:::i;:::-;40867;40935:2;40924:9;40920:18;40911:6;40867:72;:::i;:::-;40949;41017:2;41006:9;41002:18;40993:6;40949:72;:::i;:::-;41069:9;41063:4;41059:20;41053:3;41042:9;41038:19;41031:49;41097:76;41168:4;41159:6;41097:76;:::i;:::-;41089:84;;40429:751;;;;;;;;:::o;41186:141::-;41242:5;41273:6;41267:13;41258:22;;41289:32;41315:5;41289:32;:::i;:::-;41186:141;;;;:::o;41333:349::-;41402:6;41451:2;41439:9;41430:7;41426:23;41422:32;41419:119;;;41457:79;;:::i;:::-;41419:119;41577:1;41602:63;41657:7;41648:6;41637:9;41633:22;41602:63;:::i;:::-;41592:73;;41548:127;41333:349;;;;:::o;41688:106::-;41732:8;41781:5;41776:3;41772:15;41751:36;;41688:106;;;:::o;41800:183::-;41835:3;41873:1;41855:16;41852:23;41849:128;;;41911:1;41908;41905;41890:23;41933:34;41964:1;41958:8;41933:34;:::i;:::-;41926:41;;41849:128;41800:183;:::o;41989:711::-;42028:3;42066:4;42048:16;42045:26;42042:39;;;42074:5;;42042:39;42103:20;;:::i;:::-;42178:1;42160:16;42156:24;42153:1;42147:4;42132:49;42211:4;42205:11;42310:16;42303:4;42295:6;42291:17;42288:39;42255:18;42247:6;42244:30;42228:113;42225:146;;;42356:5;;;;42225:146;42402:6;42396:4;42392:17;42438:3;42432:10;42465:18;42457:6;42454:30;42451:43;;;42487:5;;;;;;42451:43;42535:6;42528:4;42523:3;42519:14;42515:27;42594:1;42576:16;42572:24;42566:4;42562:35;42557:3;42554:44;42551:57;;;42601:5;;;;;;;42551:57;42618;42666:6;42660:4;42656:17;42648:6;42644:30;42638:4;42618:57;:::i;:::-;42691:3;42684:10;;42032:668;;;;;41989:711;;:::o;42706:239::-;42846:34;42842:1;42834:6;42830:14;42823:58;42915:22;42910:2;42902:6;42898:15;42891:47;42706:239;:::o;42951:366::-;43093:3;43114:67;43178:2;43173:3;43114:67;:::i;:::-;43107:74;;43190:93;43279:3;43190:93;:::i;:::-;43308:2;43303:3;43299:12;43292:19;;42951:366;;;:::o;43323:419::-;43489:4;43527:2;43516:9;43512:18;43504:26;;43576:9;43570:4;43566:20;43562:1;43551:9;43547:17;43540:47;43604:131;43730:4;43604:131;:::i;:::-;43596:139;;43323:419;;;:::o;43748:227::-;43888:34;43884:1;43876:6;43872:14;43865:58;43957:10;43952:2;43944:6;43940:15;43933:35;43748:227;:::o;43981:366::-;44123:3;44144:67;44208:2;44203:3;44144:67;:::i;:::-;44137:74;;44220:93;44309:3;44220:93;:::i;:::-;44338:2;44333:3;44329:12;44322:19;;43981:366;;;:::o;44353:419::-;44519:4;44557:2;44546:9;44542:18;44534:26;;44606:9;44600:4;44596:20;44592:1;44581:9;44577:17;44570:47;44634:131;44760:4;44634:131;:::i;:::-;44626:139;;44353:419;;;:::o;44778:1053::-;45101:4;45139:3;45128:9;45124:19;45116:27;;45153:71;45221:1;45210:9;45206:17;45197:6;45153:71;:::i;:::-;45234:72;45302:2;45291:9;45287:18;45278:6;45234:72;:::i;:::-;45353:9;45347:4;45343:20;45338:2;45327:9;45323:18;45316:48;45381:108;45484:4;45475:6;45381:108;:::i;:::-;45373:116;;45536:9;45530:4;45526:20;45521:2;45510:9;45506:18;45499:48;45564:108;45667:4;45658:6;45564:108;:::i;:::-;45556:116;;45720:9;45714:4;45710:20;45704:3;45693:9;45689:19;45682:49;45748:76;45819:4;45810:6;45748:76;:::i;:::-;45740:84;;44778:1053;;;;;;;;:::o

Swarm Source

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