ETH Price: $4,009.22 (+3.10%)

Token

Rolling kid (Offical) (Rolling Kid)
 

Overview

Max Total Supply

2,300 Rolling Kid

Holders

438

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
mikesnftisgay.eth
Balance
5 Rolling Kid
0x36623f72B8cba6B3A774b3448ef1a2BEa182eEf1
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:
Rollingkid

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 12 of 13: Rollingkid.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./ERC721A.sol";
import "./Strings.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";
import "./IERC165.sol";
import "./IERC721.sol";
import "./IERC721Enumerable.sol";
import "./IERC721Metadata.sol";
import "./IERC721Receiver.sol";
contract Rollingkid is Ownable, ERC721A, ReentrancyGuard {
  uint256 public immutable maxPerAddressDuringMint;
  
  uint256 public  allowListStartTime;
  uint256 public  allowListOvertTime;
  uint256 public  publicStartTime;
  
  

  mapping(address => allowlistdata) public allowlist;
  struct allowlistdata{
    uint256 allowNumber;
    uint256 publicNumber ;
  }

  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) ERC721A("Rolling kid (Offical)", "Rolling Kid", maxBatchSize_, collectionSize_) {
    maxPerAddressDuringMint = maxBatchSize_;
  
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }



  function allowlistMint() external payable callerIsUser {
    
    require(allowlist[msg.sender].allowNumber > 0, "not eligible for allowlist mint");
    require(totalSupply() + 1 <= collectionSize, "reached max supply");
    require(allowListStartTime <= block.timestamp && allowListStartTime!=0,"sale has not started yet");
    require(allowListOvertTime > block.timestamp,"allowlist mint is over");
    
    allowlist[msg.sender].allowNumber--;
    _safeMint(msg.sender, 1);
   
  }
  function devMint(uint8 quantity) external onlyOwner {
     require(
       quantity % maxBatchSize == 0,
       "can only mint a multiple of the maxBatchSize"
     );
    uint256 numChunks = quantity / maxBatchSize;
    for (uint8 i = 0; i < numChunks; i++) {
      _safeMint(msg.sender, maxBatchSize);
    }
  }

  function publicSaleMint(uint8 quantity)
    external
    payable
    callerIsUser
  {
    require(
      publicStartTime <= block.timestamp && publicStartTime!=0,
      "public mint is over"
    );
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    if(numberMinted(msg.sender) + quantity > maxPerAddressDuringMint){
        require(allowlist[msg.sender].publicNumber - quantity >= 0,"can not mint this many");
        allowlist[msg.sender].publicNumber=allowlist[msg.sender].publicNumber - quantity;
        _safeMint(msg.sender,quantity);
      
    }else{
      _safeMint(msg.sender,quantity);
    }
    
  }
 
  function setAllowListStartTime(
    uint32 startTime_
  ) external onlyOwner {
    allowListStartTime =  startTime_;
  }
  function setAllowListOvertTime(
    uint32 overTime_
  ) external onlyOwner {
    allowListOvertTime =  overTime_;
  }
  
  function setPublicStartTime(
    uint32 startTime_
  ) external onlyOwner {
    publicStartTime =  startTime_;
  }

 
  function seedAllowlist(address[] memory addresses, uint256[] memory numSlots)
    external
    onlyOwner
  {
    require(
      addresses.length == numSlots.length,
      "addresses does not match numSlots length"
    );
    for (uint256 i = 0; i < addresses.length; i++) {
      allowlist[addresses[i]].allowNumber = numSlots[i];
      allowlist[addresses[i]].publicNumber = 5;
    }
  }


  // // metadata URI
  string private _baseTokenURI;

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 2 of 13: Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 3 of 13: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

