ETH Price: $3,510.24 (+4.64%)

Token

CoolPigzT (CPT)
 

Overview

Max Total Supply

774 CPT

Holders

247

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
grumpydad74.eth
Balance
2 CPT
0x0ea9fbc98126ce00e69251542b6fc4691b3902bb
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:
CoolPigzP

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 3 of 13: CoolPigz.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


import "./Ownable.sol";
import "./Strings.sol";
import "./MerkleProof.sol";
import "./ERC721AP.sol";

contract CoolPigzP is ERC721AP, Ownable {
    using Strings for uint256;

    string baseURI;
    uint256 public constant _maxSupply = 5555;
    uint256 public constant _maxMint = 5355;
    uint256 public constant _maxMintAmountPerAddressPublic = 4;
    uint256 public constant _maxMintAmountPerAddressWL = 2;
    uint256 public constant _maxMintAmountPerAddressOG = 2;
    uint256 public constant _OGCost = 0.05 ether;
    uint256 public constant _WLCost = 0.06 ether;
    uint256 public constant _PublicCost = 0.08 ether;
    bool public _mintOpened;
    uint256 public publicSaleAfter;
    bytes32 public immutable _OGroot;
    bytes32 public immutable _WLroot;

    constructor(
        string memory initialBaseURI,
        bytes32 OGroot,
        bytes32 WLroot
    ) ERC721AP("CoolPigzT", "CPT",_maxSupply) {
        baseURI = initialBaseURI;
        _OGroot = OGroot;
        _WLroot = WLroot;
        
    }

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

    function publicMint(uint256 mintAmount) public payable{
        require(_mintOpened, "Minting now allowed yet");
        require(mintAmount > 0,"The quantity cannot be a negative number");
        uint256 price = 0;

        if(block.timestamp >= publicSaleAfter){
            require(_numberMinted(msg.sender) + mintAmount <= _maxMintAmountPerAddressPublic,"Maximum mint amount exceeded");
                
            price = _PublicCost * mintAmount;
        }
        else revert("Minting now allowed yet");
        require(msg.value >= price,"Not Enough ETH");
        
        require((_maxMint - totalSupply()) - mintAmount >= 0,"Not Enough Mintable Token");

        _safeMint(msg.sender,mintAmount);

    }

    function presaleMint(uint256 mintAmount,bytes32[] memory proof) public payable{
        require(_mintOpened, "Minting now allowed yet");
        require(mintAmount > 0,"The quantity cannot be a negative number");
        uint256 mintedToken = _numberMinted(msg.sender);
        bool presale = true;
        uint256 price = 0;

        if(block.timestamp > publicSaleAfter) presale = false;

        if(presale && _verify(msg.sender,proof,_OGroot)){
            price = getPresaleCost(mintAmount,_OGCost,msg.sender);
        }
        else if(presale && _verify(msg.sender,proof,_WLroot)){
            price = getPresaleCost(mintAmount,_WLCost,msg.sender);
        }
        else revert("Pre-Sale is over");

        require(mintedToken + mintAmount <= (_maxMintAmountPerAddressPublic),"Maximum mint amount exceeded");
        

        require(msg.value >= price,"Not Enough ETH");
        
        require((_maxMint - totalSupply()) - mintAmount >= 0,"Not Enough Mintable Token");

        _safeMint(msg.sender,mintAmount);


    }

    function getPresaleCost(uint256 mintAmount,uint256 roleCost,address sender) public view returns(uint256 price) {
        uint256 mintedToken = _numberMinted(sender);

        require(mintAmount>0,"Mint amount cannot be zero");
        require((_maxMintAmountPerAddressPublic - mintedToken) >= mintAmount ,"Maximum mint amount exceeded");

        if ((_maxMintAmountPerAddressWL - mintedToken) < 1 ) 
        { 
            price = mintAmount*_PublicCost;

        } else {

            uint256 remainingPresaleCount = _maxMintAmountPerAddressWL - mintedToken;
            
            if (mintAmount>remainingPresaleCount) {
                price = remainingPresaleCount*roleCost + (mintAmount-remainingPresaleCount)*_PublicCost;
            } else {
                price = mintAmount*roleCost;
            }
        }

            
    }




    function _verify(address _address,bytes32[] memory proof,bytes32 listroot) internal pure returns(bool){
        
        return MerkleProof.verify(proof,listroot,keccak256(abi.encodePacked(_address)));
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        

        string memory currentBaseURI = _baseURI();
        return
            
                string(
                    abi.encodePacked(
                        currentBaseURI,
                        tokenId.toString(),
                        ".json"
                    )
                );
                
        
    }
    
    

    //only owner

    function setBaseURI(string memory newBaseURI) external onlyOwner{
        baseURI = newBaseURI;
    }

    function startMint() external onlyOwner{
        _mintOpened = true;
        publicSaleAfter = block.timestamp + 4 hours;
    }

    function ownerMint(uint256 quantity,address _address) external onlyOwner{
        uint256 mod = quantity%5;
        for(uint256 i = 0;i<quantity/5;i++){
            _safeMint(_address,5);
        }
        if(mod != 0) _safeMint(_address,mod);
    }



    function withdraw() public payable onlyOwner {
        uint256 balance = address(this).balance;

        withdrawInternal(0x2C48744e9023f731f5c58Ce7b78dcc99Dc6A7A3b,(balance*2725)/10000);
        withdrawInternal(0xD34Fe4C535c24B91686D5481ec24971225fD9B90,(balance*1250)/10000);
        withdrawInternal(0x3460784Eb3C12F6e0811bbfAeCaF237c8B58FD73,(balance*1000)/10000);
        withdrawInternal(0x8353e20B0E920966a2C251Fac4918FD72356dA4E,(balance*250)/10000);
        withdrawInternal(0x62289aD97CEa85360a2fcD9cdADfECe9c082C423,(balance*150)/10000);
        withdrawInternal(0x29b7aAA30A47F779bFF900551A1AeA76b983ad75,(balance*150)/10000);
        withdrawInternal(0xbA4AA796ee6e3F1c38d1D00144689F71CD520976,(balance*500)/10000);
        withdrawInternal(0xc18658AEd32E150b18C4faAe73FcE4F23a0d75B3,(balance*50)/10000);
        withdrawInternal(0xC5ef721e41558203e46658D36204C7bfD5276b8C,(balance*750)/10000);
        withdrawInternal(0x7bDA20a949581C4b59B351D63e2Ff31c271E5C5c,(balance*1000)/10000);
        withdrawInternal(0xb83ce0cf4F53F82d22C98C6378E7fe337d01B1b9,(balance*150)/10000);
        withdrawInternal(0xf822e6f78CF07cac93dA749E9131dE76936FC72e,(balance*2000)/10000);
        withdrawInternal(0xfB1b6058E73E8eE71a5e2cf5d7a370b16e11D13F,(balance*25)/10000);



        
    }

    function withdrawInternal(address to,uint256 amount) internal onlyOwner{
        (bool success, ) = to.call{
            value: amount
        }("");
        require(success);
    }
}

File 1 of 13: Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 5 of 13: ERC721AP.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";

/**
 * @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 ERC721AP is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 0;

  uint256 internal immutable collectionSize;
  uint256 internal constant maxBatchSize = 5;

  // Token name
  string private _name;

  // Token symbol
  string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  /**
   * @dev See {IERC721-approve}.
   */
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721AP.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");
    require(totalSupply() + quantity <= collectionSize,"ERC721A: collection size exceeded");
    // 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;

    
      if(quantity == 1){
        _oneMint(to,updatedIndex++,_data);
        
        
      }
      else if(quantity == 2){
        _oneMint(to,updatedIndex++,_data);
        
        _oneMint(to,updatedIndex++,_data);
        
      }
      else if(quantity == 3){
        _oneMint(to,updatedIndex++,_data);

        _oneMint(to,updatedIndex++,_data);
        
        _oneMint(to,updatedIndex++,_data);
        
      }
      else if(quantity == 4){
        _oneMint(to,updatedIndex++,_data);
        
        _oneMint(to,updatedIndex++,_data);
        
        _oneMint(to,updatedIndex++,_data);
        
        _oneMint(to,updatedIndex++,_data);
        
      }
      else{
        _oneMint(to,updatedIndex++,_data);
        
        _oneMint(to,updatedIndex++,_data);
        
        _oneMint(to,updatedIndex++,_data);
        
        _oneMint(to,updatedIndex++,_data);
        
        _oneMint(to,updatedIndex++,_data);
        
      }
    


    assembly{sstore(currentIndex.slot,updatedIndex)}
    
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  }
  
  function _oneMint(address to,uint256 tokenId,bytes memory _data) internal {
    emit Transfer(address(0), to, tokenId);
      require(
        _checkOnERC721Received(address(0), to, tokenId, _data),
        "ERC721A: transfer to non ERC721Receiver implementer"
      );
      
  }
  

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

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

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

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

    _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

  uint256 public nextOwnerToExplicitlySet = 0;

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

import "IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

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

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

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

pragma solidity ^0.8.0;

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

