ETH Price: $2,300.35 (-4.96%)

Token

CabinetOfCuriosities ()
 

Overview

Max Total Supply

119

Holders

87

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xb56fab346eb7ecfd2d6543f963e4bd0b9c349e39
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:
CabinetOfCuriosities

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 600 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 16: CabinetOfCuriosities.sol
// SPDX-License-Identifier: MIT

/*
*
* Society of the Hourglass: Cabinet of Curiosities
* 
* Contract by Matt Casanova [Twitter: @DevGuyThings]
* 
* Website: https://www.societyofthehourglass.com/
* Mint Page: https://app.hashku.com/team/society-of-the-hourglass/cabinet-of-curiosities/mint
*
*/

pragma solidity 0.8.9;

import "./VerifySignature.sol";
import "./Withdraw.sol";
import "./Group.sol";
import "./ExternalAccount.sol";
import "./ERC1155.sol";
import "./ERC1155Burnable.sol";
import "./ERC1155Supply.sol";
import "./Ownable.sol";

contract CabinetOfCuriosities is 
    Ownable, 
    Withdraw, 
    Group, 
    VerifySignature, 
    ExternalAccount,
    ERC1155, 
    ERC1155Burnable
{
    mapping(uint256 => uint256) private _totalSupply;

    struct CabinetItem {
        uint256 price;
        uint256 amountMinted;
        uint256 amountAllowed;
        uint256 maxMintPerAddress;
        uint256 mainCollectionQty;
    }
    mapping(uint256 => CabinetItem) public items;

    /// @notice How many items someone can mint
    uint256 public maxMintEachAddress = 2;
    mapping(address => uint) public hasMinted;

    string private cabinetUri = "https://storage.hashku.com/api/soth/cabinet/{id}.json";

    uint256 constant private DUST = 0;
    uint256 constant private SCOPE = 1;
    uint256 constant private BOOK = 2;
    uint256 constant private BOT = 3;
    uint256 constant private POSTER = 4;
    uint256 constant private BOOK_CLOSED = 5;
    uint256 constant private BOT_ACTIVE = 6;

    uint256 public currentRaffleIndex = 11;

    mapping(uint256 => bool) public nigelWinners;

    constructor() ERC1155("https://storage.hashku.com/soth/cabinet/{id}.json") {
        // forget me dust
        items[DUST] = CabinetItem(60000000000000000, 0, 222, 2, 2);

        // pocket spectroscope
        items[SCOPE] = CabinetItem(120000000000000000, 0, 166, 2, 4);

        // book of epochs
        items[BOOK] = CabinetItem(170000000000000000, 0, 99, 2, 4);

        // autotranslator bot
        items[BOT] = CabinetItem(170000000000000000, 0, 99, 2, 4);

        // wanted poster of nigel
        items[POSTER] = CabinetItem(180000000000000000, 0, 99, 2, 4);

        // opened book of epochs
        items[BOOK_CLOSED] = CabinetItem(0, 0, 99, 2, 0);

        // activated autotranslator bot
        items[BOT_ACTIVE] = CabinetItem(0, 0, 99, 2, 0);

        // Raffle tickets will be IDs 11-99
    }

    /*
    * @notice Total supply of a given item
    */
    function totalSupply(uint256 id) public view returns (uint256) {
        return _totalSupply[id];
    }

    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal override {
        super._mint(account, id, amount, data);
        _totalSupply[id] += amount;
    }

    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal override {
        super._burn(account, id, amount);
        _totalSupply[id] -= amount;
    }

    /*
    * @notice Set overall quanitity a user is allowed to mint
    */
    function setMaxMintEachAddress(uint256 _amt) public onlyOwner {
        maxMintEachAddress = _amt;
    }

    /*
    * @notice Set a Nigel raffle ticket as a winner
    */
    function setNigelWinner(uint256 _id) public onlyOwner {
        nigelWinners[_id] = true;
    }

    /*
    * @notice Allow updating the item data
    */
    function setItem( uint256 _id, uint256 _price, uint256 _amountAllowed, uint256 _maxMintPerAddress, uint256 _mainCollectionQty ) public onlyOwner {
        items[_id].price = _price;
        items[_id].amountAllowed = _amountAllowed;
        items[_id].maxMintPerAddress = _maxMintPerAddress;
        items[_id].mainCollectionQty = _mainCollectionQty;
    }

    function uri(uint256) public view override returns (string memory) {
        return cabinetUri;
    }
    
    function setURI(string memory _newuri) public onlyOwner {
        cabinetUri = _newuri;
    }

    /*
    * @notice Shop for a single item of varyiable quantity
    */
    function shop( uint256 _id, uint256 _qty, bytes memory _signature ) public payable {
        // check signature - will be provided by Hashku
        require(verifySignature("SHOP", group, _id, _qty, _signature), "invsig");
        require(_id < 5, "invitm");
        require(_qty * items[_id].price == msg.value, "incfnds");

        mintInternal(msg.sender, _id, _qty);
    }

    /*
    * @notice Shop for more than a single item
    */
    function shopMultiple( uint256[] memory _ids, uint256[] memory _qtys, bytes memory _signature ) public payable {
        // check signature - will be provided by Hashku
        require(verifySignature("SHOP", group, _ids[0], _qtys[0], _signature), "invsig");
        require(_ids.length == _qtys.length, "idqtymm");
        require(_ids.length < 6, "maxitms");

        uint256 _totalPrice;
        for (uint256 _i = 0; _i < _ids.length; _i++) {
            require(_ids[_i] < 5, "invitm");
            _totalPrice += items[_ids[_i]].price * _qtys[_i];
        }

        require(_totalPrice == msg.value, "incfnds");

        for (uint256 _i = 0; _i < _ids.length; _i++) {
            mintInternal(msg.sender, _ids[_i], _qtys[_i]);
        }
    }

    /*
    * @notice Mint an item, used by other functions only
    */
    function mintInternal(address _to, uint256 _id, uint256 _qty) internal {
        require(hasMinted[_to] + _qty <= maxMintEachAddress, "mintmax");
        require(items[_id].amountMinted + _qty <= items[_id].amountAllowed, "itmunv");
        require(_qty + balanceOf(_to, _id) <= items[_id].maxMintPerAddress, "itmmax");

        hasMinted[_to] += _qty;
        items[_id].amountMinted += _qty;
        _mint(_to, _id, _qty, "");
    }

    /*
    * @notice Send tokens to an address (to be used for rewarding community members and partners)
    */
    function send(address _to, uint256[] memory _ids, uint256[] memory _qtys) public onlyOwner {
        require(_ids.length == _qtys.length, "idqtymm");
        require(_ids.length < 6, "maxitms");

        for (uint256 _i = 0; _i < _ids.length; _i++) {
            require(_ids[_i] < 5, "invitm");
        }

        for (uint256 _i = 0; _i < _ids.length; _i++) {
            mintInternal(_to, _ids[_i], _qtys[_i]);
        }
    }

    /*
    * @notice Mint BOOK_CLOSED or BOT_ACTIVE from redemption contract
    */
    function mintExternal(address _to, uint256 _id, uint256 _qty) external onlyExternalAccount {
        require(_id > 4, "invitm");
        require(_id < 7, "invitm");
        items[_id].amountMinted += _qty;
        _mint(_to, _id, _qty, "");
    }

    /*
    * @notice Mint Nigel raffle ticket (IDs 11+)
    */
    function mintNigelRaffle(address _to, uint256 _qty) external onlyExternalAccount {
        for (uint256 _i = 0; _i < _qty; _i++) {
            _mint(_to, currentRaffleIndex, 1, "");
            currentRaffleIndex += 1;
        }
    }

    /*
    * @notice Burn token from redemption account
    */
    function burnExternal(address _to, uint256 _id, uint256 _qty) external onlyExternalAccount {
        _burn(_to, _id, _qty);
    }

    /*
    * @notice Shortcut for retrieving number of main collection NFTs are redemeed from a Cabinet item
    */
    function itemMainCollectionQuantity(uint256 _id) public view returns (uint256) {
        return items[_id].mainCollectionQty;
    }

    function burn(
        address _account,
        uint256 _id,
        uint256 _value
    ) override public virtual onlyOwner {}

    function burnBatch(
        address _account,
        uint256[] memory _ids,
        uint256[] memory _values
    ) override public virtual onlyOwner {}
}

File 1 of 16: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @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 3 of 16: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 4 of 16: ERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

/**
 * @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 {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

        return array;
    }
}

File 5 of 16: ERC1155Burnable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC1155.sol";

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

        _burn(account, id, value);
    }

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

        _burnBatch(account, ids, values);
    }
}

File 6 of 16: ERC1155Supply.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC1155.sol";

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

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

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

    /**
     * @dev See {ERC1155-_mint}.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual override {
        super._mint(account, id, amount, data);
        _totalSupply[id] += amount;
    }

    /**
     * @dev See {ERC1155-_mintBatch}.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._mintBatch(to, ids, amounts, data);
        for (uint256 i = 0; i < ids.length; ++i) {
            _totalSupply[ids[i]] += amounts[i];
        }
    }

    /**
     * @dev See {ERC1155-_burn}.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual override {
        super._burn(account, id, amount);
        _totalSupply[id] -= amount;
    }

    /**
     * @dev See {ERC1155-_burnBatch}.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual override {
        super._burnBatch(account, ids, amounts);
        for (uint256 i = 0; i < ids.length; ++i) {
            _totalSupply[ids[i]] -= amounts[i];
        }
    }
}

File 7 of 16: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 8 of 16: ExternalAccount.sol
// SPDX-License-Identifier: MIT

/*
*
* ExternalAccount Contract
* 
* Contract by Matt Casanova [Twitter: @DevGuyThings]
* 
* To be used to allow a single external address (likely another another contract) to interact with particular functions
*
*/

pragma solidity 0.8.9;

import "./Ownable.sol";

contract ExternalAccount is Ownable {

    address public externalAccount;

    function setExternalAccount(address _addr) public onlyOwner {
        externalAccount = _addr;
    }

    modifier onlyExternalAccount() {
        require(externalAccount != address(0), "noext");
        require(msg.sender == externalAccount, "invacct");
        _;
    }
}

File 9 of 16: Group.sol
// SPDX-License-Identifier: MIT

/*
*
* Group Contract
* 
* Contract by Matt Casanova [Twitter: @DevGuyThings]
* 
* To be used in conjuction with VerifySignature as a way to validate a signature generated off-chain
*
*/

pragma solidity 0.8.9;

import "./Ownable.sol";

contract Group is Ownable {

    string public group = "init";

    event GroupUpdated(string _group);

    function setGroup(string memory _grp) public onlyOwner {
        group = _grp;
        emit GroupUpdated(_grp);
    }
}

File 10 of 16: IERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 11 of 16: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC1155.sol";

/**
 * @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 12 of 16: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

File 13 of 16: IERC165.sol
// SPDX-License-Identifier: MIT

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 14 of 16: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 15 of 16: VerifySignature.sol
// SPDX-License-Identifier: MIT

/*
*
* VerifySignature Contract
* 
* Contract by Matt Casanova [Twitter: @DevGuyThings]
* 
* Verify a signature generated off-chain
* To be used for helping avoid gas wars without having to whitelist addresses on contract
*
*/

pragma solidity 0.8.9;

import "./Ownable.sol";

contract VerifySignature is Ownable {

    address public verifySigner;

    constructor() {
        verifySigner = msg.sender;
    }

    function setSigner(address _newSigner) public onlyOwner {
        verifySigner = _newSigner;
    }

    function getMessageHash(
        string memory _messageOne,
        string memory _messageTwo,
        uint _numberOne,
        uint _numberTwo,
        address _address
    ) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(_messageOne, _messageTwo, _numberOne, _numberTwo, _address));
    }

    function getEthSignedMessageHash(bytes32 _messageHash)
        internal
        pure
        returns (bytes32)
    {
        return
            keccak256(
                abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)
            );
    }

    function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature)
        internal
        pure
        returns (address)
    {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature);

        return ecrecover(_ethSignedMessageHash, v, r, s);
    }

    function splitSignature(bytes memory _sig)
        internal
        pure
        returns (
            bytes32 r,
            bytes32 s,
            uint8 v
        )
    {
        require(_sig.length == 65, "siglngth");

        assembly {
            r := mload(add(_sig, 32))
            s := mload(add(_sig, 64))
            v := byte(0, mload(add(_sig, 96)))
        }
    }

    function verifySignature(
        string memory _messageOne,
        string memory _messageTwo,
        uint _numberOne,
        uint _numberTwo,
        bytes memory signature
    ) internal view returns (bool) {
        bytes32 _messageHash = getMessageHash(_messageOne, _messageTwo, _numberOne, _numberTwo, msg.sender);
        bytes32 _ethSignedMessageHash = getEthSignedMessageHash(_messageHash);
        return recoverSigner(_ethSignedMessageHash, signature) == verifySigner;
    }
}

File 16 of 16: Withdraw.sol
// SPDX-License-Identifier: MIT

/*
*
* Withdraw Contract
* 
* Contract by Matt Casanova [Twitter: @DevGuyThings]
* 
* Withdraw funds from a contract
*
*/

pragma solidity 0.8.9;

import "./Ownable.sol";