pragma solidity ^0.8.0;

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

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;
  //
  string private baseExtension = ".json";
  string private _blindURI;
  bool private _isBlind ;
  // 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_
    // bool isBind_
  ) {
    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_;
    _isBlind = true;
    
  }
  function setBlindURI(string calldata blindURI) public onlyOwner{
    _blindURI = blindURI;

  }
  function openblind() public onlyOwner {
    _isBlind= !_isBlind; 
  }
  /**
   * @dev See {IERC721Enumerable-totalSupply}.
   */
  function totalSupply() public view override returns (uint256) {
    return currentIndex-1;
  }

  /**
   * @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 = 1;
    address currOwnershipAddr = address(0);
    for (uint256 i = 1; 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) public
    view
    returns (TokenOwnership memory)
  {
    require(_exists(tokenId)&&tokenId!=0, "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)
  {
    if(_isBlind){
      return _blindURI;
    }else{
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    require(
      tokenId!=0,
      "ERC721Metadata: URI query for nonexistent token"
    );
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),baseExtension))
        : "";}
  }

  /**
   * @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 = 1;

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

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

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

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

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

pragma solidity ^0.8.0;

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

File 6 of 13: IERC721.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 7 of 13: IERC721Enumerable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 8 of 13: IERC721Metadata.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

File 9 of 13: IERC721Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

File 10 of 13: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

File 11 of 13: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"allowListOvertTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowListStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowlist","outputs":[{"internalType":"uint256","name":"allowNumber","type":"uint256"},{"internalType":"uint256","name":"publicNumber","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowlistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quantity","type":"uint8"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openblind","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quantity","type":"uint8"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicStartTime","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":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"numSlots","type":"uint256[]"}],"name":"seedAllowlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"overTime_","type":"uint32"}],"name":"setAllowListOvertTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"startTime_","type":"uint32"}],"name":"setAllowListStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"blindURI","type":"string"}],"name":"setBlindURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"startTime_","type":"uint32"}],"name":"setPublicStartTime","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":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052600180556040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506004908051906020019062000055929190620002ed565b506001600b553480156200006857600080fd5b50604051620061f1380380620061f183398181016040528101906200008e9190620003b4565b6040518060400160405280601581526020017f526f6c6c696e67206b696420284f66666963616c2900000000000000000000008152506040518060400160405280600b81526020017f526f6c6c696e67204b696400000000000000000000000000000000000000000081525083836200011c620001106200022160201b60201c565b6200022960201b60201c565b6000811162000162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000159906200046b565b60405180910390fd5b60008211620001a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019f9062000449565b60405180910390fd5b8360029080519060200190620001c0929190620002ed565b508260039080519060200190620001d9929190620002ed565b508160a0818152505080608081815250506001600660006101000a81548160ff021916908315150217905550505050506001600c819055508160c081815250505050620005ca565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002fb90620004a8565b90600052602060002090601f0160209004810192826200031f57600085556200036b565b82601f106200033a57805160ff19168380011785556200036b565b828001600101855582156200036b579182015b828111156200036a5782518255916020019190600101906200034d565b5b5090506200037a91906200037e565b5090565b5b80821115620003995760008160009055506001016200037f565b5090565b600081519050620003ae81620005b0565b92915050565b60008060408385031215620003ce57620003cd6200050d565b5b6000620003de858286016200039d565b9250506020620003f1858286016200039d565b9150509250929050565b60006200040a6027836200048d565b9150620004178262000512565b604082019050919050565b600062000431602e836200048d565b91506200043e8262000561565b604082019050919050565b600060208201905081810360008301526200046481620003fb565b9050919050565b60006020820190508181036000830152620004868162000422565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620004c157607f821691505b60208210811415620004d857620004d7620004de565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005bb816200049e565b8114620005c757600080fd5b50565b60805160a05160c051615bb862000639600039600081816119fd0152612209015260008181610d8401528181610dad0152818161134e015281816113bf0152818161140201526136690152600081816115330152818161219101528181612e220152612e560152615bb86000f3fe6080604052600436106102305760003560e01c80636352211e1161012e578063ac446002116100ab578063c87b56dd1161006f578063c87b56dd146107f6578063d7224ba014610833578063dc33e6811461085e578063e985e9c51461089b578063f2fde38b146108d857610230565b8063ac44600214610748578063b05863d51461075f578063b88d4fde14610788578063ba0a0643146107b1578063c76df80e146107da57610230565b806391bbc963116100f257806391bbc9631461064e5780639231ab2a1461067957806395d89b41146106b6578063a22cb465146106e1578063a7cd52cb1461070a57610230565b80636352211e1461056757806370a08231146105a4578063715018a6146105e15780638bc35c2f146105f85780638da5cb5b1461062357610230565b80632f745c59116101bc57806342842e0e1161018057806342842e0e1461049857806350a102f6146104c157806355f804b3146104ea57806357638870146105135780635fd1bbc41461053c57610230565b80632f745c59146103d45780633071188d1461041157806332a394091461043c5780633497d1651461046557806341fbddbd1461048e57610230565b806310952e361161020357806310952e3614610303578063140364a11461031a57806318160ddd1461035757806323b872dd146103825780632d20fb60146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614047565b610901565b6040516102699190614864565b60405180910390f35b34801561027e57600080fd5b50610287610a4b565b604051610294919061487f565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906140ee565b610add565b6040516102d191906147fd565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613f8f565b610b62565b005b34801561030f57600080fd5b50610318610c7b565b005b34801561032657600080fd5b50610341600480360381019061033c91906140ee565b610d23565b60405161034e9190614cc1565b60405180910390f35b34801561036357600080fd5b5061036c610f33565b6040516103799190614cdc565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613e79565b610f48565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906140ee565b610f58565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190613f8f565b611036565b6040516104089190614cdc565b60405180910390f35b34801561041d57600080fd5b5061042661123c565b6040516104339190614cdc565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e919061411b565b611242565b005b34801561047157600080fd5b5061048c60048036038101906104879190614148565b6112ce565b005b61049661143e565b005b3480156104a457600080fd5b506104bf60048036038101906104ba9190613e79565b6116a4565b005b3480156104cd57600080fd5b506104e860048036038101906104e3919061411b565b6116c4565b005b3480156104f657600080fd5b50610511600480360381019061050c91906140a1565b611750565b005b34801561051f57600080fd5b5061053a6004803603810190610535919061411b565b6117e2565b005b34801561054857600080fd5b5061055161186e565b60405161055e9190614cdc565b60405180910390f35b34801561057357600080fd5b5061058e600480360381019061058991906140ee565b611874565b60405161059b91906147fd565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613e0c565b61188a565b6040516105d89190614cdc565b60405180910390f35b3480156105ed57600080fd5b506105f6611973565b005b34801561060457600080fd5b5061060d6119fb565b60405161061a9190614cdc565b60405180910390f35b34801561062f57600080fd5b50610638611a1f565b60405161064591906147fd565b60405180910390f35b34801561065a57600080fd5b50610663611a48565b6040516106709190614cdc565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b91906140ee565b611a4e565b6040516106ad9190614cc1565b60405180910390f35b3480156106c257600080fd5b506106cb611a66565b6040516106d8919061487f565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190613f4f565b611af8565b005b34801561071657600080fd5b50610731600480360381019061072c9190613e0c565b611c79565b60405161073f929190614cf7565b60405180910390f35b34801561075457600080fd5b5061075d611c9d565b005b34801561076b57600080fd5b5061078660048036038101906107819190613fcf565b611e1e565b005b34801561079457600080fd5b506107af60048036038101906107aa9190613ecc565b611fdf565b005b3480156107bd57600080fd5b506107d860048036038101906107d391906140a1565b61203b565b005b6107f460048036038101906107ef9190614148565b6120cd565b005b34801561080257600080fd5b5061081d600480360381019061081891906140ee565b612393565b60405161082a919061487f565b60405180910390f35b34801561083f57600080fd5b50610848612529565b6040516108559190614cdc565b60405180910390f35b34801561086a57600080fd5b5061088560048036038101906108809190613e0c565b61252f565b6040516108929190614cdc565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190613e39565b612541565b6040516108cf9190614864565b60405180910390f35b3480156108e457600080fd5b506108ff60048036038101906108fa9190613e0c565b6125d5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109cc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3457507f37625184000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a445750610a43826126cd565b5b9050919050565b606060028054610a5a90615093565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8690615093565b8015610ad35780601f10610aa857610100808354040283529160200191610ad3565b820191906000526020600020905b815481529060010190602001808311610ab657829003601f168201915b5050505050905090565b6000610ae882612737565b610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90614c61565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6d82611874565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590614b21565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bfd612745565b73ffffffffffffffffffffffffffffffffffffffff161480610c2c5750610c2b81610c26612745565b612541565b5b610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c62906149e1565b60405180910390fd5b610c7683838361274d565b505050565b610c83612745565b73ffffffffffffffffffffffffffffffffffffffff16610ca1611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90614aa1565b60405180910390fd5b600660009054906101000a900460ff1615600660006101000a81548160ff021916908315150217905550565b610d2b613a9a565b610d3482612737565b8015610d41575060008214155b610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d77906148e1565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310610de45760017f000000000000000000000000000000000000000000000000000000000000000084610dd79190614f32565b610de19190614e77565b90505b60008390505b818110610ef2576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ede57809350505050610f2e565b508080610eea90615069565b915050610dea565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614c41565b60405180910390fd5b919050565b600060018054610f439190614f32565b905090565b610f538383836127ff565b505050565b610f60612745565b73ffffffffffffffffffffffffffffffffffffffff16610f7e611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614aa1565b60405180910390fd5b6002600c54141561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190614c21565b60405180910390fd5b6002600c8190555061102b81612db8565b6001600c8190555050565b60006110418361188a565b821115611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a906148a1565b60405180910390fd5b600061108d610f33565b9050600060019050600080600190505b8381116111fa576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461118e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111e657868414156111d7578195505050505050611236565b83806111e2906150f6565b9450505b5080806111f2906150f6565b91505061109d565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90614be1565b60405180910390fd5b92915050565b600d5481565b61124a612745565b73ffffffffffffffffffffffffffffffffffffffff16611268611a1f565b73ffffffffffffffffffffffffffffffffffffffff16146112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590614aa1565b60405180910390fd5b8063ffffffff16600f8190555050565b6112d6612745565b73ffffffffffffffffffffffffffffffffffffffff166112f4611a1f565b73ffffffffffffffffffffffffffffffffffffffff161461134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190614aa1565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008260ff1661137b9190615169565b146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290614901565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008260ff166113ec9190614ecd565b905060005b818160ff16101561143957611426337f0000000000000000000000000000000000000000000000000000000000000000613046565b80806114319061513f565b9150506113f1565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a3906149c1565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152890614a61565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000600161155c610f33565b6115669190614e77565b11156115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614a41565b60405180910390fd5b42600d54111580156115bc57506000600d5414155b6115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290614961565b60405180910390fd5b42600e541161163f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611636906149a1565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600081548092919061169290615069565b91905055506116a2336001613046565b565b6116bf83838360405180602001604052806000815250611fdf565b505050565b6116cc612745565b73ffffffffffffffffffffffffffffffffffffffff166116ea611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790614aa1565b60405180910390fd5b8063ffffffff16600e8190555050565b611758612745565b73ffffffffffffffffffffffffffffffffffffffff16611776611a1f565b73ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c390614aa1565b60405180910390fd5b8181601191906117dd929190613ad4565b505050565b6117ea612745565b73ffffffffffffffffffffffffffffffffffffffff16611808611a1f565b73ffffffffffffffffffffffffffffffffffffffff161461185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590614aa1565b60405180910390fd5b8063ffffffff16600d8190555050565b600f5481565b600061187f82610d23565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290614a21565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61197b612745565b73ffffffffffffffffffffffffffffffffffffffff16611999611a1f565b73ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e690614aa1565b60405180910390fd5b6119f96000613064565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b611a56613a9a565b611a5f82610d23565b9050919050565b606060038054611a7590615093565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa190615093565b8015611aee5780601f10611ac357610100808354040283529160200191611aee565b820191906000526020600020905b815481529060010190602001808311611ad157829003601f168201915b5050505050905090565b611b00612745565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590614ae1565b60405180910390fd5b80600a6000611b7b612745565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c28612745565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c6d9190614864565b60405180910390a35050565b60106020528060005260406000206000915090508060000154908060010154905082565b611ca5612745565b73ffffffffffffffffffffffffffffffffffffffff16611cc3611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090614aa1565b60405180910390fd5b6002600c541415611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690614c21565b60405180910390fd5b6002600c8190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d8d906147e8565b60006040518083038185875af1925050503d8060008114611dca576040519150601f19603f3d011682016040523d82523d6000602084013e611dcf565b606091505b5050905080611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90614b41565b60405180910390fd5b506001600c81905550565b611e26612745565b73ffffffffffffffffffffffffffffffffffffffff16611e44611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190614aa1565b60405180910390fd5b8051825114611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590614ca1565b60405180910390fd5b60005b8251811015611fda57818181518110611efd57611efc615227565b5b602002602001015160106000858481518110611f1c57611f1b615227565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600560106000858481518110611f7e57611f7d615227565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508080611fd2906150f6565b915050611ee1565b505050565b611fea8484846127ff565b611ff684848484613128565b612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90614b61565b60405180910390fd5b50505050565b612043612745565b73ffffffffffffffffffffffffffffffffffffffff16612061611a1f565b73ffffffffffffffffffffffffffffffffffffffff16146120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90614aa1565b60405180910390fd5b8181600591906120c8929190613ad4565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461213b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612132906149c1565b60405180910390fd5b42600f541115801561215057506000600f5414155b61218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614921565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008160ff166121bc610f33565b6121c69190614e77565b1115612207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fe90614a41565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008160ff166122353361252f565b61223f9190614e77565b11156123825760008160ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546122989190614f32565b10156122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614bc1565b60405180910390fd5b8060ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461232a9190614f32565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061237d338260ff16613046565b612390565b61238f338260ff16613046565b5b50565b6060600660009054906101000a900460ff161561243c57600580546123b790615093565b80601f01602080910402602001604051908101604052809291908181526020018280546123e390615093565b80156124305780601f1061240557610100808354040283529160200191612430565b820191906000526020600020905b81548152906001019060200180831161241357829003601f168201915b50505050509050612524565b61244582612737565b612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90614ac1565b60405180910390fd5b60008214156124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bf90614ac1565b60405180910390fd5b60006124d26132bf565b905060008151116124f25760405180602001604052806000815250612520565b806124fc84613351565b6004604051602001612510939291906147b7565b6040516020818303038152906040525b9150505b919050565b600b5481565b600061253a826134b2565b9050919050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6125dd612745565b73ffffffffffffffffffffffffffffffffffffffff166125fb611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614612651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264890614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b8906148c1565b60405180910390fd5b6126ca81613064565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061280a82610d23565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612831612745565b73ffffffffffffffffffffffffffffffffffffffff16148061288d5750612856612745565b73ffffffffffffffffffffffffffffffffffffffff1661287584610add565b73ffffffffffffffffffffffffffffffffffffffff16145b806128a957506128a882600001516128a3612745565b612541565b5b9050806128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e290614b01565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461295d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295490614a81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c490614941565b60405180910390fd5b6129da858585600161359b565b6129ea600084846000015161274d565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612a589190614efe565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612afc9190614e31565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612c029190614e77565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d4857612c7881612737565b15612d47576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612db086868660016135a1565b505050505050565b6000600b54905060008211612e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df990614a01565b60405180910390fd5b600060018383612e129190614e77565b612e1c9190614f32565b905060017f0000000000000000000000000000000000000000000000000000000000000000612e4b9190614f32565b811115612e825760017f0000000000000000000000000000000000000000000000000000000000000000612e7f9190614f32565b90505b612e8b81612737565b612eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec190614c01565b60405180910390fd5b60008290505b81811161302d57600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561301a576000612f4d82610d23565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080613025906150f6565b915050612ed0565b5060018161303b9190614e77565b600b81905550505050565b6130608282604051806020016040528060008152506135a7565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006131498473ffffffffffffffffffffffffffffffffffffffff16613a87565b156132b2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613172612745565b8786866040518563ffffffff1660e01b81526004016131949493929190614818565b602060405180830381600087803b1580156131ae57600080fd5b505af19250505080156131df57506040513d601f19601f820116820180604052508101906131dc9190614074565b60015b613262573d806000811461320f576040519150601f19603f3d011682016040523d82523d6000602084013e613214565b606091505b5060008151141561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190614b61565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132b7565b600190505b949350505050565b6060601180546132ce90615093565b80601f01602080910402602001604051908101604052809291908181526020018280546132fa90615093565b80156133475780601f1061331c57610100808354040283529160200191613347565b820191906000526020600020905b81548152906001019060200180831161332a57829003601f168201915b5050505050905090565b60606000821415613399576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134ad565b600082905060005b600082146133cb5780806133b4906150f6565b915050600a826133c49190614ecd565b91506133a1565b60008167ffffffffffffffff8111156133e7576133e6615256565b5b6040519080825280601f01601f1916602001820160405280156134195781602001600182028036833780820191505090505b5090505b600085146134a6576001826134329190614f32565b9150600a856134419190615169565b603061344d9190614e77565b60f81b81838151811061346357613462615227565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561349f9190614ecd565b945061341d565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351a90614981565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561361e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361590614ba1565b60405180910390fd5b61362781612737565b15613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e90614b81565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008311156136ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c190614c81565b60405180910390fd5b6136d7600085838661359b565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516137d49190614e31565b6fffffffffffffffffffffffffffffffff1681526020018583602001516137fb9190614e31565b6fffffffffffffffffffffffffffffffff16815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613a6a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a0a6000888488613128565b613a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4090614b61565b60405180910390fd5b8180613a54906150f6565b9250508080613a62906150f6565b915050613999565b5080600181905550613a7f60008785886135a1565b505050505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b828054613ae090615093565b90600052602060002090601f016020900481019282613b025760008555613b49565b82601f10613b1b57803560ff1916838001178555613b49565b82800160010185558215613b49579182015b82811115613b48578235825591602001919060010190613b2d565b5b509050613b569190613b5a565b5090565b5b80821115613b73576000816000905550600101613b5b565b5090565b6000613b8a613b8584614d45565b614d20565b90508083825260208201905082856020860282011115613bad57613bac61528f565b5b60005b85811015613bdd5781613bc38882613c99565b845260208401935060208301925050600181019050613bb0565b5050509392505050565b6000613bfa613bf584614d71565b614d20565b90508083825260208201905082856020860282011115613c1d57613c1c61528f565b5b60005b85811015613c4d5781613c338882613dcd565b845260208401935060208301925050600181019050613c20565b5050509392505050565b6000613c6a613c6584614d9d565b614d20565b905082815260208101848484011115613c8657613c85615294565b5b613c91848285615027565b509392505050565b600081359050613ca881615af8565b92915050565b600082601f830112613cc357613cc261528a565b5b8135613cd3848260208601613b77565b91505092915050565b600082601f830112613cf157613cf061528a565b5b8135613d01848260208601613be7565b91505092915050565b600081359050613d1981615b0f565b92915050565b600081359050613d2e81615b26565b92915050565b600081519050613d4381615b26565b92915050565b600082601f830112613d5e57613d5d61528a565b5b8135613d6e848260208601613c57565b91505092915050565b60008083601f840112613d8d57613d8c61528a565b5b8235905067ffffffffffffffff811115613daa57613da9615285565b5b602083019150836001820283011115613dc657613dc561528f565b5b9250929050565b600081359050613ddc81615b3d565b92915050565b600081359050613df181615b54565b92915050565b600081359050613e0681615b6b565b92915050565b600060208284031215613e2257613e2161529e565b5b6000613e3084828501613c99565b91505092915050565b60008060408385031215613e5057613e4f61529e565b5b6000613e5e85828601613c99565b9250506020613e6f85828601613c99565b9150509250929050565b600080600060608486031215613e9257613e9161529e565b5b6000613ea086828701613c99565b9350506020613eb186828701613c99565b9250506040613ec286828701613dcd565b9150509250925092565b60008060008060808587031215613ee657613ee561529e565b5b6000613ef487828801613c99565b9450506020613f0587828801613c99565b9350506040613f1687828801613dcd565b925050606085013567ffffffffffffffff811115613f3757613f36615299565b5b613f4387828801613d49565b91505092959194509250565b60008060408385031215613f6657613f6561529e565b5b6000613f7485828601613c99565b9250506020613f8585828601613d0a565b9150509250929050565b60008060408385031215613fa657613fa561529e565b5b6000613fb485828601613c99565b9250506020613fc585828601613dcd565b9150509250929050565b60008060408385031215613fe657613fe561529e565b5b600083013567ffffffffffffffff81111561400457614003615299565b5b61401085828601613cae565b925050602083013567ffffffffffffffff81111561403157614030615299565b5b61403d85828601613cdc565b9150509250929050565b60006020828403121561405d5761405c61529e565b5b600061406b84828501613d1f565b91505092915050565b60006020828403121561408a5761408961529e565b5b600061409884828501613d34565b91505092915050565b600080602083850312156140b8576140b761529e565b5b600083013567ffffffffffffffff8111156140d6576140d5615299565b5b6140e285828601613d77565b92509250509250929050565b6000602082840312156141045761410361529e565b5b600061411284828501613dcd565b91505092915050565b6000602082840312156141315761413061529e565b5b600061413f84828501613de2565b91505092915050565b60006020828403121561415e5761415d61529e565b5b600061416c84828501613df7565b91505092915050565b61417e81614f66565b82525050565b61418d81614f66565b82525050565b61419c81614f78565b82525050565b60006141ad82614de3565b6141b78185614df9565b93506141c7818560208601615036565b6141d0816152a3565b840191505092915050565b60006141e682614dee565b6141f08185614e15565b9350614200818560208601615036565b614209816152a3565b840191505092915050565b600061421f82614dee565b6142298185614e26565b9350614239818560208601615036565b80840191505092915050565b6000815461425281615093565b61425c8186614e26565b945060018216600081146142775760018114614288576142bb565b60ff198316865281860193506142bb565b61429185614dce565b60005b838110156142b357815481890152600182019150602081019050614294565b838801955050505b50505092915050565b60006142d1602283614e15565b91506142dc826152b4565b604082019050919050565b60006142f4602683614e15565b91506142ff82615303565b604082019050919050565b6000614317602a83614e15565b915061432282615352565b604082019050919050565b600061433a602c83614e15565b9150614345826153a1565b604082019050919050565b600061435d601383614e15565b9150614368826153f0565b602082019050919050565b6000614380602583614e15565b915061438b82615419565b604082019050919050565b60006143a3601883614e15565b91506143ae82615468565b602082019050919050565b60006143c6603183614e15565b91506143d182615491565b604082019050919050565b60006143e9601683614e15565b91506143f4826154e0565b602082019050919050565b600061440c601e83614e15565b915061441782615509565b602082019050919050565b600061442f603983614e15565b915061443a82615532565b604082019050919050565b6000614452601883614e15565b915061445d82615581565b602082019050919050565b6000614475602b83614e15565b9150614480826155aa565b604082019050919050565b6000614498601283614e15565b91506144a3826155f9565b602082019050919050565b60006144bb601f83614e15565b91506144c682615622565b602082019050919050565b60006144de602683614e15565b91506144e98261564b565b604082019050919050565b6000614501602083614e15565b915061450c8261569a565b602082019050919050565b6000614524602f83614e15565b915061452f826156c3565b604082019050919050565b6000614547601a83614e15565b915061455282615712565b602082019050919050565b600061456a603283614e15565b91506145758261573b565b604082019050919050565b600061458d602283614e15565b91506145988261578a565b604082019050919050565b60006145b0600083614e0a565b91506145bb826157d9565b600082019050919050565b60006145d3601083614e15565b91506145de826157dc565b602082019050919050565b60006145f6603383614e15565b915061460182615805565b604082019050919050565b6000614619601d83614e15565b915061462482615854565b602082019050919050565b600061463c602183614e15565b91506146478261587d565b604082019050919050565b600061465f601683614e15565b915061466a826158cc565b602082019050919050565b6000614682602e83614e15565b915061468d826158f5565b604082019050919050565b60006146a5602683614e15565b91506146b082615944565b604082019050919050565b60006146c8601f83614e15565b91506146d382615993565b602082019050919050565b60006146eb602f83614e15565b91506146f6826159bc565b604082019050919050565b600061470e602d83614e15565b915061471982615a0b565b604082019050919050565b6000614731602283614e15565b915061473c82615a5a565b604082019050919050565b6000614754602883614e15565b915061475f82615aa9565b604082019050919050565b6040820160008201516147806000850182614175565b50602082015161479360208501826147a8565b50505050565b6147a281614fec565b82525050565b6147b181615006565b82525050565b60006147c38286614214565b91506147cf8285614214565b91506147db8284614245565b9150819050949350505050565b60006147f3826145a3565b9150819050919050565b60006020820190506148126000830184614184565b92915050565b600060808201905061482d6000830187614184565b61483a6020830186614184565b6148476040830185614799565b818103606083015261485981846141a2565b905095945050505050565b60006020820190506148796000830184614193565b92915050565b6000602082019050818103600083015261489981846141db565b905092915050565b600060208201905081810360008301526148ba816142c4565b9050919050565b600060208201905081810360008301526148da816142e7565b9050919050565b600060208201905081810360008301526148fa8161430a565b9050919050565b6000602082019050818103600083015261491a8161432d565b9050919050565b6000602082019050818103600083015261493a81614350565b9050919050565b6000602082019050818103600083015261495a81614373565b9050919050565b6000602082019050818103600083015261497a81614396565b9050919050565b6000602082019050818103600083015261499a816143b9565b9050919050565b600060208201905081810360008301526149ba816143dc565b9050919050565b600060208201905081810360008301526149da816143ff565b9050919050565b600060208201905081810360008301526149fa81614422565b9050919050565b60006020820190508181036000830152614a1a81614445565b9050919050565b60006020820190508181036000830152614a3a81614468565b9050919050565b60006020820190508181036000830152614a5a8161448b565b9050919050565b60006020820190508181036000830152614a7a816144ae565b9050919050565b60006020820190508181036000830152614a9a816144d1565b9050919050565b60006020820190508181036000830152614aba816144f4565b9050919050565b60006020820190508181036000830152614ada81614517565b9050919050565b60006020820190508181036000830152614afa8161453a565b9050919050565b60006020820190508181036000830152614b1a8161455d565b9050919050565b60006020820190508181036000830152614b3a81614580565b9050919050565b60006020820190508181036000830152614b5a816145c6565b9050919050565b60006020820190508181036000830152614b7a816145e9565b9050919050565b60006020820190508181036000830152614b9a8161460c565b9050919050565b60006020820190508181036000830152614bba8161462f565b9050919050565b60006020820190508181036000830152614bda81614652565b9050919050565b60006020820190508181036000830152614bfa81614675565b9050919050565b60006020820190508181036000830152614c1a81614698565b9050919050565b60006020820190508181036000830152614c3a816146bb565b9050919050565b60006020820190508181036000830152614c5a816146de565b9050919050565b60006020820190508181036000830152614c7a81614701565b9050919050565b60006020820190508181036000830152614c9a81614724565b9050919050565b60006020820190508181036000830152614cba81614747565b9050919050565b6000604082019050614cd6600083018461476a565b92915050565b6000602082019050614cf16000830184614799565b92915050565b6000604082019050614d0c6000830185614799565b614d196020830184614799565b9392505050565b6000614d2a614d3b565b9050614d3682826150c5565b919050565b6000604051905090565b600067ffffffffffffffff821115614d6057614d5f615256565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d8c57614d8b615256565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614db857614db7615256565b5b614dc1826152a3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e3c82614fb0565b9150614e4783614fb0565b9250826fffffffffffffffffffffffffffffffff03821115614e6c57614e6b61519a565b5b828201905092915050565b6000614e8282614fec565b9150614e8d83614fec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ec257614ec161519a565b5b828201905092915050565b6000614ed882614fec565b9150614ee383614fec565b925082614ef357614ef26151c9565b5b828204905092915050565b6000614f0982614fb0565b9150614f1483614fb0565b925082821015614f2757614f2661519a565b5b828203905092915050565b6000614f3d82614fec565b9150614f4883614fec565b925082821015614f5b57614f5a61519a565b5b828203905092915050565b6000614f7182614fcc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615054578082015181840152602081019050615039565b83811115615063576000848401525b50505050565b600061507482614fec565b915060008214156150885761508761519a565b5b600182039050919050565b600060028204905060018216806150ab57607f821691505b602082108114156150bf576150be6151f8565b5b50919050565b6150ce826152a3565b810181811067ffffffffffffffff821117156150ed576150ec615256565b5b80604052505050565b600061510182614fec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151345761513361519a565b5b600182019050919050565b600061514a8261501a565b915060ff82141561515e5761515d61519a565b5b600182019050919050565b600061517482614fec565b915061517f83614fec565b92508261518f5761518e6151c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f7075626c6963206d696e74206973206f76657200000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f73616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f616c6c6f776c697374206d696e74206973206f76657200000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f7420656c696769626c6520666f7220616c6c6f776c697374206d696e7400600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b615b0181614f66565b8114615b0c57600080fd5b50565b615b1881614f78565b8114615b2357600080fd5b50565b615b2f81614f84565b8114615b3a57600080fd5b50565b615b4681614fec565b8114615b5157600080fd5b50565b615b5d81614ff6565b8114615b6857600080fd5b50565b615b748161501a565b8114615b7f57600080fd5b5056fea2646970667358221220dd6de06e18006babe5d03ca72fff6305586c321f5acc427ac930aefea4903ac364736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000008fc

Deployed Bytecode

0x6080604052600436106102305760003560e01c80636352211e1161012e578063ac446002116100ab578063c87b56dd1161006f578063c87b56dd146107f6578063d7224ba014610833578063dc33e6811461085e578063e985e9c51461089b578063f2fde38b146108d857610230565b8063ac44600214610748578063b05863d51461075f578063b88d4fde14610788578063ba0a0643146107b1578063c76df80e146107da57610230565b806391bbc963116100f257806391bbc9631461064e5780639231ab2a1461067957806395d89b41146106b6578063a22cb465146106e1578063a7cd52cb1461070a57610230565b80636352211e1461056757806370a08231146105a4578063715018a6146105e15780638bc35c2f146105f85780638da5cb5b1461062357610230565b80632f745c59116101bc57806342842e0e1161018057806342842e0e1461049857806350a102f6146104c157806355f804b3146104ea57806357638870146105135780635fd1bbc41461053c57610230565b80632f745c59146103d45780633071188d1461041157806332a394091461043c5780633497d1651461046557806341fbddbd1461048e57610230565b806310952e361161020357806310952e3614610303578063140364a11461031a57806318160ddd1461035757806323b872dd146103825780632d20fb60146103ab57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190614047565b610901565b6040516102699190614864565b60405180910390f35b34801561027e57600080fd5b50610287610a4b565b604051610294919061487f565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906140ee565b610add565b6040516102d191906147fd565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc9190613f8f565b610b62565b005b34801561030f57600080fd5b50610318610c7b565b005b34801561032657600080fd5b50610341600480360381019061033c91906140ee565b610d23565b60405161034e9190614cc1565b60405180910390f35b34801561036357600080fd5b5061036c610f33565b6040516103799190614cdc565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613e79565b610f48565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906140ee565b610f58565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190613f8f565b611036565b6040516104089190614cdc565b60405180910390f35b34801561041d57600080fd5b5061042661123c565b6040516104339190614cdc565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e919061411b565b611242565b005b34801561047157600080fd5b5061048c60048036038101906104879190614148565b6112ce565b005b61049661143e565b005b3480156104a457600080fd5b506104bf60048036038101906104ba9190613e79565b6116a4565b005b3480156104cd57600080fd5b506104e860048036038101906104e3919061411b565b6116c4565b005b3480156104f657600080fd5b50610511600480360381019061050c91906140a1565b611750565b005b34801561051f57600080fd5b5061053a6004803603810190610535919061411b565b6117e2565b005b34801561054857600080fd5b5061055161186e565b60405161055e9190614cdc565b60405180910390f35b34801561057357600080fd5b5061058e600480360381019061058991906140ee565b611874565b60405161059b91906147fd565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613e0c565b61188a565b6040516105d89190614cdc565b60405180910390f35b3480156105ed57600080fd5b506105f6611973565b005b34801561060457600080fd5b5061060d6119fb565b60405161061a9190614cdc565b60405180910390f35b34801561062f57600080fd5b50610638611a1f565b60405161064591906147fd565b60405180910390f35b34801561065a57600080fd5b50610663611a48565b6040516106709190614cdc565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b91906140ee565b611a4e565b6040516106ad9190614cc1565b60405180910390f35b3480156106c257600080fd5b506106cb611a66565b6040516106d8919061487f565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190613f4f565b611af8565b005b34801561071657600080fd5b50610731600480360381019061072c9190613e0c565b611c79565b60405161073f929190614cf7565b60405180910390f35b34801561075457600080fd5b5061075d611c9d565b005b34801561076b57600080fd5b5061078660048036038101906107819190613fcf565b611e1e565b005b34801561079457600080fd5b506107af60048036038101906107aa9190613ecc565b611fdf565b005b3480156107bd57600080fd5b506107d860048036038101906107d391906140a1565b61203b565b005b6107f460048036038101906107ef9190614148565b6120cd565b005b34801561080257600080fd5b5061081d600480360381019061081891906140ee565b612393565b60405161082a919061487f565b60405180910390f35b34801561083f57600080fd5b50610848612529565b6040516108559190614cdc565b60405180910390f35b34801561086a57600080fd5b5061088560048036038101906108809190613e0c565b61252f565b6040516108929190614cdc565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190613e39565b612541565b6040516108cf9190614864565b60405180910390f35b3480156108e457600080fd5b506108ff60048036038101906108fa9190613e0c565b6125d5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109cc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3457507f37625184000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a445750610a43826126cd565b5b9050919050565b606060028054610a5a90615093565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8690615093565b8015610ad35780601f10610aa857610100808354040283529160200191610ad3565b820191906000526020600020905b815481529060010190602001808311610ab657829003601f168201915b5050505050905090565b6000610ae882612737565b610b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1e90614c61565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b6d82611874565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590614b21565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bfd612745565b73ffffffffffffffffffffffffffffffffffffffff161480610c2c5750610c2b81610c26612745565b612541565b5b610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c62906149e1565b60405180910390fd5b610c7683838361274d565b505050565b610c83612745565b73ffffffffffffffffffffffffffffffffffffffff16610ca1611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90614aa1565b60405180910390fd5b600660009054906101000a900460ff1615600660006101000a81548160ff021916908315150217905550565b610d2b613a9a565b610d3482612737565b8015610d41575060008214155b610d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d77906148e1565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000058310610de45760017f000000000000000000000000000000000000000000000000000000000000000584610dd79190614f32565b610de19190614e77565b90505b60008390505b818110610ef2576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ede57809350505050610f2e565b508080610eea90615069565b915050610dea565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2590614c41565b60405180910390fd5b919050565b600060018054610f439190614f32565b905090565b610f538383836127ff565b505050565b610f60612745565b73ffffffffffffffffffffffffffffffffffffffff16610f7e611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614aa1565b60405180910390fd5b6002600c54141561101a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101190614c21565b60405180910390fd5b6002600c8190555061102b81612db8565b6001600c8190555050565b60006110418361188a565b821115611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a906148a1565b60405180910390fd5b600061108d610f33565b9050600060019050600080600190505b8381116111fa576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461118e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111e657868414156111d7578195505050505050611236565b83806111e2906150f6565b9450505b5080806111f2906150f6565b91505061109d565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90614be1565b60405180910390fd5b92915050565b600d5481565b61124a612745565b73ffffffffffffffffffffffffffffffffffffffff16611268611a1f565b73ffffffffffffffffffffffffffffffffffffffff16146112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590614aa1565b60405180910390fd5b8063ffffffff16600f8190555050565b6112d6612745565b73ffffffffffffffffffffffffffffffffffffffff166112f4611a1f565b73ffffffffffffffffffffffffffffffffffffffff161461134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190614aa1565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000058260ff1661137b9190615169565b146113bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b290614901565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000058260ff166113ec9190614ecd565b905060005b818160ff16101561143957611426337f0000000000000000000000000000000000000000000000000000000000000005613046565b80806114319061513f565b9150506113f1565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a3906149c1565b60405180910390fd5b6000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152890614a61565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000008fc600161155c610f33565b6115669190614e77565b11156115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e90614a41565b60405180910390fd5b42600d54111580156115bc57506000600d5414155b6115fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f290614961565b60405180910390fd5b42600e541161163f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611636906149a1565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600081548092919061169290615069565b91905055506116a2336001613046565b565b6116bf83838360405180602001604052806000815250611fdf565b505050565b6116cc612745565b73ffffffffffffffffffffffffffffffffffffffff166116ea611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790614aa1565b60405180910390fd5b8063ffffffff16600e8190555050565b611758612745565b73ffffffffffffffffffffffffffffffffffffffff16611776611a1f565b73ffffffffffffffffffffffffffffffffffffffff16146117cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c390614aa1565b60405180910390fd5b8181601191906117dd929190613ad4565b505050565b6117ea612745565b73ffffffffffffffffffffffffffffffffffffffff16611808611a1f565b73ffffffffffffffffffffffffffffffffffffffff161461185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590614aa1565b60405180910390fd5b8063ffffffff16600d8190555050565b600f5481565b600061187f82610d23565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f290614a21565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61197b612745565b73ffffffffffffffffffffffffffffffffffffffff16611999611a1f565b73ffffffffffffffffffffffffffffffffffffffff16146119ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e690614aa1565b60405180910390fd5b6119f96000613064565b565b7f000000000000000000000000000000000000000000000000000000000000000581565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b611a56613a9a565b611a5f82610d23565b9050919050565b606060038054611a7590615093565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa190615093565b8015611aee5780601f10611ac357610100808354040283529160200191611aee565b820191906000526020600020905b815481529060010190602001808311611ad157829003601f168201915b5050505050905090565b611b00612745565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590614ae1565b60405180910390fd5b80600a6000611b7b612745565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c28612745565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c6d9190614864565b60405180910390a35050565b60106020528060005260406000206000915090508060000154908060010154905082565b611ca5612745565b73ffffffffffffffffffffffffffffffffffffffff16611cc3611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614611d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1090614aa1565b60405180910390fd5b6002600c541415611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690614c21565b60405180910390fd5b6002600c8190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d8d906147e8565b60006040518083038185875af1925050503d8060008114611dca576040519150601f19603f3d011682016040523d82523d6000602084013e611dcf565b606091505b5050905080611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90614b41565b60405180910390fd5b506001600c81905550565b611e26612745565b73ffffffffffffffffffffffffffffffffffffffff16611e44611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190614aa1565b60405180910390fd5b8051825114611ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed590614ca1565b60405180910390fd5b60005b8251811015611fda57818181518110611efd57611efc615227565b5b602002602001015160106000858481518110611f1c57611f1b615227565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550600560106000858481518110611f7e57611f7d615227565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508080611fd2906150f6565b915050611ee1565b505050565b611fea8484846127ff565b611ff684848484613128565b612035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202c90614b61565b60405180910390fd5b50505050565b612043612745565b73ffffffffffffffffffffffffffffffffffffffff16612061611a1f565b73ffffffffffffffffffffffffffffffffffffffff16146120b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ae90614aa1565b60405180910390fd5b8181600591906120c8929190613ad4565b505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461213b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612132906149c1565b60405180910390fd5b42600f541115801561215057506000600f5414155b61218f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218690614921565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000008fc8160ff166121bc610f33565b6121c69190614e77565b1115612207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fe90614a41565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000058160ff166122353361252f565b61223f9190614e77565b11156123825760008160ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546122989190614f32565b10156122d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d090614bc1565b60405180910390fd5b8060ff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461232a9190614f32565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061237d338260ff16613046565b612390565b61238f338260ff16613046565b5b50565b6060600660009054906101000a900460ff161561243c57600580546123b790615093565b80601f01602080910402602001604051908101604052809291908181526020018280546123e390615093565b80156124305780601f1061240557610100808354040283529160200191612430565b820191906000526020600020905b81548152906001019060200180831161241357829003601f168201915b50505050509050612524565b61244582612737565b612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90614ac1565b60405180910390fd5b60008214156124c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bf90614ac1565b60405180910390fd5b60006124d26132bf565b905060008151116124f25760405180602001604052806000815250612520565b806124fc84613351565b6004604051602001612510939291906147b7565b6040516020818303038152906040525b9150505b919050565b600b5481565b600061253a826134b2565b9050919050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6125dd612745565b73ffffffffffffffffffffffffffffffffffffffff166125fb611a1f565b73ffffffffffffffffffffffffffffffffffffffff1614612651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264890614aa1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b8906148c1565b60405180910390fd5b6126ca81613064565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061280a82610d23565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612831612745565b73ffffffffffffffffffffffffffffffffffffffff16148061288d5750612856612745565b73ffffffffffffffffffffffffffffffffffffffff1661287584610add565b73ffffffffffffffffffffffffffffffffffffffff16145b806128a957506128a882600001516128a3612745565b612541565b5b9050806128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e290614b01565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461295d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295490614a81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c490614941565b60405180910390fd5b6129da858585600161359b565b6129ea600084846000015161274d565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612a589190614efe565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612afc9190614e31565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612c029190614e77565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d4857612c7881612737565b15612d47576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506007600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612db086868660016135a1565b505050505050565b6000600b54905060008211612e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df990614a01565b60405180910390fd5b600060018383612e129190614e77565b612e1c9190614f32565b905060017f00000000000000000000000000000000000000000000000000000000000008fc612e4b9190614f32565b811115612e825760017f00000000000000000000000000000000000000000000000000000000000008fc612e7f9190614f32565b90505b612e8b81612737565b612eca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec190614c01565b60405180910390fd5b60008290505b81811161302d57600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561301a576000612f4d82610d23565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b8080613025906150f6565b915050612ed0565b5060018161303b9190614e77565b600b81905550505050565b6130608282604051806020016040528060008152506135a7565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006131498473ffffffffffffffffffffffffffffffffffffffff16613a87565b156132b2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613172612745565b8786866040518563ffffffff1660e01b81526004016131949493929190614818565b602060405180830381600087803b1580156131ae57600080fd5b505af19250505080156131df57506040513d601f19601f820116820180604052508101906131dc9190614074565b60015b613262573d806000811461320f576040519150601f19603f3d011682016040523d82523d6000602084013e613214565b606091505b5060008151141561325a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325190614b61565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132b7565b600190505b949350505050565b6060601180546132ce90615093565b80601f01602080910402602001604051908101604052809291908181526020018280546132fa90615093565b80156133475780601f1061331c57610100808354040283529160200191613347565b820191906000526020600020905b81548152906001019060200180831161332a57829003601f168201915b5050505050905090565b60606000821415613399576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134ad565b600082905060005b600082146133cb5780806133b4906150f6565b915050600a826133c49190614ecd565b91506133a1565b60008167ffffffffffffffff8111156133e7576133e6615256565b5b6040519080825280601f01601f1916602001820160405280156134195781602001600182028036833780820191505090505b5090505b600085146134a6576001826134329190614f32565b9150600a856134419190615169565b603061344d9190614e77565b60f81b81838151811061346357613462615227565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561349f9190614ecd565b945061341d565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351a90614981565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561361e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361590614ba1565b60405180910390fd5b61362781612737565b15613667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365e90614b81565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000058311156136ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c190614c81565b60405180910390fd5b6136d7600085838661359b565b6000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516137d49190614e31565b6fffffffffffffffffffffffffffffffff1681526020018583602001516137fb9190614e31565b6fffffffffffffffffffffffffffffffff16815250600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506007600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015613a6a57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613a0a6000888488613128565b613a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4090614b61565b60405180910390fd5b8180613a54906150f6565b9250508080613a62906150f6565b915050613999565b5080600181905550613a7f60008785886135a1565b505050505050565b600080823b905060008111915050919050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b828054613ae090615093565b90600052602060002090601f016020900481019282613b025760008555613b49565b82601f10613b1b57803560ff1916838001178555613b49565b82800160010185558215613b49579182015b82811115613b48578235825591602001919060010190613b2d565b5b509050613b569190613b5a565b5090565b5b80821115613b73576000816000905550600101613b5b565b5090565b6000613b8a613b8584614d45565b614d20565b90508083825260208201905082856020860282011115613bad57613bac61528f565b5b60005b85811015613bdd5781613bc38882613c99565b845260208401935060208301925050600181019050613bb0565b5050509392505050565b6000613bfa613bf584614d71565b614d20565b90508083825260208201905082856020860282011115613c1d57613c1c61528f565b5b60005b85811015613c4d5781613c338882613dcd565b845260208401935060208301925050600181019050613c20565b5050509392505050565b6000613c6a613c6584614d9d565b614d20565b905082815260208101848484011115613c8657613c85615294565b5b613c91848285615027565b509392505050565b600081359050613ca881615af8565b92915050565b600082601f830112613cc357613cc261528a565b5b8135613cd3848260208601613b77565b91505092915050565b600082601f830112613cf157613cf061528a565b5b8135613d01848260208601613be7565b91505092915050565b600081359050613d1981615b0f565b92915050565b600081359050613d2e81615b26565b92915050565b600081519050613d4381615b26565b92915050565b600082601f830112613d5e57613d5d61528a565b5b8135613d6e848260208601613c57565b91505092915050565b60008083601f840112613d8d57613d8c61528a565b5b8235905067ffffffffffffffff811115613daa57613da9615285565b5b602083019150836001820283011115613dc657613dc561528f565b5b9250929050565b600081359050613ddc81615b3d565b92915050565b600081359050613df181615b54565b92915050565b600081359050613e0681615b6b565b92915050565b600060208284031215613e2257613e2161529e565b5b6000613e3084828501613c99565b91505092915050565b60008060408385031215613e5057613e4f61529e565b5b6000613e5e85828601613c99565b9250506020613e6f85828601613c99565b9150509250929050565b600080600060608486031215613e9257613e9161529e565b5b6000613ea086828701613c99565b9350506020613eb186828701613c99565b9250506040613ec286828701613dcd565b9150509250925092565b60008060008060808587031215613ee657613ee561529e565b5b6000613ef487828801613c99565b9450506020613f0587828801613c99565b9350506040613f1687828801613dcd565b925050606085013567ffffffffffffffff811115613f3757613f36615299565b5b613f4387828801613d49565b91505092959194509250565b60008060408385031215613f6657613f6561529e565b5b6000613f7485828601613c99565b9250506020613f8585828601613d0a565b9150509250929050565b60008060408385031215613fa657613fa561529e565b5b6000613fb485828601613c99565b9250506020613fc585828601613dcd565b9150509250929050565b60008060408385031215613fe657613fe561529e565b5b600083013567ffffffffffffffff81111561400457614003615299565b5b61401085828601613cae565b925050602083013567ffffffffffffffff81111561403157614030615299565b5b61403d85828601613cdc565b9150509250929050565b60006020828403121561405d5761405c61529e565b5b600061406b84828501613d1f565b91505092915050565b60006020828403121561408a5761408961529e565b5b600061409884828501613d34565b91505092915050565b600080602083850312156140b8576140b761529e565b5b600083013567ffffffffffffffff8111156140d6576140d5615299565b5b6140e285828601613d77565b92509250509250929050565b6000602082840312156141045761410361529e565b5b600061411284828501613dcd565b91505092915050565b6000602082840312156141315761413061529e565b5b600061413f84828501613de2565b91505092915050565b60006020828403121561415e5761415d61529e565b5b600061416c84828501613df7565b91505092915050565b61417e81614f66565b82525050565b61418d81614f66565b82525050565b61419c81614f78565b82525050565b60006141ad82614de3565b6141b78185614df9565b93506141c7818560208601615036565b6141d0816152a3565b840191505092915050565b60006141e682614dee565b6141f08185614e15565b9350614200818560208601615036565b614209816152a3565b840191505092915050565b600061421f82614dee565b6142298185614e26565b9350614239818560208601615036565b80840191505092915050565b6000815461425281615093565b61425c8186614e26565b945060018216600081146142775760018114614288576142bb565b60ff198316865281860193506142bb565b61429185614dce565b60005b838110156142b357815481890152600182019150602081019050614294565b838801955050505b50505092915050565b60006142d1602283614e15565b91506142dc826152b4565b604082019050919050565b60006142f4602683614e15565b91506142ff82615303565b604082019050919050565b6000614317602a83614e15565b915061432282615352565b604082019050919050565b600061433a602c83614e15565b9150614345826153a1565b604082019050919050565b600061435d601383614e15565b9150614368826153f0565b602082019050919050565b6000614380602583614e15565b915061438b82615419565b604082019050919050565b60006143a3601883614e15565b91506143ae82615468565b602082019050919050565b60006143c6603183614e15565b91506143d182615491565b604082019050919050565b60006143e9601683614e15565b91506143f4826154e0565b602082019050919050565b600061440c601e83614e15565b915061441782615509565b602082019050919050565b600061442f603983614e15565b915061443a82615532565b604082019050919050565b6000614452601883614e15565b915061445d82615581565b602082019050919050565b6000614475602b83614e15565b9150614480826155aa565b604082019050919050565b6000614498601283614e15565b91506144a3826155f9565b602082019050919050565b60006144bb601f83614e15565b91506144c682615622565b602082019050919050565b60006144de602683614e15565b91506144e98261564b565b604082019050919050565b6000614501602083614e15565b915061450c8261569a565b602082019050919050565b6000614524602f83614e15565b915061452f826156c3565b604082019050919050565b6000614547601a83614e15565b915061455282615712565b602082019050919050565b600061456a603283614e15565b91506145758261573b565b604082019050919050565b600061458d602283614e15565b91506145988261578a565b604082019050919050565b60006145b0600083614e0a565b91506145bb826157d9565b600082019050919050565b60006145d3601083614e15565b91506145de826157dc565b602082019050919050565b60006145f6603383614e15565b915061460182615805565b604082019050919050565b6000614619601d83614e15565b915061462482615854565b602082019050919050565b600061463c602183614e15565b91506146478261587d565b604082019050919050565b600061465f601683614e15565b915061466a826158cc565b602082019050919050565b6000614682602e83614e15565b915061468d826158f5565b604082019050919050565b60006146a5602683614e15565b91506146b082615944565b604082019050919050565b60006146c8601f83614e15565b91506146d382615993565b602082019050919050565b60006146eb602f83614e15565b91506146f6826159bc565b604082019050919050565b600061470e602d83614e15565b915061471982615a0b565b604082019050919050565b6000614731602283614e15565b915061473c82615a5a565b604082019050919050565b6000614754602883614e15565b915061475f82615aa9565b604082019050919050565b6040820160008201516147806000850182614175565b50602082015161479360208501826147a8565b50505050565b6147a281614fec565b82525050565b6147b181615006565b82525050565b60006147c38286614214565b91506147cf8285614214565b91506147db8284614245565b9150819050949350505050565b60006147f3826145a3565b9150819050919050565b60006020820190506148126000830184614184565b92915050565b600060808201905061482d6000830187614184565b61483a6020830186614184565b6148476040830185614799565b818103606083015261485981846141a2565b905095945050505050565b60006020820190506148796000830184614193565b92915050565b6000602082019050818103600083015261489981846141db565b905092915050565b600060208201905081810360008301526148ba816142c4565b9050919050565b600060208201905081810360008301526148da816142e7565b9050919050565b600060208201905081810360008301526148fa8161430a565b9050919050565b6000602082019050818103600083015261491a8161432d565b9050919050565b6000602082019050818103600083015261493a81614350565b9050919050565b6000602082019050818103600083015261495a81614373565b9050919050565b6000602082019050818103600083015261497a81614396565b9050919050565b6000602082019050818103600083015261499a816143b9565b9050919050565b600060208201905081810360008301526149ba816143dc565b9050919050565b600060208201905081810360008301526149da816143ff565b9050919050565b600060208201905081810360008301526149fa81614422565b9050919050565b60006020820190508181036000830152614a1a81614445565b9050919050565b60006020820190508181036000830152614a3a81614468565b9050919050565b60006020820190508181036000830152614a5a8161448b565b9050919050565b60006020820190508181036000830152614a7a816144ae565b9050919050565b60006020820190508181036000830152614a9a816144d1565b9050919050565b60006020820190508181036000830152614aba816144f4565b9050919050565b60006020820190508181036000830152614ada81614517565b9050919050565b60006020820190508181036000830152614afa8161453a565b9050919050565b60006020820190508181036000830152614b1a8161455d565b9050919050565b60006020820190508181036000830152614b3a81614580565b9050919050565b60006020820190508181036000830152614b5a816145c6565b9050919050565b60006020820190508181036000830152614b7a816145e9565b9050919050565b60006020820190508181036000830152614b9a8161460c565b9050919050565b60006020820190508181036000830152614bba8161462f565b9050919050565b60006020820190508181036000830152614bda81614652565b9050919050565b60006020820190508181036000830152614bfa81614675565b9050919050565b60006020820190508181036000830152614c1a81614698565b9050919050565b60006020820190508181036000830152614c3a816146bb565b9050919050565b60006020820190508181036000830152614c5a816146de565b9050919050565b60006020820190508181036000830152614c7a81614701565b9050919050565b60006020820190508181036000830152614c9a81614724565b9050919050565b60006020820190508181036000830152614cba81614747565b9050919050565b6000604082019050614cd6600083018461476a565b92915050565b6000602082019050614cf16000830184614799565b92915050565b6000604082019050614d0c6000830185614799565b614d196020830184614799565b9392505050565b6000614d2a614d3b565b9050614d3682826150c5565b919050565b6000604051905090565b600067ffffffffffffffff821115614d6057614d5f615256565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d8c57614d8b615256565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614db857614db7615256565b5b614dc1826152a3565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e3c82614fb0565b9150614e4783614fb0565b9250826fffffffffffffffffffffffffffffffff03821115614e6c57614e6b61519a565b5b828201905092915050565b6000614e8282614fec565b9150614e8d83614fec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ec257614ec161519a565b5b828201905092915050565b6000614ed882614fec565b9150614ee383614fec565b925082614ef357614ef26151c9565b5b828204905092915050565b6000614f0982614fb0565b9150614f1483614fb0565b925082821015614f2757614f2661519a565b5b828203905092915050565b6000614f3d82614fec565b9150614f4883614fec565b925082821015614f5b57614f5a61519a565b5b828203905092915050565b6000614f7182614fcc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615054578082015181840152602081019050615039565b83811115615063576000848401525b50505050565b600061507482614fec565b915060008214156150885761508761519a565b5b600182039050919050565b600060028204905060018216806150ab57607f821691505b602082108114156150bf576150be6151f8565b5b50919050565b6150ce826152a3565b810181811067ffffffffffffffff821117156150ed576150ec615256565b5b80604052505050565b600061510182614fec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151345761513361519a565b5b600182019050919050565b600061514a8261501a565b915060ff82141561515e5761515d61519a565b5b600182019050919050565b600061517482614fec565b915061517f83614fec565b92508261518f5761518e6151c9565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f7075626c6963206d696e74206973206f76657200000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f73616c6520686173206e6f742073746172746564207965740000000000000000600082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f616c6c6f776c697374206d696e74206973206f76657200000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f6e6f7420656c696769626c6520666f7220616c6c6f776c697374206d696e7400600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373657320646f6573206e6f74206d61746368206e756d536c6f7460008201527f73206c656e677468000000000000000000000000000000000000000000000000602082015250565b615b0181614f66565b8114615b0c57600080fd5b50565b615b1881614f78565b8114615b2357600080fd5b50565b615b2f81614f84565b8114615b3a57600080fd5b50565b615b4681614fec565b8114615b5157600080fd5b50565b615b5d81614ff6565b8114615b6857600080fd5b50565b615b748161501a565b8114615b7f57600080fd5b5056fea2646970667358221220dd6de06e18006babe5d03ca72fff6305586c321f5acc427ac930aefea4903ac364736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000008fc

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 5
Arg [1] : collectionSize_ (uint256): 2300

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [1] : 00000000000000000000000000000000000000000000000000000000000008fc


Deployed Bytecode Sourcemap

395:3862:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4341:370:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6072:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7768:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7331:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2749:71;;;;;;;;;;;;;:::i;:::-;;5230:611;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2886:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8618:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3870:118:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3531:746:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;514:34:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2868:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1615:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1117:494;;;:::i;:::-;;8823:157:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2738:122:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3577:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2610:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;592:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5895:118:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4767:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:94:9;;;;;;;;;;;;;:::i;:::-;;457:48:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;999:87:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;553:34:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4107:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6227:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8036:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;638:50:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3683:181;;;;;;;;;;;;;:::i;:::-;;2995:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9043:311:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2647:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1942:661:11;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6392:561:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13458:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3994:107:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8373:186:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1899:192:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4341:370:3;4468:4;4513:25;4498:40;;;:11;:40;;;;:99;;;;4564:33;4549:48;;;:11;:48;;;;4498:99;:160;;;;4623:35;4608:50;;;:11;:50;;;;4498:160;:207;;;;4669:36;4693:11;4669:23;:36::i;:::-;4498:207;4484:221;;4341:370;;;:::o;6072:94::-;6126:13;6155:5;6148:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6072:94;:::o;7768:204::-;7836:7;7860:16;7868:7;7860;:16::i;:::-;7852:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7942:15;:24;7958:7;7942:24;;;;;;;;;;;;;;;;;;;;;7935:31;;7768:204;;;:::o;7331:379::-;7400:13;7416:24;7432:7;7416:15;:24::i;:::-;7400:40;;7461:5;7455:11;;:2;:11;;;;7447:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;7546:5;7530:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;7555:37;7572:5;7579:12;:10;:12::i;:::-;7555:16;:37::i;:::-;7530:62;7514:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;7676:28;7685:2;7689:7;7698:5;7676:8;:28::i;:::-;7393:317;7331:379;;:::o;2749:71::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2805:8:3::1;;;;;;;;;;;2804:9;2794:8;;:19;;;;;;;;;;;;;;;;;;2749:71::o:0;5230:611::-;5299:21;;:::i;:::-;5340:16;5348:7;5340;:16::i;:::-;:28;;;;;5367:1;5358:7;:10;;5340:28;5332:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;5424:26;5472:12;5461:7;:23;5457:93;;5541:1;5526:12;5516:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5495:47;;5457:93;5563:12;5578:7;5563:22;;5558:212;5595:18;5587:4;:26;5558:212;;5632:31;5666:11;:17;5678:4;5666:17;;;;;;;;;;;5632:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5722:1;5696:28;;:9;:14;;;:28;;;5692:71;;5744:9;5737:16;;;;;;;5692:71;5623:147;5615:6;;;;;:::i;:::-;;;;5558:212;;;;5778:57;;;;;;;;;;:::i;:::-;;;;;;;;5230:611;;;;:::o;2886:96::-;2939:7;2975:1;2962:12;;:14;;;;:::i;:::-;2955:21;;2886:96;:::o;8618:142::-;8726:28;8736:4;8742:2;8746:7;8726:9;:28::i;:::-;8618:142;;;:::o;3870:118:11:-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:10::1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;3954:28:11::2;3973:8;3954:18;:28::i;:::-;1669:1:10::1;2621:7;:22;;;;3870:118:11::0;:::o;3531:746:3:-;3640:7;3676:16;3686:5;3676:9;:16::i;:::-;3667:5;:25;;3659:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;3738:22;3763:13;:11;:13::i;:::-;3738:38;;3783:19;3805:1;3783:23;;3813:25;3863:9;3875:1;3863:13;;3858:351;3883:14;3878:1;:19;3858:351;;3913:31;3947:11;:14;3959:1;3947:14;;;;;;;;;;;3913:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4000:1;3974:28;;:9;:14;;;:28;;;3970:89;;4035:9;:14;;;4015:34;;3970:89;4092:5;4071:26;;:17;:26;;;4067:135;;;4129:5;4114:11;:20;4110:59;;;4156:1;4149:8;;;;;;;;;4110:59;4179:13;;;;;:::i;:::-;;;;4067:135;3904:305;3899:3;;;;;:::i;:::-;;;;3858:351;;;;4215:56;;;;;;;;;;:::i;:::-;;;;;;;;3531:746;;;;;:::o;514:34:11:-;;;;:::o;2868:118::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2970:10:11::1;2951:29;;:15;:29;;;;2868:118:::0;:::o;1615:321::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1719:1:11::1;1703:12;1692:8;:23;;;;;;:::i;:::-;:28;1675:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1791:17;1822:12;1811:8;:23;;;;;;:::i;:::-;1791:43;;1846:7;1841:90;1863:9;1859:1;:13;;;1841:90;;;1888:35;1898:10;1910:12;1888:9;:35::i;:::-;1874:3;;;;;:::i;:::-;;;;1841:90;;;;1667:269;1615:321:::0;:::o;1117:494::-;1048:10;1035:23;;:9;:23;;;1027:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1229:1:::1;1193:9;:21;1203:10;1193:21;;;;;;;;;;;;;;;:33;;;:37;1185:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;1302:14;1297:1;1281:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:35;;1273:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1376:15;1354:18;;:37;;:62;;;;;1415:1;1395:18;;:21;;1354:62;1346:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;1480:15;1459:18;;:36;1451:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;1534:9;:21;1544:10;1534:21;;;;;;;;;;;;;;;:33;;;:35;;;;;;;;;:::i;:::-;;;;;;1576:24;1586:10;1598:1;1576:9;:24::i;:::-;1117:494::o:0;8823:157:3:-;8935:39;8952:4;8958:2;8962:7;8935:39;;;;;;;;;;;;:16;:39::i;:::-;8823:157;;;:::o;2738:122:11:-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2845:9:11::1;2823:31;;:18;:31;;;;2738:122:::0;:::o;3577:100::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3664:7:11::1;;3648:13;:23;;;;;;;:::i;:::-;;3577:100:::0;;:::o;2610:124::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2718:10:11::1;2696:32;;:18;:32;;;;2610:124:::0;:::o;592:31::-;;;;:::o;5895:118:3:-;5959:7;5982:20;5994:7;5982:11;:20::i;:::-;:25;;;5975:32;;5895:118;;;:::o;4767:211::-;4831:7;4872:1;4855:19;;:5;:19;;;;4847:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4944:12;:19;4957:5;4944:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4936:36;;4929:43;;4767:211;;;:::o;1650:94:9:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;457:48:11:-;;;:::o;999:87:9:-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;553:34:11:-;;;;:::o;4107:147::-;4188:21;;:::i;:::-;4228:20;4240:7;4228:11;:20::i;:::-;4221:27;;4107:147;;;:::o;6227:98:3:-;6283:13;6312:7;6305:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6227:98;:::o;8036:274::-;8139:12;:10;:12::i;:::-;8127:24;;:8;:24;;;;8119:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;8236:8;8191:18;:32;8210:12;:10;:12::i;:::-;8191:32;;;;;;;;;;;;;;;:42;8224:8;8191:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;8285:8;8256:48;;8271:12;:10;:12::i;:::-;8256:48;;;8295:8;8256:48;;;;;;:::i;:::-;;;;;;;;8036:274;;:::o;638:50:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3683:181::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:10::1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;3748:12:11::2;3766:10;:15;;3789:21;3766:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3747:68;;;3830:7;3822:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;3740:124;1669:1:10::1;2621:7;:22;;;;3683:181:11:o:0;2995:400::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3148:8:11::1;:15;3128:9;:16;:35;3112:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;3233:9;3228:162;3252:9;:16;3248:1;:20;3228:162;;;3322:8;3331:1;3322:11;;;;;;;;:::i;:::-;;;;;;;;3284:9;:23;3294:9;3304:1;3294:12;;;;;;;;:::i;:::-;;;;;;;;3284:23;;;;;;;;;;;;;;;:35;;:49;;;;3381:1;3342:9;:23;3352:9;3362:1;3352:12;;;;;;;;:::i;:::-;;;;;;;;3342:23;;;;;;;;;;;;;;;:36;;:40;;;;3270:3;;;;;:::i;:::-;;;;3228:162;;;;2995:400:::0;;:::o;9043:311:3:-;9180:28;9190:4;9196:2;9200:7;9180:9;:28::i;:::-;9231:48;9254:4;9260:2;9264:7;9273:5;9231:22;:48::i;:::-;9215:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;9043:311;;;;:::o;2647:98::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2729:8:3::1;;2717:9;:20;;;;;;;:::i;:::-;;2647:98:::0;;:::o;1942:661:11:-;1048:10;1035:23;;:9;:23;;;1027:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2072:15:::1;2053;;:34;;:56;;;;;2108:1;2091:15;;:18;;2053:56;2037:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;2189:14;2177:8;2161:24;;:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;2153:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2274:23;2263:8;2236:35;;:24;2249:10;2236:12;:24::i;:::-;:35;;;;:::i;:::-;:61;2233:359;;;2366:1;2354:8;2317:45;;:9;:21;2327:10;2317:21;;;;;;;;;;;;;;;:34;;;:45;;;;:::i;:::-;:50;;2309:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;2476:8;2439:45;;:9;:21;2449:10;2439:21;;;;;;;;;;;;;;;:34;;;:45;;;;:::i;:::-;2404:9;:21;2414:10;2404:21;;;;;;;;;;;;;;;:34;;:80;;;;2495:30;2505:10;2516:8;2495:30;;:9;:30::i;:::-;2233:359;;;2554:30;2564:10;2575:8;2554:30;;:9;:30::i;:::-;2233:359;1942:661:::0;:::o;6392:561:3:-;6490:13;6518:8;;;;;;;;;;;6515:433;;;6543:9;6536:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6515:433;6587:16;6595:7;6587;:16::i;:::-;6571:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;6700:1;6691:7;:10;;6675:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;6773:21;6797:10;:8;:10::i;:::-;6773:34;;6852:1;6834:7;6828:21;:25;:118;;;;;;;;;;;;;;;;;6889:7;6898:18;:7;:16;:18::i;:::-;6917:13;6872:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6828:118;6814:132;;;6392:561;;;;:::o;13458:43::-;;;;:::o;3994:107:11:-;4052:7;4075:20;4089:5;4075:13;:20::i;:::-;4068:27;;3994:107;;;:::o;8373:186:3:-;8495:4;8518:18;:25;8537:5;8518:25;;;;;;;;;;;;;;;:35;8544:8;8518:35;;;;;;;;;;;;;;;;;;;;;;;;;8511:42;;8373:186;;;;:::o;1899:192:9:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;787:157:2:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;9593:105:3:-;9650:4;9680:12;;9670:7;:22;9663:29;;9593:105;;;:::o;601:98:1:-;654:7;681:10;674:17;;601:98;:::o;13280:172:3:-;13404:2;13377:15;:24;13393:7;13377:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;13438:7;13434:2;13418:28;;13427:5;13418:28;;;;;;;;;;;;13280:172;;;:::o;11645:1529::-;11742:35;11780:20;11792:7;11780:11;:20::i;:::-;11742:58;;11809:22;11851:13;:18;;;11835:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;11904:12;:10;:12::i;:::-;11880:36;;:20;11892:7;11880:11;:20::i;:::-;:36;;;11835:81;:142;;;;11927:50;11944:13;:18;;;11964:12;:10;:12::i;:::-;11927:16;:50::i;:::-;11835:142;11809:169;;12003:17;11987:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;12135:4;12113:26;;:13;:18;;;:26;;;12097:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;12224:1;12210:16;;:2;:16;;;;12202:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12277:43;12299:4;12305:2;12309:7;12318:1;12277:21;:43::i;:::-;12377:49;12394:1;12398:7;12407:13;:18;;;12377:8;:49::i;:::-;12465:1;12435:12;:18;12448:4;12435:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12501:1;12473:12;:16;12486:2;12473:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12532:43;;;;;;;;12547:2;12532:43;;;;;;12558:15;12532:43;;;;;12509:11;:20;12521:7;12509:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12803:19;12835:1;12825:7;:11;;;;:::i;:::-;12803:33;;12888:1;12847:43;;:11;:24;12859:11;12847:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;12843:236;;;12905:20;12913:11;12905:7;:20::i;:::-;12901:171;;;12965:97;;;;;;;;12992:13;:18;;;12965:97;;;;;;13023:13;:28;;;12965:97;;;;;12938:11;:24;12950:11;12938:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12901:171;12843:236;13111:7;13107:2;13092:27;;13101:4;13092:27;;;;;;;;;;;;13126:42;13147:4;13153:2;13157:7;13166:1;13126:20;:42::i;:::-;11735:1439;;;11645:1529;;;:::o;13606:846::-;13668:25;13696:24;;13668:52;;13746:1;13735:8;:12;13727:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;13783:16;13832:1;13822:8;13802:17;:28;;;;:::i;:::-;:31;;;;:::i;:::-;13783:50;;13871:1;13855:14;:17;;;;:::i;:::-;13844:8;:28;13840:82;;;13912:1;13895:14;:18;;;;:::i;:::-;13884:29;;13840:82;14037:17;14045:8;14037:7;:17::i;:::-;14029:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14109:9;14121:17;14109:29;;14104:297;14145:8;14140:1;:13;14104:297;;14204:1;14173:33;;:11;:14;14185:1;14173:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;14169:225;;;14219:31;14253:14;14265:1;14253:11;:14::i;:::-;14219:48;;14295:89;;;;;;;;14322:9;:14;;;14295:89;;;;;;14349:9;:24;;;14295:89;;;;;14278:11;:14;14290:1;14278:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14208:186;14169:225;14155:3;;;;;:::i;:::-;;;;14104:297;;;;14445:1;14434:8;:12;;;;:::i;:::-;14407:24;:39;;;;13661:791;;13606:846;:::o;9704:98::-;9769:27;9779:2;9783:8;9769:27;;;;;;;;;;;;:9;:27::i;:::-;9704:98;;:::o;2099:173:9:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2144:128;2099:173;:::o;14995:690:3:-;15132:4;15149:15;:2;:13;;;:15::i;:::-;15145:535;;;15204:2;15188:36;;;15225:12;:10;:12::i;:::-;15239:4;15245:7;15254:5;15188:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15175:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15436:1;15419:6;:13;:18;15415:215;;;15452:61;;;;;;;;;;:::i;:::-;;;;;;;;15415:215;15598:6;15592:13;15583:6;15579:2;15575:15;15568:38;15175:464;15320:45;;;15310:55;;;:6;:55;;;;15303:62;;;;;15145:535;15668:4;15661:11;;14995:690;;;;;;;:::o;3463:108:11:-;3523:13;3552;3545:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3463:108;:::o;288:723:12:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;4984:240:3:-;5045:7;5094:1;5077:19;;:5;:19;;;;5061:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;5185:12;:19;5198:5;5185:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;5177:41;;5170:48;;4984:240;;;:::o;16147:141::-;;;;;:::o;16674:140::-;;;;;:::o;10141:1272::-;10246:20;10269:12;;10246:35;;10310:1;10296:16;;:2;:16;;;;10288:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10487:21;10495:12;10487:7;:21::i;:::-;10486:22;10478:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10569:12;10557:8;:24;;10549:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10629:61;10659:1;10663:2;10667:12;10681:8;10629:21;:61::i;:::-;10699:30;10732:12;:16;10745:2;10732:16;;;;;;;;;;;;;;;10699:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10774:119;;;;;;;;10824:8;10794:11;:19;;;:39;;;;:::i;:::-;10774:119;;;;;;10877:8;10842:11;:24;;;:44;;;;:::i;:::-;10774:119;;;;;10755:12;:16;10768:2;10755:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10928:43;;;;;;;;10943:2;10928:43;;;;;;10954:15;10928:43;;;;;10900:11;:25;10912:12;10900:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10980:20;11003:12;10980:35;;11029:9;11024:281;11048:8;11044:1;:12;11024:281;;;11102:12;11098:2;11077:38;;11094:1;11077:38;;;;;;;;;;;;11142:59;11173:1;11177:2;11181:12;11195:5;11142:22;:59::i;:::-;11124:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;11283:14;;;;;:::i;:::-;;;;11058:3;;;;;:::i;:::-;;;;11024:281;;;;11328:12;11313;:27;;;;11347:60;11376:1;11380:2;11384:12;11398:8;11347:20;:60::i;:::-;10239:1174;;;10141:1272;;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:13:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:139::-;1959:5;1997:6;1984:20;1975:29;;2013:33;2040:5;2013:33;:::i;:::-;1913:139;;;;:::o;2075:370::-;2146:5;2195:3;2188:4;2180:6;2176:17;2172:27;2162:122;;2203:79;;:::i;:::-;2162:122;2320:6;2307:20;2345:94;2435:3;2427:6;2420:4;2412:6;2408:17;2345:94;:::i;:::-;2336:103;;2152:293;2075:370;;;;:::o;2468:::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:122;;2596:79;;:::i;:::-;2555:122;2713:6;2700:20;2738:94;2828:3;2820:6;2813:4;2805:6;2801:17;2738:94;:::i;:::-;2729:103;;2545:293;2468:370;;;;:::o;2844:133::-;2887:5;2925:6;2912:20;2903:29;;2941:30;2965:5;2941:30;:::i;:::-;2844:133;;;;:::o;2983:137::-;3028:5;3066:6;3053:20;3044:29;;3082:32;3108:5;3082:32;:::i;:::-;2983:137;;;;:::o;3126:141::-;3182:5;3213:6;3207:13;3198:22;;3229:32;3255:5;3229:32;:::i;:::-;3126:141;;;;:::o;3286:338::-;3341:5;3390:3;3383:4;3375:6;3371:17;3367:27;3357:122;;3398:79;;:::i;:::-;3357:122;3515:6;3502:20;3540:78;3614:3;3606:6;3599:4;3591:6;3587:17;3540:78;:::i;:::-;3531:87;;3347:277;3286:338;;;;:::o;3644:553::-;3702:8;3712:6;3762:3;3755:4;3747:6;3743:17;3739:27;3729:122;;3770:79;;:::i;:::-;3729:122;3883:6;3870:20;3860:30;;3913:18;3905:6;3902:30;3899:117;;;3935:79;;:::i;:::-;3899:117;4049:4;4041:6;4037:17;4025:29;;4103:3;4095:4;4087:6;4083:17;4073:8;4069:32;4066:41;4063:128;;;4110:79;;:::i;:::-;4063:128;3644:553;;;;;:::o;4203:139::-;4249:5;4287:6;4274:20;4265:29;;4303:33;4330:5;4303:33;:::i;:::-;4203:139;;;;:::o;4348:137::-;4393:5;4431:6;4418:20;4409:29;;4447:32;4473:5;4447:32;:::i;:::-;4348:137;;;;:::o;4491:135::-;4535:5;4573:6;4560:20;4551:29;;4589:31;4614:5;4589:31;:::i;:::-;4491:135;;;;:::o;4632:329::-;4691:6;4740:2;4728:9;4719:7;4715:23;4711:32;4708:119;;;4746:79;;:::i;:::-;4708:119;4866:1;4891:53;4936:7;4927:6;4916:9;4912:22;4891:53;:::i;:::-;4881:63;;4837:117;4632:329;;;;:::o;4967:474::-;5035:6;5043;5092:2;5080:9;5071:7;5067:23;5063:32;5060:119;;;5098:79;;:::i;:::-;5060:119;5218:1;5243:53;5288:7;5279:6;5268:9;5264:22;5243:53;:::i;:::-;5233:63;;5189:117;5345:2;5371:53;5416:7;5407:6;5396:9;5392:22;5371:53;:::i;:::-;5361:63;;5316:118;4967:474;;;;;:::o;5447:619::-;5524:6;5532;5540;5589:2;5577:9;5568:7;5564:23;5560:32;5557:119;;;5595:79;;:::i;:::-;5557:119;5715:1;5740:53;5785:7;5776:6;5765:9;5761:22;5740:53;:::i;:::-;5730:63;;5686:117;5842:2;5868:53;5913:7;5904:6;5893:9;5889:22;5868:53;:::i;:::-;5858:63;;5813:118;5970:2;5996:53;6041:7;6032:6;6021:9;6017:22;5996:53;:::i;:::-;5986:63;;5941:118;5447:619;;;;;:::o;6072:943::-;6167:6;6175;6183;6191;6240:3;6228:9;6219:7;6215:23;6211:33;6208:120;;;6247:79;;:::i;:::-;6208:120;6367:1;6392:53;6437:7;6428:6;6417:9;6413:22;6392:53;:::i;:::-;6382:63;;6338:117;6494:2;6520:53;6565:7;6556:6;6545:9;6541:22;6520:53;:::i;:::-;6510:63;;6465:118;6622:2;6648:53;6693:7;6684:6;6673:9;6669:22;6648:53;:::i;:::-;6638:63;;6593:118;6778:2;6767:9;6763:18;6750:32;6809:18;6801:6;6798:30;6795:117;;;6831:79;;:::i;:::-;6795:117;6936:62;6990:7;6981:6;6970:9;6966:22;6936:62;:::i;:::-;6926:72;;6721:287;6072:943;;;;;;;:::o;7021:468::-;7086:6;7094;7143:2;7131:9;7122:7;7118:23;7114:32;7111:119;;;7149:79;;:::i;:::-;7111:119;7269:1;7294:53;7339:7;7330:6;7319:9;7315:22;7294:53;:::i;:::-;7284:63;;7240:117;7396:2;7422:50;7464:7;7455:6;7444:9;7440:22;7422:50;:::i;:::-;7412:60;;7367:115;7021:468;;;;;:::o;7495:474::-;7563:6;7571;7620:2;7608:9;7599:7;7595:23;7591:32;7588:119;;;7626:79;;:::i;:::-;7588:119;7746:1;7771:53;7816:7;7807:6;7796:9;7792:22;7771:53;:::i;:::-;7761:63;;7717:117;7873:2;7899:53;7944:7;7935:6;7924:9;7920:22;7899:53;:::i;:::-;7889:63;;7844:118;7495:474;;;;;:::o;7975:894::-;8093:6;8101;8150:2;8138:9;8129:7;8125:23;8121:32;8118:119;;;8156:79;;:::i;:::-;8118:119;8304:1;8293:9;8289:17;8276:31;8334:18;8326:6;8323:30;8320:117;;;8356:79;;:::i;:::-;8320:117;8461:78;8531:7;8522:6;8511:9;8507:22;8461:78;:::i;:::-;8451:88;;8247:302;8616:2;8605:9;8601:18;8588:32;8647:18;8639:6;8636:30;8633:117;;;8669:79;;:::i;:::-;8633:117;8774:78;8844:7;8835:6;8824:9;8820:22;8774:78;:::i;:::-;8764:88;;8559:303;7975:894;;;;;:::o;8875:327::-;8933:6;8982:2;8970:9;8961:7;8957:23;8953:32;8950:119;;;8988:79;;:::i;:::-;8950:119;9108:1;9133:52;9177:7;9168:6;9157:9;9153:22;9133:52;:::i;:::-;9123:62;;9079:116;8875:327;;;;:::o;9208:349::-;9277:6;9326:2;9314:9;9305:7;9301:23;9297:32;9294:119;;;9332:79;;:::i;:::-;9294:119;9452:1;9477:63;9532:7;9523:6;9512:9;9508:22;9477:63;:::i;:::-;9467:73;;9423:127;9208:349;;;;:::o;9563:529::-;9634:6;9642;9691:2;9679:9;9670:7;9666:23;9662:32;9659:119;;;9697:79;;:::i;:::-;9659:119;9845:1;9834:9;9830:17;9817:31;9875:18;9867:6;9864:30;9861:117;;;9897:79;;:::i;:::-;9861:117;10010:65;10067:7;10058:6;10047:9;10043:22;10010:65;:::i;:::-;9992:83;;;;9788:297;9563:529;;;;;:::o;10098:329::-;10157:6;10206:2;10194:9;10185:7;10181:23;10177:32;10174:119;;;10212:79;;:::i;:::-;10174:119;10332:1;10357:53;10402:7;10393:6;10382:9;10378:22;10357:53;:::i;:::-;10347:63;;10303:117;10098:329;;;;:::o;10433:327::-;10491:6;10540:2;10528:9;10519:7;10515:23;10511:32;10508:119;;;10546:79;;:::i;:::-;10508:119;10666:1;10691:52;10735:7;10726:6;10715:9;10711:22;10691:52;:::i;:::-;10681:62;;10637:116;10433:327;;;;:::o;10766:325::-;10823:6;10872:2;10860:9;10851:7;10847:23;10843:32;10840:119;;;10878:79;;:::i;:::-;10840:119;10998:1;11023:51;11066:7;11057:6;11046:9;11042:22;11023:51;:::i;:::-;11013:61;;10969:115;10766:325;;;;:::o;11097:108::-;11174:24;11192:5;11174:24;:::i;:::-;11169:3;11162:37;11097:108;;:::o;11211:118::-;11298:24;11316:5;11298:24;:::i;:::-;11293:3;11286:37;11211:118;;:::o;11335:109::-;11416:21;11431:5;11416:21;:::i;:::-;11411:3;11404:34;11335:109;;:::o;11450:360::-;11536:3;11564:38;11596:5;11564:38;:::i;:::-;11618:70;11681:6;11676:3;11618:70;:::i;:::-;11611:77;;11697:52;11742:6;11737:3;11730:4;11723:5;11719:16;11697:52;:::i;:::-;11774:29;11796:6;11774:29;:::i;:::-;11769:3;11765:39;11758:46;;11540:270;11450:360;;;;:::o;11816:364::-;11904:3;11932:39;11965:5;11932:39;:::i;:::-;11987:71;12051:6;12046:3;11987:71;:::i;:::-;11980:78;;12067:52;12112:6;12107:3;12100:4;12093:5;12089:16;12067:52;:::i;:::-;12144:29;12166:6;12144:29;:::i;:::-;12139:3;12135:39;12128:46;;11908:272;11816:364;;;;:::o;12186:377::-;12292:3;12320:39;12353:5;12320:39;:::i;:::-;12375:89;12457:6;12452:3;12375:89;:::i;:::-;12368:96;;12473:52;12518:6;12513:3;12506:4;12499:5;12495:16;12473:52;:::i;:::-;12550:6;12545:3;12541:16;12534:23;;12296:267;12186:377;;;;:::o;12593:845::-;12696:3;12733:5;12727:12;12762:36;12788:9;12762:36;:::i;:::-;12814:89;12896:6;12891:3;12814:89;:::i;:::-;12807:96;;12934:1;12923:9;12919:17;12950:1;12945:137;;;;13096:1;13091:341;;;;12912:520;;12945:137;13029:4;13025:9;13014;13010:25;13005:3;12998:38;13065:6;13060:3;13056:16;13049:23;;12945:137;;13091:341;13158:38;13190:5;13158:38;:::i;:::-;13218:1;13232:154;13246:6;13243:1;13240:13;13232:154;;;13320:7;13314:14;13310:1;13305:3;13301:11;13294:35;13370:1;13361:7;13357:15;13346:26;;13268:4;13265:1;13261:12;13256:17;;13232:154;;;13415:6;13410:3;13406:16;13399:23;;13098:334;;12912:520;;12700:738;;12593:845;;;;:::o;13444:366::-;13586:3;13607:67;13671:2;13666:3;13607:67;:::i;:::-;13600:74;;13683:93;13772:3;13683:93;:::i;:::-;13801:2;13796:3;13792:12;13785:19;;13444:366;;;:::o;13816:::-;13958:3;13979:67;14043:2;14038:3;13979:67;:::i;:::-;13972:74;;14055:93;14144:3;14055:93;:::i;:::-;14173:2;14168:3;14164:12;14157:19;;13816:366;;;:::o;14188:::-;14330:3;14351:67;14415:2;14410:3;14351:67;:::i;:::-;14344:74;;14427:93;14516:3;14427:93;:::i;:::-;14545:2;14540:3;14536:12;14529:19;;14188:366;;;:::o;14560:::-;14702:3;14723:67;14787:2;14782:3;14723:67;:::i;:::-;14716:74;;14799:93;14888:3;14799:93;:::i;:::-;14917:2;14912:3;14908:12;14901:19;;14560:366;;;:::o;14932:::-;15074:3;15095:67;15159:2;15154:3;15095:67;:::i;:::-;15088:74;;15171:93;15260:3;15171:93;:::i;:::-;15289:2;15284:3;15280:12;15273:19;;14932:366;;;:::o;15304:::-;15446:3;15467:67;15531:2;15526:3;15467:67;:::i;:::-;15460:74;;15543:93;15632:3;15543:93;:::i;:::-;15661:2;15656:3;15652:12;15645:19;;15304:366;;;:::o;15676:::-;15818:3;15839:67;15903:2;15898:3;15839:67;:::i;:::-;15832:74;;15915:93;16004:3;15915:93;:::i;:::-;16033:2;16028:3;16024:12;16017:19;;15676:366;;;:::o;16048:::-;16190:3;16211:67;16275:2;16270:3;16211:67;:::i;:::-;16204:74;;16287:93;16376:3;16287:93;:::i;:::-;16405:2;16400:3;16396:12;16389:19;;16048:366;;;:::o;16420:::-;16562:3;16583:67;16647:2;16642:3;16583:67;:::i;:::-;16576:74;;16659:93;16748:3;16659:93;:::i;:::-;16777:2;16772:3;16768:12;16761:19;;16420:366;;;:::o;16792:::-;16934:3;16955:67;17019:2;17014:3;16955:67;:::i;:::-;16948:74;;17031:93;17120:3;17031:93;:::i;:::-;17149:2;17144:3;17140:12;17133:19;;16792:366;;;:::o;17164:::-;17306:3;17327:67;17391:2;17386:3;17327:67;:::i;:::-;17320:74;;17403:93;17492:3;17403:93;:::i;:::-;17521:2;17516:3;17512:12;17505:19;;17164:366;;;:::o;17536:::-;17678:3;17699:67;17763:2;17758:3;17699:67;:::i;:::-;17692:74;;17775:93;17864:3;17775:93;:::i;:::-;17893:2;17888:3;17884:12;17877:19;;17536:366;;;:::o;17908:::-;18050:3;18071:67;18135:2;18130:3;18071:67;:::i;:::-;18064:74;;18147:93;18236:3;18147:93;:::i;:::-;18265:2;18260:3;18256:12;18249:19;;17908:366;;;:::o;18280:::-;18422:3;18443:67;18507:2;18502:3;18443:67;:::i;:::-;18436:74;;18519:93;18608:3;18519:93;:::i;:::-;18637:2;18632:3;18628:12;18621:19;;18280:366;;;:::o;18652:::-;18794:3;18815:67;18879:2;18874:3;18815:67;:::i;:::-;18808:74;;18891:93;18980:3;18891:93;:::i;:::-;19009:2;19004:3;19000:12;18993:19;;18652:366;;;:::o;19024:::-;19166:3;19187:67;19251:2;19246:3;19187:67;:::i;:::-;19180:74;;19263:93;19352:3;19263:93;:::i;:::-;19381:2;19376:3;19372:12;19365:19;;19024:366;;;:::o;19396:::-;19538:3;19559:67;19623:2;19618:3;19559:67;:::i;:::-;19552:74;;19635:93;19724:3;19635:93;:::i;:::-;19753:2;19748:3;19744:12;19737:19;;19396:366;;;:::o;19768:::-;19910:3;19931:67;19995:2;19990:3;19931:67;:::i;:::-;19924:74;;20007:93;20096:3;20007:93;:::i;:::-;20125:2;20120:3;20116:12;20109:19;;19768:366;;;:::o;20140:::-;20282:3;20303:67;20367:2;20362:3;20303:67;:::i;:::-;20296:74;;20379:93;20468:3;20379:93;:::i;:::-;20497:2;20492:3;20488:12;20481:19;;20140:366;;;:::o;20512:::-;20654:3;20675:67;20739:2;20734:3;20675:67;:::i;:::-;20668:74;;20751:93;20840:3;20751:93;:::i;:::-;20869:2;20864:3;20860:12;20853:19;;20512:366;;;:::o;20884:::-;21026:3;21047:67;21111:2;21106:3;21047:67;:::i;:::-;21040:74;;21123:93;21212:3;21123:93;:::i;:::-;21241:2;21236:3;21232:12;21225:19;;20884:366;;;:::o;21256:398::-;21415:3;21436:83;21517:1;21512:3;21436:83;:::i;:::-;21429:90;;21528:93;21617:3;21528:93;:::i;:::-;21646:1;21641:3;21637:11;21630:18;;21256:398;;;:::o;21660:366::-;21802:3;21823:67;21887:2;21882:3;21823:67;:::i;:::-;21816:74;;21899:93;21988:3;21899:93;:::i;:::-;22017:2;22012:3;22008:12;22001:19;;21660:366;;;:::o;22032:::-;22174:3;22195:67;22259:2;22254:3;22195:67;:::i;:::-;22188:74;;22271:93;22360:3;22271:93;:::i;:::-;22389:2;22384:3;22380:12;22373:19;;22032:366;;;:::o;22404:::-;22546:3;22567:67;22631:2;22626:3;22567:67;:::i;:::-;22560:74;;22643:93;22732:3;22643:93;:::i;:::-;22761:2;22756:3;22752:12;22745:19;;22404:366;;;:::o;22776:::-;22918:3;22939:67;23003:2;22998:3;22939:67;:::i;:::-;22932:74;;23015:93;23104:3;23015:93;:::i;:::-;23133:2;23128:3;23124:12;23117:19;;22776:366;;;:::o;23148:::-;23290:3;23311:67;23375:2;23370:3;23311:67;:::i;:::-;23304:74;;23387:93;23476:3;23387:93;:::i;:::-;23505:2;23500:3;23496:12;23489:19;;23148:366;;;:::o;23520:::-;23662:3;23683:67;23747:2;23742:3;23683:67;:::i;:::-;23676:74;;23759:93;23848:3;23759:93;:::i;:::-;23877:2;23872:3;23868:12;23861:19;;23520:366;;;:::o;23892:::-;24034:3;24055:67;24119:2;24114:3;24055:67;:::i;:::-;24048:74;;24131:93;24220:3;24131:93;:::i;:::-;24249:2;24244:3;24240:12;24233:19;;23892:366;;;:::o;24264:::-;24406:3;24427:67;24491:2;24486:3;24427:67;:::i;:::-;24420:74;;24503:93;24592:3;24503:93;:::i;:::-;24621:2;24616:3;24612:12;24605:19;;24264:366;;;:::o;24636:::-;24778:3;24799:67;24863:2;24858:3;24799:67;:::i;:::-;24792:74;;24875:93;24964:3;24875:93;:::i;:::-;24993:2;24988:3;24984:12;24977:19;;24636:366;;;:::o;25008:::-;25150:3;25171:67;25235:2;25230:3;25171:67;:::i;:::-;25164:74;;25247:93;25336:3;25247:93;:::i;:::-;25365:2;25360:3;25356:12;25349:19;;25008:366;;;:::o;25380:::-;25522:3;25543:67;25607:2;25602:3;25543:67;:::i;:::-;25536:74;;25619:93;25708:3;25619:93;:::i;:::-;25737:2;25732:3;25728:12;25721:19;;25380:366;;;:::o;25752:::-;25894:3;25915:67;25979:2;25974:3;25915:67;:::i;:::-;25908:74;;25991:93;26080:3;25991:93;:::i;:::-;26109:2;26104:3;26100:12;26093:19;;25752:366;;;:::o;26194:527::-;26353:4;26348:3;26344:14;26440:4;26433:5;26429:16;26423:23;26459:63;26516:4;26511:3;26507:14;26493:12;26459:63;:::i;:::-;26368:164;26624:4;26617:5;26613:16;26607:23;26643:61;26698:4;26693:3;26689:14;26675:12;26643:61;:::i;:::-;26542:172;26322:399;26194:527;;:::o;26727:118::-;26814:24;26832:5;26814:24;:::i;:::-;26809:3;26802:37;26727:118;;:::o;26851:105::-;26926:23;26943:5;26926:23;:::i;:::-;26921:3;26914:36;26851:105;;:::o;26962:589::-;27187:3;27209:95;27300:3;27291:6;27209:95;:::i;:::-;27202:102;;27321:95;27412:3;27403:6;27321:95;:::i;:::-;27314:102;;27433:92;27521:3;27512:6;27433:92;:::i;:::-;27426:99;;27542:3;27535:10;;26962:589;;;;;;:::o;27557:379::-;27741:3;27763:147;27906:3;27763:147;:::i;:::-;27756:154;;27927:3;27920:10;;27557:379;;;:::o;27942:222::-;28035:4;28073:2;28062:9;28058:18;28050:26;;28086:71;28154:1;28143:9;28139:17;28130:6;28086:71;:::i;:::-;27942:222;;;;:::o;28170:640::-;28365:4;28403:3;28392:9;28388:19;28380:27;;28417:71;28485:1;28474:9;28470:17;28461:6;28417:71;:::i;:::-;28498:72;28566:2;28555:9;28551:18;28542:6;28498:72;:::i;:::-;28580;28648:2;28637:9;28633:18;28624:6;28580:72;:::i;:::-;28699:9;28693:4;28689:20;28684:2;28673:9;28669:18;28662:48;28727:76;28798:4;28789:6;28727:76;:::i;:::-;28719:84;;28170:640;;;;;;;:::o;28816:210::-;28903:4;28941:2;28930:9;28926:18;28918:26;;28954:65;29016:1;29005:9;29001:17;28992:6;28954:65;:::i;:::-;28816:210;;;;:::o;29032:313::-;29145:4;29183:2;29172:9;29168:18;29160:26;;29232:9;29226:4;29222:20;29218:1;29207:9;29203:17;29196:47;29260:78;29333:4;29324:6;29260:78;:::i;:::-;29252:86;;29032:313;;;;:::o;29351:419::-;29517:4;29555:2;29544:9;29540:18;29532:26;;29604:9;29598:4;29594:20;29590:1;29579:9;29575:17;29568:47;29632:131;29758:4;29632:131;:::i;:::-;29624:139;;29351:419;;;:::o;29776:::-;29942:4;29980:2;29969:9;29965:18;29957:26;;30029:9;30023:4;30019:20;30015:1;30004:9;30000:17;29993:47;30057:131;30183:4;30057:131;:::i;:::-;30049:139;;29776:419;;;:::o;30201:::-;30367:4;30405:2;30394:9;30390:18;30382:26;;30454:9;30448:4;30444:20;30440:1;30429:9;30425:17;30418:47;30482:131;30608:4;30482:131;:::i;:::-;30474:139;;30201:419;;;:::o;30626:::-;30792:4;30830:2;30819:9;30815:18;30807:26;;30879:9;30873:4;30869:20;30865:1;30854:9;30850:17;30843:47;30907:131;31033:4;30907:131;:::i;:::-;30899:139;;30626:419;;;:::o;31051:::-;31217:4;31255:2;31244:9;31240:18;31232:26;;31304:9;31298:4;31294:20;31290:1;31279:9;31275:17;31268:47;31332:131;31458:4;31332:131;:::i;:::-;31324:139;;31051:419;;;:::o;31476:::-;31642:4;31680:2;31669:9;31665:18;31657:26;;31729:9;31723:4;31719:20;31715:1;31704:9;31700:17;31693:47;31757:131;31883:4;31757:131;:::i;:::-;31749:139;;31476:419;;;:::o;31901:::-;32067:4;32105:2;32094:9;32090:18;32082:26;;32154:9;32148:4;32144:20;32140:1;32129:9;32125:17;32118:47;32182:131;32308:4;32182:131;:::i;:::-;32174:139;;31901:419;;;:::o;32326:::-;32492:4;32530:2;32519:9;32515:18;32507:26;;32579:9;32573:4;32569:20;32565:1;32554:9;32550:17;32543:47;32607:131;32733:4;32607:131;:::i;:::-;32599:139;;32326:419;;;:::o;32751:::-;32917:4;32955:2;32944:9;32940:18;32932:26;;33004:9;32998:4;32994:20;32990:1;32979:9;32975:17;32968:47;33032:131;33158:4;33032:131;:::i;:::-;33024:139;;32751:419;;;:::o;33176:::-;33342:4;33380:2;33369:9;33365:18;33357:26;;33429:9;33423:4;33419:20;33415:1;33404:9;33400:17;33393:47;33457:131;33583:4;33457:131;:::i;:::-;33449:139;;33176:419;;;:::o;33601:::-;33767:4;33805:2;33794:9;33790:18;33782:26;;33854:9;33848:4;33844:20;33840:1;33829:9;33825:17;33818:47;33882:131;34008:4;33882:131;:::i;:::-;33874:139;;33601:419;;;:::o;34026:::-;34192:4;34230:2;34219:9;34215:18;34207:26;;34279:9;34273:4;34269:20;34265:1;34254:9;34250:17;34243:47;34307:131;34433:4;34307:131;:::i;:::-;34299:139;;34026:419;;;:::o;34451:::-;34617:4;34655:2;34644:9;34640:18;34632:26;;34704:9;34698:4;34694:20;34690:1;34679:9;34675:17;34668:47;34732:131;34858:4;34732:131;:::i;:::-;34724:139;;34451:419;;;:::o;34876:::-;35042:4;35080:2;35069:9;35065:18;35057:26;;35129:9;35123:4;35119:20;35115:1;35104:9;35100:17;35093:47;35157:131;35283:4;35157:131;:::i;:::-;35149:139;;34876:419;;;:::o;35301:::-;35467:4;35505:2;35494:9;35490:18;35482:26;;35554:9;35548:4;35544:20;35540:1;35529:9;35525:17;35518:47;35582:131;35708:4;35582:131;:::i;:::-;35574:139;;35301:419;;;:::o;35726:::-;35892:4;35930:2;35919:9;35915:18;35907:26;;35979:9;35973:4;35969:20;35965:1;35954:9;35950:17;35943:47;36007:131;36133:4;36007:131;:::i;:::-;35999:139;;35726:419;;;:::o;36151:::-;36317:4;36355:2;36344:9;36340:18;36332:26;;36404:9;36398:4;36394:20;36390:1;36379:9;36375:17;36368:47;36432:131;36558:4;36432:131;:::i;:::-;36424:139;;36151:419;;;:::o;36576:::-;36742:4;36780:2;36769:9;36765:18;36757:26;;36829:9;36823:4;36819:20;36815:1;36804:9;36800:17;36793:47;36857:131;36983:4;36857:131;:::i;:::-;36849:139;;36576:419;;;:::o;37001:::-;37167:4;37205:2;37194:9;37190:18;37182:26;;37254:9;37248:4;37244:20;37240:1;37229:9;37225:17;37218:47;37282:131;37408:4;37282:131;:::i;:::-;37274:139;;37001:419;;;:::o;37426:::-;37592:4;37630:2;37619:9;37615:18;37607:26;;37679:9;37673:4;37669:20;37665:1;37654:9;37650:17;37643:47;37707:131;37833:4;37707:131;:::i;:::-;37699:139;;37426:419;;;:::o;37851:::-;38017:4;38055:2;38044:9;38040:18;38032:26;;38104:9;38098:4;38094:20;38090:1;38079:9;38075:17;38068:47;38132:131;38258:4;38132:131;:::i;:::-;38124:139;;37851:419;;;:::o;38276:::-;38442:4;38480:2;38469:9;38465:18;38457:26;;38529:9;38523:4;38519:20;38515:1;38504:9;38500:17;38493:47;38557:131;38683:4;38557:131;:::i;:::-;38549:139;;38276:419;;;:::o;38701:::-;38867:4;38905:2;38894:9;38890:18;38882:26;;38954:9;38948:4;38944:20;38940:1;38929:9;38925:17;38918:47;38982:131;39108:4;38982:131;:::i;:::-;38974:139;;38701:419;;;:::o;39126:::-;39292:4;39330:2;39319:9;39315:18;39307:26;;39379:9;39373:4;39369:20;39365:1;39354:9;39350:17;39343:47;39407:131;39533:4;39407:131;:::i;:::-;39399:139;;39126:419;;;:::o;39551:::-;39717:4;39755:2;39744:9;39740:18;39732:26;;39804:9;39798:4;39794:20;39790:1;39779:9;39775:17;39768:47;39832:131;39958:4;39832:131;:::i;:::-;39824:139;;39551:419;;;:::o;39976:::-;40142:4;40180:2;40169:9;40165:18;40157:26;;40229:9;40223:4;40219:20;40215:1;40204:9;40200:17;40193:47;40257:131;40383:4;40257:131;:::i;:::-;40249:139;;39976:419;;;:::o;40401:::-;40567:4;40605:2;40594:9;40590:18;40582:26;;40654:9;40648:4;40644:20;40640:1;40629:9;40625:17;40618:47;40682:131;40808:4;40682:131;:::i;:::-;40674:139;;40401:419;;;:::o;40826:::-;40992:4;41030:2;41019:9;41015:18;41007:26;;41079:9;41073:4;41069:20;41065:1;41054:9;41050:17;41043:47;41107:131;41233:4;41107:131;:::i;:::-;41099:139;;40826:419;;;:::o;41251:::-;41417:4;41455:2;41444:9;41440:18;41432:26;;41504:9;41498:4;41494:20;41490:1;41479:9;41475:17;41468:47;41532:131;41658:4;41532:131;:::i;:::-;41524:139;;41251:419;;;:::o;41676:::-;41842:4;41880:2;41869:9;41865:18;41857:26;;41929:9;41923:4;41919:20;41915:1;41904:9;41900:17;41893:47;41957:131;42083:4;41957:131;:::i;:::-;41949:139;;41676:419;;;:::o;42101:::-;42267:4;42305:2;42294:9;42290:18;42282:26;;42354:9;42348:4;42344:20;42340:1;42329:9;42325:17;42318:47;42382:131;42508:4;42382:131;:::i;:::-;42374:139;;42101:419;;;:::o;42526:::-;42692:4;42730:2;42719:9;42715:18;42707:26;;42779:9;42773:4;42769:20;42765:1;42754:9;42750:17;42743:47;42807:131;42933:4;42807:131;:::i;:::-;42799:139;;42526:419;;;:::o;42951:::-;43117:4;43155:2;43144:9;43140:18;43132:26;;43204:9;43198:4;43194:20;43190:1;43179:9;43175:17;43168:47;43232:131;43358:4;43232:131;:::i;:::-;43224:139;;42951:419;;;:::o;43376:346::-;43531:4;43569:2;43558:9;43554:18;43546:26;;43582:133;43712:1;43701:9;43697:17;43688:6;43582:133;:::i;:::-;43376:346;;;;:::o;43728:222::-;43821:4;43859:2;43848:9;43844:18;43836:26;;43872:71;43940:1;43929:9;43925:17;43916:6;43872:71;:::i;:::-;43728:222;;;;:::o;43956:332::-;44077:4;44115:2;44104:9;44100:18;44092:26;;44128:71;44196:1;44185:9;44181:17;44172:6;44128:71;:::i;:::-;44209:72;44277:2;44266:9;44262:18;44253:6;44209:72;:::i;:::-;43956:332;;;;;:::o;44294:129::-;44328:6;44355:20;;:::i;:::-;44345:30;;44384:33;44412:4;44404:6;44384:33;:::i;:::-;44294:129;;;:::o;44429:75::-;44462:6;44495:2;44489:9;44479:19;;44429:75;:::o;44510:311::-;44587:4;44677:18;44669:6;44666:30;44663:56;;;44699:18;;:::i;:::-;44663:56;44749:4;44741:6;44737:17;44729:25;;44809:4;44803;44799:15;44791:23;;44510:311;;;:::o;44827:::-;44904:4;44994:18;44986:6;44983:30;44980:56;;;45016:18;;:::i;:::-;44980:56;45066:4;45058:6;45054:17;45046:25;;45126:4;45120;45116:15;45108:23;;44827:311;;;:::o;45144:307::-;45205:4;45295:18;45287:6;45284:30;45281:56;;;45317:18;;:::i;:::-;45281:56;45355:29;45377:6;45355:29;:::i;:::-;45347:37;;45439:4;45433;45429:15;45421:23;;45144:307;;;:::o;45457:141::-;45506:4;45529:3;45521:11;;45552:3;45549:1;45542:14;45586:4;45583:1;45573:18;45565:26;;45457:141;;;:::o;45604:98::-;45655:6;45689:5;45683:12;45673:22;;45604:98;;;:::o;45708:99::-;45760:6;45794:5;45788:12;45778:22;;45708:99;;;:::o;45813:168::-;45896:11;45930:6;45925:3;45918:19;45970:4;45965:3;45961:14;45946:29;;45813:168;;;;:::o;45987:147::-;46088:11;46125:3;46110:18;;45987:147;;;;:::o;46140:169::-;46224:11;46258:6;46253:3;46246:19;46298:4;46293:3;46289:14;46274:29;;46140:169;;;;:::o;46315:148::-;46417:11;46454:3;46439:18;;46315:148;;;;:::o;46469:273::-;46509:3;46528:20;46546:1;46528:20;:::i;:::-;46523:25;;46562:20;46580:1;46562:20;:::i;:::-;46557:25;;46684:1;46648:34;46644:42;46641:1;46638:49;46635:75;;;46690:18;;:::i;:::-;46635:75;46734:1;46731;46727:9;46720:16;;46469:273;;;;:::o;46748:305::-;46788:3;46807:20;46825:1;46807:20;:::i;:::-;46802:25;;46841:20;46859:1;46841:20;:::i;:::-;46836:25;;46995:1;46927:66;46923:74;46920:1;46917:81;46914:107;;;47001:18;;:::i;:::-;46914:107;47045:1;47042;47038:9;47031:16;;46748:305;;;;:::o;47059:185::-;47099:1;47116:20;47134:1;47116:20;:::i;:::-;47111:25;;47150:20;47168:1;47150:20;:::i;:::-;47145:25;;47189:1;47179:35;;47194:18;;:::i;:::-;47179:35;47236:1;47233;47229:9;47224:14;;47059:185;;;;:::o;47250:191::-;47290:4;47310:20;47328:1;47310:20;:::i;:::-;47305:25;;47344:20;47362:1;47344:20;:::i;:::-;47339:25;;47383:1;47380;47377:8;47374:34;;;47388:18;;:::i;:::-;47374:34;47433:1;47430;47426:9;47418:17;;47250:191;;;;:::o;47447:::-;47487:4;47507:20;47525:1;47507:20;:::i;:::-;47502:25;;47541:20;47559:1;47541:20;:::i;:::-;47536:25;;47580:1;47577;47574:8;47571:34;;;47585:18;;:::i;:::-;47571:34;47630:1;47627;47623:9;47615:17;;47447:191;;;;:::o;47644:96::-;47681:7;47710:24;47728:5;47710:24;:::i;:::-;47699:35;;47644:96;;;:::o;47746:90::-;47780:7;47823:5;47816:13;47809:21;47798:32;;47746:90;;;:::o;47842:149::-;47878:7;47918:66;47911:5;47907:78;47896:89;;47842:149;;;:::o;47997:118::-;48034:7;48074:34;48067:5;48063:46;48052:57;;47997:118;;;:::o;48121:126::-;48158:7;48198:42;48191:5;48187:54;48176:65;;48121:126;;;:::o;48253:77::-;48290:7;48319:5;48308:16;;48253:77;;;:::o;48336:93::-;48372:7;48412:10;48405:5;48401:22;48390:33;;48336:93;;;:::o;48435:101::-;48471:7;48511:18;48504:5;48500:30;48489:41;;48435:101;;;:::o;48542:86::-;48577:7;48617:4;48610:5;48606:16;48595:27;;48542:86;;;:::o;48634:154::-;48718:6;48713:3;48708;48695:30;48780:1;48771:6;48766:3;48762:16;48755:27;48634:154;;;:::o;48794:307::-;48862:1;48872:113;48886:6;48883:1;48880:13;48872:113;;;48971:1;48966:3;48962:11;48956:18;48952:1;48947:3;48943:11;48936:39;48908:2;48905:1;48901:10;48896:15;;48872:113;;;49003:6;49000:1;48997:13;48994:101;;;49083:1;49074:6;49069:3;49065:16;49058:27;48994:101;48843:258;48794:307;;;:::o;49107:171::-;49146:3;49169:24;49187:5;49169:24;:::i;:::-;49160:33;;49215:4;49208:5;49205:15;49202:41;;;49223:18;;:::i;:::-;49202:41;49270:1;49263:5;49259:13;49252:20;;49107:171;;;:::o;49284:320::-;49328:6;49365:1;49359:4;49355:12;49345:22;;49412:1;49406:4;49402:12;49433:18;49423:81;;49489:4;49481:6;49477:17;49467:27;;49423:81;49551:2;49543:6;49540:14;49520:18;49517:38;49514:84;;;49570:18;;:::i;:::-;49514:84;49335:269;49284:320;;;:::o;49610:281::-;49693:27;49715:4;49693:27;:::i;:::-;49685:6;49681:40;49823:6;49811:10;49808:22;49787:18;49775:10;49772:34;49769:62;49766:88;;;49834:18;;:::i;:::-;49766:88;49874:10;49870:2;49863:22;49653:238;49610:281;;:::o;49897:233::-;49936:3;49959:24;49977:5;49959:24;:::i;:::-;49950:33;;50005:66;49998:5;49995:77;49992:103;;;50075:18;;:::i;:::-;49992:103;50122:1;50115:5;50111:13;50104:20;;49897:233;;;:::o;50136:167::-;50173:3;50196:22;50212:5;50196:22;:::i;:::-;50187:31;;50240:4;50233:5;50230:15;50227:41;;;50248:18;;:::i;:::-;50227:41;50295:1;50288:5;50284:13;50277:20;;50136:167;;;:::o;50309:176::-;50341:1;50358:20;50376:1;50358:20;:::i;:::-;50353:25;;50392:20;50410:1;50392:20;:::i;:::-;50387:25;;50431:1;50421:35;;50436:18;;:::i;:::-;50421:35;50477:1;50474;50470:9;50465:14;;50309:176;;;;:::o;50491:180::-;50539:77;50536:1;50529:88;50636:4;50633:1;50626:15;50660:4;50657:1;50650:15;50677:180;50725:77;50722:1;50715:88;50822:4;50819:1;50812:15;50846:4;50843:1;50836:15;50863:180;50911:77;50908:1;50901:88;51008:4;51005:1;50998:15;51032:4;51029:1;51022:15;51049:180;51097:77;51094:1;51087:88;51194:4;51191:1;51184:15;51218:4;51215:1;51208:15;51235:180;51283:77;51280:1;51273:88;51380:4;51377:1;51370:15;51404:4;51401:1;51394:15;51421:117;51530:1;51527;51520:12;51544:117;51653:1;51650;51643:12;51667:117;51776:1;51773;51766:12;51790:117;51899:1;51896;51889:12;51913:117;52022:1;52019;52012:12;52036:117;52145:1;52142;52135:12;52159:102;52200:6;52251:2;52247:7;52242:2;52235:5;52231:14;52227:28;52217:38;;52159:102;;;:::o;52267:221::-;52407:34;52403:1;52395:6;52391:14;52384:58;52476:4;52471:2;52463:6;52459:15;52452:29;52267:221;:::o;52494:225::-;52634:34;52630:1;52622:6;52618:14;52611:58;52703:8;52698:2;52690:6;52686:15;52679:33;52494:225;:::o;52725:229::-;52865:34;52861:1;52853:6;52849:14;52842:58;52934:12;52929:2;52921:6;52917:15;52910:37;52725:229;:::o;52960:231::-;53100:34;53096:1;53088:6;53084:14;53077:58;53169:14;53164:2;53156:6;53152:15;53145:39;52960:231;:::o;53197:169::-;53337:21;53333:1;53325:6;53321:14;53314:45;53197:169;:::o;53372:224::-;53512:34;53508:1;53500:6;53496:14;53489:58;53581:7;53576:2;53568:6;53564:15;53557:32;53372:224;:::o;53602:174::-;53742:26;53738:1;53730:6;53726:14;53719:50;53602:174;:::o;53782:236::-;53922:34;53918:1;53910:6;53906:14;53899:58;53991:19;53986:2;53978:6;53974:15;53967:44;53782:236;:::o;54024:172::-;54164:24;54160:1;54152:6;54148:14;54141:48;54024:172;:::o;54202:180::-;54342:32;54338:1;54330:6;54326:14;54319:56;54202:180;:::o;54388:244::-;54528:34;54524:1;54516:6;54512:14;54505:58;54597:27;54592:2;54584:6;54580:15;54573:52;54388:244;:::o;54638:174::-;54778:26;54774:1;54766:6;54762:14;54755:50;54638:174;:::o;54818:230::-;54958:34;54954:1;54946:6;54942:14;54935:58;55027:13;55022:2;55014:6;55010:15;55003:38;54818:230;:::o;55054:168::-;55194:20;55190:1;55182:6;55178:14;55171:44;55054:168;:::o;55228:181::-;55368:33;55364:1;55356:6;55352:14;55345:57;55228:181;:::o;55415:225::-;55555:34;55551:1;55543:6;55539:14;55532:58;55624:8;55619:2;55611:6;55607:15;55600:33;55415:225;:::o;55646:182::-;55786:34;55782:1;55774:6;55770:14;55763:58;55646:182;:::o;55834:234::-;55974:34;55970:1;55962:6;55958:14;55951:58;56043:17;56038:2;56030:6;56026:15;56019:42;55834:234;:::o;56074:176::-;56214:28;56210:1;56202:6;56198:14;56191:52;56074:176;:::o;56256:237::-;56396:34;56392:1;56384:6;56380:14;56373:58;56465:20;56460:2;56452:6;56448:15;56441:45;56256:237;:::o;56499:221::-;56639:34;56635:1;56627:6;56623:14;56616:58;56708:4;56703:2;56695:6;56691:15;56684:29;56499:221;:::o;56726:114::-;;:::o;56846:166::-;56986:18;56982:1;56974:6;56970:14;56963:42;56846:166;:::o;57018:238::-;57158:34;57154:1;57146:6;57142:14;57135:58;57227:21;57222:2;57214:6;57210:15;57203:46;57018:238;:::o;57262:179::-;57402:31;57398:1;57390:6;57386:14;57379:55;57262:179;:::o;57447:220::-;57587:34;57583:1;57575:6;57571:14;57564:58;57656:3;57651:2;57643:6;57639:15;57632:28;57447:220;:::o;57673:172::-;57813:24;57809:1;57801:6;57797:14;57790:48;57673:172;:::o;57851:233::-;57991:34;57987:1;57979:6;57975:14;57968:58;58060:16;58055:2;58047:6;58043:15;58036:41;57851:233;:::o;58090:225::-;58230:34;58226:1;58218:6;58214:14;58207:58;58299:8;58294:2;58286:6;58282:15;58275:33;58090:225;:::o;58321:181::-;58461:33;58457:1;58449:6;58445:14;58438:57;58321:181;:::o;58508:234::-;58648:34;58644:1;58636:6;58632:14;58625:58;58717:17;58712:2;58704:6;58700:15;58693:42;58508:234;:::o;58748:232::-;58888:34;58884:1;58876:6;58872:14;58865:58;58957:15;58952:2;58944:6;58940:15;58933:40;58748:232;:::o;58986:221::-;59126:34;59122:1;59114:6;59110:14;59103:58;59195:4;59190:2;59182:6;59178:15;59171:29;58986:221;:::o;59213:227::-;59353:34;59349:1;59341:6;59337:14;59330:58;59422:10;59417:2;59409:6;59405:15;59398:35;59213:227;:::o;59446:122::-;59519:24;59537:5;59519:24;:::i;:::-;59512:5;59509:35;59499:63;;59558:1;59555;59548:12;59499:63;59446:122;:::o;59574:116::-;59644:21;59659:5;59644:21;:::i;:::-;59637:5;59634:32;59624:60;;59680:1;59677;59670:12;59624:60;59574:116;:::o;59696:120::-;59768:23;59785:5;59768:23;:::i;:::-;59761:5;59758:34;59748:62;;59806:1;59803;59796:12;59748:62;59696:120;:::o;59822:122::-;59895:24;59913:5;59895:24;:::i;:::-;59888:5;59885:35;59875:63;;59934:1;59931;59924:12;59875:63;59822:122;:::o;59950:120::-;60022:23;60039:5;60022:23;:::i;:::-;60015:5;60012:34;60002:62;;60060:1;60057;60050:12;60002:62;59950:120;:::o;60076:118::-;60147:22;60163:5;60147:22;:::i;:::-;60140:5;60137:33;60127:61;;60184:1;60181;60174:12;60127:61;60076:118;:::o

Swarm Source

ipfs://dd6de06e18006babe5d03ca72fff6305586c321f5acc427ac930aefea4903ac3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.