ETH Price: $3,063.48 (-1.29%)

MiniGrandeBySecretSocietyClub (MINIBYSSC)
 

Overview

TokenID

24

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
MiniGrandeBySSC

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-22
*/

// SPDX-License-Identifier: MIT
// /ReentrancyGuard.sol

pragma solidity ^0.8.0;

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

    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;
    }
}
// /Strings.sol



pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

// /Context.sol


pragma solidity ^0.8.0;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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



pragma solidity ^0.8.0;


abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// /Address.sol


pragma solidity ^0.8.1;

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

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

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

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

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

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

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

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) 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);
            }
        }
    }
}

// /IERC721Receiver.sol



pragma solidity ^0.8.0;

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// /IERC165.sol



pragma solidity ^0.8.0;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// /ERC165.sol


pragma solidity ^0.8.0;


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

// /IERC721.sol



pragma solidity ^0.8.0;


interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// /IERC721Metadata.sol



pragma solidity ^0.8.0;


interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// /IERC721Enumerable.sol



pragma solidity ^0.8.0;


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

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

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



pragma solidity ^0.8.0;









/**
 * @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 collectionSize;
  uint256 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(), ".json"))
        : "";
  }

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

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

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

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

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

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

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

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

  /**
   * @dev 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 {}
}
// /MerkleProof.sol


pragma solidity ^0.8.0;

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 = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

pragma solidity ^0.8.7;

contract MiniGrandeBySSC is Ownable, ERC721A, ReentrancyGuard {

    uint256 private _publicPrice = 0.007 ether;
    uint256 private _presalePrice = 0 ether;
    uint256 private _maxPurchaseDuringWhitelist = 1;
    uint256 private _maxPurchaseDuringSale = 1;
    uint256 private _maxPerTransaction = 1;
    uint256 private _maxMint = 2000;
    address private _team = 0x6FEf5A781A35d158096736dBc561F298ef47B86c;
    bytes32 public merkleRoot = 0x8daf3296866531d8a9a23e382da52d37f29af1f17e5e9ed8a403c896de82be5f;
    mapping(address => uint256) public presaleAddressMintCount;
    mapping(address => uint256) public saleAddressMintCount;
    uint32 public whitelistMinted = 0;
    uint32 private _maxWhitelistMints = 200;

    bool public isPaused = false;
    bool public isPublicMint = false;
    bool public isWhitelistMint = false;
    string private _tokenURI = "ipfs://QmZzPHpPmtBHACKpu4MQ6XH2mNXJcJgRhdv1KYpnHqQ6q9/";
    
    constructor() ERC721A("MiniGrandeBySecretSocietyClub", "MINIBYSSC", _maxPerTransaction, _maxMint) {}

    function setMaxWhitelistMints (uint32 val) external onlyOwner {
        _maxWhitelistMints = val;
    }

    function setMaxMintPerWalletWhitelist (uint256 val) external onlyOwner {
        _maxPurchaseDuringWhitelist = val;
    }

    function setMaxMintPerWalletSale (uint256 val) external onlyOwner {
        _maxPurchaseDuringSale = val;
    }

    function checkIsPublicMint () external view returns (bool) {
        return isPublicMint;
    }

    function pause() external onlyOwner {
        isPaused = true;
    }

    function unpause() external onlyOwner {
        isPaused = false;
    }

    function setTeam(address team) external onlyOwner {
        _team = team;
    }

    function getPublicPrice() external view returns(uint256) {
        return _publicPrice;
    }

    function setPublicMint (bool value) external onlyOwner {
        isPublicMint = value;
    }

    function setWhitelistMint (bool value) external onlyOwner {
        isWhitelistMint = value;
    }

    function setPresalePrice (uint256 price) external onlyOwner {
        _presalePrice = price;
    }

    function setPublicPrice (uint256 price) external onlyOwner {
        _publicPrice = price;
    }

    function setCollectionSize (uint256 size) external onlyOwner {
        collectionSize = size;
        _maxMint = size;
    }

    modifier mintGuard(uint256 tokenCount) {
        require(!isPaused, "Paused!");
        
        require(tokenCount > 0 && tokenCount <= _maxPerTransaction, "Max one per transaction");
        require(msg.sender == tx.origin, "Sender not origin");
        // Price check
        if (isPublicMint) {
            require(_publicPrice * tokenCount <= msg.value, "Insufficient funds");
        } else {
            require(_presalePrice * tokenCount <= msg.value, "Insufficient funds");
        }
        require(totalSupply() + tokenCount <= _maxMint+1, "Sold out!");
        _;
    }

    function mint(uint256 amount) external payable mintGuard(amount) {
        require(isPublicMint, "Sale has not started!");
        require(saleAddressMintCount[msg.sender] + amount <= _maxPurchaseDuringSale, "Only one NFT can be minted");
        saleAddressMintCount[msg.sender] += amount;

        _safeMint(msg.sender, amount);
    }

    function mintPresale(bytes32[] calldata proof, uint256 amount) external payable mintGuard(amount) {
        require(MerkleProof.verify(proof, merkleRoot, keccak256(abi.encodePacked(msg.sender))), "You're not on the whitelist");
        require(isWhitelistMint, "You're on the whitelist but mint has not started!!");
        require(presaleAddressMintCount[msg.sender] + amount <= _maxPurchaseDuringWhitelist, "Only one NFT can be minted");
        presaleAddressMintCount[msg.sender] += amount;
        require(whitelistMinted < _maxWhitelistMints, "All whitelist mints have been claimed!");
        whitelistMinted += 1;

        _safeMint(msg.sender, amount);
    }

    function setMaxBatchSize (uint256 val) external onlyOwner {
        maxBatchSize = val;
        _maxPerTransaction = val;
    }

    function cashout() external onlyOwner {
        payable(_team).transfer(address(this).balance);
    }

    function setCashout(address addr) external onlyOwner returns(address) {
        _team = addr;
        return addr;
    }

    function devMint(uint32 qty) external onlyOwner {
        _safeMint(msg.sender, qty);
    }

    function setMerkleRoot(bytes32 root) external onlyOwner {
        merkleRoot = root;
    }

    function setMaxMint(uint256 maxMint) external onlyOwner {
        _maxMint = maxMint;
    }

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

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

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":"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":"cashout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkIsPublicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"qty","type":"uint32"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPublicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","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":[],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleAddressMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"address","name":"","type":"address"}],"name":"saleAddressMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"addr","type":"address"}],"name":"setCashout","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"size","type":"uint256"}],"name":"setCollectionSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMaxMintPerWalletSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMaxMintPerWalletWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"val","type":"uint32"}],"name":"setMaxWhitelistMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"team","type":"address"}],"name":"setTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setWhitelistMint","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMinted","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}]

608060405260006001556000600a556618de76816d8000600c556000600d556001600e556001600f5560016010556107d0601155736fef5a781a35d158096736dbc561f298ef47b86c601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f8daf3296866531d8a9a23e382da52d37f29af1f17e5e9ed8a403c896de82be5f60001b6013556000601660006101000a81548163ffffffff021916908363ffffffff16021790555060c8601660046101000a81548163ffffffff021916908363ffffffff1602179055506000601660086101000a81548160ff0219169083151502179055506000601660096101000a81548160ff02191690831515021790555060006016600a6101000a81548160ff02191690831515021790555060405180606001604052806036815260200162006222603691396017908051906020019062000175929190620003c0565b503480156200018357600080fd5b506040518060400160405280601d81526020017f4d696e694772616e64654279536563726574536f6369657479436c75620000008152506040518060400160405280600981526020017f4d494e4942595353430000000000000000000000000000000000000000000000815250601054601154620002166200020a620002f460201b60201c565b620002fc60201b60201c565b600081116200025c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025390620004e0565b60405180910390fd5b60008211620002a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200029990620004be565b60405180910390fd5b8360049080519060200190620002ba929190620003c0565b508260059080519060200190620002d3929190620003c0565b508160038190555080600281905550505050506001600b8190555062000616565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003ce9062000513565b90600052602060002090601f016020900481019282620003f257600085556200043e565b82601f106200040d57805160ff19168380011785556200043e565b828001600101855582156200043e579182015b828111156200043d57825182559160200191906001019062000420565b5b5090506200044d919062000451565b5090565b5b808211156200046c57600081600090555060010162000452565b5090565b60006200047f60278362000502565b91506200048c8262000578565b604082019050919050565b6000620004a6602e8362000502565b9150620004b382620005c7565b604082019050919050565b60006020820190508181036000830152620004d98162000470565b9050919050565b60006020820190508181036000830152620004fb8162000497565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200052c57607f821691505b6020821081141562000543576200054262000549565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b615bfc80620006266000396000f3fe6080604052600436106102ae5760003560e01c8063763c0d6411610175578063ad7f1ea1116100dc578063c70a74af11610095578063c87b56dd1161006f578063c87b56dd14610a50578063d7224ba014610a8d578063e985e9c514610ab8578063f2fde38b14610af5576102ae565b8063c70a74af146109ab578063c754da33146109e8578063c75a20b314610a13576102ae565b8063ad7f1ea1146108be578063b187bd26146108da578063b3c11d3a14610905578063b88d4fde1461092e578063be0d2a6814610957578063c627525514610982576102ae565b80638da5cb5b1161012e5780638da5cb5b146107d1578063900f187a146107fc57806395d89b4114610825578063a0712d6814610850578063a22cb4651461086c578063aca8ffe714610895576102ae565b8063763c0d64146106e95780637cb64759146107125780637db5a6361461073b57806384054d3d146107785780638456cb591461078f5780638990694f146107a6576102ae565b80633549345e1161021957806355f804b3116101d257806355f804b3146105dd5780635d56d55e146106065780636352211e1461062f578063689f3fe41461066c57806370a0823114610695578063715018a6146106d2576102ae565b80633549345e146104e3578063363e86fe1461050c5780633f4ba83a1461053757806342842e0e1461054e5780634f6ccce714610577578063547520fe146105b4576102ae565b806318160ddd1161026b57806318160ddd146103d357806323b872dd146103fe5780632b26a6bf146104275780632eb4a7ab146104505780632f745c591461047b5780633057931f146104b8576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095cf5c614610358578063095ea7b3146103815780630e2d56cf146103aa575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d591906142d6565b610b1e565b6040516102e791906149ea565b60405180910390f35b3480156102fc57600080fd5b50610305610c68565b6040516103129190614a20565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061437d565b610cfa565b60405161034f9190614983565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190614059565b610d7f565b005b34801561038d57600080fd5b506103a860048036038101906103a391906141dc565b610e3f565b005b3480156103b657600080fd5b506103d160048036038101906103cc919061427c565b610f58565b005b3480156103df57600080fd5b506103e8610ff1565b6040516103f59190614de2565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906140c6565b610ffb565b005b34801561043357600080fd5b5061044e6004803603810190610449919061437d565b61100b565b005b34801561045c57600080fd5b50610465611098565b6040516104729190614a05565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906141dc565b61109e565b6040516104af9190614de2565b60405180910390f35b3480156104c457600080fd5b506104cd61129c565b6040516104da91906149ea565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061437d565b6112af565b005b34801561051857600080fd5b50610521611335565b60405161052e9190614de2565b60405180910390f35b34801561054357600080fd5b5061054c61133f565b005b34801561055a57600080fd5b50610575600480360381019061057091906140c6565b6113d8565b005b34801561058357600080fd5b5061059e6004803603810190610599919061437d565b6113f8565b6040516105ab9190614de2565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061437d565b61144b565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190614330565b6114d1565b005b34801561061257600080fd5b5061062d6004803603810190610628919061427c565b611563565b005b34801561063b57600080fd5b506106566004803603810190610651919061437d565b6115fc565b6040516106639190614983565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e919061437d565b611612565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190614059565b611698565b6040516106c99190614de2565b60405180910390f35b3480156106de57600080fd5b506106e7611781565b005b3480156106f557600080fd5b50610710600480360381019061070b91906143aa565b611809565b005b34801561071e57600080fd5b50610739600480360381019061073491906142a9565b6118a9565b005b34801561074757600080fd5b50610762600480360381019061075d9190614059565b61192f565b60405161076f9190614de2565b60405180910390f35b34801561078457600080fd5b5061078d611947565b005b34801561079b57600080fd5b506107a4611a2e565b005b3480156107b257600080fd5b506107bb611ac7565b6040516107c89190614dfd565b60405180910390f35b3480156107dd57600080fd5b506107e6611add565b6040516107f39190614983565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061437d565b611b06565b005b34801561083157600080fd5b5061083a611b8c565b6040516108479190614a20565b60405180910390f35b61086a6004803603810190610865919061437d565b611c1e565b005b34801561087857600080fd5b50610893600480360381019061088e919061419c565b611f8e565b005b3480156108a157600080fd5b506108bc60048036038101906108b7919061437d565b61210f565b005b6108d860048036038101906108d3919061421c565b61219c565b005b3480156108e657600080fd5b506108ef612673565b6040516108fc91906149ea565b60405180910390f35b34801561091157600080fd5b5061092c600480360381019061092791906143aa565b612686565b005b34801561093a57600080fd5b5061095560048036038101906109509190614119565b612715565b005b34801561096357600080fd5b5061096c612771565b60405161097991906149ea565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a4919061437d565b612788565b005b3480156109b757600080fd5b506109d260048036038101906109cd9190614059565b61280e565b6040516109df9190614de2565b60405180910390f35b3480156109f457600080fd5b506109fd612826565b604051610a0a91906149ea565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a359190614059565b612839565b604051610a479190614983565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a72919061437d565b612900565b604051610a849190614a20565b60405180910390f35b348015610a9957600080fd5b50610aa26129a7565b604051610aaf9190614de2565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190614086565b6129ad565b604051610aec91906149ea565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b179190614059565b612a41565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610be957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c5157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c615750610c6082612b39565b5b9050919050565b606060048054610c7790615190565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca390615190565b8015610cf05780601f10610cc557610100808354040283529160200191610cf0565b820191906000526020600020905b815481529060010190602001808311610cd357829003601f168201915b5050505050905090565b6000610d0582612ba3565b610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614da2565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d87612bb1565b73ffffffffffffffffffffffffffffffffffffffff16610da5611add565b73ffffffffffffffffffffffffffffffffffffffff1614610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290614c22565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e4a826115fc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614cc2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eda612bb1565b73ffffffffffffffffffffffffffffffffffffffff161480610f095750610f0881610f03612bb1565b6129ad565b5b610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614ba2565b60405180910390fd5b610f53838383612bb9565b505050565b610f60612bb1565b73ffffffffffffffffffffffffffffffffffffffff16610f7e611add565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614c22565b60405180910390fd5b80601660096101000a81548160ff02191690831515021790555050565b6000600154905090565b611006838383612c6b565b505050565b611013612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611031611add565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90614c22565b60405180910390fd5b806003819055508060108190555050565b60135481565b60006110a983611698565b82106110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190614a42565b60405180910390fd5b60006110f4610ff1565b905060008060005b8381101561125a576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111ee57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112465786841415611237578195505050505050611296565b8380611242906151f3565b9450505b508080611252906151f3565b9150506110fc565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614d42565b60405180910390fd5b92915050565b601660099054906101000a900460ff1681565b6112b7612bb1565b73ffffffffffffffffffffffffffffffffffffffff166112d5611add565b73ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614c22565b60405180910390fd5b80600d8190555050565b6000600c54905090565b611347612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611365611add565b73ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290614c22565b60405180910390fd5b6000601660086101000a81548160ff021916908315150217905550565b6113f383838360405180602001604052806000815250612715565b505050565b6000611402610ff1565b8210611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90614b02565b60405180910390fd5b819050919050565b611453612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611471611add565b73ffffffffffffffffffffffffffffffffffffffff16146114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be90614c22565b60405180910390fd5b8060118190555050565b6114d9612bb1565b73ffffffffffffffffffffffffffffffffffffffff166114f7611add565b73ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154490614c22565b60405180910390fd5b81816017919061155e929190613dcd565b505050565b61156b612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611589611add565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690614c22565b60405180910390fd5b806016600a6101000a81548160ff02191690831515021790555050565b600061160782613224565b600001519050919050565b61161a612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611638611add565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590614c22565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614be2565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611789612bb1565b73ffffffffffffffffffffffffffffffffffffffff166117a7611add565b73ffffffffffffffffffffffffffffffffffffffff16146117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f490614c22565b60405180910390fd5b61180760006133eb565b565b611811612bb1565b73ffffffffffffffffffffffffffffffffffffffff1661182f611add565b73ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90614c22565b60405180910390fd5b80601660046101000a81548163ffffffff021916908363ffffffff16021790555050565b6118b1612bb1565b73ffffffffffffffffffffffffffffffffffffffff166118cf611add565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614c22565b60405180910390fd5b8060138190555050565b60146020528060005260406000206000915090505481565b61194f612bb1565b73ffffffffffffffffffffffffffffffffffffffff1661196d611add565b73ffffffffffffffffffffffffffffffffffffffff16146119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90614c22565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611a2b573d6000803e3d6000fd5b50565b611a36612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611a54611add565b73ffffffffffffffffffffffffffffffffffffffff1614611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa190614c22565b60405180910390fd5b6001601660086101000a81548160ff021916908315150217905550565b601660009054906101000a900463ffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b0e612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611b2c611add565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614c22565b60405180910390fd5b80600f8190555050565b606060058054611b9b90615190565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc790615190565b8015611c145780601f10611be957610100808354040283529160200191611c14565b820191906000526020600020905b815481529060010190602001808311611bf757829003601f168201915b5050505050905090565b80601660089054906101000a900460ff1615611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690614b62565b60405180910390fd5b600081118015611c8157506010548111155b611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614d62565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614ae2565b60405180910390fd5b601660099054906101000a900460ff1615611d98573481600c54611d529190614fb8565b1115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614b82565b60405180910390fd5b611de9565b3481600d54611da79190614fb8565b1115611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614b82565b60405180910390fd5b5b6001601154611df89190614ef7565b81611e01610ff1565b611e0b9190614ef7565b1115611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390614dc2565b60405180910390fd5b601660099054906101000a900460ff16611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9290614bc2565b60405180910390fd5b600f5482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ee99190614ef7565b1115611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614a62565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f799190614ef7565b92505081905550611f8a33836134af565b5050565b611f96612bb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90614c62565b60405180910390fd5b8060096000612011612bb1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120be612bb1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210391906149ea565b60405180910390a35050565b612117612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612135611add565b73ffffffffffffffffffffffffffffffffffffffff161461218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614c22565b60405180910390fd5b806002819055508060118190555050565b80601660089054906101000a900460ff16156121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614b62565b60405180910390fd5b6000811180156121ff57506010548111155b61223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614d62565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a390614ae2565b60405180910390fd5b601660099054906101000a900460ff1615612316573481600c546122d09190614fb8565b1115612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614b82565b60405180910390fd5b612367565b3481600d546123259190614fb8565b1115612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90614b82565b60405180910390fd5b5b60016011546123769190614ef7565b8161237f610ff1565b6123899190614ef7565b11156123ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c190614dc2565b60405180910390fd5b61243e848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060135433604051602001612423919061490d565b604051602081830303815290604052805190602001206134cd565b61247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490614ac2565b60405180910390fd5b6016600a9054906101000a900460ff166124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c390614ca2565b60405180910390fd5b600e5482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251a9190614ef7565b111561255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614a62565b60405180910390fd5b81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125aa9190614ef7565b92505081905550601660049054906101000a900463ffffffff1663ffffffff16601660009054906101000a900463ffffffff1663ffffffff1610612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614b42565b60405180910390fd5b6001601660008282829054906101000a900463ffffffff166126459190614f4d565b92506101000a81548163ffffffff021916908363ffffffff16021790555061266d33836134af565b50505050565b601660089054906101000a900460ff1681565b61268e612bb1565b73ffffffffffffffffffffffffffffffffffffffff166126ac611add565b73ffffffffffffffffffffffffffffffffffffffff1614612702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f990614c22565b60405180910390fd5b612712338263ffffffff166134af565b50565b612720848484612c6b565b61272c848484846134e4565b61276b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276290614ce2565b60405180910390fd5b50505050565b6000601660099054906101000a900460ff16905090565b612790612bb1565b73ffffffffffffffffffffffffffffffffffffffff166127ae611add565b73ffffffffffffffffffffffffffffffffffffffff1614612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614c22565b60405180910390fd5b80600c8190555050565b60156020528060005260406000206000915090505481565b6016600a9054906101000a900460ff1681565b6000612843612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612861611add565b73ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614c22565b60405180910390fd5b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550819050919050565b606061290b82612ba3565b61294a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294190614c42565b60405180910390fd5b600061295461367b565b90506000815111612974576040518060200160405280600081525061299f565b8061297e8461370d565b60405160200161298f929190614954565b6040516020818303038152906040525b915050919050565b600a5481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612a49612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612a67611add565b73ffffffffffffffffffffffffffffffffffffffff1614612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614c22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2490614a82565b60405180910390fd5b612b36816133eb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612c7682613224565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612c9d612bb1565b73ffffffffffffffffffffffffffffffffffffffff161480612cf95750612cc2612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612ce184610cfa565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d155750612d148260000151612d0f612bb1565b6129ad565b5b905080612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90614c82565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc090614c02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3090614b22565b60405180910390fd5b612e46858585600161386e565b612e566000848460000151612bb9565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612ec49190615012565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612f689190614eb1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461306e9190614ef7565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156131b4576130e481612ba3565b156131b3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461321c8686866001613874565b505050505050565b61322c613e53565b61323582612ba3565b613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614aa2565b60405180910390fd5b6000600354831061329c5760016003548461328f9190615046565b6132999190614ef7565b90505b60008390505b8181106133aa576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613396578093505050506133e6565b5080806133a290615166565b9150506132a2565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dd90614d82565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134c982826040518060200160405280600081525061387a565b5050565b6000826134da8584613cf7565b1490509392505050565b60006135058473ffffffffffffffffffffffffffffffffffffffff16613daa565b1561366e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261352e612bb1565b8786866040518563ffffffff1660e01b8152600401613550949392919061499e565b602060405180830381600087803b15801561356a57600080fd5b505af192505050801561359b57506040513d601f19601f820116820180604052508101906135989190614303565b60015b61361e573d80600081146135cb576040519150601f19603f3d011682016040523d82523d6000602084013e6135d0565b606091505b50600081511415613616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360d90614ce2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613673565b600190505b949350505050565b60606017805461368a90615190565b80601f01602080910402602001604051908101604052809291908181526020018280546136b690615190565b80156137035780601f106136d857610100808354040283529160200191613703565b820191906000526020600020905b8154815290600101906020018083116136e657829003601f168201915b5050505050905090565b60606000821415613755576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613869565b600082905060005b60008214613787578080613770906151f3565b915050600a826137809190614f87565b915061375d565b60008167ffffffffffffffff8111156137a3576137a2615357565b5b6040519080825280601f01601f1916602001820160405280156137d55781602001600182028036833780820191505090505b5090505b60008514613862576001826137ee9190615046565b9150600a856137fd919061526a565b60306138099190614ef7565b60f81b81838151811061381f5761381e615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561385b9190614f87565b94506137d9565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e890614d22565b60405180910390fd5b6138fa81612ba3565b1561393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393190614d02565b60405180910390fd5b613947600085838661386e565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613a449190614eb1565b6fffffffffffffffffffffffffffffffff168152602001858360200151613a6b9190614eb1565b6fffffffffffffffffffffffffffffffff16815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613cda57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c7a60008884886134e4565b613cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb090614ce2565b60405180910390fd5b8180613cc4906151f3565b9250508080613cd2906151f3565b915050613c09565b5080600181905550613cef6000878588613874565b505050505050565b60008082905060005b8451811015613d9f576000858281518110613d1e57613d1d615328565b5b60200260200101519050808311613d5f578281604051602001613d42929190614928565b604051602081830303815290604052805190602001209250613d8b565b8083604051602001613d72929190614928565b6040516020818303038152906040528051906020012092505b508080613d97906151f3565b915050613d00565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613dd990615190565b90600052602060002090601f016020900481019282613dfb5760008555613e42565b82601f10613e1457803560ff1916838001178555613e42565b82800160010185558215613e42579182015b82811115613e41578235825591602001919060010190613e26565b5b509050613e4f9190613e8d565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613ea6576000816000905550600101613e8e565b5090565b6000613ebd613eb884614e3d565b614e18565b905082815260208101848484011115613ed957613ed8615395565b5b613ee4848285615124565b509392505050565b600081359050613efb81615b3c565b92915050565b60008083601f840112613f1757613f1661538b565b5b8235905067ffffffffffffffff811115613f3457613f33615386565b5b602083019150836020820283011115613f5057613f4f615390565b5b9250929050565b600081359050613f6681615b53565b92915050565b600081359050613f7b81615b6a565b92915050565b600081359050613f9081615b81565b92915050565b600081519050613fa581615b81565b92915050565b600082601f830112613fc057613fbf61538b565b5b8135613fd0848260208601613eaa565b91505092915050565b60008083601f840112613fef57613fee61538b565b5b8235905067ffffffffffffffff81111561400c5761400b615386565b5b60208301915083600182028301111561402857614027615390565b5b9250929050565b60008135905061403e81615b98565b92915050565b60008135905061405381615baf565b92915050565b60006020828403121561406f5761406e61539f565b5b600061407d84828501613eec565b91505092915050565b6000806040838503121561409d5761409c61539f565b5b60006140ab85828601613eec565b92505060206140bc85828601613eec565b9150509250929050565b6000806000606084860312156140df576140de61539f565b5b60006140ed86828701613eec565b93505060206140fe86828701613eec565b925050604061410f8682870161402f565b9150509250925092565b600080600080608085870312156141335761413261539f565b5b600061414187828801613eec565b945050602061415287828801613eec565b93505060406141638782880161402f565b925050606085013567ffffffffffffffff8111156141845761418361539a565b5b61419087828801613fab565b91505092959194509250565b600080604083850312156141b3576141b261539f565b5b60006141c185828601613eec565b92505060206141d285828601613f57565b9150509250929050565b600080604083850312156141f3576141f261539f565b5b600061420185828601613eec565b92505060206142128582860161402f565b9150509250929050565b6000806000604084860312156142355761423461539f565b5b600084013567ffffffffffffffff8111156142535761425261539a565b5b61425f86828701613f01565b935093505060206142728682870161402f565b9150509250925092565b6000602082840312156142925761429161539f565b5b60006142a084828501613f57565b91505092915050565b6000602082840312156142bf576142be61539f565b5b60006142cd84828501613f6c565b91505092915050565b6000602082840312156142ec576142eb61539f565b5b60006142fa84828501613f81565b91505092915050565b6000602082840312156143195761431861539f565b5b600061432784828501613f96565b91505092915050565b600080602083850312156143475761434661539f565b5b600083013567ffffffffffffffff8111156143655761436461539a565b5b61437185828601613fd9565b92509250509250929050565b6000602082840312156143935761439261539f565b5b60006143a18482850161402f565b91505092915050565b6000602082840312156143c0576143bf61539f565b5b60006143ce84828501614044565b91505092915050565b6143e08161507a565b82525050565b6143f76143f28261507a565b61523c565b82525050565b6144068161508c565b82525050565b61441581615098565b82525050565b61442c61442782615098565b61524e565b82525050565b600061443d82614e6e565b6144478185614e84565b9350614457818560208601615133565b614460816153a4565b840191505092915050565b600061447682614e79565b6144808185614e95565b9350614490818560208601615133565b614499816153a4565b840191505092915050565b60006144af82614e79565b6144b98185614ea6565b93506144c9818560208601615133565b80840191505092915050565b60006144e2602283614e95565b91506144ed826153c2565b604082019050919050565b6000614505601a83614e95565b915061451082615411565b602082019050919050565b6000614528602683614e95565b91506145338261543a565b604082019050919050565b600061454b602a83614e95565b915061455682615489565b604082019050919050565b600061456e601b83614e95565b9150614579826154d8565b602082019050919050565b6000614591601183614e95565b915061459c82615501565b602082019050919050565b60006145b4602383614e95565b91506145bf8261552a565b604082019050919050565b60006145d7602583614e95565b91506145e282615579565b604082019050919050565b60006145fa602683614e95565b9150614605826155c8565b604082019050919050565b600061461d600783614e95565b915061462882615617565b602082019050919050565b6000614640601283614e95565b915061464b82615640565b602082019050919050565b6000614663603983614e95565b915061466e82615669565b604082019050919050565b6000614686601583614e95565b9150614691826156b8565b602082019050919050565b60006146a9602b83614e95565b91506146b4826156e1565b604082019050919050565b60006146cc602683614e95565b91506146d782615730565b604082019050919050565b60006146ef600583614ea6565b91506146fa8261577f565b600582019050919050565b6000614712602083614e95565b915061471d826157a8565b602082019050919050565b6000614735602f83614e95565b9150614740826157d1565b604082019050919050565b6000614758601a83614e95565b915061476382615820565b602082019050919050565b600061477b603283614e95565b915061478682615849565b604082019050919050565b600061479e603283614e95565b91506147a982615898565b604082019050919050565b60006147c1602283614e95565b91506147cc826158e7565b604082019050919050565b60006147e4603383614e95565b91506147ef82615936565b604082019050919050565b6000614807601d83614e95565b915061481282615985565b602082019050919050565b600061482a602183614e95565b9150614835826159ae565b604082019050919050565b600061484d602e83614e95565b9150614858826159fd565b604082019050919050565b6000614870601783614e95565b915061487b82615a4c565b602082019050919050565b6000614893602f83614e95565b915061489e82615a75565b604082019050919050565b60006148b6602d83614e95565b91506148c182615ac4565b604082019050919050565b60006148d9600983614e95565b91506148e482615b13565b602082019050919050565b6148f88161510a565b82525050565b61490781615114565b82525050565b600061491982846143e6565b60148201915081905092915050565b6000614934828561441b565b602082019150614944828461441b565b6020820191508190509392505050565b600061496082856144a4565b915061496c82846144a4565b9150614977826146e2565b91508190509392505050565b600060208201905061499860008301846143d7565b92915050565b60006080820190506149b360008301876143d7565b6149c060208301866143d7565b6149cd60408301856148ef565b81810360608301526149df8184614432565b905095945050505050565b60006020820190506149ff60008301846143fd565b92915050565b6000602082019050614a1a600083018461440c565b92915050565b60006020820190508181036000830152614a3a818461446b565b905092915050565b60006020820190508181036000830152614a5b816144d5565b9050919050565b60006020820190508181036000830152614a7b816144f8565b9050919050565b60006020820190508181036000830152614a9b8161451b565b9050919050565b60006020820190508181036000830152614abb8161453e565b9050919050565b60006020820190508181036000830152614adb81614561565b9050919050565b60006020820190508181036000830152614afb81614584565b9050919050565b60006020820190508181036000830152614b1b816145a7565b9050919050565b60006020820190508181036000830152614b3b816145ca565b9050919050565b60006020820190508181036000830152614b5b816145ed565b9050919050565b60006020820190508181036000830152614b7b81614610565b9050919050565b60006020820190508181036000830152614b9b81614633565b9050919050565b60006020820190508181036000830152614bbb81614656565b9050919050565b60006020820190508181036000830152614bdb81614679565b9050919050565b60006020820190508181036000830152614bfb8161469c565b9050919050565b60006020820190508181036000830152614c1b816146bf565b9050919050565b60006020820190508181036000830152614c3b81614705565b9050919050565b60006020820190508181036000830152614c5b81614728565b9050919050565b60006020820190508181036000830152614c7b8161474b565b9050919050565b60006020820190508181036000830152614c9b8161476e565b9050919050565b60006020820190508181036000830152614cbb81614791565b9050919050565b60006020820190508181036000830152614cdb816147b4565b9050919050565b60006020820190508181036000830152614cfb816147d7565b9050919050565b60006020820190508181036000830152614d1b816147fa565b9050919050565b60006020820190508181036000830152614d3b8161481d565b9050919050565b60006020820190508181036000830152614d5b81614840565b9050919050565b60006020820190508181036000830152614d7b81614863565b9050919050565b60006020820190508181036000830152614d9b81614886565b9050919050565b60006020820190508181036000830152614dbb816148a9565b9050919050565b60006020820190508181036000830152614ddb816148cc565b9050919050565b6000602082019050614df760008301846148ef565b92915050565b6000602082019050614e1260008301846148fe565b92915050565b6000614e22614e33565b9050614e2e82826151c2565b919050565b6000604051905090565b600067ffffffffffffffff821115614e5857614e57615357565b5b614e61826153a4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ebc826150ce565b9150614ec7836150ce565b9250826fffffffffffffffffffffffffffffffff03821115614eec57614eeb61529b565b5b828201905092915050565b6000614f028261510a565b9150614f0d8361510a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f4257614f4161529b565b5b828201905092915050565b6000614f5882615114565b9150614f6383615114565b92508263ffffffff03821115614f7c57614f7b61529b565b5b828201905092915050565b6000614f928261510a565b9150614f9d8361510a565b925082614fad57614fac6152ca565b5b828204905092915050565b6000614fc38261510a565b9150614fce8361510a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150075761500661529b565b5b828202905092915050565b600061501d826150ce565b9150615028836150ce565b92508282101561503b5761503a61529b565b5b828203905092915050565b60006150518261510a565b915061505c8361510a565b92508282101561506f5761506e61529b565b5b828203905092915050565b6000615085826150ea565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015615151578082015181840152602081019050615136565b83811115615160576000848401525b50505050565b60006151718261510a565b915060008214156151855761518461529b565b5b600182039050919050565b600060028204905060018216806151a857607f821691505b602082108114156151bc576151bb6152f9565b5b50919050565b6151cb826153a4565b810181811067ffffffffffffffff821117156151ea576151e9615357565b5b80604052505050565b60006151fe8261510a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152315761523061529b565b5b600182019050919050565b600061524782615258565b9050919050565b6000819050919050565b6000615263826153b5565b9050919050565b60006152758261510a565b91506152808361510a565b9250826152905761528f6152ca565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f6e65204e46542063616e206265206d696e746564000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f596f75277265206e6f74206f6e207468652077686974656c6973740000000000600082015250565b7f53656e646572206e6f74206f726967696e000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c2077686974656c697374206d696e74732068617665206265656e20636c60008201527f61696d6564210000000000000000000000000000000000000000000000000000602082015250565b7f5061757365642100000000000000000000000000000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f53616c6520686173206e6f742073746172746564210000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f596f75277265206f6e207468652077686974656c69737420627574206d696e7460008201527f20686173206e6f74207374617274656421210000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d6178206f6e6520706572207472616e73616374696f6e000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b615b458161507a565b8114615b5057600080fd5b50565b615b5c8161508c565b8114615b6757600080fd5b50565b615b7381615098565b8114615b7e57600080fd5b50565b615b8a816150a2565b8114615b9557600080fd5b50565b615ba18161510a565b8114615bac57600080fd5b50565b615bb881615114565b8114615bc357600080fd5b5056fea264697066735822122025a494d1e252311084d2adaddb82d503631951150c705051e29cae584b7493ba64736f6c63430008070033697066733a2f2f516d5a7a504870506d74424841434b7075344d51365848326d4e584a634a6752686476314b59706e4871513671392f

Deployed Bytecode

0x6080604052600436106102ae5760003560e01c8063763c0d6411610175578063ad7f1ea1116100dc578063c70a74af11610095578063c87b56dd1161006f578063c87b56dd14610a50578063d7224ba014610a8d578063e985e9c514610ab8578063f2fde38b14610af5576102ae565b8063c70a74af146109ab578063c754da33146109e8578063c75a20b314610a13576102ae565b8063ad7f1ea1146108be578063b187bd26146108da578063b3c11d3a14610905578063b88d4fde1461092e578063be0d2a6814610957578063c627525514610982576102ae565b80638da5cb5b1161012e5780638da5cb5b146107d1578063900f187a146107fc57806395d89b4114610825578063a0712d6814610850578063a22cb4651461086c578063aca8ffe714610895576102ae565b8063763c0d64146106e95780637cb64759146107125780637db5a6361461073b57806384054d3d146107785780638456cb591461078f5780638990694f146107a6576102ae565b80633549345e1161021957806355f804b3116101d257806355f804b3146105dd5780635d56d55e146106065780636352211e1461062f578063689f3fe41461066c57806370a0823114610695578063715018a6146106d2576102ae565b80633549345e146104e3578063363e86fe1461050c5780633f4ba83a1461053757806342842e0e1461054e5780634f6ccce714610577578063547520fe146105b4576102ae565b806318160ddd1161026b57806318160ddd146103d357806323b872dd146103fe5780632b26a6bf146104275780632eb4a7ab146104505780632f745c591461047b5780633057931f146104b8576102ae565b806301ffc9a7146102b357806306fdde03146102f0578063081812fc1461031b578063095cf5c614610358578063095ea7b3146103815780630e2d56cf146103aa575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d591906142d6565b610b1e565b6040516102e791906149ea565b60405180910390f35b3480156102fc57600080fd5b50610305610c68565b6040516103129190614a20565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d919061437d565b610cfa565b60405161034f9190614983565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190614059565b610d7f565b005b34801561038d57600080fd5b506103a860048036038101906103a391906141dc565b610e3f565b005b3480156103b657600080fd5b506103d160048036038101906103cc919061427c565b610f58565b005b3480156103df57600080fd5b506103e8610ff1565b6040516103f59190614de2565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906140c6565b610ffb565b005b34801561043357600080fd5b5061044e6004803603810190610449919061437d565b61100b565b005b34801561045c57600080fd5b50610465611098565b6040516104729190614a05565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d91906141dc565b61109e565b6040516104af9190614de2565b60405180910390f35b3480156104c457600080fd5b506104cd61129c565b6040516104da91906149ea565b60405180910390f35b3480156104ef57600080fd5b5061050a6004803603810190610505919061437d565b6112af565b005b34801561051857600080fd5b50610521611335565b60405161052e9190614de2565b60405180910390f35b34801561054357600080fd5b5061054c61133f565b005b34801561055a57600080fd5b50610575600480360381019061057091906140c6565b6113d8565b005b34801561058357600080fd5b5061059e6004803603810190610599919061437d565b6113f8565b6040516105ab9190614de2565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d6919061437d565b61144b565b005b3480156105e957600080fd5b5061060460048036038101906105ff9190614330565b6114d1565b005b34801561061257600080fd5b5061062d6004803603810190610628919061427c565b611563565b005b34801561063b57600080fd5b506106566004803603810190610651919061437d565b6115fc565b6040516106639190614983565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e919061437d565b611612565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190614059565b611698565b6040516106c99190614de2565b60405180910390f35b3480156106de57600080fd5b506106e7611781565b005b3480156106f557600080fd5b50610710600480360381019061070b91906143aa565b611809565b005b34801561071e57600080fd5b50610739600480360381019061073491906142a9565b6118a9565b005b34801561074757600080fd5b50610762600480360381019061075d9190614059565b61192f565b60405161076f9190614de2565b60405180910390f35b34801561078457600080fd5b5061078d611947565b005b34801561079b57600080fd5b506107a4611a2e565b005b3480156107b257600080fd5b506107bb611ac7565b6040516107c89190614dfd565b60405180910390f35b3480156107dd57600080fd5b506107e6611add565b6040516107f39190614983565b60405180910390f35b34801561080857600080fd5b50610823600480360381019061081e919061437d565b611b06565b005b34801561083157600080fd5b5061083a611b8c565b6040516108479190614a20565b60405180910390f35b61086a6004803603810190610865919061437d565b611c1e565b005b34801561087857600080fd5b50610893600480360381019061088e919061419c565b611f8e565b005b3480156108a157600080fd5b506108bc60048036038101906108b7919061437d565b61210f565b005b6108d860048036038101906108d3919061421c565b61219c565b005b3480156108e657600080fd5b506108ef612673565b6040516108fc91906149ea565b60405180910390f35b34801561091157600080fd5b5061092c600480360381019061092791906143aa565b612686565b005b34801561093a57600080fd5b5061095560048036038101906109509190614119565b612715565b005b34801561096357600080fd5b5061096c612771565b60405161097991906149ea565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a4919061437d565b612788565b005b3480156109b757600080fd5b506109d260048036038101906109cd9190614059565b61280e565b6040516109df9190614de2565b60405180910390f35b3480156109f457600080fd5b506109fd612826565b604051610a0a91906149ea565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a359190614059565b612839565b604051610a479190614983565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a72919061437d565b612900565b604051610a849190614a20565b60405180910390f35b348015610a9957600080fd5b50610aa26129a7565b604051610aaf9190614de2565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190614086565b6129ad565b604051610aec91906149ea565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b179190614059565b612a41565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610be957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c5157507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c615750610c6082612b39565b5b9050919050565b606060048054610c7790615190565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca390615190565b8015610cf05780601f10610cc557610100808354040283529160200191610cf0565b820191906000526020600020905b815481529060010190602001808311610cd357829003601f168201915b5050505050905090565b6000610d0582612ba3565b610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614da2565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610d87612bb1565b73ffffffffffffffffffffffffffffffffffffffff16610da5611add565b73ffffffffffffffffffffffffffffffffffffffff1614610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290614c22565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610e4a826115fc565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb290614cc2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610eda612bb1565b73ffffffffffffffffffffffffffffffffffffffff161480610f095750610f0881610f03612bb1565b6129ad565b5b610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90614ba2565b60405180910390fd5b610f53838383612bb9565b505050565b610f60612bb1565b73ffffffffffffffffffffffffffffffffffffffff16610f7e611add565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614c22565b60405180910390fd5b80601660096101000a81548160ff02191690831515021790555050565b6000600154905090565b611006838383612c6b565b505050565b611013612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611031611add565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e90614c22565b60405180910390fd5b806003819055508060108190555050565b60135481565b60006110a983611698565b82106110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e190614a42565b60405180910390fd5b60006110f4610ff1565b905060008060005b8381101561125a576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146111ee57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112465786841415611237578195505050505050611296565b8380611242906151f3565b9450505b508080611252906151f3565b9150506110fc565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128d90614d42565b60405180910390fd5b92915050565b601660099054906101000a900460ff1681565b6112b7612bb1565b73ffffffffffffffffffffffffffffffffffffffff166112d5611add565b73ffffffffffffffffffffffffffffffffffffffff161461132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132290614c22565b60405180910390fd5b80600d8190555050565b6000600c54905090565b611347612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611365611add565b73ffffffffffffffffffffffffffffffffffffffff16146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290614c22565b60405180910390fd5b6000601660086101000a81548160ff021916908315150217905550565b6113f383838360405180602001604052806000815250612715565b505050565b6000611402610ff1565b8210611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90614b02565b60405180910390fd5b819050919050565b611453612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611471611add565b73ffffffffffffffffffffffffffffffffffffffff16146114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be90614c22565b60405180910390fd5b8060118190555050565b6114d9612bb1565b73ffffffffffffffffffffffffffffffffffffffff166114f7611add565b73ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154490614c22565b60405180910390fd5b81816017919061155e929190613dcd565b505050565b61156b612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611589611add565b73ffffffffffffffffffffffffffffffffffffffff16146115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690614c22565b60405180910390fd5b806016600a6101000a81548160ff02191690831515021790555050565b600061160782613224565b600001519050919050565b61161a612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611638611add565b73ffffffffffffffffffffffffffffffffffffffff161461168e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168590614c22565b60405180910390fd5b80600e8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614be2565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611789612bb1565b73ffffffffffffffffffffffffffffffffffffffff166117a7611add565b73ffffffffffffffffffffffffffffffffffffffff16146117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f490614c22565b60405180910390fd5b61180760006133eb565b565b611811612bb1565b73ffffffffffffffffffffffffffffffffffffffff1661182f611add565b73ffffffffffffffffffffffffffffffffffffffff1614611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187c90614c22565b60405180910390fd5b80601660046101000a81548163ffffffff021916908363ffffffff16021790555050565b6118b1612bb1565b73ffffffffffffffffffffffffffffffffffffffff166118cf611add565b73ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614c22565b60405180910390fd5b8060138190555050565b60146020528060005260406000206000915090505481565b61194f612bb1565b73ffffffffffffffffffffffffffffffffffffffff1661196d611add565b73ffffffffffffffffffffffffffffffffffffffff16146119c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ba90614c22565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611a2b573d6000803e3d6000fd5b50565b611a36612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611a54611add565b73ffffffffffffffffffffffffffffffffffffffff1614611aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa190614c22565b60405180910390fd5b6001601660086101000a81548160ff021916908315150217905550565b601660009054906101000a900463ffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b0e612bb1565b73ffffffffffffffffffffffffffffffffffffffff16611b2c611add565b73ffffffffffffffffffffffffffffffffffffffff1614611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7990614c22565b60405180910390fd5b80600f8190555050565b606060058054611b9b90615190565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc790615190565b8015611c145780601f10611be957610100808354040283529160200191611c14565b820191906000526020600020905b815481529060010190602001808311611bf757829003601f168201915b5050505050905090565b80601660089054906101000a900460ff1615611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6690614b62565b60405180910390fd5b600081118015611c8157506010548111155b611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb790614d62565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614ae2565b60405180910390fd5b601660099054906101000a900460ff1615611d98573481600c54611d529190614fb8565b1115611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90614b82565b60405180910390fd5b611de9565b3481600d54611da79190614fb8565b1115611de8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddf90614b82565b60405180910390fd5b5b6001601154611df89190614ef7565b81611e01610ff1565b611e0b9190614ef7565b1115611e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4390614dc2565b60405180910390fd5b601660099054906101000a900460ff16611e9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9290614bc2565b60405180910390fd5b600f5482601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ee99190614ef7565b1115611f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2190614a62565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f799190614ef7565b92505081905550611f8a33836134af565b5050565b611f96612bb1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90614c62565b60405180910390fd5b8060096000612011612bb1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120be612bb1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210391906149ea565b60405180910390a35050565b612117612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612135611add565b73ffffffffffffffffffffffffffffffffffffffff161461218b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218290614c22565b60405180910390fd5b806002819055508060118190555050565b80601660089054906101000a900460ff16156121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614b62565b60405180910390fd5b6000811180156121ff57506010548111155b61223e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223590614d62565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a390614ae2565b60405180910390fd5b601660099054906101000a900460ff1615612316573481600c546122d09190614fb8565b1115612311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230890614b82565b60405180910390fd5b612367565b3481600d546123259190614fb8565b1115612366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235d90614b82565b60405180910390fd5b5b60016011546123769190614ef7565b8161237f610ff1565b6123899190614ef7565b11156123ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c190614dc2565b60405180910390fd5b61243e848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060135433604051602001612423919061490d565b604051602081830303815290604052805190602001206134cd565b61247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490614ac2565b60405180910390fd5b6016600a9054906101000a900460ff166124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c390614ca2565b60405180910390fd5b600e5482601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461251a9190614ef7565b111561255b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255290614a62565b60405180910390fd5b81601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125aa9190614ef7565b92505081905550601660049054906101000a900463ffffffff1663ffffffff16601660009054906101000a900463ffffffff1663ffffffff1610612623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261a90614b42565b60405180910390fd5b6001601660008282829054906101000a900463ffffffff166126459190614f4d565b92506101000a81548163ffffffff021916908363ffffffff16021790555061266d33836134af565b50505050565b601660089054906101000a900460ff1681565b61268e612bb1565b73ffffffffffffffffffffffffffffffffffffffff166126ac611add565b73ffffffffffffffffffffffffffffffffffffffff1614612702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f990614c22565b60405180910390fd5b612712338263ffffffff166134af565b50565b612720848484612c6b565b61272c848484846134e4565b61276b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276290614ce2565b60405180910390fd5b50505050565b6000601660099054906101000a900460ff16905090565b612790612bb1565b73ffffffffffffffffffffffffffffffffffffffff166127ae611add565b73ffffffffffffffffffffffffffffffffffffffff1614612804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fb90614c22565b60405180910390fd5b80600c8190555050565b60156020528060005260406000206000915090505481565b6016600a9054906101000a900460ff1681565b6000612843612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612861611add565b73ffffffffffffffffffffffffffffffffffffffff16146128b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ae90614c22565b60405180910390fd5b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550819050919050565b606061290b82612ba3565b61294a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294190614c42565b60405180910390fd5b600061295461367b565b90506000815111612974576040518060200160405280600081525061299f565b8061297e8461370d565b60405160200161298f929190614954565b6040516020818303038152906040525b915050919050565b600a5481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612a49612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612a67611add565b73ffffffffffffffffffffffffffffffffffffffff1614612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614c22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2490614a82565b60405180910390fd5b612b36816133eb565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612c7682613224565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612c9d612bb1565b73ffffffffffffffffffffffffffffffffffffffff161480612cf95750612cc2612bb1565b73ffffffffffffffffffffffffffffffffffffffff16612ce184610cfa565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d155750612d148260000151612d0f612bb1565b6129ad565b5b905080612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90614c82565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc090614c02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3090614b22565b60405180910390fd5b612e46858585600161386e565b612e566000848460000151612bb9565b6001600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612ec49190615012565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612f689190614eb1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461306e9190614ef7565b9050600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156131b4576130e481612ba3565b156131b3576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506006600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461321c8686866001613874565b505050505050565b61322c613e53565b61323582612ba3565b613274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326b90614aa2565b60405180910390fd5b6000600354831061329c5760016003548461328f9190615046565b6132999190614ef7565b90505b60008390505b8181106133aa576000600660008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614613396578093505050506133e6565b5080806133a290615166565b9150506132a2565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133dd90614d82565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134c982826040518060200160405280600081525061387a565b5050565b6000826134da8584613cf7565b1490509392505050565b60006135058473ffffffffffffffffffffffffffffffffffffffff16613daa565b1561366e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261352e612bb1565b8786866040518563ffffffff1660e01b8152600401613550949392919061499e565b602060405180830381600087803b15801561356a57600080fd5b505af192505050801561359b57506040513d601f19601f820116820180604052508101906135989190614303565b60015b61361e573d80600081146135cb576040519150601f19603f3d011682016040523d82523d6000602084013e6135d0565b606091505b50600081511415613616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360d90614ce2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613673565b600190505b949350505050565b60606017805461368a90615190565b80601f01602080910402602001604051908101604052809291908181526020018280546136b690615190565b80156137035780601f106136d857610100808354040283529160200191613703565b820191906000526020600020905b8154815290600101906020018083116136e657829003601f168201915b5050505050905090565b60606000821415613755576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613869565b600082905060005b60008214613787578080613770906151f3565b915050600a826137809190614f87565b915061375d565b60008167ffffffffffffffff8111156137a3576137a2615357565b5b6040519080825280601f01601f1916602001820160405280156137d55781602001600182028036833780820191505090505b5090505b60008514613862576001826137ee9190615046565b9150600a856137fd919061526a565b60306138099190614ef7565b60f81b81838151811061381f5761381e615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561385b9190614f87565b94506137d9565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138e890614d22565b60405180910390fd5b6138fa81612ba3565b1561393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161393190614d02565b60405180910390fd5b613947600085838661386e565b6000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151613a449190614eb1565b6fffffffffffffffffffffffffffffffff168152602001858360200151613a6b9190614eb1565b6fffffffffffffffffffffffffffffffff16815250600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506006600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613cda57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613c7a60008884886134e4565b613cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cb090614ce2565b60405180910390fd5b8180613cc4906151f3565b9250508080613cd2906151f3565b915050613c09565b5080600181905550613cef6000878588613874565b505050505050565b60008082905060005b8451811015613d9f576000858281518110613d1e57613d1d615328565b5b60200260200101519050808311613d5f578281604051602001613d42929190614928565b604051602081830303815290604052805190602001209250613d8b565b8083604051602001613d72929190614928565b6040516020818303038152906040528051906020012092505b508080613d97906151f3565b915050613d00565b508091505092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613dd990615190565b90600052602060002090601f016020900481019282613dfb5760008555613e42565b82601f10613e1457803560ff1916838001178555613e42565b82800160010185558215613e42579182015b82811115613e41578235825591602001919060010190613e26565b5b509050613e4f9190613e8d565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613ea6576000816000905550600101613e8e565b5090565b6000613ebd613eb884614e3d565b614e18565b905082815260208101848484011115613ed957613ed8615395565b5b613ee4848285615124565b509392505050565b600081359050613efb81615b3c565b92915050565b60008083601f840112613f1757613f1661538b565b5b8235905067ffffffffffffffff811115613f3457613f33615386565b5b602083019150836020820283011115613f5057613f4f615390565b5b9250929050565b600081359050613f6681615b53565b92915050565b600081359050613f7b81615b6a565b92915050565b600081359050613f9081615b81565b92915050565b600081519050613fa581615b81565b92915050565b600082601f830112613fc057613fbf61538b565b5b8135613fd0848260208601613eaa565b91505092915050565b60008083601f840112613fef57613fee61538b565b5b8235905067ffffffffffffffff81111561400c5761400b615386565b5b60208301915083600182028301111561402857614027615390565b5b9250929050565b60008135905061403e81615b98565b92915050565b60008135905061405381615baf565b92915050565b60006020828403121561406f5761406e61539f565b5b600061407d84828501613eec565b91505092915050565b6000806040838503121561409d5761409c61539f565b5b60006140ab85828601613eec565b92505060206140bc85828601613eec565b9150509250929050565b6000806000606084860312156140df576140de61539f565b5b60006140ed86828701613eec565b93505060206140fe86828701613eec565b925050604061410f8682870161402f565b9150509250925092565b600080600080608085870312156141335761413261539f565b5b600061414187828801613eec565b945050602061415287828801613eec565b93505060406141638782880161402f565b925050606085013567ffffffffffffffff8111156141845761418361539a565b5b61419087828801613fab565b91505092959194509250565b600080604083850312156141b3576141b261539f565b5b60006141c185828601613eec565b92505060206141d285828601613f57565b9150509250929050565b600080604083850312156141f3576141f261539f565b5b600061420185828601613eec565b92505060206142128582860161402f565b9150509250929050565b6000806000604084860312156142355761423461539f565b5b600084013567ffffffffffffffff8111156142535761425261539a565b5b61425f86828701613f01565b935093505060206142728682870161402f565b9150509250925092565b6000602082840312156142925761429161539f565b5b60006142a084828501613f57565b91505092915050565b6000602082840312156142bf576142be61539f565b5b60006142cd84828501613f6c565b91505092915050565b6000602082840312156142ec576142eb61539f565b5b60006142fa84828501613f81565b91505092915050565b6000602082840312156143195761431861539f565b5b600061432784828501613f96565b91505092915050565b600080602083850312156143475761434661539f565b5b600083013567ffffffffffffffff8111156143655761436461539a565b5b61437185828601613fd9565b92509250509250929050565b6000602082840312156143935761439261539f565b5b60006143a18482850161402f565b91505092915050565b6000602082840312156143c0576143bf61539f565b5b60006143ce84828501614044565b91505092915050565b6143e08161507a565b82525050565b6143f76143f28261507a565b61523c565b82525050565b6144068161508c565b82525050565b61441581615098565b82525050565b61442c61442782615098565b61524e565b82525050565b600061443d82614e6e565b6144478185614e84565b9350614457818560208601615133565b614460816153a4565b840191505092915050565b600061447682614e79565b6144808185614e95565b9350614490818560208601615133565b614499816153a4565b840191505092915050565b60006144af82614e79565b6144b98185614ea6565b93506144c9818560208601615133565b80840191505092915050565b60006144e2602283614e95565b91506144ed826153c2565b604082019050919050565b6000614505601a83614e95565b915061451082615411565b602082019050919050565b6000614528602683614e95565b91506145338261543a565b604082019050919050565b600061454b602a83614e95565b915061455682615489565b604082019050919050565b600061456e601b83614e95565b9150614579826154d8565b602082019050919050565b6000614591601183614e95565b915061459c82615501565b602082019050919050565b60006145b4602383614e95565b91506145bf8261552a565b604082019050919050565b60006145d7602583614e95565b91506145e282615579565b604082019050919050565b60006145fa602683614e95565b9150614605826155c8565b604082019050919050565b600061461d600783614e95565b915061462882615617565b602082019050919050565b6000614640601283614e95565b915061464b82615640565b602082019050919050565b6000614663603983614e95565b915061466e82615669565b604082019050919050565b6000614686601583614e95565b9150614691826156b8565b602082019050919050565b60006146a9602b83614e95565b91506146b4826156e1565b604082019050919050565b60006146cc602683614e95565b91506146d782615730565b604082019050919050565b60006146ef600583614ea6565b91506146fa8261577f565b600582019050919050565b6000614712602083614e95565b915061471d826157a8565b602082019050919050565b6000614735602f83614e95565b9150614740826157d1565b604082019050919050565b6000614758601a83614e95565b915061476382615820565b602082019050919050565b600061477b603283614e95565b915061478682615849565b604082019050919050565b600061479e603283614e95565b91506147a982615898565b604082019050919050565b60006147c1602283614e95565b91506147cc826158e7565b604082019050919050565b60006147e4603383614e95565b91506147ef82615936565b604082019050919050565b6000614807601d83614e95565b915061481282615985565b602082019050919050565b600061482a602183614e95565b9150614835826159ae565b604082019050919050565b600061484d602e83614e95565b9150614858826159fd565b604082019050919050565b6000614870601783614e95565b915061487b82615a4c565b602082019050919050565b6000614893602f83614e95565b915061489e82615a75565b604082019050919050565b60006148b6602d83614e95565b91506148c182615ac4565b604082019050919050565b60006148d9600983614e95565b91506148e482615b13565b602082019050919050565b6148f88161510a565b82525050565b61490781615114565b82525050565b600061491982846143e6565b60148201915081905092915050565b6000614934828561441b565b602082019150614944828461441b565b6020820191508190509392505050565b600061496082856144a4565b915061496c82846144a4565b9150614977826146e2565b91508190509392505050565b600060208201905061499860008301846143d7565b92915050565b60006080820190506149b360008301876143d7565b6149c060208301866143d7565b6149cd60408301856148ef565b81810360608301526149df8184614432565b905095945050505050565b60006020820190506149ff60008301846143fd565b92915050565b6000602082019050614a1a600083018461440c565b92915050565b60006020820190508181036000830152614a3a818461446b565b905092915050565b60006020820190508181036000830152614a5b816144d5565b9050919050565b60006020820190508181036000830152614a7b816144f8565b9050919050565b60006020820190508181036000830152614a9b8161451b565b9050919050565b60006020820190508181036000830152614abb8161453e565b9050919050565b60006020820190508181036000830152614adb81614561565b9050919050565b60006020820190508181036000830152614afb81614584565b9050919050565b60006020820190508181036000830152614b1b816145a7565b9050919050565b60006020820190508181036000830152614b3b816145ca565b9050919050565b60006020820190508181036000830152614b5b816145ed565b9050919050565b60006020820190508181036000830152614b7b81614610565b9050919050565b60006020820190508181036000830152614b9b81614633565b9050919050565b60006020820190508181036000830152614bbb81614656565b9050919050565b60006020820190508181036000830152614bdb81614679565b9050919050565b60006020820190508181036000830152614bfb8161469c565b9050919050565b60006020820190508181036000830152614c1b816146bf565b9050919050565b60006020820190508181036000830152614c3b81614705565b9050919050565b60006020820190508181036000830152614c5b81614728565b9050919050565b60006020820190508181036000830152614c7b8161474b565b9050919050565b60006020820190508181036000830152614c9b8161476e565b9050919050565b60006020820190508181036000830152614cbb81614791565b9050919050565b60006020820190508181036000830152614cdb816147b4565b9050919050565b60006020820190508181036000830152614cfb816147d7565b9050919050565b60006020820190508181036000830152614d1b816147fa565b9050919050565b60006020820190508181036000830152614d3b8161481d565b9050919050565b60006020820190508181036000830152614d5b81614840565b9050919050565b60006020820190508181036000830152614d7b81614863565b9050919050565b60006020820190508181036000830152614d9b81614886565b9050919050565b60006020820190508181036000830152614dbb816148a9565b9050919050565b60006020820190508181036000830152614ddb816148cc565b9050919050565b6000602082019050614df760008301846148ef565b92915050565b6000602082019050614e1260008301846148fe565b92915050565b6000614e22614e33565b9050614e2e82826151c2565b919050565b6000604051905090565b600067ffffffffffffffff821115614e5857614e57615357565b5b614e61826153a4565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614ebc826150ce565b9150614ec7836150ce565b9250826fffffffffffffffffffffffffffffffff03821115614eec57614eeb61529b565b5b828201905092915050565b6000614f028261510a565b9150614f0d8361510a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f4257614f4161529b565b5b828201905092915050565b6000614f5882615114565b9150614f6383615114565b92508263ffffffff03821115614f7c57614f7b61529b565b5b828201905092915050565b6000614f928261510a565b9150614f9d8361510a565b925082614fad57614fac6152ca565b5b828204905092915050565b6000614fc38261510a565b9150614fce8361510a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150075761500661529b565b5b828202905092915050565b600061501d826150ce565b9150615028836150ce565b92508282101561503b5761503a61529b565b5b828203905092915050565b60006150518261510a565b915061505c8361510a565b92508282101561506f5761506e61529b565b5b828203905092915050565b6000615085826150ea565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b83811015615151578082015181840152602081019050615136565b83811115615160576000848401525b50505050565b60006151718261510a565b915060008214156151855761518461529b565b5b600182039050919050565b600060028204905060018216806151a857607f821691505b602082108114156151bc576151bb6152f9565b5b50919050565b6151cb826153a4565b810181811067ffffffffffffffff821117156151ea576151e9615357565b5b80604052505050565b60006151fe8261510a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152315761523061529b565b5b600182019050919050565b600061524782615258565b9050919050565b6000819050919050565b6000615263826153b5565b9050919050565b60006152758261510a565b91506152808361510a565b9250826152905761528f6152ca565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f6e65204e46542063616e206265206d696e746564000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f596f75277265206e6f74206f6e207468652077686974656c6973740000000000600082015250565b7f53656e646572206e6f74206f726967696e000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f416c6c2077686974656c697374206d696e74732068617665206265656e20636c60008201527f61696d6564210000000000000000000000000000000000000000000000000000602082015250565b7f5061757365642100000000000000000000000000000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f53616c6520686173206e6f742073746172746564210000000000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f596f75277265206f6e207468652077686974656c69737420627574206d696e7460008201527f20686173206e6f74207374617274656421210000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4d6178206f6e6520706572207472616e73616374696f6e000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b615b458161507a565b8114615b5057600080fd5b50565b615b5c8161508c565b8114615b6757600080fd5b50565b615b7381615098565b8114615b7e57600080fd5b50565b615b8a816150a2565b8114615b9557600080fd5b50565b615ba18161510a565b8114615bac57600080fd5b50565b615bb881615114565b8114615bc357600080fd5b5056fea264697066735822122025a494d1e252311084d2adaddb82d503631951150c705051e29cae584b7493ba64736f6c63430008070033

Deployed Bytecode Sourcemap

29549:4982:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15535:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17261:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18795:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31239:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18358:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31431:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14096;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19645:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33626:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29974:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14727:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30325:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31641:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31328:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31158:73;;;;;;;;;;;;;:::i;:::-;;19850:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14259:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34207:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34308:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31533:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17084:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30723:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15961:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3832:103;;;;;;;;;;;;;:::i;:::-;;30610:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34107:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30075:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33764:103;;;;;;;;;;;;;:::i;:::-;;31080:70;;;;;;;;;;;;;:::i;:::-;;30202:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3609:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30854:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17416:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32592:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19063:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31855:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32942:676;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30290:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34006:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20070:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30975:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31749:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30140:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30364:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33875:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17577:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24488:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19400:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3943:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15535:370;15662:4;15707:25;15692:40;;;:11;:40;;;;:99;;;;15758:33;15743:48;;;:11;:48;;;;15692:99;:160;;;;15817:35;15802:50;;;:11;:50;;;;15692:160;:207;;;;15863:36;15887:11;15863:23;:36::i;:::-;15692:207;15678:221;;15535:370;;;:::o;17261:94::-;17315:13;17344:5;17337:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17261:94;:::o;18795:204::-;18863:7;18887:16;18895:7;18887;:16::i;:::-;18879:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18969:15;:24;18985:7;18969:24;;;;;;;;;;;;;;;;;;;;;18962:31;;18795:204;;;:::o;31239:81::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31308:4:::1;31300:5;;:12;;;;;;;;;;;;;;;;;;31239:81:::0;:::o;18358:379::-;18427:13;18443:24;18459:7;18443:15;:24::i;:::-;18427:40;;18488:5;18482:11;;:2;:11;;;;18474:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;18573:5;18557:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;18582:37;18599:5;18606:12;:10;:12::i;:::-;18582:16;:37::i;:::-;18557:62;18541:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;18703:28;18712:2;18716:7;18725:5;18703:8;:28::i;:::-;18420:317;18358:379;;:::o;31431:94::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31512:5:::1;31497:12;;:20;;;;;;;;;;;;;;;;;;31431:94:::0;:::o;14096:::-;14149:7;14172:12;;14165:19;;14096:94;:::o;19645:142::-;19753:28;19763:4;19769:2;19773:7;19753:9;:28::i;:::-;19645:142;;;:::o;33626:130::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33710:3:::1;33695:12;:18;;;;33745:3;33724:18;:24;;;;33626:130:::0;:::o;29974:94::-;;;;:::o;14727:744::-;14836:7;14871:16;14881:5;14871:9;:16::i;:::-;14863:5;:24;14855:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14933:22;14958:13;:11;:13::i;:::-;14933:38;;14978:19;15008:25;15058:9;15053:350;15077:14;15073:1;:18;15053:350;;;15107:31;15141:11;:14;15153:1;15141:14;;;;;;;;;;;15107:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15194:1;15168:28;;:9;:14;;;:28;;;15164:89;;15229:9;:14;;;15209:34;;15164:89;15286:5;15265:26;;:17;:26;;;15261:135;;;15323:5;15308:11;:20;15304:59;;;15350:1;15343:8;;;;;;;;;15304:59;15373:13;;;;;:::i;:::-;;;;15261:135;15098:305;15093:3;;;;;:::i;:::-;;;;15053:350;;;;15409:56;;;;;;;;;;:::i;:::-;;;;;;;;14727:744;;;;;:::o;30325:32::-;;;;;;;;;;;;;:::o;31641:100::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31728:5:::1;31712:13;:21;;;;31641:100:::0;:::o;31328:95::-;31376:7;31403:12;;31396:19;;31328:95;:::o;31158:73::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31218:5:::1;31207:8;;:16;;;;;;;;;;;;;;;;;;31158:73::o:0;19850:157::-;19962:39;19979:4;19985:2;19989:7;19962:39;;;;;;;;;;;;:16;:39::i;:::-;19850:157;;;:::o;14259:177::-;14326:7;14358:13;:11;:13::i;:::-;14350:5;:21;14342:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;14425:5;14418:12;;14259:177;;;:::o;34207:93::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34285:7:::1;34274:8;:18;;;;34207:93:::0;:::o;34308:102::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34395:7:::1;;34383:9;:19;;;;;;;:::i;:::-;;34308:102:::0;;:::o;31533:100::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31620:5:::1;31602:15;;:23;;;;;;;;;;;;;;;;;;31533:100:::0;:::o;17084:118::-;17148:7;17171:20;17183:7;17171:11;:20::i;:::-;:25;;;17164:32;;17084:118;;;:::o;30723:123::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30835:3:::1;30805:27;:33;;;;30723:123:::0;:::o;15961:211::-;16025:7;16066:1;16049:19;;:5;:19;;;;16041:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16138:12;:19;16151:5;16138:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;16130:36;;16123:43;;15961:211;;;:::o;3832:103::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3897:30:::1;3924:1;3897:18;:30::i;:::-;3832:103::o:0;30610:105::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30704:3:::1;30683:18;;:24;;;;;;;;;;;;;;;;;;30610:105:::0;:::o;34107:92::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34187:4:::1;34174:10;:17;;;;34107:92:::0;:::o;30075:58::-;;;;;;;;;;;;;;;;;:::o;33764:103::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33821:5:::1;;;;;;;;;;;33813:23;;:46;33837:21;33813:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33764:103::o:0;31080:70::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31138:4:::1;31127:8;;:15;;;;;;;;;;;;;;;;;;31080:70::o:0;30202:33::-;;;;;;;;;;;;;:::o;3609:87::-;3655:7;3682:6;;;;;;;;;;;3675:13;;3609:87;:::o;30854:113::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30956:3:::1;30931:22;:28;;;;30854:113:::0;:::o;17416:98::-;17472:13;17501:7;17494:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17416:98;:::o;32592:342::-;32649:6;32049:8;;;;;;;;;;;32048:9;32040:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;32111:1;32098:10;:14;:50;;;;;32130:18;;32116:10;:32;;32098:50;32090:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;32209:9;32195:23;;:10;:23;;;32187:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32279:12;;;;;;;;;;;32275:217;;;32345:9;32331:10;32316:12;;:25;;;;:::i;:::-;:38;;32308:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:217;;;32448:9;32434:10;32418:13;;:26;;;;:::i;:::-;:39;;32410:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:217;32549:1;32540:8;;:10;;;;:::i;:::-;32526;32510:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;32502:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32676:12:::1;;;;;;;;;;;32668:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;32778:22;;32768:6;32733:20;:32;32754:10;32733:32;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:67;;32725:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;32878:6;32842:20;:32;32863:10;32842:32;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;32897:29;32907:10;32919:6;32897:9;:29::i;:::-;32592:342:::0;;:::o;19063:274::-;19166:12;:10;:12::i;:::-;19154:24;;:8;:24;;;;19146:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;19263:8;19218:18;:32;19237:12;:10;:12::i;:::-;19218:32;;;;;;;;;;;;;;;:42;19251:8;19218:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;19312:8;19283:48;;19298:12;:10;:12::i;:::-;19283:48;;;19322:8;19283:48;;;;;;:::i;:::-;;;;;;;;19063:274;;:::o;31855:127::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31944:4:::1;31927:14;:21;;;;31970:4;31959:8;:15;;;;31855:127:::0;:::o;32942:676::-;33032:6;32049:8;;;;;;;;;;;32048:9;32040:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;32111:1;32098:10;:14;:50;;;;;32130:18;;32116:10;:32;;32098:50;32090:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;32209:9;32195:23;;:10;:23;;;32187:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;32279:12;;;;;;;;;;;32275:217;;;32345:9;32331:10;32316:12;;:25;;;;:::i;:::-;:38;;32308:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:217;;;32448:9;32434:10;32418:13;;:26;;;;:::i;:::-;:39;;32410:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32275:217;32549:1;32540:8;;:10;;;;:::i;:::-;32526;32510:13;:11;:13::i;:::-;:26;;;;:::i;:::-;:40;;32502:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33059:78:::1;33078:5;;33059:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33085:10;;33124;33107:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;33097:39;;;;;;33059:18;:78::i;:::-;33051:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33188:15;;;;;;;;;;;33180:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33325:27;;33315:6;33277:23;:35;33301:10;33277:35;;;;;;;;;;;;;;;;:44;;;;:::i;:::-;:75;;33269:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;33433:6;33394:23;:35;33418:10;33394:35;;;;;;;;;;;;;;;;:45;;;;;;;:::i;:::-;;;;;;;;33476:18;;;;;;;;;;;33458:36;;:15;;;;;;;;;;;:36;;;33450:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33567:1;33548:15;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33581:29;33591:10;33603:6;33581:9;:29::i;:::-;32942:676:::0;;;;:::o;30290:28::-;;;;;;;;;;;;;:::o;34006:93::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34065:26:::1;34075:10;34087:3;34065:26;;:9;:26::i;:::-;34006:93:::0;:::o;20070:311::-;20207:28;20217:4;20223:2;20227:7;20207:9;:28::i;:::-;20258:48;20281:4;20287:2;20291:7;20300:5;20258:22;:48::i;:::-;20242:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;20070:311;;;;:::o;30975:97::-;31028:4;31052:12;;;;;;;;;;;31045:19;;30975:97;:::o;31749:98::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31834:5:::1;31819:12;:20;;;;31749:98:::0;:::o;30140:55::-;;;;;;;;;;;;;;;;;:::o;30364:35::-;;;;;;;;;;;;;:::o;33875:123::-;33936:7;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33964:4:::1;33956:5;;:12;;;;;;;;;;;;;;;;;;33986:4;33979:11;;33875:123:::0;;;:::o;17577:403::-;17675:13;17716:16;17724:7;17716;:16::i;:::-;17700:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;17806:21;17830:10;:8;:10::i;:::-;17806:34;;17885:1;17867:7;17861:21;:25;:113;;;;;;;;;;;;;;;;;17922:7;17931:18;:7;:16;:18::i;:::-;17905:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17861:113;17847:127;;;17577:403;;;:::o;24488:43::-;;;;:::o;19400:186::-;19522:4;19545:18;:25;19564:5;19545:25;;;;;;;;;;;;;;;:35;19571:8;19545:35;;;;;;;;;;;;;;;;;;;;;;;;;19538:42;;19400:186;;;;:::o;3943:201::-;3755:12;:10;:12::i;:::-;3744:23;;:7;:5;:7::i;:::-;:23;;;3736:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4052:1:::1;4032:22;;:8;:22;;;;4024:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4108:28;4127:8;4108:18;:28::i;:::-;3943:201:::0;:::o;9184:157::-;9269:4;9308:25;9293:40;;;:11;:40;;;;9286:47;;9184:157;;;:::o;20620:105::-;20677:4;20707:12;;20697:7;:22;20690:29;;20620:105;;;:::o;3105:98::-;3158:7;3185:10;3178:17;;3105:98;:::o;24310:172::-;24434:2;24407:15;:24;24423:7;24407:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;24468:7;24464:2;24448:28;;24457:5;24448:28;;;;;;;;;;;;24310:172;;;:::o;22675:1529::-;22772:35;22810:20;22822:7;22810:11;:20::i;:::-;22772:58;;22839:22;22881:13;:18;;;22865:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;22934:12;:10;:12::i;:::-;22910:36;;:20;22922:7;22910:11;:20::i;:::-;:36;;;22865:81;:142;;;;22957:50;22974:13;:18;;;22994:12;:10;:12::i;:::-;22957:16;:50::i;:::-;22865:142;22839:169;;23033:17;23017:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;23165:4;23143:26;;:13;:18;;;:26;;;23127:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;23254:1;23240:16;;:2;:16;;;;23232:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;23307:43;23329:4;23335:2;23339:7;23348:1;23307:21;:43::i;:::-;23407:49;23424:1;23428:7;23437:13;:18;;;23407:8;:49::i;:::-;23495:1;23465:12;:18;23478:4;23465:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23531:1;23503:12;:16;23516:2;23503:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23562:43;;;;;;;;23577:2;23562:43;;;;;;23588:15;23562:43;;;;;23539:11;:20;23551:7;23539:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23833:19;23865:1;23855:7;:11;;;;:::i;:::-;23833:33;;23918:1;23877:43;;:11;:24;23889:11;23877:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;23873:236;;;23935:20;23943:11;23935:7;:20::i;:::-;23931:171;;;23995:97;;;;;;;;24022:13;:18;;;23995:97;;;;;;24053:13;:28;;;23995:97;;;;;23968:11;:24;23980:11;23968:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23931:171;23873:236;24141:7;24137:2;24122:27;;24131:4;24122:27;;;;;;;;;;;;24156:42;24177:4;24183:2;24187:7;24196:1;24156:20;:42::i;:::-;22765:1439;;;22675:1529;;;:::o;16424:606::-;16500:21;;:::i;:::-;16541:16;16549:7;16541;:16::i;:::-;16533:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16613:26;16661:12;;16650:7;:23;16646:93;;16730:1;16715:12;;16705:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;16684:47;;16646:93;16752:12;16767:7;16752:22;;16747:212;16784:18;16776:4;:26;16747:212;;16821:31;16855:11;:17;16867:4;16855:17;;;;;;;;;;;16821:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16911:1;16885:28;;:9;:14;;;:28;;;16881:71;;16933:9;16926:16;;;;;;;16881:71;16812:147;16804:6;;;;;:::i;:::-;;;;16747:212;;;;16967:57;;;;;;;;;;:::i;:::-;;;;;;;;16424:606;;;;:::o;4152:191::-;4226:16;4245:6;;;;;;;;;;;4226:25;;4271:8;4262:6;;:17;;;;;;;;;;;;;;;;;;4326:8;4295:40;;4316:8;4295:40;;;;;;;;;;;;4215:128;4152:191;:::o;20731:98::-;20796:27;20806:2;20810:8;20796:27;;;;;;;;;;;;:9;:27::i;:::-;20731:98;;:::o;28262:190::-;28387:4;28440;28411:25;28424:5;28431:4;28411:12;:25::i;:::-;:33;28404:40;;28262:190;;;;;:::o;26025:690::-;26162:4;26179:15;:2;:13;;;:15::i;:::-;26175:535;;;26234:2;26218:36;;;26255:12;:10;:12::i;:::-;26269:4;26275:7;26284:5;26218:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;26205:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26466:1;26449:6;:13;:18;26445:215;;;26482:61;;;;;;;;;;:::i;:::-;;;;;;;;26445:215;26628:6;26622:13;26613:6;26609:2;26605:15;26598:38;26205:464;26350:45;;;26340:55;;;:6;:55;;;;26333:62;;;;;26175:535;26698:4;26691:11;;26025:690;;;;;;;:::o;34418:110::-;34478:13;34511:9;34504:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34418:110;:::o;1678:532::-;1734:13;1773:1;1764:5;:10;1760:53;;;1791:10;;;;;;;;;;;;;;;;;;;;;1760:53;1823:12;1838:5;1823:20;;1854:14;1879:78;1894:1;1886:4;:9;1879:78;;1912:8;;;;;:::i;:::-;;;;1943:2;1935:10;;;;;:::i;:::-;;;1879:78;;;1967:19;1999:6;1989:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1967:39;;2017:154;2033:1;2024:5;:10;2017:154;;2061:1;2051:11;;;;;:::i;:::-;;;2128:2;2120:5;:10;;;;:::i;:::-;2107:2;:24;;;;:::i;:::-;2094:39;;2077:6;2084;2077:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2157:2;2148:11;;;;;:::i;:::-;;;2017:154;;;2195:6;2181:21;;;;;1678:532;;;;:::o;27177:141::-;;;;;:::o;27704:140::-;;;;;:::o;21168:1275::-;21273:20;21296:12;;21273:35;;21337:1;21323:16;;:2;:16;;;;21315:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21514:21;21522:12;21514:7;:21::i;:::-;21513:22;21505:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21659:61;21689:1;21693:2;21697:12;21711:8;21659:21;:61::i;:::-;21729:30;21762:12;:16;21775:2;21762:16;;;;;;;;;;;;;;;21729:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21804:119;;;;;;;;21854:8;21824:11;:19;;;:39;;;;:::i;:::-;21804:119;;;;;;21907:8;21872:11;:24;;;:44;;;;:::i;:::-;21804:119;;;;;21785:12;:16;21798:2;21785:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21958:43;;;;;;;;21973:2;21958:43;;;;;;21984:15;21958:43;;;;;21930:11;:25;21942:12;21930:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22010:20;22033:12;22010:35;;22059:9;22054:281;22078:8;22074:1;:12;22054:281;;;22132:12;22128:2;22107:38;;22124:1;22107:38;;;;;;;;;;;;22172:59;22203:1;22207:2;22211:12;22225:5;22172:22;:59::i;:::-;22154:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;22313:14;;;;;:::i;:::-;;;;22088:3;;;;;:::i;:::-;;;;22054:281;;;;22358:12;22343;:27;;;;22377:60;22406:1;22410:2;22414:12;22428:8;22377:20;:60::i;:::-;21266:1177;;;21168:1275;;;:::o;28814:701::-;28897:7;28917:20;28940:4;28917:27;;28960:9;28955:523;28979:5;:12;28975:1;:16;28955:523;;;29013:20;29036:5;29042:1;29036:8;;;;;;;;:::i;:::-;;;;;;;;29013:31;;29079:12;29063;:28;29059:408;;29233:12;29247;29216:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29206:55;;;;;;29191:70;;29059:408;;;29423:12;29437;29406:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29396:55;;;;;;29381:70;;29059:408;28998:480;28993:3;;;;;:::i;:::-;;;;28955:523;;;;29495:12;29488:19;;;28814:701;;;;:::o;4421:115::-;4481:4;4527:1;4505:7;:19;;;:23;4498:30;;4421:115;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:139::-;1344:5;1382:6;1369:20;1360:29;;1398:33;1425:5;1398:33;:::i;:::-;1298:139;;;;:::o;1443:137::-;1488:5;1526:6;1513:20;1504:29;;1542:32;1568:5;1542:32;:::i;:::-;1443:137;;;;:::o;1586:141::-;1642:5;1673:6;1667:13;1658:22;;1689:32;1715:5;1689:32;:::i;:::-;1586:141;;;;:::o;1746:338::-;1801:5;1850:3;1843:4;1835:6;1831:17;1827:27;1817:122;;1858:79;;:::i;:::-;1817:122;1975:6;1962:20;2000:78;2074:3;2066:6;2059:4;2051:6;2047:17;2000:78;:::i;:::-;1991:87;;1807:277;1746:338;;;;:::o;2104:553::-;2162:8;2172:6;2222:3;2215:4;2207:6;2203:17;2199:27;2189:122;;2230:79;;:::i;:::-;2189:122;2343:6;2330:20;2320:30;;2373:18;2365:6;2362:30;2359:117;;;2395:79;;:::i;:::-;2359:117;2509:4;2501:6;2497:17;2485:29;;2563:3;2555:4;2547:6;2543:17;2533:8;2529:32;2526:41;2523:128;;;2570:79;;:::i;:::-;2523:128;2104:553;;;;;:::o;2663:139::-;2709:5;2747:6;2734:20;2725:29;;2763:33;2790:5;2763:33;:::i;:::-;2663:139;;;;:::o;2808:137::-;2853:5;2891:6;2878:20;2869:29;;2907:32;2933:5;2907:32;:::i;:::-;2808:137;;;;:::o;2951:329::-;3010:6;3059:2;3047:9;3038:7;3034:23;3030:32;3027:119;;;3065:79;;:::i;:::-;3027:119;3185:1;3210:53;3255:7;3246:6;3235:9;3231:22;3210:53;:::i;:::-;3200:63;;3156:117;2951:329;;;;:::o;3286:474::-;3354:6;3362;3411:2;3399:9;3390:7;3386:23;3382:32;3379:119;;;3417:79;;:::i;:::-;3379:119;3537:1;3562:53;3607:7;3598:6;3587:9;3583:22;3562:53;:::i;:::-;3552:63;;3508:117;3664:2;3690:53;3735:7;3726:6;3715:9;3711:22;3690:53;:::i;:::-;3680:63;;3635:118;3286:474;;;;;:::o;3766:619::-;3843:6;3851;3859;3908:2;3896:9;3887:7;3883:23;3879:32;3876:119;;;3914:79;;:::i;:::-;3876:119;4034:1;4059:53;4104:7;4095:6;4084:9;4080:22;4059:53;:::i;:::-;4049:63;;4005:117;4161:2;4187:53;4232:7;4223:6;4212:9;4208:22;4187:53;:::i;:::-;4177:63;;4132:118;4289:2;4315:53;4360:7;4351:6;4340:9;4336:22;4315:53;:::i;:::-;4305:63;;4260:118;3766:619;;;;;:::o;4391:943::-;4486:6;4494;4502;4510;4559:3;4547:9;4538:7;4534:23;4530:33;4527:120;;;4566:79;;:::i;:::-;4527:120;4686:1;4711:53;4756:7;4747:6;4736:9;4732:22;4711:53;:::i;:::-;4701:63;;4657:117;4813:2;4839:53;4884:7;4875:6;4864:9;4860:22;4839:53;:::i;:::-;4829:63;;4784:118;4941:2;4967:53;5012:7;5003:6;4992:9;4988:22;4967:53;:::i;:::-;4957:63;;4912:118;5097:2;5086:9;5082:18;5069:32;5128:18;5120:6;5117:30;5114:117;;;5150:79;;:::i;:::-;5114:117;5255:62;5309:7;5300:6;5289:9;5285:22;5255:62;:::i;:::-;5245:72;;5040:287;4391:943;;;;;;;:::o;5340:468::-;5405:6;5413;5462:2;5450:9;5441:7;5437:23;5433:32;5430:119;;;5468:79;;:::i;:::-;5430:119;5588:1;5613:53;5658:7;5649:6;5638:9;5634:22;5613:53;:::i;:::-;5603:63;;5559:117;5715:2;5741:50;5783:7;5774:6;5763:9;5759:22;5741:50;:::i;:::-;5731:60;;5686:115;5340:468;;;;;:::o;5814:474::-;5882:6;5890;5939:2;5927:9;5918:7;5914:23;5910:32;5907:119;;;5945:79;;:::i;:::-;5907:119;6065:1;6090:53;6135:7;6126:6;6115:9;6111:22;6090:53;:::i;:::-;6080:63;;6036:117;6192:2;6218:53;6263:7;6254:6;6243:9;6239:22;6218:53;:::i;:::-;6208:63;;6163:118;5814:474;;;;;:::o;6294:704::-;6389:6;6397;6405;6454:2;6442:9;6433:7;6429:23;6425:32;6422:119;;;6460:79;;:::i;:::-;6422:119;6608:1;6597:9;6593:17;6580:31;6638:18;6630:6;6627:30;6624:117;;;6660:79;;:::i;:::-;6624:117;6773:80;6845:7;6836:6;6825:9;6821:22;6773:80;:::i;:::-;6755:98;;;;6551:312;6902:2;6928:53;6973:7;6964:6;6953:9;6949:22;6928:53;:::i;:::-;6918:63;;6873:118;6294:704;;;;;:::o;7004:323::-;7060:6;7109:2;7097:9;7088:7;7084:23;7080:32;7077:119;;;7115:79;;:::i;:::-;7077:119;7235:1;7260:50;7302:7;7293:6;7282:9;7278:22;7260:50;:::i;:::-;7250:60;;7206:114;7004:323;;;;:::o;7333:329::-;7392:6;7441:2;7429:9;7420:7;7416:23;7412:32;7409:119;;;7447:79;;:::i;:::-;7409:119;7567:1;7592:53;7637:7;7628:6;7617:9;7613:22;7592:53;:::i;:::-;7582:63;;7538:117;7333:329;;;;:::o;7668:327::-;7726:6;7775:2;7763:9;7754:7;7750:23;7746:32;7743:119;;;7781:79;;:::i;:::-;7743:119;7901:1;7926:52;7970:7;7961:6;7950:9;7946:22;7926:52;:::i;:::-;7916:62;;7872:116;7668:327;;;;:::o;8001:349::-;8070:6;8119:2;8107:9;8098:7;8094:23;8090:32;8087:119;;;8125:79;;:::i;:::-;8087:119;8245:1;8270:63;8325:7;8316:6;8305:9;8301:22;8270:63;:::i;:::-;8260:73;;8216:127;8001:349;;;;:::o;8356:529::-;8427:6;8435;8484:2;8472:9;8463:7;8459:23;8455:32;8452:119;;;8490:79;;:::i;:::-;8452:119;8638:1;8627:9;8623:17;8610:31;8668:18;8660:6;8657:30;8654:117;;;8690:79;;:::i;:::-;8654:117;8803:65;8860:7;8851:6;8840:9;8836:22;8803:65;:::i;:::-;8785:83;;;;8581:297;8356:529;;;;;:::o;8891:329::-;8950:6;8999:2;8987:9;8978:7;8974:23;8970:32;8967:119;;;9005:79;;:::i;:::-;8967:119;9125:1;9150:53;9195:7;9186:6;9175:9;9171:22;9150:53;:::i;:::-;9140:63;;9096:117;8891:329;;;;:::o;9226:327::-;9284:6;9333:2;9321:9;9312:7;9308:23;9304:32;9301:119;;;9339:79;;:::i;:::-;9301:119;9459:1;9484:52;9528:7;9519:6;9508:9;9504:22;9484:52;:::i;:::-;9474:62;;9430:116;9226:327;;;;:::o;9559:118::-;9646:24;9664:5;9646:24;:::i;:::-;9641:3;9634:37;9559:118;;:::o;9683:157::-;9788:45;9808:24;9826:5;9808:24;:::i;:::-;9788:45;:::i;:::-;9783:3;9776:58;9683:157;;:::o;9846:109::-;9927:21;9942:5;9927:21;:::i;:::-;9922:3;9915:34;9846:109;;:::o;9961:118::-;10048:24;10066:5;10048:24;:::i;:::-;10043:3;10036:37;9961:118;;:::o;10085:157::-;10190:45;10210:24;10228:5;10210:24;:::i;:::-;10190:45;:::i;:::-;10185:3;10178:58;10085:157;;:::o;10248:360::-;10334:3;10362:38;10394:5;10362:38;:::i;:::-;10416:70;10479:6;10474:3;10416:70;:::i;:::-;10409:77;;10495:52;10540:6;10535:3;10528:4;10521:5;10517:16;10495:52;:::i;:::-;10572:29;10594:6;10572:29;:::i;:::-;10567:3;10563:39;10556:46;;10338:270;10248:360;;;;:::o;10614:364::-;10702:3;10730:39;10763:5;10730:39;:::i;:::-;10785:71;10849:6;10844:3;10785:71;:::i;:::-;10778:78;;10865:52;10910:6;10905:3;10898:4;10891:5;10887:16;10865:52;:::i;:::-;10942:29;10964:6;10942:29;:::i;:::-;10937:3;10933:39;10926:46;;10706:272;10614:364;;;;:::o;10984:377::-;11090:3;11118:39;11151:5;11118:39;:::i;:::-;11173:89;11255:6;11250:3;11173:89;:::i;:::-;11166:96;;11271:52;11316:6;11311:3;11304:4;11297:5;11293:16;11271:52;:::i;:::-;11348:6;11343:3;11339:16;11332:23;;11094:267;10984:377;;;;:::o;11367:366::-;11509:3;11530:67;11594:2;11589:3;11530:67;:::i;:::-;11523:74;;11606:93;11695:3;11606:93;:::i;:::-;11724:2;11719:3;11715:12;11708:19;;11367:366;;;:::o;11739:::-;11881:3;11902:67;11966:2;11961:3;11902:67;:::i;:::-;11895:74;;11978:93;12067:3;11978:93;:::i;:::-;12096:2;12091:3;12087:12;12080:19;;11739:366;;;:::o;12111:::-;12253:3;12274:67;12338:2;12333:3;12274:67;:::i;:::-;12267:74;;12350:93;12439:3;12350:93;:::i;:::-;12468:2;12463:3;12459:12;12452:19;;12111:366;;;:::o;12483:::-;12625:3;12646:67;12710:2;12705:3;12646:67;:::i;:::-;12639:74;;12722:93;12811:3;12722:93;:::i;:::-;12840:2;12835:3;12831:12;12824:19;;12483:366;;;:::o;12855:::-;12997:3;13018:67;13082:2;13077:3;13018:67;:::i;:::-;13011:74;;13094:93;13183:3;13094:93;:::i;:::-;13212:2;13207:3;13203:12;13196:19;;12855:366;;;:::o;13227:::-;13369:3;13390:67;13454:2;13449:3;13390:67;:::i;:::-;13383:74;;13466:93;13555:3;13466:93;:::i;:::-;13584:2;13579:3;13575:12;13568:19;;13227:366;;;:::o;13599:::-;13741:3;13762:67;13826:2;13821:3;13762:67;:::i;:::-;13755:74;;13838:93;13927:3;13838:93;:::i;:::-;13956:2;13951:3;13947:12;13940:19;;13599:366;;;:::o;13971:::-;14113:3;14134:67;14198:2;14193:3;14134:67;:::i;:::-;14127:74;;14210:93;14299:3;14210:93;:::i;:::-;14328:2;14323:3;14319:12;14312:19;;13971:366;;;:::o;14343:::-;14485:3;14506:67;14570:2;14565:3;14506:67;:::i;:::-;14499:74;;14582:93;14671:3;14582:93;:::i;:::-;14700:2;14695:3;14691:12;14684:19;;14343:366;;;:::o;14715:365::-;14857:3;14878:66;14942:1;14937:3;14878:66;:::i;:::-;14871:73;;14953:93;15042:3;14953:93;:::i;:::-;15071:2;15066:3;15062:12;15055:19;;14715:365;;;:::o;15086:366::-;15228:3;15249:67;15313:2;15308:3;15249:67;:::i;:::-;15242:74;;15325:93;15414:3;15325:93;:::i;:::-;15443:2;15438:3;15434:12;15427:19;;15086:366;;;:::o;15458:::-;15600:3;15621:67;15685:2;15680:3;15621:67;:::i;:::-;15614:74;;15697:93;15786:3;15697:93;:::i;:::-;15815:2;15810:3;15806:12;15799:19;;15458:366;;;:::o;15830:::-;15972:3;15993:67;16057:2;16052:3;15993:67;:::i;:::-;15986:74;;16069:93;16158:3;16069:93;:::i;:::-;16187:2;16182:3;16178:12;16171:19;;15830:366;;;:::o;16202:::-;16344:3;16365:67;16429:2;16424:3;16365:67;:::i;:::-;16358:74;;16441:93;16530:3;16441:93;:::i;:::-;16559:2;16554:3;16550:12;16543:19;;16202:366;;;:::o;16574:::-;16716:3;16737:67;16801:2;16796:3;16737:67;:::i;:::-;16730:74;;16813:93;16902:3;16813:93;:::i;:::-;16931:2;16926:3;16922:12;16915:19;;16574:366;;;:::o;16946:400::-;17106:3;17127:84;17209:1;17204:3;17127:84;:::i;:::-;17120:91;;17220:93;17309:3;17220:93;:::i;:::-;17338:1;17333:3;17329:11;17322:18;;16946:400;;;:::o;17352:366::-;17494:3;17515:67;17579:2;17574:3;17515:67;:::i;:::-;17508:74;;17591:93;17680:3;17591:93;:::i;:::-;17709:2;17704:3;17700:12;17693:19;;17352:366;;;:::o;17724:::-;17866:3;17887:67;17951:2;17946:3;17887:67;:::i;:::-;17880:74;;17963:93;18052:3;17963:93;:::i;:::-;18081:2;18076:3;18072:12;18065:19;;17724:366;;;:::o;18096:::-;18238:3;18259:67;18323:2;18318:3;18259:67;:::i;:::-;18252:74;;18335:93;18424:3;18335:93;:::i;:::-;18453:2;18448:3;18444:12;18437:19;;18096:366;;;:::o;18468:::-;18610:3;18631:67;18695:2;18690:3;18631:67;:::i;:::-;18624:74;;18707:93;18796:3;18707:93;:::i;:::-;18825:2;18820:3;18816:12;18809:19;;18468:366;;;:::o;18840:::-;18982:3;19003:67;19067:2;19062:3;19003:67;:::i;:::-;18996:74;;19079:93;19168:3;19079:93;:::i;:::-;19197:2;19192:3;19188:12;19181:19;;18840:366;;;:::o;19212:::-;19354:3;19375:67;19439:2;19434:3;19375:67;:::i;:::-;19368:74;;19451:93;19540:3;19451:93;:::i;:::-;19569:2;19564:3;19560:12;19553:19;;19212:366;;;:::o;19584:::-;19726:3;19747:67;19811:2;19806:3;19747:67;:::i;:::-;19740:74;;19823:93;19912:3;19823:93;:::i;:::-;19941:2;19936:3;19932:12;19925:19;;19584:366;;;:::o;19956:::-;20098:3;20119:67;20183:2;20178:3;20119:67;:::i;:::-;20112:74;;20195:93;20284:3;20195:93;:::i;:::-;20313:2;20308:3;20304:12;20297:19;;19956:366;;;:::o;20328:::-;20470:3;20491:67;20555:2;20550:3;20491:67;:::i;:::-;20484:74;;20567:93;20656:3;20567:93;:::i;:::-;20685:2;20680:3;20676:12;20669:19;;20328:366;;;:::o;20700:::-;20842:3;20863:67;20927:2;20922:3;20863:67;:::i;:::-;20856:74;;20939:93;21028:3;20939:93;:::i;:::-;21057:2;21052:3;21048:12;21041:19;;20700:366;;;:::o;21072:::-;21214:3;21235:67;21299:2;21294:3;21235:67;:::i;:::-;21228:74;;21311:93;21400:3;21311:93;:::i;:::-;21429:2;21424:3;21420:12;21413:19;;21072:366;;;:::o;21444:::-;21586:3;21607:67;21671:2;21666:3;21607:67;:::i;:::-;21600:74;;21683:93;21772:3;21683:93;:::i;:::-;21801:2;21796:3;21792:12;21785:19;;21444:366;;;:::o;21816:::-;21958:3;21979:67;22043:2;22038:3;21979:67;:::i;:::-;21972:74;;22055:93;22144:3;22055:93;:::i;:::-;22173:2;22168:3;22164:12;22157:19;;21816:366;;;:::o;22188:365::-;22330:3;22351:66;22415:1;22410:3;22351:66;:::i;:::-;22344:73;;22426:93;22515:3;22426:93;:::i;:::-;22544:2;22539:3;22535:12;22528:19;;22188:365;;;:::o;22559:118::-;22646:24;22664:5;22646:24;:::i;:::-;22641:3;22634:37;22559:118;;:::o;22683:115::-;22768:23;22785:5;22768:23;:::i;:::-;22763:3;22756:36;22683:115;;:::o;22804:256::-;22916:3;22931:75;23002:3;22993:6;22931:75;:::i;:::-;23031:2;23026:3;23022:12;23015:19;;23051:3;23044:10;;22804:256;;;;:::o;23066:397::-;23206:3;23221:75;23292:3;23283:6;23221:75;:::i;:::-;23321:2;23316:3;23312:12;23305:19;;23334:75;23405:3;23396:6;23334:75;:::i;:::-;23434:2;23429:3;23425:12;23418:19;;23454:3;23447:10;;23066:397;;;;;:::o;23469:701::-;23750:3;23772:95;23863:3;23854:6;23772:95;:::i;:::-;23765:102;;23884:95;23975:3;23966:6;23884:95;:::i;:::-;23877:102;;23996:148;24140:3;23996:148;:::i;:::-;23989:155;;24161:3;24154:10;;23469:701;;;;;:::o;24176:222::-;24269:4;24307:2;24296:9;24292:18;24284:26;;24320:71;24388:1;24377:9;24373:17;24364:6;24320:71;:::i;:::-;24176:222;;;;:::o;24404:640::-;24599:4;24637:3;24626:9;24622:19;24614:27;;24651:71;24719:1;24708:9;24704:17;24695:6;24651:71;:::i;:::-;24732:72;24800:2;24789:9;24785:18;24776:6;24732:72;:::i;:::-;24814;24882:2;24871:9;24867:18;24858:6;24814:72;:::i;:::-;24933:9;24927:4;24923:20;24918:2;24907:9;24903:18;24896:48;24961:76;25032:4;25023:6;24961:76;:::i;:::-;24953:84;;24404:640;;;;;;;:::o;25050:210::-;25137:4;25175:2;25164:9;25160:18;25152:26;;25188:65;25250:1;25239:9;25235:17;25226:6;25188:65;:::i;:::-;25050:210;;;;:::o;25266:222::-;25359:4;25397:2;25386:9;25382:18;25374:26;;25410:71;25478:1;25467:9;25463:17;25454:6;25410:71;:::i;:::-;25266:222;;;;:::o;25494:313::-;25607:4;25645:2;25634:9;25630:18;25622:26;;25694:9;25688:4;25684:20;25680:1;25669:9;25665:17;25658:47;25722:78;25795:4;25786:6;25722:78;:::i;:::-;25714:86;;25494:313;;;;:::o;25813:419::-;25979:4;26017:2;26006:9;26002:18;25994:26;;26066:9;26060:4;26056:20;26052:1;26041:9;26037:17;26030:47;26094:131;26220:4;26094:131;:::i;:::-;26086:139;;25813:419;;;:::o;26238:::-;26404:4;26442:2;26431:9;26427:18;26419:26;;26491:9;26485:4;26481:20;26477:1;26466:9;26462:17;26455:47;26519:131;26645:4;26519:131;:::i;:::-;26511:139;;26238:419;;;:::o;26663:::-;26829:4;26867:2;26856:9;26852:18;26844:26;;26916:9;26910:4;26906:20;26902:1;26891:9;26887:17;26880:47;26944:131;27070:4;26944:131;:::i;:::-;26936:139;;26663:419;;;:::o;27088:::-;27254:4;27292:2;27281:9;27277:18;27269:26;;27341:9;27335:4;27331:20;27327:1;27316:9;27312:17;27305:47;27369:131;27495:4;27369:131;:::i;:::-;27361:139;;27088:419;;;:::o;27513:::-;27679:4;27717:2;27706:9;27702:18;27694:26;;27766:9;27760:4;27756:20;27752:1;27741:9;27737:17;27730:47;27794:131;27920:4;27794:131;:::i;:::-;27786:139;;27513:419;;;:::o;27938:::-;28104:4;28142:2;28131:9;28127:18;28119:26;;28191:9;28185:4;28181:20;28177:1;28166:9;28162:17;28155:47;28219:131;28345:4;28219:131;:::i;:::-;28211:139;;27938:419;;;:::o;28363:::-;28529:4;28567:2;28556:9;28552:18;28544:26;;28616:9;28610:4;28606:20;28602:1;28591:9;28587:17;28580:47;28644:131;28770:4;28644:131;:::i;:::-;28636:139;;28363:419;;;:::o;28788:::-;28954:4;28992:2;28981:9;28977:18;28969:26;;29041:9;29035:4;29031:20;29027:1;29016:9;29012:17;29005:47;29069:131;29195:4;29069:131;:::i;:::-;29061:139;;28788:419;;;:::o;29213:::-;29379:4;29417:2;29406:9;29402:18;29394:26;;29466:9;29460:4;29456:20;29452:1;29441:9;29437:17;29430:47;29494:131;29620:4;29494:131;:::i;:::-;29486:139;;29213:419;;;:::o;29638:::-;29804:4;29842:2;29831:9;29827:18;29819:26;;29891:9;29885:4;29881:20;29877:1;29866:9;29862:17;29855:47;29919:131;30045:4;29919:131;:::i;:::-;29911:139;;29638:419;;;:::o;30063:::-;30229:4;30267:2;30256:9;30252:18;30244:26;;30316:9;30310:4;30306:20;30302:1;30291:9;30287:17;30280:47;30344:131;30470:4;30344:131;:::i;:::-;30336:139;;30063:419;;;:::o;30488:::-;30654:4;30692:2;30681:9;30677:18;30669:26;;30741:9;30735:4;30731:20;30727:1;30716:9;30712:17;30705:47;30769:131;30895:4;30769:131;:::i;:::-;30761:139;;30488:419;;;:::o;30913:::-;31079:4;31117:2;31106:9;31102:18;31094:26;;31166:9;31160:4;31156:20;31152:1;31141:9;31137:17;31130:47;31194:131;31320:4;31194:131;:::i;:::-;31186:139;;30913:419;;;:::o;31338:::-;31504:4;31542:2;31531:9;31527:18;31519:26;;31591:9;31585:4;31581:20;31577:1;31566:9;31562:17;31555:47;31619:131;31745:4;31619:131;:::i;:::-;31611:139;;31338:419;;;:::o;31763:::-;31929:4;31967:2;31956:9;31952:18;31944:26;;32016:9;32010:4;32006:20;32002:1;31991:9;31987:17;31980:47;32044:131;32170:4;32044:131;:::i;:::-;32036:139;;31763:419;;;:::o;32188:::-;32354:4;32392:2;32381:9;32377:18;32369:26;;32441:9;32435:4;32431:20;32427:1;32416:9;32412:17;32405:47;32469:131;32595:4;32469:131;:::i;:::-;32461:139;;32188:419;;;:::o;32613:::-;32779:4;32817:2;32806:9;32802:18;32794:26;;32866:9;32860:4;32856:20;32852:1;32841:9;32837:17;32830:47;32894:131;33020:4;32894:131;:::i;:::-;32886:139;;32613:419;;;:::o;33038:::-;33204:4;33242:2;33231:9;33227:18;33219:26;;33291:9;33285:4;33281:20;33277:1;33266:9;33262:17;33255:47;33319:131;33445:4;33319:131;:::i;:::-;33311:139;;33038:419;;;:::o;33463:::-;33629:4;33667:2;33656:9;33652:18;33644:26;;33716:9;33710:4;33706:20;33702:1;33691:9;33687:17;33680:47;33744:131;33870:4;33744:131;:::i;:::-;33736:139;;33463:419;;;:::o;33888:::-;34054:4;34092:2;34081:9;34077:18;34069:26;;34141:9;34135:4;34131:20;34127:1;34116:9;34112:17;34105:47;34169:131;34295:4;34169:131;:::i;:::-;34161:139;;33888:419;;;:::o;34313:::-;34479:4;34517:2;34506:9;34502:18;34494:26;;34566:9;34560:4;34556:20;34552:1;34541:9;34537:17;34530:47;34594:131;34720:4;34594:131;:::i;:::-;34586:139;;34313:419;;;:::o;34738:::-;34904:4;34942:2;34931:9;34927:18;34919:26;;34991:9;34985:4;34981:20;34977:1;34966:9;34962:17;34955:47;35019:131;35145:4;35019:131;:::i;:::-;35011:139;;34738:419;;;:::o;35163:::-;35329:4;35367:2;35356:9;35352:18;35344:26;;35416:9;35410:4;35406:20;35402:1;35391:9;35387:17;35380:47;35444:131;35570:4;35444:131;:::i;:::-;35436:139;;35163:419;;;:::o;35588:::-;35754:4;35792:2;35781:9;35777:18;35769:26;;35841:9;35835:4;35831:20;35827:1;35816:9;35812:17;35805:47;35869:131;35995:4;35869:131;:::i;:::-;35861:139;;35588:419;;;:::o;36013:::-;36179:4;36217:2;36206:9;36202:18;36194:26;;36266:9;36260:4;36256:20;36252:1;36241:9;36237:17;36230:47;36294:131;36420:4;36294:131;:::i;:::-;36286:139;;36013:419;;;:::o;36438:::-;36604:4;36642:2;36631:9;36627:18;36619:26;;36691:9;36685:4;36681:20;36677:1;36666:9;36662:17;36655:47;36719:131;36845:4;36719:131;:::i;:::-;36711:139;;36438:419;;;:::o;36863:::-;37029:4;37067:2;37056:9;37052:18;37044:26;;37116:9;37110:4;37106:20;37102:1;37091:9;37087:17;37080:47;37144:131;37270:4;37144:131;:::i;:::-;37136:139;;36863:419;;;:::o;37288:::-;37454:4;37492:2;37481:9;37477:18;37469:26;;37541:9;37535:4;37531:20;37527:1;37516:9;37512:17;37505:47;37569:131;37695:4;37569:131;:::i;:::-;37561:139;;37288:419;;;:::o;37713:::-;37879:4;37917:2;37906:9;37902:18;37894:26;;37966:9;37960:4;37956:20;37952:1;37941:9;37937:17;37930:47;37994:131;38120:4;37994:131;:::i;:::-;37986:139;;37713:419;;;:::o;38138:222::-;38231:4;38269:2;38258:9;38254:18;38246:26;;38282:71;38350:1;38339:9;38335:17;38326:6;38282:71;:::i;:::-;38138:222;;;;:::o;38366:218::-;38457:4;38495:2;38484:9;38480:18;38472:26;;38508:69;38574:1;38563:9;38559:17;38550:6;38508:69;:::i;:::-;38366:218;;;;:::o;38590:129::-;38624:6;38651:20;;:::i;:::-;38641:30;;38680:33;38708:4;38700:6;38680:33;:::i;:::-;38590:129;;;:::o;38725:75::-;38758:6;38791:2;38785:9;38775:19;;38725:75;:::o;38806:307::-;38867:4;38957:18;38949:6;38946:30;38943:56;;;38979:18;;:::i;:::-;38943:56;39017:29;39039:6;39017:29;:::i;:::-;39009:37;;39101:4;39095;39091:15;39083:23;;38806:307;;;:::o;39119:98::-;39170:6;39204:5;39198:12;39188:22;;39119:98;;;:::o;39223:99::-;39275:6;39309:5;39303:12;39293:22;;39223:99;;;:::o;39328:168::-;39411:11;39445:6;39440:3;39433:19;39485:4;39480:3;39476:14;39461:29;;39328:168;;;;:::o;39502:169::-;39586:11;39620:6;39615:3;39608:19;39660:4;39655:3;39651:14;39636:29;;39502:169;;;;:::o;39677:148::-;39779:11;39816:3;39801:18;;39677:148;;;;:::o;39831:273::-;39871:3;39890:20;39908:1;39890:20;:::i;:::-;39885:25;;39924:20;39942:1;39924:20;:::i;:::-;39919:25;;40046:1;40010:34;40006:42;40003:1;40000:49;39997:75;;;40052:18;;:::i;:::-;39997:75;40096:1;40093;40089:9;40082:16;;39831:273;;;;:::o;40110:305::-;40150:3;40169:20;40187:1;40169:20;:::i;:::-;40164:25;;40203:20;40221:1;40203:20;:::i;:::-;40198:25;;40357:1;40289:66;40285:74;40282:1;40279:81;40276:107;;;40363:18;;:::i;:::-;40276:107;40407:1;40404;40400:9;40393:16;;40110:305;;;;:::o;40421:246::-;40460:3;40479:19;40496:1;40479:19;:::i;:::-;40474:24;;40512:19;40529:1;40512:19;:::i;:::-;40507:24;;40609:1;40597:10;40593:18;40590:1;40587:25;40584:51;;;40615:18;;:::i;:::-;40584:51;40659:1;40656;40652:9;40645:16;;40421:246;;;;:::o;40673:185::-;40713:1;40730:20;40748:1;40730:20;:::i;:::-;40725:25;;40764:20;40782:1;40764:20;:::i;:::-;40759:25;;40803:1;40793:35;;40808:18;;:::i;:::-;40793:35;40850:1;40847;40843:9;40838:14;;40673:185;;;;:::o;40864:348::-;40904:7;40927:20;40945:1;40927:20;:::i;:::-;40922:25;;40961:20;40979:1;40961:20;:::i;:::-;40956:25;;41149:1;41081:66;41077:74;41074:1;41071:81;41066:1;41059:9;41052:17;41048:105;41045:131;;;41156:18;;:::i;:::-;41045:131;41204:1;41201;41197:9;41186:20;;40864:348;;;;:::o;41218:191::-;41258:4;41278:20;41296:1;41278:20;:::i;:::-;41273:25;;41312:20;41330:1;41312:20;:::i;:::-;41307:25;;41351:1;41348;41345:8;41342:34;;;41356:18;;:::i;:::-;41342:34;41401:1;41398;41394:9;41386:17;;41218:191;;;;:::o;41415:::-;41455:4;41475:20;41493:1;41475:20;:::i;:::-;41470:25;;41509:20;41527:1;41509:20;:::i;:::-;41504:25;;41548:1;41545;41542:8;41539:34;;;41553:18;;:::i;:::-;41539:34;41598:1;41595;41591:9;41583:17;;41415:191;;;;:::o;41612:96::-;41649:7;41678:24;41696:5;41678:24;:::i;:::-;41667:35;;41612:96;;;:::o;41714:90::-;41748:7;41791:5;41784:13;41777:21;41766:32;;41714:90;;;:::o;41810:77::-;41847:7;41876:5;41865:16;;41810:77;;;:::o;41893:149::-;41929:7;41969:66;41962:5;41958:78;41947:89;;41893:149;;;:::o;42048:118::-;42085:7;42125:34;42118:5;42114:46;42103:57;;42048:118;;;:::o;42172:126::-;42209:7;42249:42;42242:5;42238:54;42227:65;;42172:126;;;:::o;42304:77::-;42341:7;42370:5;42359:16;;42304:77;;;:::o;42387:93::-;42423:7;42463:10;42456:5;42452:22;42441:33;;42387:93;;;:::o;42486:154::-;42570:6;42565:3;42560;42547:30;42632:1;42623:6;42618:3;42614:16;42607:27;42486:154;;;:::o;42646:307::-;42714:1;42724:113;42738:6;42735:1;42732:13;42724:113;;;42823:1;42818:3;42814:11;42808:18;42804:1;42799:3;42795:11;42788:39;42760:2;42757:1;42753:10;42748:15;;42724:113;;;42855:6;42852:1;42849:13;42846:101;;;42935:1;42926:6;42921:3;42917:16;42910:27;42846:101;42695:258;42646:307;;;:::o;42959:171::-;42998:3;43021:24;43039:5;43021:24;:::i;:::-;43012:33;;43067:4;43060:5;43057:15;43054:41;;;43075:18;;:::i;:::-;43054:41;43122:1;43115:5;43111:13;43104:20;;42959:171;;;:::o;43136:320::-;43180:6;43217:1;43211:4;43207:12;43197:22;;43264:1;43258:4;43254:12;43285:18;43275:81;;43341:4;43333:6;43329:17;43319:27;;43275:81;43403:2;43395:6;43392:14;43372:18;43369:38;43366:84;;;43422:18;;:::i;:::-;43366:84;43187:269;43136:320;;;:::o;43462:281::-;43545:27;43567:4;43545:27;:::i;:::-;43537:6;43533:40;43675:6;43663:10;43660:22;43639:18;43627:10;43624:34;43621:62;43618:88;;;43686:18;;:::i;:::-;43618:88;43726:10;43722:2;43715:22;43505:238;43462:281;;:::o;43749:233::-;43788:3;43811:24;43829:5;43811:24;:::i;:::-;43802:33;;43857:66;43850:5;43847:77;43844:103;;;43927:18;;:::i;:::-;43844:103;43974:1;43967:5;43963:13;43956:20;;43749:233;;;:::o;43988:100::-;44027:7;44056:26;44076:5;44056:26;:::i;:::-;44045:37;;43988:100;;;:::o;44094:79::-;44133:7;44162:5;44151:16;;44094:79;;;:::o;44179:94::-;44218:7;44247:20;44261:5;44247:20;:::i;:::-;44236:31;;44179:94;;;:::o;44279:176::-;44311:1;44328:20;44346:1;44328:20;:::i;:::-;44323:25;;44362:20;44380:1;44362:20;:::i;:::-;44357:25;;44401:1;44391:35;;44406:18;;:::i;:::-;44391:35;44447:1;44444;44440:9;44435:14;;44279:176;;;;:::o;44461:180::-;44509:77;44506:1;44499:88;44606:4;44603:1;44596:15;44630:4;44627:1;44620:15;44647:180;44695:77;44692:1;44685:88;44792:4;44789:1;44782:15;44816:4;44813:1;44806:15;44833:180;44881:77;44878:1;44871:88;44978:4;44975:1;44968:15;45002:4;44999:1;44992:15;45019:180;45067:77;45064:1;45057:88;45164:4;45161:1;45154:15;45188:4;45185:1;45178:15;45205:180;45253:77;45250:1;45243:88;45350:4;45347:1;45340:15;45374:4;45371:1;45364:15;45391:117;45500:1;45497;45490:12;45514:117;45623:1;45620;45613:12;45637:117;45746:1;45743;45736:12;45760:117;45869:1;45866;45859:12;45883:117;45992:1;45989;45982:12;46006:117;46115:1;46112;46105:12;46129:102;46170:6;46221:2;46217:7;46212:2;46205:5;46201:14;46197:28;46187:38;;46129:102;;;:::o;46237:94::-;46270:8;46318:5;46314:2;46310:14;46289:35;;46237:94;;;:::o;46337:221::-;46477:34;46473:1;46465:6;46461:14;46454:58;46546:4;46541:2;46533:6;46529:15;46522:29;46337:221;:::o;46564:176::-;46704:28;46700:1;46692:6;46688:14;46681:52;46564:176;:::o;46746:225::-;46886:34;46882:1;46874:6;46870:14;46863:58;46955:8;46950:2;46942:6;46938:15;46931:33;46746:225;:::o;46977:229::-;47117:34;47113:1;47105:6;47101:14;47094:58;47186:12;47181:2;47173:6;47169:15;47162:37;46977:229;:::o;47212:177::-;47352:29;47348:1;47340:6;47336:14;47329:53;47212:177;:::o;47395:167::-;47535:19;47531:1;47523:6;47519:14;47512:43;47395:167;:::o;47568:222::-;47708:34;47704:1;47696:6;47692:14;47685:58;47777:5;47772:2;47764:6;47760:15;47753:30;47568:222;:::o;47796:224::-;47936:34;47932:1;47924:6;47920:14;47913:58;48005:7;48000:2;47992:6;47988:15;47981:32;47796:224;:::o;48026:225::-;48166:34;48162:1;48154:6;48150:14;48143:58;48235:8;48230:2;48222:6;48218:15;48211:33;48026:225;:::o;48257:157::-;48397:9;48393:1;48385:6;48381:14;48374:33;48257:157;:::o;48420:168::-;48560:20;48556:1;48548:6;48544:14;48537:44;48420:168;:::o;48594:244::-;48734:34;48730:1;48722:6;48718:14;48711:58;48803:27;48798:2;48790:6;48786:15;48779:52;48594:244;:::o;48844:171::-;48984:23;48980:1;48972:6;48968:14;48961:47;48844:171;:::o;49021:230::-;49161:34;49157:1;49149:6;49145:14;49138:58;49230:13;49225:2;49217:6;49213:15;49206:38;49021:230;:::o;49257:225::-;49397:34;49393:1;49385:6;49381:14;49374:58;49466:8;49461:2;49453:6;49449:15;49442:33;49257:225;:::o;49488:155::-;49628:7;49624:1;49616:6;49612:14;49605:31;49488:155;:::o;49649:182::-;49789:34;49785:1;49777:6;49773:14;49766:58;49649:182;:::o;49837:234::-;49977:34;49973:1;49965:6;49961:14;49954:58;50046:17;50041:2;50033:6;50029:15;50022:42;49837:234;:::o;50077:176::-;50217:28;50213:1;50205:6;50201:14;50194:52;50077:176;:::o;50259:237::-;50399:34;50395:1;50387:6;50383:14;50376:58;50468:20;50463:2;50455:6;50451:15;50444:45;50259:237;:::o;50502:::-;50642:34;50638:1;50630:6;50626:14;50619:58;50711:20;50706:2;50698:6;50694:15;50687:45;50502:237;:::o;50745:221::-;50885:34;50881:1;50873:6;50869:14;50862:58;50954:4;50949:2;50941:6;50937:15;50930:29;50745:221;:::o;50972:238::-;51112:34;51108:1;51100:6;51096:14;51089:58;51181:21;51176:2;51168:6;51164:15;51157:46;50972:238;:::o;51216:179::-;51356:31;51352:1;51344:6;51340:14;51333:55;51216:179;:::o;51401:220::-;51541:34;51537:1;51529:6;51525:14;51518:58;51610:3;51605:2;51597:6;51593:15;51586:28;51401:220;:::o;51627:233::-;51767:34;51763:1;51755:6;51751:14;51744:58;51836:16;51831:2;51823:6;51819:15;51812:41;51627:233;:::o;51866:173::-;52006:25;52002:1;51994:6;51990:14;51983:49;51866:173;:::o;52045:234::-;52185:34;52181:1;52173:6;52169:14;52162:58;52254:17;52249:2;52241:6;52237:15;52230:42;52045:234;:::o;52285:232::-;52425:34;52421:1;52413:6;52409:14;52402:58;52494:15;52489:2;52481:6;52477:15;52470:40;52285:232;:::o;52523:159::-;52663:11;52659:1;52651:6;52647:14;52640:35;52523:159;:::o;52688:122::-;52761:24;52779:5;52761:24;:::i;:::-;52754:5;52751:35;52741:63;;52800:1;52797;52790:12;52741:63;52688:122;:::o;52816:116::-;52886:21;52901:5;52886:21;:::i;:::-;52879:5;52876:32;52866:60;;52922:1;52919;52912:12;52866:60;52816:116;:::o;52938:122::-;53011:24;53029:5;53011:24;:::i;:::-;53004:5;53001:35;52991:63;;53050:1;53047;53040:12;52991:63;52938:122;:::o;53066:120::-;53138:23;53155:5;53138:23;:::i;:::-;53131:5;53128:34;53118:62;;53176:1;53173;53166:12;53118:62;53066:120;:::o;53192:122::-;53265:24;53283:5;53265:24;:::i;:::-;53258:5;53255:35;53245:63;;53304:1;53301;53294:12;53245:63;53192:122;:::o;53320:120::-;53392:23;53409:5;53392:23;:::i;:::-;53385:5;53382:34;53372:62;;53430:1;53427;53420:12;53372:62;53320:120;:::o

Swarm Source

ipfs://25a494d1e252311084d2adaddb82d503631951150c705051e29cae584b7493ba
Loading...
Loading
Loading...
Loading
[ 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.