ETH Price: $3,063.94 (+1.32%)
Gas: 3 Gwei

Token

QuanneirenNFT (quaner)
 

Overview

Max Total Supply

1,762 quaner

Holders

368

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
zoocv.eth
Balance
10 quaner
0x76c31ce3d93731c15da8316a13f11682b09f4c7a
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:
QuanneirenNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 13 : QuanneirenNFTofficial.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "./ERC721A.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

contract QuanneirenNFT is Ownable, ERC721A, ReentrancyGuard {
    constructor(
    ) ERC721A("QuanneirenNFT", "quaner", 50, 3000) {}

    // For marketing etc.
    function reserveMint(uint256 quantity) external onlyOwner {
        require(
            totalSupply() + quantity <= collectionSize,
            "too many already minted before dev mint"
        );
        uint256 numChunks = quantity / maxBatchSize;
        for (uint256 i = 0; i < numChunks; i++) {
            _safeMint(msg.sender, maxBatchSize);
        }
        if (quantity % maxBatchSize != 0){
            _safeMint(msg.sender, quantity % maxBatchSize);
        }
    }

    // metadata URI
    string private _baseTokenURI;

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

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }

    function withdrawMoney() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant {
        _setOwnersExplicit(quantity);
    }

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }

    function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
    {
        return ownershipOf(tokenId);
    }

    function refundIfOver(uint256 price) private {
        require(msg.value >= price, "Need to send more ETH.");
        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }
    // allowList mint
    uint256 private allowListMintPrice = 0.000000 ether;
    // default false
    bool private allowListStatus = false;
    uint256 private allowListMintAmount = 1500;
    //uint256 public immutable maxPerAddressDuringMint = 2;
    uint256 private  maxPerAddressDuringMint = 4;

    bytes32 private merkleRoot;

    mapping(address => bool) public addressAppeared;
    mapping(address => uint256) public addressMintStock;


    function allowListMint(uint256 quantity, bytes32[] memory proof) external payable {
        require(tx.origin == msg.sender, "The caller is another contract");
        require(allowListStatus, "allowList sale has not begun yet");
        require(totalSupply() + quantity <= collectionSize, "reached max supply");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(MerkleProof.verify(proof, merkleRoot, leaf),
            "Invalid Merkle Proof.");
        if(!addressAppeared[msg.sender]){
            addressAppeared[msg.sender] = true;
            addressMintStock[msg.sender] = maxPerAddressDuringMint;
        }
        require(addressMintStock[msg.sender] >= quantity, "reached allow list per address mint amount");
        addressMintStock[msg.sender] -= quantity;
        _safeMint(msg.sender, quantity);
        allowListMintAmount -= quantity;
        refundIfOver(allowListMintPrice*quantity);
    }

    function setAllowList(bytes32 root_) external onlyOwner{
        merkleRoot = root_;
    }

    function setAllowListStatus(bool status) external onlyOwner {
        allowListStatus = status;
    }

    function getAllowListStatus() external view returns(bool){
        return allowListStatus;
    }
    //tianjia
    function setallowListMintAmount(uint256 _allowListMintAmount) external onlyOwner {
        allowListMintAmount = _allowListMintAmount;
    }
    function setmaxPerAddressDuringMint(uint256 _maxPerAddressDuringMint) external onlyOwner {
        maxPerAddressDuringMint = _maxPerAddressDuringMint;
    }

    //public sale
    bool public publicSaleStatus = false;
    uint256 public publicPrice = 0.010000 ether;
    uint256 public amountForPublicSale = 1000;
    // per mint public sale limitation
    uint256 public immutable publicSalePerMint = 50;

    function publicSaleMint(uint256 quantity) external payable {
        require(
        publicSaleStatus,
        "public sale has not begun yet"
        );
        require(
        totalSupply() + quantity <= collectionSize,
        "reached max supply"
        );
        require(
        amountForPublicSale >= quantity,
        "reached public sale max amount"
        );

        require(
        quantity <= publicSalePerMint,
        "reached public sale per mint max amount"
        );

        _safeMint(msg.sender, quantity);
        amountForPublicSale -= quantity;
        refundIfOver(uint256(publicPrice) * quantity);
    }

    function setPublicSaleStatus(bool status) external onlyOwner {
        publicSaleStatus = status;
    }

    function getPublicSaleStatus() external view returns(bool) {
        return publicSaleStatus;
    }
    //tianjia
    function setamountForPublicSale(uint256 _amountForPublicSale) external onlyOwner {
        amountForPublicSale = _amountForPublicSale;
    }
    function setpublicPrice(uint256 _publicPrice) external onlyOwner {
        publicPrice = _publicPrice;
    }

}

File 2 of 13 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/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() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

File 3 of 13 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 4 of 13 : ERC721A.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/utils/introspection/ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes the number of issuable tokens (collection size) is capped and fits in a uint128.
 *
 * Does not support burning tokens to address(0).
 */
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

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

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

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

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

  /**
   * @dev
   * `maxBatchSize` refers to how much a minter can mint at a time.
   * `collectionSize_` refers to how many tokens are in the collection.
   */
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  }

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

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

  /**
   * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
   * This read function is O(collectionSize). If calling from a separate contract, be sure to test gas first.
   * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
   */
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  }

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

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

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

  function ownershipOf(uint256 tokenId)
    internal
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

    uint256 lowestTokenToCheck;
    if (tokenId >= maxBatchSize) {
      lowestTokenToCheck = tokenId - maxBatchSize + 1;
    }

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

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

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

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

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

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

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

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

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

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

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

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

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

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

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

  /**
   * @dev Mints `quantity` tokens and transfers them to `to`.
   *
   * Requirements:
   *
   * - there must be `quantity` tokens remaining unminted in the total collection.
   * - `to` cannot be the zero address.
   * - `quantity` cannot be larger than the max batch size.
   *
   * Emits a {Transfer} event.
   */
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address");
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

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

    AddressData memory addressData = _addressData[to];
    _addressData[to] = AddressData(
      addressData.balance + uint128(quantity),
      addressData.numberMinted + uint128(quantity)
    );
    _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

    uint256 updatedIndex = startTokenId;

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

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }

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

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

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

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

    _beforeTokenTransfers(from, to, tokenId, 1);

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

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp));

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

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

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

  uint256 public nextOwnerToExplicitlySet = 0;

  /**
   * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
   */
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    }
    // We know if the last one in the group exists, all in the group exist, due to serial ordering.
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  }

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

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

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

File 5 of 13 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

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);
    }
}

File 6 of 13 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 7 of 13 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

File 8 of 13 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

