ETH Price: $3,102.08 (+1.02%)
Gas: 7 Gwei

Token

Mintlings (MINTLINGS)
 

Overview

Max Total Supply

230 MINTLINGS

Holders

92

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
neuo.eth
Balance
1 MINTLINGS
0x3670fbcdc9d16bde4d8a3240e96f53d3a4db7261
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:
Mintlings

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 13 of 15: Mintlings.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./ERC721Enumerable.sol";
import "./Ownable.sol";
import "./Strings.sol";

import "./IMintlings.sol";
import "./IMintlingsMetadata.sol";

contract Mintlings is ERC721Enumerable, Ownable, IMintlings, IMintlingsMetadata {
  using Strings for uint256;

  uint256 public constant GIFT_COUNT = 0;
  uint256 public constant PUBLIC_COUNT = 3333;
  uint256 public constant MAX_COUNT = GIFT_COUNT + PUBLIC_COUNT;
  uint256 public constant PURCHASE_LIMIT = 3333;
  uint256 public constant PRICE = 0.069 ether;

  bool public isActive = false;
  bool public isAllowListActive = false;
  string public proof;

  uint256 public allowListMaxMint = 20;

  /// @dev We will use these to be able to calculate remaining correctly.
  uint256 public totalGiftSupply;
  uint256 public totalPublicSupply;

  mapping(address => bool) private _allowList;
  mapping(address => uint256) private _allowListClaimed;

  address[] angels;
  mapping(address => uint256) private angelPercentages;
  mapping(address => uint256) private angelPart;
  bool private angelsSet = false;

  string private _contractURI = '';
  string private _tokenBaseURI = '';
  string private _tokenRevealedBaseURI = '';

  constructor(string memory name, string memory symbol) ERC721(name, symbol) {}

  function addToAllowList(address[] calldata addresses) external override onlyOwner {
    for (uint256 i = 0; i < addresses.length; i++) {
      require(addresses[i] != address(0), "Can't add the null address");

      _allowList[addresses[i]] = true;
      /**
      * @dev We don't want to reset _allowListClaimed count
      * if we try to add someone more than once.
      */
      _allowListClaimed[addresses[i]] > 0 ? _allowListClaimed[addresses[i]] : 0;
    }
  }

  function onAllowList(address addr) external view override returns (bool) {
    return _allowList[addr];
  }

  function removeFromAllowList(address[] calldata addresses) external override onlyOwner {
    for (uint256 i = 0; i < addresses.length; i++) {
      require(addresses[i] != address(0), "Can't add the null address");

      /// @dev We don't want to reset possible _allowListClaimed numbers.
      _allowList[addresses[i]] = false;
    }
  }

  /**
  * @dev We want to be able to distinguish tokens bought during isAllowListActive
  * and tokens bought outside of isAllowListActive
  */
  function allowListClaimedBy(address owner) external view override returns (uint256){
    require(owner != address(0), 'Zero address not on Allow List');

    return _allowListClaimed[owner];
  }

  function purchase(uint256 numberOfTokens) external override payable {
    require(isActive, 'Contract is not active');
    require(!isAllowListActive, 'Only allowing from Allow List');
    require(totalSupply() < MAX_COUNT, 'All tokens have been minted');
    require(numberOfTokens <= PURCHASE_LIMIT, 'Would exceed PURCHASE_LIMIT');
    /**
    * @dev The last person to purchase might pay too much.
    * This way however they can't get sniped.
    * If this happens, we'll refund the Eth for the unavailable tokens.
    */
    require(totalPublicSupply < PUBLIC_COUNT, 'Purchase would exceed PUBLIC_COUNT');
    require(PRICE * numberOfTokens <= msg.value, 'ETH amount is not sufficient');

    for (uint256 i = 0; i < numberOfTokens; i++) {
      /**
      * @dev Since they can get here while exceeding the MAX_COUNT,
      * we have to make sure to not mint any additional tokens.
      */
      if (totalPublicSupply < PUBLIC_COUNT) {
        /**
        * @dev Public token numbering starts after GIFT_COUNT.
        * And we don't want our tokens to start at 0 but at 1.
        */
        uint256 tokenId = GIFT_COUNT + totalPublicSupply + 1;

        totalPublicSupply += 1;
        _safeMint(msg.sender, tokenId);
      }
    }

    splitFunds();
  }

  function splitFunds() internal virtual {
    for (uint i = 0; i < angels.length; i++) {
      uint256 angelShare = (msg.value *
        angelPercentages[angels[i]]) / 100;

      angelPart[angels[i]] += angelShare;
    }
  }

  function purchaseAllowList(uint256 numberOfTokens) external override payable {
    require(isActive, 'Contract is not active');
    require(isAllowListActive, 'Allow List is not active');
    require(_allowList[msg.sender], 'You are not on the Allow List');
    require(totalSupply() < MAX_COUNT, 'All tokens have been minted');
    require(numberOfTokens <= allowListMaxMint, 'Cannot purchase this many tokens');
    require(totalPublicSupply + numberOfTokens <= PUBLIC_COUNT, 'Purchase would exceed PUBLIC_COUNT');
    require(_allowListClaimed[msg.sender] + numberOfTokens <= allowListMaxMint, 'Purchase exceeds max allowed');
    require(PRICE * numberOfTokens <= msg.value, 'ETH amount is not sufficient');

    for (uint256 i = 0; i < numberOfTokens; i++) {
      /**
      * @dev Public token numbering starts after GIFT_COUNT.
      * We don't want our tokens to start at 0 but at 1.
      */
      uint256 tokenId = GIFT_COUNT + totalPublicSupply + 1;

      totalPublicSupply += 1;
      _allowListClaimed[msg.sender] += 1;
      _safeMint(msg.sender, tokenId);
    }
  }

  function gift(address[] calldata to) external override onlyOwner {
    require(totalSupply() < MAX_COUNT, 'All tokens have been minted');
    require(totalGiftSupply + to.length <= GIFT_COUNT, 'Not enough tokens left to gift');

    for(uint256 i = 0; i < to.length; i++) {
      /// @dev We don't want our tokens to start at 0 but at 1.
      uint256 tokenId = totalGiftSupply + 1;

      totalGiftSupply += 1;
      _safeMint(to[i], tokenId);
    }
  }

  function setIsActive(bool _isActive) external override onlyOwner {
    isActive = _isActive;
  }

  function setIsAllowListActive(bool _isAllowListActive) external override onlyOwner {
    isAllowListActive = _isAllowListActive;
  }

  function setAllowListMaxMint(uint256 maxMint) external override onlyOwner {
    allowListMaxMint = maxMint;
  }

  function setProof(string calldata proofString) external override onlyOwner {
    proof = proofString;
  }

  function withdraw() external override onlyOwner {}

  modifier onlyAngel() {
      require(
          angelPercentages[_msgSender()] > 0,
          "Only angels can call this function"
      );
      _;
  }

  function getAngelParts(address angelAddress) public view returns(uint256) {
      return angelPart[angelAddress];
  }

  function getAngelPercentage(address angelAddress) public view returns(uint256) {
      return angelPercentages[angelAddress];
  }

  function withdrawAngel() public onlyAngel() {
      uint256 withdrawAmount = angelPart[_msgSender()];

      angelPart[_msgSender()] = 0;

      payable(_msgSender()).transfer(withdrawAmount);
  }

  function setAngels(
      address[] memory _angels,
      uint256[] memory _angelPercentages
  ) public onlyOwner {
    require(!angelsSet);

    angels = _angels;

    uint256 sharesPercentageTotal = 0;

    for (uint i = 0; i < angels.length; i++) {
        sharesPercentageTotal += _angelPercentages[i];
        angelPercentages[angels[i]] =
            _angelPercentages[i];
    }

    require(sharesPercentageTotal == 100);

    angelsSet = true;
  }

  function setContractURI(string calldata URI) external override onlyOwner {
    _contractURI = URI;
  }

  function setBaseURI(string calldata URI) external override onlyOwner {
    _tokenBaseURI = URI;
  }

  function setRevealedBaseURI(string calldata revealedBaseURI) external override onlyOwner {
    _tokenRevealedBaseURI = revealedBaseURI;
  }

  function contractURI() public view override returns (string memory) {
    return _contractURI;
  }

  function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) {
    require(_exists(tokenId), 'Token does not exist');

    /// @dev Convert string to bytes so we can check if it's empty or not.
    string memory revealedBaseURI = _tokenRevealedBaseURI;
    return bytes(revealedBaseURI).length > 0 ?
      string(abi.encodePacked(revealedBaseURI, tokenId.toString())) :
      _tokenBaseURI;
  }
}

File 1 of 15: 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);
    }

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

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

File 2 of 15: 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 3 of 15: 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 4 of 15: ERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import"./IERC721.sol";
import"./IERC721Receiver.sol";
import"./IERC721Metadata.sol";
import"./Address.sol";
import"./Context.sol";
import"./Strings.sol";
import"./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

File 5 of 15: ERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import"./ERC721.sol";
import"./IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

File 6 of 15: 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 7 of 15: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import"./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 8 of 15: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import"./IERC721.sol";

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

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

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

File 9 of 15: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import"./IERC721.sol";

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

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

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

File 10 of 15: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 11 of 15: IMintlings.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IMintlings {
  function addToAllowList(address[] calldata addresses) external;

  function onAllowList(address addr) external returns (bool);

  function removeFromAllowList(address[] calldata addresses) external;

  function allowListClaimedBy(address owner) external returns (uint256);

  function purchase(uint256 numberOfTokens) external payable;

  function purchaseAllowList(uint256 numberOfTokens) external payable;

  function gift(address[] calldata to) external;

  function setIsActive(bool isActive) external;

  function setIsAllowListActive(bool isAllowListActive) external;

  function setAllowListMaxMint(uint256 maxMint) external;

  function setProof(string memory proofString) external;

  function withdraw() external;
}

File 12 of 15: IMintlingsMetadata.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IMintlingsMetadata {
  function setContractURI(string calldata URI) external;

  function setBaseURI(string calldata URI) external;

  function setRevealedBaseURI(string calldata revealedBaseURI) external;

  function contractURI() external view returns(string memory);
}

File 14 of 15: 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 15: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"GIFT_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_COUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PURCHASE_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"allowListClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowListMaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"angelAddress","type":"address"}],"name":"getAngelParts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"angelAddress","type":"address"}],"name":"getAngelPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAllowListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"onAllowList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proof","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"purchaseAllowList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromAllowList","outputs":[],"stateMutability":"nonpayable","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":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMint","type":"uint256"}],"name":"setAllowListMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_angels","type":"address[]"},{"internalType":"uint256[]","name":"_angelPercentages","type":"uint256[]"}],"name":"setAngels","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":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isActive","type":"bool"}],"name":"setIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isAllowListActive","type":"bool"}],"name":"setIsAllowListActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"proofString","type":"string"}],"name":"setProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"revealedBaseURI","type":"string"}],"name":"setRevealedBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalGiftSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPublicSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAngel","outputs":[],"stateMutability":"nonpayable","type":"function"}]