File 11 of 13: MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

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

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

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

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() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"initialBaseURI","type":"string"},{"internalType":"bytes32","name":"OGroot","type":"bytes32"},{"internalType":"bytes32","name":"WLroot","type":"bytes32"}],"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":"_OGCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_OGroot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_PublicCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_WLCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_WLroot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMintAmountPerAddressOG","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMintAmountPerAddressPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxMintAmountPerAddressWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintOpened","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"},{"internalType":"uint256","name":"roleCost","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"getPresaleCost","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","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":"mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleAfter","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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60e06040526000805560006007553480156200001a57600080fd5b5060405162005cf238038062005cf2833981810160405281019062000040919062000397565b6040518060400160405280600981526020017f436f6f6c5069677a5400000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f43505400000000000000000000000000000000000000000000000000000000008152506115b360008111620000f5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000ec9062000439565b60405180910390fd5b82600190805190602001906200010d92919062000252565b5081600290805190602001906200012692919062000252565b50806080818152505050505062000152620001466200018460201b60201c565b6200018c60201b60201c565b82600990805190602001906200016a92919062000252565b508160a081815250508060c0818152505050505062000663565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000260906200050b565b90600052602060002090601f016020900481019282620002845760008555620002d0565b82601f106200029f57805160ff1916838001178555620002d0565b82800160010185558215620002d0579182015b82811115620002cf578251825591602001919060010190620002b2565b5b509050620002df9190620002e3565b5090565b5b80821115620002fe576000816000905550600101620002e4565b5090565b600062000319620003138462000484565b6200045b565b905082815260208101848484011115620003385762000337620005da565b5b62000345848285620004d5565b509392505050565b6000815190506200035e8162000649565b92915050565b600082601f8301126200037c576200037b620005d5565b5b81516200038e84826020860162000302565b91505092915050565b600080600060608486031215620003b357620003b2620005e4565b5b600084015167ffffffffffffffff811115620003d457620003d3620005df565b5b620003e28682870162000364565b9350506020620003f5868287016200034d565b925050604062000408868287016200034d565b9150509250925092565b600062000421602e83620004ba565b91506200042e82620005fa565b604082019050919050565b60006020820190508181036000830152620004548162000412565b9050919050565b6000620004676200047a565b905062000475828262000541565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a257620004a1620005a6565b5b620004ad82620005e9565b9050602081019050919050565b600082825260208201905092915050565b6000819050919050565b60005b83811015620004f5578082015181840152602081019050620004d8565b8381111562000505576000848401525b50505050565b600060028204905060018216806200052457607f821691505b602082108114156200053b576200053a62000577565b5b50919050565b6200054c82620005e9565b810181811067ffffffffffffffff821117156200056e576200056d620005a6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b6200065481620004cb565b81146200066057600080fd5b50565b60805160a05160c051615651620006a160003960008181611b560152611e04015260008181610c950152611db2015260006130d201526156516000f3fe6080604052600436106102305760003560e01c80635f0bbdba1161012e578063b640392c116100ab578063d7224ba01161006f578063d7224ba014610815578063e13e0da514610840578063e3e1e8ef1461086b578063e985e9c514610887578063f2fde38b146108c457610230565b8063b640392c14610730578063b88d4fde1461075b578063c869086514610784578063c87b56dd146107af578063d52c57e0146107ec57610230565b80638da5cb5b116100f25780638da5cb5b1461064957806395d89b41146106745780639f2de5151461069f578063a22cb465146106ca578063a6128e63146106f357610230565b80635f0bbdba146105625780636352211e1461058d578063645a994c146105ca57806370a08231146105f5578063715018a61461063257610230565b806322f4596f116101bc5780632f745c59116101805780632f745c591461048c5780633ccfd60b146104c957806342842e0e146104d35780634f6ccce7146104fc57806355f804b31461053957610230565b806322f4596f146103da57806323b872dd146104055780632976538e1461042e5780632be09561146104595780632db115441461047057610230565b8063095ea7b311610203578063095ea7b31461030557806318160ddd1461032e57806319981dd1146103595780631b5294ef146103845780631c00ffaa146103af57610230565b806301ffc9a71461023557806305815c551461027257806306fdde031461029d578063081812fc146102c8575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613c5b565b6108ed565b6040516102699190614413565b60405180910390f35b34801561027e57600080fd5b50610287610a37565b604051610294919061480b565b60405180910390f35b3480156102a957600080fd5b506102b2610a42565b6040516102bf9190614449565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190613cfe565b610ad4565b6040516102fc91906143ac565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190613c1b565b610b59565b005b34801561033a57600080fd5b50610343610c72565b604051610350919061480b565b60405180910390f35b34801561036557600080fd5b5061036e610c7b565b60405161037b9190614413565b60405180910390f35b34801561039057600080fd5b50610399610c8e565b6040516103a6919061480b565b60405180910390f35b3480156103bb57600080fd5b506103c4610c93565b6040516103d1919061442e565b60405180910390f35b3480156103e657600080fd5b506103ef610cb7565b6040516103fc919061480b565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613b05565b610cbd565b005b34801561043a57600080fd5b50610443610ccd565b604051610450919061480b565b60405180910390f35b34801561046557600080fd5b5061046e610cd8565b005b61048a60048036038101906104859190613cfe565b610d85565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613c1b565b610f83565b6040516104c0919061480b565b60405180910390f35b6104d1611181565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190613b05565b6114d7565b005b34801561050857600080fd5b50610523600480360381019061051e9190613cfe565b6114f7565b604051610530919061480b565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190613cb5565b61154a565b005b34801561056e57600080fd5b506105776115e0565b604051610584919061480b565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613cfe565b6115e6565b6040516105c191906143ac565b60405180910390f35b3480156105d657600080fd5b506105df6115fc565b6040516105ec919061480b565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190613a98565b611601565b604051610629919061480b565b60405180910390f35b34801561063e57600080fd5b506106476116ea565b005b34801561065557600080fd5b5061065e611772565b60405161066b91906143ac565b60405180910390f35b34801561068057600080fd5b5061068961179c565b6040516106969190614449565b60405180910390f35b3480156106ab57600080fd5b506106b461182e565b6040516106c1919061480b565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec9190613bdb565b611833565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613dc7565b6119b4565b604051610727919061480b565b60405180910390f35b34801561073c57600080fd5b50610745611af2565b604051610752919061480b565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d9190613b58565b611af8565b005b34801561079057600080fd5b50610799611b54565b6040516107a6919061442e565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190613cfe565b611b78565b6040516107e39190614449565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190613d2b565b611c00565b005b34801561082157600080fd5b5061082a611cdb565b604051610837919061480b565b60405180910390f35b34801561084c57600080fd5b50610855611ce1565b604051610862919061480b565b60405180910390f35b61088560048036038101906108809190613d6b565b611ced565b005b34801561089357600080fd5b506108ae60048036038101906108a99190613ac5565b611f89565b6040516108bb9190614413565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190613a98565b61201d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a2057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a305750610a2f82612115565b5b9050919050565b66b1a2bc2ec5000081565b606060018054610a5190614bbc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7d90614bbc565b8015610aca5780601f10610a9f57610100808354040283529160200191610aca565b820191906000526020600020905b815481529060010190602001808311610aad57829003601f168201915b5050505050905090565b6000610adf8261217f565b610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b15906147cb565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b64826115e6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906146cb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf461218c565b73ffffffffffffffffffffffffffffffffffffffff161480610c235750610c2281610c1d61218c565b611f89565b5b610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c599061458b565b60405180910390fd5b610c6d838383612194565b505050565b60008054905090565b600a60009054906101000a900460ff1681565b600281565b7f000000000000000000000000000000000000000000000000000000000000000081565b6115b381565b610cc8838383612246565b505050565b66d529ae9e86000081565b610ce061218c565b73ffffffffffffffffffffffffffffffffffffffff16610cfe611772565b73ffffffffffffffffffffffffffffffffffffffff1614610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b9061460b565b60405180910390fd5b6001600a60006101000a81548160ff02191690831515021790555061384042610d7d919061496d565b600b81905550565b600a60009054906101000a900460ff16610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb906146ab565b60405180910390fd5b60008111610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e906146eb565b60405180910390fd5b6000600b544210610e9457600482610e2e336127ff565b610e38919061496d565b1115610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e70906145ab565b60405180910390fd5b8167011c37937e080000610e8d91906149f4565b9050610ecf565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec6906146ab565b60405180910390fd5b80341015610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f09906144cb565b60405180910390fd5b600082610f1d610c72565b6114eb610f2a9190614a82565b610f349190614a82565b1015610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061468b565b60405180910390fd5b610f7f33836128e8565b5050565b6000610f8e83611601565b8210610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc69061446b565b60405180910390fd5b6000610fd9610c72565b905060008060005b8381101561113f576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146110d357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561112b578684141561111c57819550505050505061117b565b838061112790614c1f565b9450505b50808061113790614c1f565b915050610fe1565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111729061476b565b60405180910390fd5b92915050565b61118961218c565b73ffffffffffffffffffffffffffffffffffffffff166111a7611772565b73ffffffffffffffffffffffffffffffffffffffff16146111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f49061460b565b60405180910390fd5b600047905061123a732c48744e9023f731f5c58ce7b78dcc99dc6a7a3b612710610aa58461122b91906149f4565b61123591906149c3565b612906565b61127273d34fe4c535c24b91686d5481ec24971225fd9b906127106104e28461126391906149f4565b61126d91906149c3565b612906565b6112aa733460784eb3c12f6e0811bbfaecaf237c8b58fd736127106103e88461129b91906149f4565b6112a591906149c3565b612906565b6112e1738353e20b0e920966a2c251fac4918fd72356da4e61271060fa846112d291906149f4565b6112dc91906149c3565b612906565b6113187362289ad97cea85360a2fcd9cdadfece9c082c42361271060968461130991906149f4565b61131391906149c3565b612906565b61134f7329b7aaa30a47f779bff900551a1aea76b983ad7561271060968461134091906149f4565b61134a91906149c3565b612906565b61138773ba4aa796ee6e3f1c38d1d00144689f71cd5209766127106101f48461137891906149f4565b61138291906149c3565b612906565b6113be73c18658aed32e150b18c4faae73fce4f23a0d75b36127106032846113af91906149f4565b6113b991906149c3565b612906565b6113f673c5ef721e41558203e46658d36204c7bfd5276b8c6127106102ee846113e791906149f4565b6113f191906149c3565b612906565b61142e737bda20a949581c4b59b351d63e2ff31c271e5c5c6127106103e88461141f91906149f4565b61142991906149c3565b612906565b61146573b83ce0cf4f53f82d22c98c6378e7fe337d01b1b961271060968461145691906149f4565b61146091906149c3565b612906565b61149d73f822e6f78cf07cac93da749e9131de76936fc72e6127106107d08461148e91906149f4565b61149891906149c3565b612906565b6114d473fb1b6058e73e8ee71a5e2cf5d7a370b16e11d13f6127106019846114c591906149f4565b6114cf91906149c3565b612906565b50565b6114f283838360405180602001604052806000815250611af8565b505050565b6000611501610c72565b8210611542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611539906144eb565b60405180910390fd5b819050919050565b61155261218c565b73ffffffffffffffffffffffffffffffffffffffff16611570611772565b73ffffffffffffffffffffffffffffffffffffffff16146115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd9061460b565b60405180910390fd5b80600990805190602001906115dc9291906137bf565b5050565b600b5481565b60006115f1826129fd565b600001519050919050565b600481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611669906145cb565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116f261218c565b73ffffffffffffffffffffffffffffffffffffffff16611710611772565b73ffffffffffffffffffffffffffffffffffffffff1614611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9061460b565b60405180910390fd5b6117706000612bc2565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546117ab90614bbc565b80601f01602080910402602001604051908101604052809291908181526020018280546117d790614bbc565b80156118245780601f106117f957610100808354040283529160200191611824565b820191906000526020600020905b81548152906001019060200180831161180757829003601f168201915b5050505050905090565b600281565b61183b61218c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a09061464b565b60405180910390fd5b80600660006118b661218c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661196361218c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119a89190614413565b60405180910390a35050565b6000806119c0836127ff565b905060008511611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc906147ab565b60405180910390fd5b84816004611a139190614a82565b1015611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b906145ab565b60405180910390fd5b6001816002611a639190614a82565b1015611a845767011c37937e08000085611a7d91906149f4565b9150611aea565b6000816002611a939190614a82565b905080861115611ad95767011c37937e0800008187611ab29190614a82565b611abc91906149f4565b8582611ac891906149f4565b611ad2919061496d565b9250611ae8565b8486611ae591906149f4565b92505b505b509392505050565b6114eb81565b611b03848484612246565b611b0f84848484612c88565b611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b459061470b565b60405180910390fd5b50505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060611b838261217f565b611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb99061462b565b60405180910390fd5b6000611bcc612e1f565b905080611bd884612eb1565b604051602001611be9929190614368565b604051602081830303815290604052915050919050565b611c0861218c565b73ffffffffffffffffffffffffffffffffffffffff16611c26611772565b73ffffffffffffffffffffffffffffffffffffffff1614611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c739061460b565b60405180910390fd5b6000600583611c8b9190614c8c565b905060005b600584611c9d91906149c3565b811015611cc257611caf8360056128e8565b8080611cba90614c1f565b915050611c90565b5060008114611cd657611cd582826128e8565b5b505050565b60075481565b67011c37937e08000081565b600a60009054906101000a900460ff16611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d33906146ab565b60405180910390fd5b60008211611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d76906146eb565b60405180910390fd5b6000611d8a336127ff565b90506000600190506000600b54421115611da357600091505b818015611dd75750611dd633857f0000000000000000000000000000000000000000000000000000000000000000613012565b5b15611df557611dee8566b1a2bc2ec50000336119b4565b9050611e83565b818015611e295750611e2833857f0000000000000000000000000000000000000000000000000000000000000000613012565b5b15611e4757611e408566d529ae9e860000336119b4565b9050611e82565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e799061454b565b60405180910390fd5b5b60048584611e91919061496d565b1115611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec9906145ab565b60405180910390fd5b80341015611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c906144cb565b60405180910390fd5b600085611f20610c72565b6114eb611f2d9190614a82565b611f379190614a82565b1015611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f9061468b565b60405180910390fd5b611f8233866128e8565b5050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61202561218c565b73ffffffffffffffffffffffffffffffffffffffff16612043611772565b73ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120909061460b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121009061448b565b60405180910390fd5b61211281612bc2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612251826129fd565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661227861218c565b73ffffffffffffffffffffffffffffffffffffffff1614806122d4575061229d61218c565b73ffffffffffffffffffffffffffffffffffffffff166122bc84610ad4565b73ffffffffffffffffffffffffffffffffffffffff16145b806122f057506122ef82600001516122ea61218c565b611f89565b5b905080612332576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123299061466b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239b906145eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b9061450b565b60405180910390fd5b612421858585600161304e565b6124316000848460000151612194565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661249f9190614a4e565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125439190614927565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612649919061496d565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561278f576126bf8161217f565b1561278e576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127f78686866001613054565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128679061452b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61290282826040518060200160405280600081525061305a565b5050565b61290e61218c565b73ffffffffffffffffffffffffffffffffffffffff1661292c611772565b73ffffffffffffffffffffffffffffffffffffffff1614612982576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129799061460b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516129a890614397565b60006040518083038185875af1925050503d80600081146129e5576040519150601f19603f3d011682016040523d82523d6000602084013e6129ea565b606091505b50509050806129f857600080fd5b505050565b612a05613845565b612a0e8261217f565b612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a44906144ab565b60405180910390fd5b600060058310612a73576001600584612a669190614a82565b612a70919061496d565b90505b60008390505b818110612b81576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b6d57809350505050612bbd565b508080612b7990614b92565b915050612a79565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb49061478b565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612ca98473ffffffffffffffffffffffffffffffffffffffff1661364c565b15612e12578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cd261218c565b8786866040518563ffffffff1660e01b8152600401612cf494939291906143c7565b602060405180830381600087803b158015612d0e57600080fd5b505af1925050508015612d3f57506040513d601f19601f82011682018060405250810190612d3c9190613c88565b60015b612dc2573d8060008114612d6f576040519150601f19603f3d011682016040523d82523d6000602084013e612d74565b606091505b50600081511415612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db19061470b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e17565b600190505b949350505050565b606060098054612e2e90614bbc565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5a90614bbc565b8015612ea75780601f10612e7c57610100808354040283529160200191612ea7565b820191906000526020600020905b815481529060010190602001808311612e8a57829003601f168201915b5050505050905090565b60606000821415612ef9576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061300d565b600082905060005b60008214612f2b578080612f1490614c1f565b915050600a82612f2491906149c3565b9150612f01565b60008167ffffffffffffffff811115612f4757612f46614d79565b5b6040519080825280601f01601f191660200182016040528015612f795781602001600182028036833780820191505090505b5090505b6000851461300657600182612f929190614a82565b9150600a85612fa19190614c8c565b6030612fad919061496d565b60f81b818381518110612fc357612fc2614d4a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fff91906149c3565b9450612f7d565b8093505050505b919050565b600061304583838660405160200161302a919061434d565b6040516020818303038152906040528051906020012061366f565b90509392505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c79061474b565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000836130fa610c72565b613104919061496d565b1115613145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313c9061456b565b60405180910390fd5b61314e8161217f565b1561318e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131859061472b565b60405180910390fd5b60058311156131d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c9906147eb565b60405180910390fd5b6131df600085838661304e565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132dc9190614927565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133039190614927565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060018514156134c3576134be8682806134b690614c1f565b935086613686565b613633565b60028514156134ff576134e38682806134db90614c1f565b935086613686565b6134fa8682806134f290614c1f565b935086613686565b613632565b60038514156135525761351f86828061351790614c1f565b935086613686565b61353686828061352e90614c1f565b935086613686565b61354d86828061354590614c1f565b935086613686565b613631565b60048514156135bc5761357286828061356a90614c1f565b935086613686565b61358986828061358190614c1f565b935086613686565b6135a086828061359890614c1f565b935086613686565b6135b78682806135af90614c1f565b935086613686565b613630565b6135d38682806135cb90614c1f565b935086613686565b6135ea8682806135e290614c1f565b935086613686565b6136018682806135f990614c1f565b935086613686565b61361886828061361090614c1f565b935086613686565b61362f86828061362790614c1f565b935086613686565b5b5b5b5b806000556136446000878588613054565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008261367c8584613733565b1490509392505050565b818373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136ef6000848484612c88565b61372e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137259061470b565b60405180910390fd5b505050565b60008082905060005b845181101561379d57600085828151811061375a57613759614d4a565b5b6020026020010151905080831161377c5761377583826137a8565b9250613789565b61378681846137a8565b92505b50808061379590614c1f565b91505061373c565b508091505092915050565b600082600052816020526040600020905092915050565b8280546137cb90614bbc565b90600052602060002090601f0160209004810192826137ed5760008555613834565b82601f1061380657805160ff1916838001178555613834565b82800160010185558215613834579182015b82811115613833578251825591602001919060010190613818565b5b509050613841919061387f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613898576000816000905550600101613880565b5090565b60006138af6138aa8461484b565b614826565b905080838252602082019050828560208602820111156138d2576138d1614dad565b5b60005b8581101561390257816138e888826139e8565b8452602084019350602083019250506001810190506138d5565b5050509392505050565b600061391f61391a84614877565b614826565b90508281526020810184848401111561393b5761393a614db2565b5b613946848285614b50565b509392505050565b600061396161395c846148a8565b614826565b90508281526020810184848401111561397d5761397c614db2565b5b613988848285614b50565b509392505050565b60008135905061399f816155a8565b92915050565b600082601f8301126139ba576139b9614da8565b5b81356139ca84826020860161389c565b91505092915050565b6000813590506139e2816155bf565b92915050565b6000813590506139f7816155d6565b92915050565b600081359050613a0c816155ed565b92915050565b600081519050613a21816155ed565b92915050565b600082601f830112613a3c57613a3b614da8565b5b8135613a4c84826020860161390c565b91505092915050565b600082601f830112613a6a57613a69614da8565b5b8135613a7a84826020860161394e565b91505092915050565b600081359050613a9281615604565b92915050565b600060208284031215613aae57613aad614dbc565b5b6000613abc84828501613990565b91505092915050565b60008060408385031215613adc57613adb614dbc565b5b6000613aea85828601613990565b9250506020613afb85828601613990565b9150509250929050565b600080600060608486031215613b1e57613b1d614dbc565b5b6000613b2c86828701613990565b9350506020613b3d86828701613990565b9250506040613b4e86828701613a83565b9150509250925092565b60008060008060808587031215613b7257613b71614dbc565b5b6000613b8087828801613990565b9450506020613b9187828801613990565b9350506040613ba287828801613a83565b925050606085013567ffffffffffffffff811115613bc357613bc2614db7565b5b613bcf87828801613a27565b91505092959194509250565b60008060408385031215613bf257613bf1614dbc565b5b6000613c0085828601613990565b9250506020613c11858286016139d3565b9150509250929050565b60008060408385031215613c3257613c31614dbc565b5b6000613c4085828601613990565b9250506020613c5185828601613a83565b9150509250929050565b600060208284031215613c7157613c70614dbc565b5b6000613c7f848285016139fd565b91505092915050565b600060208284031215613c9e57613c9d614dbc565b5b6000613cac84828501613a12565b91505092915050565b600060208284031215613ccb57613cca614dbc565b5b600082013567ffffffffffffffff811115613ce957613ce8614db7565b5b613cf584828501613a55565b91505092915050565b600060208284031215613d1457613d13614dbc565b5b6000613d2284828501613a83565b91505092915050565b60008060408385031215613d4257613d41614dbc565b5b6000613d5085828601613a83565b9250506020613d6185828601613990565b9150509250929050565b60008060408385031215613d8257613d81614dbc565b5b6000613d9085828601613a83565b925050602083013567ffffffffffffffff811115613db157613db0614db7565b5b613dbd858286016139a5565b9150509250929050565b600080600060608486031215613de057613ddf614dbc565b5b6000613dee86828701613a83565b9350506020613dff86828701613a83565b9250506040613e1086828701613990565b9150509250925092565b613e2381614ab6565b82525050565b613e3a613e3582614ab6565b614c68565b82525050565b613e4981614ac8565b82525050565b613e5881614ad4565b82525050565b6000613e69826148d9565b613e7381856148ef565b9350613e83818560208601614b5f565b613e8c81614dc1565b840191505092915050565b6000613ea2826148e4565b613eac818561490b565b9350613ebc818560208601614b5f565b613ec581614dc1565b840191505092915050565b6000613edb826148e4565b613ee5818561491c565b9350613ef5818560208601614b5f565b80840191505092915050565b6000613f0e60228361490b565b9150613f1982614ddf565b604082019050919050565b6000613f3160268361490b565b9150613f3c82614e2e565b604082019050919050565b6000613f54602a8361490b565b9150613f5f82614e7d565b604082019050919050565b6000613f77600e8361490b565b9150613f8282614ecc565b602082019050919050565b6000613f9a60238361490b565b9150613fa582614ef5565b604082019050919050565b6000613fbd60258361490b565b9150613fc882614f44565b604082019050919050565b6000613fe060318361490b565b9150613feb82614f93565b604082019050919050565b600061400360108361490b565b915061400e82614fe2565b602082019050919050565b600061402660218361490b565b91506140318261500b565b604082019050919050565b600061404960398361490b565b91506140548261505a565b604082019050919050565b600061406c601c8361490b565b9150614077826150a9565b602082019050919050565b600061408f602b8361490b565b915061409a826150d2565b604082019050919050565b60006140b260268361490b565b91506140bd82615121565b604082019050919050565b60006140d560058361491c565b91506140e082615170565b600582019050919050565b60006140f860208361490b565b915061410382615199565b602082019050919050565b600061411b602f8361490b565b9150614126826151c2565b604082019050919050565b600061413e601a8361490b565b915061414982615211565b602082019050919050565b600061416160328361490b565b915061416c8261523a565b604082019050919050565b600061418460198361490b565b915061418f82615289565b602082019050919050565b60006141a760178361490b565b91506141b2826152b2565b602082019050919050565b60006141ca60228361490b565b91506141d5826152db565b604082019050919050565b60006141ed600083614900565b91506141f88261532a565b600082019050919050565b600061421060288361490b565b915061421b8261532d565b604082019050919050565b600061423360338361490b565b915061423e8261537c565b604082019050919050565b6000614256601d8361490b565b9150614261826153cb565b602082019050919050565b600061427960218361490b565b9150614284826153f4565b604082019050919050565b600061429c602e8361490b565b91506142a782615443565b604082019050919050565b60006142bf602f8361490b565b91506142ca82615492565b604082019050919050565b60006142e2601a8361490b565b91506142ed826154e1565b602082019050919050565b6000614305602d8361490b565b91506143108261550a565b604082019050919050565b600061432860228361490b565b915061433382615559565b604082019050919050565b61434781614b46565b82525050565b60006143598284613e29565b60148201915081905092915050565b60006143748285613ed0565b91506143808284613ed0565b915061438b826140c8565b91508190509392505050565b60006143a2826141e0565b9150819050919050565b60006020820190506143c16000830184613e1a565b92915050565b60006080820190506143dc6000830187613e1a565b6143e96020830186613e1a565b6143f6604083018561433e565b81810360608301526144088184613e5e565b905095945050505050565b60006020820190506144286000830184613e40565b92915050565b60006020820190506144436000830184613e4f565b92915050565b600060208201905081810360008301526144638184613e97565b905092915050565b6000602082019050818103600083015261448481613f01565b9050919050565b600060208201905081810360008301526144a481613f24565b9050919050565b600060208201905081810360008301526144c481613f47565b9050919050565b600060208201905081810360008301526144e481613f6a565b9050919050565b6000602082019050818103600083015261450481613f8d565b9050919050565b6000602082019050818103600083015261452481613fb0565b9050919050565b6000602082019050818103600083015261454481613fd3565b9050919050565b6000602082019050818103600083015261456481613ff6565b9050919050565b6000602082019050818103600083015261458481614019565b9050919050565b600060208201905081810360008301526145a48161403c565b9050919050565b600060208201905081810360008301526145c48161405f565b9050919050565b600060208201905081810360008301526145e481614082565b9050919050565b60006020820190508181036000830152614604816140a5565b9050919050565b60006020820190508181036000830152614624816140eb565b9050919050565b600060208201905081810360008301526146448161410e565b9050919050565b6000602082019050818103600083015261466481614131565b9050919050565b6000602082019050818103600083015261468481614154565b9050919050565b600060208201905081810360008301526146a481614177565b9050919050565b600060208201905081810360008301526146c48161419a565b9050919050565b600060208201905081810360008301526146e4816141bd565b9050919050565b6000602082019050818103600083015261470481614203565b9050919050565b6000602082019050818103600083015261472481614226565b9050919050565b6000602082019050818103600083015261474481614249565b9050919050565b600060208201905081810360008301526147648161426c565b9050919050565b600060208201905081810360008301526147848161428f565b9050919050565b600060208201905081810360008301526147a4816142b2565b9050919050565b600060208201905081810360008301526147c4816142d5565b9050919050565b600060208201905081810360008301526147e4816142f8565b9050919050565b600060208201905081810360008301526148048161431b565b9050919050565b6000602082019050614820600083018461433e565b92915050565b6000614830614841565b905061483c8282614bee565b919050565b6000604051905090565b600067ffffffffffffffff82111561486657614865614d79565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561489257614891614d79565b5b61489b82614dc1565b9050602081019050919050565b600067ffffffffffffffff8211156148c3576148c2614d79565b5b6148cc82614dc1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061493282614b0a565b915061493d83614b0a565b9250826fffffffffffffffffffffffffffffffff0382111561496257614961614cbd565b5b828201905092915050565b600061497882614b46565b915061498383614b46565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149b8576149b7614cbd565b5b828201905092915050565b60006149ce82614b46565b91506149d983614b46565b9250826149e9576149e8614cec565b5b828204905092915050565b60006149ff82614b46565b9150614a0a83614b46565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a4357614a42614cbd565b5b828202905092915050565b6000614a5982614b0a565b9150614a6483614b0a565b925082821015614a7757614a76614cbd565b5b828203905092915050565b6000614a8d82614b46565b9150614a9883614b46565b925082821015614aab57614aaa614cbd565b5b828203905092915050565b6000614ac182614b26565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b7d578082015181840152602081019050614b62565b83811115614b8c576000848401525b50505050565b6000614b9d82614b46565b91506000821415614bb157614bb0614cbd565b5b600182039050919050565b60006002820490506001821680614bd457607f821691505b60208210811415614be857614be7614d1b565b5b50919050565b614bf782614dc1565b810181811067ffffffffffffffff82111715614c1657614c15614d79565b5b80604052505050565b6000614c2a82614b46565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c5d57614c5c614cbd565b5b600182019050919050565b6000614c7382614c7a565b9050919050565b6000614c8582614dd2565b9050919050565b6000614c9782614b46565b9150614ca283614b46565b925082614cb257614cb1614cec565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4e6f7420456e6f75676820455448000000000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5072652d53616c65206973206f76657200000000000000000000000000000000600082015250565b7f455243373231413a20636f6c6c656374696f6e2073697a65206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f4d6178696d756d206d696e7420616d6f756e7420657863656564656400000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f7420456e6f756768204d696e7461626c6520546f6b656e00000000000000600082015250565b7f4d696e74696e67206e6f7720616c6c6f77656420796574000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f546865207175616e746974792063616e6e6f742062652061206e65676174697660008201527f65206e756d626572000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742063616e6e6f74206265207a65726f000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6155b181614ab6565b81146155bc57600080fd5b50565b6155c881614ac8565b81146155d357600080fd5b50565b6155df81614ad4565b81146155ea57600080fd5b50565b6155f681614ade565b811461560157600080fd5b50565b61560d81614b46565b811461561857600080fd5b5056fea26469706673582212203d01d8483b1185d00d894f9ca4276c66961491457facf813f662e3fd573bc5d264736f6c634300080700330000000000000000000000000000000000000000000000000000000000000060e4c317e475bf015b23a4ef8999297ff09d19536099e84724eac305d3a34070f795b2db1459b899cb08ce8eec2bf3b5ff09b5a2727932cbd9a04d24b7aad56bf6000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d506965797968565a3239456e594c7339514c625136505579454c775a53353967377352596d4e384c6a67616d2f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c80635f0bbdba1161012e578063b640392c116100ab578063d7224ba01161006f578063d7224ba014610815578063e13e0da514610840578063e3e1e8ef1461086b578063e985e9c514610887578063f2fde38b146108c457610230565b8063b640392c14610730578063b88d4fde1461075b578063c869086514610784578063c87b56dd146107af578063d52c57e0146107ec57610230565b80638da5cb5b116100f25780638da5cb5b1461064957806395d89b41146106745780639f2de5151461069f578063a22cb465146106ca578063a6128e63146106f357610230565b80635f0bbdba146105625780636352211e1461058d578063645a994c146105ca57806370a08231146105f5578063715018a61461063257610230565b806322f4596f116101bc5780632f745c59116101805780632f745c591461048c5780633ccfd60b146104c957806342842e0e146104d35780634f6ccce7146104fc57806355f804b31461053957610230565b806322f4596f146103da57806323b872dd146104055780632976538e1461042e5780632be09561146104595780632db115441461047057610230565b8063095ea7b311610203578063095ea7b31461030557806318160ddd1461032e57806319981dd1146103595780631b5294ef146103845780631c00ffaa146103af57610230565b806301ffc9a71461023557806305815c551461027257806306fdde031461029d578063081812fc146102c8575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613c5b565b6108ed565b6040516102699190614413565b60405180910390f35b34801561027e57600080fd5b50610287610a37565b604051610294919061480b565b60405180910390f35b3480156102a957600080fd5b506102b2610a42565b6040516102bf9190614449565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea9190613cfe565b610ad4565b6040516102fc91906143ac565b60405180910390f35b34801561031157600080fd5b5061032c60048036038101906103279190613c1b565b610b59565b005b34801561033a57600080fd5b50610343610c72565b604051610350919061480b565b60405180910390f35b34801561036557600080fd5b5061036e610c7b565b60405161037b9190614413565b60405180910390f35b34801561039057600080fd5b50610399610c8e565b6040516103a6919061480b565b60405180910390f35b3480156103bb57600080fd5b506103c4610c93565b6040516103d1919061442e565b60405180910390f35b3480156103e657600080fd5b506103ef610cb7565b6040516103fc919061480b565b60405180910390f35b34801561041157600080fd5b5061042c60048036038101906104279190613b05565b610cbd565b005b34801561043a57600080fd5b50610443610ccd565b604051610450919061480b565b60405180910390f35b34801561046557600080fd5b5061046e610cd8565b005b61048a60048036038101906104859190613cfe565b610d85565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613c1b565b610f83565b6040516104c0919061480b565b60405180910390f35b6104d1611181565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190613b05565b6114d7565b005b34801561050857600080fd5b50610523600480360381019061051e9190613cfe565b6114f7565b604051610530919061480b565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190613cb5565b61154a565b005b34801561056e57600080fd5b506105776115e0565b604051610584919061480b565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190613cfe565b6115e6565b6040516105c191906143ac565b60405180910390f35b3480156105d657600080fd5b506105df6115fc565b6040516105ec919061480b565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190613a98565b611601565b604051610629919061480b565b60405180910390f35b34801561063e57600080fd5b506106476116ea565b005b34801561065557600080fd5b5061065e611772565b60405161066b91906143ac565b60405180910390f35b34801561068057600080fd5b5061068961179c565b6040516106969190614449565b60405180910390f35b3480156106ab57600080fd5b506106b461182e565b6040516106c1919061480b565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec9190613bdb565b611833565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613dc7565b6119b4565b604051610727919061480b565b60405180910390f35b34801561073c57600080fd5b50610745611af2565b604051610752919061480b565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d9190613b58565b611af8565b005b34801561079057600080fd5b50610799611b54565b6040516107a6919061442e565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190613cfe565b611b78565b6040516107e39190614449565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190613d2b565b611c00565b005b34801561082157600080fd5b5061082a611cdb565b604051610837919061480b565b60405180910390f35b34801561084c57600080fd5b50610855611ce1565b604051610862919061480b565b60405180910390f35b61088560048036038101906108809190613d6b565b611ced565b005b34801561089357600080fd5b506108ae60048036038101906108a99190613ac5565b611f89565b6040516108bb9190614413565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190613a98565b61201d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109b857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a2057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a305750610a2f82612115565b5b9050919050565b66b1a2bc2ec5000081565b606060018054610a5190614bbc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7d90614bbc565b8015610aca5780601f10610a9f57610100808354040283529160200191610aca565b820191906000526020600020905b815481529060010190602001808311610aad57829003601f168201915b5050505050905090565b6000610adf8261217f565b610b1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b15906147cb565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b64826115e6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc906146cb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bf461218c565b73ffffffffffffffffffffffffffffffffffffffff161480610c235750610c2281610c1d61218c565b611f89565b5b610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c599061458b565b60405180910390fd5b610c6d838383612194565b505050565b60008054905090565b600a60009054906101000a900460ff1681565b600281565b7fe4c317e475bf015b23a4ef8999297ff09d19536099e84724eac305d3a34070f781565b6115b381565b610cc8838383612246565b505050565b66d529ae9e86000081565b610ce061218c565b73ffffffffffffffffffffffffffffffffffffffff16610cfe611772565b73ffffffffffffffffffffffffffffffffffffffff1614610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b9061460b565b60405180910390fd5b6001600a60006101000a81548160ff02191690831515021790555061384042610d7d919061496d565b600b81905550565b600a60009054906101000a900460ff16610dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcb906146ab565b60405180910390fd5b60008111610e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0e906146eb565b60405180910390fd5b6000600b544210610e9457600482610e2e336127ff565b610e38919061496d565b1115610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e70906145ab565b60405180910390fd5b8167011c37937e080000610e8d91906149f4565b9050610ecf565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec6906146ab565b60405180910390fd5b80341015610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f09906144cb565b60405180910390fd5b600082610f1d610c72565b6114eb610f2a9190614a82565b610f349190614a82565b1015610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c9061468b565b60405180910390fd5b610f7f33836128e8565b5050565b6000610f8e83611601565b8210610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc69061446b565b60405180910390fd5b6000610fd9610c72565b905060008060005b8381101561113f576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146110d357806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561112b578684141561111c57819550505050505061117b565b838061112790614c1f565b9450505b50808061113790614c1f565b915050610fe1565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111729061476b565b60405180910390fd5b92915050565b61118961218c565b73ffffffffffffffffffffffffffffffffffffffff166111a7611772565b73ffffffffffffffffffffffffffffffffffffffff16146111fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f49061460b565b60405180910390fd5b600047905061123a732c48744e9023f731f5c58ce7b78dcc99dc6a7a3b612710610aa58461122b91906149f4565b61123591906149c3565b612906565b61127273d34fe4c535c24b91686d5481ec24971225fd9b906127106104e28461126391906149f4565b61126d91906149c3565b612906565b6112aa733460784eb3c12f6e0811bbfaecaf237c8b58fd736127106103e88461129b91906149f4565b6112a591906149c3565b612906565b6112e1738353e20b0e920966a2c251fac4918fd72356da4e61271060fa846112d291906149f4565b6112dc91906149c3565b612906565b6113187362289ad97cea85360a2fcd9cdadfece9c082c42361271060968461130991906149f4565b61131391906149c3565b612906565b61134f7329b7aaa30a47f779bff900551a1aea76b983ad7561271060968461134091906149f4565b61134a91906149c3565b612906565b61138773ba4aa796ee6e3f1c38d1d00144689f71cd5209766127106101f48461137891906149f4565b61138291906149c3565b612906565b6113be73c18658aed32e150b18c4faae73fce4f23a0d75b36127106032846113af91906149f4565b6113b991906149c3565b612906565b6113f673c5ef721e41558203e46658d36204c7bfd5276b8c6127106102ee846113e791906149f4565b6113f191906149c3565b612906565b61142e737bda20a949581c4b59b351d63e2ff31c271e5c5c6127106103e88461141f91906149f4565b61142991906149c3565b612906565b61146573b83ce0cf4f53f82d22c98c6378e7fe337d01b1b961271060968461145691906149f4565b61146091906149c3565b612906565b61149d73f822e6f78cf07cac93da749e9131de76936fc72e6127106107d08461148e91906149f4565b61149891906149c3565b612906565b6114d473fb1b6058e73e8ee71a5e2cf5d7a370b16e11d13f6127106019846114c591906149f4565b6114cf91906149c3565b612906565b50565b6114f283838360405180602001604052806000815250611af8565b505050565b6000611501610c72565b8210611542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611539906144eb565b60405180910390fd5b819050919050565b61155261218c565b73ffffffffffffffffffffffffffffffffffffffff16611570611772565b73ffffffffffffffffffffffffffffffffffffffff16146115c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bd9061460b565b60405180910390fd5b80600990805190602001906115dc9291906137bf565b5050565b600b5481565b60006115f1826129fd565b600001519050919050565b600481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611672576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611669906145cb565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116f261218c565b73ffffffffffffffffffffffffffffffffffffffff16611710611772565b73ffffffffffffffffffffffffffffffffffffffff1614611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9061460b565b60405180910390fd5b6117706000612bc2565b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546117ab90614bbc565b80601f01602080910402602001604051908101604052809291908181526020018280546117d790614bbc565b80156118245780601f106117f957610100808354040283529160200191611824565b820191906000526020600020905b81548152906001019060200180831161180757829003601f168201915b5050505050905090565b600281565b61183b61218c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a09061464b565b60405180910390fd5b80600660006118b661218c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661196361218c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119a89190614413565b60405180910390a35050565b6000806119c0836127ff565b905060008511611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc906147ab565b60405180910390fd5b84816004611a139190614a82565b1015611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b906145ab565b60405180910390fd5b6001816002611a639190614a82565b1015611a845767011c37937e08000085611a7d91906149f4565b9150611aea565b6000816002611a939190614a82565b905080861115611ad95767011c37937e0800008187611ab29190614a82565b611abc91906149f4565b8582611ac891906149f4565b611ad2919061496d565b9250611ae8565b8486611ae591906149f4565b92505b505b509392505050565b6114eb81565b611b03848484612246565b611b0f84848484612c88565b611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b459061470b565b60405180910390fd5b50505050565b7f95b2db1459b899cb08ce8eec2bf3b5ff09b5a2727932cbd9a04d24b7aad56bf681565b6060611b838261217f565b611bc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb99061462b565b60405180910390fd5b6000611bcc612e1f565b905080611bd884612eb1565b604051602001611be9929190614368565b604051602081830303815290604052915050919050565b611c0861218c565b73ffffffffffffffffffffffffffffffffffffffff16611c26611772565b73ffffffffffffffffffffffffffffffffffffffff1614611c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c739061460b565b60405180910390fd5b6000600583611c8b9190614c8c565b905060005b600584611c9d91906149c3565b811015611cc257611caf8360056128e8565b8080611cba90614c1f565b915050611c90565b5060008114611cd657611cd582826128e8565b5b505050565b60075481565b67011c37937e08000081565b600a60009054906101000a900460ff16611d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d33906146ab565b60405180910390fd5b60008211611d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d76906146eb565b60405180910390fd5b6000611d8a336127ff565b90506000600190506000600b54421115611da357600091505b818015611dd75750611dd633857fe4c317e475bf015b23a4ef8999297ff09d19536099e84724eac305d3a34070f7613012565b5b15611df557611dee8566b1a2bc2ec50000336119b4565b9050611e83565b818015611e295750611e2833857f95b2db1459b899cb08ce8eec2bf3b5ff09b5a2727932cbd9a04d24b7aad56bf6613012565b5b15611e4757611e408566d529ae9e860000336119b4565b9050611e82565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e799061454b565b60405180910390fd5b5b60048584611e91919061496d565b1115611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec9906145ab565b60405180910390fd5b80341015611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c906144cb565b60405180910390fd5b600085611f20610c72565b6114eb611f2d9190614a82565b611f379190614a82565b1015611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f9061468b565b60405180910390fd5b611f8233866128e8565b5050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61202561218c565b73ffffffffffffffffffffffffffffffffffffffff16612043611772565b73ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120909061460b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121009061448b565b60405180910390fd5b61211281612bc2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612251826129fd565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661227861218c565b73ffffffffffffffffffffffffffffffffffffffff1614806122d4575061229d61218c565b73ffffffffffffffffffffffffffffffffffffffff166122bc84610ad4565b73ffffffffffffffffffffffffffffffffffffffff16145b806122f057506122ef82600001516122ea61218c565b611f89565b5b905080612332576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123299061466b565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239b906145eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240b9061450b565b60405180910390fd5b612421858585600161304e565b6124316000848460000151612194565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661249f9190614a4e565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166125439190614927565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612649919061496d565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561278f576126bf8161217f565b1561278e576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127f78686866001613054565b505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612870576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128679061452b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61290282826040518060200160405280600081525061305a565b5050565b61290e61218c565b73ffffffffffffffffffffffffffffffffffffffff1661292c611772565b73ffffffffffffffffffffffffffffffffffffffff1614612982576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129799061460b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516129a890614397565b60006040518083038185875af1925050503d80600081146129e5576040519150601f19603f3d011682016040523d82523d6000602084013e6129ea565b606091505b50509050806129f857600080fd5b505050565b612a05613845565b612a0e8261217f565b612a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a44906144ab565b60405180910390fd5b600060058310612a73576001600584612a669190614a82565b612a70919061496d565b90505b60008390505b818110612b81576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612b6d57809350505050612bbd565b508080612b7990614b92565b915050612a79565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb49061478b565b60405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612ca98473ffffffffffffffffffffffffffffffffffffffff1661364c565b15612e12578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cd261218c565b8786866040518563ffffffff1660e01b8152600401612cf494939291906143c7565b602060405180830381600087803b158015612d0e57600080fd5b505af1925050508015612d3f57506040513d601f19601f82011682018060405250810190612d3c9190613c88565b60015b612dc2573d8060008114612d6f576040519150601f19603f3d011682016040523d82523d6000602084013e612d74565b606091505b50600081511415612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db19061470b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612e17565b600190505b949350505050565b606060098054612e2e90614bbc565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5a90614bbc565b8015612ea75780601f10612e7c57610100808354040283529160200191612ea7565b820191906000526020600020905b815481529060010190602001808311612e8a57829003601f168201915b5050505050905090565b60606000821415612ef9576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061300d565b600082905060005b60008214612f2b578080612f1490614c1f565b915050600a82612f2491906149c3565b9150612f01565b60008167ffffffffffffffff811115612f4757612f46614d79565b5b6040519080825280601f01601f191660200182016040528015612f795781602001600182028036833780820191505090505b5090505b6000851461300657600182612f929190614a82565b9150600a85612fa19190614c8c565b6030612fad919061496d565b60f81b818381518110612fc357612fc2614d4a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612fff91906149c3565b9450612f7d565b8093505050505b919050565b600061304583838660405160200161302a919061434d565b6040516020818303038152906040528051906020012061366f565b90509392505050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156130d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c79061474b565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000015b3836130fa610c72565b613104919061496d565b1115613145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313c9061456b565b60405180910390fd5b61314e8161217f565b1561318e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131859061472b565b60405180910390fd5b60058311156131d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c9906147eb565b60405180910390fd5b6131df600085838661304e565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516132dc9190614927565b6fffffffffffffffffffffffffffffffff1681526020018583602001516133039190614927565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060018514156134c3576134be8682806134b690614c1f565b935086613686565b613633565b60028514156134ff576134e38682806134db90614c1f565b935086613686565b6134fa8682806134f290614c1f565b935086613686565b613632565b60038514156135525761351f86828061351790614c1f565b935086613686565b61353686828061352e90614c1f565b935086613686565b61354d86828061354590614c1f565b935086613686565b613631565b60048514156135bc5761357286828061356a90614c1f565b935086613686565b61358986828061358190614c1f565b935086613686565b6135a086828061359890614c1f565b935086613686565b6135b78682806135af90614c1f565b935086613686565b613630565b6135d38682806135cb90614c1f565b935086613686565b6135ea8682806135e290614c1f565b935086613686565b6136018682806135f990614c1f565b935086613686565b61361886828061361090614c1f565b935086613686565b61362f86828061362790614c1f565b935086613686565b5b5b5b5b806000556136446000878588613054565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008261367c8584613733565b1490509392505050565b818373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136ef6000848484612c88565b61372e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137259061470b565b60405180910390fd5b505050565b60008082905060005b845181101561379d57600085828151811061375a57613759614d4a565b5b6020026020010151905080831161377c5761377583826137a8565b9250613789565b61378681846137a8565b92505b50808061379590614c1f565b91505061373c565b508091505092915050565b600082600052816020526040600020905092915050565b8280546137cb90614bbc565b90600052602060002090601f0160209004810192826137ed5760008555613834565b82601f1061380657805160ff1916838001178555613834565b82800160010185558215613834579182015b82811115613833578251825591602001919060010190613818565b5b509050613841919061387f565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613898576000816000905550600101613880565b5090565b60006138af6138aa8461484b565b614826565b905080838252602082019050828560208602820111156138d2576138d1614dad565b5b60005b8581101561390257816138e888826139e8565b8452602084019350602083019250506001810190506138d5565b5050509392505050565b600061391f61391a84614877565b614826565b90508281526020810184848401111561393b5761393a614db2565b5b613946848285614b50565b509392505050565b600061396161395c846148a8565b614826565b90508281526020810184848401111561397d5761397c614db2565b5b613988848285614b50565b509392505050565b60008135905061399f816155a8565b92915050565b600082601f8301126139ba576139b9614da8565b5b81356139ca84826020860161389c565b91505092915050565b6000813590506139e2816155bf565b92915050565b6000813590506139f7816155d6565b92915050565b600081359050613a0c816155ed565b92915050565b600081519050613a21816155ed565b92915050565b600082601f830112613a3c57613a3b614da8565b5b8135613a4c84826020860161390c565b91505092915050565b600082601f830112613a6a57613a69614da8565b5b8135613a7a84826020860161394e565b91505092915050565b600081359050613a9281615604565b92915050565b600060208284031215613aae57613aad614dbc565b5b6000613abc84828501613990565b91505092915050565b60008060408385031215613adc57613adb614dbc565b5b6000613aea85828601613990565b9250506020613afb85828601613990565b9150509250929050565b600080600060608486031215613b1e57613b1d614dbc565b5b6000613b2c86828701613990565b9350506020613b3d86828701613990565b9250506040613b4e86828701613a83565b9150509250925092565b60008060008060808587031215613b7257613b71614dbc565b5b6000613b8087828801613990565b9450506020613b9187828801613990565b9350506040613ba287828801613a83565b925050606085013567ffffffffffffffff811115613bc357613bc2614db7565b5b613bcf87828801613a27565b91505092959194509250565b60008060408385031215613bf257613bf1614dbc565b5b6000613c0085828601613990565b9250506020613c11858286016139d3565b9150509250929050565b60008060408385031215613c3257613c31614dbc565b5b6000613c4085828601613990565b9250506020613c5185828601613a83565b9150509250929050565b600060208284031215613c7157613c70614dbc565b5b6000613c7f848285016139fd565b91505092915050565b600060208284031215613c9e57613c9d614dbc565b5b6000613cac84828501613a12565b91505092915050565b600060208284031215613ccb57613cca614dbc565b5b600082013567ffffffffffffffff811115613ce957613ce8614db7565b5b613cf584828501613a55565b91505092915050565b600060208284031215613d1457613d13614dbc565b5b6000613d2284828501613a83565b91505092915050565b60008060408385031215613d4257613d41614dbc565b5b6000613d5085828601613a83565b9250506020613d6185828601613990565b9150509250929050565b60008060408385031215613d8257613d81614dbc565b5b6000613d9085828601613a83565b925050602083013567ffffffffffffffff811115613db157613db0614db7565b5b613dbd858286016139a5565b9150509250929050565b600080600060608486031215613de057613ddf614dbc565b5b6000613dee86828701613a83565b9350506020613dff86828701613a83565b9250506040613e1086828701613990565b9150509250925092565b613e2381614ab6565b82525050565b613e3a613e3582614ab6565b614c68565b82525050565b613e4981614ac8565b82525050565b613e5881614ad4565b82525050565b6000613e69826148d9565b613e7381856148ef565b9350613e83818560208601614b5f565b613e8c81614dc1565b840191505092915050565b6000613ea2826148e4565b613eac818561490b565b9350613ebc818560208601614b5f565b613ec581614dc1565b840191505092915050565b6000613edb826148e4565b613ee5818561491c565b9350613ef5818560208601614b5f565b80840191505092915050565b6000613f0e60228361490b565b9150613f1982614ddf565b604082019050919050565b6000613f3160268361490b565b9150613f3c82614e2e565b604082019050919050565b6000613f54602a8361490b565b9150613f5f82614e7d565b604082019050919050565b6000613f77600e8361490b565b9150613f8282614ecc565b602082019050919050565b6000613f9a60238361490b565b9150613fa582614ef5565b604082019050919050565b6000613fbd60258361490b565b9150613fc882614f44565b604082019050919050565b6000613fe060318361490b565b9150613feb82614f93565b604082019050919050565b600061400360108361490b565b915061400e82614fe2565b602082019050919050565b600061402660218361490b565b91506140318261500b565b604082019050919050565b600061404960398361490b565b91506140548261505a565b604082019050919050565b600061406c601c8361490b565b9150614077826150a9565b602082019050919050565b600061408f602b8361490b565b915061409a826150d2565b604082019050919050565b60006140b260268361490b565b91506140bd82615121565b604082019050919050565b60006140d560058361491c565b91506140e082615170565b600582019050919050565b60006140f860208361490b565b915061410382615199565b602082019050919050565b600061411b602f8361490b565b9150614126826151c2565b604082019050919050565b600061413e601a8361490b565b915061414982615211565b602082019050919050565b600061416160328361490b565b915061416c8261523a565b604082019050919050565b600061418460198361490b565b915061418f82615289565b602082019050919050565b60006141a760178361490b565b91506141b2826152b2565b602082019050919050565b60006141ca60228361490b565b91506141d5826152db565b604082019050919050565b60006141ed600083614900565b91506141f88261532a565b600082019050919050565b600061421060288361490b565b915061421b8261532d565b604082019050919050565b600061423360338361490b565b915061423e8261537c565b604082019050919050565b6000614256601d8361490b565b9150614261826153cb565b602082019050919050565b600061427960218361490b565b9150614284826153f4565b604082019050919050565b600061429c602e8361490b565b91506142a782615443565b604082019050919050565b60006142bf602f8361490b565b91506142ca82615492565b604082019050919050565b60006142e2601a8361490b565b91506142ed826154e1565b602082019050919050565b6000614305602d8361490b565b91506143108261550a565b604082019050919050565b600061432860228361490b565b915061433382615559565b604082019050919050565b61434781614b46565b82525050565b60006143598284613e29565b60148201915081905092915050565b60006143748285613ed0565b91506143808284613ed0565b915061438b826140c8565b91508190509392505050565b60006143a2826141e0565b9150819050919050565b60006020820190506143c16000830184613e1a565b92915050565b60006080820190506143dc6000830187613e1a565b6143e96020830186613e1a565b6143f6604083018561433e565b81810360608301526144088184613e5e565b905095945050505050565b60006020820190506144286000830184613e40565b92915050565b60006020820190506144436000830184613e4f565b92915050565b600060208201905081810360008301526144638184613e97565b905092915050565b6000602082019050818103600083015261448481613f01565b9050919050565b600060208201905081810360008301526144a481613f24565b9050919050565b600060208201905081810360008301526144c481613f47565b9050919050565b600060208201905081810360008301526144e481613f6a565b9050919050565b6000602082019050818103600083015261450481613f8d565b9050919050565b6000602082019050818103600083015261452481613fb0565b9050919050565b6000602082019050818103600083015261454481613fd3565b9050919050565b6000602082019050818103600083015261456481613ff6565b9050919050565b6000602082019050818103600083015261458481614019565b9050919050565b600060208201905081810360008301526145a48161403c565b9050919050565b600060208201905081810360008301526145c48161405f565b9050919050565b600060208201905081810360008301526145e481614082565b9050919050565b60006020820190508181036000830152614604816140a5565b9050919050565b60006020820190508181036000830152614624816140eb565b9050919050565b600060208201905081810360008301526146448161410e565b9050919050565b6000602082019050818103600083015261466481614131565b9050919050565b6000602082019050818103600083015261468481614154565b9050919050565b600060208201905081810360008301526146a481614177565b9050919050565b600060208201905081810360008301526146c48161419a565b9050919050565b600060208201905081810360008301526146e4816141bd565b9050919050565b6000602082019050818103600083015261470481614203565b9050919050565b6000602082019050818103600083015261472481614226565b9050919050565b6000602082019050818103600083015261474481614249565b9050919050565b600060208201905081810360008301526147648161426c565b9050919050565b600060208201905081810360008301526147848161428f565b9050919050565b600060208201905081810360008301526147a4816142b2565b9050919050565b600060208201905081810360008301526147c4816142d5565b9050919050565b600060208201905081810360008301526147e4816142f8565b9050919050565b600060208201905081810360008301526148048161431b565b9050919050565b6000602082019050614820600083018461433e565b92915050565b6000614830614841565b905061483c8282614bee565b919050565b6000604051905090565b600067ffffffffffffffff82111561486657614865614d79565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561489257614891614d79565b5b61489b82614dc1565b9050602081019050919050565b600067ffffffffffffffff8211156148c3576148c2614d79565b5b6148cc82614dc1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061493282614b0a565b915061493d83614b0a565b9250826fffffffffffffffffffffffffffffffff0382111561496257614961614cbd565b5b828201905092915050565b600061497882614b46565b915061498383614b46565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149b8576149b7614cbd565b5b828201905092915050565b60006149ce82614b46565b91506149d983614b46565b9250826149e9576149e8614cec565b5b828204905092915050565b60006149ff82614b46565b9150614a0a83614b46565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a4357614a42614cbd565b5b828202905092915050565b6000614a5982614b0a565b9150614a6483614b0a565b925082821015614a7757614a76614cbd565b5b828203905092915050565b6000614a8d82614b46565b9150614a9883614b46565b925082821015614aab57614aaa614cbd565b5b828203905092915050565b6000614ac182614b26565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614b7d578082015181840152602081019050614b62565b83811115614b8c576000848401525b50505050565b6000614b9d82614b46565b91506000821415614bb157614bb0614cbd565b5b600182039050919050565b60006002820490506001821680614bd457607f821691505b60208210811415614be857614be7614d1b565b5b50919050565b614bf782614dc1565b810181811067ffffffffffffffff82111715614c1657614c15614d79565b5b80604052505050565b6000614c2a82614b46565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c5d57614c5c614cbd565b5b600182019050919050565b6000614c7382614c7a565b9050919050565b6000614c8582614dd2565b9050919050565b6000614c9782614b46565b9150614ca283614b46565b925082614cb257614cb1614cec565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f4e6f7420456e6f75676820455448000000000000000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5072652d53616c65206973206f76657200000000000000000000000000000000600082015250565b7f455243373231413a20636f6c6c656374696f6e2073697a65206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f4d6178696d756d206d696e7420616d6f756e7420657863656564656400000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f4e6f7420456e6f756768204d696e7461626c6520546f6b656e00000000000000600082015250565b7f4d696e74696e67206e6f7720616c6c6f77656420796574000000000000000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f546865207175616e746974792063616e6e6f742062652061206e65676174697660008201527f65206e756d626572000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742063616e6e6f74206265207a65726f000000000000600082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b6155b181614ab6565b81146155bc57600080fd5b50565b6155c881614ac8565b81146155d357600080fd5b50565b6155df81614ad4565b81146155ea57600080fd5b50565b6155f681614ade565b811461560157600080fd5b50565b61560d81614b46565b811461561857600080fd5b5056fea26469706673582212203d01d8483b1185d00d894f9ca4276c66961491457facf813f662e3fd573bc5d264736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000060e4c317e475bf015b23a4ef8999297ff09d19536099e84724eac305d3a34070f795b2db1459b899cb08ce8eec2bf3b5ff09b5a2727932cbd9a04d24b7aad56bf6000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d506965797968565a3239456e594c7339514c625136505579454c775a53353967377352596d4e384c6a67616d2f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : initialBaseURI (string): https://ipfs.io/ipfs/QmPieyyhVZ29EnYLs9QLbQ6PUyELwZS59g7sRYmN8Ljgam/
Arg [1] : OGroot (bytes32): 0xe4c317e475bf015b23a4ef8999297ff09d19536099e84724eac305d3a34070f7
Arg [2] : WLroot (bytes32): 0x95b2db1459b899cb08ce8eec2bf3b5ff09b5a2727932cbd9a04d24b7aad56bf6

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : e4c317e475bf015b23a4ef8999297ff09d19536099e84724eac305d3a34070f7
Arg [2] : 95b2db1459b899cb08ce8eec2bf3b5ff09b5a2727932cbd9a04d24b7aad56bf6
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [4] : 68747470733a2f2f697066732e696f2f697066732f516d506965797968565a32
Arg [5] : 39456e594c7339514c625136505579454c775a53353967377352596d4e384c6a
Arg [6] : 67616d2f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

169:6662:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3828:370:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;552:44:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5554:94:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7080:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6642:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2389:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;709:23:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;430:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;776:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;271:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7930:142:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;603:44:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4922:130;;;;;;;;;;;;;:::i;:::-;;1252:732;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3020:744:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5327:1307:2;;;:::i;:::-;;8135:157:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2552:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4811:103:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;739:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5377:118:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;365:58:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4254:211:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:11;;;;;;;;;;;;;:::i;:::-;;1029:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5709:98:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;491:54:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7348:274:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3059:862:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;319:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8355:311:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;815:32:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4153:618;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5060:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13905:43:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;654:48:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1992:1059;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7685:186:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3828:370:4;3955:4;4000:25;3985:40;;;:11;:40;;;;:99;;;;4051:33;4036:48;;;:11;:48;;;;3985:99;:160;;;;4110:35;4095:50;;;:11;:50;;;;3985:160;:207;;;;4156:36;4180:11;4156:23;:36::i;:::-;3985:207;3971:221;;3828:370;;;:::o;552:44:2:-;586:10;552:44;:::o;5554:94:4:-;5608:13;5637:5;5630:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5554:94;:::o;7080:204::-;7148:7;7172:16;7180:7;7172;:16::i;:::-;7164:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7254:15;:24;7270:7;7254:24;;;;;;;;;;;;;;;;;;;;;7247:31;;7080:204;;;:::o;6642:380::-;6711:13;6727:25;6744:7;6727:16;:25::i;:::-;6711:41;;6773:5;6767:11;;:2;:11;;;;6759:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6858:5;6842:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;6867:37;6884:5;6891:12;:10;:12::i;:::-;6867:16;:37::i;:::-;6842:62;6826:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;6988:28;6997:2;7001:7;7010:5;6988:8;:28::i;:::-;6704:318;6642:380;;:::o;2389:94::-;2442:7;2465:12;;2458:19;;2389:94;:::o;709:23:2:-;;;;;;;;;;;;;:::o;430:54::-;483:1;430:54;:::o;776:32::-;;;:::o;271:41::-;308:4;271:41;:::o;7930:142:4:-;8038:28;8048:4;8054:2;8058:7;8038:9;:28::i;:::-;7930:142;;;:::o;603:44:2:-;637:10;603:44;:::o;4922:130::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4986:4:2::1;4972:11;;:18;;;;;;;;;;;;;;;;;;5037:7;5019:15;:25;;;;:::i;:::-;5001:15;:43;;;;4922:130::o:0;1252:732::-;1325:11;;;;;;;;;;;1317:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1396:1;1383:10;:14;1375:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1452:13;1504:15;;1485;:34;1482:290;;422:1;1571:10;1543:25;1557:10;1543:13;:25::i;:::-;:38;;;;:::i;:::-;:72;;1535:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;1702:10;692;1688:24;;;;:::i;:::-;1680:32;;1482:290;;;1739:33;;;;;;;;;;:::i;:::-;;;;;;;;1482:290;1804:5;1791:9;:18;;1783:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;1899:1;1885:10;1868:13;:11;:13::i;:::-;354:4;1857:24;;;;:::i;:::-;1856:39;;;;:::i;:::-;:44;;1848:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;1942:32;1952:10;1963;1942:9;:32::i;:::-;1306:678;1252:732;:::o;3020:744:4:-;3129:7;3164:16;3174:5;3164:9;:16::i;:::-;3156:5;:24;3148:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;3226:22;3251:13;:11;:13::i;:::-;3226:38;;3271:19;3301:25;3351:9;3346:350;3370:14;3366:1;:18;3346:350;;;3400:31;3434:11;:14;3446:1;3434:14;;;;;;;;;;;3400:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3487:1;3461:28;;:9;:14;;;:28;;;3457:89;;3522:9;:14;;;3502:34;;3457:89;3579:5;3558:26;;:17;:26;;;3554:135;;;3616:5;3601:11;:20;3597:59;;;3643:1;3636:8;;;;;;;;;3597:59;3666:13;;;;;:::i;:::-;;;;3554:135;3391:305;3386:3;;;;;:::i;:::-;;;;3346:350;;;;3702:56;;;;;;;;;;:::i;:::-;;;;;;;;3020:744;;;;;:::o;5327:1307:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5383:15:2::1;5401:21;5383:39;;5435:81;5452:42;5510:5;5504:4;5496:7;:12;;;;:::i;:::-;5495:20;;;;:::i;:::-;5435:16;:81::i;:::-;5527;5544:42;5602:5;5596:4;5588:7;:12;;;;:::i;:::-;5587:20;;;;:::i;:::-;5527:16;:81::i;:::-;5619;5636:42;5694:5;5688:4;5680:7;:12;;;;:::i;:::-;5679:20;;;;:::i;:::-;5619:16;:81::i;:::-;5711:80;5728:42;5785:5;5780:3;5772:7;:11;;;;:::i;:::-;5771:19;;;;:::i;:::-;5711:16;:80::i;:::-;5802;5819:42;5876:5;5871:3;5863:7;:11;;;;:::i;:::-;5862:19;;;;:::i;:::-;5802:16;:80::i;:::-;5893;5910:42;5967:5;5962:3;5954:7;:11;;;;:::i;:::-;5953:19;;;;:::i;:::-;5893:16;:80::i;:::-;5984;6001:42;6058:5;6053:3;6045:7;:11;;;;:::i;:::-;6044:19;;;;:::i;:::-;5984:16;:80::i;:::-;6075:79;6092:42;6148:5;6144:2;6136:7;:10;;;;:::i;:::-;6135:18;;;;:::i;:::-;6075:16;:79::i;:::-;6165:80;6182:42;6239:5;6234:3;6226:7;:11;;;;:::i;:::-;6225:19;;;;:::i;:::-;6165:16;:80::i;:::-;6256:81;6273:42;6331:5;6325:4;6317:7;:12;;;;:::i;:::-;6316:20;;;;:::i;:::-;6256:16;:81::i;:::-;6348:80;6365:42;6422:5;6417:3;6409:7;:11;;;;:::i;:::-;6408:19;;;;:::i;:::-;6348:16;:80::i;:::-;6439:81;6456:42;6514:5;6508:4;6500:7;:12;;;;:::i;:::-;6499:20;;;;:::i;:::-;6439:16;:81::i;:::-;6531:79;6548:42;6604:5;6600:2;6592:7;:10;;;;:::i;:::-;6591:18;;;;:::i;:::-;6531:16;:79::i;:::-;5372:1262;5327:1307::o:0;8135:157:4:-;8247:39;8264:4;8270:2;8274:7;8247:39;;;;;;;;;;;;:16;:39::i;:::-;8135:157;;;:::o;2552:177::-;2619:7;2651:13;:11;:13::i;:::-;2643:5;:21;2635:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2718:5;2711:12;;2552:177;;;:::o;4811:103:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4896:10:2::1;4886:7;:20;;;;;;;;;;;;:::i;:::-;;4811:103:::0;:::o;739:30::-;;;;:::o;5377:118:4:-;5441:7;5464:20;5476:7;5464:11;:20::i;:::-;:25;;;5457:32;;5377:118;;;:::o;365:58:2:-;422:1;365:58;:::o;4254:211:4:-;4318:7;4359:1;4342:19;;:5;:19;;;;4334:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4431:12;:19;4444:5;4431:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4423:36;;4416:43;;4254:211;;;:::o;1661:101:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1029:85::-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;5709:98:4:-;5765:13;5794:7;5787:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5709:98;:::o;491:54:2:-;544:1;491:54;:::o;7348:274:4:-;7451:12;:10;:12::i;:::-;7439:24;;:8;:24;;;;7431:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7548:8;7503:18;:32;7522:12;:10;:12::i;:::-;7503:32;;;;;;;;;;;;;;;:42;7536:8;7503:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;7597:8;7568:48;;7583:12;:10;:12::i;:::-;7568:48;;;7607:8;7568:48;;;;;;:::i;:::-;;;;;;;;7348:274;;:::o;3059:862:2:-;3155:13;3181:19;3203:21;3217:6;3203:13;:21::i;:::-;3181:43;;3256:1;3245:10;:12;3237:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;3356:10;3340:11;422:1;3307:44;;;;:::i;:::-;3306:60;;3298:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;3461:1;3446:11;483:1;3417:40;;;;:::i;:::-;3416:46;3412:486;;;692:10;3499;:22;;;;:::i;:::-;3491:30;;3412:486;;;3558:29;3619:11;483:1;3590:40;;;;:::i;:::-;3558:72;;3674:21;3663:10;:32;3659:228;;;692:10;3769:21;3758:10;:32;;;;:::i;:::-;3757:46;;;;:::i;:::-;3746:8;3724:21;:30;;;;:::i;:::-;:79;;;;:::i;:::-;3716:87;;3659:228;;;3863:8;3852:10;:19;;;;:::i;:::-;3844:27;;3659:228;3541:357;3412:486;3170:751;3059:862;;;;;:::o;319:39::-;354:4;319:39;:::o;8355:311:4:-;8492:28;8502:4;8508:2;8512:7;8492:9;:28::i;:::-;8543:48;8566:4;8572:2;8576:7;8585:5;8543:22;:48::i;:::-;8527:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;8355:311;;;;:::o;815:32:2:-;;;:::o;4153:618::-;4271:13;4324:16;4332:7;4324;:16::i;:::-;4302:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;4438:28;4469:10;:8;:10::i;:::-;4438:41;;4600:14;4641:18;:7;:16;:18::i;:::-;4557:159;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4490:245;;;4153:618;;;:::o;5060:255::-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5143:11:2::1;5166:1;5157:8;:10;;;;:::i;:::-;5143:24;;5182:9;5178:83;5207:1;5198:8;:10;;;;:::i;:::-;5196:1;:12;5178:83;;;5228:21;5238:8;5247:1;5228:9;:21::i;:::-;5209:3;;;;;:::i;:::-;;;;5178:83;;;;5281:1;5274:3;:8;5271:36;;5284:23;5294:8;5303:3;5284:9;:23::i;:::-;5271:36;5132:183;5060:255:::0;;:::o;13905:43:4:-;;;;:::o;654:48:2:-;692:10;654:48;:::o;1992:1059::-;2089:11;;;;;;;;;;;2081:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;2160:1;2147:10;:14;2139:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2216:19;2238:25;2252:10;2238:13;:25::i;:::-;2216:47;;2274:12;2289:4;2274:19;;2304:13;2355:15;;2337;:33;2334:53;;;2382:5;2372:15;;2334:53;2403:7;:44;;;;;2414:33;2422:10;2433:5;2439:7;2414;:33::i;:::-;2403:44;2400:312;;;2471:45;2486:10;586;2505;2471:14;:45::i;:::-;2463:53;;2400:312;;;2546:7;:44;;;;;2557:33;2565:10;2576:5;2582:7;2557;:33::i;:::-;2546:44;2543:169;;;2614:45;2629:10;637;2648;2614:14;:45::i;:::-;2606:53;;2543:169;;;2686:26;;;;;;;;;;:::i;:::-;;;;;;;;2543:169;2400:312;422:1;2747:10;2733:11;:24;;;;:::i;:::-;:60;;2725:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;2869:5;2856:9;:18;;2848:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;2964:1;2950:10;2933:13;:11;:13::i;:::-;354:4;2922:24;;;;:::i;:::-;2921:39;;;;:::i;:::-;:44;;2913:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;3007:32;3017:10;3028;3007:9;:32::i;:::-;2070:981;;;1992:1059;;:::o;7685:186:4:-;7807:4;7830:18;:25;7849:5;7830:25;;;;;;;;;;;;;;;:35;7856:8;7830:35;;;;;;;;;;;;;;;;;;;;;;;;;7823:42;;7685:186;;;;:::o;1911:198:11:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;829:155:3:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;8905:105:4:-;8962:4;8992:12;;8982:7;:22;8975:29;;8905:105;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;13727:172:4:-;13851:2;13824:15;:24;13840:7;13824:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;13885:7;13881:2;13865:28;;13874:5;13865:28;;;;;;;;;;;;13727:172;;;:::o;12092:1529::-;12189:35;12227:20;12239:7;12227:11;:20::i;:::-;12189:58;;12256:22;12298:13;:18;;;12282:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;12351:12;:10;:12::i;:::-;12327:36;;:20;12339:7;12327:11;:20::i;:::-;:36;;;12282:81;:142;;;;12374:50;12391:13;:18;;;12411:12;:10;:12::i;:::-;12374:16;:50::i;:::-;12282:142;12256:169;;12450:17;12434:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;12582:4;12560:26;;:13;:18;;;:26;;;12544:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;12671:1;12657:16;;:2;:16;;;;12649:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;12724:43;12746:4;12752:2;12756:7;12765:1;12724:21;:43::i;:::-;12824:49;12841:1;12845:7;12854:13;:18;;;12824:8;:49::i;:::-;12912:1;12882:12;:18;12895:4;12882:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12948:1;12920:12;:16;12933:2;12920:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12979:43;;;;;;;;12994:2;12979:43;;;;;;13005:15;12979:43;;;;;12956:11;:20;12968:7;12956:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13250:19;13282:1;13272:7;:11;;;;:::i;:::-;13250:33;;13335:1;13294:43;;:11;:24;13306:11;13294:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;13290:236;;;13352:20;13360:11;13352:7;:20::i;:::-;13348:171;;;13412:97;;;;;;;;13439:13;:18;;;13412:97;;;;;;13470:13;:28;;;13412:97;;;;;13385:11;:24;13397:11;13385:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13348:171;13290:236;13558:7;13554:2;13539:27;;13548:4;13539:27;;;;;;;;;;;;13573:42;13594:4;13600:2;13604:7;13613:1;13573:20;:42::i;:::-;12182:1439;;;12092:1529;;;:::o;4471:240::-;4532:7;4581:1;4564:19;;:5;:19;;;;4548:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;4672:12;:19;4685:5;4672:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;4664:41;;4657:48;;4471:240;;;:::o;9016:98::-;9081:27;9091:2;9095:8;9081:27;;;;;;;;;;;;:9;:27::i;:::-;9016:98;;:::o;6642:186:2:-;1252:12:11;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6725:12:2::1;6743:2;:7;;6772:6;6743:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6724:69;;;6812:7;6804:16;;;::::0;::::1;;6713:115;6642:186:::0;;:::o;4717:606:4:-;4793:21;;:::i;:::-;4834:16;4842:7;4834;:16::i;:::-;4826:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4906:26;1194:1;4943:7;:23;4939:93;;5023:1;1194;4998:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;4977:47;;4939:93;5045:12;5060:7;5045:22;;5040:212;5077:18;5069:4;:26;5040:212;;5114:31;5148:11;:17;5160:4;5148:17;;;;;;;;;;;5114:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5204:1;5178:28;;:9;:14;;;:28;;;5174:71;;5226:9;5219:16;;;;;;;5174:71;5105:147;5097:6;;;;;:::i;:::-;;;;5040:212;;;;5260:57;;;;;;;;;;:::i;:::-;;;;;;;;4717:606;;;;:::o;2263:187:11:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;15442:690:4:-;15579:4;15596:15;:2;:13;;;:15::i;:::-;15592:535;;;15651:2;15635:36;;;15672:12;:10;:12::i;:::-;15686:4;15692:7;15701:5;15635:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15622:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15883:1;15866:6;:13;:18;15862:215;;;15899:61;;;;;;;;;;:::i;:::-;;;;;;;;15862:215;16045:6;16039:13;16030:6;16026:2;16022:15;16015:38;15622:464;15767:45;;;15757:55;;;:6;:55;;;;15750:62;;;;;15592:535;16115:4;16108:11;;15442:690;;;;;;;:::o;1136:108:2:-;1196:13;1229:7;1222:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1136:108;:::o;328:703:12:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;3935:210:2:-;4032:4;4065:72;4084:5;4090:8;4126;4109:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;4099:37;;;;;;4065:18;:72::i;:::-;4058:79;;3935:210;;;;;:::o;16594:141:4:-;;;;;:::o;17121:140::-;;;;;:::o;9453:2108::-;9558:20;9581:12;;9558:35;;9622:1;9608:16;;:2;:16;;;;9600:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9705:14;9693:8;9677:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;9669:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;9893:21;9901:12;9893:7;:21::i;:::-;9892:22;9884:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;1194:1;9963:8;:24;;9955:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10035:61;10065:1;10069:2;10073:12;10087:8;10035:21;:61::i;:::-;10105:30;10138:12;:16;10151:2;10138:16;;;;;;;;;;;;;;;10105:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10180:119;;;;;;;;10230:8;10200:11;:19;;;:39;;;;:::i;:::-;10180:119;;;;;;10283:8;10248:11;:24;;;:44;;;;:::i;:::-;10180:119;;;;;10161:12;:16;10174:2;10161:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10334:43;;;;;;;;10349:2;10334:43;;;;;;10360:15;10334:43;;;;;10306:11;:25;10318:12;10306:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10386:20;10409:12;10386:35;;10453:1;10441:8;:13;10438:981;;;10466:33;10475:2;10478:14;;;;;:::i;:::-;;;10493:5;10466:8;:33::i;:::-;10438:981;;;10557:1;10545:8;:13;10542:877;;;10570:33;10579:2;10582:14;;;;;:::i;:::-;;;10597:5;10570:8;:33::i;:::-;10624;10633:2;10636:14;;;;;:::i;:::-;;;10651:5;10624:8;:33::i;:::-;10542:877;;;10705:1;10693:8;:13;10690:729;;;10718:33;10727:2;10730:14;;;;;:::i;:::-;;;10745:5;10718:8;:33::i;:::-;10764;10773:2;10776:14;;;;;:::i;:::-;;;10791:5;10764:8;:33::i;:::-;10818;10827:2;10830:14;;;;;:::i;:::-;;;10845:5;10818:8;:33::i;:::-;10690:729;;;10899:1;10887:8;:13;10884:535;;;10912:33;10921:2;10924:14;;;;;:::i;:::-;;;10939:5;10912:8;:33::i;:::-;10966;10975:2;10978:14;;;;;:::i;:::-;;;10993:5;10966:8;:33::i;:::-;11020;11029:2;11032:14;;;;;:::i;:::-;;;11047:5;11020:8;:33::i;:::-;11074;11083:2;11086:14;;;;;:::i;:::-;;;11101:5;11074:8;:33::i;:::-;10884:535;;;11150:33;11159:2;11162:14;;;;;:::i;:::-;;;11177:5;11150:8;:33::i;:::-;11204;11213:2;11216:14;;;;;:::i;:::-;;;11231:5;11204:8;:33::i;:::-;11258;11267:2;11270:14;;;;;:::i;:::-;;;11285:5;11258:8;:33::i;:::-;11312;11321:2;11324:14;;;;;:::i;:::-;;;11339:5;11312:8;:33::i;:::-;11366;11375:2;11378:14;;;;;:::i;:::-;;;11393:5;11366:8;:33::i;:::-;10884:535;10690:729;10542:877;10438:981;11469:12;11451:17;11444:38;11495:60;11524:1;11528:2;11532:12;11546:8;11495:20;:60::i;:::-;9551:2010;;;9453:2108;;;:::o;1175:320:0:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;862:184:10:-;983:4;1035;1006:25;1019:5;1026:4;1006:12;:25::i;:::-;:33;999:40;;862:184;;;;;:::o;11569:287:4:-;11680:7;11676:2;11655:33;;11672:1;11655:33;;;;;;;;;;;;11715:54;11746:1;11750:2;11754:7;11763:5;11715:22;:54::i;:::-;11697:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;11569:287;;;:::o;1398:662:10:-;1481:7;1500:20;1523:4;1500:27;;1542:9;1537:488;1561:5;:12;1557:1;:16;1537:488;;;1594:20;1617:5;1623:1;1617:8;;;;;;;;:::i;:::-;;;;;;;;1594:31;;1659:12;1643;:28;1639:376;;1784:42;1799:12;1813;1784:14;:42::i;:::-;1769:57;;1639:376;;;1958:42;1973:12;1987;1958:14;:42::i;:::-;1943:57;;1639:376;1580:445;1575:3;;;;;:::i;:::-;;;;1537:488;;;;2041:12;2034:19;;;1398:662;;;;:::o;2066:218::-;2134:13;2195:1;2189:4;2182:15;2223:1;2217:4;2210:15;2263:4;2257;2247:21;2238:30;;2066:218;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:13:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:139::-;2309:5;2347:6;2334:20;2325:29;;2363:33;2390:5;2363:33;:::i;:::-;2263:139;;;;:::o;2408:137::-;2453:5;2491:6;2478:20;2469:29;;2507:32;2533:5;2507:32;:::i;:::-;2408:137;;;;:::o;2551:141::-;2607:5;2638:6;2632:13;2623:22;;2654:32;2680:5;2654:32;:::i;:::-;2551:141;;;;:::o;2711:338::-;2766:5;2815:3;2808:4;2800:6;2796:17;2792:27;2782:122;;2823:79;;:::i;:::-;2782:122;2940:6;2927:20;2965:78;3039:3;3031:6;3024:4;3016:6;3012:17;2965:78;:::i;:::-;2956:87;;2772:277;2711:338;;;;:::o;3069:340::-;3125:5;3174:3;3167:4;3159:6;3155:17;3151:27;3141:122;;3182:79;;:::i;:::-;3141:122;3299:6;3286:20;3324:79;3399:3;3391:6;3384:4;3376:6;3372:17;3324:79;:::i;:::-;3315:88;;3131:278;3069:340;;;;:::o;3415:139::-;3461:5;3499:6;3486:20;3477:29;;3515:33;3542:5;3515:33;:::i;:::-;3415:139;;;;:::o;3560:329::-;3619:6;3668:2;3656:9;3647:7;3643:23;3639:32;3636:119;;;3674:79;;:::i;:::-;3636:119;3794:1;3819:53;3864:7;3855:6;3844:9;3840:22;3819:53;:::i;:::-;3809:63;;3765:117;3560:329;;;;:::o;3895:474::-;3963:6;3971;4020:2;4008:9;3999:7;3995:23;3991:32;3988:119;;;4026:79;;:::i;:::-;3988:119;4146:1;4171:53;4216:7;4207:6;4196:9;4192:22;4171:53;:::i;:::-;4161:63;;4117:117;4273:2;4299:53;4344:7;4335:6;4324:9;4320:22;4299:53;:::i;:::-;4289:63;;4244:118;3895:474;;;;;:::o;4375:619::-;4452:6;4460;4468;4517:2;4505:9;4496:7;4492:23;4488:32;4485:119;;;4523:79;;:::i;:::-;4485:119;4643:1;4668:53;4713:7;4704:6;4693:9;4689:22;4668:53;:::i;:::-;4658:63;;4614:117;4770:2;4796:53;4841:7;4832:6;4821:9;4817:22;4796:53;:::i;:::-;4786:63;;4741:118;4898:2;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4869:118;4375:619;;;;;:::o;5000:943::-;5095:6;5103;5111;5119;5168:3;5156:9;5147:7;5143:23;5139:33;5136:120;;;5175:79;;:::i;:::-;5136:120;5295:1;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5266:117;5422:2;5448:53;5493:7;5484:6;5473:9;5469:22;5448:53;:::i;:::-;5438:63;;5393:118;5550:2;5576:53;5621:7;5612:6;5601:9;5597:22;5576:53;:::i;:::-;5566:63;;5521:118;5706:2;5695:9;5691:18;5678:32;5737:18;5729:6;5726:30;5723:117;;;5759:79;;:::i;:::-;5723:117;5864:62;5918:7;5909:6;5898:9;5894:22;5864:62;:::i;:::-;5854:72;;5649:287;5000:943;;;;;;;:::o;5949:468::-;6014:6;6022;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:53;6267:7;6258:6;6247:9;6243:22;6222:53;:::i;:::-;6212:63;;6168:117;6324:2;6350:50;6392:7;6383:6;6372:9;6368:22;6350:50;:::i;:::-;6340:60;;6295:115;5949:468;;;;;:::o;6423:474::-;6491:6;6499;6548:2;6536:9;6527:7;6523:23;6519:32;6516:119;;;6554:79;;:::i;:::-;6516:119;6674:1;6699:53;6744:7;6735:6;6724:9;6720:22;6699:53;:::i;:::-;6689:63;;6645:117;6801:2;6827:53;6872:7;6863:6;6852:9;6848:22;6827:53;:::i;:::-;6817:63;;6772:118;6423:474;;;;;:::o;6903:327::-;6961:6;7010:2;6998:9;6989:7;6985:23;6981:32;6978:119;;;7016:79;;:::i;:::-;6978:119;7136:1;7161:52;7205:7;7196:6;7185:9;7181:22;7161:52;:::i;:::-;7151:62;;7107:116;6903:327;;;;:::o;7236:349::-;7305:6;7354:2;7342:9;7333:7;7329:23;7325:32;7322:119;;;7360:79;;:::i;:::-;7322:119;7480:1;7505:63;7560:7;7551:6;7540:9;7536:22;7505:63;:::i;:::-;7495:73;;7451:127;7236:349;;;;:::o;7591:509::-;7660:6;7709:2;7697:9;7688:7;7684:23;7680:32;7677:119;;;7715:79;;:::i;:::-;7677:119;7863:1;7852:9;7848:17;7835:31;7893:18;7885:6;7882:30;7879:117;;;7915:79;;:::i;:::-;7879:117;8020:63;8075:7;8066:6;8055:9;8051:22;8020:63;:::i;:::-;8010:73;;7806:287;7591:509;;;;:::o;8106:329::-;8165:6;8214:2;8202:9;8193:7;8189:23;8185:32;8182:119;;;8220:79;;:::i;:::-;8182:119;8340:1;8365:53;8410:7;8401:6;8390:9;8386:22;8365:53;:::i;:::-;8355:63;;8311:117;8106:329;;;;:::o;8441:474::-;8509:6;8517;8566:2;8554:9;8545:7;8541:23;8537:32;8534:119;;;8572:79;;:::i;:::-;8534:119;8692:1;8717:53;8762:7;8753:6;8742:9;8738:22;8717:53;:::i;:::-;8707:63;;8663:117;8819:2;8845:53;8890:7;8881:6;8870:9;8866:22;8845:53;:::i;:::-;8835:63;;8790:118;8441:474;;;;;:::o;8921:684::-;9014:6;9022;9071:2;9059:9;9050:7;9046:23;9042:32;9039:119;;;9077:79;;:::i;:::-;9039:119;9197:1;9222:53;9267:7;9258:6;9247:9;9243:22;9222:53;:::i;:::-;9212:63;;9168:117;9352:2;9341:9;9337:18;9324:32;9383:18;9375:6;9372:30;9369:117;;;9405:79;;:::i;:::-;9369:117;9510:78;9580:7;9571:6;9560:9;9556:22;9510:78;:::i;:::-;9500:88;;9295:303;8921:684;;;;;:::o;9611:619::-;9688:6;9696;9704;9753:2;9741:9;9732:7;9728:23;9724:32;9721:119;;;9759:79;;:::i;:::-;9721:119;9879:1;9904:53;9949:7;9940:6;9929:9;9925:22;9904:53;:::i;:::-;9894:63;;9850:117;10006:2;10032:53;10077:7;10068:6;10057:9;10053:22;10032:53;:::i;:::-;10022:63;;9977:118;10134:2;10160:53;10205:7;10196:6;10185:9;10181:22;10160:53;:::i;:::-;10150:63;;10105:118;9611:619;;;;;:::o;10236:118::-;10323:24;10341:5;10323:24;:::i;:::-;10318:3;10311:37;10236:118;;:::o;10360:157::-;10465:45;10485:24;10503:5;10485:24;:::i;:::-;10465:45;:::i;:::-;10460:3;10453:58;10360:157;;:::o;10523:109::-;10604:21;10619:5;10604:21;:::i;:::-;10599:3;10592:34;10523:109;;:::o;10638:118::-;10725:24;10743:5;10725:24;:::i;:::-;10720:3;10713:37;10638:118;;:::o;10762:360::-;10848:3;10876:38;10908:5;10876:38;:::i;:::-;10930:70;10993:6;10988:3;10930:70;:::i;:::-;10923:77;;11009:52;11054:6;11049:3;11042:4;11035:5;11031:16;11009:52;:::i;:::-;11086:29;11108:6;11086:29;:::i;:::-;11081:3;11077:39;11070:46;;10852:270;10762:360;;;;:::o;11128:364::-;11216:3;11244:39;11277:5;11244:39;:::i;:::-;11299:71;11363:6;11358:3;11299:71;:::i;:::-;11292:78;;11379:52;11424:6;11419:3;11412:4;11405:5;11401:16;11379:52;:::i;:::-;11456:29;11478:6;11456:29;:::i;:::-;11451:3;11447:39;11440:46;;11220:272;11128:364;;;;:::o;11498:377::-;11604:3;11632:39;11665:5;11632:39;:::i;:::-;11687:89;11769:6;11764:3;11687:89;:::i;:::-;11680:96;;11785:52;11830:6;11825:3;11818:4;11811:5;11807:16;11785:52;:::i;:::-;11862:6;11857:3;11853:16;11846:23;;11608:267;11498:377;;;;:::o;11881:366::-;12023:3;12044:67;12108:2;12103:3;12044:67;:::i;:::-;12037:74;;12120:93;12209:3;12120:93;:::i;:::-;12238:2;12233:3;12229:12;12222:19;;11881:366;;;:::o;12253:::-;12395:3;12416:67;12480:2;12475:3;12416:67;:::i;:::-;12409:74;;12492:93;12581:3;12492:93;:::i;:::-;12610:2;12605:3;12601:12;12594:19;;12253:366;;;:::o;12625:::-;12767:3;12788:67;12852:2;12847:3;12788:67;:::i;:::-;12781:74;;12864:93;12953:3;12864:93;:::i;:::-;12982:2;12977:3;12973:12;12966:19;;12625:366;;;:::o;12997:::-;13139:3;13160:67;13224:2;13219:3;13160:67;:::i;:::-;13153:74;;13236:93;13325:3;13236:93;:::i;:::-;13354:2;13349:3;13345:12;13338:19;;12997:366;;;:::o;13369:::-;13511:3;13532:67;13596:2;13591:3;13532:67;:::i;:::-;13525:74;;13608:93;13697:3;13608:93;:::i;:::-;13726:2;13721:3;13717:12;13710:19;;13369:366;;;:::o;13741:::-;13883:3;13904:67;13968:2;13963:3;13904:67;:::i;:::-;13897:74;;13980:93;14069:3;13980:93;:::i;:::-;14098:2;14093:3;14089:12;14082:19;;13741:366;;;:::o;14113:::-;14255:3;14276:67;14340:2;14335:3;14276:67;:::i;:::-;14269:74;;14352:93;14441:3;14352:93;:::i;:::-;14470:2;14465:3;14461:12;14454:19;;14113:366;;;:::o;14485:::-;14627:3;14648:67;14712:2;14707:3;14648:67;:::i;:::-;14641:74;;14724:93;14813:3;14724:93;:::i;:::-;14842:2;14837:3;14833:12;14826:19;;14485:366;;;:::o;14857:::-;14999:3;15020:67;15084:2;15079:3;15020:67;:::i;:::-;15013:74;;15096:93;15185:3;15096:93;:::i;:::-;15214:2;15209:3;15205:12;15198:19;;14857:366;;;:::o;15229:::-;15371:3;15392:67;15456:2;15451:3;15392:67;:::i;:::-;15385:74;;15468:93;15557:3;15468:93;:::i;:::-;15586:2;15581:3;15577:12;15570:19;;15229:366;;;:::o;15601:::-;15743:3;15764:67;15828:2;15823:3;15764:67;:::i;:::-;15757:74;;15840:93;15929:3;15840:93;:::i;:::-;15958:2;15953:3;15949:12;15942:19;;15601:366;;;:::o;15973:::-;16115:3;16136:67;16200:2;16195:3;16136:67;:::i;:::-;16129:74;;16212:93;16301:3;16212:93;:::i;:::-;16330:2;16325:3;16321:12;16314:19;;15973:366;;;:::o;16345:::-;16487:3;16508:67;16572:2;16567:3;16508:67;:::i;:::-;16501:74;;16584:93;16673:3;16584:93;:::i;:::-;16702:2;16697:3;16693:12;16686:19;;16345:366;;;:::o;16717:400::-;16877:3;16898:84;16980:1;16975:3;16898:84;:::i;:::-;16891:91;;16991:93;17080:3;16991:93;:::i;:::-;17109:1;17104:3;17100:11;17093:18;;16717:400;;;:::o;17123:366::-;17265:3;17286:67;17350:2;17345:3;17286:67;:::i;:::-;17279:74;;17362:93;17451:3;17362:93;:::i;:::-;17480:2;17475:3;17471:12;17464:19;;17123:366;;;:::o;17495:::-;17637:3;17658:67;17722:2;17717:3;17658:67;:::i;:::-;17651:74;;17734:93;17823:3;17734:93;:::i;:::-;17852:2;17847:3;17843:12;17836:19;;17495:366;;;:::o;17867:::-;18009:3;18030:67;18094:2;18089:3;18030:67;:::i;:::-;18023:74;;18106:93;18195:3;18106:93;:::i;:::-;18224:2;18219:3;18215:12;18208:19;;17867:366;;;:::o;18239:::-;18381:3;18402:67;18466:2;18461:3;18402:67;:::i;:::-;18395:74;;18478:93;18567:3;18478:93;:::i;:::-;18596:2;18591:3;18587:12;18580:19;;18239:366;;;:::o;18611:::-;18753:3;18774:67;18838:2;18833:3;18774:67;:::i;:::-;18767:74;;18850:93;18939:3;18850:93;:::i;:::-;18968:2;18963:3;18959:12;18952:19;;18611:366;;;:::o;18983:::-;19125:3;19146:67;19210:2;19205:3;19146:67;:::i;:::-;19139:74;;19222:93;19311:3;19222:93;:::i;:::-;19340:2;19335:3;19331:12;19324:19;;18983:366;;;:::o;19355:::-;19497:3;19518:67;19582:2;19577:3;19518:67;:::i;:::-;19511:74;;19594:93;19683:3;19594:93;:::i;:::-;19712:2;19707:3;19703:12;19696:19;;19355:366;;;:::o;19727:398::-;19886:3;19907:83;19988:1;19983:3;19907:83;:::i;:::-;19900:90;;19999:93;20088:3;19999:93;:::i;:::-;20117:1;20112:3;20108:11;20101:18;;19727:398;;;:::o;20131:366::-;20273:3;20294:67;20358:2;20353:3;20294:67;:::i;:::-;20287:74;;20370:93;20459:3;20370:93;:::i;:::-;20488:2;20483:3;20479:12;20472:19;;20131:366;;;:::o;20503:::-;20645:3;20666:67;20730:2;20725:3;20666:67;:::i;:::-;20659:74;;20742:93;20831:3;20742:93;:::i;:::-;20860:2;20855:3;20851:12;20844:19;;20503:366;;;:::o;20875:::-;21017:3;21038:67;21102:2;21097:3;21038:67;:::i;:::-;21031:74;;21114:93;21203:3;21114:93;:::i;:::-;21232:2;21227:3;21223:12;21216:19;;20875:366;;;:::o;21247:::-;21389:3;21410:67;21474:2;21469:3;21410:67;:::i;:::-;21403:74;;21486:93;21575:3;21486:93;:::i;:::-;21604:2;21599:3;21595:12;21588:19;;21247:366;;;:::o;21619:::-;21761:3;21782:67;21846:2;21841:3;21782:67;:::i;:::-;21775:74;;21858:93;21947:3;21858:93;:::i;:::-;21976:2;21971:3;21967:12;21960:19;;21619:366;;;:::o;21991:::-;22133:3;22154:67;22218:2;22213:3;22154:67;:::i;:::-;22147:74;;22230:93;22319:3;22230:93;:::i;:::-;22348:2;22343:3;22339:12;22332:19;;21991:366;;;:::o;22363:::-;22505:3;22526:67;22590:2;22585:3;22526:67;:::i;:::-;22519:74;;22602:93;22691:3;22602:93;:::i;:::-;22720:2;22715:3;22711:12;22704:19;;22363:366;;;:::o;22735:::-;22877:3;22898:67;22962:2;22957:3;22898:67;:::i;:::-;22891:74;;22974:93;23063:3;22974:93;:::i;:::-;23092:2;23087:3;23083:12;23076:19;;22735:366;;;:::o;23107:::-;23249:3;23270:67;23334:2;23329:3;23270:67;:::i;:::-;23263:74;;23346:93;23435:3;23346:93;:::i;:::-;23464:2;23459:3;23455:12;23448:19;;23107:366;;;:::o;23479:118::-;23566:24;23584:5;23566:24;:::i;:::-;23561:3;23554:37;23479:118;;:::o;23603:256::-;23715:3;23730:75;23801:3;23792:6;23730:75;:::i;:::-;23830:2;23825:3;23821:12;23814:19;;23850:3;23843:10;;23603:256;;;;:::o;23865:701::-;24146:3;24168:95;24259:3;24250:6;24168:95;:::i;:::-;24161:102;;24280:95;24371:3;24362:6;24280:95;:::i;:::-;24273:102;;24392:148;24536:3;24392:148;:::i;:::-;24385:155;;24557:3;24550:10;;23865:701;;;;;:::o;24572:379::-;24756:3;24778:147;24921:3;24778:147;:::i;:::-;24771:154;;24942:3;24935:10;;24572:379;;;:::o;24957:222::-;25050:4;25088:2;25077:9;25073:18;25065:26;;25101:71;25169:1;25158:9;25154:17;25145:6;25101:71;:::i;:::-;24957:222;;;;:::o;25185:640::-;25380:4;25418:3;25407:9;25403:19;25395:27;;25432:71;25500:1;25489:9;25485:17;25476:6;25432:71;:::i;:::-;25513:72;25581:2;25570:9;25566:18;25557:6;25513:72;:::i;:::-;25595;25663:2;25652:9;25648:18;25639:6;25595:72;:::i;:::-;25714:9;25708:4;25704:20;25699:2;25688:9;25684:18;25677:48;25742:76;25813:4;25804:6;25742:76;:::i;:::-;25734:84;;25185:640;;;;;;;:::o;25831:210::-;25918:4;25956:2;25945:9;25941:18;25933:26;;25969:65;26031:1;26020:9;26016:17;26007:6;25969:65;:::i;:::-;25831:210;;;;:::o;26047:222::-;26140:4;26178:2;26167:9;26163:18;26155:26;;26191:71;26259:1;26248:9;26244:17;26235:6;26191:71;:::i;:::-;26047:222;;;;:::o;26275:313::-;26388:4;26426:2;26415:9;26411:18;26403:26;;26475:9;26469:4;26465:20;26461:1;26450:9;26446:17;26439:47;26503:78;26576:4;26567:6;26503:78;:::i;:::-;26495:86;;26275:313;;;;:::o;26594:419::-;26760:4;26798:2;26787:9;26783:18;26775:26;;26847:9;26841:4;26837:20;26833:1;26822:9;26818:17;26811:47;26875:131;27001:4;26875:131;:::i;:::-;26867:139;;26594:419;;;:::o;27019:::-;27185:4;27223:2;27212:9;27208:18;27200:26;;27272:9;27266:4;27262:20;27258:1;27247:9;27243:17;27236:47;27300:131;27426:4;27300:131;:::i;:::-;27292:139;;27019:419;;;:::o;27444:::-;27610:4;27648:2;27637:9;27633:18;27625:26;;27697:9;27691:4;27687:20;27683:1;27672:9;27668:17;27661:47;27725:131;27851:4;27725:131;:::i;:::-;27717:139;;27444:419;;;:::o;27869:::-;28035:4;28073:2;28062:9;28058:18;28050:26;;28122:9;28116:4;28112:20;28108:1;28097:9;28093:17;28086:47;28150:131;28276:4;28150:131;:::i;:::-;28142:139;;27869:419;;;:::o;28294:::-;28460:4;28498:2;28487:9;28483:18;28475:26;;28547:9;28541:4;28537:20;28533:1;28522:9;28518:17;28511:47;28575:131;28701:4;28575:131;:::i;:::-;28567:139;;28294:419;;;:::o;28719:::-;28885:4;28923:2;28912:9;28908:18;28900:26;;28972:9;28966:4;28962:20;28958:1;28947:9;28943:17;28936:47;29000:131;29126:4;29000:131;:::i;:::-;28992:139;;28719:419;;;:::o;29144:::-;29310:4;29348:2;29337:9;29333:18;29325:26;;29397:9;29391:4;29387:20;29383:1;29372:9;29368:17;29361:47;29425:131;29551:4;29425:131;:::i;:::-;29417:139;;29144:419;;;:::o;29569:::-;29735:4;29773:2;29762:9;29758:18;29750:26;;29822:9;29816:4;29812:20;29808:1;29797:9;29793:17;29786:47;29850:131;29976:4;29850:131;:::i;:::-;29842:139;;29569:419;;;:::o;29994:::-;30160:4;30198:2;30187:9;30183:18;30175:26;;30247:9;30241:4;30237:20;30233:1;30222:9;30218:17;30211:47;30275:131;30401:4;30275:131;:::i;:::-;30267:139;;29994:419;;;:::o;30419:::-;30585:4;30623:2;30612:9;30608:18;30600:26;;30672:9;30666:4;30662:20;30658:1;30647:9;30643:17;30636:47;30700:131;30826:4;30700:131;:::i;:::-;30692:139;;30419:419;;;:::o;30844:::-;31010:4;31048:2;31037:9;31033:18;31025:26;;31097:9;31091:4;31087:20;31083:1;31072:9;31068:17;31061:47;31125:131;31251:4;31125:131;:::i;:::-;31117:139;;30844:419;;;:::o;31269:::-;31435:4;31473:2;31462:9;31458:18;31450:26;;31522:9;31516:4;31512:20;31508:1;31497:9;31493:17;31486:47;31550:131;31676:4;31550:131;:::i;:::-;31542:139;;31269:419;;;:::o;31694:::-;31860:4;31898:2;31887:9;31883:18;31875:26;;31947:9;31941:4;31937:20;31933:1;31922:9;31918:17;31911:47;31975:131;32101:4;31975:131;:::i;:::-;31967:139;;31694:419;;;:::o;32119:::-;32285:4;32323:2;32312:9;32308:18;32300:26;;32372:9;32366:4;32362:20;32358:1;32347:9;32343:17;32336:47;32400:131;32526:4;32400:131;:::i;:::-;32392:139;;32119:419;;;:::o;32544:::-;32710:4;32748:2;32737:9;32733:18;32725:26;;32797:9;32791:4;32787:20;32783:1;32772:9;32768:17;32761:47;32825:131;32951:4;32825:131;:::i;:::-;32817:139;;32544:419;;;:::o;32969:::-;33135:4;33173:2;33162:9;33158:18;33150:26;;33222:9;33216:4;33212:20;33208:1;33197:9;33193:17;33186:47;33250:131;33376:4;33250:131;:::i;:::-;33242:139;;32969:419;;;:::o;33394:::-;33560:4;33598:2;33587:9;33583:18;33575:26;;33647:9;33641:4;33637:20;33633:1;33622:9;33618:17;33611:47;33675:131;33801:4;33675:131;:::i;:::-;33667:139;;33394:419;;;:::o;33819:::-;33985:4;34023:2;34012:9;34008:18;34000:26;;34072:9;34066:4;34062:20;34058:1;34047:9;34043:17;34036:47;34100:131;34226:4;34100:131;:::i;:::-;34092:139;;33819:419;;;:::o;34244:::-;34410:4;34448:2;34437:9;34433:18;34425:26;;34497:9;34491:4;34487:20;34483:1;34472:9;34468:17;34461:47;34525:131;34651:4;34525:131;:::i;:::-;34517:139;;34244:419;;;:::o;34669:::-;34835:4;34873:2;34862:9;34858:18;34850:26;;34922:9;34916:4;34912:20;34908:1;34897:9;34893:17;34886:47;34950:131;35076:4;34950:131;:::i;:::-;34942:139;;34669:419;;;:::o;35094:::-;35260:4;35298:2;35287:9;35283:18;35275:26;;35347:9;35341:4;35337:20;35333:1;35322:9;35318:17;35311:47;35375:131;35501:4;35375:131;:::i;:::-;35367:139;;35094:419;;;:::o;35519:::-;35685:4;35723:2;35712:9;35708:18;35700:26;;35772:9;35766:4;35762:20;35758:1;35747:9;35743:17;35736:47;35800:131;35926:4;35800:131;:::i;:::-;35792:139;;35519:419;;;:::o;35944:::-;36110:4;36148:2;36137:9;36133:18;36125:26;;36197:9;36191:4;36187:20;36183:1;36172:9;36168:17;36161:47;36225:131;36351:4;36225:131;:::i;:::-;36217:139;;35944:419;;;:::o;36369:::-;36535:4;36573:2;36562:9;36558:18;36550:26;;36622:9;36616:4;36612:20;36608:1;36597:9;36593:17;36586:47;36650:131;36776:4;36650:131;:::i;:::-;36642:139;;36369:419;;;:::o;36794:::-;36960:4;36998:2;36987:9;36983:18;36975:26;;37047:9;37041:4;37037:20;37033:1;37022:9;37018:17;37011:47;37075:131;37201:4;37075:131;:::i;:::-;37067:139;;36794:419;;;:::o;37219:::-;37385:4;37423:2;37412:9;37408:18;37400:26;;37472:9;37466:4;37462:20;37458:1;37447:9;37443:17;37436:47;37500:131;37626:4;37500:131;:::i;:::-;37492:139;;37219:419;;;:::o;37644:::-;37810:4;37848:2;37837:9;37833:18;37825:26;;37897:9;37891:4;37887:20;37883:1;37872:9;37868:17;37861:47;37925:131;38051:4;37925:131;:::i;:::-;37917:139;;37644:419;;;:::o;38069:::-;38235:4;38273:2;38262:9;38258:18;38250:26;;38322:9;38316:4;38312:20;38308:1;38297:9;38293:17;38286:47;38350:131;38476:4;38350:131;:::i;:::-;38342:139;;38069:419;;;:::o;38494:::-;38660:4;38698:2;38687:9;38683:18;38675:26;;38747:9;38741:4;38737:20;38733:1;38722:9;38718:17;38711:47;38775:131;38901:4;38775:131;:::i;:::-;38767:139;;38494:419;;;:::o;38919:222::-;39012:4;39050:2;39039:9;39035:18;39027:26;;39063:71;39131:1;39120:9;39116:17;39107:6;39063:71;:::i;:::-;38919:222;;;;:::o;39147:129::-;39181:6;39208:20;;:::i;:::-;39198:30;;39237:33;39265:4;39257:6;39237:33;:::i;:::-;39147:129;;;:::o;39282:75::-;39315:6;39348:2;39342:9;39332:19;;39282:75;:::o;39363:311::-;39440:4;39530:18;39522:6;39519:30;39516:56;;;39552:18;;:::i;:::-;39516:56;39602:4;39594:6;39590:17;39582:25;;39662:4;39656;39652:15;39644:23;;39363:311;;;:::o;39680:307::-;39741:4;39831:18;39823:6;39820:30;39817:56;;;39853:18;;:::i;:::-;39817:56;39891:29;39913:6;39891:29;:::i;:::-;39883:37;;39975:4;39969;39965:15;39957:23;;39680:307;;;:::o;39993:308::-;40055:4;40145:18;40137:6;40134:30;40131:56;;;40167:18;;:::i;:::-;40131:56;40205:29;40227:6;40205:29;:::i;:::-;40197:37;;40289:4;40283;40279:15;40271:23;;39993:308;;;:::o;40307:98::-;40358:6;40392:5;40386:12;40376:22;;40307:98;;;:::o;40411:99::-;40463:6;40497:5;40491:12;40481:22;;40411:99;;;:::o;40516:168::-;40599:11;40633:6;40628:3;40621:19;40673:4;40668:3;40664:14;40649:29;;40516:168;;;;:::o;40690:147::-;40791:11;40828:3;40813:18;;40690:147;;;;:::o;40843:169::-;40927:11;40961:6;40956:3;40949:19;41001:4;40996:3;40992:14;40977:29;;40843:169;;;;:::o;41018:148::-;41120:11;41157:3;41142:18;;41018:148;;;;:::o;41172:273::-;41212:3;41231:20;41249:1;41231:20;:::i;:::-;41226:25;;41265:20;41283:1;41265:20;:::i;:::-;41260:25;;41387:1;41351:34;41347:42;41344:1;41341:49;41338:75;;;41393:18;;:::i;:::-;41338:75;41437:1;41434;41430:9;41423:16;;41172:273;;;;:::o;41451:305::-;41491:3;41510:20;41528:1;41510:20;:::i;:::-;41505:25;;41544:20;41562:1;41544:20;:::i;:::-;41539:25;;41698:1;41630:66;41626:74;41623:1;41620:81;41617:107;;;41704:18;;:::i;:::-;41617:107;41748:1;41745;41741:9;41734:16;;41451:305;;;;:::o;41762:185::-;41802:1;41819:20;41837:1;41819:20;:::i;:::-;41814:25;;41853:20;41871:1;41853:20;:::i;:::-;41848:25;;41892:1;41882:35;;41897:18;;:::i;:::-;41882:35;41939:1;41936;41932:9;41927:14;;41762:185;;;;:::o;41953:348::-;41993:7;42016:20;42034:1;42016:20;:::i;:::-;42011:25;;42050:20;42068:1;42050:20;:::i;:::-;42045:25;;42238:1;42170:66;42166:74;42163:1;42160:81;42155:1;42148:9;42141:17;42137:105;42134:131;;;42245:18;;:::i;:::-;42134:131;42293:1;42290;42286:9;42275:20;;41953:348;;;;:::o;42307:191::-;42347:4;42367:20;42385:1;42367:20;:::i;:::-;42362:25;;42401:20;42419:1;42401:20;:::i;:::-;42396:25;;42440:1;42437;42434:8;42431:34;;;42445:18;;:::i;:::-;42431:34;42490:1;42487;42483:9;42475:17;;42307:191;;;;:::o;42504:::-;42544:4;42564:20;42582:1;42564:20;:::i;:::-;42559:25;;42598:20;42616:1;42598:20;:::i;:::-;42593:25;;42637:1;42634;42631:8;42628:34;;;42642:18;;:::i;:::-;42628:34;42687:1;42684;42680:9;42672:17;;42504:191;;;;:::o;42701:96::-;42738:7;42767:24;42785:5;42767:24;:::i;:::-;42756:35;;42701:96;;;:::o;42803:90::-;42837:7;42880:5;42873:13;42866:21;42855:32;;42803:90;;;:::o;42899:77::-;42936:7;42965:5;42954:16;;42899:77;;;:::o;42982:149::-;43018:7;43058:66;43051:5;43047:78;43036:89;;42982:149;;;:::o;43137:118::-;43174:7;43214:34;43207:5;43203:46;43192:57;;43137:118;;;:::o;43261:126::-;43298:7;43338:42;43331:5;43327:54;43316:65;;43261:126;;;:::o;43393:77::-;43430:7;43459:5;43448:16;;43393:77;;;:::o;43476:154::-;43560:6;43555:3;43550;43537:30;43622:1;43613:6;43608:3;43604:16;43597:27;43476:154;;;:::o;43636:307::-;43704:1;43714:113;43728:6;43725:1;43722:13;43714:113;;;43813:1;43808:3;43804:11;43798:18;43794:1;43789:3;43785:11;43778:39;43750:2;43747:1;43743:10;43738:15;;43714:113;;;43845:6;43842:1;43839:13;43836:101;;;43925:1;43916:6;43911:3;43907:16;43900:27;43836:101;43685:258;43636:307;;;:::o;43949:171::-;43988:3;44011:24;44029:5;44011:24;:::i;:::-;44002:33;;44057:4;44050:5;44047:15;44044:41;;;44065:18;;:::i;:::-;44044:41;44112:1;44105:5;44101:13;44094:20;;43949:171;;;:::o;44126:320::-;44170:6;44207:1;44201:4;44197:12;44187:22;;44254:1;44248:4;44244:12;44275:18;44265:81;;44331:4;44323:6;44319:17;44309:27;;44265:81;44393:2;44385:6;44382:14;44362:18;44359:38;44356:84;;;44412:18;;:::i;:::-;44356:84;44177:269;44126:320;;;:::o;44452:281::-;44535:27;44557:4;44535:27;:::i;:::-;44527:6;44523:40;44665:6;44653:10;44650:22;44629:18;44617:10;44614:34;44611:62;44608:88;;;44676:18;;:::i;:::-;44608:88;44716:10;44712:2;44705:22;44495:238;44452:281;;:::o;44739:233::-;44778:3;44801:24;44819:5;44801:24;:::i;:::-;44792:33;;44847:66;44840:5;44837:77;44834:103;;;44917:18;;:::i;:::-;44834:103;44964:1;44957:5;44953:13;44946:20;;44739:233;;;:::o;44978:100::-;45017:7;45046:26;45066:5;45046:26;:::i;:::-;45035:37;;44978:100;;;:::o;45084:94::-;45123:7;45152:20;45166:5;45152:20;:::i;:::-;45141:31;;45084:94;;;:::o;45184:176::-;45216:1;45233:20;45251:1;45233:20;:::i;:::-;45228:25;;45267:20;45285:1;45267:20;:::i;:::-;45262:25;;45306:1;45296:35;;45311:18;;:::i;:::-;45296:35;45352:1;45349;45345:9;45340:14;;45184:176;;;;:::o;45366:180::-;45414:77;45411:1;45404:88;45511:4;45508:1;45501:15;45535:4;45532:1;45525:15;45552:180;45600:77;45597:1;45590:88;45697:4;45694:1;45687:15;45721:4;45718:1;45711:15;45738:180;45786:77;45783:1;45776:88;45883:4;45880:1;45873:15;45907:4;45904:1;45897:15;45924:180;45972:77;45969:1;45962:88;46069:4;46066:1;46059:15;46093:4;46090:1;46083:15;46110:180;46158:77;46155:1;46148:88;46255:4;46252:1;46245:15;46279:4;46276:1;46269:15;46296:117;46405:1;46402;46395:12;46419:117;46528:1;46525;46518:12;46542:117;46651:1;46648;46641:12;46665:117;46774:1;46771;46764:12;46788:117;46897:1;46894;46887:12;46911:102;46952:6;47003:2;46999:7;46994:2;46987:5;46983:14;46979:28;46969:38;;46911:102;;;:::o;47019:94::-;47052:8;47100:5;47096:2;47092:14;47071:35;;47019:94;;;:::o;47119:221::-;47259:34;47255:1;47247:6;47243:14;47236:58;47328:4;47323:2;47315:6;47311:15;47304:29;47119:221;:::o;47346:225::-;47486:34;47482:1;47474:6;47470:14;47463:58;47555:8;47550:2;47542:6;47538:15;47531:33;47346:225;:::o;47577:229::-;47717:34;47713:1;47705:6;47701:14;47694:58;47786:12;47781:2;47773:6;47769:15;47762:37;47577:229;:::o;47812:164::-;47952:16;47948:1;47940:6;47936:14;47929:40;47812:164;:::o;47982:222::-;48122:34;48118:1;48110:6;48106:14;48099:58;48191:5;48186:2;48178:6;48174:15;48167:30;47982:222;:::o;48210:224::-;48350:34;48346:1;48338:6;48334:14;48327:58;48419:7;48414:2;48406:6;48402:15;48395:32;48210:224;:::o;48440:236::-;48580:34;48576:1;48568:6;48564:14;48557:58;48649:19;48644:2;48636:6;48632:15;48625:44;48440:236;:::o;48682:166::-;48822:18;48818:1;48810:6;48806:14;48799:42;48682:166;:::o;48854:220::-;48994:34;48990:1;48982:6;48978:14;48971:58;49063:3;49058:2;49050:6;49046:15;49039:28;48854:220;:::o;49080:244::-;49220:34;49216:1;49208:6;49204:14;49197:58;49289:27;49284:2;49276:6;49272:15;49265:52;49080:244;:::o;49330:178::-;49470:30;49466:1;49458:6;49454:14;49447:54;49330:178;:::o;49514:230::-;49654:34;49650:1;49642:6;49638:14;49631:58;49723:13;49718:2;49710:6;49706:15;49699:38;49514:230;:::o;49750:225::-;49890:34;49886:1;49878:6;49874:14;49867:58;49959:8;49954:2;49946:6;49942:15;49935:33;49750:225;:::o;49981:155::-;50121:7;50117:1;50109:6;50105:14;50098:31;49981:155;:::o;50142:182::-;50282:34;50278:1;50270:6;50266:14;50259:58;50142:182;:::o;50330:234::-;50470:34;50466:1;50458:6;50454:14;50447:58;50539:17;50534:2;50526:6;50522:15;50515:42;50330:234;:::o;50570:176::-;50710:28;50706:1;50698:6;50694:14;50687:52;50570:176;:::o;50752:237::-;50892:34;50888:1;50880:6;50876:14;50869:58;50961:20;50956:2;50948:6;50944:15;50937:45;50752:237;:::o;50995:175::-;51135:27;51131:1;51123:6;51119:14;51112:51;50995:175;:::o;51176:173::-;51316:25;51312:1;51304:6;51300:14;51293:49;51176:173;:::o;51355:221::-;51495:34;51491:1;51483:6;51479:14;51472:58;51564:4;51559:2;51551:6;51547:15;51540:29;51355:221;:::o;51582:114::-;;:::o;51702:227::-;51842:34;51838:1;51830:6;51826:14;51819:58;51911:10;51906:2;51898:6;51894:15;51887:35;51702:227;:::o;51935:238::-;52075:34;52071:1;52063:6;52059:14;52052:58;52144:21;52139:2;52131:6;52127:15;52120:46;51935:238;:::o;52179:179::-;52319:31;52315:1;52307:6;52303:14;52296:55;52179:179;:::o;52364:220::-;52504:34;52500:1;52492:6;52488:14;52481:58;52573:3;52568:2;52560:6;52556:15;52549:28;52364:220;:::o;52590:233::-;52730:34;52726:1;52718:6;52714:14;52707:58;52799:16;52794:2;52786:6;52782:15;52775:41;52590:233;:::o;52829:234::-;52969:34;52965:1;52957:6;52953:14;52946:58;53038:17;53033:2;53025:6;53021:15;53014:42;52829:234;:::o;53069:176::-;53209:28;53205:1;53197:6;53193:14;53186:52;53069:176;:::o;53251:232::-;53391:34;53387:1;53379:6;53375:14;53368:58;53460:15;53455:2;53447:6;53443:15;53436:40;53251:232;:::o;53489:221::-;53629:34;53625:1;53617:6;53613:14;53606:58;53698:4;53693:2;53685:6;53681:15;53674:29;53489:221;:::o;53716:122::-;53789:24;53807:5;53789:24;:::i;:::-;53782:5;53779:35;53769:63;;53828:1;53825;53818:12;53769:63;53716:122;:::o;53844:116::-;53914:21;53929:5;53914:21;:::i;:::-;53907:5;53904:32;53894:60;;53950:1;53947;53940:12;53894:60;53844:116;:::o;53966:122::-;54039:24;54057:5;54039:24;:::i;:::-;54032:5;54029:35;54019:63;;54078:1;54075;54068:12;54019:63;53966:122;:::o;54094:120::-;54166:23;54183:5;54166:23;:::i;:::-;54159:5;54156:34;54146:62;;54204:1;54201;54194:12;54146:62;54094:120;:::o;54220:122::-;54293:24;54311:5;54293:24;:::i;:::-;54286:5;54283:35;54273:63;;54332:1;54329;54322:12;54273:63;54220:122;:::o

Swarm Source

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