File 9 of 13 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

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 13 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

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

    /**
     * @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 11 of 13 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 12 of 13 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

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 13 of 13 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[{"internalType":"address","name":"","type":"address"}],"name":"addressAppeared","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintStock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"allowListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"amountForPublicSale","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":"getAllowListStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPublicSaleStatus","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":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSalePerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserveMint","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":"bytes32","name":"root_","type":"bytes32"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setAllowListStatus","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setPublicSaleStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allowListMintAmount","type":"uint256"}],"name":"setallowListMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountForPublicSale","type":"uint256"}],"name":"setamountForPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerAddressDuringMint","type":"uint256"}],"name":"setmaxPerAddressDuringMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicPrice","type":"uint256"}],"name":"setpublicPrice","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":"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":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052600060015560006008556000600b556000600c60006101000a81548160ff0219169083151502179055506105dc600d556004600e556000601260006101000a81548160ff021916908315150217905550662386f26fc100006013556103e8601455603260c0908152503480156200007a57600080fd5b506040518060400160405280600d81526020017f5175616e6e656972656e4e4654000000000000000000000000000000000000008152506040518060400160405280600681526020017f7175616e657200000000000000000000000000000000000000000000000000008152506032610bb86200010c62000100620001ec60201b60201c565b620001f460201b60201c565b6000811162000152576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200014990620003d8565b60405180910390fd5b6000821162000198576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200018f90620003b6565b60405180910390fd5b8360029080519060200190620001b0929190620002b8565b508260039080519060200190620001c9929190620002b8565b508160a0818152505080608081815250505050505060016009819055506200050e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002c6906200040b565b90600052602060002090601f016020900481019282620002ea576000855562000336565b82601f106200030557805160ff191683800117855562000336565b8280016001018555821562000336579182015b828111156200033557825182559160200191906001019062000318565b5b50905062000345919062000349565b5090565b5b80821115620003645760008160009055506001016200034a565b5090565b600062000377602783620003fa565b9150620003848262000470565b604082019050919050565b60006200039e602e83620003fa565b9150620003ab82620004bf565b604082019050919050565b60006020820190508181036000830152620003d18162000368565b9050919050565b60006020820190508181036000830152620003f3816200038f565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200042457607f821691505b602082108114156200043b576200043a62000441565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a05160c051615d356200058b600039600081816113050152611bc2015260008181610e7b01528181610eb801528181610ef401528181610f2901528181612f1601528181612f3f0152613776015260008181610e0401528181611b08015281816120bd01528181612c9e0152612cd20152615d356000f3fe60806040526004361061025c5760003560e01c80638da5cb5b11610144578063bb122299116100b6578063dc33e6811161007a578063dc33e681146108fb578063e985e9c514610938578063ec3fb7ad14610975578063ec8bda8e1461099e578063f2fde38b146109ba578063f90296d8146109e35761025c565b8063bb122299146107f0578063c5f77e161461082d578063c87b56dd1461086a578063ceb0a257146108a7578063d7224ba0146108d05761025c565b8063a945bf8011610108578063a945bf8014610715578063ac44600214610740578063b3ab66b014610757578063b423fe6714610773578063b6c693e51461079c578063b88d4fde146107c75761025c565b80638da5cb5b1461062e5780639231ab2a1461065957806395d89b41146106965780639dc74e63146106c1578063a22cb465146106ec5761025c565b8063300bc3a1116101dd5780634f6ccce7116101a15780634f6ccce71461050e57806355f804b31461054b5780636352211e1461057457806370a08231146105b1578063715018a6146105ee57806384584d07146106055761025c565b8063300bc3a11461043d5780633ba5ae241461046657806342842e0e14610491578063499e8eec146104ba5780634d278499146104e55761025c565b806318160ddd1161022457806318160ddd146103585780631a534faf1461038357806323b872dd146103ae5780632d20fb60146103d75780632f745c59146104005761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780631342ff4c1461032f575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061412b565b610a0c565b6040516102959190614936565b60405180910390f35b3480156102aa57600080fd5b506102b3610b56565b6040516102c09190614951565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906141d2565b610be8565b6040516102fd91906148cf565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190614091565b610c6d565b005b34801561033b57600080fd5b50610356600480360381019061035191906141d2565b610d86565b005b34801561036457600080fd5b5061036d610f5d565b60405161037a9190614dee565b60405180910390f35b34801561038f57600080fd5b50610398610f67565b6040516103a59190614936565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613f7b565b610f7e565b005b3480156103e357600080fd5b506103fe60048036038101906103f991906141d2565b610f8e565b005b34801561040c57600080fd5b5061042760048036038101906104229190614091565b61106c565b6040516104349190614dee565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f91906140d1565b61126a565b005b34801561047257600080fd5b5061047b611303565b6040516104889190614dee565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190613f7b565b611327565b005b3480156104c657600080fd5b506104cf611347565b6040516104dc9190614936565b60405180910390f35b3480156104f157600080fd5b5061050c600480360381019061050791906141d2565b61135e565b005b34801561051a57600080fd5b50610535600480360381019061053091906141d2565b6113e4565b6040516105429190614dee565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190614185565b611437565b005b34801561058057600080fd5b5061059b600480360381019061059691906141d2565b6114c9565b6040516105a891906148cf565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613f0e565b6114df565b6040516105e59190614dee565b60405180910390f35b3480156105fa57600080fd5b506106036115c8565b005b34801561061157600080fd5b5061062c600480360381019061062791906140fe565b611650565b005b34801561063a57600080fd5b506106436116d6565b60405161065091906148cf565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b91906141d2565b6116ff565b60405161068d9190614dd3565b60405180910390f35b3480156106a257600080fd5b506106ab611717565b6040516106b89190614951565b60405180910390f35b3480156106cd57600080fd5b506106d66117a9565b6040516106e39190614dee565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190614051565b6117af565b005b34801561072157600080fd5b5061072a611930565b6040516107379190614dee565b60405180910390f35b34801561074c57600080fd5b50610755611936565b005b610771600480360381019061076c91906141d2565b611ab7565b005b34801561077f57600080fd5b5061079a600480360381019061079591906140d1565b611c5f565b005b3480156107a857600080fd5b506107b1611cf8565b6040516107be9190614936565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190613fce565b611d0b565b005b3480156107fc57600080fd5b5061081760048036038101906108129190613f0e565b611d67565b6040516108249190614dee565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613f0e565b611d7f565b6040516108619190614936565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c91906141d2565b611d9f565b60405161089e9190614951565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c991906141d2565b611e46565b005b3480156108dc57600080fd5b506108e5611ecc565b6040516108f29190614dee565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190613f0e565b611ed2565b60405161092f9190614dee565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613f3b565b611ee4565b60405161096c9190614936565b60405180910390f35b34801561098157600080fd5b5061099c600480360381019061099791906141d2565b611f78565b005b6109b860048036038101906109b391906141ff565b611ffe565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190613f0e565b6123ad565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a0591906141d2565b6124a5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3f57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b4f5750610b4e8261252b565b5b9050919050565b606060028054610b6590615182565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9190615182565b8015610bde5780601f10610bb357610100808354040283529160200191610bde565b820191906000526020600020905b815481529060010190602001808311610bc157829003601f168201915b5050505050905090565b6000610bf382612595565b610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2990614d93565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c78826114c9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090614c13565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d086125a3565b73ffffffffffffffffffffffffffffffffffffffff161480610d375750610d3681610d316125a3565b611ee4565b5b610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90614ad3565b60405180910390fd5b610d818383836125ab565b505050565b610d8e6125a3565b73ffffffffffffffffffffffffffffffffffffffff16610dac6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df990614b73565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081610e2c610f5d565b610e369190614f1f565b1115610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90614cf3565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000082610ea59190614f75565b905060005b81811015610eef57610edc337f000000000000000000000000000000000000000000000000000000000000000061265d565b8080610ee7906151e5565b915050610eaa565b5060007f000000000000000000000000000000000000000000000000000000000000000083610f1e9190615252565b14610f5957610f58337f000000000000000000000000000000000000000000000000000000000000000084610f539190615252565b61265d565b5b5050565b6000600154905090565b6000600c60009054906101000a900460ff16905090565b610f8983838361267b565b505050565b610f966125a3565b73ffffffffffffffffffffffffffffffffffffffff16610fb46116d6565b73ffffffffffffffffffffffffffffffffffffffff161461100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190614b73565b60405180910390fd5b60026009541415611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614d53565b60405180910390fd5b600260098190555061106181612c34565b600160098190555050565b6000611077836114df565b82106110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90614973565b60405180910390fd5b60006110c2610f5d565b905060008060005b83811015611228576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111bc57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112145786841415611205578195505050505050611264565b8380611210906151e5565b9450505b508080611220906151e5565b9150506110ca565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614d13565b60405180910390fd5b92915050565b6112726125a3565b73ffffffffffffffffffffffffffffffffffffffff166112906116d6565b73ffffffffffffffffffffffffffffffffffffffff16146112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90614b73565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61134283838360405180602001604052806000815250611d0b565b505050565b6000601260009054906101000a900460ff16905090565b6113666125a3565b73ffffffffffffffffffffffffffffffffffffffff166113846116d6565b73ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190614b73565b60405180910390fd5b8060148190555050565b60006113ee610f5d565b821061142f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611426906149f3565b60405180910390fd5b819050919050565b61143f6125a3565b73ffffffffffffffffffffffffffffffffffffffff1661145d6116d6565b73ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614b73565b60405180910390fd5b8181600a91906114c4929190613c4f565b505050565b60006114d482612ec2565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790614b13565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115d06125a3565b73ffffffffffffffffffffffffffffffffffffffff166115ee6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90614b73565b60405180910390fd5b61164e60006130c5565b565b6116586125a3565b73ffffffffffffffffffffffffffffffffffffffff166116766116d6565b73ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390614b73565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611707613cd5565b61171082612ec2565b9050919050565b60606003805461172690615182565b80601f016020809104026020016040519081016040528092919081815260200182805461175290615182565b801561179f5780601f106117745761010080835404028352916020019161179f565b820191906000526020600020905b81548152906001019060200180831161178257829003601f168201915b5050505050905090565b60145481565b6117b76125a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90614bb3565b60405180910390fd5b80600760006118326125a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118df6125a3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119249190614936565b60405180910390a35050565b60135481565b61193e6125a3565b73ffffffffffffffffffffffffffffffffffffffff1661195c6116d6565b73ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614b73565b60405180910390fd5b600260095414156119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef90614d53565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a26906148ba565b60006040518083038185875af1925050503d8060008114611a63576040519150601f19603f3d011682016040523d82523d6000602084013e611a68565b606091505b5050905080611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa390614c33565b60405180910390fd5b506001600981905550565b601260009054906101000a900460ff16611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614bf3565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611b30610f5d565b611b3a9190614f1f565b1115611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7290614b33565b60405180910390fd5b806014541015611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614a33565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a906149d3565b60405180910390fd5b611c2d338261265d565b8060146000828254611c3f9190615034565b92505081905550611c5c81601354611c579190614fa6565b613189565b50565b611c676125a3565b73ffffffffffffffffffffffffffffffffffffffff16611c856116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290614b73565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b601260009054906101000a900460ff1681565b611d1684848461267b565b611d228484848461322a565b611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890614c53565b60405180910390fd5b50505050565b60116020528060005260406000206000915090505481565b60106020528060005260406000206000915054906101000a900460ff1681565b6060611daa82612595565b611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090614b93565b60405180910390fd5b6000611df36133c1565b90506000815111611e135760405180602001604052806000815250611e3e565b80611e1d84613453565b604051602001611e2e929190614896565b6040516020818303038152906040525b915050919050565b611e4e6125a3565b73ffffffffffffffffffffffffffffffffffffffff16611e6c6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614b73565b60405180910390fd5b80600e8190555050565b60085481565b6000611edd826135b4565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f806125a3565b73ffffffffffffffffffffffffffffffffffffffff16611f9e6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90614b73565b60405180910390fd5b80600d8190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614ab3565b60405180910390fd5b600c60009054906101000a900460ff166120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614cd3565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000826120e5610f5d565b6120ef9190614f1f565b1115612130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212790614b33565b60405180910390fd5b600033604051602001612143919061487b565b60405160208183030381529060405280519060200120905061216882600f548361369d565b6121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90614a93565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612297576001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600e54601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b82601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090614a53565b60405180910390fd5b82601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123689190615034565b92505081905550612379338461265d565b82600d600082825461238b9190615034565b925050819055506123a883600b546123a39190614fa6565b613189565b505050565b6123b56125a3565b73ffffffffffffffffffffffffffffffffffffffff166123d36116d6565b73ffffffffffffffffffffffffffffffffffffffff1614612429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242090614b73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614993565b60405180910390fd5b6124a2816130c5565b50565b6124ad6125a3565b73ffffffffffffffffffffffffffffffffffffffff166124cb6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614612521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251890614b73565b60405180910390fd5b8060138190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6126778282604051806020016040528060008152506136b4565b5050565b600061268682612ec2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166126ad6125a3565b73ffffffffffffffffffffffffffffffffffffffff16148061270957506126d26125a3565b73ffffffffffffffffffffffffffffffffffffffff166126f184610be8565b73ffffffffffffffffffffffffffffffffffffffff16145b806127255750612724826000015161271f6125a3565b611ee4565b5b905080612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e90614bd3565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614b53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614a13565b60405180910390fd5b6128568585856001613b94565b61286660008484600001516125ab565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128d49190615000565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129789190614ed9565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612a7e9190614f1f565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bc457612af481612595565b15612bc3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c2c8686866001613b9a565b505050505050565b6000600854905060008211612c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7590614af3565b60405180910390fd5b600060018383612c8e9190614f1f565b612c989190615034565b905060017f0000000000000000000000000000000000000000000000000000000000000000612cc79190615034565b811115612cfe5760017f0000000000000000000000000000000000000000000000000000000000000000612cfb9190615034565b90505b612d0781612595565b612d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3d90614d33565b60405180910390fd5b60008290505b818111612ea957600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e96576000612dc982612ec2565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612ea1906151e5565b915050612d4c565b50600181612eb79190614f1f565b600881905550505050565b612eca613cd5565b612ed382612595565b612f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f09906149b3565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612f765760017f000000000000000000000000000000000000000000000000000000000000000084612f699190615034565b612f739190614f1f565b90505b60008390505b818110613084576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613070578093505050506130c0565b50808061307c90615158565b915050612f7c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b790614d73565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b803410156131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c390614c73565b60405180910390fd5b80341115613227573373ffffffffffffffffffffffffffffffffffffffff166108fc82346131fa9190615034565b9081150290604051600060405180830381858888f19350505050158015613225573d6000803e3d6000fd5b505b50565b600061324b8473ffffffffffffffffffffffffffffffffffffffff16613ba0565b156133b4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132746125a3565b8786866040518563ffffffff1660e01b815260040161329694939291906148ea565b602060405180830381600087803b1580156132b057600080fd5b505af19250505080156132e157506040513d601f19601f820116820180604052508101906132de9190614158565b60015b613364573d8060008114613311576040519150601f19603f3d011682016040523d82523d6000602084013e613316565b606091505b5060008151141561335c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335390614c53565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133b9565b600190505b949350505050565b6060600a80546133d090615182565b80601f01602080910402602001604051908101604052809291908181526020018280546133fc90615182565b80156134495780601f1061341e57610100808354040283529160200191613449565b820191906000526020600020905b81548152906001019060200180831161342c57829003601f168201915b5050505050905090565b6060600082141561349b576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135af565b600082905060005b600082146134cd5780806134b6906151e5565b915050600a826134c69190614f75565b91506134a3565b60008167ffffffffffffffff8111156134e9576134e861533f565b5b6040519080825280601f01601f19166020018201604052801561351b5781602001600182028036833780820191505090505b5090505b600085146135a8576001826135349190615034565b9150600a856135439190615252565b603061354f9190614f1f565b60f81b81838151811061356557613564615310565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135a19190614f75565b945061351f565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361c90614a73565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6000826136aa8584613bc3565b1490509392505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372290614cb3565b60405180910390fd5b61373481612595565b15613774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376b90614c93565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156137d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ce90614db3565b60405180910390fd5b6137e46000858386613b94565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516138e19190614ed9565b6fffffffffffffffffffffffffffffffff1681526020018583602001516139089190614ed9565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613b7757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613b17600088848861322a565b613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d90614c53565b60405180910390fd5b8180613b61906151e5565b9250508080613b6f906151e5565b915050613aa6565b5080600181905550613b8c6000878588613b9a565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008082905060005b8451811015613c2d576000858281518110613bea57613be9615310565b5b60200260200101519050808311613c0c57613c058382613c38565b9250613c19565b613c168184613c38565b92505b508080613c25906151e5565b915050613bcc565b508091505092915050565b600082600052816020526040600020905092915050565b828054613c5b90615182565b90600052602060002090601f016020900481019282613c7d5760008555613cc4565b82601f10613c9657803560ff1916838001178555613cc4565b82800160010185558215613cc4579182015b82811115613cc3578235825591602001919060010190613ca8565b5b509050613cd19190613d0f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613d28576000816000905550600101613d10565b5090565b6000613d3f613d3a84614e2e565b614e09565b90508083825260208201905082856020860282011115613d6257613d61615378565b5b60005b85811015613d925781613d788882613e36565b845260208401935060208301925050600181019050613d65565b5050509392505050565b6000613daf613daa84614e5a565b614e09565b905082815260208101848484011115613dcb57613dca61537d565b5b613dd6848285615116565b509392505050565b600081359050613ded81615c8c565b92915050565b600082601f830112613e0857613e07615373565b5b8135613e18848260208601613d2c565b91505092915050565b600081359050613e3081615ca3565b92915050565b600081359050613e4581615cba565b92915050565b600081359050613e5a81615cd1565b92915050565b600081519050613e6f81615cd1565b92915050565b600082601f830112613e8a57613e89615373565b5b8135613e9a848260208601613d9c565b91505092915050565b60008083601f840112613eb957613eb8615373565b5b8235905067ffffffffffffffff811115613ed657613ed561536e565b5b602083019150836001820283011115613ef257613ef1615378565b5b9250929050565b600081359050613f0881615ce8565b92915050565b600060208284031215613f2457613f23615387565b5b6000613f3284828501613dde565b91505092915050565b60008060408385031215613f5257613f51615387565b5b6000613f6085828601613dde565b9250506020613f7185828601613dde565b9150509250929050565b600080600060608486031215613f9457613f93615387565b5b6000613fa286828701613dde565b9350506020613fb386828701613dde565b9250506040613fc486828701613ef9565b9150509250925092565b60008060008060808587031215613fe857613fe7615387565b5b6000613ff687828801613dde565b945050602061400787828801613dde565b935050604061401887828801613ef9565b925050606085013567ffffffffffffffff81111561403957614038615382565b5b61404587828801613e75565b91505092959194509250565b6000806040838503121561406857614067615387565b5b600061407685828601613dde565b925050602061408785828601613e21565b9150509250929050565b600080604083850312156140a8576140a7615387565b5b60006140b685828601613dde565b92505060206140c785828601613ef9565b9150509250929050565b6000602082840312156140e7576140e6615387565b5b60006140f584828501613e21565b91505092915050565b60006020828403121561411457614113615387565b5b600061412284828501613e36565b91505092915050565b60006020828403121561414157614140615387565b5b600061414f84828501613e4b565b91505092915050565b60006020828403121561416e5761416d615387565b5b600061417c84828501613e60565b91505092915050565b6000806020838503121561419c5761419b615387565b5b600083013567ffffffffffffffff8111156141ba576141b9615382565b5b6141c685828601613ea3565b92509250509250929050565b6000602082840312156141e8576141e7615387565b5b60006141f684828501613ef9565b91505092915050565b6000806040838503121561421657614215615387565b5b600061422485828601613ef9565b925050602083013567ffffffffffffffff81111561424557614244615382565b5b61425185828601613df3565b9150509250929050565b61426481615068565b82525050565b61427381615068565b82525050565b61428a61428582615068565b61522e565b82525050565b6142998161507a565b82525050565b60006142aa82614e8b565b6142b48185614ea1565b93506142c4818560208601615125565b6142cd8161538c565b840191505092915050565b60006142e382614e96565b6142ed8185614ebd565b93506142fd818560208601615125565b6143068161538c565b840191505092915050565b600061431c82614e96565b6143268185614ece565b9350614336818560208601615125565b80840191505092915050565b600061434f602283614ebd565b915061435a826153aa565b604082019050919050565b6000614372602683614ebd565b915061437d826153f9565b604082019050919050565b6000614395602a83614ebd565b91506143a082615448565b604082019050919050565b60006143b8602783614ebd565b91506143c382615497565b604082019050919050565b60006143db602383614ebd565b91506143e6826154e6565b604082019050919050565b60006143fe602583614ebd565b915061440982615535565b604082019050919050565b6000614421601e83614ebd565b915061442c82615584565b602082019050919050565b6000614444602a83614ebd565b915061444f826155ad565b604082019050919050565b6000614467603183614ebd565b9150614472826155fc565b604082019050919050565b600061448a601583614ebd565b91506144958261564b565b602082019050919050565b60006144ad601e83614ebd565b91506144b882615674565b602082019050919050565b60006144d0603983614ebd565b91506144db8261569d565b604082019050919050565b60006144f3601883614ebd565b91506144fe826156ec565b602082019050919050565b6000614516602b83614ebd565b915061452182615715565b604082019050919050565b6000614539601283614ebd565b915061454482615764565b602082019050919050565b600061455c602683614ebd565b91506145678261578d565b604082019050919050565b600061457f602083614ebd565b915061458a826157dc565b602082019050919050565b60006145a2602f83614ebd565b91506145ad82615805565b604082019050919050565b60006145c5601a83614ebd565b91506145d082615854565b602082019050919050565b60006145e8603283614ebd565b91506145f38261587d565b604082019050919050565b600061460b601d83614ebd565b9150614616826158cc565b602082019050919050565b600061462e602283614ebd565b9150614639826158f5565b604082019050919050565b6000614651600083614eb2565b915061465c82615944565b600082019050919050565b6000614674601083614ebd565b915061467f82615947565b602082019050919050565b6000614697603383614ebd565b91506146a282615970565b604082019050919050565b60006146ba601683614ebd565b91506146c5826159bf565b602082019050919050565b60006146dd601d83614ebd565b91506146e8826159e8565b602082019050919050565b6000614700602183614ebd565b915061470b82615a11565b604082019050919050565b6000614723602083614ebd565b915061472e82615a60565b602082019050919050565b6000614746602783614ebd565b915061475182615a89565b604082019050919050565b6000614769602e83614ebd565b915061477482615ad8565b604082019050919050565b600061478c602683614ebd565b915061479782615b27565b604082019050919050565b60006147af601f83614ebd565b91506147ba82615b76565b602082019050919050565b60006147d2602f83614ebd565b91506147dd82615b9f565b604082019050919050565b60006147f5602d83614ebd565b915061480082615bee565b604082019050919050565b6000614818602283614ebd565b915061482382615c3d565b604082019050919050565b604082016000820151614844600085018261425b565b506020820151614857602085018261486c565b50505050565b614866816150f8565b82525050565b61487581615102565b82525050565b60006148878284614279565b60148201915081905092915050565b60006148a28285614311565b91506148ae8284614311565b91508190509392505050565b60006148c582614644565b9150819050919050565b60006020820190506148e4600083018461426a565b92915050565b60006080820190506148ff600083018761426a565b61490c602083018661426a565b614919604083018561485d565b818103606083015261492b818461429f565b905095945050505050565b600060208201905061494b6000830184614290565b92915050565b6000602082019050818103600083015261496b81846142d8565b905092915050565b6000602082019050818103600083015261498c81614342565b9050919050565b600060208201905081810360008301526149ac81614365565b9050919050565b600060208201905081810360008301526149cc81614388565b9050919050565b600060208201905081810360008301526149ec816143ab565b9050919050565b60006020820190508181036000830152614a0c816143ce565b9050919050565b60006020820190508181036000830152614a2c816143f1565b9050919050565b60006020820190508181036000830152614a4c81614414565b9050919050565b60006020820190508181036000830152614a6c81614437565b9050919050565b60006020820190508181036000830152614a8c8161445a565b9050919050565b60006020820190508181036000830152614aac8161447d565b9050919050565b60006020820190508181036000830152614acc816144a0565b9050919050565b60006020820190508181036000830152614aec816144c3565b9050919050565b60006020820190508181036000830152614b0c816144e6565b9050919050565b60006020820190508181036000830152614b2c81614509565b9050919050565b60006020820190508181036000830152614b4c8161452c565b9050919050565b60006020820190508181036000830152614b6c8161454f565b9050919050565b60006020820190508181036000830152614b8c81614572565b9050919050565b60006020820190508181036000830152614bac81614595565b9050919050565b60006020820190508181036000830152614bcc816145b8565b9050919050565b60006020820190508181036000830152614bec816145db565b9050919050565b60006020820190508181036000830152614c0c816145fe565b9050919050565b60006020820190508181036000830152614c2c81614621565b9050919050565b60006020820190508181036000830152614c4c81614667565b9050919050565b60006020820190508181036000830152614c6c8161468a565b9050919050565b60006020820190508181036000830152614c8c816146ad565b9050919050565b60006020820190508181036000830152614cac816146d0565b9050919050565b60006020820190508181036000830152614ccc816146f3565b9050919050565b60006020820190508181036000830152614cec81614716565b9050919050565b60006020820190508181036000830152614d0c81614739565b9050919050565b60006020820190508181036000830152614d2c8161475c565b9050919050565b60006020820190508181036000830152614d4c8161477f565b9050919050565b60006020820190508181036000830152614d6c816147a2565b9050919050565b60006020820190508181036000830152614d8c816147c5565b9050919050565b60006020820190508181036000830152614dac816147e8565b9050919050565b60006020820190508181036000830152614dcc8161480b565b9050919050565b6000604082019050614de8600083018461482e565b92915050565b6000602082019050614e03600083018461485d565b92915050565b6000614e13614e24565b9050614e1f82826151b4565b919050565b6000604051905090565b600067ffffffffffffffff821115614e4957614e4861533f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e7557614e7461533f565b5b614e7e8261538c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ee4826150bc565b9150614eef836150bc565b9250826fffffffffffffffffffffffffffffffff03821115614f1457614f13615283565b5b828201905092915050565b6000614f2a826150f8565b9150614f35836150f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f6a57614f69615283565b5b828201905092915050565b6000614f80826150f8565b9150614f8b836150f8565b925082614f9b57614f9a6152b2565b5b828204905092915050565b6000614fb1826150f8565b9150614fbc836150f8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ff557614ff4615283565b5b828202905092915050565b600061500b826150bc565b9150615016836150bc565b92508282101561502957615028615283565b5b828203905092915050565b600061503f826150f8565b915061504a836150f8565b92508282101561505d5761505c615283565b5b828203905092915050565b6000615073826150d8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015615143578082015181840152602081019050615128565b83811115615152576000848401525b50505050565b6000615163826150f8565b9150600082141561517757615176615283565b5b600182039050919050565b6000600282049050600182168061519a57607f821691505b602082108114156151ae576151ad6152e1565b5b50919050565b6151bd8261538c565b810181811067ffffffffffffffff821117156151dc576151db61533f565b5b80604052505050565b60006151f0826150f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561522357615222615283565b5b600182019050919050565b600061523982615240565b9050919050565b600061524b8261539d565b9050919050565b600061525d826150f8565b9150615268836150f8565b925082615278576152776152b2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f72656163686564207075626c69632073616c6520706572206d696e74206d617860008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f72656163686564207075626c69632073616c65206d617820616d6f756e740000600082015250565b7f7265616368656420616c6c6f77206c697374207065722061646472657373206d60008201527f696e7420616d6f756e7400000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f496e76616c6964204d65726b6c652050726f6f662e0000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f616c6c6f774c6973742073616c6520686173206e6f7420626567756e20796574600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b615c9581615068565b8114615ca057600080fd5b50565b615cac8161507a565b8114615cb757600080fd5b50565b615cc381615086565b8114615cce57600080fd5b50565b615cda81615090565b8114615ce557600080fd5b50565b615cf1816150f8565b8114615cfc57600080fd5b5056fea26469706673582212207aa512ab3e82f4a5b9936cca7f5bbc98d19aa621eed6e1153d34f48bb41ba89b64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061025c5760003560e01c80638da5cb5b11610144578063bb122299116100b6578063dc33e6811161007a578063dc33e681146108fb578063e985e9c514610938578063ec3fb7ad14610975578063ec8bda8e1461099e578063f2fde38b146109ba578063f90296d8146109e35761025c565b8063bb122299146107f0578063c5f77e161461082d578063c87b56dd1461086a578063ceb0a257146108a7578063d7224ba0146108d05761025c565b8063a945bf8011610108578063a945bf8014610715578063ac44600214610740578063b3ab66b014610757578063b423fe6714610773578063b6c693e51461079c578063b88d4fde146107c75761025c565b80638da5cb5b1461062e5780639231ab2a1461065957806395d89b41146106965780639dc74e63146106c1578063a22cb465146106ec5761025c565b8063300bc3a1116101dd5780634f6ccce7116101a15780634f6ccce71461050e57806355f804b31461054b5780636352211e1461057457806370a08231146105b1578063715018a6146105ee57806384584d07146106055761025c565b8063300bc3a11461043d5780633ba5ae241461046657806342842e0e14610491578063499e8eec146104ba5780634d278499146104e55761025c565b806318160ddd1161022457806318160ddd146103585780631a534faf1461038357806323b872dd146103ae5780632d20fb60146103d75780632f745c59146104005761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780631342ff4c1461032f575b600080fd5b34801561026d57600080fd5b506102886004803603810190610283919061412b565b610a0c565b6040516102959190614936565b60405180910390f35b3480156102aa57600080fd5b506102b3610b56565b6040516102c09190614951565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb91906141d2565b610be8565b6040516102fd91906148cf565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190614091565b610c6d565b005b34801561033b57600080fd5b50610356600480360381019061035191906141d2565b610d86565b005b34801561036457600080fd5b5061036d610f5d565b60405161037a9190614dee565b60405180910390f35b34801561038f57600080fd5b50610398610f67565b6040516103a59190614936565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613f7b565b610f7e565b005b3480156103e357600080fd5b506103fe60048036038101906103f991906141d2565b610f8e565b005b34801561040c57600080fd5b5061042760048036038101906104229190614091565b61106c565b6040516104349190614dee565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f91906140d1565b61126a565b005b34801561047257600080fd5b5061047b611303565b6040516104889190614dee565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190613f7b565b611327565b005b3480156104c657600080fd5b506104cf611347565b6040516104dc9190614936565b60405180910390f35b3480156104f157600080fd5b5061050c600480360381019061050791906141d2565b61135e565b005b34801561051a57600080fd5b50610535600480360381019061053091906141d2565b6113e4565b6040516105429190614dee565b60405180910390f35b34801561055757600080fd5b50610572600480360381019061056d9190614185565b611437565b005b34801561058057600080fd5b5061059b600480360381019061059691906141d2565b6114c9565b6040516105a891906148cf565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190613f0e565b6114df565b6040516105e59190614dee565b60405180910390f35b3480156105fa57600080fd5b506106036115c8565b005b34801561061157600080fd5b5061062c600480360381019061062791906140fe565b611650565b005b34801561063a57600080fd5b506106436116d6565b60405161065091906148cf565b60405180910390f35b34801561066557600080fd5b50610680600480360381019061067b91906141d2565b6116ff565b60405161068d9190614dd3565b60405180910390f35b3480156106a257600080fd5b506106ab611717565b6040516106b89190614951565b60405180910390f35b3480156106cd57600080fd5b506106d66117a9565b6040516106e39190614dee565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190614051565b6117af565b005b34801561072157600080fd5b5061072a611930565b6040516107379190614dee565b60405180910390f35b34801561074c57600080fd5b50610755611936565b005b610771600480360381019061076c91906141d2565b611ab7565b005b34801561077f57600080fd5b5061079a600480360381019061079591906140d1565b611c5f565b005b3480156107a857600080fd5b506107b1611cf8565b6040516107be9190614936565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190613fce565b611d0b565b005b3480156107fc57600080fd5b5061081760048036038101906108129190613f0e565b611d67565b6040516108249190614dee565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613f0e565b611d7f565b6040516108619190614936565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c91906141d2565b611d9f565b60405161089e9190614951565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c991906141d2565b611e46565b005b3480156108dc57600080fd5b506108e5611ecc565b6040516108f29190614dee565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d9190613f0e565b611ed2565b60405161092f9190614dee565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613f3b565b611ee4565b60405161096c9190614936565b60405180910390f35b34801561098157600080fd5b5061099c600480360381019061099791906141d2565b611f78565b005b6109b860048036038101906109b391906141ff565b611ffe565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190613f0e565b6123ad565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a0591906141d2565b6124a5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ad757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b3f57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b4f5750610b4e8261252b565b5b9050919050565b606060028054610b6590615182565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9190615182565b8015610bde5780601f10610bb357610100808354040283529160200191610bde565b820191906000526020600020905b815481529060010190602001808311610bc157829003601f168201915b5050505050905090565b6000610bf382612595565b610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2990614d93565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c78826114c9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce090614c13565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d086125a3565b73ffffffffffffffffffffffffffffffffffffffff161480610d375750610d3681610d316125a3565b611ee4565b5b610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90614ad3565b60405180910390fd5b610d818383836125ab565b505050565b610d8e6125a3565b73ffffffffffffffffffffffffffffffffffffffff16610dac6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614610e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df990614b73565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000bb881610e2c610f5d565b610e369190614f1f565b1115610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90614cf3565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000003282610ea59190614f75565b905060005b81811015610eef57610edc337f000000000000000000000000000000000000000000000000000000000000003261265d565b8080610ee7906151e5565b915050610eaa565b5060007f000000000000000000000000000000000000000000000000000000000000003283610f1e9190615252565b14610f5957610f58337f000000000000000000000000000000000000000000000000000000000000003284610f539190615252565b61265d565b5b5050565b6000600154905090565b6000600c60009054906101000a900460ff16905090565b610f8983838361267b565b505050565b610f966125a3565b73ffffffffffffffffffffffffffffffffffffffff16610fb46116d6565b73ffffffffffffffffffffffffffffffffffffffff161461100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190614b73565b60405180910390fd5b60026009541415611050576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104790614d53565b60405180910390fd5b600260098190555061106181612c34565b600160098190555050565b6000611077836114df565b82106110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90614973565b60405180910390fd5b60006110c2610f5d565b905060008060005b83811015611228576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111bc57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112145786841415611205578195505050505050611264565b8380611210906151e5565b9450505b508080611220906151e5565b9150506110ca565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90614d13565b60405180910390fd5b92915050565b6112726125a3565b73ffffffffffffffffffffffffffffffffffffffff166112906116d6565b73ffffffffffffffffffffffffffffffffffffffff16146112e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dd90614b73565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000003281565b61134283838360405180602001604052806000815250611d0b565b505050565b6000601260009054906101000a900460ff16905090565b6113666125a3565b73ffffffffffffffffffffffffffffffffffffffff166113846116d6565b73ffffffffffffffffffffffffffffffffffffffff16146113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d190614b73565b60405180910390fd5b8060148190555050565b60006113ee610f5d565b821061142f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611426906149f3565b60405180910390fd5b819050919050565b61143f6125a3565b73ffffffffffffffffffffffffffffffffffffffff1661145d6116d6565b73ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614b73565b60405180910390fd5b8181600a91906114c4929190613c4f565b505050565b60006114d482612ec2565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790614b13565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115d06125a3565b73ffffffffffffffffffffffffffffffffffffffff166115ee6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90614b73565b60405180910390fd5b61164e60006130c5565b565b6116586125a3565b73ffffffffffffffffffffffffffffffffffffffff166116766116d6565b73ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390614b73565b60405180910390fd5b80600f8190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611707613cd5565b61171082612ec2565b9050919050565b60606003805461172690615182565b80601f016020809104026020016040519081016040528092919081815260200182805461175290615182565b801561179f5780601f106117745761010080835404028352916020019161179f565b820191906000526020600020905b81548152906001019060200180831161178257829003601f168201915b5050505050905090565b60145481565b6117b76125a3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181c90614bb3565b60405180910390fd5b80600760006118326125a3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118df6125a3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119249190614936565b60405180910390a35050565b60135481565b61193e6125a3565b73ffffffffffffffffffffffffffffffffffffffff1661195c6116d6565b73ffffffffffffffffffffffffffffffffffffffff16146119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614b73565b60405180910390fd5b600260095414156119f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ef90614d53565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611a26906148ba565b60006040518083038185875af1925050503d8060008114611a63576040519150601f19603f3d011682016040523d82523d6000602084013e611a68565b606091505b5050905080611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa390614c33565b60405180910390fd5b506001600981905550565b601260009054906101000a900460ff16611b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afd90614bf3565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000bb881611b30610f5d565b611b3a9190614f1f565b1115611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7290614b33565b60405180910390fd5b806014541015611bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb790614a33565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000032811115611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a906149d3565b60405180910390fd5b611c2d338261265d565b8060146000828254611c3f9190615034565b92505081905550611c5c81601354611c579190614fa6565b613189565b50565b611c676125a3565b73ffffffffffffffffffffffffffffffffffffffff16611c856116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd290614b73565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b601260009054906101000a900460ff1681565b611d1684848461267b565b611d228484848461322a565b611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890614c53565b60405180910390fd5b50505050565b60116020528060005260406000206000915090505481565b60106020528060005260406000206000915054906101000a900460ff1681565b6060611daa82612595565b611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090614b93565b60405180910390fd5b6000611df36133c1565b90506000815111611e135760405180602001604052806000815250611e3e565b80611e1d84613453565b604051602001611e2e929190614896565b6040516020818303038152906040525b915050919050565b611e4e6125a3565b73ffffffffffffffffffffffffffffffffffffffff16611e6c6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb990614b73565b60405180910390fd5b80600e8190555050565b60085481565b6000611edd826135b4565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f806125a3565b73ffffffffffffffffffffffffffffffffffffffff16611f9e6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614611ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611feb90614b73565b60405180910390fd5b80600d8190555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461206c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206390614ab3565b60405180910390fd5b600c60009054906101000a900460ff166120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614cd3565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000bb8826120e5610f5d565b6120ef9190614f1f565b1115612130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212790614b33565b60405180910390fd5b600033604051602001612143919061487b565b60405160208183030381529060405280519060200120905061216882600f548361369d565b6121a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219e90614a93565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612297576001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600e54601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b82601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090614a53565b60405180910390fd5b82601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123689190615034565b92505081905550612379338461265d565b82600d600082825461238b9190615034565b925050819055506123a883600b546123a39190614fa6565b613189565b505050565b6123b56125a3565b73ffffffffffffffffffffffffffffffffffffffff166123d36116d6565b73ffffffffffffffffffffffffffffffffffffffff1614612429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242090614b73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614993565b60405180910390fd5b6124a2816130c5565b50565b6124ad6125a3565b73ffffffffffffffffffffffffffffffffffffffff166124cb6116d6565b73ffffffffffffffffffffffffffffffffffffffff1614612521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251890614b73565b60405180910390fd5b8060138190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6126778282604051806020016040528060008152506136b4565b5050565b600061268682612ec2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166126ad6125a3565b73ffffffffffffffffffffffffffffffffffffffff16148061270957506126d26125a3565b73ffffffffffffffffffffffffffffffffffffffff166126f184610be8565b73ffffffffffffffffffffffffffffffffffffffff16145b806127255750612724826000015161271f6125a3565b611ee4565b5b905080612767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275e90614bd3565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090614b53565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614a13565b60405180910390fd5b6128568585856001613b94565b61286660008484600001516125ab565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166128d49190615000565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129789190614ed9565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612a7e9190614f1f565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bc457612af481612595565b15612bc3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c2c8686866001613b9a565b505050505050565b6000600854905060008211612c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7590614af3565b60405180910390fd5b600060018383612c8e9190614f1f565b612c989190615034565b905060017f0000000000000000000000000000000000000000000000000000000000000bb8612cc79190615034565b811115612cfe5760017f0000000000000000000000000000000000000000000000000000000000000bb8612cfb9190615034565b90505b612d0781612595565b612d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3d90614d33565b60405180910390fd5b60008290505b818111612ea957600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612e96576000612dc982612ec2565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080612ea1906151e5565b915050612d4c565b50600181612eb79190614f1f565b600881905550505050565b612eca613cd5565b612ed382612595565b612f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f09906149b3565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000328310612f765760017f000000000000000000000000000000000000000000000000000000000000003284612f699190615034565b612f739190614f1f565b90505b60008390505b818110613084576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613070578093505050506130c0565b50808061307c90615158565b915050612f7c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b790614d73565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b803410156131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c390614c73565b60405180910390fd5b80341115613227573373ffffffffffffffffffffffffffffffffffffffff166108fc82346131fa9190615034565b9081150290604051600060405180830381858888f19350505050158015613225573d6000803e3d6000fd5b505b50565b600061324b8473ffffffffffffffffffffffffffffffffffffffff16613ba0565b156133b4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132746125a3565b8786866040518563ffffffff1660e01b815260040161329694939291906148ea565b602060405180830381600087803b1580156132b057600080fd5b505af19250505080156132e157506040513d601f19601f820116820180604052508101906132de9190614158565b60015b613364573d8060008114613311576040519150601f19603f3d011682016040523d82523d6000602084013e613316565b606091505b5060008151141561335c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335390614c53565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506133b9565b600190505b949350505050565b6060600a80546133d090615182565b80601f01602080910402602001604051908101604052809291908181526020018280546133fc90615182565b80156134495780601f1061341e57610100808354040283529160200191613449565b820191906000526020600020905b81548152906001019060200180831161342c57829003601f168201915b5050505050905090565b6060600082141561349b576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135af565b600082905060005b600082146134cd5780806134b6906151e5565b915050600a826134c69190614f75565b91506134a3565b60008167ffffffffffffffff8111156134e9576134e861533f565b5b6040519080825280601f01601f19166020018201604052801561351b5781602001600182028036833780820191505090505b5090505b600085146135a8576001826135349190615034565b9150600a856135439190615252565b603061354f9190614f1f565b60f81b81838151811061356557613564615310565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135a19190614f75565b945061351f565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361c90614a73565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6000826136aa8584613bc3565b1490509392505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372290614cb3565b60405180910390fd5b61373481612595565b15613774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376b90614c93565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000328311156137d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ce90614db3565b60405180910390fd5b6137e46000858386613b94565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516138e19190614ed9565b6fffffffffffffffffffffffffffffffff1681526020018583602001516139089190614ed9565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613b7757818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613b17600088848861322a565b613b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4d90614c53565b60405180910390fd5b8180613b61906151e5565b9250508080613b6f906151e5565b915050613aa6565b5080600181905550613b8c6000878588613b9a565b505050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008082905060005b8451811015613c2d576000858281518110613bea57613be9615310565b5b60200260200101519050808311613c0c57613c058382613c38565b9250613c19565b613c168184613c38565b92505b508080613c25906151e5565b915050613bcc565b508091505092915050565b600082600052816020526040600020905092915050565b828054613c5b90615182565b90600052602060002090601f016020900481019282613c7d5760008555613cc4565b82601f10613c9657803560ff1916838001178555613cc4565b82800160010185558215613cc4579182015b82811115613cc3578235825591602001919060010190613ca8565b5b509050613cd19190613d0f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613d28576000816000905550600101613d10565b5090565b6000613d3f613d3a84614e2e565b614e09565b90508083825260208201905082856020860282011115613d6257613d61615378565b5b60005b85811015613d925781613d788882613e36565b845260208401935060208301925050600181019050613d65565b5050509392505050565b6000613daf613daa84614e5a565b614e09565b905082815260208101848484011115613dcb57613dca61537d565b5b613dd6848285615116565b509392505050565b600081359050613ded81615c8c565b92915050565b600082601f830112613e0857613e07615373565b5b8135613e18848260208601613d2c565b91505092915050565b600081359050613e3081615ca3565b92915050565b600081359050613e4581615cba565b92915050565b600081359050613e5a81615cd1565b92915050565b600081519050613e6f81615cd1565b92915050565b600082601f830112613e8a57613e89615373565b5b8135613e9a848260208601613d9c565b91505092915050565b60008083601f840112613eb957613eb8615373565b5b8235905067ffffffffffffffff811115613ed657613ed561536e565b5b602083019150836001820283011115613ef257613ef1615378565b5b9250929050565b600081359050613f0881615ce8565b92915050565b600060208284031215613f2457613f23615387565b5b6000613f3284828501613dde565b91505092915050565b60008060408385031215613f5257613f51615387565b5b6000613f6085828601613dde565b9250506020613f7185828601613dde565b9150509250929050565b600080600060608486031215613f9457613f93615387565b5b6000613fa286828701613dde565b9350506020613fb386828701613dde565b9250506040613fc486828701613ef9565b9150509250925092565b60008060008060808587031215613fe857613fe7615387565b5b6000613ff687828801613dde565b945050602061400787828801613dde565b935050604061401887828801613ef9565b925050606085013567ffffffffffffffff81111561403957614038615382565b5b61404587828801613e75565b91505092959194509250565b6000806040838503121561406857614067615387565b5b600061407685828601613dde565b925050602061408785828601613e21565b9150509250929050565b600080604083850312156140a8576140a7615387565b5b60006140b685828601613dde565b92505060206140c785828601613ef9565b9150509250929050565b6000602082840312156140e7576140e6615387565b5b60006140f584828501613e21565b91505092915050565b60006020828403121561411457614113615387565b5b600061412284828501613e36565b91505092915050565b60006020828403121561414157614140615387565b5b600061414f84828501613e4b565b91505092915050565b60006020828403121561416e5761416d615387565b5b600061417c84828501613e60565b91505092915050565b6000806020838503121561419c5761419b615387565b5b600083013567ffffffffffffffff8111156141ba576141b9615382565b5b6141c685828601613ea3565b92509250509250929050565b6000602082840312156141e8576141e7615387565b5b60006141f684828501613ef9565b91505092915050565b6000806040838503121561421657614215615387565b5b600061422485828601613ef9565b925050602083013567ffffffffffffffff81111561424557614244615382565b5b61425185828601613df3565b9150509250929050565b61426481615068565b82525050565b61427381615068565b82525050565b61428a61428582615068565b61522e565b82525050565b6142998161507a565b82525050565b60006142aa82614e8b565b6142b48185614ea1565b93506142c4818560208601615125565b6142cd8161538c565b840191505092915050565b60006142e382614e96565b6142ed8185614ebd565b93506142fd818560208601615125565b6143068161538c565b840191505092915050565b600061431c82614e96565b6143268185614ece565b9350614336818560208601615125565b80840191505092915050565b600061434f602283614ebd565b915061435a826153aa565b604082019050919050565b6000614372602683614ebd565b915061437d826153f9565b604082019050919050565b6000614395602a83614ebd565b91506143a082615448565b604082019050919050565b60006143b8602783614ebd565b91506143c382615497565b604082019050919050565b60006143db602383614ebd565b91506143e6826154e6565b604082019050919050565b60006143fe602583614ebd565b915061440982615535565b604082019050919050565b6000614421601e83614ebd565b915061442c82615584565b602082019050919050565b6000614444602a83614ebd565b915061444f826155ad565b604082019050919050565b6000614467603183614ebd565b9150614472826155fc565b604082019050919050565b600061448a601583614ebd565b91506144958261564b565b602082019050919050565b60006144ad601e83614ebd565b91506144b882615674565b602082019050919050565b60006144d0603983614ebd565b91506144db8261569d565b604082019050919050565b60006144f3601883614ebd565b91506144fe826156ec565b602082019050919050565b6000614516602b83614ebd565b915061452182615715565b604082019050919050565b6000614539601283614ebd565b915061454482615764565b602082019050919050565b600061455c602683614ebd565b91506145678261578d565b604082019050919050565b600061457f602083614ebd565b915061458a826157dc565b602082019050919050565b60006145a2602f83614ebd565b91506145ad82615805565b604082019050919050565b60006145c5601a83614ebd565b91506145d082615854565b602082019050919050565b60006145e8603283614ebd565b91506145f38261587d565b604082019050919050565b600061460b601d83614ebd565b9150614616826158cc565b602082019050919050565b600061462e602283614ebd565b9150614639826158f5565b604082019050919050565b6000614651600083614eb2565b915061465c82615944565b600082019050919050565b6000614674601083614ebd565b915061467f82615947565b602082019050919050565b6000614697603383614ebd565b91506146a282615970565b604082019050919050565b60006146ba601683614ebd565b91506146c5826159bf565b602082019050919050565b60006146dd601d83614ebd565b91506146e8826159e8565b602082019050919050565b6000614700602183614ebd565b915061470b82615a11565b604082019050919050565b6000614723602083614ebd565b915061472e82615a60565b602082019050919050565b6000614746602783614ebd565b915061475182615a89565b604082019050919050565b6000614769602e83614ebd565b915061477482615ad8565b604082019050919050565b600061478c602683614ebd565b915061479782615b27565b604082019050919050565b60006147af601f83614ebd565b91506147ba82615b76565b602082019050919050565b60006147d2602f83614ebd565b91506147dd82615b9f565b604082019050919050565b60006147f5602d83614ebd565b915061480082615bee565b604082019050919050565b6000614818602283614ebd565b915061482382615c3d565b604082019050919050565b604082016000820151614844600085018261425b565b506020820151614857602085018261486c565b50505050565b614866816150f8565b82525050565b61487581615102565b82525050565b60006148878284614279565b60148201915081905092915050565b60006148a28285614311565b91506148ae8284614311565b91508190509392505050565b60006148c582614644565b9150819050919050565b60006020820190506148e4600083018461426a565b92915050565b60006080820190506148ff600083018761426a565b61490c602083018661426a565b614919604083018561485d565b818103606083015261492b818461429f565b905095945050505050565b600060208201905061494b6000830184614290565b92915050565b6000602082019050818103600083015261496b81846142d8565b905092915050565b6000602082019050818103600083015261498c81614342565b9050919050565b600060208201905081810360008301526149ac81614365565b9050919050565b600060208201905081810360008301526149cc81614388565b9050919050565b600060208201905081810360008301526149ec816143ab565b9050919050565b60006020820190508181036000830152614a0c816143ce565b9050919050565b60006020820190508181036000830152614a2c816143f1565b9050919050565b60006020820190508181036000830152614a4c81614414565b9050919050565b60006020820190508181036000830152614a6c81614437565b9050919050565b60006020820190508181036000830152614a8c8161445a565b9050919050565b60006020820190508181036000830152614aac8161447d565b9050919050565b60006020820190508181036000830152614acc816144a0565b9050919050565b60006020820190508181036000830152614aec816144c3565b9050919050565b60006020820190508181036000830152614b0c816144e6565b9050919050565b60006020820190508181036000830152614b2c81614509565b9050919050565b60006020820190508181036000830152614b4c8161452c565b9050919050565b60006020820190508181036000830152614b6c8161454f565b9050919050565b60006020820190508181036000830152614b8c81614572565b9050919050565b60006020820190508181036000830152614bac81614595565b9050919050565b60006020820190508181036000830152614bcc816145b8565b9050919050565b60006020820190508181036000830152614bec816145db565b9050919050565b60006020820190508181036000830152614c0c816145fe565b9050919050565b60006020820190508181036000830152614c2c81614621565b9050919050565b60006020820190508181036000830152614c4c81614667565b9050919050565b60006020820190508181036000830152614c6c8161468a565b9050919050565b60006020820190508181036000830152614c8c816146ad565b9050919050565b60006020820190508181036000830152614cac816146d0565b9050919050565b60006020820190508181036000830152614ccc816146f3565b9050919050565b60006020820190508181036000830152614cec81614716565b9050919050565b60006020820190508181036000830152614d0c81614739565b9050919050565b60006020820190508181036000830152614d2c8161475c565b9050919050565b60006020820190508181036000830152614d4c8161477f565b9050919050565b60006020820190508181036000830152614d6c816147a2565b9050919050565b60006020820190508181036000830152614d8c816147c5565b9050919050565b60006020820190508181036000830152614dac816147e8565b9050919050565b60006020820190508181036000830152614dcc8161480b565b9050919050565b6000604082019050614de8600083018461482e565b92915050565b6000602082019050614e03600083018461485d565b92915050565b6000614e13614e24565b9050614e1f82826151b4565b919050565b6000604051905090565b600067ffffffffffffffff821115614e4957614e4861533f565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e7557614e7461533f565b5b614e7e8261538c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ee4826150bc565b9150614eef836150bc565b9250826fffffffffffffffffffffffffffffffff03821115614f1457614f13615283565b5b828201905092915050565b6000614f2a826150f8565b9150614f35836150f8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f6a57614f69615283565b5b828201905092915050565b6000614f80826150f8565b9150614f8b836150f8565b925082614f9b57614f9a6152b2565b5b828204905092915050565b6000614fb1826150f8565b9150614fbc836150f8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ff557614ff4615283565b5b828202905092915050565b600061500b826150bc565b9150615016836150bc565b92508282101561502957615028615283565b5b828203905092915050565b600061503f826150f8565b915061504a836150f8565b92508282101561505d5761505c615283565b5b828203905092915050565b6000615073826150d8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015615143578082015181840152602081019050615128565b83811115615152576000848401525b50505050565b6000615163826150f8565b9150600082141561517757615176615283565b5b600182039050919050565b6000600282049050600182168061519a57607f821691505b602082108114156151ae576151ad6152e1565b5b50919050565b6151bd8261538c565b810181811067ffffffffffffffff821117156151dc576151db61533f565b5b80604052505050565b60006151f0826150f8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561522357615222615283565b5b600182019050919050565b600061523982615240565b9050919050565b600061524b8261539d565b9050919050565b600061525d826150f8565b9150615268836150f8565b925082615278576152776152b2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f72656163686564207075626c69632073616c6520706572206d696e74206d617860008201527f20616d6f756e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f72656163686564207075626c69632073616c65206d617820616d6f756e740000600082015250565b7f7265616368656420616c6c6f77206c697374207065722061646472657373206d60008201527f696e7420616d6f756e7400000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f496e76616c6964204d65726b6c652050726f6f662e0000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f616c6c6f774c6973742073616c6520686173206e6f7420626567756e20796574600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206460008201527f6576206d696e7400000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b615c9581615068565b8114615ca057600080fd5b50565b615cac8161507a565b8114615cb757600080fd5b50565b615cc381615086565b8114615cce57600080fd5b50565b615cda81615090565b8114615ce557600080fd5b50565b615cf1816150f8565b8114615cfc57600080fd5b5056fea26469706673582212207aa512ab3e82f4a5b9936cca7f5bbc98d19aa621eed6e1153d34f48bb41ba89b64736f6c63430008070033

Deployed Bytecode Sourcemap

2030:5136:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4114:358:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5778:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7243:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6821:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2194:478:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2720:92:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5371:96:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8061:136:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3155:122:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3334:721:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5264:101:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5988:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8255:151:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6792:99:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6910:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2876:174:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2851:104:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5608:116:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4523:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;;;;;;;;;;;:::i;:::-;;5168:90:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1036:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3400:149:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5926:96:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5902:41:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7502:269:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5853:43:12;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2961:188;;;;;;;;;;;;;:::i;:::-;;6042:635;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6683:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5811:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8464:300:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4166:51:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4113:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6080:377:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5631:156:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12734:43:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3283:111:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7829:178:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5486:140:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4225:937;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1918:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7055:108:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4114:358:11;4236:4;4278:25;4263:40;;;:11;:40;;;;:98;;;;4328:33;4313:48;;;:11;:48;;;;4263:98;:158;;;;4386:35;4371:50;;;:11;:50;;;;4263:158;:204;;;;4431:36;4455:11;4431:23;:36::i;:::-;4263:204;4250:217;;4114:358;;;:::o;5778:92::-;5832:13;5860:5;5853:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5778:92;:::o;7243:200::-;7311:7;7334:16;7342:7;7334;:16::i;:::-;7326:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7414:15;:24;7430:7;7414:24;;;;;;;;;;;;;;;;;;;;;7407:31;;7243:200;;;:::o;6821:369::-;6889:13;6905:24;6921:7;6905:15;:24::i;:::-;6889:40;;6949:5;6943:11;;:2;:11;;;;6935:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;7031:5;7015:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;7040:37;7057:5;7064:12;:10;:12::i;:::-;7040:16;:37::i;:::-;7015:62;7000:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;7157:28;7166:2;7170:7;7179:5;7157:8;:28::i;:::-;6883:307;6821:369;;:::o;2194:478:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2311:14:12::1;2299:8;2283:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;2262:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;2400:17;2431:12;2420:8;:23;;;;:::i;:::-;2400:43;;2458:9;2453:100;2477:9;2473:1;:13;2453:100;;;2507:35;2517:10;2529:12;2507:9;:35::i;:::-;2488:3;;;;;:::i;:::-;;;;2453:100;;;;2593:1;2577:12;2566:8;:23;;;;:::i;:::-;:28;2562:104;;2609:46;2619:10;2642:12;2631:8;:23;;;;:::i;:::-;2609:9;:46::i;:::-;2562:104;2252:420;2194:478:::0;:::o;2720:92:11:-;2773:7;2795:12;;2788:19;;2720:92;:::o;5371:96:12:-;5423:4;5445:15;;;;;;;;;;;5438:22;;5371:96;:::o;8061:136:11:-;8164:28;8174:4;8180:2;8184:7;8164:9;:28::i;:::-;8061:136;;;:::o;3155:122:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:1::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;3242:28:12::2;3261:8;3242:18;:28::i;:::-;1701:1:1::1;2628:7;:22;;;;3155:122:12::0;:::o;3334:721:11:-;3439:7;3472:16;3482:5;3472:9;:16::i;:::-;3464:5;:24;3456:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3533:22;3558:13;:11;:13::i;:::-;3533:38;;3577:19;3606:25;3655:9;3650:339;3674:14;3670:1;:18;3650:339;;;3703:31;3737:11;:14;3749:1;3737:14;;;;;;;;;;;3703:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3789:1;3763:28;;:9;:14;;;:28;;;3759:87;;3823:9;:14;;;3803:34;;3759:87;3878:5;3857:26;;:17;:26;;;3853:130;;;3914:5;3899:11;:20;3895:57;;;3940:1;3933:8;;;;;;;;;3895:57;3961:13;;;;;:::i;:::-;;;;3853:130;3695:294;3690:3;;;;;:::i;:::-;;;;3650:339;;;;3994:56;;;;;;;;;;:::i;:::-;;;;;;;;3334:721;;;;;:::o;5264:101:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5352:6:12::1;5334:15;;:24;;;;;;;;;;;;;;;;;;5264:101:::0;:::o;5988:47::-;;;:::o;8255:151:11:-;8362:39;8379:4;8385:2;8389:7;8362:39;;;;;;;;;;;;:16;:39::i;:::-;8255:151;;;:::o;6792:99:12:-;6845:4;6868:16;;;;;;;;;;;6861:23;;6792:99;:::o;6910:140::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7023:20:12::1;7001:19;:42;;;;6910:140:::0;:::o;2876:174:11:-;2943:7;2974:13;:11;:13::i;:::-;2966:5;:21;2958:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;3040:5;3033:12;;2876:174;;;:::o;2851:104:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2941:7:12::1;;2925:13;:23;;;;;;;:::i;:::-;;2851:104:::0;;:::o;5608:116:11:-;5672:7;5694:20;5706:7;5694:11;:20::i;:::-;:25;;;5687:32;;5608:116;;;:::o;4523:208::-;4587:7;4627:1;4610:19;;:5;:19;;;;4602:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4698:12;:19;4711:5;4698:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4690:36;;4683:43;;4523:208;;;:::o;1668:101:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;5168:90:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5246:5:12::1;5233:10;:18;;;;5168:90:::0;:::o;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;3400:149:12:-;3478:21;;:::i;:::-;3522:20;3534:7;3522:11;:20::i;:::-;3515:27;;3400:149;;;:::o;5926:96:11:-;5982:13;6010:7;6003:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5926:96;:::o;5902:41:12:-;;;;:::o;7502:269:11:-;7604:12;:10;:12::i;:::-;7592:24;;:8;:24;;;;7584:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7699:8;7654:18;:32;7673:12;:10;:12::i;:::-;7654:32;;;;;;;;;;;;;;;:42;7687:8;7654:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;7747:8;7718:48;;7733:12;:10;:12::i;:::-;7718:48;;;7757:8;7718:48;;;;;;:::i;:::-;;;;;;;;7502:269;;:::o;5853:43:12:-;;;;:::o;2961:188::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:1::1;2325:7;;:19;;2317:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;3029:12:12::2;3047:10;:15;;3070:21;3047:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3028:68;;;3114:7;3106:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;3018:131;1701:1:1::1;2628:7;:22;;;;2961:188:12:o:0;6042:635::-;6128:16;;;;;;;;;;;6111:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;6250:14;6238:8;6222:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;6205:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;6354:8;6331:19;;:31;;6314:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;6454:17;6442:8;:29;;6425:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;6543:31;6553:10;6565:8;6543:9;:31::i;:::-;6607:8;6584:19;;:31;;;;;;;:::i;:::-;;;;;;;;6625:45;6661:8;6646:11;;6638:31;;;;:::i;:::-;6625:12;:45::i;:::-;6042:635;:::o;6683:103::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6773:6:12::1;6754:16;;:25;;;;;;;;;;;;;;;;;;6683:103:::0;:::o;5811:36::-;;;;;;;;;;;;;:::o;8464:300:11:-;8595:28;8605:4;8611:2;8615:7;8595:9;:28::i;:::-;8644:48;8667:4;8673:2;8677:7;8686:5;8644:22;:48::i;:::-;8629:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;8464:300;;;;:::o;4166:51:12:-;;;;;;;;;;;;;;;;;:::o;4113:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;6080:377:11:-;6173:13;6211:16;6219:7;6211;:16::i;:::-;6196:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;6297:21;6321:10;:8;:10::i;:::-;6297:34;;6374:1;6356:7;6350:21;:25;:102;;;;;;;;;;;;;;;;;6410:7;6419:18;:7;:16;:18::i;:::-;6393:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6350:102;6337:115;;;6080:377;;;:::o;5631:156:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5756:24:12::1;5730:23;:50;;;;5631:156:::0;:::o;12734:43:11:-;;;;:::o;3283:111:12:-;3341:7;3367:20;3381:5;3367:13;:20::i;:::-;3360:27;;3283:111;;;:::o;7829:178:11:-;7946:4;7967:18;:25;7986:5;7967:25;;;;;;;;;;;;;;;:35;7993:8;7967:35;;;;;;;;;;;;;;;;;;;;;;;;;7960:42;;7829:178;;;;:::o;5486:140:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5599:20:12::1;5577:19;:42;;;;5486:140:::0;:::o;4225:937::-;4338:10;4325:23;;:9;:23;;;4317:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;4401:15;;;;;;;;;;;4393:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;4499:14;4487:8;4471:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;4463:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4546:12;4588:10;4571:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;4561:39;;;;;;4546:54;;4618:43;4637:5;4644:10;;4656:4;4618:18;:43::i;:::-;4610:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;4713:15;:27;4729:10;4713:27;;;;;;;;;;;;;;;;;;;;;;;;;4709:159;;4785:4;4755:15;:27;4771:10;4755:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;4834:23;;4803:16;:28;4820:10;4803:28;;;;;;;;;;;;;;;:54;;;;4709:159;4917:8;4885:16;:28;4902:10;4885:28;;;;;;;;;;;;;;;;:40;;4877:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;5014:8;4982:16;:28;4999:10;4982:28;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;5032:31;5042:10;5054:8;5032:9;:31::i;:::-;5096:8;5073:19;;:31;;;;;;;:::i;:::-;;;;;;;;5114:41;5146:8;5127:18;;:27;;;;:::i;:::-;5114:12;:41::i;:::-;4307:855;4225:937;;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;7055:108:12:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7144:12:12::1;7130:11;:26;;;;7055:108:::0;:::o;829:155:9:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;8994:103:11:-;9051:4;9080:12;;9070:7;:22;9063:29;;8994:103;;;:::o;640:96:7:-;693:7;719:10;712:17;;640:96;:::o;12565:165:11:-;12684:2;12657:15;:24;12673:7;12657:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12717:7;12713:2;12697:28;;12706:5;12697:28;;;;;;;;;;;;12565:165;;;:::o;9101:96::-;9165:27;9175:2;9179:8;9165:27;;;;;;;;;;;;:9;:27::i;:::-;9101:96;;:::o;10982:1484::-;11074:35;11112:20;11124:7;11112:11;:20::i;:::-;11074:58;;11139:22;11181:13;:18;;;11165:34;;:12;:10;:12::i;:::-;:34;;;:80;;;;11233:12;:10;:12::i;:::-;11209:36;;:20;11221:7;11209:11;:20::i;:::-;:36;;;11165:80;:140;;;;11255:50;11272:13;:18;;;11292:12;:10;:12::i;:::-;11255:16;:50::i;:::-;11165:140;11139:167;;11328:17;11313:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;11455:4;11433:26;;:13;:18;;;:26;;;11418:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;11541:1;11527:16;;:2;:16;;;;11519:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11592:43;11614:4;11620:2;11624:7;11633:1;11592:21;:43::i;:::-;11689:49;11706:1;11710:7;11719:13;:18;;;11689:8;:49::i;:::-;11775:1;11745:12;:18;11758:4;11745:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11810:1;11782:12;:16;11795:2;11782:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11840:43;;;;;;;;11855:2;11840:43;;;;;;11866:15;11840:43;;;;;11817:11;:20;11829:7;11817:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12107:19;12139:1;12129:7;:11;;;;:::i;:::-;12107:33;;12191:1;12150:43;;:11;:24;12162:11;12150:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;12146:229;;;12207:20;12215:11;12207:7;:20::i;:::-;12203:166;;;12266:94;;;;;;;;12292:13;:18;;;12266:94;;;;;;12322:13;:28;;;12266:94;;;;;12239:11;:24;12251:11;12239:24;;;;;;;;;;;:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12203:166;12146:229;12405:7;12401:2;12386:27;;12395:4;12386:27;;;;;;;;;;;;12419:42;12440:4;12446:2;12450:7;12459:1;12419:20;:42::i;:::-;11068:1398;;;10982:1484;;;:::o;12877:827::-;12938:25;12966:24;;12938:52;;13015:1;13004:8;:12;12996:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;13051:16;13101:1;13090:8;13070:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;13051:51;;13140:1;13123:14;:18;;;;:::i;:::-;13112:8;:29;13108:79;;;13179:1;13162:14;:18;;;;:::i;:::-;13151:29;;13108:79;13300:17;13308:8;13300:7;:17::i;:::-;13292:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13371:9;13383:17;13371:29;;13366:289;13407:8;13402:1;:13;13366:289;;13465:1;13434:33;;:11;:14;13446:1;13434:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;13430:219;;;13479:31;13513:14;13525:1;13513:11;:14::i;:::-;13479:48;;13554:86;;;;;;;;13580:9;:14;;;13554:86;;;;;;13606:9;:24;;;13554:86;;;;;13537:11;:14;13549:1;13537:14;;;;;;;;;;;:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13469:180;13430:219;13417:3;;;;;:::i;:::-;;;;13366:289;;;;13698:1;13687:8;:12;;;;:::i;:::-;13660:24;:39;;;;12932:772;;12877:827;:::o;4973:586::-;5046:21;;:::i;:::-;5085:16;5093:7;5085;:16::i;:::-;5077:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5155:26;5202:12;5191:7;:23;5187:91;;5270:1;5255:12;5245:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5224:47;;5187:91;5289:12;5304:7;5289:22;;5284:207;5321:18;5313:4;:26;5284:207;;5357:31;5391:11;:17;5403:4;5391:17;;;;;;;;;;;5357:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5446:1;5420:28;;:9;:14;;;:28;;;5416:69;;5467:9;5460:16;;;;;;;5416:69;5349:142;5341:6;;;;;:::i;:::-;;;;5284:207;;;;5497:57;;;;;;;;;;:::i;:::-;;;;;;;;4973:586;;;;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;3555:219:12:-;3631:5;3618:9;:18;;3610:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;3689:5;3677:9;:17;3673:95;;;3718:10;3710:28;;:47;3751:5;3739:9;:17;;;;:::i;:::-;3710:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3673:95;3555:219;:::o;14235:667:11:-;14367:4;14383:15;:2;:13;;;:15::i;:::-;14379:519;;;14436:2;14420:36;;;14457:12;:10;:12::i;:::-;14471:4;14477:7;14486:5;14420:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14408:452;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14664:1;14647:6;:13;:18;14643:209;;;14679:61;;;;;;;;;;:::i;:::-;;;;;;;;14643:209;14822:6;14816:13;14807:6;14803:2;14799:15;14792:38;14408:452;14550:45;;;14540:55;;;:6;:55;;;;14533:62;;;;;14379:519;14887:4;14880:11;;14235:667;;;;;;;:::o;2733:112:12:-;2793:13;2825;2818:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2733:112;:::o;328:703:8:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;4735:234:11:-;4796:7;4843:1;4826:19;;:5;:19;;;;4811:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;4931:12;:19;4944:5;4931:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;4923:41;;4916:48;;4735:234;;;:::o;604:184:12:-;725:4;777;748:25;761:5;768:4;748:12;:25::i;:::-;:33;741:40;;604:184;;;;;:::o;9523:1239:11:-;9623:20;9646:12;;9623:35;;9686:1;9672:16;;:2;:16;;;;9664:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9861:21;9869:12;9861:7;:21::i;:::-;9860:22;9852:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9942:12;9930:8;:24;;9922:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10000:61;10030:1;10034:2;10038:12;10052:8;10000:21;:61::i;:::-;10068:30;10101:12;:16;10114:2;10101:16;;;;;;;;;;;;;;;10068:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10142:116;;;;;;;;10191:8;10161:11;:19;;;:39;;;;:::i;:::-;10142:116;;;;;;10243:8;10208:11;:24;;;:44;;;;:::i;:::-;10142:116;;;;;10123:12;:16;10136:2;10123:16;;;;;;;;;;;;;;;:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10292:43;;;;;;;;10307:2;10292:43;;;;;;10318:15;10292:43;;;;;10264:11;:25;10276:12;10264:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10342:20;10365:12;10342:35;;10389:9;10384:274;10408:8;10404:1;:12;10384:274;;;10461:12;10457:2;10436:38;;10453:1;10436:38;;;;;;;;;;;;10499:59;10530:1;10534:2;10538:12;10552:5;10499:22;:59::i;:::-;10482:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;10637:14;;;;;:::i;:::-;;;;10418:3;;;;;:::i;:::-;;;;10384:274;;;;10679:12;10664;:27;;;;10697:60;10726:1;10730:2;10734:12;10748:8;10697:20;:60::i;:::-;9617:1145;;;9523:1239;;;:::o;15350:136::-;;;;;:::o;15858:135::-;;;;;:::o;1175:320:6:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;1140:662:12:-;1223:7;1242:20;1265:4;1242:27;;1284:9;1279:488;1303:5;:12;1299:1;:16;1279:488;;;1336:20;1359:5;1365:1;1359:8;;;;;;;;:::i;:::-;;;;;;;;1336:31;;1401:12;1385;:28;1381:376;;1526:42;1541:12;1555;1526:14;:42::i;:::-;1511:57;;1381:376;;;1700:42;1715:12;1729;1700:14;:42::i;:::-;1685:57;;1381:376;1322:445;1317:3;;;;;:::i;:::-;;;;1279:488;;;;1783:12;1776:19;;;1140:662;;;;:::o;1808:218::-;1876:13;1937:1;1931:4;1924:15;1965:1;1959:4;1952:15;2005:4;1999;1989:21;1980:30;;1808:218;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:13:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:139::-;1214:5;1252:6;1239:20;1230:29;;1268:33;1295:5;1268:33;:::i;:::-;1168:139;;;;:::o;1330:370::-;1401:5;1450:3;1443:4;1435:6;1431:17;1427:27;1417:122;;1458:79;;:::i;:::-;1417:122;1575:6;1562:20;1600:94;1690:3;1682:6;1675:4;1667:6;1663:17;1600:94;:::i;:::-;1591:103;;1407:293;1330:370;;;;:::o;1706:133::-;1749:5;1787:6;1774:20;1765:29;;1803:30;1827:5;1803:30;:::i;:::-;1706:133;;;;:::o;1845:139::-;1891:5;1929:6;1916:20;1907:29;;1945:33;1972:5;1945:33;:::i;:::-;1845:139;;;;:::o;1990:137::-;2035:5;2073:6;2060:20;2051:29;;2089:32;2115:5;2089:32;:::i;:::-;1990:137;;;;:::o;2133:141::-;2189:5;2220:6;2214:13;2205:22;;2236:32;2262:5;2236:32;:::i;:::-;2133:141;;;;:::o;2293:338::-;2348:5;2397:3;2390:4;2382:6;2378:17;2374:27;2364:122;;2405:79;;:::i;:::-;2364:122;2522:6;2509:20;2547:78;2621:3;2613:6;2606:4;2598:6;2594:17;2547:78;:::i;:::-;2538:87;;2354:277;2293:338;;;;:::o;2651:553::-;2709:8;2719:6;2769:3;2762:4;2754:6;2750:17;2746:27;2736:122;;2777:79;;:::i;:::-;2736:122;2890:6;2877:20;2867:30;;2920:18;2912:6;2909:30;2906:117;;;2942:79;;:::i;:::-;2906:117;3056:4;3048:6;3044:17;3032:29;;3110:3;3102:4;3094:6;3090:17;3080:8;3076:32;3073:41;3070:128;;;3117:79;;:::i;:::-;3070:128;2651:553;;;;;:::o;3210:139::-;3256:5;3294:6;3281:20;3272:29;;3310:33;3337:5;3310:33;:::i;:::-;3210:139;;;;:::o;3355:329::-;3414:6;3463:2;3451:9;3442:7;3438:23;3434:32;3431:119;;;3469:79;;:::i;:::-;3431:119;3589:1;3614:53;3659:7;3650:6;3639:9;3635:22;3614:53;:::i;:::-;3604:63;;3560:117;3355:329;;;;:::o;3690:474::-;3758:6;3766;3815:2;3803:9;3794:7;3790:23;3786:32;3783:119;;;3821:79;;:::i;:::-;3783:119;3941:1;3966:53;4011:7;4002:6;3991:9;3987:22;3966:53;:::i;:::-;3956:63;;3912:117;4068:2;4094:53;4139:7;4130:6;4119:9;4115:22;4094:53;:::i;:::-;4084:63;;4039:118;3690:474;;;;;:::o;4170:619::-;4247:6;4255;4263;4312:2;4300:9;4291:7;4287:23;4283:32;4280:119;;;4318:79;;:::i;:::-;4280:119;4438:1;4463:53;4508:7;4499:6;4488:9;4484:22;4463:53;:::i;:::-;4453:63;;4409:117;4565:2;4591:53;4636:7;4627:6;4616:9;4612:22;4591:53;:::i;:::-;4581:63;;4536:118;4693:2;4719:53;4764:7;4755:6;4744:9;4740:22;4719:53;:::i;:::-;4709:63;;4664:118;4170:619;;;;;:::o;4795:943::-;4890:6;4898;4906;4914;4963:3;4951:9;4942:7;4938:23;4934:33;4931:120;;;4970:79;;:::i;:::-;4931:120;5090:1;5115:53;5160:7;5151:6;5140:9;5136:22;5115:53;:::i;:::-;5105:63;;5061:117;5217:2;5243:53;5288:7;5279:6;5268:9;5264:22;5243:53;:::i;:::-;5233:63;;5188:118;5345:2;5371:53;5416:7;5407:6;5396:9;5392:22;5371:53;:::i;:::-;5361:63;;5316:118;5501:2;5490:9;5486:18;5473:32;5532:18;5524:6;5521:30;5518:117;;;5554:79;;:::i;:::-;5518:117;5659:62;5713:7;5704:6;5693:9;5689:22;5659:62;:::i;:::-;5649:72;;5444:287;4795:943;;;;;;;:::o;5744:468::-;5809:6;5817;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:53;6062:7;6053:6;6042:9;6038:22;6017:53;:::i;:::-;6007:63;;5963:117;6119:2;6145:50;6187:7;6178:6;6167:9;6163:22;6145:50;:::i;:::-;6135:60;;6090:115;5744:468;;;;;:::o;6218:474::-;6286:6;6294;6343:2;6331:9;6322:7;6318:23;6314:32;6311:119;;;6349:79;;:::i;:::-;6311:119;6469:1;6494:53;6539:7;6530:6;6519:9;6515:22;6494:53;:::i;:::-;6484:63;;6440:117;6596:2;6622:53;6667:7;6658:6;6647:9;6643:22;6622:53;:::i;:::-;6612:63;;6567:118;6218:474;;;;;:::o;6698:323::-;6754:6;6803:2;6791:9;6782:7;6778:23;6774:32;6771:119;;;6809:79;;:::i;:::-;6771:119;6929:1;6954:50;6996:7;6987:6;6976:9;6972:22;6954:50;:::i;:::-;6944:60;;6900:114;6698:323;;;;:::o;7027:329::-;7086:6;7135:2;7123:9;7114:7;7110:23;7106:32;7103:119;;;7141:79;;:::i;:::-;7103:119;7261:1;7286:53;7331:7;7322:6;7311:9;7307:22;7286:53;:::i;:::-;7276:63;;7232:117;7027:329;;;;:::o;7362:327::-;7420:6;7469:2;7457:9;7448:7;7444:23;7440:32;7437:119;;;7475:79;;:::i;:::-;7437:119;7595:1;7620:52;7664:7;7655:6;7644:9;7640:22;7620:52;:::i;:::-;7610:62;;7566:116;7362:327;;;;:::o;7695:349::-;7764:6;7813:2;7801:9;7792:7;7788:23;7784:32;7781:119;;;7819:79;;:::i;:::-;7781:119;7939:1;7964:63;8019:7;8010:6;7999:9;7995:22;7964:63;:::i;:::-;7954:73;;7910:127;7695:349;;;;:::o;8050:529::-;8121:6;8129;8178:2;8166:9;8157:7;8153:23;8149:32;8146:119;;;8184:79;;:::i;:::-;8146:119;8332:1;8321:9;8317:17;8304:31;8362:18;8354:6;8351:30;8348:117;;;8384:79;;:::i;:::-;8348:117;8497:65;8554:7;8545:6;8534:9;8530:22;8497:65;:::i;:::-;8479:83;;;;8275:297;8050:529;;;;;:::o;8585:329::-;8644:6;8693:2;8681:9;8672:7;8668:23;8664:32;8661:119;;;8699:79;;:::i;:::-;8661:119;8819:1;8844:53;8889:7;8880:6;8869:9;8865:22;8844:53;:::i;:::-;8834:63;;8790:117;8585:329;;;;:::o;8920:684::-;9013:6;9021;9070:2;9058:9;9049:7;9045:23;9041:32;9038:119;;;9076:79;;:::i;:::-;9038:119;9196:1;9221:53;9266:7;9257:6;9246:9;9242:22;9221:53;:::i;:::-;9211:63;;9167:117;9351:2;9340:9;9336:18;9323:32;9382:18;9374:6;9371:30;9368:117;;;9404:79;;:::i;:::-;9368:117;9509:78;9579:7;9570:6;9559:9;9555:22;9509:78;:::i;:::-;9499:88;;9294:303;8920:684;;;;;:::o;9610:108::-;9687:24;9705:5;9687:24;:::i;:::-;9682:3;9675:37;9610:108;;:::o;9724:118::-;9811:24;9829:5;9811:24;:::i;:::-;9806:3;9799:37;9724:118;;:::o;9848:157::-;9953:45;9973:24;9991:5;9973:24;:::i;:::-;9953:45;:::i;:::-;9948:3;9941:58;9848:157;;:::o;10011:109::-;10092:21;10107:5;10092:21;:::i;:::-;10087:3;10080:34;10011:109;;:::o;10126:360::-;10212:3;10240:38;10272:5;10240:38;:::i;:::-;10294:70;10357:6;10352:3;10294:70;:::i;:::-;10287:77;;10373:52;10418:6;10413:3;10406:4;10399:5;10395:16;10373:52;:::i;:::-;10450:29;10472:6;10450:29;:::i;:::-;10445:3;10441:39;10434:46;;10216:270;10126:360;;;;:::o;10492:364::-;10580:3;10608:39;10641:5;10608:39;:::i;:::-;10663:71;10727:6;10722:3;10663:71;:::i;:::-;10656:78;;10743:52;10788:6;10783:3;10776:4;10769:5;10765:16;10743:52;:::i;:::-;10820:29;10842:6;10820:29;:::i;:::-;10815:3;10811:39;10804:46;;10584:272;10492:364;;;;:::o;10862:377::-;10968:3;10996:39;11029:5;10996:39;:::i;:::-;11051:89;11133:6;11128:3;11051:89;:::i;:::-;11044:96;;11149:52;11194:6;11189:3;11182:4;11175:5;11171:16;11149:52;:::i;:::-;11226:6;11221:3;11217:16;11210:23;;10972:267;10862:377;;;;:::o;11245:366::-;11387:3;11408:67;11472:2;11467:3;11408:67;:::i;:::-;11401:74;;11484:93;11573:3;11484:93;:::i;:::-;11602:2;11597:3;11593:12;11586:19;;11245:366;;;:::o;11617:::-;11759:3;11780:67;11844:2;11839:3;11780:67;:::i;:::-;11773:74;;11856:93;11945:3;11856:93;:::i;:::-;11974:2;11969:3;11965:12;11958:19;;11617:366;;;:::o;11989:::-;12131:3;12152:67;12216:2;12211:3;12152:67;:::i;:::-;12145:74;;12228:93;12317:3;12228:93;:::i;:::-;12346:2;12341:3;12337:12;12330:19;;11989:366;;;:::o;12361:::-;12503:3;12524:67;12588:2;12583:3;12524:67;:::i;:::-;12517:74;;12600:93;12689:3;12600:93;:::i;:::-;12718:2;12713:3;12709:12;12702:19;;12361:366;;;:::o;12733:::-;12875:3;12896:67;12960:2;12955:3;12896:67;:::i;:::-;12889:74;;12972:93;13061:3;12972:93;:::i;:::-;13090:2;13085:3;13081:12;13074:19;;12733:366;;;:::o;13105:::-;13247:3;13268:67;13332:2;13327:3;13268:67;:::i;:::-;13261:74;;13344:93;13433:3;13344:93;:::i;:::-;13462:2;13457:3;13453:12;13446:19;;13105:366;;;:::o;13477:::-;13619:3;13640:67;13704:2;13699:3;13640:67;:::i;:::-;13633:74;;13716:93;13805:3;13716:93;:::i;:::-;13834:2;13829:3;13825:12;13818:19;;13477:366;;;:::o;13849:::-;13991:3;14012:67;14076:2;14071:3;14012:67;:::i;:::-;14005:74;;14088:93;14177:3;14088:93;:::i;:::-;14206:2;14201:3;14197:12;14190:19;;13849:366;;;:::o;14221:::-;14363:3;14384:67;14448:2;14443:3;14384:67;:::i;:::-;14377:74;;14460:93;14549:3;14460:93;:::i;:::-;14578:2;14573:3;14569:12;14562:19;;14221:366;;;:::o;14593:::-;14735:3;14756:67;14820:2;14815:3;14756:67;:::i;:::-;14749:74;;14832:93;14921:3;14832:93;:::i;:::-;14950:2;14945:3;14941:12;14934:19;;14593:366;;;:::o;14965:::-;15107:3;15128:67;15192:2;15187:3;15128:67;:::i;:::-;15121:74;;15204:93;15293:3;15204:93;:::i;:::-;15322:2;15317:3;15313:12;15306:19;;14965:366;;;:::o;15337:::-;15479:3;15500:67;15564:2;15559:3;15500:67;:::i;:::-;15493:74;;15576:93;15665:3;15576:93;:::i;:::-;15694:2;15689:3;15685:12;15678:19;;15337:366;;;:::o;15709:::-;15851:3;15872:67;15936:2;15931:3;15872:67;:::i;:::-;15865:74;;15948:93;16037:3;15948:93;:::i;:::-;16066:2;16061:3;16057:12;16050:19;;15709:366;;;:::o;16081:::-;16223:3;16244:67;16308:2;16303:3;16244:67;:::i;:::-;16237:74;;16320:93;16409:3;16320:93;:::i;:::-;16438:2;16433:3;16429:12;16422:19;;16081:366;;;:::o;16453:::-;16595:3;16616:67;16680:2;16675:3;16616:67;:::i;:::-;16609:74;;16692:93;16781:3;16692:93;:::i;:::-;16810:2;16805:3;16801:12;16794:19;;16453:366;;;:::o;16825:::-;16967:3;16988:67;17052:2;17047:3;16988:67;:::i;:::-;16981:74;;17064:93;17153:3;17064:93;:::i;:::-;17182:2;17177:3;17173:12;17166:19;;16825:366;;;:::o;17197:::-;17339:3;17360:67;17424:2;17419:3;17360:67;:::i;:::-;17353:74;;17436:93;17525:3;17436:93;:::i;:::-;17554:2;17549:3;17545:12;17538:19;;17197:366;;;:::o;17569:::-;17711:3;17732:67;17796:2;17791:3;17732:67;:::i;:::-;17725:74;;17808:93;17897:3;17808:93;:::i;:::-;17926:2;17921:3;17917:12;17910:19;;17569:366;;;:::o;17941:::-;18083:3;18104:67;18168:2;18163:3;18104:67;:::i;:::-;18097:74;;18180:93;18269:3;18180:93;:::i;:::-;18298:2;18293:3;18289:12;18282:19;;17941:366;;;:::o;18313:::-;18455:3;18476:67;18540:2;18535:3;18476:67;:::i;:::-;18469:74;;18552:93;18641:3;18552:93;:::i;:::-;18670:2;18665:3;18661:12;18654:19;;18313:366;;;:::o;18685:::-;18827:3;18848:67;18912:2;18907:3;18848:67;:::i;:::-;18841:74;;18924:93;19013:3;18924:93;:::i;:::-;19042:2;19037:3;19033:12;19026:19;;18685:366;;;:::o;19057:::-;19199:3;19220:67;19284:2;19279:3;19220:67;:::i;:::-;19213:74;;19296:93;19385:3;19296:93;:::i;:::-;19414:2;19409:3;19405:12;19398:19;;19057:366;;;:::o;19429:398::-;19588:3;19609:83;19690:1;19685:3;19609:83;:::i;:::-;19602:90;;19701:93;19790:3;19701:93;:::i;:::-;19819:1;19814:3;19810:11;19803:18;;19429:398;;;:::o;19833:366::-;19975:3;19996:67;20060:2;20055:3;19996:67;:::i;:::-;19989:74;;20072:93;20161:3;20072:93;:::i;:::-;20190:2;20185:3;20181:12;20174:19;;19833:366;;;:::o;20205:::-;20347:3;20368:67;20432:2;20427:3;20368:67;:::i;:::-;20361:74;;20444:93;20533:3;20444:93;:::i;:::-;20562:2;20557:3;20553:12;20546:19;;20205:366;;;:::o;20577:::-;20719:3;20740:67;20804:2;20799:3;20740:67;:::i;:::-;20733:74;;20816:93;20905:3;20816:93;:::i;:::-;20934:2;20929:3;20925:12;20918:19;;20577:366;;;:::o;20949:::-;21091:3;21112:67;21176:2;21171:3;21112:67;:::i;:::-;21105:74;;21188:93;21277:3;21188:93;:::i;:::-;21306:2;21301:3;21297:12;21290:19;;20949:366;;;:::o;21321:::-;21463:3;21484:67;21548:2;21543:3;21484:67;:::i;:::-;21477:74;;21560:93;21649:3;21560:93;:::i;:::-;21678:2;21673:3;21669:12;21662:19;;21321:366;;;:::o;21693:::-;21835:3;21856:67;21920:2;21915:3;21856:67;:::i;:::-;21849:74;;21932:93;22021:3;21932:93;:::i;:::-;22050:2;22045:3;22041:12;22034:19;;21693:366;;;:::o;22065:::-;22207:3;22228:67;22292:2;22287:3;22228:67;:::i;:::-;22221:74;;22304:93;22393:3;22304:93;:::i;:::-;22422:2;22417:3;22413:12;22406:19;;22065:366;;;:::o;22437:::-;22579:3;22600:67;22664:2;22659:3;22600:67;:::i;:::-;22593:74;;22676:93;22765:3;22676:93;:::i;:::-;22794:2;22789:3;22785:12;22778:19;;22437:366;;;:::o;22809:::-;22951:3;22972:67;23036:2;23031:3;22972:67;:::i;:::-;22965:74;;23048:93;23137:3;23048:93;:::i;:::-;23166:2;23161:3;23157:12;23150:19;;22809:366;;;:::o;23181:::-;23323:3;23344:67;23408:2;23403:3;23344:67;:::i;:::-;23337:74;;23420:93;23509:3;23420:93;:::i;:::-;23538:2;23533:3;23529:12;23522:19;;23181:366;;;:::o;23553:::-;23695:3;23716:67;23780:2;23775:3;23716:67;:::i;:::-;23709:74;;23792:93;23881:3;23792:93;:::i;:::-;23910:2;23905:3;23901:12;23894:19;;23553:366;;;:::o;23925:::-;24067:3;24088:67;24152:2;24147:3;24088:67;:::i;:::-;24081:74;;24164:93;24253:3;24164:93;:::i;:::-;24282:2;24277:3;24273:12;24266:19;;23925:366;;;:::o;24297:::-;24439:3;24460:67;24524:2;24519:3;24460:67;:::i;:::-;24453:74;;24536:93;24625:3;24536:93;:::i;:::-;24654:2;24649:3;24645:12;24638:19;;24297:366;;;:::o;24739:527::-;24898:4;24893:3;24889:14;24985:4;24978:5;24974:16;24968:23;25004:63;25061:4;25056:3;25052:14;25038:12;25004:63;:::i;:::-;24913:164;25169:4;25162:5;25158:16;25152:23;25188:61;25243:4;25238:3;25234:14;25220:12;25188:61;:::i;:::-;25087:172;24867:399;24739:527;;:::o;25272:118::-;25359:24;25377:5;25359:24;:::i;:::-;25354:3;25347:37;25272:118;;:::o;25396:105::-;25471:23;25488:5;25471:23;:::i;:::-;25466:3;25459:36;25396:105;;:::o;25507:256::-;25619:3;25634:75;25705:3;25696:6;25634:75;:::i;:::-;25734:2;25729:3;25725:12;25718:19;;25754:3;25747:10;;25507:256;;;;:::o;25769:435::-;25949:3;25971:95;26062:3;26053:6;25971:95;:::i;:::-;25964:102;;26083:95;26174:3;26165:6;26083:95;:::i;:::-;26076:102;;26195:3;26188:10;;25769:435;;;;;:::o;26210:379::-;26394:3;26416:147;26559:3;26416:147;:::i;:::-;26409:154;;26580:3;26573:10;;26210:379;;;:::o;26595:222::-;26688:4;26726:2;26715:9;26711:18;26703:26;;26739:71;26807:1;26796:9;26792:17;26783:6;26739:71;:::i;:::-;26595:222;;;;:::o;26823:640::-;27018:4;27056:3;27045:9;27041:19;27033:27;;27070:71;27138:1;27127:9;27123:17;27114:6;27070:71;:::i;:::-;27151:72;27219:2;27208:9;27204:18;27195:6;27151:72;:::i;:::-;27233;27301:2;27290:9;27286:18;27277:6;27233:72;:::i;:::-;27352:9;27346:4;27342:20;27337:2;27326:9;27322:18;27315:48;27380:76;27451:4;27442:6;27380:76;:::i;:::-;27372:84;;26823:640;;;;;;;:::o;27469:210::-;27556:4;27594:2;27583:9;27579:18;27571:26;;27607:65;27669:1;27658:9;27654:17;27645:6;27607:65;:::i;:::-;27469:210;;;;:::o;27685:313::-;27798:4;27836:2;27825:9;27821:18;27813:26;;27885:9;27879:4;27875:20;27871:1;27860:9;27856:17;27849:47;27913:78;27986:4;27977:6;27913:78;:::i;:::-;27905:86;;27685:313;;;;:::o;28004:419::-;28170:4;28208:2;28197:9;28193:18;28185:26;;28257:9;28251:4;28247:20;28243:1;28232:9;28228:17;28221:47;28285:131;28411:4;28285:131;:::i;:::-;28277:139;;28004:419;;;:::o;28429:::-;28595:4;28633:2;28622:9;28618:18;28610:26;;28682:9;28676:4;28672:20;28668:1;28657:9;28653:17;28646:47;28710:131;28836:4;28710:131;:::i;:::-;28702:139;;28429:419;;;:::o;28854:::-;29020:4;29058:2;29047:9;29043:18;29035:26;;29107:9;29101:4;29097:20;29093:1;29082:9;29078:17;29071:47;29135:131;29261:4;29135:131;:::i;:::-;29127:139;;28854:419;;;:::o;29279:::-;29445:4;29483:2;29472:9;29468:18;29460:26;;29532:9;29526:4;29522:20;29518:1;29507:9;29503:17;29496:47;29560:131;29686:4;29560:131;:::i;:::-;29552:139;;29279:419;;;:::o;29704:::-;29870:4;29908:2;29897:9;29893:18;29885:26;;29957:9;29951:4;29947:20;29943:1;29932:9;29928:17;29921:47;29985:131;30111:4;29985:131;:::i;:::-;29977:139;;29704:419;;;:::o;30129:::-;30295:4;30333:2;30322:9;30318:18;30310:26;;30382:9;30376:4;30372:20;30368:1;30357:9;30353:17;30346:47;30410:131;30536:4;30410:131;:::i;:::-;30402:139;;30129:419;;;:::o;30554:::-;30720:4;30758:2;30747:9;30743:18;30735:26;;30807:9;30801:4;30797:20;30793:1;30782:9;30778:17;30771:47;30835:131;30961:4;30835:131;:::i;:::-;30827:139;;30554:419;;;:::o;30979:::-;31145:4;31183:2;31172:9;31168:18;31160:26;;31232:9;31226:4;31222:20;31218:1;31207:9;31203:17;31196:47;31260:131;31386:4;31260:131;:::i;:::-;31252:139;;30979:419;;;:::o;31404:::-;31570:4;31608:2;31597:9;31593:18;31585:26;;31657:9;31651:4;31647:20;31643:1;31632:9;31628:17;31621:47;31685:131;31811:4;31685:131;:::i;:::-;31677:139;;31404:419;;;:::o;31829:::-;31995:4;32033:2;32022:9;32018:18;32010:26;;32082:9;32076:4;32072:20;32068:1;32057:9;32053:17;32046:47;32110:131;32236:4;32110:131;:::i;:::-;32102:139;;31829:419;;;:::o;32254:::-;32420:4;32458:2;32447:9;32443:18;32435:26;;32507:9;32501:4;32497:20;32493:1;32482:9;32478:17;32471:47;32535:131;32661:4;32535:131;:::i;:::-;32527:139;;32254:419;;;:::o;32679:::-;32845:4;32883:2;32872:9;32868:18;32860:26;;32932:9;32926:4;32922:20;32918:1;32907:9;32903:17;32896:47;32960:131;33086:4;32960:131;:::i;:::-;32952:139;;32679:419;;;:::o;33104:::-;33270:4;33308:2;33297:9;33293:18;33285:26;;33357:9;33351:4;33347:20;33343:1;33332:9;33328:17;33321:47;33385:131;33511:4;33385:131;:::i;:::-;33377:139;;33104:419;;;:::o;33529:::-;33695:4;33733:2;33722:9;33718:18;33710:26;;33782:9;33776:4;33772:20;33768:1;33757:9;33753:17;33746:47;33810:131;33936:4;33810:131;:::i;:::-;33802:139;;33529:419;;;:::o;33954:::-;34120:4;34158:2;34147:9;34143:18;34135:26;;34207:9;34201:4;34197:20;34193:1;34182:9;34178:17;34171:47;34235:131;34361:4;34235:131;:::i;:::-;34227:139;;33954:419;;;:::o;34379:::-;34545:4;34583:2;34572:9;34568:18;34560:26;;34632:9;34626:4;34622:20;34618:1;34607:9;34603:17;34596:47;34660:131;34786:4;34660:131;:::i;:::-;34652:139;;34379:419;;;:::o;34804:::-;34970:4;35008:2;34997:9;34993:18;34985:26;;35057:9;35051:4;35047:20;35043:1;35032:9;35028:17;35021:47;35085:131;35211:4;35085:131;:::i;:::-;35077:139;;34804:419;;;:::o;35229:::-;35395:4;35433:2;35422:9;35418:18;35410:26;;35482:9;35476:4;35472:20;35468:1;35457:9;35453:17;35446:47;35510:131;35636:4;35510:131;:::i;:::-;35502:139;;35229:419;;;:::o;35654:::-;35820:4;35858:2;35847:9;35843:18;35835:26;;35907:9;35901:4;35897:20;35893:1;35882:9;35878:17;35871:47;35935:131;36061:4;35935:131;:::i;:::-;35927:139;;35654:419;;;:::o;36079:::-;36245:4;36283:2;36272:9;36268:18;36260:26;;36332:9;36326:4;36322:20;36318:1;36307:9;36303:17;36296:47;36360:131;36486:4;36360:131;:::i;:::-;36352:139;;36079:419;;;:::o;36504:::-;36670:4;36708:2;36697:9;36693:18;36685:26;;36757:9;36751:4;36747:20;36743:1;36732:9;36728:17;36721:47;36785:131;36911:4;36785:131;:::i;:::-;36777:139;;36504:419;;;:::o;36929:::-;37095:4;37133:2;37122:9;37118:18;37110:26;;37182:9;37176:4;37172:20;37168:1;37157:9;37153:17;37146:47;37210:131;37336:4;37210:131;:::i;:::-;37202:139;;36929:419;;;:::o;37354:::-;37520:4;37558:2;37547:9;37543:18;37535:26;;37607:9;37601:4;37597:20;37593:1;37582:9;37578:17;37571:47;37635:131;37761:4;37635:131;:::i;:::-;37627:139;;37354:419;;;:::o;37779:::-;37945:4;37983:2;37972:9;37968:18;37960:26;;38032:9;38026:4;38022:20;38018:1;38007:9;38003:17;37996:47;38060:131;38186:4;38060:131;:::i;:::-;38052:139;;37779:419;;;:::o;38204:::-;38370:4;38408:2;38397:9;38393:18;38385:26;;38457:9;38451:4;38447:20;38443:1;38432:9;38428:17;38421:47;38485:131;38611:4;38485:131;:::i;:::-;38477:139;;38204:419;;;:::o;38629:::-;38795:4;38833:2;38822:9;38818:18;38810:26;;38882:9;38876:4;38872:20;38868:1;38857:9;38853:17;38846:47;38910:131;39036:4;38910:131;:::i;:::-;38902:139;;38629:419;;;:::o;39054:::-;39220:4;39258:2;39247:9;39243:18;39235:26;;39307:9;39301:4;39297:20;39293:1;39282:9;39278:17;39271:47;39335:131;39461:4;39335:131;:::i;:::-;39327:139;;39054:419;;;:::o;39479:::-;39645:4;39683:2;39672:9;39668:18;39660:26;;39732:9;39726:4;39722:20;39718:1;39707:9;39703:17;39696:47;39760:131;39886:4;39760:131;:::i;:::-;39752:139;;39479:419;;;:::o;39904:::-;40070:4;40108:2;40097:9;40093:18;40085:26;;40157:9;40151:4;40147:20;40143:1;40132:9;40128:17;40121:47;40185:131;40311:4;40185:131;:::i;:::-;40177:139;;39904:419;;;:::o;40329:::-;40495:4;40533:2;40522:9;40518:18;40510:26;;40582:9;40576:4;40572:20;40568:1;40557:9;40553:17;40546:47;40610:131;40736:4;40610:131;:::i;:::-;40602:139;;40329:419;;;:::o;40754:::-;40920:4;40958:2;40947:9;40943:18;40935:26;;41007:9;41001:4;40997:20;40993:1;40982:9;40978:17;40971:47;41035:131;41161:4;41035:131;:::i;:::-;41027:139;;40754:419;;;:::o;41179:::-;41345:4;41383:2;41372:9;41368:18;41360:26;;41432:9;41426:4;41422:20;41418:1;41407:9;41403:17;41396:47;41460:131;41586:4;41460:131;:::i;:::-;41452:139;;41179:419;;;:::o;41604:::-;41770:4;41808:2;41797:9;41793:18;41785:26;;41857:9;41851:4;41847:20;41843:1;41832:9;41828:17;41821:47;41885:131;42011:4;41885:131;:::i;:::-;41877:139;;41604:419;;;:::o;42029:::-;42195:4;42233:2;42222:9;42218:18;42210:26;;42282:9;42276:4;42272:20;42268:1;42257:9;42253:17;42246:47;42310:131;42436:4;42310:131;:::i;:::-;42302:139;;42029:419;;;:::o;42454:::-;42620:4;42658:2;42647:9;42643:18;42635:26;;42707:9;42701:4;42697:20;42693:1;42682:9;42678:17;42671:47;42735:131;42861:4;42735:131;:::i;:::-;42727:139;;42454:419;;;:::o;42879:346::-;43034:4;43072:2;43061:9;43057:18;43049:26;;43085:133;43215:1;43204:9;43200:17;43191:6;43085:133;:::i;:::-;42879:346;;;;:::o;43231:222::-;43324:4;43362:2;43351:9;43347:18;43339:26;;43375:71;43443:1;43432:9;43428:17;43419:6;43375:71;:::i;:::-;43231:222;;;;:::o;43459:129::-;43493:6;43520:20;;:::i;:::-;43510:30;;43549:33;43577:4;43569:6;43549:33;:::i;:::-;43459:129;;;:::o;43594:75::-;43627:6;43660:2;43654:9;43644:19;;43594:75;:::o;43675:311::-;43752:4;43842:18;43834:6;43831:30;43828:56;;;43864:18;;:::i;:::-;43828:56;43914:4;43906:6;43902:17;43894:25;;43974:4;43968;43964:15;43956:23;;43675:311;;;:::o;43992:307::-;44053:4;44143:18;44135:6;44132:30;44129:56;;;44165:18;;:::i;:::-;44129:56;44203:29;44225:6;44203:29;:::i;:::-;44195:37;;44287:4;44281;44277:15;44269:23;;43992:307;;;:::o;44305:98::-;44356:6;44390:5;44384:12;44374:22;;44305:98;;;:::o;44409:99::-;44461:6;44495:5;44489:12;44479:22;;44409:99;;;:::o;44514:168::-;44597:11;44631:6;44626:3;44619:19;44671:4;44666:3;44662:14;44647:29;;44514:168;;;;:::o;44688:147::-;44789:11;44826:3;44811:18;;44688:147;;;;:::o;44841:169::-;44925:11;44959:6;44954:3;44947:19;44999:4;44994:3;44990:14;44975:29;;44841:169;;;;:::o;45016:148::-;45118:11;45155:3;45140:18;;45016:148;;;;:::o;45170:273::-;45210:3;45229:20;45247:1;45229:20;:::i;:::-;45224:25;;45263:20;45281:1;45263:20;:::i;:::-;45258:25;;45385:1;45349:34;45345:42;45342:1;45339:49;45336:75;;;45391:18;;:::i;:::-;45336:75;45435:1;45432;45428:9;45421:16;;45170:273;;;;:::o;45449:305::-;45489:3;45508:20;45526:1;45508:20;:::i;:::-;45503:25;;45542:20;45560:1;45542:20;:::i;:::-;45537:25;;45696:1;45628:66;45624:74;45621:1;45618:81;45615:107;;;45702:18;;:::i;:::-;45615:107;45746:1;45743;45739:9;45732:16;;45449:305;;;;:::o;45760:185::-;45800:1;45817:20;45835:1;45817:20;:::i;:::-;45812:25;;45851:20;45869:1;45851:20;:::i;:::-;45846:25;;45890:1;45880:35;;45895:18;;:::i;:::-;45880:35;45937:1;45934;45930:9;45925:14;;45760:185;;;;:::o;45951:348::-;45991:7;46014:20;46032:1;46014:20;:::i;:::-;46009:25;;46048:20;46066:1;46048:20;:::i;:::-;46043:25;;46236:1;46168:66;46164:74;46161:1;46158:81;46153:1;46146:9;46139:17;46135:105;46132:131;;;46243:18;;:::i;:::-;46132:131;46291:1;46288;46284:9;46273:20;;45951:348;;;;:::o;46305:191::-;46345:4;46365:20;46383:1;46365:20;:::i;:::-;46360:25;;46399:20;46417:1;46399:20;:::i;:::-;46394:25;;46438:1;46435;46432:8;46429:34;;;46443:18;;:::i;:::-;46429:34;46488:1;46485;46481:9;46473:17;;46305:191;;;;:::o;46502:::-;46542:4;46562:20;46580:1;46562:20;:::i;:::-;46557:25;;46596:20;46614:1;46596:20;:::i;:::-;46591:25;;46635:1;46632;46629:8;46626:34;;;46640:18;;:::i;:::-;46626:34;46685:1;46682;46678:9;46670:17;;46502:191;;;;:::o;46699:96::-;46736:7;46765:24;46783:5;46765:24;:::i;:::-;46754:35;;46699:96;;;:::o;46801:90::-;46835:7;46878:5;46871:13;46864:21;46853:32;;46801:90;;;:::o;46897:77::-;46934:7;46963:5;46952:16;;46897:77;;;:::o;46980:149::-;47016:7;47056:66;47049:5;47045:78;47034:89;;46980:149;;;:::o;47135:118::-;47172:7;47212:34;47205:5;47201:46;47190:57;;47135:118;;;:::o;47259:126::-;47296:7;47336:42;47329:5;47325:54;47314:65;;47259:126;;;:::o;47391:77::-;47428:7;47457:5;47446:16;;47391:77;;;:::o;47474:101::-;47510:7;47550:18;47543:5;47539:30;47528:41;;47474:101;;;:::o;47581:154::-;47665:6;47660:3;47655;47642:30;47727:1;47718:6;47713:3;47709:16;47702:27;47581:154;;;:::o;47741:307::-;47809:1;47819:113;47833:6;47830:1;47827:13;47819:113;;;47918:1;47913:3;47909:11;47903:18;47899:1;47894:3;47890:11;47883:39;47855:2;47852:1;47848:10;47843:15;;47819:113;;;47950:6;47947:1;47944:13;47941:101;;;48030:1;48021:6;48016:3;48012:16;48005:27;47941:101;47790:258;47741:307;;;:::o;48054:171::-;48093:3;48116:24;48134:5;48116:24;:::i;:::-;48107:33;;48162:4;48155:5;48152:15;48149:41;;;48170:18;;:::i;:::-;48149:41;48217:1;48210:5;48206:13;48199:20;;48054:171;;;:::o;48231:320::-;48275:6;48312:1;48306:4;48302:12;48292:22;;48359:1;48353:4;48349:12;48380:18;48370:81;;48436:4;48428:6;48424:17;48414:27;;48370:81;48498:2;48490:6;48487:14;48467:18;48464:38;48461:84;;;48517:18;;:::i;:::-;48461:84;48282:269;48231:320;;;:::o;48557:281::-;48640:27;48662:4;48640:27;:::i;:::-;48632:6;48628:40;48770:6;48758:10;48755:22;48734:18;48722:10;48719:34;48716:62;48713:88;;;48781:18;;:::i;:::-;48713:88;48821:10;48817:2;48810:22;48600:238;48557:281;;:::o;48844:233::-;48883:3;48906:24;48924:5;48906:24;:::i;:::-;48897:33;;48952:66;48945:5;48942:77;48939:103;;;49022:18;;:::i;:::-;48939:103;49069:1;49062:5;49058:13;49051:20;;48844:233;;;:::o;49083:100::-;49122:7;49151:26;49171:5;49151:26;:::i;:::-;49140:37;;49083:100;;;:::o;49189:94::-;49228:7;49257:20;49271:5;49257:20;:::i;:::-;49246:31;;49189:94;;;:::o;49289:176::-;49321:1;49338:20;49356:1;49338:20;:::i;:::-;49333:25;;49372:20;49390:1;49372:20;:::i;:::-;49367:25;;49411:1;49401:35;;49416:18;;:::i;:::-;49401:35;49457:1;49454;49450:9;49445:14;;49289:176;;;;:::o;49471:180::-;49519:77;49516:1;49509:88;49616:4;49613:1;49606:15;49640:4;49637:1;49630:15;49657:180;49705:77;49702:1;49695:88;49802:4;49799:1;49792:15;49826:4;49823:1;49816:15;49843:180;49891:77;49888:1;49881:88;49988:4;49985:1;49978:15;50012:4;50009:1;50002:15;50029:180;50077:77;50074:1;50067:88;50174:4;50171:1;50164:15;50198:4;50195:1;50188:15;50215:180;50263:77;50260:1;50253:88;50360:4;50357:1;50350:15;50384:4;50381:1;50374:15;50401:117;50510:1;50507;50500:12;50524:117;50633:1;50630;50623:12;50647:117;50756:1;50753;50746:12;50770:117;50879:1;50876;50869:12;50893:117;51002:1;50999;50992:12;51016:117;51125:1;51122;51115:12;51139:102;51180:6;51231:2;51227:7;51222:2;51215:5;51211:14;51207:28;51197:38;;51139:102;;;:::o;51247:94::-;51280:8;51328:5;51324:2;51320:14;51299:35;;51247:94;;;:::o;51347:221::-;51487:34;51483:1;51475:6;51471:14;51464:58;51556:4;51551:2;51543:6;51539:15;51532:29;51347:221;:::o;51574:225::-;51714:34;51710:1;51702:6;51698:14;51691:58;51783:8;51778:2;51770:6;51766:15;51759:33;51574:225;:::o;51805:229::-;51945:34;51941:1;51933:6;51929:14;51922:58;52014:12;52009:2;52001:6;51997:15;51990:37;51805:229;:::o;52040:226::-;52180:34;52176:1;52168:6;52164:14;52157:58;52249:9;52244:2;52236:6;52232:15;52225:34;52040:226;:::o;52272:222::-;52412:34;52408:1;52400:6;52396:14;52389:58;52481:5;52476:2;52468:6;52464:15;52457:30;52272:222;:::o;52500:224::-;52640:34;52636:1;52628:6;52624:14;52617:58;52709:7;52704:2;52696:6;52692:15;52685:32;52500:224;:::o;52730:180::-;52870:32;52866:1;52858:6;52854:14;52847:56;52730:180;:::o;52916:229::-;53056:34;53052:1;53044:6;53040:14;53033:58;53125:12;53120:2;53112:6;53108:15;53101:37;52916:229;:::o;53151:236::-;53291:34;53287:1;53279:6;53275:14;53268:58;53360:19;53355:2;53347:6;53343:15;53336:44;53151:236;:::o;53393:171::-;53533:23;53529:1;53521:6;53517:14;53510:47;53393:171;:::o;53570:180::-;53710:32;53706:1;53698:6;53694:14;53687:56;53570:180;:::o;53756:244::-;53896:34;53892:1;53884:6;53880:14;53873:58;53965:27;53960:2;53952:6;53948:15;53941:52;53756:244;:::o;54006:174::-;54146:26;54142:1;54134:6;54130:14;54123:50;54006:174;:::o;54186:230::-;54326:34;54322:1;54314:6;54310:14;54303:58;54395:13;54390:2;54382:6;54378:15;54371:38;54186:230;:::o;54422:168::-;54562:20;54558:1;54550:6;54546:14;54539:44;54422:168;:::o;54596:225::-;54736:34;54732:1;54724:6;54720:14;54713:58;54805:8;54800:2;54792:6;54788:15;54781:33;54596:225;:::o;54827:182::-;54967:34;54963:1;54955:6;54951:14;54944:58;54827:182;:::o;55015:234::-;55155:34;55151:1;55143:6;55139:14;55132:58;55224:17;55219:2;55211:6;55207:15;55200:42;55015:234;:::o;55255:176::-;55395:28;55391:1;55383:6;55379:14;55372:52;55255:176;:::o;55437:237::-;55577:34;55573:1;55565:6;55561:14;55554:58;55646:20;55641:2;55633:6;55629:15;55622:45;55437:237;:::o;55680:179::-;55820:31;55816:1;55808:6;55804:14;55797:55;55680:179;:::o;55865:221::-;56005:34;56001:1;55993:6;55989:14;55982:58;56074:4;56069:2;56061:6;56057:15;56050:29;55865:221;:::o;56092:114::-;;:::o;56212:166::-;56352:18;56348:1;56340:6;56336:14;56329:42;56212:166;:::o;56384:238::-;56524:34;56520:1;56512:6;56508:14;56501:58;56593:21;56588:2;56580:6;56576:15;56569:46;56384:238;:::o;56628:172::-;56768:24;56764:1;56756:6;56752:14;56745:48;56628:172;:::o;56806:179::-;56946:31;56942:1;56934:6;56930:14;56923:55;56806:179;:::o;56991:220::-;57131:34;57127:1;57119:6;57115:14;57108:58;57200:3;57195:2;57187:6;57183:15;57176:28;56991:220;:::o;57217:182::-;57357:34;57353:1;57345:6;57341:14;57334:58;57217:182;:::o;57405:226::-;57545:34;57541:1;57533:6;57529:14;57522:58;57614:9;57609:2;57601:6;57597:15;57590:34;57405:226;:::o;57637:233::-;57777:34;57773:1;57765:6;57761:14;57754:58;57846:16;57841:2;57833:6;57829:15;57822:41;57637:233;:::o;57876:225::-;58016:34;58012:1;58004:6;58000:14;57993:58;58085:8;58080:2;58072:6;58068:15;58061:33;57876:225;:::o;58107:181::-;58247:33;58243:1;58235:6;58231:14;58224:57;58107:181;:::o;58294:234::-;58434:34;58430:1;58422:6;58418:14;58411:58;58503:17;58498:2;58490:6;58486:15;58479:42;58294:234;:::o;58534:232::-;58674:34;58670:1;58662:6;58658:14;58651:58;58743:15;58738:2;58730:6;58726:15;58719:40;58534:232;:::o;58772:221::-;58912:34;58908:1;58900:6;58896:14;58889:58;58981:4;58976:2;58968:6;58964:15;58957:29;58772:221;:::o;58999:122::-;59072:24;59090:5;59072:24;:::i;:::-;59065:5;59062:35;59052:63;;59111:1;59108;59101:12;59052:63;58999:122;:::o;59127:116::-;59197:21;59212:5;59197:21;:::i;:::-;59190:5;59187:32;59177:60;;59233:1;59230;59223:12;59177:60;59127:116;:::o;59249:122::-;59322:24;59340:5;59322:24;:::i;:::-;59315:5;59312:35;59302:63;;59361:1;59358;59351:12;59302:63;59249:122;:::o;59377:120::-;59449:23;59466:5;59449:23;:::i;:::-;59442:5;59439:34;59429:62;;59487:1;59484;59477:12;59429:62;59377:120;:::o;59503:122::-;59576:24;59594:5;59576:24;:::i;:::-;59569:5;59566:35;59556:63;;59615:1;59612;59605:12;59556:63;59503:122;:::o

Swarm Source

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