600a805461ffff60a01b191690556014600c819055805460ff1916905560a0604081905260006080819052620000389160159162000155565b50604080516020810191829052600090819052620000599160169162000155565b506040805160208101918290526000908190526200007a9160179162000155565b503480156200008857600080fd5b506040516200368b3803806200368b833981016040819052620000ab91620002b2565b815182908290620000c490600090602085019062000155565b508051620000da90600190602084019062000155565b505050620000f7620000f1620000ff60201b60201c565b62000103565b50506200036f565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000163906200031c565b90600052602060002090601f016020900481019282620001875760008555620001d2565b82601f10620001a257805160ff1916838001178555620001d2565b82800160010185558215620001d2579182015b82811115620001d2578251825591602001919060010190620001b5565b50620001e0929150620001e4565b5090565b5b80821115620001e05760008155600101620001e5565b600082601f8301126200020d57600080fd5b81516001600160401b03808211156200022a576200022a62000359565b604051601f8301601f19908116603f0116810190828211818310171562000255576200025562000359565b816040528381526020925086838588010111156200027257600080fd5b600091505b8382101562000296578582018301518183018401529082019062000277565b83821115620002a85760008385830101525b9695505050505050565b60008060408385031215620002c657600080fd5b82516001600160401b0380821115620002de57600080fd5b620002ec86838701620001fb565b935060208501519150808211156200030357600080fd5b506200031285828601620001fb565b9150509250929050565b600181811c908216806200033157607f821691505b602082108114156200035357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61330c806200037f6000396000f3fe6080604052600436106102c85760003560e01c8063715018a611610175578063b88d4fde116100dc578063e6a5931e11610095578063efef39a11161006f578063efef39a114610895578063f23347f5146108a8578063f2fde38b146108bb578063faf924cf146108db57600080fd5b8063e6a5931e14610821578063e8a3d48514610837578063e985e9c51461084c57600080fd5b8063b88d4fde1461077f578063bd70b4581461079f578063c87b56dd146107b5578063d06dfac6146107d5578063d6f407c71461080b578063d75e61101461079f57600080fd5b80638d859f3e1161012e5780638d859f3e146106d15780638da5cb5b146106ec578063938e3d7b1461070a57806395d89b411461072a578063a22cb4651461073f578063a51312c81461075f57600080fd5b8063715018a614610631578063718bc4af146106465780637263cfe21461066657806377163c1d146106865780637a6685f11461069b5780637f44ab2f146106bb57600080fd5b80632750fc78116102345780634f6ccce7116101ed57806362861d0b116101c757806362861d0b146105bc5780636352211e146105d15780636e83843a146105f157806370a082311461061157600080fd5b80634f6ccce714610546578063551a79671461056657806355f804b31461059c57600080fd5b80632750fc781461047757806329fc6bae146104975780632f745c59146104b85780633a065892146104d85780633ccfd60b1461051157806342842e0e1461052657600080fd5b8063095ea7b311610286578063095ea7b3146103c157806315336f80146103e1578063163e1e611461040157806318160ddd1461042157806322f3e2d41461043657806323b872dd1461045757600080fd5b806208ffdd146102cd57806301ceb53a1461030057806301ffc9a7146103175780630382ab641461034757806306fdde0314610367578063081812fc14610389575b600080fd5b3480156102d957600080fd5b506102ed6102e8366004612b61565b6108f0565b6040519081526020015b60405180910390f35b34801561030c57600080fd5b50610315610969565b005b34801561032357600080fd5b50610337610332366004612e56565b610a15565b60405190151581526020016102f7565b34801561035357600080fd5b50610315610362366004612d74565b610a40565b34801561037357600080fd5b5061037c610b4b565b6040516102f79190612fa1565b34801561039557600080fd5b506103a96103a4366004612ef0565b610bdd565b6040516001600160a01b0390911681526020016102f7565b3480156103cd57600080fd5b506103156103dc366004612cd5565b610c72565b3480156103ed57600080fd5b506103156103fc366004612e90565b610d88565b34801561040d57600080fd5b5061031561041c366004612cff565b610dbe565b34801561042d57600080fd5b506008546102ed565b34801561044257600080fd5b50600a5461033790600160a01b900460ff1681565b34801561046357600080fd5b50610315610472366004612baf565b610eee565b34801561048357600080fd5b50610315610492366004612e3b565b610f1f565b3480156104a357600080fd5b50600a5461033790600160a81b900460ff1681565b3480156104c457600080fd5b506102ed6104d3366004612cd5565b610f67565b3480156104e457600080fd5b506103376104f3366004612b61565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561051d57600080fd5b50610315610ffd565b34801561053257600080fd5b50610315610541366004612baf565b611029565b34801561055257600080fd5b506102ed610561366004612ef0565b611044565b34801561057257600080fd5b506102ed610581366004612b61565b6001600160a01b031660009081526013602052604090205490565b3480156105a857600080fd5b506103156105b7366004612e90565b6110d7565b3480156105c857600080fd5b506102ed600081565b3480156105dd57600080fd5b506103a96105ec366004612ef0565b61110d565b3480156105fd57600080fd5b5061031561060c366004612e90565b611184565b34801561061d57600080fd5b506102ed61062c366004612b61565b6111ba565b34801561063d57600080fd5b50610315611241565b34801561065257600080fd5b50610315610661366004612e3b565b611275565b34801561067257600080fd5b50610315610681366004612cff565b6112bd565b34801561069257600080fd5b506102ed611481565b3480156106a757600080fd5b506103156106b6366004612ef0565b611491565b3480156106c757600080fd5b506102ed600c5481565b3480156106dd57600080fd5b506102ed66f523226980800081565b3480156106f857600080fd5b50600a546001600160a01b03166103a9565b34801561071657600080fd5b50610315610725366004612e90565b6114c0565b34801561073657600080fd5b5061037c6114f6565b34801561074b57600080fd5b5061031561075a366004612cab565b611505565b34801561076b57600080fd5b5061031561077a366004612cff565b6115ca565b34801561078b57600080fd5b5061031561079a366004612beb565b6116e6565b3480156107ab57600080fd5b506102ed610d0581565b3480156107c157600080fd5b5061037c6107d0366004612ef0565b61171e565b3480156107e157600080fd5b506102ed6107f0366004612b61565b6001600160a01b031660009081526012602052604090205490565b34801561081757600080fd5b506102ed600d5481565b34801561082d57600080fd5b506102ed600e5481565b34801561084357600080fd5b5061037c6118d6565b34801561085857600080fd5b50610337610867366004612b7c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6103156108a3366004612ef0565b6118e5565b6103156108b6366004612ef0565b611b0b565b3480156108c757600080fd5b506103156108d6366004612b61565b611e13565b3480156108e757600080fd5b5061037c611eab565b60006001600160a01b03821661094d5760405162461bcd60e51b815260206004820152601e60248201527f5a65726f2061646472657373206e6f74206f6e20416c6c6f77204c697374000060448201526064015b60405180910390fd5b506001600160a01b031660009081526010602052604090205490565b336000908152601260205260409020546109d05760405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920616e67656c732063616e2063616c6c20746869732066756e63746960448201526137b760f11b6064820152608401610944565b33600081815260136020526040808220805490839055905190929183156108fc02918491818181858888f19350505050158015610a11573d6000803e3d6000fd5b5050565b60006001600160e01b0319821663780e9d6360e01b1480610a3a5750610a3a82611f39565b92915050565b600a546001600160a01b03163314610a6a5760405162461bcd60e51b815260040161094490613048565b60145460ff1615610a7a57600080fd5b8151610a8d9060119060208501906129d5565b506000805b601154811015610b2b57828181518110610aae57610aae613294565b602002602001015182610ac1919061315a565b9150828181518110610ad557610ad5613294565b60200260200101516012600060118481548110610af457610af4613294565b60009182526020808320909101546001600160a01b0316835282019290925260400190205580610b2381613223565b915050610a92565b5080606414610b3957600080fd5b50506014805460ff1916600117905550565b606060008054610b5a906131e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b86906131e8565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c565760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610944565b506000908152600460205260409020546001600160a01b031690565b6000610c7d8261110d565b9050806001600160a01b0316836001600160a01b03161415610ceb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610944565b336001600160a01b0382161480610d075750610d078133610867565b610d795760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610944565b610d838383611f89565b505050565b600a546001600160a01b03163314610db25760405162461bcd60e51b815260040161094490613048565b610d83600b8383612a3a565b600a546001600160a01b03163314610de85760405162461bcd60e51b815260040161094490613048565b610df5610d05600061315a565b60085410610e155760405162461bcd60e51b8152600401610944906130ce565b600d54600090610e2690839061315a565b1115610e745760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f75676820746f6b656e73206c65667420746f206769667400006044820152606401610944565b60005b81811015610d83576000600d546001610e90919061315a565b90506001600d6000828254610ea5919061315a565b90915550610edb9050848484818110610ec057610ec0613294565b9050602002016020810190610ed59190612b61565b82611ff7565b5080610ee681613223565b915050610e77565b610ef83382612011565b610f145760405162461bcd60e51b81526004016109449061307d565b610d83838383612108565b600a546001600160a01b03163314610f495760405162461bcd60e51b815260040161094490613048565b600a8054911515600160a01b0260ff60a01b19909216919091179055565b6000610f72836111ba565b8210610fd45760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610944565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110275760405162461bcd60e51b815260040161094490613048565b565b610d83838383604051806020016040528060008152506116e6565b600061104f60085490565b82106110b25760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610944565b600882815481106110c5576110c5613294565b90600052602060002001549050919050565b600a546001600160a01b031633146111015760405162461bcd60e51b815260040161094490613048565b610d8360168383612a3a565b6000818152600260205260408120546001600160a01b031680610a3a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610944565b600a546001600160a01b031633146111ae5760405162461bcd60e51b815260040161094490613048565b610d8360178383612a3a565b60006001600160a01b0382166112255760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610944565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461126b5760405162461bcd60e51b815260040161094490613048565b61102760006122b3565b600a546001600160a01b0316331461129f5760405162461bcd60e51b815260040161094490613048565b600a8054911515600160a81b0260ff60a81b19909216919091179055565b600a546001600160a01b031633146112e75760405162461bcd60e51b815260040161094490613048565b60005b81811015610d8357600083838381811061130657611306613294565b905060200201602081019061131b9190612b61565b6001600160a01b031614156113725760405162461bcd60e51b815260206004820152601a60248201527f43616e27742061646420746865206e756c6c20616464726573730000000000006044820152606401610944565b6001600f600085858581811061138a5761138a613294565b905060200201602081019061139f9190612b61565b6001600160a01b0316815260208101919091526040016000908120805460ff1916921515929092179091556010818585858181106113df576113df613294565b90506020020160208101906113f49190612b61565b6001600160a01b03166001600160a01b03168152602001908152602001600020541161142157600061146e565b6010600084848481811061143757611437613294565b905060200201602081019061144c9190612b61565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b508061147981613223565b9150506112ea565b61148e610d05600061315a565b81565b600a546001600160a01b031633146114bb5760405162461bcd60e51b815260040161094490613048565b600c55565b600a546001600160a01b031633146114ea5760405162461bcd60e51b815260040161094490613048565b610d8360158383612a3a565b606060018054610b5a906131e8565b6001600160a01b03821633141561155e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610944565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115f45760405162461bcd60e51b815260040161094490613048565b60005b81811015610d8357600083838381811061161357611613613294565b90506020020160208101906116289190612b61565b6001600160a01b0316141561167f5760405162461bcd60e51b815260206004820152601a60248201527f43616e27742061646420746865206e756c6c20616464726573730000000000006044820152606401610944565b6000600f600085858581811061169757611697613294565b90506020020160208101906116ac9190612b61565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806116de81613223565b9150506115f7565b6116f03383612011565b61170c5760405162461bcd60e51b81526004016109449061307d565b61171884848484612305565b50505050565b6000818152600260205260409020546060906001600160a01b031661177c5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606401610944565b60006017805461178b906131e8565b80601f01602080910402602001604051908101604052809291908181526020018280546117b7906131e8565b80156118045780601f106117d957610100808354040283529160200191611804565b820191906000526020600020905b8154815290600101906020018083116117e757829003601f168201915b5050505050905060008151116118a45760168054611821906131e8565b80601f016020809104026020016040519081016040528092919081815260200182805461184d906131e8565b801561189a5780601f1061186f5761010080835404028352916020019161189a565b820191906000526020600020905b81548152906001019060200180831161187d57829003601f168201915b50505050506118cf565b806118ae84612338565b6040516020016118bf929190612f35565b6040516020818303038152906040525b9392505050565b606060158054610b5a906131e8565b600a54600160a01b900460ff166119375760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b6044820152606401610944565b600a54600160a81b900460ff16156119915760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920616c6c6f77696e672066726f6d20416c6c6f77204c6973740000006044820152606401610944565b61199e610d05600061315a565b600854106119be5760405162461bcd60e51b8152600401610944906130ce565b610d05811115611a105760405162461bcd60e51b815260206004820152601b60248201527f576f756c64206578636565642050555243484153455f4c494d495400000000006044820152606401610944565b610d05600e5410611a335760405162461bcd60e51b815260040161094490613006565b34611a458266f5232269808000613186565b1115611a935760405162461bcd60e51b815260206004820152601c60248201527f45544820616d6f756e74206973206e6f742073756666696369656e74000000006044820152606401610944565b60005b81811015611aff57610d05600e541015611aed576000600e546000611abb919061315a565b611ac690600161315a565b90506001600e6000828254611adb919061315a565b90915550611aeb90503382611ff7565b505b80611af781613223565b915050611a96565b50611b08612436565b50565b600a54600160a01b900460ff16611b5d5760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b6044820152606401610944565b600a54600160a81b900460ff16611bb65760405162461bcd60e51b815260206004820152601860248201527f416c6c6f77204c697374206973206e6f742061637469766500000000000000006044820152606401610944565b336000908152600f602052604090205460ff16611c155760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206e6f74206f6e2074686520416c6c6f77204c6973740000006044820152606401610944565b611c22610d05600061315a565b60085410611c425760405162461bcd60e51b8152600401610944906130ce565b600c54811115611c945760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e736044820152606401610944565b610d0581600e54611ca5919061315a565b1115611cc35760405162461bcd60e51b815260040161094490613006565b600c5433600090815260106020526040902054611ce190839061315a565b1115611d2f5760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610944565b34611d418266f5232269808000613186565b1115611d8f5760405162461bcd60e51b815260206004820152601c60248201527f45544820616d6f756e74206973206e6f742073756666696369656e74000000006044820152606401610944565b60005b81811015610a11576000600e546000611dab919061315a565b611db690600161315a565b90506001600e6000828254611dcb919061315a565b9091555050336000908152601060205260408120805460019290611df090849061315a565b90915550611e0090503382611ff7565b5080611e0b81613223565b915050611d92565b600a546001600160a01b03163314611e3d5760405162461bcd60e51b815260040161094490613048565b6001600160a01b038116611ea25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610944565b611b08816122b3565b600b8054611eb8906131e8565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee4906131e8565b8015611f315780601f10611f0657610100808354040283529160200191611f31565b820191906000526020600020905b815481529060010190602001808311611f1457829003601f168201915b505050505081565b60006001600160e01b031982166380ac58cd60e01b1480611f6a57506001600160e01b03198216635b5e139f60e01b145b80610a3a57506301ffc9a760e01b6001600160e01b0319831614610a3a565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611fbe8261110d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610a118282604051806020016040528060008152506124ff565b6000818152600260205260408120546001600160a01b031661208a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610944565b60006120958361110d565b9050806001600160a01b0316846001600160a01b031614806120d05750836001600160a01b03166120c584610bdd565b6001600160a01b0316145b8061210057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661211b8261110d565b6001600160a01b0316146121835760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610944565b6001600160a01b0382166121e55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610944565b6121f0838383612532565b6121fb600082611f89565b6001600160a01b03831660009081526003602052604081208054600192906122249084906131a5565b90915550506001600160a01b038216600090815260036020526040812080546001929061225290849061315a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612310848484612108565b61231c848484846125ea565b6117185760405162461bcd60e51b815260040161094490612fb4565b60608161235c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612386578061237081613223565b915061237f9050600a83613172565b9150612360565b60008167ffffffffffffffff8111156123a1576123a16132aa565b6040519080825280601f01601f1916602001820160405280156123cb576020820181803683370190505b5090505b8415612100576123e06001836131a5565b91506123ed600a8661323e565b6123f890603061315a565b60f81b81838151811061240d5761240d613294565b60200101906001600160f81b031916908160001a90535061242f600a86613172565b94506123cf565b60005b601154811015611b085760006064601260006011858154811061245e5761245e613294565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461248d9034613186565b6124979190613172565b90508060136000601185815481106124b1576124b1613294565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906124e590849061315a565b909155508291506124f7905081613223565b915050612439565b61250983836126f7565b61251660008484846125ea565b610d835760405162461bcd60e51b815260040161094490612fb4565b6001600160a01b03831661258d5761258881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6125b0565b816001600160a01b0316836001600160a01b0316146125b0576125b08382612845565b6001600160a01b0382166125c757610d83816128e2565b826001600160a01b0316826001600160a01b031614610d8357610d838282612991565b60006001600160a01b0384163b156126ec57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061262e903390899088908890600401612f64565b602060405180830381600087803b15801561264857600080fd5b505af1925050508015612678575060408051601f3d908101601f1916820190925261267591810190612e73565b60015b6126d2573d8080156126a6576040519150601f19603f3d011682016040523d82523d6000602084013e6126ab565b606091505b5080516126ca5760405162461bcd60e51b815260040161094490612fb4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612100565b506001949350505050565b6001600160a01b03821661274d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610944565b6000818152600260205260409020546001600160a01b0316156127b25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610944565b6127be60008383612532565b6001600160a01b03821660009081526003602052604081208054600192906127e790849061315a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612852846111ba565b61285c91906131a5565b6000838152600760205260409020549091508082146128af576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906128f4906001906131a5565b6000838152600960205260408120546008805493945090928490811061291c5761291c613294565b90600052602060002001549050806008838154811061293d5761293d613294565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806129755761297561327e565b6001900381819060005260206000200160009055905550505050565b600061299c836111ba565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054828255906000526020600020908101928215612a2a579160200282015b82811115612a2a57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906129f5565b50612a36929150612aae565b5090565b828054612a46906131e8565b90600052602060002090601f016020900481019282612a685760008555612a2a565b82601f10612a815782800160ff19823516178555612a2a565b82800160010185558215612a2a579182015b82811115612a2a578235825591602001919060010190612a93565b5b80821115612a365760008155600101612aaf565b80356001600160a01b0381168114612ada57600080fd5b919050565b600082601f830112612af057600080fd5b81356020612b05612b0083613136565b613105565b80838252828201915082860187848660051b8901011115612b2557600080fd5b60005b85811015612b4457813584529284019290840190600101612b28565b5090979650505050505050565b80358015158114612ada57600080fd5b600060208284031215612b7357600080fd5b6118cf82612ac3565b60008060408385031215612b8f57600080fd5b612b9883612ac3565b9150612ba660208401612ac3565b90509250929050565b600080600060608486031215612bc457600080fd5b612bcd84612ac3565b9250612bdb60208501612ac3565b9150604084013590509250925092565b60008060008060808587031215612c0157600080fd5b612c0a85612ac3565b93506020612c19818701612ac3565b935060408601359250606086013567ffffffffffffffff80821115612c3d57600080fd5b818801915088601f830112612c5157600080fd5b813581811115612c6357612c636132aa565b612c75601f8201601f19168501613105565b91508082528984828501011115612c8b57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612cbe57600080fd5b612cc783612ac3565b9150612ba660208401612b51565b60008060408385031215612ce857600080fd5b612cf183612ac3565b946020939093013593505050565b60008060208385031215612d1257600080fd5b823567ffffffffffffffff80821115612d2a57600080fd5b818501915085601f830112612d3e57600080fd5b813581811115612d4d57600080fd5b8660208260051b8501011115612d6257600080fd5b60209290920196919550909350505050565b60008060408385031215612d8757600080fd5b823567ffffffffffffffff80821115612d9f57600080fd5b818501915085601f830112612db357600080fd5b81356020612dc3612b0083613136565b8083825282820191508286018a848660051b8901011115612de357600080fd5b600096505b84871015612e0d57612df981612ac3565b835260019690960195918301918301612de8565b5096505086013592505080821115612e2457600080fd5b50612e3185828601612adf565b9150509250929050565b600060208284031215612e4d57600080fd5b6118cf82612b51565b600060208284031215612e6857600080fd5b81356118cf816132c0565b600060208284031215612e8557600080fd5b81516118cf816132c0565b60008060208385031215612ea357600080fd5b823567ffffffffffffffff80821115612ebb57600080fd5b818501915085601f830112612ecf57600080fd5b813581811115612ede57600080fd5b866020828501011115612d6257600080fd5b600060208284031215612f0257600080fd5b5035919050565b60008151808452612f218160208601602086016131bc565b601f01601f19169290920160200192915050565b60008351612f478184602088016131bc565b835190830190612f5b8183602088016131bc565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f9790830184612f09565b9695505050505050565b6020815260006118cf6020830184612f09565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f507572636861736520776f756c6420657863656564205055424c49435f434f55604082015261139560f21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601b908201527f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561312e5761312e6132aa565b604052919050565b600067ffffffffffffffff821115613150576131506132aa565b5060051b60200190565b6000821982111561316d5761316d613252565b500190565b60008261318157613181613268565b500490565b60008160001904831182151516156131a0576131a0613252565b500290565b6000828210156131b7576131b7613252565b500390565b60005b838110156131d75781810151838201526020016131bf565b838111156117185750506000910152565b600181811c908216806131fc57607f821691505b6020821081141561321d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561323757613237613252565b5060010190565b60008261324d5761324d613268565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b0857600080fdfea2646970667358221220cc4a94515a89885a5c4da75c123970e9ce4ffe343b4e24a2b42b316fbc6a3a6c64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000094d696e746c696e6773000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094d494e544c494e47530000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102c85760003560e01c8063715018a611610175578063b88d4fde116100dc578063e6a5931e11610095578063efef39a11161006f578063efef39a114610895578063f23347f5146108a8578063f2fde38b146108bb578063faf924cf146108db57600080fd5b8063e6a5931e14610821578063e8a3d48514610837578063e985e9c51461084c57600080fd5b8063b88d4fde1461077f578063bd70b4581461079f578063c87b56dd146107b5578063d06dfac6146107d5578063d6f407c71461080b578063d75e61101461079f57600080fd5b80638d859f3e1161012e5780638d859f3e146106d15780638da5cb5b146106ec578063938e3d7b1461070a57806395d89b411461072a578063a22cb4651461073f578063a51312c81461075f57600080fd5b8063715018a614610631578063718bc4af146106465780637263cfe21461066657806377163c1d146106865780637a6685f11461069b5780637f44ab2f146106bb57600080fd5b80632750fc78116102345780634f6ccce7116101ed57806362861d0b116101c757806362861d0b146105bc5780636352211e146105d15780636e83843a146105f157806370a082311461061157600080fd5b80634f6ccce714610546578063551a79671461056657806355f804b31461059c57600080fd5b80632750fc781461047757806329fc6bae146104975780632f745c59146104b85780633a065892146104d85780633ccfd60b1461051157806342842e0e1461052657600080fd5b8063095ea7b311610286578063095ea7b3146103c157806315336f80146103e1578063163e1e611461040157806318160ddd1461042157806322f3e2d41461043657806323b872dd1461045757600080fd5b806208ffdd146102cd57806301ceb53a1461030057806301ffc9a7146103175780630382ab641461034757806306fdde0314610367578063081812fc14610389575b600080fd5b3480156102d957600080fd5b506102ed6102e8366004612b61565b6108f0565b6040519081526020015b60405180910390f35b34801561030c57600080fd5b50610315610969565b005b34801561032357600080fd5b50610337610332366004612e56565b610a15565b60405190151581526020016102f7565b34801561035357600080fd5b50610315610362366004612d74565b610a40565b34801561037357600080fd5b5061037c610b4b565b6040516102f79190612fa1565b34801561039557600080fd5b506103a96103a4366004612ef0565b610bdd565b6040516001600160a01b0390911681526020016102f7565b3480156103cd57600080fd5b506103156103dc366004612cd5565b610c72565b3480156103ed57600080fd5b506103156103fc366004612e90565b610d88565b34801561040d57600080fd5b5061031561041c366004612cff565b610dbe565b34801561042d57600080fd5b506008546102ed565b34801561044257600080fd5b50600a5461033790600160a01b900460ff1681565b34801561046357600080fd5b50610315610472366004612baf565b610eee565b34801561048357600080fd5b50610315610492366004612e3b565b610f1f565b3480156104a357600080fd5b50600a5461033790600160a81b900460ff1681565b3480156104c457600080fd5b506102ed6104d3366004612cd5565b610f67565b3480156104e457600080fd5b506103376104f3366004612b61565b6001600160a01b03166000908152600f602052604090205460ff1690565b34801561051d57600080fd5b50610315610ffd565b34801561053257600080fd5b50610315610541366004612baf565b611029565b34801561055257600080fd5b506102ed610561366004612ef0565b611044565b34801561057257600080fd5b506102ed610581366004612b61565b6001600160a01b031660009081526013602052604090205490565b3480156105a857600080fd5b506103156105b7366004612e90565b6110d7565b3480156105c857600080fd5b506102ed600081565b3480156105dd57600080fd5b506103a96105ec366004612ef0565b61110d565b3480156105fd57600080fd5b5061031561060c366004612e90565b611184565b34801561061d57600080fd5b506102ed61062c366004612b61565b6111ba565b34801561063d57600080fd5b50610315611241565b34801561065257600080fd5b50610315610661366004612e3b565b611275565b34801561067257600080fd5b50610315610681366004612cff565b6112bd565b34801561069257600080fd5b506102ed611481565b3480156106a757600080fd5b506103156106b6366004612ef0565b611491565b3480156106c757600080fd5b506102ed600c5481565b3480156106dd57600080fd5b506102ed66f523226980800081565b3480156106f857600080fd5b50600a546001600160a01b03166103a9565b34801561071657600080fd5b50610315610725366004612e90565b6114c0565b34801561073657600080fd5b5061037c6114f6565b34801561074b57600080fd5b5061031561075a366004612cab565b611505565b34801561076b57600080fd5b5061031561077a366004612cff565b6115ca565b34801561078b57600080fd5b5061031561079a366004612beb565b6116e6565b3480156107ab57600080fd5b506102ed610d0581565b3480156107c157600080fd5b5061037c6107d0366004612ef0565b61171e565b3480156107e157600080fd5b506102ed6107f0366004612b61565b6001600160a01b031660009081526012602052604090205490565b34801561081757600080fd5b506102ed600d5481565b34801561082d57600080fd5b506102ed600e5481565b34801561084357600080fd5b5061037c6118d6565b34801561085857600080fd5b50610337610867366004612b7c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6103156108a3366004612ef0565b6118e5565b6103156108b6366004612ef0565b611b0b565b3480156108c757600080fd5b506103156108d6366004612b61565b611e13565b3480156108e757600080fd5b5061037c611eab565b60006001600160a01b03821661094d5760405162461bcd60e51b815260206004820152601e60248201527f5a65726f2061646472657373206e6f74206f6e20416c6c6f77204c697374000060448201526064015b60405180910390fd5b506001600160a01b031660009081526010602052604090205490565b336000908152601260205260409020546109d05760405162461bcd60e51b815260206004820152602260248201527f4f6e6c7920616e67656c732063616e2063616c6c20746869732066756e63746960448201526137b760f11b6064820152608401610944565b33600081815260136020526040808220805490839055905190929183156108fc02918491818181858888f19350505050158015610a11573d6000803e3d6000fd5b5050565b60006001600160e01b0319821663780e9d6360e01b1480610a3a5750610a3a82611f39565b92915050565b600a546001600160a01b03163314610a6a5760405162461bcd60e51b815260040161094490613048565b60145460ff1615610a7a57600080fd5b8151610a8d9060119060208501906129d5565b506000805b601154811015610b2b57828181518110610aae57610aae613294565b602002602001015182610ac1919061315a565b9150828181518110610ad557610ad5613294565b60200260200101516012600060118481548110610af457610af4613294565b60009182526020808320909101546001600160a01b0316835282019290925260400190205580610b2381613223565b915050610a92565b5080606414610b3957600080fd5b50506014805460ff1916600117905550565b606060008054610b5a906131e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b86906131e8565b8015610bd35780601f10610ba857610100808354040283529160200191610bd3565b820191906000526020600020905b815481529060010190602001808311610bb657829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610c565760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610944565b506000908152600460205260409020546001600160a01b031690565b6000610c7d8261110d565b9050806001600160a01b0316836001600160a01b03161415610ceb5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610944565b336001600160a01b0382161480610d075750610d078133610867565b610d795760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610944565b610d838383611f89565b505050565b600a546001600160a01b03163314610db25760405162461bcd60e51b815260040161094490613048565b610d83600b8383612a3a565b600a546001600160a01b03163314610de85760405162461bcd60e51b815260040161094490613048565b610df5610d05600061315a565b60085410610e155760405162461bcd60e51b8152600401610944906130ce565b600d54600090610e2690839061315a565b1115610e745760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420656e6f75676820746f6b656e73206c65667420746f206769667400006044820152606401610944565b60005b81811015610d83576000600d546001610e90919061315a565b90506001600d6000828254610ea5919061315a565b90915550610edb9050848484818110610ec057610ec0613294565b9050602002016020810190610ed59190612b61565b82611ff7565b5080610ee681613223565b915050610e77565b610ef83382612011565b610f145760405162461bcd60e51b81526004016109449061307d565b610d83838383612108565b600a546001600160a01b03163314610f495760405162461bcd60e51b815260040161094490613048565b600a8054911515600160a01b0260ff60a01b19909216919091179055565b6000610f72836111ba565b8210610fd45760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610944565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110275760405162461bcd60e51b815260040161094490613048565b565b610d83838383604051806020016040528060008152506116e6565b600061104f60085490565b82106110b25760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610944565b600882815481106110c5576110c5613294565b90600052602060002001549050919050565b600a546001600160a01b031633146111015760405162461bcd60e51b815260040161094490613048565b610d8360168383612a3a565b6000818152600260205260408120546001600160a01b031680610a3a5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610944565b600a546001600160a01b031633146111ae5760405162461bcd60e51b815260040161094490613048565b610d8360178383612a3a565b60006001600160a01b0382166112255760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610944565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b0316331461126b5760405162461bcd60e51b815260040161094490613048565b61102760006122b3565b600a546001600160a01b0316331461129f5760405162461bcd60e51b815260040161094490613048565b600a8054911515600160a81b0260ff60a81b19909216919091179055565b600a546001600160a01b031633146112e75760405162461bcd60e51b815260040161094490613048565b60005b81811015610d8357600083838381811061130657611306613294565b905060200201602081019061131b9190612b61565b6001600160a01b031614156113725760405162461bcd60e51b815260206004820152601a60248201527f43616e27742061646420746865206e756c6c20616464726573730000000000006044820152606401610944565b6001600f600085858581811061138a5761138a613294565b905060200201602081019061139f9190612b61565b6001600160a01b0316815260208101919091526040016000908120805460ff1916921515929092179091556010818585858181106113df576113df613294565b90506020020160208101906113f49190612b61565b6001600160a01b03166001600160a01b03168152602001908152602001600020541161142157600061146e565b6010600084848481811061143757611437613294565b905060200201602081019061144c9190612b61565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b508061147981613223565b9150506112ea565b61148e610d05600061315a565b81565b600a546001600160a01b031633146114bb5760405162461bcd60e51b815260040161094490613048565b600c55565b600a546001600160a01b031633146114ea5760405162461bcd60e51b815260040161094490613048565b610d8360158383612a3a565b606060018054610b5a906131e8565b6001600160a01b03821633141561155e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610944565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600a546001600160a01b031633146115f45760405162461bcd60e51b815260040161094490613048565b60005b81811015610d8357600083838381811061161357611613613294565b90506020020160208101906116289190612b61565b6001600160a01b0316141561167f5760405162461bcd60e51b815260206004820152601a60248201527f43616e27742061646420746865206e756c6c20616464726573730000000000006044820152606401610944565b6000600f600085858581811061169757611697613294565b90506020020160208101906116ac9190612b61565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806116de81613223565b9150506115f7565b6116f03383612011565b61170c5760405162461bcd60e51b81526004016109449061307d565b61171884848484612305565b50505050565b6000818152600260205260409020546060906001600160a01b031661177c5760405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606401610944565b60006017805461178b906131e8565b80601f01602080910402602001604051908101604052809291908181526020018280546117b7906131e8565b80156118045780601f106117d957610100808354040283529160200191611804565b820191906000526020600020905b8154815290600101906020018083116117e757829003601f168201915b5050505050905060008151116118a45760168054611821906131e8565b80601f016020809104026020016040519081016040528092919081815260200182805461184d906131e8565b801561189a5780601f1061186f5761010080835404028352916020019161189a565b820191906000526020600020905b81548152906001019060200180831161187d57829003601f168201915b50505050506118cf565b806118ae84612338565b6040516020016118bf929190612f35565b6040516020818303038152906040525b9392505050565b606060158054610b5a906131e8565b600a54600160a01b900460ff166119375760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b6044820152606401610944565b600a54600160a81b900460ff16156119915760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920616c6c6f77696e672066726f6d20416c6c6f77204c6973740000006044820152606401610944565b61199e610d05600061315a565b600854106119be5760405162461bcd60e51b8152600401610944906130ce565b610d05811115611a105760405162461bcd60e51b815260206004820152601b60248201527f576f756c64206578636565642050555243484153455f4c494d495400000000006044820152606401610944565b610d05600e5410611a335760405162461bcd60e51b815260040161094490613006565b34611a458266f5232269808000613186565b1115611a935760405162461bcd60e51b815260206004820152601c60248201527f45544820616d6f756e74206973206e6f742073756666696369656e74000000006044820152606401610944565b60005b81811015611aff57610d05600e541015611aed576000600e546000611abb919061315a565b611ac690600161315a565b90506001600e6000828254611adb919061315a565b90915550611aeb90503382611ff7565b505b80611af781613223565b915050611a96565b50611b08612436565b50565b600a54600160a01b900460ff16611b5d5760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b6044820152606401610944565b600a54600160a81b900460ff16611bb65760405162461bcd60e51b815260206004820152601860248201527f416c6c6f77204c697374206973206e6f742061637469766500000000000000006044820152606401610944565b336000908152600f602052604090205460ff16611c155760405162461bcd60e51b815260206004820152601d60248201527f596f7520617265206e6f74206f6e2074686520416c6c6f77204c6973740000006044820152606401610944565b611c22610d05600061315a565b60085410611c425760405162461bcd60e51b8152600401610944906130ce565b600c54811115611c945760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e736044820152606401610944565b610d0581600e54611ca5919061315a565b1115611cc35760405162461bcd60e51b815260040161094490613006565b600c5433600090815260106020526040902054611ce190839061315a565b1115611d2f5760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610944565b34611d418266f5232269808000613186565b1115611d8f5760405162461bcd60e51b815260206004820152601c60248201527f45544820616d6f756e74206973206e6f742073756666696369656e74000000006044820152606401610944565b60005b81811015610a11576000600e546000611dab919061315a565b611db690600161315a565b90506001600e6000828254611dcb919061315a565b9091555050336000908152601060205260408120805460019290611df090849061315a565b90915550611e0090503382611ff7565b5080611e0b81613223565b915050611d92565b600a546001600160a01b03163314611e3d5760405162461bcd60e51b815260040161094490613048565b6001600160a01b038116611ea25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610944565b611b08816122b3565b600b8054611eb8906131e8565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee4906131e8565b8015611f315780601f10611f0657610100808354040283529160200191611f31565b820191906000526020600020905b815481529060010190602001808311611f1457829003601f168201915b505050505081565b60006001600160e01b031982166380ac58cd60e01b1480611f6a57506001600160e01b03198216635b5e139f60e01b145b80610a3a57506301ffc9a760e01b6001600160e01b0319831614610a3a565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611fbe8261110d565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610a118282604051806020016040528060008152506124ff565b6000818152600260205260408120546001600160a01b031661208a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610944565b60006120958361110d565b9050806001600160a01b0316846001600160a01b031614806120d05750836001600160a01b03166120c584610bdd565b6001600160a01b0316145b8061210057506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661211b8261110d565b6001600160a01b0316146121835760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610944565b6001600160a01b0382166121e55760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610944565b6121f0838383612532565b6121fb600082611f89565b6001600160a01b03831660009081526003602052604081208054600192906122249084906131a5565b90915550506001600160a01b038216600090815260036020526040812080546001929061225290849061315a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612310848484612108565b61231c848484846125ea565b6117185760405162461bcd60e51b815260040161094490612fb4565b60608161235c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612386578061237081613223565b915061237f9050600a83613172565b9150612360565b60008167ffffffffffffffff8111156123a1576123a16132aa565b6040519080825280601f01601f1916602001820160405280156123cb576020820181803683370190505b5090505b8415612100576123e06001836131a5565b91506123ed600a8661323e565b6123f890603061315a565b60f81b81838151811061240d5761240d613294565b60200101906001600160f81b031916908160001a90535061242f600a86613172565b94506123cf565b60005b601154811015611b085760006064601260006011858154811061245e5761245e613294565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461248d9034613186565b6124979190613172565b90508060136000601185815481106124b1576124b1613294565b60009182526020808320909101546001600160a01b03168352820192909252604001812080549091906124e590849061315a565b909155508291506124f7905081613223565b915050612439565b61250983836126f7565b61251660008484846125ea565b610d835760405162461bcd60e51b815260040161094490612fb4565b6001600160a01b03831661258d5761258881600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6125b0565b816001600160a01b0316836001600160a01b0316146125b0576125b08382612845565b6001600160a01b0382166125c757610d83816128e2565b826001600160a01b0316826001600160a01b031614610d8357610d838282612991565b60006001600160a01b0384163b156126ec57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061262e903390899088908890600401612f64565b602060405180830381600087803b15801561264857600080fd5b505af1925050508015612678575060408051601f3d908101601f1916820190925261267591810190612e73565b60015b6126d2573d8080156126a6576040519150601f19603f3d011682016040523d82523d6000602084013e6126ab565b606091505b5080516126ca5760405162461bcd60e51b815260040161094490612fb4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612100565b506001949350505050565b6001600160a01b03821661274d5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610944565b6000818152600260205260409020546001600160a01b0316156127b25760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610944565b6127be60008383612532565b6001600160a01b03821660009081526003602052604081208054600192906127e790849061315a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612852846111ba565b61285c91906131a5565b6000838152600760205260409020549091508082146128af576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906128f4906001906131a5565b6000838152600960205260408120546008805493945090928490811061291c5761291c613294565b90600052602060002001549050806008838154811061293d5761293d613294565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806129755761297561327e565b6001900381819060005260206000200160009055905550505050565b600061299c836111ba565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054828255906000526020600020908101928215612a2a579160200282015b82811115612a2a57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906129f5565b50612a36929150612aae565b5090565b828054612a46906131e8565b90600052602060002090601f016020900481019282612a685760008555612a2a565b82601f10612a815782800160ff19823516178555612a2a565b82800160010185558215612a2a579182015b82811115612a2a578235825591602001919060010190612a93565b5b80821115612a365760008155600101612aaf565b80356001600160a01b0381168114612ada57600080fd5b919050565b600082601f830112612af057600080fd5b81356020612b05612b0083613136565b613105565b80838252828201915082860187848660051b8901011115612b2557600080fd5b60005b85811015612b4457813584529284019290840190600101612b28565b5090979650505050505050565b80358015158114612ada57600080fd5b600060208284031215612b7357600080fd5b6118cf82612ac3565b60008060408385031215612b8f57600080fd5b612b9883612ac3565b9150612ba660208401612ac3565b90509250929050565b600080600060608486031215612bc457600080fd5b612bcd84612ac3565b9250612bdb60208501612ac3565b9150604084013590509250925092565b60008060008060808587031215612c0157600080fd5b612c0a85612ac3565b93506020612c19818701612ac3565b935060408601359250606086013567ffffffffffffffff80821115612c3d57600080fd5b818801915088601f830112612c5157600080fd5b813581811115612c6357612c636132aa565b612c75601f8201601f19168501613105565b91508082528984828501011115612c8b57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612cbe57600080fd5b612cc783612ac3565b9150612ba660208401612b51565b60008060408385031215612ce857600080fd5b612cf183612ac3565b946020939093013593505050565b60008060208385031215612d1257600080fd5b823567ffffffffffffffff80821115612d2a57600080fd5b818501915085601f830112612d3e57600080fd5b813581811115612d4d57600080fd5b8660208260051b8501011115612d6257600080fd5b60209290920196919550909350505050565b60008060408385031215612d8757600080fd5b823567ffffffffffffffff80821115612d9f57600080fd5b818501915085601f830112612db357600080fd5b81356020612dc3612b0083613136565b8083825282820191508286018a848660051b8901011115612de357600080fd5b600096505b84871015612e0d57612df981612ac3565b835260019690960195918301918301612de8565b5096505086013592505080821115612e2457600080fd5b50612e3185828601612adf565b9150509250929050565b600060208284031215612e4d57600080fd5b6118cf82612b51565b600060208284031215612e6857600080fd5b81356118cf816132c0565b600060208284031215612e8557600080fd5b81516118cf816132c0565b60008060208385031215612ea357600080fd5b823567ffffffffffffffff80821115612ebb57600080fd5b818501915085601f830112612ecf57600080fd5b813581811115612ede57600080fd5b866020828501011115612d6257600080fd5b600060208284031215612f0257600080fd5b5035919050565b60008151808452612f218160208601602086016131bc565b601f01601f19169290920160200192915050565b60008351612f478184602088016131bc565b835190830190612f5b8183602088016131bc565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f9790830184612f09565b9695505050505050565b6020815260006118cf6020830184612f09565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526022908201527f507572636861736520776f756c6420657863656564205055424c49435f434f55604082015261139560f21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601b908201527f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561312e5761312e6132aa565b604052919050565b600067ffffffffffffffff821115613150576131506132aa565b5060051b60200190565b6000821982111561316d5761316d613252565b500190565b60008261318157613181613268565b500490565b60008160001904831182151516156131a0576131a0613252565b500290565b6000828210156131b7576131b7613252565b500390565b60005b838110156131d75781810151838201526020016131bf565b838111156117185750506000910152565b600181811c908216806131fc57607f821691505b6020821081141561321d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561323757613237613252565b5060010190565b60008261324d5761324d613268565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114611b0857600080fdfea2646970667358221220cc4a94515a89885a5c4da75c123970e9ce4ffe343b4e24a2b42b316fbc6a3a6c64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000094d696e746c696e6773000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094d494e544c494e47530000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Mintlings
Arg [1] : symbol (string): MINTLINGS

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [3] : 4d696e746c696e67730000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 4d494e544c494e47530000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