contract Withdraw is Ownable {
    function seeBalance() public view onlyOwner returns(uint)  {
        return address(this).balance;
    }

    function withdraw(address payable _to, uint _amount) public onlyOwner returns(bool)  {
        require(_amount <= address(this).balance, "insfnds");
        _to.transfer(_amount);
        return true;
    }
}

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":false,"internalType":"string","name":"_group","type":"string"}],"name":"GroupUpdated","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":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"burnExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRaffleIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"externalAccount","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"group","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"itemMainCollectionQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"items","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"amountMinted","type":"uint256"},{"internalType":"uint256","name":"amountAllowed","type":"uint256"},{"internalType":"uint256","name":"maxMintPerAddress","type":"uint256"},{"internalType":"uint256","name":"mainCollectionQty","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintEachAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"mintExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_qty","type":"uint256"}],"name":"mintNigelRaffle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nigelWinners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"seeBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_qtys","type":"uint256[]"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setExternalAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_grp","type":"string"}],"name":"setGroup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_amountAllowed","type":"uint256"},{"internalType":"uint256","name":"_maxMintPerAddress","type":"uint256"},{"internalType":"uint256","name":"_mainCollectionQty","type":"uint256"}],"name":"setItem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"}],"name":"setMaxMintEachAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setNigelWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSigner","type":"address"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_qty","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"shop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_qtys","type":"uint256[]"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"shopMultiple","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"verifySigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60c060405260046080819052631a5b9a5d60e21b60a090815262000027916001919062000757565b50600260095560405180606001604052806035815260200162003bc66035913980516200005d91600b9160209091019062000757565b50600b600c553480156200007057600080fd5b5060405180606001604052806031815260200162003b95603191396200009633620006ee565b600280546001600160a01b03191633179055620000b3816200073e565b506040805160a0808201835266d529ae9e86000082526000602080840182815260de858701908152600260608088018281526080808a0184815288805260088089529a517f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75595517f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c85593517f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c955517f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256ca5592517f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256cb55875180870189526701aa535d3d0c0000815280850186815260a6828b01908152828601848152600484870181815260018b528c8a5294517fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac55f5592517fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac5605590517fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac56155517fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac5625590517fad67d757c34507f157cacfa2e3153e9f260a2244f30428821be7be64587ac5635588518088018a5267025bf6196bd100008082528187018881526063838d01818152848901878152858901878152888d528e8c5295517f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea90415592517f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea904255517f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea90435590517f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea90445591517f6add646517a5b0f6793cd5891b7937d28a5b2981a5d88ebc7cd776088fea9045558a51808a018c52908152808701888152818c0183815282880186815283880186815260038c528d8b5293517f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d264555591517f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d2645655517f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d2645755517f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d2645855517f625b35f5e76f098dd7c3a05b10e2e5e78a4a01228d60c3b143426cdf36d264595589518089018b5267027f7d0bdb9200008152808701888152818c01838152828801868152838801868152958b528c8a5292517f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b85590517f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624b955517f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624ba55517f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624bb5590517f9321edea6e3be4df59a344b401fab4f888b556fda1f954244cff9204bad624bc5588518088018a52868152808601878152818b018381528287018581528387018a815260058b528c8a5293517f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdb5591517f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdc55517f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdd55517f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fde55517f91238f30f286c9a1c6e901c4eda3b214c381c846e3dbe48df95c21488e8e1fdf558851968701895285875286850186815298870190815292860190815290850184815260069094529490915291517f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc55592517f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc655517f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc755517f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc855517f13acf3fc7bed94759963f076d5d3443d88732026bffc8253bdf4a6e65f21ecc9556200083a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516200075390600690602084019062000757565b5050565b8280546200076590620007fd565b90600052602060002090601f016020900481019282620007895760008555620007d4565b82601f10620007a457805160ff1916838001178555620007d4565b82800160010185558215620007d4579182015b82811115620007d4578251825591602001919060010190620007b7565b50620007e2929150620007e6565b5090565b5b80821115620007e25760008155600101620007e7565b600181811c908216806200081257607f821691505b602082108114156200083457634e487b7160e01b600052602260045260246000fd5b50919050565b61334b806200084a6000396000f3fe6080604052600436106102845760003560e01c80639b35ac8611610153578063e7228e61116100cb578063f2fde38b1161007f578063f4d72cab11610064578063f4d72cab146107a4578063f5298aca146107c4578063f75451f8146107df57600080fd5b8063f2fde38b14610764578063f3fef3a31461078457600080fd5b8063e985e9c5116100b0578063e985e9c5146106e8578063eff4a46914610731578063f242432a1461074457600080fd5b8063e7228e61146106a8578063e8c61831146106c857600080fd5b8063a5cd19da11610122578063bd85b03911610107578063bd85b039146105e9578063bfb231d214610616578063c97b97301461068857600080fd5b8063a5cd19da146105bd578063ba0a5561146105d357600080fd5b80639b35ac861461053a5780639d3545161461054d578063a22cb4651461057d578063a5b59c6b1461059d57600080fd5b80634496a453116102015780636d08557a116101b55780638da5cb5b1161019a5780638da5cb5b146104dc5780639149fe40146104fa57806398c0c7d91461051a57600080fd5b80636d08557a1461048f578063715018a6146104c757600080fd5b806359e874ef116101e657806359e874ef1461042f5780636b20c4541461044f5780636c19e7831461046f57600080fd5b80634496a453146103d25780634e1273f41461040257600080fd5b80630e89341c116102585780632eb2c2d61161023d5780632eb2c2d61461037057806338e21cce14610390578063429a1bb0146103bd57600080fd5b80630e89341c1461032e57806329e7ef2d1461035b57600080fd5b8062fdd58e1461028957806301ffc9a7146102bc57806302fe5305146102ec5780630ba6f8a51461030e575b600080fd5b34801561029557600080fd5b506102a96102a436600461294a565b6107ff565b6040519081526020015b60405180910390f35b3480156102c857600080fd5b506102dc6102d736600461298c565b6108aa565b60405190151581526020016102b3565b3480156102f857600080fd5b5061030c610307366004612a51565b6108fc565b005b34801561031a57600080fd5b5061030c610329366004612aa2565b61095b565b34801561033a57600080fd5b5061034e610349366004612add565b6109c8565b6040516102b39190612b4e565b34801561036757600080fd5b5061034e610a5c565b34801561037c57600080fd5b5061030c61038b366004612c16565b610aea565b34801561039c57600080fd5b506102a96103ab366004612cc4565b600a6020526000908152604090205481565b3480156103c957600080fd5b506102a9610b8c565b3480156103de57600080fd5b506102dc6103ed366004612add565b600d6020526000908152604090205460ff1681565b34801561040e57600080fd5b5061042261041d366004612ce1565b610bdb565b6040516102b39190612de9565b34801561043b57600080fd5b5061030c61044a366004612dfc565b610d05565b34801561045b57600080fd5b5061030c61046a366004612e31565b610d99565b34801561047b57600080fd5b5061030c61048a366004612cc4565b610de1565b34801561049b57600080fd5b506003546104af906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b3480156104d357600080fd5b5061030c610e4b565b3480156104e857600080fd5b506000546001600160a01b03166104af565b34801561050657600080fd5b5061030c61051536600461294a565b610e9f565b34801561052657600080fd5b5061030c610535366004612add565b610f77565b61030c610548366004612ea7565b610fc4565b34801561055957600080fd5b506102a9610568366004612add565b60009081526008602052604090206004015490565b34801561058957600080fd5b5061030c610598366004612f25565b6112bc565b3480156105a957600080fd5b5061030c6105b8366004612e31565b611393565b3480156105c957600080fd5b506102a9600c5481565b3480156105df57600080fd5b506102a960095481565b3480156105f557600080fd5b506102a9610604366004612add565b60009081526007602052604090205490565b34801561062257600080fd5b50610660610631366004612add565b600860205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016102b3565b34801561069457600080fd5b5061030c6106a3366004612a51565b611516565b3480156106b457600080fd5b5061030c6106c3366004612dfc565b6115ac565b3480156106d457600080fd5b506002546104af906001600160a01b031681565b3480156106f457600080fd5b506102dc610703366004612f63565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61030c61073f366004612f91565b6116e5565b34801561075057600080fd5b5061030c61075f366004612fd7565b611863565b34801561077057600080fd5b5061030c61077f366004612cc4565b6118ea565b34801561079057600080fd5b506102dc61079f36600461294a565b6119a3565b3480156107b057600080fd5b5061030c6107bf366004612add565b611a66565b3480156107d057600080fd5b5061030c61046a366004612dfc565b3480156107eb57600080fd5b5061030c6107fa366004612cc4565b611ac9565b60006001600160a01b0383166108825760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806108db57506001600160e01b031982166303a24d0760e21b145b806108f657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146109445760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b805161095790600b90602084019061289c565b5050565b6000546001600160a01b031633146109a35760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b6000948552600860205260409094209283556002830191909155600382015560040155565b6060600b80546109d790613040565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0390613040565b8015610a505780601f10610a2557610100808354040283529160200191610a50565b820191906000526020600020905b815481529060010190602001808311610a3357829003601f168201915b50505050509050919050565b60018054610a6990613040565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9590613040565b8015610ae25780601f10610ab757610100808354040283529160200191610ae2565b820191906000526020600020905b815481529060010190602001808311610ac557829003601f168201915b505050505081565b6001600160a01b038516331480610b065750610b068533610703565b610b785760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610879565b610b858585858585611b33565b5050505050565b600080546001600160a01b03163314610bd55760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b50475b90565b60608151835114610c405760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610879565b6000835167ffffffffffffffff811115610c5c57610c5c6129b0565b604051908082528060200260200182016040528015610c85578160200160208202803683370190505b50905060005b8451811015610cfd57610cd0858281518110610ca957610ca961307b565b6020026020010151858381518110610cc357610cc361307b565b60200260200101516107ff565b828281518110610ce257610ce261307b565b6020908102919091010152610cf6816130a7565b9050610c8b565b509392505050565b6003546001600160a01b0316610d455760405162461bcd60e51b81526020600482015260056024820152641b9bd95e1d60da1b6044820152606401610879565b6003546001600160a01b03163314610d895760405162461bcd60e51b81526020600482015260076024820152661a5b9d9858d8dd60ca1b6044820152606401610879565b610d94838383611d94565b505050565b6000546001600160a01b03163314610d945760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b6000546001600160a01b03163314610e295760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e935760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b610e9d6000611dc7565b565b6003546001600160a01b0316610edf5760405162461bcd60e51b81526020600482015260056024820152641b9bd95e1d60da1b6044820152606401610879565b6003546001600160a01b03163314610f235760405162461bcd60e51b81526020600482015260076024820152661a5b9d9858d8dd60ca1b6044820152606401610879565b60005b81811015610d9457610f4c83600c54600160405180602001604052806000815250611e17565b6001600c6000828254610f5f91906130c2565b90915550819050610f6f816130a7565b915050610f26565b6000546001600160a01b03163314610fbf5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b600955565b6110ab60405180604001604052806004815260200163053484f560e41b81525060018054610ff190613040565b80601f016020809104026020016040519081016040528092919081815260200182805461101d90613040565b801561106a5780601f1061103f5761010080835404028352916020019161106a565b820191906000526020600020905b81548152906001019060200180831161104d57829003601f168201915b5050505050856000815181106110825761108261307b565b60200260200101518560008151811061109d5761109d61307b565b602002602001015185611e4c565b6110e05760405162461bcd60e51b8152602060048201526006602482015265696e7673696760d01b6044820152606401610879565b815183511461111b5760405162461bcd60e51b815260206004820152600760248201526669647174796d6d60c81b6044820152606401610879565b60068351106111565760405162461bcd60e51b81526020600482015260076024820152666d617869746d7360c81b6044820152606401610879565b6000805b84518110156112275760058582815181106111775761117761307b565b6020026020010151106111b55760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b8381815181106111c7576111c761307b565b6020026020010151600860008784815181106111e5576111e561307b565b602002602001015181526020019081526020016000206000015461120991906130da565b61121390836130c2565b91508061121f816130a7565b91505061115a565b503481146112615760405162461bcd60e51b8152602060048201526007602482015266696e63666e647360c81b6044820152606401610879565b60005b8451811015610b85576112aa338683815181106112835761128361307b565b602002602001015186848151811061129d5761129d61307b565b6020026020010151611ee6565b806112b4816130a7565b915050611264565b336001600160a01b03831614156113275760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610879565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b031633146113db5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b80518251146114165760405162461bcd60e51b815260206004820152600760248201526669647174796d6d60c81b6044820152606401610879565b60068251106114515760405162461bcd60e51b81526020600482015260076024820152666d617869746d7360c81b6044820152606401610879565b60005b82518110156114c15760058382815181106114715761147161307b565b6020026020010151106114af5760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b806114b9816130a7565b915050611454565b5060005b8251811015611510576114fe848483815181106114e4576114e461307b565b602002602001015184848151811061129d5761129d61307b565b80611508816130a7565b9150506114c5565b50505050565b6000546001600160a01b0316331461155e5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b805161157190600190602084019061289c565b507fea182549f0872ecdb7bddda126cd6d8af729a106a97fcb1033bbde69da19d54e816040516115a19190612b4e565b60405180910390a150565b6003546001600160a01b03166115ec5760405162461bcd60e51b81526020600482015260056024820152641b9bd95e1d60da1b6044820152606401610879565b6003546001600160a01b031633146116305760405162461bcd60e51b81526020600482015260076024820152661a5b9d9858d8dd60ca1b6044820152606401610879565b600482116116695760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b600782106116a25760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b600082815260086020526040812060010180548392906116c39084906130c2565b92505081905550610d9483838360405180602001604052806000815250611e17565b61179860405180604001604052806004815260200163053484f560e41b8152506001805461171290613040565b80601f016020809104026020016040519081016040528092919081815260200182805461173e90613040565b801561178b5780601f106117605761010080835404028352916020019161178b565b820191906000526020600020905b81548152906001019060200180831161176e57829003601f168201915b5050505050858585611e4c565b6117cd5760405162461bcd60e51b8152602060048201526006602482015265696e7673696760d01b6044820152606401610879565b600583106118065760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b600083815260086020526040902054349061182190846130da565b146118585760405162461bcd60e51b8152602060048201526007602482015266696e63666e647360c81b6044820152606401610879565b610d94338484611ee6565b6001600160a01b03851633148061187f575061187f8533610703565b6118dd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610879565b610b85858585858561204b565b6000546001600160a01b031633146119325760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b6001600160a01b0381166119975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610879565b6119a081611dc7565b50565b600080546001600160a01b031633146119ec5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b47821115611a265760405162461bcd60e51b8152602060048201526007602482015266696e73666e647360c81b6044820152606401610879565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611a5c573d6000803e3d6000fd5b5060019392505050565b6000546001600160a01b03163314611aae5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b6000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314611b115760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b8151835114611b955760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610879565b6001600160a01b038416611bf95760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610879565b3360005b8451811015611d26576000858281518110611c1a57611c1a61307b565b602002602001015190506000858381518110611c3857611c3861307b565b60209081029190910181015160008481526004835260408082206001600160a01b038e168352909352919091205490915081811015611ccc5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610879565b60008381526004602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611d0b9084906130c2565b9250508190555050505080611d1f906130a7565b9050611bfd565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d769291906130f9565b60405180910390a4611d8c8187878787876121f6565b505050505050565b611d9f8383836123ab565b60008281526007602052604081208054839290611dbd908490613127565b9091555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611e2384848484612529565b60008381526007602052604081208054849290611e419084906130c2565b909155505050505050565b600080611e5c878787873361262c565b90506000611eb7826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6002549091506001600160a01b0316611ed08286612668565b6001600160a01b03161498975050505050505050565b6009546001600160a01b0384166000908152600a6020526040902054611f0d9083906130c2565b1115611f455760405162461bcd60e51b81526020600482015260076024820152660dad2dce8dac2f60cb1b6044820152606401610879565b60008281526008602052604090206002810154600190910154611f699083906130c2565b1115611fa05760405162461bcd60e51b815260206004820152600660248201526534ba36bab73b60d11b6044820152606401610879565b600082815260086020526040902060030154611fbc84846107ff565b611fc690836130c2565b1115611ffd5760405162461bcd60e51b81526020600482015260066024820152650d2e8dadac2f60d31b6044820152606401610879565b6001600160a01b0383166000908152600a6020526040812080548392906120259084906130c2565b9091555050600082815260086020526040812060010180548392906116c39084906130c2565b6001600160a01b0384166120af5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610879565b336120c88187876120bf886126e7565b610b85886126e7565b60008481526004602090815260408083206001600160a01b038a1684529091529020548381101561214e5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610879565b60008581526004602090815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061218d9084906130c2565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46121ed828888888888612732565b50505050505050565b6001600160a01b0384163b15611d8c5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061223a908990899088908890889060040161313e565b602060405180830381600087803b15801561225457600080fd5b505af1925050508015612284575060408051601f3d908101601f191682019092526122819181019061319c565b60015b61233a576122906131b9565b806308c379a014156122ca57506122a56131d4565b806122b057506122cc565b8060405162461bcd60e51b81526004016108799190612b4e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610879565b6001600160e01b0319811663bc197c8160e01b146121ed5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610879565b6001600160a01b03831661240d5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610879565b3361243d8185600061241e876126e7565b612427876126e7565b5050604080516020810190915260009052505050565b60008381526004602090815260408083206001600160a01b0388168452909152902054828110156124bc5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610879565b60008481526004602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b0384166125895760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610879565b3361259a816000876120bf886126e7565b60008481526004602090815260408083206001600160a01b0389168452909152812080548592906125cc9084906130c2565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610b8581600087878787612732565b6000858585858560405160200161264795949392919061325e565b60405160208183030381529060405280519060200120905095945050505050565b6000806000806126778561283d565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156126d2573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106127215761272161307b565b602090810291909101015292915050565b6001600160a01b0384163b15611d8c5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061277690899089908890889088906004016132b2565b602060405180830381600087803b15801561279057600080fd5b505af19250505080156127c0575060408051601f3d908101601f191682019092526127bd9181019061319c565b60015b6127cc576122906131b9565b6001600160e01b0319811663f23a6e6160e01b146121ed5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610879565b6000806000835160411461287e5760405162461bcd60e51b81526020600482015260086024820152670e6d2ced8dccee8d60c31b6044820152606401610879565b50505060208101516040820151606090920151909260009190911a90565b8280546128a890613040565b90600052602060002090601f0160209004810192826128ca5760008555612910565b82601f106128e357805160ff1916838001178555612910565b82800160010185558215612910579182015b828111156129105782518255916020019190600101906128f5565b5061291c929150612920565b5090565b5b8082111561291c5760008155600101612921565b6001600160a01b03811681146119a057600080fd5b6000806040838503121561295d57600080fd5b823561296881612935565b946020939093013593505050565b6001600160e01b0319811681146119a057600080fd5b60006020828403121561299e57600080fd5b81356129a981612976565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156129ec576129ec6129b0565b6040525050565b600067ffffffffffffffff831115612a0d57612a0d6129b0565b604051612a24601f8501601f1916602001826129c6565b809150838152848484011115612a3957600080fd5b83836020830137600060208583010152509392505050565b600060208284031215612a6357600080fd5b813567ffffffffffffffff811115612a7a57600080fd5b8201601f81018413612a8b57600080fd5b612a9a848235602084016129f3565b949350505050565b600080600080600060a08688031215612aba57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208284031215612aef57600080fd5b5035919050565b60005b83811015612b11578181015183820152602001612af9565b838111156115105750506000910152565b60008151808452612b3a816020860160208601612af6565b601f01601f19169290920160200192915050565b6020815260006129a96020830184612b22565b600067ffffffffffffffff821115612b7b57612b7b6129b0565b5060051b60200190565b600082601f830112612b9657600080fd5b81356020612ba382612b61565b604051612bb082826129c6565b83815260059390931b8501820192828101915086841115612bd057600080fd5b8286015b84811015612beb5780358352918301918301612bd4565b509695505050505050565b600082601f830112612c0757600080fd5b6129a9838335602085016129f3565b600080600080600060a08688031215612c2e57600080fd5b8535612c3981612935565b94506020860135612c4981612935565b9350604086013567ffffffffffffffff80821115612c6657600080fd5b612c7289838a01612b85565b94506060880135915080821115612c8857600080fd5b612c9489838a01612b85565b93506080880135915080821115612caa57600080fd5b50612cb788828901612bf6565b9150509295509295909350565b600060208284031215612cd657600080fd5b81356129a981612935565b60008060408385031215612cf457600080fd5b823567ffffffffffffffff80821115612d0c57600080fd5b818501915085601f830112612d2057600080fd5b81356020612d2d82612b61565b604051612d3a82826129c6565b83815260059390931b8501820192828101915089841115612d5a57600080fd5b948201945b83861015612d81578535612d7281612935565b82529482019490820190612d5f565b96505086013592505080821115612d9757600080fd5b50612da485828601612b85565b9150509250929050565b600081518084526020808501945080840160005b83811015612dde57815187529582019590820190600101612dc2565b509495945050505050565b6020815260006129a96020830184612dae565b600080600060608486031215612e1157600080fd5b8335612e1c81612935565b95602085013595506040909401359392505050565b600080600060608486031215612e4657600080fd5b8335612e5181612935565b9250602084013567ffffffffffffffff80821115612e6e57600080fd5b612e7a87838801612b85565b93506040860135915080821115612e9057600080fd5b50612e9d86828701612b85565b9150509250925092565b600080600060608486031215612ebc57600080fd5b833567ffffffffffffffff80821115612ed457600080fd5b612ee087838801612b85565b94506020860135915080821115612ef657600080fd5b612f0287838801612b85565b93506040860135915080821115612f1857600080fd5b50612e9d86828701612bf6565b60008060408385031215612f3857600080fd5b8235612f4381612935565b915060208301358015158114612f5857600080fd5b809150509250929050565b60008060408385031215612f7657600080fd5b8235612f8181612935565b91506020830135612f5881612935565b600080600060608486031215612fa657600080fd5b8335925060208401359150604084013567ffffffffffffffff811115612fcb57600080fd5b612e9d86828701612bf6565b600080600080600060a08688031215612fef57600080fd5b8535612ffa81612935565b9450602086013561300a81612935565b93506040860135925060608601359150608086013567ffffffffffffffff81111561303457600080fd5b612cb788828901612bf6565b600181811c9082168061305457607f821691505b6020821081141561307557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156130bb576130bb613091565b5060010190565b600082198211156130d5576130d5613091565b500190565b60008160001904831182151516156130f4576130f4613091565b500290565b60408152600061310c6040830185612dae565b828103602084015261311e8185612dae565b95945050505050565b60008282101561313957613139613091565b500390565b60006001600160a01b03808816835280871660208401525060a0604083015261316a60a0830186612dae565b828103606084015261317c8186612dae565b905082810360808401526131908185612b22565b98975050505050505050565b6000602082840312156131ae57600080fd5b81516129a981612976565b600060033d1115610bd85760046000803e5060005160e01c90565b600060443d10156131e25790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561321257505050505090565b828501915081518181111561322a5750505050505090565b843d87010160208285010111156132445750505050505090565b613253602082860101876129c6565b509095945050505050565b60008651613270818460208b01612af6565b865190830190613284818360208b01612af6565b019485525050602083019190915260601b6bffffffffffffffffffffffff1916604082015260540192915050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526132ea60a0830184612b22565b97965050505050505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220cc62616be8cc62c1c323c01696e599a3d18b99082c97af9188a7e54838d54fc564736f6c6343000809003368747470733a2f2f73746f726167652e686173686b752e636f6d2f736f74682f636162696e65742f7b69647d2e6a736f6e68747470733a2f2f73746f726167652e686173686b752e636f6d2f6170692f736f74682f636162696e65742f7b69647d2e6a736f6e

Deployed Bytecode

0x6080604052600436106102845760003560e01c80639b35ac8611610153578063e7228e61116100cb578063f2fde38b1161007f578063f4d72cab11610064578063f4d72cab146107a4578063f5298aca146107c4578063f75451f8146107df57600080fd5b8063f2fde38b14610764578063f3fef3a31461078457600080fd5b8063e985e9c5116100b0578063e985e9c5146106e8578063eff4a46914610731578063f242432a1461074457600080fd5b8063e7228e61146106a8578063e8c61831146106c857600080fd5b8063a5cd19da11610122578063bd85b03911610107578063bd85b039146105e9578063bfb231d214610616578063c97b97301461068857600080fd5b8063a5cd19da146105bd578063ba0a5561146105d357600080fd5b80639b35ac861461053a5780639d3545161461054d578063a22cb4651461057d578063a5b59c6b1461059d57600080fd5b80634496a453116102015780636d08557a116101b55780638da5cb5b1161019a5780638da5cb5b146104dc5780639149fe40146104fa57806398c0c7d91461051a57600080fd5b80636d08557a1461048f578063715018a6146104c757600080fd5b806359e874ef116101e657806359e874ef1461042f5780636b20c4541461044f5780636c19e7831461046f57600080fd5b80634496a453146103d25780634e1273f41461040257600080fd5b80630e89341c116102585780632eb2c2d61161023d5780632eb2c2d61461037057806338e21cce14610390578063429a1bb0146103bd57600080fd5b80630e89341c1461032e57806329e7ef2d1461035b57600080fd5b8062fdd58e1461028957806301ffc9a7146102bc57806302fe5305146102ec5780630ba6f8a51461030e575b600080fd5b34801561029557600080fd5b506102a96102a436600461294a565b6107ff565b6040519081526020015b60405180910390f35b3480156102c857600080fd5b506102dc6102d736600461298c565b6108aa565b60405190151581526020016102b3565b3480156102f857600080fd5b5061030c610307366004612a51565b6108fc565b005b34801561031a57600080fd5b5061030c610329366004612aa2565b61095b565b34801561033a57600080fd5b5061034e610349366004612add565b6109c8565b6040516102b39190612b4e565b34801561036757600080fd5b5061034e610a5c565b34801561037c57600080fd5b5061030c61038b366004612c16565b610aea565b34801561039c57600080fd5b506102a96103ab366004612cc4565b600a6020526000908152604090205481565b3480156103c957600080fd5b506102a9610b8c565b3480156103de57600080fd5b506102dc6103ed366004612add565b600d6020526000908152604090205460ff1681565b34801561040e57600080fd5b5061042261041d366004612ce1565b610bdb565b6040516102b39190612de9565b34801561043b57600080fd5b5061030c61044a366004612dfc565b610d05565b34801561045b57600080fd5b5061030c61046a366004612e31565b610d99565b34801561047b57600080fd5b5061030c61048a366004612cc4565b610de1565b34801561049b57600080fd5b506003546104af906001600160a01b031681565b6040516001600160a01b0390911681526020016102b3565b3480156104d357600080fd5b5061030c610e4b565b3480156104e857600080fd5b506000546001600160a01b03166104af565b34801561050657600080fd5b5061030c61051536600461294a565b610e9f565b34801561052657600080fd5b5061030c610535366004612add565b610f77565b61030c610548366004612ea7565b610fc4565b34801561055957600080fd5b506102a9610568366004612add565b60009081526008602052604090206004015490565b34801561058957600080fd5b5061030c610598366004612f25565b6112bc565b3480156105a957600080fd5b5061030c6105b8366004612e31565b611393565b3480156105c957600080fd5b506102a9600c5481565b3480156105df57600080fd5b506102a960095481565b3480156105f557600080fd5b506102a9610604366004612add565b60009081526007602052604090205490565b34801561062257600080fd5b50610660610631366004612add565b600860205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a0016102b3565b34801561069457600080fd5b5061030c6106a3366004612a51565b611516565b3480156106b457600080fd5b5061030c6106c3366004612dfc565b6115ac565b3480156106d457600080fd5b506002546104af906001600160a01b031681565b3480156106f457600080fd5b506102dc610703366004612f63565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61030c61073f366004612f91565b6116e5565b34801561075057600080fd5b5061030c61075f366004612fd7565b611863565b34801561077057600080fd5b5061030c61077f366004612cc4565b6118ea565b34801561079057600080fd5b506102dc61079f36600461294a565b6119a3565b3480156107b057600080fd5b5061030c6107bf366004612add565b611a66565b3480156107d057600080fd5b5061030c61046a366004612dfc565b3480156107eb57600080fd5b5061030c6107fa366004612cc4565b611ac9565b60006001600160a01b0383166108825760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526004602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806108db57506001600160e01b031982166303a24d0760e21b145b806108f657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146109445760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b805161095790600b90602084019061289c565b5050565b6000546001600160a01b031633146109a35760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b6000948552600860205260409094209283556002830191909155600382015560040155565b6060600b80546109d790613040565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0390613040565b8015610a505780601f10610a2557610100808354040283529160200191610a50565b820191906000526020600020905b815481529060010190602001808311610a3357829003601f168201915b50505050509050919050565b60018054610a6990613040565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9590613040565b8015610ae25780601f10610ab757610100808354040283529160200191610ae2565b820191906000526020600020905b815481529060010190602001808311610ac557829003601f168201915b505050505081565b6001600160a01b038516331480610b065750610b068533610703565b610b785760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610879565b610b858585858585611b33565b5050505050565b600080546001600160a01b03163314610bd55760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b50475b90565b60608151835114610c405760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610879565b6000835167ffffffffffffffff811115610c5c57610c5c6129b0565b604051908082528060200260200182016040528015610c85578160200160208202803683370190505b50905060005b8451811015610cfd57610cd0858281518110610ca957610ca961307b565b6020026020010151858381518110610cc357610cc361307b565b60200260200101516107ff565b828281518110610ce257610ce261307b565b6020908102919091010152610cf6816130a7565b9050610c8b565b509392505050565b6003546001600160a01b0316610d455760405162461bcd60e51b81526020600482015260056024820152641b9bd95e1d60da1b6044820152606401610879565b6003546001600160a01b03163314610d895760405162461bcd60e51b81526020600482015260076024820152661a5b9d9858d8dd60ca1b6044820152606401610879565b610d94838383611d94565b505050565b6000546001600160a01b03163314610d945760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b6000546001600160a01b03163314610e295760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e935760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b610e9d6000611dc7565b565b6003546001600160a01b0316610edf5760405162461bcd60e51b81526020600482015260056024820152641b9bd95e1d60da1b6044820152606401610879565b6003546001600160a01b03163314610f235760405162461bcd60e51b81526020600482015260076024820152661a5b9d9858d8dd60ca1b6044820152606401610879565b60005b81811015610d9457610f4c83600c54600160405180602001604052806000815250611e17565b6001600c6000828254610f5f91906130c2565b90915550819050610f6f816130a7565b915050610f26565b6000546001600160a01b03163314610fbf5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b600955565b6110ab60405180604001604052806004815260200163053484f560e41b81525060018054610ff190613040565b80601f016020809104026020016040519081016040528092919081815260200182805461101d90613040565b801561106a5780601f1061103f5761010080835404028352916020019161106a565b820191906000526020600020905b81548152906001019060200180831161104d57829003601f168201915b5050505050856000815181106110825761108261307b565b60200260200101518560008151811061109d5761109d61307b565b602002602001015185611e4c565b6110e05760405162461bcd60e51b8152602060048201526006602482015265696e7673696760d01b6044820152606401610879565b815183511461111b5760405162461bcd60e51b815260206004820152600760248201526669647174796d6d60c81b6044820152606401610879565b60068351106111565760405162461bcd60e51b81526020600482015260076024820152666d617869746d7360c81b6044820152606401610879565b6000805b84518110156112275760058582815181106111775761117761307b565b6020026020010151106111b55760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b8381815181106111c7576111c761307b565b6020026020010151600860008784815181106111e5576111e561307b565b602002602001015181526020019081526020016000206000015461120991906130da565b61121390836130c2565b91508061121f816130a7565b91505061115a565b503481146112615760405162461bcd60e51b8152602060048201526007602482015266696e63666e647360c81b6044820152606401610879565b60005b8451811015610b85576112aa338683815181106112835761128361307b565b602002602001015186848151811061129d5761129d61307b565b6020026020010151611ee6565b806112b4816130a7565b915050611264565b336001600160a01b03831614156113275760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610879565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b031633146113db5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b80518251146114165760405162461bcd60e51b815260206004820152600760248201526669647174796d6d60c81b6044820152606401610879565b60068251106114515760405162461bcd60e51b81526020600482015260076024820152666d617869746d7360c81b6044820152606401610879565b60005b82518110156114c15760058382815181106114715761147161307b565b6020026020010151106114af5760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b806114b9816130a7565b915050611454565b5060005b8251811015611510576114fe848483815181106114e4576114e461307b565b602002602001015184848151811061129d5761129d61307b565b80611508816130a7565b9150506114c5565b50505050565b6000546001600160a01b0316331461155e5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b805161157190600190602084019061289c565b507fea182549f0872ecdb7bddda126cd6d8af729a106a97fcb1033bbde69da19d54e816040516115a19190612b4e565b60405180910390a150565b6003546001600160a01b03166115ec5760405162461bcd60e51b81526020600482015260056024820152641b9bd95e1d60da1b6044820152606401610879565b6003546001600160a01b031633146116305760405162461bcd60e51b81526020600482015260076024820152661a5b9d9858d8dd60ca1b6044820152606401610879565b600482116116695760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b600782106116a25760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b600082815260086020526040812060010180548392906116c39084906130c2565b92505081905550610d9483838360405180602001604052806000815250611e17565b61179860405180604001604052806004815260200163053484f560e41b8152506001805461171290613040565b80601f016020809104026020016040519081016040528092919081815260200182805461173e90613040565b801561178b5780601f106117605761010080835404028352916020019161178b565b820191906000526020600020905b81548152906001019060200180831161176e57829003601f168201915b5050505050858585611e4c565b6117cd5760405162461bcd60e51b8152602060048201526006602482015265696e7673696760d01b6044820152606401610879565b600583106118065760405162461bcd60e51b8152602060048201526006602482015265696e7669746d60d01b6044820152606401610879565b600083815260086020526040902054349061182190846130da565b146118585760405162461bcd60e51b8152602060048201526007602482015266696e63666e647360c81b6044820152606401610879565b610d94338484611ee6565b6001600160a01b03851633148061187f575061187f8533610703565b6118dd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610879565b610b85858585858561204b565b6000546001600160a01b031633146119325760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b6001600160a01b0381166119975760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610879565b6119a081611dc7565b50565b600080546001600160a01b031633146119ec5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b47821115611a265760405162461bcd60e51b8152602060048201526007602482015266696e73666e647360c81b6044820152606401610879565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015611a5c573d6000803e3d6000fd5b5060019392505050565b6000546001600160a01b03163314611aae5760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b6000908152600d60205260409020805460ff19166001179055565b6000546001600160a01b03163314611b115760405162461bcd60e51b815260206004820181905260248201526000805160206132f68339815191526044820152606401610879565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b8151835114611b955760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610879565b6001600160a01b038416611bf95760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610879565b3360005b8451811015611d26576000858281518110611c1a57611c1a61307b565b602002602001015190506000858381518110611c3857611c3861307b565b60209081029190910181015160008481526004835260408082206001600160a01b038e168352909352919091205490915081811015611ccc5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610879565b60008381526004602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611d0b9084906130c2565b9250508190555050505080611d1f906130a7565b9050611bfd565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d769291906130f9565b60405180910390a4611d8c8187878787876121f6565b505050505050565b611d9f8383836123ab565b60008281526007602052604081208054839290611dbd908490613127565b9091555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611e2384848484612529565b60008381526007602052604081208054849290611e419084906130c2565b909155505050505050565b600080611e5c878787873361262c565b90506000611eb7826040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6002549091506001600160a01b0316611ed08286612668565b6001600160a01b03161498975050505050505050565b6009546001600160a01b0384166000908152600a6020526040902054611f0d9083906130c2565b1115611f455760405162461bcd60e51b81526020600482015260076024820152660dad2dce8dac2f60cb1b6044820152606401610879565b60008281526008602052604090206002810154600190910154611f699083906130c2565b1115611fa05760405162461bcd60e51b815260206004820152600660248201526534ba36bab73b60d11b6044820152606401610879565b600082815260086020526040902060030154611fbc84846107ff565b611fc690836130c2565b1115611ffd5760405162461bcd60e51b81526020600482015260066024820152650d2e8dadac2f60d31b6044820152606401610879565b6001600160a01b0383166000908152600a6020526040812080548392906120259084906130c2565b9091555050600082815260086020526040812060010180548392906116c39084906130c2565b6001600160a01b0384166120af5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610879565b336120c88187876120bf886126e7565b610b85886126e7565b60008481526004602090815260408083206001600160a01b038a1684529091529020548381101561214e5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610879565b60008581526004602090815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061218d9084906130c2565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46121ed828888888888612732565b50505050505050565b6001600160a01b0384163b15611d8c5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061223a908990899088908890889060040161313e565b602060405180830381600087803b15801561225457600080fd5b505af1925050508015612284575060408051601f3d908101601f191682019092526122819181019061319c565b60015b61233a576122906131b9565b806308c379a014156122ca57506122a56131d4565b806122b057506122cc565b8060405162461bcd60e51b81526004016108799190612b4e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610879565b6001600160e01b0319811663bc197c8160e01b146121ed5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610879565b6001600160a01b03831661240d5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610879565b3361243d8185600061241e876126e7565b612427876126e7565b5050604080516020810190915260009052505050565b60008381526004602090815260408083206001600160a01b0388168452909152902054828110156124bc5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610879565b60008481526004602090815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b0384166125895760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610879565b3361259a816000876120bf886126e7565b60008481526004602090815260408083206001600160a01b0389168452909152812080548592906125cc9084906130c2565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610b8581600087878787612732565b6000858585858560405160200161264795949392919061325e565b60405160208183030381529060405280519060200120905095945050505050565b6000806000806126778561283d565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa1580156126d2573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106127215761272161307b565b602090810291909101015292915050565b6001600160a01b0384163b15611d8c5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061277690899089908890889088906004016132b2565b602060405180830381600087803b15801561279057600080fd5b505af19250505080156127c0575060408051601f3d908101601f191682019092526127bd9181019061319c565b60015b6127cc576122906131b9565b6001600160e01b0319811663f23a6e6160e01b146121ed5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610879565b6000806000835160411461287e5760405162461bcd60e51b81526020600482015260086024820152670e6d2ced8dccee8d60c31b6044820152606401610879565b50505060208101516040820151606090920151909260009190911a90565b8280546128a890613040565b90600052602060002090601f0160209004810192826128ca5760008555612910565b82601f106128e357805160ff1916838001178555612910565b82800160010185558215612910579182015b828111156129105782518255916020019190600101906128f5565b5061291c929150612920565b5090565b5b8082111561291c5760008155600101612921565b6001600160a01b03811681146119a057600080fd5b6000806040838503121561295d57600080fd5b823561296881612935565b946020939093013593505050565b6001600160e01b0319811681146119a057600080fd5b60006020828403121561299e57600080fd5b81356129a981612976565b9392505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156129ec576129ec6129b0565b6040525050565b600067ffffffffffffffff831115612a0d57612a0d6129b0565b604051612a24601f8501601f1916602001826129c6565b809150838152848484011115612a3957600080fd5b83836020830137600060208583010152509392505050565b600060208284031215612a6357600080fd5b813567ffffffffffffffff811115612a7a57600080fd5b8201601f81018413612a8b57600080fd5b612a9a848235602084016129f3565b949350505050565b600080600080600060a08688031215612aba57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208284031215612aef57600080fd5b5035919050565b60005b83811015612b11578181015183820152602001612af9565b838111156115105750506000910152565b60008151808452612b3a816020860160208601612af6565b601f01601f19169290920160200192915050565b6020815260006129a96020830184612b22565b600067ffffffffffffffff821115612b7b57612b7b6129b0565b5060051b60200190565b600082601f830112612b9657600080fd5b81356020612ba382612b61565b604051612bb082826129c6565b83815260059390931b8501820192828101915086841115612bd057600080fd5b8286015b84811015612beb5780358352918301918301612bd4565b509695505050505050565b600082601f830112612c0757600080fd5b6129a9838335602085016129f3565b600080600080600060a08688031215612c2e57600080fd5b8535612c3981612935565b94506020860135612c4981612935565b9350604086013567ffffffffffffffff80821115612c6657600080fd5b612c7289838a01612b85565b94506060880135915080821115612c8857600080fd5b612c9489838a01612b85565b93506080880135915080821115612caa57600080fd5b50612cb788828901612bf6565b9150509295509295909350565b600060208284031215612cd657600080fd5b81356129a981612935565b60008060408385031215612cf457600080fd5b823567ffffffffffffffff80821115612d0c57600080fd5b818501915085601f830112612d2057600080fd5b81356020612d2d82612b61565b604051612d3a82826129c6565b83815260059390931b8501820192828101915089841115612d5a57600080fd5b948201945b83861015612d81578535612d7281612935565b82529482019490820190612d5f565b96505086013592505080821115612d9757600080fd5b50612da485828601612b85565b9150509250929050565b600081518084526020808501945080840160005b83811015612dde57815187529582019590820190600101612dc2565b509495945050505050565b6020815260006129a96020830184612dae565b600080600060608486031215612e1157600080fd5b8335612e1c81612935565b95602085013595506040909401359392505050565b600080600060608486031215612e4657600080fd5b8335612e5181612935565b9250602084013567ffffffffffffffff80821115612e6e57600080fd5b612e7a87838801612b85565b93506040860135915080821115612e9057600080fd5b50612e9d86828701612b85565b9150509250925092565b600080600060608486031215612ebc57600080fd5b833567ffffffffffffffff80821115612ed457600080fd5b612ee087838801612b85565b94506020860135915080821115612ef657600080fd5b612f0287838801612b85565b93506040860135915080821115612f1857600080fd5b50612e9d86828701612bf6565b60008060408385031215612f3857600080fd5b8235612f4381612935565b915060208301358015158114612f5857600080fd5b809150509250929050565b60008060408385031215612f7657600080fd5b8235612f8181612935565b91506020830135612f5881612935565b600080600060608486031215612fa657600080fd5b8335925060208401359150604084013567ffffffffffffffff811115612fcb57600080fd5b612e9d86828701612bf6565b600080600080600060a08688031215612fef57600080fd5b8535612ffa81612935565b9450602086013561300a81612935565b93506040860135925060608601359150608086013567ffffffffffffffff81111561303457600080fd5b612cb788828901612bf6565b600181811c9082168061305457607f821691505b6020821081141561307557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156130bb576130bb613091565b5060010190565b600082198211156130d5576130d5613091565b500190565b60008160001904831182151516156130f4576130f4613091565b500290565b60408152600061310c6040830185612dae565b828103602084015261311e8185612dae565b95945050505050565b60008282101561313957613139613091565b500390565b60006001600160a01b03808816835280871660208401525060a0604083015261316a60a0830186612dae565b828103606084015261317c8186612dae565b905082810360808401526131908185612b22565b98975050505050505050565b6000602082840312156131ae57600080fd5b81516129a981612976565b600060033d1115610bd85760046000803e5060005160e01c90565b600060443d10156131e25790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561321257505050505090565b828501915081518181111561322a5750505050505090565b843d87010160208285010111156132445750505050505090565b613253602082860101876129c6565b509095945050505050565b60008651613270818460208b01612af6565b865190830190613284818360208b01612af6565b019485525050602083019190915260601b6bffffffffffffffffffffffff1916604082015260540192915050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a060808301526132ea60a0830184612b22565b97965050505050505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220cc62616be8cc62c1c323c01696e599a3d18b99082c97af9188a7e54838d54fc564736f6c63430008090033

Deployed Bytecode Sourcemap

544:7164:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2054:228:3;;;;;;;;;;-1:-1:-1;2054:228:3;;;;;:::i;:::-;;:::i;:::-;;;639:25:16;;;627:2;612:18;2054:228:3;;;;;;;;1105:305;;;;;;;;;;-1:-1:-1;1105:305:3;;;;;:::i;:::-;;:::i;:::-;;;1226:14:16;;1219:22;1201:41;;1189:2;1174:18;1105:305:3;1061:187:16;3904:93:1;;;;;;;;;;-1:-1:-1;3904:93:1;;;;;:::i;:::-;;:::i;:::-;;3431:356;;;;;;;;;;-1:-1:-1;3431:356:1;;;;;:::i;:::-;;:::i;3793:101::-;;;;;;;;;;-1:-1:-1;3793:101:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;303:28:8:-;;;;;;;;;;;;;:::i;4082:430:3:-;;;;;;;;;;-1:-1:-1;4082:430:3;;;;;:::i;:::-;;:::i;1084:41:1:-;;;;;;;;;;-1:-1:-1;1084:41:1;;;;;:::i;:::-;;;;;;;;;;;;;;240:104:15;;;;;;;;;;;;;:::i;1556:44:1:-;;;;;;;;;;-1:-1:-1;1556:44:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;2439:508:3;;;;;;;;;;-1:-1:-1;2439:508:3;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7033:129:1:-;;;;;;;;;;-1:-1:-1;7033:129:1;;;;;:::i;:::-;;:::i;7554:152::-;;;;;;;;;;-1:-1:-1;7554:152:1;;;;;:::i;:::-;;:::i;449:98:14:-;;;;;;;;;;-1:-1:-1;449:98:14;;;;;:::i;:::-;;:::i;342:30:7:-;;;;;;;;;;-1:-1:-1;342:30:7;;;;-1:-1:-1;;;;;342:30:7;;;;;;-1:-1:-1;;;;;9710:55:16;;;9692:74;;9680:2;9665:18;342:30:7;9546:226:16;1598:92:13;;;;;;;;;;;;;:::i;966:85::-;;;;;;;;;;-1:-1:-1;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;966:85;;6730:234:1;;;;;;;;;;-1:-1:-1;6730:234:1;;;;;:::i;:::-;;:::i;3097:104::-;;;;;;;;;;-1:-1:-1;3097:104:1;;;;;:::i;:::-;;:::i;4519:748::-;;;;;;:::i;:::-;;:::i;7284:131::-;;;;;;;;;;-1:-1:-1;7284:131:1;;;;;:::i;:::-;7354:7;7380:10;;;:5;:10;;;;;:28;;;;7284:131;3015:306:3;;;;;;;;;;-1:-1:-1;3015:306:3;;;;;:::i;:::-;;:::i;5896:429:1:-;;;;;;;;;;-1:-1:-1;5896:429:1;;;;;:::i;:::-;;:::i;1511:38::-;;;;;;;;;;;;;;;;1041:37;;;;;;;;;;;;;;;;2481:103;;;;;;;;;;-1:-1:-1;2481:103:1;;;;;:::i;:::-;2535:7;2561:16;;;:12;:16;;;;;;;2481:103;942:44;;;;;;;;;;-1:-1:-1;942:44:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11255:25:16;;;11311:2;11296:18;;11289:34;;;;11339:18;;;11332:34;;;;11397:2;11382:18;;11375:34;11440:3;11425:19;;11418:35;11242:3;11227:19;942:44:1;10996:463:16;378:117:8;;;;;;;;;;-1:-1:-1;378:117:8;;;;;:::i;:::-;;:::i;6415:246:1:-;;;;;;;;;;-1:-1:-1;6415:246:1;;;;;:::i;:::-;;:::i;353:27:14:-;;;;;;;;;;-1:-1:-1;353:27:14;;;;-1:-1:-1;;;;;353:27:14;;;3388:166:3;;;;;;;;;;-1:-1:-1;3388:166:3;;;;;:::i;:::-;-1:-1:-1;;;;;3510:27:3;;;3487:4;3510:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;3388:166;4076:376:1;;;;;;:::i;:::-;;:::i;3621:389:3:-;;;;;;;;;;-1:-1:-1;3621:389:3;;;;;:::i;:::-;;:::i;1839:189:13:-;;;;;;;;;;-1:-1:-1;1839:189:13;;;;;:::i;:::-;;:::i;350:206:15:-;;;;;;;;;;-1:-1:-1;350:206:15;;;;;:::i;:::-;;:::i;3273:95:1:-;;;;;;;;;;-1:-1:-1;3273:95:1;;;;;:::i;:::-;;:::i;7421:127::-;;;;;;;;;;-1:-1:-1;7421:127:1;;;;;:::i;379:100:7:-;;;;;;;;;;-1:-1:-1;379:100:7;;;;;:::i;:::-;;:::i;2054:228:3:-;2140:7;-1:-1:-1;;;;;2167:21:3;;2159:77;;;;-1:-1:-1;;;2159:77:3;;13587:2:16;2159:77:3;;;13569:21:16;13626:2;13606:18;;;13599:30;13665:34;13645:18;;;13638:62;13736:13;13716:18;;;13709:41;13767:19;;2159:77:3;;;;;;;;;-1:-1:-1;2253:13:3;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;2253:22:3;;;;;;;;;;;;2054:228::o;1105:305::-;1207:4;-1:-1:-1;;;;;;1242:41:3;;-1:-1:-1;;;1242:41:3;;:109;;-1:-1:-1;;;;;;;1299:52:3;;-1:-1:-1;;;1299:52:3;1242:109;:161;;;-1:-1:-1;;;;;;;;;;871:40:6;;;1367:36:3;1223:180;1105:305;-1:-1:-1;;1105:305:3:o;3904:93:1:-;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;3970:20:1;;::::1;::::0;:10:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;;3904:93:::0;:::o;3431:356::-;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;3586:10:1::1;::::0;;;:5:::1;:10;::::0;;;;;:25;;;3621:24:::1;::::0;::::1;:41:::0;;;;3672:28:::1;::::0;::::1;:49:::0;3731:28:::1;;:49:::0;3431:356::o;3793:101::-;3845:13;3877:10;3870:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3793:101;;;:::o;303:28:8:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4082:430:3:-;-1:-1:-1;;;;;4307:20:3;;666:10:2;4307:20:3;;:60;;-1:-1:-1;4331:36:3;4348:4;666:10:2;3388:166:3;:::i;4331:36::-;4286:157;;;;-1:-1:-1;;;4286:157:3;;14745:2:16;4286:157:3;;;14727:21:16;14784:2;14764:18;;;14757:30;14823:34;14803:18;;;14796:62;14894:20;14874:18;;;14867:48;14932:19;;4286:157:3;14543:414:16;4286:157:3;4453:52;4476:4;4482:2;4486:3;4491:7;4500:4;4453:22;:52::i;:::-;4082:430;;;;;:::o;240:104:15:-;292:4;1038:6:13;;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;-1:-1:-1;316:21:15::1;1248:1:13;240:104:15::0;:::o;2439:508:3:-;2590:16;2649:3;:10;2630:8;:15;:29;2622:83;;;;-1:-1:-1;;;2622:83:3;;15164:2:16;2622:83:3;;;15146:21:16;15203:2;15183:18;;;15176:30;15242:34;15222:18;;;15215:62;-1:-1:-1;;;15293:18:16;;;15286:39;15342:19;;2622:83:3;14962:405:16;2622:83:3;2716:30;2763:8;:15;2749:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2749:30:3;;2716:63;;2795:9;2790:120;2814:8;:15;2810:1;:19;2790:120;;;2869:30;2879:8;2888:1;2879:11;;;;;;;;:::i;:::-;;;;;;;2892:3;2896:1;2892:6;;;;;;;;:::i;:::-;;;;;;;2869:9;:30::i;:::-;2850:13;2864:1;2850:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;2831:3;;;:::i;:::-;;;2790:120;;;-1:-1:-1;2927:13:3;2439:508;-1:-1:-1;;;2439:508:3:o;7033:129:1:-;534:15:7;;-1:-1:-1;;;;;534:15:7;526:47;;;;-1:-1:-1;;;526:47:7;;15978:2:16;526:47:7;;;15960:21:16;16017:1;15997:18;;;15990:29;-1:-1:-1;;;16035:18:16;;;16028:35;16080:18;;526:47:7;15776:328:16;526:47:7;605:15;;-1:-1:-1;;;;;605:15:7;591:10;:29;583:49;;;;-1:-1:-1;;;583:49:7;;16311:2:16;583:49:7;;;16293:21:16;16350:1;16330:18;;;16323:29;-1:-1:-1;;;16368:18:16;;;16361:37;16415:18;;583:49:7;16109:330:16;583:49:7;7134:21:1::1;7140:3;7145;7150:4;7134:5;:21::i;:::-;7033:129:::0;;;:::o;7554:152::-;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;449:98:14;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;515:12:14::1;:25:::0;;-1:-1:-1;;;;;;515:25:14::1;-1:-1:-1::0;;;;;515:25:14;;;::::1;::::0;;;::::1;::::0;;449:98::o;1598:92:13:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;1662:21:::1;1680:1;1662:9;:21::i;:::-;1598:92::o:0;6730:234:1:-;534:15:7;;-1:-1:-1;;;;;534:15:7;526:47;;;;-1:-1:-1;;;526:47:7;;15978:2:16;526:47:7;;;15960:21:16;16017:1;15997:18;;;15990:29;-1:-1:-1;;;16035:18:16;;;16028:35;16080:18;;526:47:7;15776:328:16;526:47:7;605:15;;-1:-1:-1;;;;;605:15:7;591:10;:29;583:49;;;;-1:-1:-1;;;583:49:7;;16311:2:16;583:49:7;;;16293:21:16;16350:1;16330:18;;;16323:29;-1:-1:-1;;;16368:18:16;;;16361:37;16415:18;;583:49:7;16109:330:16;583:49:7;6826:10:1::1;6821:137;6847:4;6842:2;:9;6821:137;;;6873:37;6879:3;6884:18;;6904:1;6873:37;;;;;;;;;;;::::0;:5:::1;:37::i;:::-;6946:1;6924:18;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;6853:4:1;;-1:-1:-1;6853:4:1::1;::::0;::::1;:::i;:::-;;;;6821:137;;3097:104:::0;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;3169:18:1::1;:25:::0;3097:104::o;4519:748::-;4704:61;;;;;;;;;;;;;;-1:-1:-1;;;4704:61:1;;;4728:5;4704:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4735:4;4740:1;4735:7;;;;;;;;:::i;:::-;;;;;;;4744:5;4750:1;4744:8;;;;;;;;:::i;:::-;;;;;;;4754:10;4704:15;:61::i;:::-;4696:80;;;;-1:-1:-1;;;4696:80:1;;16779:2:16;4696:80:1;;;16761:21:16;16818:1;16798:18;;;16791:29;-1:-1:-1;;;16836:18:16;;;16829:36;16882:18;;4696:80:1;16577:329:16;4696:80:1;4809:5;:12;4794:4;:11;:27;4786:47;;;;-1:-1:-1;;;4786:47:1;;17113:2:16;4786:47:1;;;17095:21:16;17152:1;17132:18;;;17125:29;-1:-1:-1;;;17170:18:16;;;17163:37;17217:18;;4786:47:1;16911:330:16;4786:47:1;4865:1;4851:4;:11;:15;4843:35;;;;-1:-1:-1;;;4843:35:1;;17448:2:16;4843:35:1;;;17430:21:16;17487:1;17467:18;;;17460:29;-1:-1:-1;;;17505:18:16;;;17498:37;17552:18;;4843:35:1;17246:330:16;4843:35:1;4889:19;;4918:163;4944:4;:11;4939:2;:16;4918:163;;;4996:1;4985:4;4990:2;4985:8;;;;;;;;:::i;:::-;;;;;;;:12;4977:31;;;;-1:-1:-1;;;4977:31:1;;17783:2:16;4977:31:1;;;17765:21:16;17822:1;17802:18;;;17795:29;-1:-1:-1;;;17840:18:16;;;17833:36;17886:18;;4977:31:1;17581:329:16;4977:31:1;5061:5;5067:2;5061:9;;;;;;;;:::i;:::-;;;;;;;5037:5;:15;5043:4;5048:2;5043:8;;;;;;;;:::i;:::-;;;;;;;5037:15;;;;;;;;;;;:21;;;:33;;;;:::i;:::-;5022:48;;;;:::i;:::-;;-1:-1:-1;4957:4:1;;;;:::i;:::-;;;;4918:163;;;;5114:9;5099:11;:24;5091:44;;;;-1:-1:-1;;;5091:44:1;;18290:2:16;5091:44:1;;;18272:21:16;18329:1;18309:18;;;18302:29;-1:-1:-1;;;18347:18:16;;;18340:37;18394:18;;5091:44:1;18088:330:16;5091:44:1;5151:10;5146:115;5172:4;:11;5167:2;:16;5146:115;;;5205:45;5218:10;5230:4;5235:2;5230:8;;;;;;;;:::i;:::-;;;;;;;5240:5;5246:2;5240:9;;;;;;;;:::i;:::-;;;;;;;5205:12;:45::i;:::-;5185:4;;;;:::i;:::-;;;;5146:115;;3015:306:3;666:10:2;-1:-1:-1;;;;;3117:24:3;;;;3109:78;;;;-1:-1:-1;;;3109:78:3;;18625:2:16;3109:78:3;;;18607:21:16;18664:2;18644:18;;;18637:30;18703:34;18683:18;;;18676:62;-1:-1:-1;;;18754:18:16;;;18747:39;18803:19;;3109:78:3;18423:405:16;3109:78:3;666:10:2;3198:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;3198:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;3198:53:3;;;;;;;;;;3266:48;;1201:41:16;;;3198:42:3;;666:10:2;3266:48:3;;1174:18:16;3266:48:3;;;;;;;3015:306;;:::o;5896:429:1:-;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;6020:5:1::1;:12;6005:4;:11;:27;5997:47;;;::::0;-1:-1:-1;;;5997:47:1;;17113:2:16;5997:47:1::1;::::0;::::1;17095:21:16::0;17152:1;17132:18;;;17125:29;-1:-1:-1;;;17170:18:16;;;17163:37;17217:18;;5997:47:1::1;16911:330:16::0;5997:47:1::1;6076:1;6062:4;:11;:15;6054:35;;;::::0;-1:-1:-1;;;6054:35:1;;17448:2:16;6054:35:1::1;::::0;::::1;17430:21:16::0;17487:1;17467:18;;;17460:29;-1:-1:-1;;;17505:18:16;;;17498:37;17552:18;;6054:35:1::1;17246:330:16::0;6054:35:1::1;6105:10;6100:101;6126:4;:11;6121:2;:16;6100:101;;;6178:1;6167:4;6172:2;6167:8;;;;;;;;:::i;:::-;;;;;;;:12;6159:31;;;::::0;-1:-1:-1;;;6159:31:1;;17783:2:16;6159:31:1::1;::::0;::::1;17765:21:16::0;17822:1;17802:18;;;17795:29;-1:-1:-1;;;17840:18:16;;;17833:36;17886:18;;6159:31:1::1;17581:329:16::0;6159:31:1::1;6139:4:::0;::::1;::::0;::::1;:::i;:::-;;;;6100:101;;;;6216:10;6211:108;6237:4;:11;6232:2;:16;6211:108;;;6270:38;6283:3;6288:4;6293:2;6288:8;;;;;;;;:::i;:::-;;;;;;;6298:5;6304:2;6298:9;;;;;;;;:::i;6270:38::-;6250:4:::0;::::1;::::0;::::1;:::i;:::-;;;;6211:108;;;;5896:429:::0;;;:::o;378:117:8:-;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;443:12:8;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;;470:18;483:4;470:18;;;;;;:::i;:::-;;;;;;;;378:117:::0;:::o;6415:246:1:-;534:15:7;;-1:-1:-1;;;;;534:15:7;526:47;;;;-1:-1:-1;;;526:47:7;;15978:2:16;526:47:7;;;15960:21:16;16017:1;15997:18;;;15990:29;-1:-1:-1;;;16035:18:16;;;16028:35;16080:18;;526:47:7;15776:328:16;526:47:7;605:15;;-1:-1:-1;;;;;605:15:7;591:10;:29;583:49;;;;-1:-1:-1;;;583:49:7;;16311:2:16;583:49:7;;;16293:21:16;16350:1;16330:18;;;16323:29;-1:-1:-1;;;16368:18:16;;;16361:37;16415:18;;583:49:7;16109:330:16;583:49:7;6530:1:1::1;6524:3;:7;6516:26;;;::::0;-1:-1:-1;;;6516:26:1;;17783:2:16;6516:26:1::1;::::0;::::1;17765:21:16::0;17822:1;17802:18;;;17795:29;-1:-1:-1;;;17840:18:16;;;17833:36;17886:18;;6516:26:1::1;17581:329:16::0;6516:26:1::1;6566:1;6560:3;:7;6552:26;;;::::0;-1:-1:-1;;;6552:26:1;;17783:2:16;6552:26:1::1;::::0;::::1;17765:21:16::0;17822:1;17802:18;;;17795:29;-1:-1:-1;;;17840:18:16;;;17833:36;17886:18;;6552:26:1::1;17581:329:16::0;6552:26:1::1;6588:10;::::0;;;:5:::1;:10;::::0;;;;:23:::1;;:31:::0;;6615:4;;6588:10;:31:::1;::::0;6615:4;;6588:31:::1;:::i;:::-;;;;;;;;6629:25;6635:3;6640;6645:4;6629:25;;;;;;;;;;;::::0;:5:::1;:25::i;4076:376::-:0;4233:53;;;;;;;;;;;;;;-1:-1:-1;;;4233:53:1;;;4257:5;4233:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4264:3;4269:4;4275:10;4233:15;:53::i;:::-;4225:72;;;;-1:-1:-1;;;4225:72:1;;16779:2:16;4225:72:1;;;16761:21:16;16818:1;16798:18;;;16791:29;-1:-1:-1;;;16836:18:16;;;16829:36;16882:18;;4225:72:1;16577:329:16;4225:72:1;4321:1;4315:3;:7;4307:26;;;;-1:-1:-1;;;4307:26:1;;17783:2:16;4307:26:1;;;17765:21:16;17822:1;17802:18;;;17795:29;-1:-1:-1;;;17840:18:16;;;17833:36;17886:18;;4307:26:1;17581:329:16;4307:26:1;4358:10;;;;:5;:10;;;;;:16;4378:9;;4351:23;;:4;:23;:::i;:::-;:36;4343:56;;;;-1:-1:-1;;;4343:56:1;;18290:2:16;4343:56:1;;;18272:21:16;18329:1;18309:18;;;18302:29;-1:-1:-1;;;18347:18:16;;;18340:37;18394:18;;4343:56:1;18088:330:16;4343:56:1;4410:35;4423:10;4435:3;4440:4;4410:12;:35::i;3621:389:3:-;-1:-1:-1;;;;;3821:20:3;;666:10:2;3821:20:3;;:60;;-1:-1:-1;3845:36:3;3862:4;666:10:2;3388:166:3;:::i;3845:36::-;3800:148;;;;-1:-1:-1;;;3800:148:3;;19035:2:16;3800:148:3;;;19017:21:16;19074:2;19054:18;;;19047:30;19113:34;19093:18;;;19086:62;-1:-1:-1;;;19164:18:16;;;19157:39;19213:19;;3800:148:3;18833:405:16;3800:148:3;3958:45;3976:4;3982:2;3986;3990:6;3998:4;3958:17;:45::i;1839:189:13:-;1012:7;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;-1:-1:-1;;;;;1927:22:13;::::1;1919:73;;;::::0;-1:-1:-1;;;1919:73:13;;19445:2:16;1919:73:13::1;::::0;::::1;19427:21:16::0;19484:2;19464:18;;;19457:30;19523:34;19503:18;;;19496:62;-1:-1:-1;;;19574:18:16;;;19567:36;19620:19;;1919:73:13::1;19243:402:16::0;1919:73:13::1;2002:19;2012:8;2002:9;:19::i;:::-;1839:189:::0;:::o;350:206:15:-;428:4;1038:6:13;;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;464:21:15::1;453:7;:32;;445:52;;;::::0;-1:-1:-1;;;445:52:15;;19852:2:16;445:52:15::1;::::0;::::1;19834:21:16::0;19891:1;19871:18;;;19864:29;-1:-1:-1;;;19909:18:16;;;19902:37;19956:18;;445:52:15::1;19650:330:16::0;445:52:15::1;507:21;::::0;-1:-1:-1;;;;;507:12:15;::::1;::::0;:21;::::1;;;::::0;520:7;;507:21:::1;::::0;;;520:7;507:12;:21;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;545:4:15::1;::::0;350:206;-1:-1:-1;;;350:206:15:o;3273:95:1:-;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;3337:17:1::1;::::0;;;:12:::1;:17;::::0;;;;:24;;-1:-1:-1;;3337:24:1::1;3357:4;3337:24;::::0;;3273:95::o;379:100:7:-;1012:7:13;1038:6;-1:-1:-1;;;;;1038:6:13;666:10:2;1178:23:13;1170:68;;;;-1:-1:-1;;;1170:68:13;;13999:2:16;1170:68:13;;;13981:21:16;;;14018:18;;;14011:30;-1:-1:-1;;;;;;;;;;;14057:18:16;;;14050:62;14129:18;;1170:68:13;13797:356:16;1170:68:13;449:15:7::1;:23:::0;;-1:-1:-1;;;;;;449:23:7::1;-1:-1:-1::0;;;;;449:23:7;;;::::1;::::0;;;::::1;::::0;;379:100::o;6105:1045:3:-;6325:7;:14;6311:3;:10;:28;6303:81;;;;-1:-1:-1;;;6303:81:3;;20187:2:16;6303:81:3;;;20169:21:16;20226:2;20206:18;;;20199:30;20265:34;20245:18;;;20238:62;-1:-1:-1;;;20316:18:16;;;20309:38;20364:19;;6303:81:3;19985:404:16;6303:81:3;-1:-1:-1;;;;;6402:16:3;;6394:66;;;;-1:-1:-1;;;6394:66:3;;20596:2:16;6394:66:3;;;20578:21:16;20635:2;20615:18;;;20608:30;20674:34;20654:18;;;20647:62;-1:-1:-1;;;20725:18:16;;;20718:35;20770:19;;6394:66:3;20394:401:16;6394:66:3;666:10:2;6471:16:3;6584:411;6608:3;:10;6604:1;:14;6584:411;;;6639:10;6652:3;6656:1;6652:6;;;;;;;;:::i;:::-;;;;;;;6639:19;;6672:14;6689:7;6697:1;6689:10;;;;;;;;:::i;:::-;;;;;;;;;;;;6714:19;6736:13;;;:9;:13;;;;;;-1:-1:-1;;;;;6736:19:3;;;;;;;;;;;;6689:10;;-1:-1:-1;6777:21:3;;;;6769:76;;;;-1:-1:-1;;;6769:76:3;;21002:2:16;6769:76:3;;;20984:21:16;21041:2;21021:18;;;21014:30;21080:34;21060:18;;;21053:62;-1:-1:-1;;;21131:18:16;;;21124:40;21181:19;;6769:76:3;20800:406:16;6769:76:3;6887:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;6887:19:3;;;;;;;;;;6909:20;;;6887:42;;6957:17;;;;;;;:27;;6909:20;;6887:13;6957:27;;6909:20;;6957:27;:::i;:::-;;;;;;;;6625:370;;;6620:3;;;;:::i;:::-;;;6584:411;;;;7040:2;-1:-1:-1;;;;;7010:47:3;7034:4;-1:-1:-1;;;;;7010:47:3;7024:8;-1:-1:-1;;;;;7010:47:3;;7044:3;7049:7;7010:47;;;;;;;:::i;:::-;;;;;;;;7068:75;7104:8;7114:4;7120:2;7124:3;7129:7;7138:4;7068:35;:75::i;:::-;6293:857;6105:1045;;;;;:::o;2822:193:1:-;2940:32;2952:7;2961:2;2965:6;2940:11;:32::i;:::-;2982:16;;;;:12;:16;;;;;:26;;3002:6;;2982:16;:26;;3002:6;;2982:26;:::i;:::-;;;;-1:-1:-1;;;;;2822:193:1:o;2034:169:13:-;2089:16;2108:6;;-1:-1:-1;;;;;2124:17:13;;;-1:-1:-1;;;;;;2124:17:13;;;;;;2156:40;;2108:6;;;;;;;2156:40;;2089:16;2156:40;2079:124;2034:169;:::o;2590:226:1:-;2735:38;2747:7;2756:2;2760:6;2768:4;2735:11;:38::i;:::-;2783:16;;;;:12;:16;;;;;:26;;2803:6;;2783:16;:26;;2803:6;;2783:26;:::i;:::-;;;;-1:-1:-1;;;;;;2590:226:1:o;1808:487:14:-;2014:4;2030:20;2053:76;2068:11;2081;2094:10;2106;2118;2053:14;:76::i;:::-;2030:99;;2139:29;2171:37;2195:12;1049:66;;28071::16;1049::14;;;28059:79:16;28154:12;;;28147:28;;;980:7:14;;28191:12:16;;1049:66:14;;;;;;;;;;;;1022:107;;;;;;1003:126;;878:258;;;;2171:37;2276:12;;2139:69;;-1:-1:-1;;;;;;2276:12:14;2225:47;2139:69;2262:9;2225:13;:47::i;:::-;-1:-1:-1;;;;;2225:63:14;;;1808:487;-1:-1:-1;;;;;;;;1808:487:14:o;5344:434:1:-;5458:18;;-1:-1:-1;;;;;5433:14:1;;;;;;:9;:14;;;;;;:21;;5450:4;;5433:21;:::i;:::-;:43;;5425:63;;;;-1:-1:-1;;;5425:63:1;;22013:2:16;5425:63:1;;;21995:21:16;22052:1;22032:18;;;22025:29;-1:-1:-1;;;22070:18:16;;;22063:37;22117:18;;5425:63:1;21811:330:16;5425:63:1;5540:10;;;;:5;:10;;;;;:24;;;;5506:23;;;;;:30;;5532:4;;5506:30;:::i;:::-;:58;;5498:77;;;;-1:-1:-1;;;5498:77:1;;22348:2:16;5498:77:1;;;22330:21:16;22387:1;22367:18;;;22360:29;-1:-1:-1;;;22405:18:16;;;22398:36;22451:18;;5498:77:1;22146:329:16;5498:77:1;5623:10;;;;:5;:10;;;;;:28;;;5600:19;5610:3;5629;5600:9;:19::i;:::-;5593:26;;:4;:26;:::i;:::-;:58;;5585:77;;;;-1:-1:-1;;;5585:77:1;;22682:2:16;5585:77:1;;;22664:21:16;22721:1;22701:18;;;22694:29;-1:-1:-1;;;22739:18:16;;;22732:36;22785:18;;5585:77:1;22480:329:16;5585:77:1;-1:-1:-1;;;;;5673:14:1;;;;;;:9;:14;;;;;:22;;5691:4;;5673:14;:22;;5691:4;;5673:22;:::i;:::-;;;;-1:-1:-1;;5705:10:1;;;;:5;:10;;;;;:23;;:31;;5732:4;;5705:10;:31;;5732:4;;5705:31;:::i;4962:797:3:-;-1:-1:-1;;;;;5143:16:3;;5135:66;;;;-1:-1:-1;;;5135:66:3;;20596:2:16;5135:66:3;;;20578:21:16;20635:2;20615:18;;;20608:30;20674:34;20654:18;;;20647:62;-1:-1:-1;;;20725:18:16;;;20718:35;20770:19;;5135:66:3;20394:401:16;5135:66:3;666:10:2;5254:96:3;666:10:2;5285:4:3;5291:2;5295:21;5313:2;5295:17;:21::i;:::-;5318:25;5336:6;5318:17;:25::i;5254:96::-;5361:19;5383:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;5383:19:3;;;;;;;;;;5420:21;;;;5412:76;;;;-1:-1:-1;;;5412:76:3;;21002:2:16;5412:76:3;;;20984:21:16;21041:2;21021:18;;;21014:30;21080:34;21060:18;;;21053:62;-1:-1:-1;;;21131:18:16;;;21124:40;21181:19;;5412:76:3;20800:406:16;5412:76:3;5522:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;5522:19:3;;;;;;;;;;5544:20;;;5522:42;;5584:17;;;;;;;:27;;5544:20;;5522:13;5584:27;;5544:20;;5584:27;:::i;:::-;;;;-1:-1:-1;;5627:46:3;;;22988:25:16;;;23044:2;23029:18;;23022:34;;;-1:-1:-1;;;;;5627:46:3;;;;;;;;;;;;;;22961:18:16;5627:46:3;;;;;;;5684:68;5715:8;5725:4;5731:2;5735;5739:6;5747:4;5684:30;:68::i;:::-;5125:634;;4962:797;;;;;:::o;13969:792::-;-1:-1:-1;;;;;14201:13:3;;1034:20:0;1080:8;14197:558:3;;14236:79;;-1:-1:-1;;;14236:79:3;;-1:-1:-1;;;;;14236:43:3;;;;;:79;;14280:8;;14290:4;;14296:3;;14301:7;;14310:4;;14236:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14236:79:3;;;;;;;;-1:-1:-1;;14236:79:3;;;;;;;;;;;;:::i;:::-;;;14232:513;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14621:6;14614:14;;-1:-1:-1;;;14614:14:3;;;;;;;;:::i;14232:513::-;;;14668:62;;-1:-1:-1;;;14668:62:3;;25238:2:16;14668:62:3;;;25220:21:16;25277:2;25257:18;;;25250:30;25316:34;25296:18;;;25289:62;25387:22;25367:18;;;25360:50;25427:19;;14668:62:3;25036:416:16;14232:513:3;-1:-1:-1;;;;;;14394:60:3;;-1:-1:-1;;;14394:60:3;14390:157;;14478:50;;-1:-1:-1;;;14478:50:3;;25659:2:16;14478:50:3;;;25641:21:16;25698:2;25678:18;;;25671:30;25737:34;25717:18;;;25710:62;-1:-1:-1;;;25788:18:16;;;25781:38;25836:19;;14478:50:3;25457:404:16;10339:657:3;-1:-1:-1;;;;;10464:21:3;;10456:69;;;;-1:-1:-1;;;10456:69:3;;26068:2:16;10456:69:3;;;26050:21:16;26107:2;26087:18;;;26080:30;26146:34;26126:18;;;26119:62;-1:-1:-1;;;26197:18:16;;;26190:33;26240:19;;10456:69:3;25866:399:16;10456:69:3;666:10:2;10578:105:3;666:10:2;10609:7:3;10536:16;10630:21;10648:2;10630:17;:21::i;:::-;10653:25;10671:6;10653:17;:25::i;:::-;-1:-1:-1;;10578:105:3;;;;;;;;;-1:-1:-1;10578:105:3;;-1:-1:-1;;;6105:1045:3;10578:105;10694:22;10719:13;;;:9;:13;;;;;;;;-1:-1:-1;;;;;10719:22:3;;;;;;;;;;10759:24;;;;10751:73;;;;-1:-1:-1;;;10751:73:3;;26472:2:16;10751:73:3;;;26454:21:16;26511:2;26491:18;;;26484:30;26550:34;26530:18;;;26523:62;-1:-1:-1;;;26601:18:16;;;26594:34;26645:19;;10751:73:3;26270:400:16;10751:73:3;10858:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;10858:22:3;;;;;;;;;;;;10883:23;;;10858:48;;10932:57;;22988:25:16;;;23029:18;;;23022:34;;;10858:22:3;;10932:57;;;;;;22961:18:16;10932:57:3;;;;;;;10446:550;;10339:657;;;:::o;8447:583::-;-1:-1:-1;;;;;8599:21:3;;8591:67;;;;-1:-1:-1;;;8591:67:3;;26877:2:16;8591:67:3;;;26859:21:16;26916:2;26896:18;;;26889:30;26955:34;26935:18;;;26928:62;-1:-1:-1;;;27006:18:16;;;26999:31;27047:19;;8591:67:3;26675:397:16;8591:67:3;666:10:2;8711:107:3;666:10:2;8669:16:3;8754:7;8763:21;8781:2;8763:17;:21::i;8711:107::-;8829:13;;;;:9;:13;;;;;;;;-1:-1:-1;;;;;8829:22:3;;;;;;;;;:32;;8855:6;;8829:13;:32;;8855:6;;8829:32;:::i;:::-;;;;-1:-1:-1;;8876:57:3;;;22988:25:16;;;23044:2;23029:18;;23022:34;;;-1:-1:-1;;;;;8876:57:3;;;;8909:1;;8876:57;;;;;;22961:18:16;8876:57:3;;;;;;;8944:79;8975:8;8993:1;8997:7;9006:2;9010:6;9018:4;8944:30;:79::i;553:319:14:-;752:7;805:11;818;831:10;843;855:8;788:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;778:87;;;;;;771:94;;553:319;;;;;;;:::o;1142:275::-;1268:7;1292:9;1303;1314:7;1325:26;1340:10;1325:14;:26::i;:::-;1369:41;;;;;;;;;;;;28441:25:16;;;28514:4;28502:17;;28482:18;;;28475:45;;;;28536:18;;;28529:34;;;28579:18;;;28572:34;;;1291:60:14;;-1:-1:-1;1291:60:14;;-1:-1:-1;1291:60:14;-1:-1:-1;1369:41:14;;28413:19:16;;1369:41:14;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1369:41:14;;-1:-1:-1;;1369:41:14;;;1142:275;-1:-1:-1;;;;;;;1142:275:14:o;14767:193:3:-;14886:16;;;14900:1;14886:16;;;;;;;;;14833;;14861:22;;14886:16;;;;;;;;;;;;-1:-1:-1;14886:16:3;14861:41;;14923:7;14912:5;14918:1;14912:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;14948:5;14767:193;-1:-1:-1;;14767:193:3:o;13238:725::-;-1:-1:-1;;;;;13445:13:3;;1034:20:0;1080:8;13441:516:3;;13480:72;;-1:-1:-1;;;13480:72:3;;-1:-1:-1;;;;;13480:38:3;;;;;:72;;13519:8;;13529:4;;13535:2;;13539:6;;13547:4;;13480:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13480:72:3;;;;;;;;-1:-1:-1;;13480:72:3;;;;;;;;;;;;:::i;:::-;;;13476:471;;;;:::i;:::-;-1:-1:-1;;;;;;13601:55:3;;-1:-1:-1;;;13601:55:3;13597:152;;13680:50;;-1:-1:-1;;;13680:50:3;;25659:2:16;13680:50:3;;;25641:21:16;25698:2;25678:18;;;25671:30;25737:34;25717:18;;;25710:62;-1:-1:-1;;;25788:18:16;;;25781:38;25836:19;;13680:50:3;25457:404:16;1423:379:14;1526:9;1549;1572:7;1612:4;:11;1627:2;1612:17;1604:38;;;;-1:-1:-1;;;1604:38:14;;29408:2:16;1604:38:14;;;29390:21:16;29447:1;29427:18;;;29420:29;-1:-1:-1;;;29465:18:16;;;29458:38;29513:18;;1604:38:14;29206:331:16;1604:38:14;-1:-1:-1;;;1697:2:14;1687:13;;1681:20;1735:2;1725:13;;1719:20;1781:2;1771:13;;;1765:20;1681;;1762:1;1757:29;;;;;1423:379::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:154:16;-1:-1:-1;;;;;93:5:16;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:315;241:6;249;302:2;290:9;281:7;277:23;273:32;270:52;;;318:1;315;308:12;270:52;357:9;344:23;376:31;401:5;376:31;:::i;:::-;426:5;478:2;463:18;;;;450:32;;-1:-1:-1;;;173:315:16:o;675:131::-;-1:-1:-1;;;;;;749:32:16;;739:43;;729:71;;796:1;793;786:12;811:245;869:6;922:2;910:9;901:7;897:23;893:32;890:52;;;938:1;935;928:12;890:52;977:9;964:23;996:30;1020:5;996:30;:::i;:::-;1045:5;811:245;-1:-1:-1;;;811:245:16:o;1253:127::-;1314:10;1309:3;1305:20;1302:1;1295:31;1345:4;1342:1;1335:15;1369:4;1366:1;1359:15;1385:249;1495:2;1476:13;;-1:-1:-1;;1472:27:16;1460:40;;1530:18;1515:34;;1551:22;;;1512:62;1509:88;;;1577:18;;:::i;:::-;1613:2;1606:22;-1:-1:-1;;1385:249:16:o;1639:469::-;1704:5;1738:18;1730:6;1727:30;1724:56;;;1760:18;;:::i;:::-;1809:2;1803:9;1821:69;1878:2;1857:15;;-1:-1:-1;;1853:29:16;1884:4;1849:40;1803:9;1821:69;:::i;:::-;1908:6;1899:15;;1938:6;1930;1923:22;1978:3;1969:6;1964:3;1960:16;1957:25;1954:45;;;1995:1;1992;1985:12;1954:45;2045:6;2040:3;2033:4;2025:6;2021:17;2008:44;2100:1;2093:4;2084:6;2076;2072:19;2068:30;2061:41;;1639:469;;;;;:::o;2113:451::-;2182:6;2235:2;2223:9;2214:7;2210:23;2206:32;2203:52;;;2251:1;2248;2241:12;2203:52;2291:9;2278:23;2324:18;2316:6;2313:30;2310:50;;;2356:1;2353;2346:12;2310:50;2379:22;;2432:4;2424:13;;2420:27;-1:-1:-1;2410:55:16;;2461:1;2458;2451:12;2410:55;2484:74;2550:7;2545:2;2532:16;2527:2;2523;2519:11;2484:74;:::i;:::-;2474:84;2113:451;-1:-1:-1;;;;2113:451:16:o;2569:454::-;2664:6;2672;2680;2688;2696;2749:3;2737:9;2728:7;2724:23;2720:33;2717:53;;;2766:1;2763;2756:12;2717:53;-1:-1:-1;;2789:23:16;;;2859:2;2844:18;;2831:32;;-1:-1:-1;2910:2:16;2895:18;;2882:32;;2961:2;2946:18;;2933:32;;-1:-1:-1;3012:3:16;2997:19;2984:33;;-1:-1:-1;2569:454:16;-1:-1:-1;2569:454:16:o;3028:180::-;3087:6;3140:2;3128:9;3119:7;3115:23;3111:32;3108:52;;;3156:1;3153;3146:12;3108:52;-1:-1:-1;3179:23:16;;3028:180;-1:-1:-1;3028:180:16:o;3213:258::-;3285:1;3295:113;3309:6;3306:1;3303:13;3295:113;;;3385:11;;;3379:18;3366:11;;;3359:39;3331:2;3324:10;3295:113;;;3426:6;3423:1;3420:13;3417:48;;;-1:-1:-1;;3461:1:16;3443:16;;3436:27;3213:258::o;3476:::-;3518:3;3556:5;3550:12;3583:6;3578:3;3571:19;3599:63;3655:6;3648:4;3643:3;3639:14;3632:4;3625:5;3621:16;3599:63;:::i;:::-;3716:2;3695:15;-1:-1:-1;;3691:29:16;3682:39;;;;3723:4;3678:50;;3476:258;-1:-1:-1;;3476:258:16:o;3739:220::-;3888:2;3877:9;3870:21;3851:4;3908:45;3949:2;3938:9;3934:18;3926:6;3908:45;:::i;3964:183::-;4024:4;4057:18;4049:6;4046:30;4043:56;;;4079:18;;:::i;:::-;-1:-1:-1;4124:1:16;4120:14;4136:4;4116:25;;3964:183::o;4152:724::-;4206:5;4259:3;4252:4;4244:6;4240:17;4236:27;4226:55;;4277:1;4274;4267:12;4226:55;4313:6;4300:20;4339:4;4362:43;4402:2;4362:43;:::i;:::-;4434:2;4428:9;4446:31;4474:2;4466:6;4446:31;:::i;:::-;4512:18;;;4604:1;4600:10;;;;4588:23;;4584:32;;;4546:15;;;;-1:-1:-1;4628:15:16;;;4625:35;;;4656:1;4653;4646:12;4625:35;4692:2;4684:6;4680:15;4704:142;4720:6;4715:3;4712:15;4704:142;;;4786:17;;4774:30;;4824:12;;;;4737;;4704:142;;;-1:-1:-1;4864:6:16;4152:724;-1:-1:-1;;;;;;4152:724:16:o;4881:221::-;4923:5;4976:3;4969:4;4961:6;4957:17;4953:27;4943:55;;4994:1;4991;4984:12;4943:55;5016:80;5092:3;5083:6;5070:20;5063:4;5055:6;5051:17;5016:80;:::i;5107:1071::-;5261:6;5269;5277;5285;5293;5346:3;5334:9;5325:7;5321:23;5317:33;5314:53;;;5363:1;5360;5353:12;5314:53;5402:9;5389:23;5421:31;5446:5;5421:31;:::i;:::-;5471:5;-1:-1:-1;5528:2:16;5513:18;;5500:32;5541:33;5500:32;5541:33;:::i;:::-;5593:7;-1:-1:-1;5651:2:16;5636:18;;5623:32;5674:18;5704:14;;;5701:34;;;5731:1;5728;5721:12;5701:34;5754:61;5807:7;5798:6;5787:9;5783:22;5754:61;:::i;:::-;5744:71;;5868:2;5857:9;5853:18;5840:32;5824:48;;5897:2;5887:8;5884:16;5881:36;;;5913:1;5910;5903:12;5881:36;5936:63;5991:7;5980:8;5969:9;5965:24;5936:63;:::i;:::-;5926:73;;6052:3;6041:9;6037:19;6024:33;6008:49;;6082:2;6072:8;6069:16;6066:36;;;6098:1;6095;6088:12;6066:36;;6121:51;6164:7;6153:8;6142:9;6138:24;6121:51;:::i;:::-;6111:61;;;5107:1071;;;;;;;;:::o;6183:247::-;6242:6;6295:2;6283:9;6274:7;6270:23;6266:32;6263:52;;;6311:1;6308;6301:12;6263:52;6350:9;6337:23;6369:31;6394:5;6369:31;:::i;6435:1277::-;6553:6;6561;6614:2;6602:9;6593:7;6589:23;6585:32;6582:52;;;6630:1;6627;6620:12;6582:52;6670:9;6657:23;6699:18;6740:2;6732:6;6729:14;6726:34;;;6756:1;6753;6746:12;6726:34;6794:6;6783:9;6779:22;6769:32;;6839:7;6832:4;6828:2;6824:13;6820:27;6810:55;;6861:1;6858;6851:12;6810:55;6897:2;6884:16;6919:4;6942:43;6982:2;6942:43;:::i;:::-;7014:2;7008:9;7026:31;7054:2;7046:6;7026:31;:::i;:::-;7092:18;;;7180:1;7176:10;;;;7168:19;;7164:28;;;7126:15;;;;-1:-1:-1;7204:19:16;;;7201:39;;;7236:1;7233;7226:12;7201:39;7260:11;;;;7280:217;7296:6;7291:3;7288:15;7280:217;;;7376:3;7363:17;7393:31;7418:5;7393:31;:::i;:::-;7437:18;;7313:12;;;;7475;;;;7280:217;;;7516:6;-1:-1:-1;;7560:18:16;;7547:32;;-1:-1:-1;;7591:16:16;;;7588:36;;;7620:1;7617;7610:12;7588:36;;7643:63;7698:7;7687:8;7676:9;7672:24;7643:63;:::i;:::-;7633:73;;;6435:1277;;;;;:::o;7717:435::-;7770:3;7808:5;7802:12;7835:6;7830:3;7823:19;7861:4;7890:2;7885:3;7881:12;7874:19;;7927:2;7920:5;7916:14;7948:1;7958:169;7972:6;7969:1;7966:13;7958:169;;;8033:13;;8021:26;;8067:12;;;;8102:15;;;;7994:1;7987:9;7958:169;;;-1:-1:-1;8143:3:16;;7717:435;-1:-1:-1;;;;;7717:435:16:o;8157:261::-;8336:2;8325:9;8318:21;8299:4;8356:56;8408:2;8397:9;8393:18;8385:6;8356:56;:::i;8423:383::-;8500:6;8508;8516;8569:2;8557:9;8548:7;8544:23;8540:32;8537:52;;;8585:1;8582;8575:12;8537:52;8624:9;8611:23;8643:31;8668:5;8643:31;:::i;:::-;8693:5;8745:2;8730:18;;8717:32;;-1:-1:-1;8796:2:16;8781:18;;;8768:32;;8423:383;-1:-1:-1;;;8423:383:16:o;8811:730::-;8938:6;8946;8954;9007:2;8995:9;8986:7;8982:23;8978:32;8975:52;;;9023:1;9020;9013:12;8975:52;9062:9;9049:23;9081:31;9106:5;9081:31;:::i;:::-;9131:5;-1:-1:-1;9187:2:16;9172:18;;9159:32;9210:18;9240:14;;;9237:34;;;9267:1;9264;9257:12;9237:34;9290:61;9343:7;9334:6;9323:9;9319:22;9290:61;:::i;:::-;9280:71;;9404:2;9393:9;9389:18;9376:32;9360:48;;9433:2;9423:8;9420:16;9417:36;;;9449:1;9446;9439:12;9417:36;;9472:63;9527:7;9516:8;9505:9;9501:24;9472:63;:::i;:::-;9462:73;;;8811:730;;;;;:::o;9777:793::-;9913:6;9921;9929;9982:2;9970:9;9961:7;9957:23;9953:32;9950:52;;;9998:1;9995;9988:12;9950:52;10038:9;10025:23;10067:18;10108:2;10100:6;10097:14;10094:34;;;10124:1;10121;10114:12;10094:34;10147:61;10200:7;10191:6;10180:9;10176:22;10147:61;:::i;:::-;10137:71;;10261:2;10250:9;10246:18;10233:32;10217:48;;10290:2;10280:8;10277:16;10274:36;;;10306:1;10303;10296:12;10274:36;10329:63;10384:7;10373:8;10362:9;10358:24;10329:63;:::i;:::-;10319:73;;10445:2;10434:9;10430:18;10417:32;10401:48;;10474:2;10464:8;10461:16;10458:36;;;10490:1;10487;10480:12;10458:36;;10513:51;10556:7;10545:8;10534:9;10530:24;10513:51;:::i;10575:416::-;10640:6;10648;10701:2;10689:9;10680:7;10676:23;10672:32;10669:52;;;10717:1;10714;10707:12;10669:52;10756:9;10743:23;10775:31;10800:5;10775:31;:::i;:::-;10825:5;-1:-1:-1;10882:2:16;10867:18;;10854:32;10924:15;;10917:23;10905:36;;10895:64;;10955:1;10952;10945:12;10895:64;10978:7;10968:17;;;10575:416;;;;;:::o;11464:388::-;11532:6;11540;11593:2;11581:9;11572:7;11568:23;11564:32;11561:52;;;11609:1;11606;11599:12;11561:52;11648:9;11635:23;11667:31;11692:5;11667:31;:::i;:::-;11717:5;-1:-1:-1;11774:2:16;11759:18;;11746:32;11787:33;11746:32;11787:33;:::i;11857:456::-;11943:6;11951;11959;12012:2;12000:9;11991:7;11987:23;11983:32;11980:52;;;12028:1;12025;12018:12;11980:52;12064:9;12051:23;12041:33;;12121:2;12110:9;12106:18;12093:32;12083:42;;12176:2;12165:9;12161:18;12148:32;12203:18;12195:6;12192:30;12189:50;;;12235:1;12232;12225:12;12189:50;12258:49;12299:7;12290:6;12279:9;12275:22;12258:49;:::i;12318:734::-;12422:6;12430;12438;12446;12454;12507:3;12495:9;12486:7;12482:23;12478:33;12475:53;;;12524:1;12521;12514:12;12475:53;12563:9;12550:23;12582:31;12607:5;12582:31;:::i;:::-;12632:5;-1:-1:-1;12689:2:16;12674:18;;12661:32;12702:33;12661:32;12702:33;:::i;:::-;12754:7;-1:-1:-1;12808:2:16;12793:18;;12780:32;;-1:-1:-1;12859:2:16;12844:18;;12831:32;;-1:-1:-1;12914:3:16;12899:19;;12886:33;12942:18;12931:30;;12928:50;;;12974:1;12971;12964:12;12928:50;12997:49;13038:7;13029:6;13018:9;13014:22;12997:49;:::i;14158:380::-;14237:1;14233:12;;;;14280;;;14301:61;;14355:4;14347:6;14343:17;14333:27;;14301:61;14408:2;14400:6;14397:14;14377:18;14374:38;14371:161;;;14454:10;14449:3;14445:20;14442:1;14435:31;14489:4;14486:1;14479:15;14517:4;14514:1;14507:15;14371:161;;14158:380;;;:::o;15372:127::-;15433:10;15428:3;15424:20;15421:1;15414:31;15464:4;15461:1;15454:15;15488:4;15485:1;15478:15;15504:127;15565:10;15560:3;15556:20;15553:1;15546:31;15596:4;15593:1;15586:15;15620:4;15617:1;15610:15;15636:135;15675:3;-1:-1:-1;;15696:17:16;;15693:43;;;15716:18;;:::i;:::-;-1:-1:-1;15763:1:16;15752:13;;15636:135::o;16444:128::-;16484:3;16515:1;16511:6;16508:1;16505:13;16502:39;;;16521:18;;:::i;:::-;-1:-1:-1;16557:9:16;;16444:128::o;17915:168::-;17955:7;18021:1;18017;18013:6;18009:14;18006:1;18003:21;17998:1;17991:9;17984:17;17980:45;17977:71;;;18028:18;;:::i;:::-;-1:-1:-1;18068:9:16;;17915:168::o;21211:465::-;21468:2;21457:9;21450:21;21431:4;21494:56;21546:2;21535:9;21531:18;21523:6;21494:56;:::i;:::-;21598:9;21590:6;21586:22;21581:2;21570:9;21566:18;21559:50;21626:44;21663:6;21655;21626:44;:::i;:::-;21618:52;21211:465;-1:-1:-1;;;;;21211:465:16:o;21681:125::-;21721:4;21749:1;21746;21743:8;21740:34;;;21754:18;;:::i;:::-;-1:-1:-1;21791:9:16;;21681:125::o;23067:850::-;23389:4;-1:-1:-1;;;;;23499:2:16;23491:6;23487:15;23476:9;23469:34;23551:2;23543:6;23539:15;23534:2;23523:9;23519:18;23512:43;;23591:3;23586:2;23575:9;23571:18;23564:31;23618:57;23670:3;23659:9;23655:19;23647:6;23618:57;:::i;:::-;23723:9;23715:6;23711:22;23706:2;23695:9;23691:18;23684:50;23757:44;23794:6;23786;23757:44;:::i;:::-;23743:58;;23850:9;23842:6;23838:22;23832:3;23821:9;23817:19;23810:51;23878:33;23904:6;23896;23878:33;:::i;:::-;23870:41;23067:850;-1:-1:-1;;;;;;;;23067:850:16:o;23922:249::-;23991:6;24044:2;24032:9;24023:7;24019:23;24015:32;24012:52;;;24060:1;24057;24050:12;24012:52;24092:9;24086:16;24111:30;24135:5;24111:30;:::i;24176:179::-;24211:3;24253:1;24235:16;24232:23;24229:120;;;24299:1;24296;24293;24278:23;-1:-1:-1;24336:1:16;24330:8;24325:3;24321:18;24176:179;:::o;24360:671::-;24399:3;24441:4;24423:16;24420:26;24417:39;;;24360:671;:::o;24417:39::-;24483:2;24477:9;-1:-1:-1;;24548:16:16;24544:25;;24541:1;24477:9;24520:50;24599:4;24593:11;24623:16;24658:18;24729:2;24722:4;24714:6;24710:17;24707:25;24702:2;24694:6;24691:14;24688:45;24685:58;;;24736:5;;;;;24360:671;:::o;24685:58::-;24773:6;24767:4;24763:17;24752:28;;24809:3;24803:10;24836:2;24828:6;24825:14;24822:27;;;24842:5;;;;;;24360:671;:::o;24822:27::-;24926:2;24907:16;24901:4;24897:27;24893:36;24886:4;24877:6;24872:3;24868:16;24864:27;24861:69;24858:82;;;24933:5;;;;;;24360:671;:::o;24858:82::-;24949:57;25000:4;24991:6;24983;24979:19;24975:30;24969:4;24949:57;:::i;:::-;-1:-1:-1;25022:3:16;;24360:671;-1:-1:-1;;;;;24360:671:16:o;27077:747::-;27340:3;27378:6;27372:13;27394:53;27440:6;27435:3;27428:4;27420:6;27416:17;27394:53;:::i;:::-;27510:13;;27469:16;;;;27532:57;27510:13;27469:16;27566:4;27554:17;;27532:57;:::i;:::-;27611:20;27640:21;;;-1:-1:-1;;27688:4:16;27677:16;;27670:32;;;;27742:2;27738:15;-1:-1:-1;;27734:53:16;27729:2;27718:14;;27711:77;27815:2;27804:14;;27077:747;-1:-1:-1;;27077:747:16:o;28617:584::-;28839:4;-1:-1:-1;;;;;28949:2:16;28941:6;28937:15;28926:9;28919:34;29001:2;28993:6;28989:15;28984:2;28973:9;28969:18;28962:43;;29041:6;29036:2;29025:9;29021:18;29014:34;29084:6;29079:2;29068:9;29064:18;29057:34;29128:3;29122;29111:9;29107:19;29100:32;29149:46;29190:3;29179:9;29175:19;29167:6;29149:46;:::i;:::-;29141:54;28617:584;-1:-1:-1;;;;;;;28617:584:16:o

Swarm Source

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