202:7878:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2385:194;;;;;;;;;;-1:-1:-1;2385:194:12;;;;;:::i;:::-;;:::i;:::-;;;20806:25:15;;;20794:2;20779:18;2385:194:12;;;;;;;;6544:196;;;;;;;;;;;;;:::i;:::-;;907:222:4;;;;;;;;;;-1:-1:-1;907:222:4;;;;;:::i;:::-;;:::i;:::-;;;8183:14:15;;8176:22;8158:41;;8146:2;8131:18;907:222:4;8018:187:15;6744:455:12;;;;;;;;;;-1:-1:-1;6744:455:12;;;;;:::i;:::-;;:::i;2342:98:3:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3853:217::-;;;;;;;;;;-1:-1:-1;3853:217:3;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7481:32:15;;;7463:51;;7451:2;7436:18;3853:217:3;7317:203:15;3391:401:3;;;;;;;;;;-1:-1:-1;3391:401:3;;;;;:::i;:::-;;:::i;5971:105:12:-;;;;;;;;;;-1:-1:-1;5971:105:12;;;;;:::i;:::-;;:::i;5162:454::-;;;;;;;;;;-1:-1:-1;5162:454:12;;;;;:::i;:::-;;:::i;1532:111:4:-;;;;;;;;;;-1:-1:-1;1619:10:4;:17;1532:111;;567:28:12;;;;;;;;;;-1:-1:-1;567:28:12;;;;-1:-1:-1;;;567:28:12;;;;;;4717:330:3;;;;;;;;;;-1:-1:-1;4717:330:3;;;;;:::i;:::-;;:::i;5620:96:12:-;;;;;;;;;;-1:-1:-1;5620:96:12;;;;;:::i;:::-;;:::i;599:37::-;;;;;;;;;;-1:-1:-1;599:37:12;;;;-1:-1:-1;;;599:37:12;;;;;;1208:253:4;;;;;;;;;;-1:-1:-1;1208:253:4;;;;;:::i;:::-;;:::i;1787:107:12:-;;;;;;;;;;-1:-1:-1;1787:107:12;;;;;:::i;:::-;-1:-1:-1;;;;;1873:16:12;1854:4;1873:16;;;:10;:16;;;;;;;;;1787:107;6080:50;;;;;;;;;;;;;:::i;5113:179:3:-;;;;;;;;;;-1:-1:-1;5113:179:3;;;;;:::i;:::-;;:::i;1715:230:4:-;;;;;;;;;;-1:-1:-1;1715:230:4;;;;;:::i;:::-;;:::i;6290:117:12:-;;;;;;;;;;-1:-1:-1;6290:117:12;;;;;:::i;:::-;-1:-1:-1;;;;;6379:23:12;6355:7;6379:23;;;:9;:23;;;;;;;6290:117;7309:99;;;;;;;;;;-1:-1:-1;7309:99:12;;;;;:::i;:::-;;:::i;316:38::-;;;;;;;;;;;;353:1;316:38;;2045:235:3;;;;;;;;;;-1:-1:-1;2045:235:3;;;;;:::i;:::-;;:::i;7412:139:12:-;;;;;;;;;;-1:-1:-1;7412:139:12;;;;;:::i;:::-;;:::i;1783:205:3:-;;;;;;;;;;-1:-1:-1;1783:205:3;;;;;:::i;:::-;;:::i;1597:92:13:-;;;;;;;;;;;;;:::i;5720:132:12:-;;;;;;;;;;-1:-1:-1;5720:132:12;;;;;:::i;:::-;;:::i;1315:468::-;;;;;;;;;;-1:-1:-1;1315:468:12;;;;;:::i;:::-;;:::i;405:61::-;;;;;;;;;;;;;:::i;5856:111::-;;;;;;;;;;-1:-1:-1;5856:111:12;;;;;:::i;:::-;;:::i;664:36::-;;;;;;;;;;;;;;;;519:43;;;;;;;;;;;;551:11;519:43;;965:85:13;;;;;;;;;;-1:-1:-1;1037:6:13;;-1:-1:-1;;;;;1037:6:13;965:85;;7203:102:12;;;;;;;;;;-1:-1:-1;7203:102:12;;;;;:::i;:::-;;:::i;2504::3:-;;;;;;;;;;;;;:::i;4137:290::-;;;;;;;;;;-1:-1:-1;4137:290:3;;;;;:::i;:::-;;:::i;1898:339:12:-;;;;;;;;;;-1:-1:-1;1898:339:12;;;;;:::i;:::-;;:::i;5358:320:3:-;;;;;;;;;;-1:-1:-1;5358:320:3;;;;;:::i;:::-;;:::i;358:43:12:-;;;;;;;;;;;;397:4;358:43;;7657:421;;;;;;;;;;-1:-1:-1;7657:421:12;;;;;:::i;:::-;;:::i;6411:129::-;;;;;;;;;;-1:-1:-1;6411:129:12;;;;;:::i;:::-;-1:-1:-1;;;;;6505:30:12;6481:7;6505:30;;;:16;:30;;;;;;;6411:129;779:30;;;;;;;;;;;;;;;;813:32;;;;;;;;;;;;;;;;7555:98;;;;;;;;;;;;;:::i;4493:162:3:-;;;;;;;;;;-1:-1:-1;4493:162:3;;;;;:::i;:::-;-1:-1:-1;;;;;4613:25:3;;;4590:4;4613:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;4493:162;2583:1262:12;;;;;;:::i;:::-;;:::i;4077:1081::-;;;;;;:::i;:::-;;:::i;1838:189:13:-;;;;;;;;;;-1:-1:-1;1838:189:13;;;;;:::i;:::-;;:::i;640:19:12:-;;;;;;;;;;;;;:::i;2385:194::-;2460:7;-1:-1:-1;;;;;2482:19:12;;2474:62;;;;-1:-1:-1;;;2474:62:12;;17072:2:15;2474:62:12;;;17054:21:15;17111:2;17091:18;;;17084:30;17150:32;17130:18;;;17123:60;17200:18;;2474:62:12;;;;;;;;;-1:-1:-1;;;;;;2550:24:12;;;;;:17;:24;;;;;;;2385:194::o;6544:196::-;665:10:1;6215:1:12;6182:30;;;:16;:30;;;;;;6163:109;;;;-1:-1:-1;;;6163:109:12;;10536:2:15;6163:109:12;;;10518:21:15;10575:2;10555:18;;;10548:30;10614:34;10594:18;;;10587:62;-1:-1:-1;;;10665:18:15;;;10658:32;10707:19;;6163:109:12;10334:398:15;6163:109:12;665:10:1;6596:22:12::1;6621:23:::0;;;:9:::1;:23;::::0;;;;;;;6653:27;;;;6689:46;;6621:23;;665:10:1;6689:46:12;::::1;;;::::0;6621:23;;6689:46;6596:22;6689:46;6621:23;665:10:1;6689:46:12;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;6588:152;6544:196::o:0;907:222:4:-;1009:4;-1:-1:-1;;;;;;1032:50:4;;-1:-1:-1;;;1032:50:4;;:90;;;1086:36;1110:11;1086:23;:36::i;:::-;1025:97;907:222;-1:-1:-1;;907:222:4:o;6744:455:12:-;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;6873:9:12::1;::::0;::::1;;6872:10;6864:19;;;::::0;::::1;;6890:16:::0;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;;6913:29;6958:6:::0;6953:175:::1;6974:6;:13:::0;6970:17;::::1;6953:175;;;7029:17;7047:1;7029:20;;;;;;;;:::i;:::-;;;;;;;7004:45;;;;;:::i;:::-;;;7101:17;7119:1;7101:20;;;;;;;;:::i;:::-;;;;;;;7059:16;:27;7076:6;7083:1;7076:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;7076:9:12::1;7059:27:::0;;;::::1;::::0;;;;;;;;:62;6989:3;::::1;::::0;::::1;:::i;:::-;;;;6953:175;;;;7142:21;7167:3;7142:28;7134:37;;;::::0;::::1;;-1:-1:-1::0;;7178:9:12::1;:16:::0;;-1:-1:-1;;7178:16:12::1;7190:4;7178:16;::::0;;-1:-1:-1;6744:455:12:o;2342:98:3:-;2396:13;2428:5;2421:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2342:98;:::o;3853:217::-;3929:7;7238:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7238:16:3;3948:73;;;;-1:-1:-1;;;3948:73:3;;16298:2:15;3948:73:3;;;16280:21:15;16337:2;16317:18;;;16310:30;16376:34;16356:18;;;16349:62;-1:-1:-1;;;16427:18:15;;;16420:42;16479:19;;3948:73:3;16096:408:15;3948:73:3;-1:-1:-1;4039:24:3;;;;:15;:24;;;;;;-1:-1:-1;;;;;4039:24:3;;3853:217::o;3391:401::-;3471:13;3487:23;3502:7;3487:14;:23::i;:::-;3471:39;;3534:5;-1:-1:-1;;;;;3528:11:3;:2;-1:-1:-1;;;;;3528:11:3;;;3520:57;;;;-1:-1:-1;;;3520:57:3;;18555:2:15;3520:57:3;;;18537:21:15;18594:2;18574:18;;;18567:30;18633:34;18613:18;;;18606:62;-1:-1:-1;;;18684:18:15;;;18677:31;18725:19;;3520:57:3;18353:397:15;3520:57:3;665:10:1;-1:-1:-1;;;;;3609:21:3;;;;:62;;-1:-1:-1;3634:37:3;3651:5;665:10:1;4493:162:3;:::i;3634:37::-;3588:165;;;;-1:-1:-1;;;3588:165:3;;14340:2:15;3588:165:3;;;14322:21:15;14379:2;14359:18;;;14352:30;14418:34;14398:18;;;14391:62;14489:26;14469:18;;;14462:54;14533:19;;3588:165:3;14138:420:15;3588:165:3;3764:21;3773:2;3777:7;3764:8;:21::i;:::-;3461:331;3391:401;;:::o;5971:105:12:-;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;6052:19:12::1;:5;6060:11:::0;;6052:19:::1;:::i;5162:454::-:0;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;441:25:12::1;397:4;353:1;441:25;:::i;:::-;1619:10:4::0;:17;5241:25:12::1;5233:65;;;;-1:-1:-1::0;;;5233:65:12::1;;;;;;;:::i;:::-;5312:15;::::0;353:1:::1;::::0;5312:27:::1;::::0;5330:2;;5312:27:::1;:::i;:::-;:41;;5304:84;;;::::0;-1:-1:-1;;;5304:84:12;;18196:2:15;5304:84:12::1;::::0;::::1;18178:21:15::0;18235:2;18215:18;;;18208:30;18274:32;18254:18;;;18247:60;18324:18;;5304:84:12::1;17994:354:15::0;5304:84:12::1;5399:9;5395:217;5414:13:::0;;::::1;5395:217;;;5506:15;5524;;5542:1;5524:19;;;;:::i;:::-;5506:37;;5571:1;5552:15;;:20;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;5580:25:12::1;::::0;-1:-1:-1;5590:2:12;;5593:1;5590:5;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5597:7;5580:9;:25::i;:::-;-1:-1:-1::0;5429:3:12;::::1;::::0;::::1;:::i;:::-;;;;5395:217;;4717:330:3::0;4906:41;665:10:1;4939:7:3;4906:18;:41::i;:::-;4898:103;;;;-1:-1:-1;;;4898:103:3;;;;;;;:::i;:::-;5012:28;5022:4;5028:2;5032:7;5012:9;:28::i;5620:96:12:-;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;5691:8:12::1;:20:::0;;;::::1;;-1:-1:-1::0;;;5691:20:12::1;-1:-1:-1::0;;;;5691:20:12;;::::1;::::0;;;::::1;::::0;;5620:96::o;1208:253:4:-;1305:7;1340:23;1357:5;1340:16;:23::i;:::-;1332:5;:31;1324:87;;;;-1:-1:-1;;;1324:87:4;;9347:2:15;1324:87:4;;;9329:21:15;9386:2;9366:18;;;9359:30;9425:34;9405:18;;;9398:62;-1:-1:-1;;;9476:18:15;;;9469:41;9527:19;;1324:87:4;9145:407:15;1324:87:4;-1:-1:-1;;;;;;1428:19:4;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;1208:253::o;6080:50:12:-;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;6080:50:12:o;5113:179:3:-;5246:39;5263:4;5269:2;5273:7;5246:39;;;;;;;;;;;;:16;:39::i;1715:230:4:-;1790:7;1825:30;1619:10;:17;;1532:111;1825:30;1817:5;:38;1809:95;;;;-1:-1:-1;;;1809:95:4;;19375:2:15;1809:95:4;;;19357:21:15;19414:2;19394:18;;;19387:30;19453:34;19433:18;;;19426:62;-1:-1:-1;;;19504:18:15;;;19497:42;19556:19;;1809:95:4;19173:408:15;1809:95:4;1921:10;1932:5;1921:17;;;;;;;;:::i;:::-;;;;;;;;;1914:24;;1715:230;;;:::o;7309:99:12:-;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;7384:19:12::1;:13;7400:3:::0;;7384:19:::1;:::i;2045:235:3:-:0;2117:7;2152:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2152:16:3;2186:19;2178:73;;;;-1:-1:-1;;;2178:73:3;;15176:2:15;2178:73:3;;;15158:21:15;15215:2;15195:18;;;15188:30;15254:34;15234:18;;;15227:62;-1:-1:-1;;;15305:18:15;;;15298:39;15354:19;;2178:73:3;14974:405:15;7412:139:12;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;7507:39:12::1;:21;7531:15:::0;;7507:39:::1;:::i;1783:205:3:-:0;1855:7;-1:-1:-1;;;;;1882:19:3;;1874:74;;;;-1:-1:-1;;;1874:74:3;;14765:2:15;1874:74:3;;;14747:21:15;14804:2;14784:18;;;14777:30;14843:34;14823:18;;;14816:62;-1:-1:-1;;;14894:18:15;;;14887:40;14944:19;;1874:74:3;14563:406:15;1874:74:3;-1:-1:-1;;;;;;1965:16:3;;;;;:9;:16;;;;;;;1783:205::o;1597:92:13:-;1037:6;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;1661:21:::1;1679:1;1661:9;:21::i;5720:132:12:-:0;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;5809:17:12::1;:38:::0;;;::::1;;-1:-1:-1::0;;;5809:38:12::1;-1:-1:-1::0;;;;5809:38:12;;::::1;::::0;;;::::1;::::0;;5720:132::o;1315:468::-;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;1408:9:12::1;1403:376;1423:20:::0;;::::1;1403:376;;;1490:1;1466:9:::0;;1476:1;1466:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1466:26:12::1;;;1458:65;;;::::0;-1:-1:-1;;;1458:65:12;;17431:2:15;1458:65:12::1;::::0;::::1;17413:21:15::0;17470:2;17450:18;;;17443:30;17509:28;17489:18;;;17482:56;17555:18;;1458:65:12::1;17229:350:15::0;1458:65:12::1;1559:4;1532:10;:24;1543:9;;1553:1;1543:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1532:24:12::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;1532:24:12;;;:31;;-1:-1:-1;;1532:31:12::1;::::0;::::1;;::::0;;;::::1;::::0;;;1699:17:::1;-1:-1:-1::0;1717:9:12;;1727:1;1717:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1699:31:12::1;-1:-1:-1::0;;;;;1699:31:12::1;;;;;;;;;;;;;:35;:73;;1771:1;1699:73;;;1737:17;:31;1755:9;;1765:1;1755:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1737:31:12::1;-1:-1:-1::0;;;;;1737:31:12::1;;;;;;;;;;;;;1699:73;-1:-1:-1::0;1445:3:12;::::1;::::0;::::1;:::i;:::-;;;;1403:376;;405:61:::0;441:25;397:4;353:1;441:25;:::i;:::-;405:61;:::o;5856:111::-;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;5936:16:12::1;:26:::0;5856:111::o;7203:102::-;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;7282:18:12::1;:12;7297:3:::0;;7282:18:::1;:::i;2504:102:3:-:0;2560:13;2592:7;2585:14;;;;;:::i;4137:290::-;-1:-1:-1;;;;;4239:24:3;;665:10:1;4239:24:3;;4231:62;;;;-1:-1:-1;;;4231:62:3;;12464:2:15;4231:62:3;;;12446:21:15;12503:2;12483:18;;;12476:30;12542:27;12522:18;;;12515:55;12587:18;;4231:62:3;12262:349:15;4231:62:3;665:10:1;4304:32:3;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;4304:42:3;;;;;;;;;;;;:53;;-1:-1:-1;;4304:53:3;;;;;;;;;;4372:48;;8158:41:15;;;4304:42:3;;665:10:1;4372:48:3;;8131:18:15;4372:48:3;;;;;;;4137:290;;:::o;1898:339:12:-;1037:6:13;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;1996:9:12::1;1991:242;2011:20:::0;;::::1;1991:242;;;2078:1;2054:9:::0;;2064:1;2054:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2054:26:12::1;;;2046:65;;;::::0;-1:-1:-1;;;2046:65:12;;17431:2:15;2046:65:12::1;::::0;::::1;17413:21:15::0;17470:2;17450:18;;;17443:30;17509:28;17489:18;;;17482:56;17555:18;;2046:65:12::1;17229:350:15::0;2046:65:12::1;2221:5;2194:10;:24;2205:9;;2215:1;2205:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2194:24:12::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2194:24:12;:32;;-1:-1:-1;;2194:32:12::1;::::0;::::1;;::::0;;;::::1;::::0;;2033:3;::::1;::::0;::::1;:::i;:::-;;;;1991:242;;5358:320:3::0;5527:41;665:10:1;5560:7:3;5527:18;:41::i;:::-;5519:103;;;;-1:-1:-1;;;5519:103:3;;;;;;;:::i;:::-;5632:39;5646:4;5652:2;5656:7;5665:5;5632:13;:39::i;:::-;5358:320;;;;:::o;7657:421:12:-;7215:4:3;7238:16;;;:7;:16;;;;;;7730:13:12;;-1:-1:-1;;;;;7238:16:3;7751:49:12;;;;-1:-1:-1;;;7751:49:12;;12818:2:15;7751:49:12;;;12800:21:15;12857:2;12837:18;;;12830:30;-1:-1:-1;;;12876:18:15;;;12869:50;12936:18;;7751:49:12;12616:344:15;7751:49:12;7882:29;7914:21;7882:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7980:1;7954:15;7948:29;:33;:125;;8060:13;7948:125;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8014:15;8031:18;:7;:16;:18::i;:::-;7997:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7948:125;7941:132;7657:421;-1:-1:-1;;;7657:421:12:o;7555:98::-;7608:13;7636:12;7629:19;;;;;:::i;2583:1262::-;2665:8;;-1:-1:-1;;;2665:8:12;;;;2657:43;;;;-1:-1:-1;;;2657:43:12;;15947:2:15;2657:43:12;;;15929:21:15;15986:2;15966:18;;;15959:30;-1:-1:-1;;;16005:18:15;;;15998:52;16067:18;;2657:43:12;15745:346:15;2657:43:12;2715:17;;-1:-1:-1;;;2715:17:12;;;;2714:18;2706:60;;;;-1:-1:-1;;;2706:60:12;;9759:2:15;2706:60:12;;;9741:21:15;9798:2;9778:18;;;9771:30;9837:31;9817:18;;;9810:59;9886:18;;2706:60:12;9557:353:15;2706:60:12;441:25;397:4;353:1;441:25;:::i;:::-;1619:10:4;:17;2780:25:12;2772:65;;;;-1:-1:-1;;;2772:65:12;;;;;;;:::i;:::-;511:4;2851:14;:32;;2843:72;;;;-1:-1:-1;;;2843:72:12;;11703:2:15;2843:72:12;;;11685:21:15;11742:2;11722:18;;;11715:30;11781:29;11761:18;;;11754:57;11828:18;;2843:72:12;11501:351:15;2843:72:12;397:4;3121:17;;:32;3113:79;;;;-1:-1:-1;;;3113:79:12;;;;;;;:::i;:::-;3232:9;3206:22;3214:14;551:11;3206:22;:::i;:::-;:35;;3198:76;;;;-1:-1:-1;;;3198:76:12;;13167:2:15;3198:76:12;;;13149:21:15;13206:2;13186:18;;;13179:30;13245;13225:18;;;13218:58;13293:18;;3198:76:12;12965:352:15;3198:76:12;3286:9;3281:541;3305:14;3301:1;:18;3281:541;;;397:4;3489:17;;:32;3485:331;;;3682:15;3713:17;;353:1;3700:30;;;;:::i;:::-;:34;;3733:1;3700:34;:::i;:::-;3682:52;;3766:1;3745:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;3777:30:12;;-1:-1:-1;3787:10:12;3799:7;3777:9;:30::i;:::-;3523:293;3485:331;3321:3;;;;:::i;:::-;;;;3281:541;;;;3828:12;:10;:12::i;:::-;2583:1262;:::o;4077:1081::-;4168:8;;-1:-1:-1;;;4168:8:12;;;;4160:43;;;;-1:-1:-1;;;4160:43:12;;15947:2:15;4160:43:12;;;15929:21:15;15986:2;15966:18;;;15959:30;-1:-1:-1;;;16005:18:15;;;15998:52;16067:18;;4160:43:12;15745:346:15;4160:43:12;4217:17;;-1:-1:-1;;;4217:17:12;;;;4209:54;;;;-1:-1:-1;;;4209:54:12;;8636:2:15;4209:54:12;;;8618:21:15;8675:2;8655:18;;;8648:30;8714:26;8694:18;;;8687:54;8758:18;;4209:54:12;8434:348:15;4209:54:12;4288:10;4277:22;;;;:10;:22;;;;;;;;4269:64;;;;-1:-1:-1;;;4269:64:12;;8989:2:15;4269:64:12;;;8971:21:15;9028:2;9008:18;;;9001:30;9067:31;9047:18;;;9040:59;9116:18;;4269:64:12;8787:353:15;4269:64:12;441:25;397:4;353:1;441:25;:::i;:::-;1619:10:4;:17;4347:25:12;4339:65;;;;-1:-1:-1;;;4339:65:12;;;;;;;:::i;:::-;4436:16;;4418:14;:34;;4410:79;;;;-1:-1:-1;;;4410:79:12;;20501:2:15;4410:79:12;;;20483:21:15;;;20520:18;;;20513:30;20579:34;20559:18;;;20552:62;20631:18;;4410:79:12;20299:356:15;4410:79:12;397:4;4523:14;4503:17;;:34;;;;:::i;:::-;:50;;4495:97;;;;-1:-1:-1;;;4495:97:12;;;;;;;:::i;:::-;4656:16;;4624:10;4606:29;;;;:17;:29;;;;;;:46;;4638:14;;4606:46;:::i;:::-;:66;;4598:107;;;;-1:-1:-1;;;4598:107:12;;19788:2:15;4598:107:12;;;19770:21:15;19827:2;19807:18;;;19800:30;19866;19846:18;;;19839:58;19914:18;;4598:107:12;19586:352:15;4598:107:12;4745:9;4719:22;4727:14;551:11;4719:22;:::i;:::-;:35;;4711:76;;;;-1:-1:-1;;;4711:76:12;;13167:2:15;4711:76:12;;;13149:21:15;13206:2;13186:18;;;13179:30;13245;13225:18;;;13218:58;13293:18;;4711:76:12;12965:352:15;4711:76:12;4799:9;4794:360;4818:14;4814:1;:18;4794:360;;;4984:15;5015:17;;353:1;5002:30;;;;:::i;:::-;:34;;5035:1;5002:34;:::i;:::-;4984:52;;5066:1;5045:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;5093:10:12;5075:29;;;;:17;:29;;;;;:34;;5108:1;;5075:29;:34;;5108:1;;5075:34;:::i;:::-;;;;-1:-1:-1;5117:30:12;;-1:-1:-1;5127:10:12;5139:7;5117:9;:30::i;:::-;-1:-1:-1;4834:3:12;;;;:::i;:::-;;;;4794:360;;1838:189:13;1037:6;;-1:-1:-1;;;;;1037:6:13;665:10:1;1177:23:13;1169:68;;;;-1:-1:-1;;;1169:68:13;;;;;;;:::i;:::-;-1:-1:-1;;;;;1926:22:13;::::1;1918:73;;;::::0;-1:-1:-1;;;1918:73:13;;10939:2:15;1918:73:13::1;::::0;::::1;10921:21:15::0;10978:2;10958:18;;;10951:30;11017:34;10997:18;;;10990:62;-1:-1:-1;;;11068:18:15;;;11061:36;11114:19;;1918:73:13::1;10737:402:15::0;1918:73:13::1;2001:19;2011:8;2001:9;:19::i;640::12:-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1424:300:3:-;1526:4;-1:-1:-1;;;;;;1561:40:3;;-1:-1:-1;;;1561:40:3;;:104;;-1:-1:-1;;;;;;;1617:48:3;;-1:-1:-1;;;1617:48:3;1561:104;:156;;;-1:-1:-1;;;;;;;;;;870:40:2;;;1681:36:3;762:155:2;11001:171:3;11075:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;11075:29:3;-1:-1:-1;;;;;11075:29:3;;;;;;;;:24;;11128:23;11075:24;11128:14;:23::i;:::-;-1:-1:-1;;;;;11119:46:3;;;;;;;;;;;11001:171;;:::o;8107:108::-;8182:26;8192:2;8196:7;8182:26;;;;;;;;;;;;:9;:26::i;7433:344::-;7526:4;7238:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7238:16:3;7542:73;;;;-1:-1:-1;;;7542:73:3;;13524:2:15;7542:73:3;;;13506:21:15;13563:2;13543:18;;;13536:30;13602:34;13582:18;;;13575:62;-1:-1:-1;;;13653:18:15;;;13646:42;13705:19;;7542:73:3;13322:408:15;7542:73:3;7625:13;7641:23;7656:7;7641:14;:23::i;:::-;7625:39;;7693:5;-1:-1:-1;;;;;7682:16:3;:7;-1:-1:-1;;;;;7682:16:3;;:51;;;;7726:7;-1:-1:-1;;;;;7702:31:3;:20;7714:7;7702:11;:20::i;:::-;-1:-1:-1;;;;;7702:31:3;;7682:51;:87;;;-1:-1:-1;;;;;;4613:25:3;;;4590:4;4613:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7737:32;7674:96;7433:344;-1:-1:-1;;;;7433:344:3:o;10330:560::-;10484:4;-1:-1:-1;;;;;10457:31:3;:23;10472:7;10457:14;:23::i;:::-;-1:-1:-1;;;;;10457:31:3;;10449:85;;;;-1:-1:-1;;;10449:85:3;;17786:2:15;10449:85:3;;;17768:21:15;17825:2;17805:18;;;17798:30;17864:34;17844:18;;;17837:62;-1:-1:-1;;;17915:18:15;;;17908:39;17964:19;;10449:85:3;17584:405:15;10449:85:3;-1:-1:-1;;;;;10552:16:3;;10544:65;;;;-1:-1:-1;;;10544:65:3;;12059:2:15;10544:65:3;;;12041:21:15;12098:2;12078:18;;;12071:30;12137:34;12117:18;;;12110:62;-1:-1:-1;;;12188:18:15;;;12181:34;12232:19;;10544:65:3;11857:400:15;10544:65:3;10620:39;10641:4;10647:2;10651:7;10620:20;:39::i;:::-;10721:29;10738:1;10742:7;10721:8;:29::i;:::-;-1:-1:-1;;;;;10761:15:3;;;;;;:9;:15;;;;;:20;;10780:1;;10761:15;:20;;10780:1;;10761:20;:::i;:::-;;;;-1:-1:-1;;;;;;;10791:13:3;;;;;;:9;:13;;;;;:18;;10808:1;;10791:13;:18;;10808:1;;10791:18;:::i;:::-;;;;-1:-1:-1;;10819:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;10819:21:3;-1:-1:-1;;;;;10819:21:3;;;;;;;;;10856:27;;10819:16;;10856:27;;;;;;;10330:560;;;:::o;2033:169:13:-;2107:6;;;-1:-1:-1;;;;;2123:17:13;;;-1:-1:-1;;;;;;2123:17:13;;;;;;;2155:40;;2107:6;;;2123:17;2107:6;;2155:40;;2088:16;;2155:40;2078:124;2033:169;:::o;6540:307:3:-;6691:28;6701:4;6707:2;6711:7;6691:9;:28::i;:::-;6737:48;6760:4;6766:2;6770:7;6779:5;6737:22;:48::i;:::-;6729:111;;;;-1:-1:-1;;;6729:111:3;;;;;;;:::i;275:703:14:-;331:13;548:10;544:51;;-1:-1:-1;;574:10:14;;;;;;;;;;;;-1:-1:-1;;;574:10:14;;;;;275:703::o;544:51::-;619:5;604:12;658:75;665:9;;658:75;;690:8;;;;:::i;:::-;;-1:-1:-1;712:10:14;;-1:-1:-1;720:2:14;712:10;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;764:17:14;;742:39;;791:150;798:10;;791:150;;824:11;834:1;824:11;;:::i;:::-;;-1:-1:-1;892:10:14;900:2;892:5;:10;:::i;:::-;879:24;;:2;:24;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;849:56:14;;;;;;;;-1:-1:-1;919:11:14;928:2;919:11;;:::i;:::-;;;791:150;;3849:224:12;3899:6;3894:175;3915:6;:13;3911:17;;3894:175;;;3943:18;4016:3;3985:16;:27;4002:6;4009:1;4002:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;4002:9:12;3985:27;;;;;;;;;;;;;3965:47;;:9;:47;:::i;:::-;3964:55;;;;:::i;:::-;3943:76;;4052:10;4028:9;:20;4038:6;4045:1;4038:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;4038:9:12;4028:20;;;;;;;;;;;;:34;;:20;;4038:9;4028:34;;;;;:::i;:::-;;;;-1:-1:-1;3930:3:12;;-1:-1:-1;3930:3:12;;-1:-1:-1;3930:3:12;;:::i;:::-;;;;3894:175;;8436:311:3;8561:18;8567:2;8571:7;8561:5;:18::i;:::-;8610:54;8641:1;8645:2;8649:7;8658:5;8610:22;:54::i;:::-;8589:151;;;;-1:-1:-1;;;8589:151:3;;;;;;;:::i;2541:572:4:-;-1:-1:-1;;;;;2740:18:4;;2736:183;;2774:40;2806:7;3922:10;:17;;3895:24;;;;:15;:24;;;;;:44;;;3949:24;;;;;;;;;;;;3819:161;2774:40;2736:183;;;2843:2;-1:-1:-1;;;;;2835:10:4;:4;-1:-1:-1;;;;;2835:10:4;;2831:88;;2861:47;2894:4;2900:7;2861:32;:47::i;:::-;-1:-1:-1;;;;;2932:16:4;;2928:179;;2964:45;3001:7;2964:36;:45::i;2928:179::-;3036:4;-1:-1:-1;;;;;3030:10:4;:2;-1:-1:-1;;;;;3030:10:4;;3026:81;;3056:40;3084:2;3088:7;3056:27;:40::i;11725:782:3:-;11875:4;-1:-1:-1;;;;;11895:13:3;;1034:20:0;1080:8;11891:610:3;;11930:72;;-1:-1:-1;;;11930:72:3;;-1:-1:-1;;;;;11930:36:3;;;;;:72;;665:10:1;;11981:4:3;;11987:7;;11996:5;;11930:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11930:72:3;;;;;;;;-1:-1:-1;;11930:72:3;;;;;;;;;;;;:::i;:::-;;;11926:523;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12173:13:3;;12169:266;;12215:60;;-1:-1:-1;;;12215:60:3;;;;;;;:::i;12169:266::-;12387:6;12381:13;12372:6;12368:2;12364:15;12357:38;11926:523;-1:-1:-1;;;;;;12052:55:3;-1:-1:-1;;;12052:55:3;;-1:-1:-1;12045:62:3;;11891:610;-1:-1:-1;12486:4:3;11725:782;;;;;;:::o;9069:372::-;-1:-1:-1;;;;;9148:16:3;;9140:61;;;;-1:-1:-1;;;9140:61:3;;15586:2:15;9140:61:3;;;15568:21:15;;;15605:18;;;15598:30;15664:34;15644:18;;;15637:62;15716:18;;9140:61:3;15384:356:15;9140:61:3;7215:4;7238:16;;;:7;:16;;;;;;-1:-1:-1;;;;;7238:16:3;:30;9211:58;;;;-1:-1:-1;;;9211:58:3;;11346:2:15;9211:58:3;;;11328:21:15;11385:2;11365:18;;;11358:30;11424;11404:18;;;11397:58;11472:18;;9211:58:3;11144:352:15;9211:58:3;9280:45;9309:1;9313:2;9317:7;9280:20;:45::i;:::-;-1:-1:-1;;;;;9336:13:3;;;;;;:9;:13;;;;;:18;;9353:1;;9336:13;:18;;9353:1;;9336:18;:::i;:::-;;;;-1:-1:-1;;9364:16:3;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;9364:21:3;-1:-1:-1;;;;;9364:21:3;;;;;;;;9401:33;;9364:16;;;9401:33;;9364:16;;9401:33;9069:372;;:::o;4597:970:4:-;4859:22;4909:1;4884:22;4901:4;4884:16;:22::i;:::-;:26;;;;:::i;:::-;4920:18;4941:26;;;:17;:26;;;;;;4859:51;;-1:-1:-1;5071:28:4;;;5067:323;;-1:-1:-1;;;;;5137:18:4;;5115:19;5137:18;;;:12;:18;;;;;;;;:34;;;;;;;;;5186:30;;;;;;:44;;;5302:30;;:17;:30;;;;;:43;;;5067:323;-1:-1:-1;5483:26:4;;;;:17;:26;;;;;;;;5476:33;;;-1:-1:-1;;;;;5526:18:4;;;;;:12;:18;;;;;:34;;;;;;;5519:41;4597:970::o;5855:1061::-;6129:10;:17;6104:22;;6129:21;;6149:1;;6129:21;:::i;:::-;6160:18;6181:24;;;:15;:24;;;;;;6549:10;:26;;6104:46;;-1:-1:-1;6181:24:4;;6104:46;;6549:26;;;;;;:::i;:::-;;;;;;;;;6527:48;;6611:11;6586:10;6597;6586:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;6690:28;;;:15;:28;;;;;;;:41;;;6859:24;;;;;6852:31;6893:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;5926:990;;;5855:1061;:::o;3407:217::-;3491:14;3508:20;3525:2;3508:16;:20::i;:::-;-1:-1:-1;;;;;3538:16:4;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;3582:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;3407:217:4:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:173:15;82:20;;-1:-1:-1;;;;;131:31:15;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:673::-;246:5;299:3;292:4;284:6;280:17;276:27;266:55;;317:1;314;307:12;266:55;353:6;340:20;379:4;403:60;419:43;459:2;419:43;:::i;:::-;403:60;:::i;:::-;485:3;509:2;504:3;497:15;537:2;532:3;528:12;521:19;;572:2;564:6;560:15;624:3;619:2;613;610:1;606:10;598:6;594:23;590:32;587:41;584:61;;;641:1;638;631:12;584:61;663:1;673:163;687:2;684:1;681:9;673:163;;;744:17;;732:30;;782:12;;;;814;;;;705:1;698:9;673:163;;;-1:-1:-1;854:5:15;;192:673;-1:-1:-1;;;;;;;192:673:15:o;870:160::-;935:20;;991:13;;984:21;974:32;;964:60;;1020:1;1017;1010:12;1035:186;1094:6;1147:2;1135:9;1126:7;1122:23;1118:32;1115:52;;;1163:1;1160;1153:12;1115:52;1186:29;1205:9;1186:29;:::i;1226:260::-;1294:6;1302;1355:2;1343:9;1334:7;1330:23;1326:32;1323:52;;;1371:1;1368;1361:12;1323:52;1394:29;1413:9;1394:29;:::i;:::-;1384:39;;1442:38;1476:2;1465:9;1461:18;1442:38;:::i;:::-;1432:48;;1226:260;;;;;:::o;1491:328::-;1568:6;1576;1584;1637:2;1625:9;1616:7;1612:23;1608:32;1605:52;;;1653:1;1650;1643:12;1605:52;1676:29;1695:9;1676:29;:::i;:::-;1666:39;;1724:38;1758:2;1747:9;1743:18;1724:38;:::i;:::-;1714:48;;1809:2;1798:9;1794:18;1781:32;1771:42;;1491:328;;;;;:::o;1824:980::-;1919:6;1927;1935;1943;1996:3;1984:9;1975:7;1971:23;1967:33;1964:53;;;2013:1;2010;2003:12;1964:53;2036:29;2055:9;2036:29;:::i;:::-;2026:39;;2084:2;2105:38;2139:2;2128:9;2124:18;2105:38;:::i;:::-;2095:48;;2190:2;2179:9;2175:18;2162:32;2152:42;;2245:2;2234:9;2230:18;2217:32;2268:18;2309:2;2301:6;2298:14;2295:34;;;2325:1;2322;2315:12;2295:34;2363:6;2352:9;2348:22;2338:32;;2408:7;2401:4;2397:2;2393:13;2389:27;2379:55;;2430:1;2427;2420:12;2379:55;2466:2;2453:16;2488:2;2484;2481:10;2478:36;;;2494:18;;:::i;:::-;2536:53;2579:2;2560:13;;-1:-1:-1;;2556:27:15;2552:36;;2536:53;:::i;:::-;2523:66;;2612:2;2605:5;2598:17;2652:7;2647:2;2642;2638;2634:11;2630:20;2627:33;2624:53;;;2673:1;2670;2663:12;2624:53;2728:2;2723;2719;2715:11;2710:2;2703:5;2699:14;2686:45;2772:1;2767:2;2762;2755:5;2751:14;2747:23;2740:34;;2793:5;2783:15;;;;;1824:980;;;;;;;:::o;2809:254::-;2874:6;2882;2935:2;2923:9;2914:7;2910:23;2906:32;2903:52;;;2951:1;2948;2941:12;2903:52;2974:29;2993:9;2974:29;:::i;:::-;2964:39;;3022:35;3053:2;3042:9;3038:18;3022:35;:::i;3068:254::-;3136:6;3144;3197:2;3185:9;3176:7;3172:23;3168:32;3165:52;;;3213:1;3210;3203:12;3165:52;3236:29;3255:9;3236:29;:::i;:::-;3226:39;3312:2;3297:18;;;;3284:32;;-1:-1:-1;;;3068:254:15:o;3327:615::-;3413:6;3421;3474:2;3462:9;3453:7;3449:23;3445:32;3442:52;;;3490:1;3487;3480:12;3442:52;3530:9;3517:23;3559:18;3600:2;3592:6;3589:14;3586:34;;;3616:1;3613;3606:12;3586:34;3654:6;3643:9;3639:22;3629:32;;3699:7;3692:4;3688:2;3684:13;3680:27;3670:55;;3721:1;3718;3711:12;3670:55;3761:2;3748:16;3787:2;3779:6;3776:14;3773:34;;;3803:1;3800;3793:12;3773:34;3856:7;3851:2;3841:6;3838:1;3834:14;3830:2;3826:23;3822:32;3819:45;3816:65;;;3877:1;3874;3867:12;3816:65;3908:2;3900:11;;;;;3930:6;;-1:-1:-1;3327:615:15;;-1:-1:-1;;;;3327:615:15:o;3947:1157::-;4065:6;4073;4126:2;4114:9;4105:7;4101:23;4097:32;4094:52;;;4142:1;4139;4132:12;4094:52;4182:9;4169:23;4211:18;4252:2;4244:6;4241:14;4238:34;;;4268:1;4265;4258:12;4238:34;4306:6;4295:9;4291:22;4281:32;;4351:7;4344:4;4340:2;4336:13;4332:27;4322:55;;4373:1;4370;4363:12;4322:55;4409:2;4396:16;4431:4;4455:60;4471:43;4511:2;4471:43;:::i;4455:60::-;4537:3;4561:2;4556:3;4549:15;4589:2;4584:3;4580:12;4573:19;;4620:2;4616;4612:11;4668:7;4663:2;4657;4654:1;4650:10;4646:2;4642:19;4638:28;4635:41;4632:61;;;4689:1;4686;4679:12;4632:61;4711:1;4702:10;;4721:169;4735:2;4732:1;4729:9;4721:169;;;4792:23;4811:3;4792:23;:::i;:::-;4780:36;;4753:1;4746:9;;;;;4836:12;;;;4868;;4721:169;;;-1:-1:-1;4909:5:15;-1:-1:-1;;4952:18:15;;4939:32;;-1:-1:-1;;4983:16:15;;;4980:36;;;5012:1;5009;5002:12;4980:36;;5035:63;5090:7;5079:8;5068:9;5064:24;5035:63;:::i;:::-;5025:73;;;3947:1157;;;;;:::o;5109:180::-;5165:6;5218:2;5206:9;5197:7;5193:23;5189:32;5186:52;;;5234:1;5231;5224:12;5186:52;5257:26;5273:9;5257:26;:::i;5294:245::-;5352:6;5405:2;5393:9;5384:7;5380:23;5376:32;5373:52;;;5421:1;5418;5411:12;5373:52;5460:9;5447:23;5479:30;5503:5;5479:30;:::i;5544:249::-;5613:6;5666:2;5654:9;5645:7;5641:23;5637:32;5634:52;;;5682:1;5679;5672:12;5634:52;5714:9;5708:16;5733:30;5757:5;5733:30;:::i;5798:592::-;5869:6;5877;5930:2;5918:9;5909:7;5905:23;5901:32;5898:52;;;5946:1;5943;5936:12;5898:52;5986:9;5973:23;6015:18;6056:2;6048:6;6045:14;6042:34;;;6072:1;6069;6062:12;6042:34;6110:6;6099:9;6095:22;6085:32;;6155:7;6148:4;6144:2;6140:13;6136:27;6126:55;;6177:1;6174;6167:12;6126:55;6217:2;6204:16;6243:2;6235:6;6232:14;6229:34;;;6259:1;6256;6249:12;6229:34;6304:7;6299:2;6290:6;6286:2;6282:15;6278:24;6275:37;6272:57;;;6325:1;6322;6315:12;6395:180;6454:6;6507:2;6495:9;6486:7;6482:23;6478:32;6475:52;;;6523:1;6520;6513:12;6475:52;-1:-1:-1;6546:23:15;;6395:180;-1:-1:-1;6395:180:15:o;6580:257::-;6621:3;6659:5;6653:12;6686:6;6681:3;6674:19;6702:63;6758:6;6751:4;6746:3;6742:14;6735:4;6728:5;6724:16;6702:63;:::i;:::-;6819:2;6798:15;-1:-1:-1;;6794:29:15;6785:39;;;;6826:4;6781:50;;6580:257;-1:-1:-1;;6580:257:15:o;6842:470::-;7021:3;7059:6;7053:13;7075:53;7121:6;7116:3;7109:4;7101:6;7097:17;7075:53;:::i;:::-;7191:13;;7150:16;;;;7213:57;7191:13;7150:16;7247:4;7235:17;;7213:57;:::i;:::-;7286:20;;6842:470;-1:-1:-1;;;;6842:470:15:o;7525:488::-;-1:-1:-1;;;;;7794:15:15;;;7776:34;;7846:15;;7841:2;7826:18;;7819:43;7893:2;7878:18;;7871:34;;;7941:3;7936:2;7921:18;;7914:31;;;7719:4;;7962:45;;7987:19;;7979:6;7962:45;:::i;:::-;7954:53;7525:488;-1:-1:-1;;;;;;7525:488:15:o;8210:219::-;8359:2;8348:9;8341:21;8322:4;8379:44;8419:2;8408:9;8404:18;8396:6;8379:44;:::i;9915:414::-;10117:2;10099:21;;;10156:2;10136:18;;;10129:30;10195:34;10190:2;10175:18;;10168:62;-1:-1:-1;;;10261:2:15;10246:18;;10239:48;10319:3;10304:19;;9915:414::o;13735:398::-;13937:2;13919:21;;;13976:2;13956:18;;;13949:30;14015:34;14010:2;13995:18;;13988:62;-1:-1:-1;;;14081:2:15;14066:18;;14059:32;14123:3;14108:19;;13735:398::o;16509:356::-;16711:2;16693:21;;;16730:18;;;16723:30;16789:34;16784:2;16769:18;;16762:62;16856:2;16841:18;;16509:356::o;18755:413::-;18957:2;18939:21;;;18996:2;18976:18;;;18969:30;19035:34;19030:2;19015:18;;19008:62;-1:-1:-1;;;19101:2:15;19086:18;;19079:47;19158:3;19143:19;;18755:413::o;19943:351::-;20145:2;20127:21;;;20184:2;20164:18;;;20157:30;20223:29;20218:2;20203:18;;20196:57;20285:2;20270:18;;19943:351::o;20842:275::-;20913:2;20907:9;20978:2;20959:13;;-1:-1:-1;;20955:27:15;20943:40;;21013:18;20998:34;;21034:22;;;20995:62;20992:88;;;21060:18;;:::i;:::-;21096:2;21089:22;20842:275;;-1:-1:-1;20842:275:15:o;21122:183::-;21182:4;21215:18;21207:6;21204:30;21201:56;;;21237:18;;:::i;:::-;-1:-1:-1;21282:1:15;21278:14;21294:4;21274:25;;21122:183::o;21310:128::-;21350:3;21381:1;21377:6;21374:1;21371:13;21368:39;;;21387:18;;:::i;:::-;-1:-1:-1;21423:9:15;;21310:128::o;21443:120::-;21483:1;21509;21499:35;;21514:18;;:::i;:::-;-1:-1:-1;21548:9:15;;21443:120::o;21568:168::-;21608:7;21674:1;21670;21666:6;21662:14;21659:1;21656:21;21651:1;21644:9;21637:17;21633:45;21630:71;;;21681:18;;:::i;:::-;-1:-1:-1;21721:9:15;;21568:168::o;21741:125::-;21781:4;21809:1;21806;21803:8;21800:34;;;21814:18;;:::i;:::-;-1:-1:-1;21851:9:15;;21741:125::o;21871:258::-;21943:1;21953:113;21967:6;21964:1;21961:13;21953:113;;;22043:11;;;22037:18;22024:11;;;22017:39;21989:2;21982:10;21953:113;;;22084:6;22081:1;22078:13;22075:48;;;-1:-1:-1;;22119:1:15;22101:16;;22094:27;21871:258::o;22134:380::-;22213:1;22209:12;;;;22256;;;22277:61;;22331:4;22323:6;22319:17;22309:27;;22277:61;22384:2;22376:6;22373:14;22353:18;22350:38;22347:161;;;22430:10;22425:3;22421:20;22418:1;22411:31;22465:4;22462:1;22455:15;22493:4;22490:1;22483:15;22347:161;;22134:380;;;:::o;22519:135::-;22558:3;-1:-1:-1;;22579:17:15;;22576:43;;;22599:18;;:::i;:::-;-1:-1:-1;22646:1:15;22635:13;;22519:135::o;22659:112::-;22691:1;22717;22707:35;;22722:18;;:::i;:::-;-1:-1:-1;22756:9:15;;22659:112::o;22776:127::-;22837:10;22832:3;22828:20;22825:1;22818:31;22868:4;22865:1;22858:15;22892:4;22889:1;22882:15;22908:127;22969:10;22964:3;22960:20;22957:1;22950:31;23000:4;22997:1;22990:15;23024:4;23021:1;23014:15;23040:127;23101:10;23096:3;23092:20;23089:1;23082:31;23132:4;23129:1;23122:15;23156:4;23153:1;23146:15;23172:127;23233:10;23228:3;23224:20;23221:1;23214:31;23264:4;23261:1;23254:15;23288:4;23285:1;23278:15;23304:127;23365:10;23360:3;23356:20;23353:1;23346:31;23396:4;23393:1;23386:15;23420:4;23417:1;23410:15;23436:131;-1:-1:-1;;;;;;23510:32:15;;23500:43;;23490:71;;23557:1;23554;23547:12

Swarm Source

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