ETH Price: $3,339.66 (-1.61%)

Token

dontbidape (dontbidape)
 

Overview

Max Total Supply

5,000 dontbidape

Holders

993

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 dontbidape
0x4cf9573b2978338e068aa3B24eD602DD7365020a
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:
dontbidape

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: dontbidape.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ReentrancyGuard.sol";
import "./ERC721A.sol";
import "./Strings.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";
import "./IERC165.sol";
import "./IERC721.sol";
import "./IERC721Enumerable.sol";
import "./IERC721Metadata.sol";
import "./IERC721Receiver.sol";
contract dontbidape is Ownable, ERC721A, ReentrancyGuard {
  uint256 public immutable maxPerAddressDuringMint;
  uint256 price =10000000000000000;
  mapping(address => bool) freeMint;
  constructor(
    uint256 maxBatchSize_,
    uint256 collectionSize_

  ) ERC721A("dontbidape", "dontbidape", maxBatchSize_, collectionSize_) {
    maxPerAddressDuringMint = maxBatchSize_;
  }
  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }
  
  function devMint(uint8 quantity) external onlyOwner {
     require(
       quantity % maxBatchSize == 0,
       "can only mint a multiple of the maxBatchSize"
     );
    uint256 numChunks = quantity / maxBatchSize;
    for (uint8 i = 0; i < numChunks; i++) {
      _safeMint(msg.sender, maxBatchSize);
    }
  }
  function airdrop(address add,uint256 number) external onlyOwner {
    require(totalSupply() + number <= collectionSize, "reached max supply");
    _safeMint(add, number);
  }
  function publicSaleMint(uint256 quantity)
    external
    payable
    callerIsUser
  {  
    require(
       quantity % maxBatchSize == 0,
       "can only mint a multiple of the maxBatchSize"
     );
     require(quantity <=100,"can not mint this many for once");
     
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    uint256 number = quantity/10;
    for(uint8 i = 0; i < number; i++){
      _safeMint(msg.sender, 10);
    }
    refundIfOver(price*number);
  }
function publicFreeMint()
    external
    payable
    callerIsUser
  {  
    require(totalSupply() + 5 <= collectionSize, "reached max supply");
    require(
      freeMint[msg.sender] == false,
      "can not freemint again"
    );
    freeMint[msg.sender] = true;
    _safeMint(msg.sender, 5);
  }
  function refundIfOver(uint256 cost) private {
    require(msg.value >= cost, "Need to send more ETH.");
    if (msg.value > cost) {
      payable(msg.sender).transfer(msg.value - cost);
    }
  }
  // // metadata URI
  string private _baseTokenURI;

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

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

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



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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

pragma solidity ^0.8.0;

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

contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable,
  Ownable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize;
  // Token name
  string private _name;

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

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

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

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

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

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

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

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

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

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

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

  function ownershipOf(uint256 tokenId)
    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"
    );
    require(
      tokenId!=0,
      "ERC721Metadata: URI query for nonexistent token"
    );
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),baseExtension))
        : "";
  }

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

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

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

    _approve(to, tokenId, owner);
  }

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

    return _tokenApprovals[tokenId];
  }

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

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

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

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

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

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

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

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

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

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

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

    uint256 updatedIndex = startTokenId;

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

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

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

    bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
      getApproved(tokenId) == _msgSender() ||
      isApprovedForAll(prevOwnership.addr, _msgSender()));
    require(
      isApprovedOrOwner,
      "ERC721A: transfer caller is not owner nor approved"
    );

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

    _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

  uint256 public nextOwnerToExplicitlySet = 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

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

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

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

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

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"maxBatchSize_","type":"uint256"},{"internalType":"uint256","name":"collectionSize_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"add","type":"address"},{"internalType":"uint256","name":"number","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"quantity","type":"uint8"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicFreeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","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":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60e0604052600180556040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506004908051906020019062000055929190620002dd565b506000600955662386f26fc10000600b553480156200007357600080fd5b50604051620057f5380380620057f58339818101604052810190620000999190620003a4565b6040518060400160405280600a81526020017f646f6e74626964617065000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f646f6e74626964617065000000000000000000000000000000000000000000008152508383620001276200011b6200021160201b60201c565b6200021960201b60201c565b600081116200016d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000164906200045b565b60405180910390fd5b60008211620001b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001aa9062000439565b60405180910390fd5b8360029080519060200190620001cb929190620002dd565b508260039080519060200190620001e4929190620002dd565b508160a081815250508060808181525050505050506001600a819055508160c081815250505050620005ba565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002eb9062000498565b90600052602060002090601f0160209004810192826200030f57600085556200035b565b82601f106200032a57805160ff19168380011785556200035b565b828001600101855582156200035b579182015b828111156200035a5782518255916020019190600101906200033d565b5b5090506200036a91906200036e565b5090565b5b80821115620003895760008160009055506001016200036f565b5090565b6000815190506200039e81620005a0565b92915050565b60008060408385031215620003be57620003bd620004fd565b5b6000620003ce858286016200038d565b9250506020620003e1858286016200038d565b9150509250929050565b6000620003fa6027836200047d565b9150620004078262000502565b604082019050919050565b600062000421602e836200047d565b91506200042e8262000551565b604082019050919050565b600060208201905081810360008301526200045481620003eb565b9050919050565b60006020820190508181036000830152620004768162000412565b9050919050565b600082825260208201905092915050565b6000819050919050565b60006002820490506001821680620004b157607f821691505b60208210811415620004c857620004c7620004ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b620005ab816200048e565b8114620005b757600080fd5b50565b60805160a05160c0516151c5620006306000396000611480015260008181610e2701528181610e9801528181610edb015281816118e90152818161273d015281816127660152612f92015260008181611213015281816113fd01528181611999015281816124a701526124db01526151c56000f3fe6080604052600436106101cd5760003560e01c80638673a24a116100f7578063ac44600211610095578063d7224ba011610064578063d7224ba014610656578063dc33e68114610681578063e985e9c5146106be578063f2fde38b146106fb576101cd565b8063ac446002146105bd578063b3ab66b0146105d4578063b88d4fde146105f0578063c87b56dd14610619576101cd565b80638da5cb5b116100d15780638da5cb5b146105015780639231ab2a1461052c57806395d89b4114610569578063a22cb46514610594576101cd565b80638673a24a146104a35780638ba4cc3c146104ad5780638bc35c2f146104d6576101cd565b80632f745c591161016f57806355f804b31161013e57806355f804b3146103e95780636352211e1461041257806370a082311461044f578063715018a61461048c576101cd565b80632f745c591461031d5780633497d1651461035a57806342842e0e146103835780634f6ccce7146103ac576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632d20fb60146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906137a7565b610724565b6040516102069190613f51565b60405180910390f35b34801561021b57600080fd5b5061022461086e565b6040516102319190613f6c565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061384e565b610900565b60405161026e9190613eea565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190613767565b610985565b005b3480156102ac57600080fd5b506102b5610a9e565b6040516102c29190614389565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613651565b610ab3565b005b34801561030057600080fd5b5061031b6004803603810190610316919061384e565b610ac3565b005b34801561032957600080fd5b50610344600480360381019061033f9190613767565b610ba1565b6040516103519190614389565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c919061387b565b610da7565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190613651565b610f17565b005b3480156103b857600080fd5b506103d360048036038101906103ce919061384e565b610f37565b6040516103e09190614389565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613801565b610f8a565b005b34801561041e57600080fd5b506104396004803603810190610434919061384e565b61101c565b6040516104469190613eea565b60405180910390f35b34801561045b57600080fd5b50610476600480360381019061047191906135e4565b611032565b6040516104839190614389565b60405180910390f35b34801561049857600080fd5b506104a161111b565b005b6104ab6111a3565b005b3480156104b957600080fd5b506104d460048036038101906104cf9190613767565b61137f565b005b3480156104e257600080fd5b506104eb61147e565b6040516104f89190614389565b60405180910390f35b34801561050d57600080fd5b506105166114a2565b6040516105239190613eea565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e919061384e565b6114cb565b604051610560919061436e565b60405180910390f35b34801561057557600080fd5b5061057e6114e3565b60405161058b9190613f6c565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613727565b611575565b005b3480156105c957600080fd5b506105d26116f6565b005b6105ee60048036038101906105e9919061384e565b611877565b005b3480156105fc57600080fd5b50610617600480360381019061061291906136a4565b611a64565b005b34801561062557600080fd5b50610640600480360381019061063b919061384e565b611ac0565b60405161064d9190613f6c565b60405180910390f35b34801561066257600080fd5b5061066b611bae565b6040516106789190614389565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a391906135e4565b611bb4565b6040516106b59190614389565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190613611565b611bc6565b6040516106f29190613f51565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906135e4565b611c5a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ef57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610867575061086682611d52565b5b9050919050565b60606002805461087d90614709565b80601f01602080910402602001604051908101604052809291908181526020018280546108a990614709565b80156108f65780601f106108cb576101008083540402835291602001916108f6565b820191906000526020600020905b8154815290600101906020018083116108d957829003601f168201915b5050505050905090565b600061090b82611dbc565b61094a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109419061432e565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109908261101c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f8906141ee565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a20611dca565b73ffffffffffffffffffffffffffffffffffffffff161480610a4f5750610a4e81610a49611dca565b611bc6565b5b610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a85906140ce565b60405180910390fd5b610a99838383611dd2565b505050565b600060018054610aae91906145b8565b905090565b610abe838383611e84565b505050565b610acb611dca565b73ffffffffffffffffffffffffffffffffffffffff16610ae96114a2565b73ffffffffffffffffffffffffffffffffffffffff1614610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b369061416e565b60405180910390fd5b6002600a541415610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906142ee565b60405180910390fd5b6002600a81905550610b968161243d565b6001600a8190555050565b6000610bac83611032565b821115610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590613f8e565b60405180910390fd5b6000610bf8610a9e565b9050600060019050600080600190505b838111610d65576000600560008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cf957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d515786841415610d42578195505050505050610da1565b8380610d4d9061476c565b9450505b508080610d5d9061476c565b915050610c08565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906142ae565b60405180910390fd5b92915050565b610daf611dca565b73ffffffffffffffffffffffffffffffffffffffff16610dcd6114a2565b73ffffffffffffffffffffffffffffffffffffffff1614610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061416e565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008260ff16610e5491906147df565b14610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b9061400e565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008260ff16610ec591906144f9565b905060005b818160ff161015610f1257610eff337f00000000000000000000000000000000000000000000000000000000000000006126cb565b8080610f0a906147b5565b915050610eca565b505050565b610f3283838360405180602001604052806000815250611a64565b505050565b6000610f41610a9e565b8210610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f799061402e565b60405180910390fd5b819050919050565b610f92611dca565b73ffffffffffffffffffffffffffffffffffffffff16610fb06114a2565b73ffffffffffffffffffffffffffffffffffffffff1614611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd9061416e565b60405180910390fd5b8181600d91906110179291906133c3565b505050565b6000611027826126e9565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a9061410e565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611123611dca565b73ffffffffffffffffffffffffffffffffffffffff166111416114a2565b73ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e9061416e565b60405180910390fd5b6111a160006128ec565b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112089061408e565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000600561123c610a9e565b61124691906144a3565b1115611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e9061412e565b60405180910390fd5b60001515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613fee565b60405180910390fd5b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061137d3360056126cb565b565b611387611dca565b73ffffffffffffffffffffffffffffffffffffffff166113a56114a2565b73ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f29061416e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081611425610a9e565b61142f91906144a3565b1115611470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114679061412e565b60405180910390fd5b61147a82826126cb565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114d3613449565b6114dc826126e9565b9050919050565b6060600380546114f290614709565b80601f016020809104026020016040519081016040528092919081815260200182805461151e90614709565b801561156b5780601f106115405761010080835404028352916020019161156b565b820191906000526020600020905b81548152906001019060200180831161154e57829003601f168201915b5050505050905090565b61157d611dca565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e2906141ae565b60405180910390fd5b80600860006115f8611dca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116a5611dca565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116ea9190613f51565b60405180910390a35050565b6116fe611dca565b73ffffffffffffffffffffffffffffffffffffffff1661171c6114a2565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117699061416e565b60405180910390fd5b6002600a5414156117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af906142ee565b60405180910390fd5b6002600a8190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516117e690613ed5565b60006040518083038185875af1925050503d8060008114611823576040519150601f19603f3d011682016040523d82523d6000602084013e611828565b606091505b505090508061186c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118639061420e565b60405180910390fd5b506001600a81905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc9061408e565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008261191391906147df565b14611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a9061400e565b60405180910390fd5b6064811115611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e906140ae565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000816119c1610a9e565b6119cb91906144a3565b1115611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a039061412e565b60405180910390fd5b6000600a82611a1b91906144f9565b905060005b818160ff161015611a4957611a3633600a6126cb565b8080611a41906147b5565b915050611a20565b50611a6081600b54611a5b919061452a565b6129b0565b5050565b611a6f848484611e84565b611a7b84848484612a51565b611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab19061422e565b60405180910390fd5b50505050565b6060611acb82611dbc565b611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b019061418e565b60405180910390fd5b6000821415611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b459061418e565b60405180910390fd5b6000611b58612be8565b90506000815111611b785760405180602001604052806000815250611ba6565b80611b8284612c7a565b6004604051602001611b9693929190613ea4565b6040516020818303038152906040525b915050919050565b60095481565b6000611bbf82612ddb565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c62611dca565b73ffffffffffffffffffffffffffffffffffffffff16611c806114a2565b73ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd9061416e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90613fae565b60405180910390fd5b611d4f816128ec565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e8f826126e9565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611eb6611dca565b73ffffffffffffffffffffffffffffffffffffffff161480611f125750611edb611dca565b73ffffffffffffffffffffffffffffffffffffffff16611efa84610900565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f2e5750611f2d8260000151611f28611dca565b611bc6565b5b905080611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f67906141ce565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd99061414e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120499061404e565b60405180910390fd5b61205f8585856001612ec4565b61206f6000848460000151611dd2565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166120dd9190614584565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612181919061445d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506005600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461228791906144a3565b9050600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123cd576122fd81611dbc565b156123cc576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506005600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124358686866001612eca565b505050505050565b6000600954905060008211612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e906140ee565b60405180910390fd5b60006001838361249791906144a3565b6124a191906145b8565b905060017f00000000000000000000000000000000000000000000000000000000000000006124d091906145b8565b8111156125075760017f000000000000000000000000000000000000000000000000000000000000000061250491906145b8565b90505b61251081611dbc565b61254f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612546906142ce565b60405180910390fd5b60008290505b8181116126b257600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561269f5760006125d2826126e9565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b80806126aa9061476c565b915050612555565b506001816126c091906144a3565b600981905550505050565b6126e5828260405180602001604052806000815250612ed0565b5050565b6126f1613449565b6126fa82611dbc565b612739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273090613fce565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000831061279d5760017f00000000000000000000000000000000000000000000000000000000000000008461279091906145b8565b61279a91906144a3565b90505b60008390505b8181106128ab576000600560008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612897578093505050506128e7565b5080806128a3906146df565b9150506127a3565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128de9061430e565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b803410156129f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ea9061424e565b60405180910390fd5b80341115612a4e573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612a2191906145b8565b9081150290604051600060405180830381858888f19350505050158015612a4c573d6000803e3d6000fd5b505b50565b6000612a728473ffffffffffffffffffffffffffffffffffffffff166133b0565b15612bdb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a9b611dca565b8786866040518563ffffffff1660e01b8152600401612abd9493929190613f05565b602060405180830381600087803b158015612ad757600080fd5b505af1925050508015612b0857506040513d601f19601f82011682018060405250810190612b0591906137d4565b60015b612b8b573d8060008114612b38576040519150601f19603f3d011682016040523d82523d6000602084013e612b3d565b606091505b50600081511415612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a9061422e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612be0565b600190505b949350505050565b6060600d8054612bf790614709565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2390614709565b8015612c705780601f10612c4557610100808354040283529160200191612c70565b820191906000526020600020905b815481529060010190602001808311612c5357829003601f168201915b5050505050905090565b60606000821415612cc2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dd6565b600082905060005b60008214612cf4578080612cdd9061476c565b915050600a82612ced91906144f9565b9150612cca565b60008167ffffffffffffffff811115612d1057612d0f6148cc565b5b6040519080825280601f01601f191660200182016040528015612d425781602001600182028036833780820191505090505b5090505b60008514612dcf57600182612d5b91906145b8565b9150600a85612d6a91906147df565b6030612d7691906144a3565b60f81b818381518110612d8c57612d8b61489d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dc891906144f9565b9450612d46565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e439061406e565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3e9061428e565b60405180910390fd5b612f5081611dbc565b15612f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f879061426e565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000831115612ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fea9061434e565b60405180910390fd5b6130006000858386612ec4565b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516130fd919061445d565b6fffffffffffffffffffffffffffffffff168152602001858360200151613124919061445d565b6fffffffffffffffffffffffffffffffff16815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561339357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133336000888488612a51565b613372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133699061422e565b60405180910390fd5b818061337d9061476c565b925050808061338b9061476c565b9150506132c2565b50806001819055506133a86000878588612eca565b505050505050565b600080823b905060008111915050919050565b8280546133cf90614709565b90600052602060002090601f0160209004810192826133f15760008555613438565b82601f1061340a57803560ff1916838001178555613438565b82800160010185558215613438579182015b8281111561343757823582559160200191906001019061341c565b5b5090506134459190613483565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561349c576000816000905550600101613484565b5090565b60006134b36134ae846143c9565b6143a4565b9050828152602081018484840111156134cf576134ce61490a565b5b6134da84828561469d565b509392505050565b6000813590506134f18161511c565b92915050565b60008135905061350681615133565b92915050565b60008135905061351b8161514a565b92915050565b6000815190506135308161514a565b92915050565b600082601f83011261354b5761354a614900565b5b813561355b8482602086016134a0565b91505092915050565b60008083601f84011261357a57613579614900565b5b8235905067ffffffffffffffff811115613597576135966148fb565b5b6020830191508360018202830111156135b3576135b2614905565b5b9250929050565b6000813590506135c981615161565b92915050565b6000813590506135de81615178565b92915050565b6000602082840312156135fa576135f9614914565b5b6000613608848285016134e2565b91505092915050565b6000806040838503121561362857613627614914565b5b6000613636858286016134e2565b9250506020613647858286016134e2565b9150509250929050565b60008060006060848603121561366a57613669614914565b5b6000613678868287016134e2565b9350506020613689868287016134e2565b925050604061369a868287016135ba565b9150509250925092565b600080600080608085870312156136be576136bd614914565b5b60006136cc878288016134e2565b94505060206136dd878288016134e2565b93505060406136ee878288016135ba565b925050606085013567ffffffffffffffff81111561370f5761370e61490f565b5b61371b87828801613536565b91505092959194509250565b6000806040838503121561373e5761373d614914565b5b600061374c858286016134e2565b925050602061375d858286016134f7565b9150509250929050565b6000806040838503121561377e5761377d614914565b5b600061378c858286016134e2565b925050602061379d858286016135ba565b9150509250929050565b6000602082840312156137bd576137bc614914565b5b60006137cb8482850161350c565b91505092915050565b6000602082840312156137ea576137e9614914565b5b60006137f884828501613521565b91505092915050565b6000806020838503121561381857613817614914565b5b600083013567ffffffffffffffff8111156138365761383561490f565b5b61384285828601613564565b92509250509250929050565b60006020828403121561386457613863614914565b5b6000613872848285016135ba565b91505092915050565b60006020828403121561389157613890614914565b5b600061389f848285016135cf565b91505092915050565b6138b1816145ec565b82525050565b6138c0816145ec565b82525050565b6138cf816145fe565b82525050565b60006138e08261440f565b6138ea8185614425565b93506138fa8185602086016146ac565b61390381614919565b840191505092915050565b60006139198261441a565b6139238185614441565b93506139338185602086016146ac565b61393c81614919565b840191505092915050565b60006139528261441a565b61395c8185614452565b935061396c8185602086016146ac565b80840191505092915050565b6000815461398581614709565b61398f8186614452565b945060018216600081146139aa57600181146139bb576139ee565b60ff198316865281860193506139ee565b6139c4856143fa565b60005b838110156139e6578154818901526001820191506020810190506139c7565b838801955050505b50505092915050565b6000613a04602283614441565b9150613a0f8261492a565b604082019050919050565b6000613a27602683614441565b9150613a3282614979565b604082019050919050565b6000613a4a602a83614441565b9150613a55826149c8565b604082019050919050565b6000613a6d601683614441565b9150613a7882614a17565b602082019050919050565b6000613a90602c83614441565b9150613a9b82614a40565b604082019050919050565b6000613ab3602383614441565b9150613abe82614a8f565b604082019050919050565b6000613ad6602583614441565b9150613ae182614ade565b604082019050919050565b6000613af9603183614441565b9150613b0482614b2d565b604082019050919050565b6000613b1c601e83614441565b9150613b2782614b7c565b602082019050919050565b6000613b3f601f83614441565b9150613b4a82614ba5565b602082019050919050565b6000613b62603983614441565b9150613b6d82614bce565b604082019050919050565b6000613b85601883614441565b9150613b9082614c1d565b602082019050919050565b6000613ba8602b83614441565b9150613bb382614c46565b604082019050919050565b6000613bcb601283614441565b9150613bd682614c95565b602082019050919050565b6000613bee602683614441565b9150613bf982614cbe565b604082019050919050565b6000613c11602083614441565b9150613c1c82614d0d565b602082019050919050565b6000613c34602f83614441565b9150613c3f82614d36565b604082019050919050565b6000613c57601a83614441565b9150613c6282614d85565b602082019050919050565b6000613c7a603283614441565b9150613c8582614dae565b604082019050919050565b6000613c9d602283614441565b9150613ca882614dfd565b604082019050919050565b6000613cc0600083614436565b9150613ccb82614e4c565b600082019050919050565b6000613ce3601083614441565b9150613cee82614e4f565b602082019050919050565b6000613d06603383614441565b9150613d1182614e78565b604082019050919050565b6000613d29601683614441565b9150613d3482614ec7565b602082019050919050565b6000613d4c601d83614441565b9150613d5782614ef0565b602082019050919050565b6000613d6f602183614441565b9150613d7a82614f19565b604082019050919050565b6000613d92602e83614441565b9150613d9d82614f68565b604082019050919050565b6000613db5602683614441565b9150613dc082614fb7565b604082019050919050565b6000613dd8601f83614441565b9150613de382615006565b602082019050919050565b6000613dfb602f83614441565b9150613e068261502f565b604082019050919050565b6000613e1e602d83614441565b9150613e298261507e565b604082019050919050565b6000613e41602283614441565b9150613e4c826150cd565b604082019050919050565b604082016000820151613e6d60008501826138a8565b506020820151613e806020850182613e95565b50505050565b613e8f81614672565b82525050565b613e9e8161467c565b82525050565b6000613eb08286613947565b9150613ebc8285613947565b9150613ec88284613978565b9150819050949350505050565b6000613ee082613cb3565b9150819050919050565b6000602082019050613eff60008301846138b7565b92915050565b6000608082019050613f1a60008301876138b7565b613f2760208301866138b7565b613f346040830185613e86565b8181036060830152613f4681846138d5565b905095945050505050565b6000602082019050613f6660008301846138c6565b92915050565b60006020820190508181036000830152613f86818461390e565b905092915050565b60006020820190508181036000830152613fa7816139f7565b9050919050565b60006020820190508181036000830152613fc781613a1a565b9050919050565b60006020820190508181036000830152613fe781613a3d565b9050919050565b6000602082019050818103600083015261400781613a60565b9050919050565b6000602082019050818103600083015261402781613a83565b9050919050565b6000602082019050818103600083015261404781613aa6565b9050919050565b6000602082019050818103600083015261406781613ac9565b9050919050565b6000602082019050818103600083015261408781613aec565b9050919050565b600060208201905081810360008301526140a781613b0f565b9050919050565b600060208201905081810360008301526140c781613b32565b9050919050565b600060208201905081810360008301526140e781613b55565b9050919050565b6000602082019050818103600083015261410781613b78565b9050919050565b6000602082019050818103600083015261412781613b9b565b9050919050565b6000602082019050818103600083015261414781613bbe565b9050919050565b6000602082019050818103600083015261416781613be1565b9050919050565b6000602082019050818103600083015261418781613c04565b9050919050565b600060208201905081810360008301526141a781613c27565b9050919050565b600060208201905081810360008301526141c781613c4a565b9050919050565b600060208201905081810360008301526141e781613c6d565b9050919050565b6000602082019050818103600083015261420781613c90565b9050919050565b6000602082019050818103600083015261422781613cd6565b9050919050565b6000602082019050818103600083015261424781613cf9565b9050919050565b6000602082019050818103600083015261426781613d1c565b9050919050565b6000602082019050818103600083015261428781613d3f565b9050919050565b600060208201905081810360008301526142a781613d62565b9050919050565b600060208201905081810360008301526142c781613d85565b9050919050565b600060208201905081810360008301526142e781613da8565b9050919050565b6000602082019050818103600083015261430781613dcb565b9050919050565b6000602082019050818103600083015261432781613dee565b9050919050565b6000602082019050818103600083015261434781613e11565b9050919050565b6000602082019050818103600083015261436781613e34565b9050919050565b60006040820190506143836000830184613e57565b92915050565b600060208201905061439e6000830184613e86565b92915050565b60006143ae6143bf565b90506143ba828261473b565b919050565b6000604051905090565b600067ffffffffffffffff8211156143e4576143e36148cc565b5b6143ed82614919565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061446882614636565b915061447383614636565b9250826fffffffffffffffffffffffffffffffff0382111561449857614497614810565b5b828201905092915050565b60006144ae82614672565b91506144b983614672565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ee576144ed614810565b5b828201905092915050565b600061450482614672565b915061450f83614672565b92508261451f5761451e61483f565b5b828204905092915050565b600061453582614672565b915061454083614672565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561457957614578614810565b5b828202905092915050565b600061458f82614636565b915061459a83614636565b9250828210156145ad576145ac614810565b5b828203905092915050565b60006145c382614672565b91506145ce83614672565b9250828210156145e1576145e0614810565b5b828203905092915050565b60006145f782614652565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156146ca5780820151818401526020810190506146af565b838111156146d9576000848401525b50505050565b60006146ea82614672565b915060008214156146fe576146fd614810565b5b600182039050919050565b6000600282049050600182168061472157607f821691505b602082108114156147355761473461486e565b5b50919050565b61474482614919565b810181811067ffffffffffffffff82111715614763576147626148cc565b5b80604052505050565b600061477782614672565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147aa576147a9614810565b5b600182019050919050565b60006147c082614690565b915060ff8214156147d4576147d3614810565b5b600182019050919050565b60006147ea82614672565b91506147f583614672565b9250826148055761480461483f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206e6f7420667265656d696e7420616761696e00000000000000000000600082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7920666f72206f6e636500600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b615125816145ec565b811461513057600080fd5b50565b61513c816145fe565b811461514757600080fd5b50565b6151538161460a565b811461515e57600080fd5b50565b61516a81614672565b811461517557600080fd5b50565b61518181614690565b811461518c57600080fd5b5056fea26469706673582212204e14ff31eca1c34b86c1bc2edc8e95187d275988740992558caa9e54d2b7b6df64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000001388

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c80638673a24a116100f7578063ac44600211610095578063d7224ba011610064578063d7224ba014610656578063dc33e68114610681578063e985e9c5146106be578063f2fde38b146106fb576101cd565b8063ac446002146105bd578063b3ab66b0146105d4578063b88d4fde146105f0578063c87b56dd14610619576101cd565b80638da5cb5b116100d15780638da5cb5b146105015780639231ab2a1461052c57806395d89b4114610569578063a22cb46514610594576101cd565b80638673a24a146104a35780638ba4cc3c146104ad5780638bc35c2f146104d6576101cd565b80632f745c591161016f57806355f804b31161013e57806355f804b3146103e95780636352211e1461041257806370a082311461044f578063715018a61461048c576101cd565b80632f745c591461031d5780633497d1651461035a57806342842e0e146103835780634f6ccce7146103ac576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632d20fb60146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906137a7565b610724565b6040516102069190613f51565b60405180910390f35b34801561021b57600080fd5b5061022461086e565b6040516102319190613f6c565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061384e565b610900565b60405161026e9190613eea565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190613767565b610985565b005b3480156102ac57600080fd5b506102b5610a9e565b6040516102c29190614389565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190613651565b610ab3565b005b34801561030057600080fd5b5061031b6004803603810190610316919061384e565b610ac3565b005b34801561032957600080fd5b50610344600480360381019061033f9190613767565b610ba1565b6040516103519190614389565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c919061387b565b610da7565b005b34801561038f57600080fd5b506103aa60048036038101906103a59190613651565b610f17565b005b3480156103b857600080fd5b506103d360048036038101906103ce919061384e565b610f37565b6040516103e09190614389565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613801565b610f8a565b005b34801561041e57600080fd5b506104396004803603810190610434919061384e565b61101c565b6040516104469190613eea565b60405180910390f35b34801561045b57600080fd5b50610476600480360381019061047191906135e4565b611032565b6040516104839190614389565b60405180910390f35b34801561049857600080fd5b506104a161111b565b005b6104ab6111a3565b005b3480156104b957600080fd5b506104d460048036038101906104cf9190613767565b61137f565b005b3480156104e257600080fd5b506104eb61147e565b6040516104f89190614389565b60405180910390f35b34801561050d57600080fd5b506105166114a2565b6040516105239190613eea565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e919061384e565b6114cb565b604051610560919061436e565b60405180910390f35b34801561057557600080fd5b5061057e6114e3565b60405161058b9190613f6c565b60405180910390f35b3480156105a057600080fd5b506105bb60048036038101906105b69190613727565b611575565b005b3480156105c957600080fd5b506105d26116f6565b005b6105ee60048036038101906105e9919061384e565b611877565b005b3480156105fc57600080fd5b50610617600480360381019061061291906136a4565b611a64565b005b34801561062557600080fd5b50610640600480360381019061063b919061384e565b611ac0565b60405161064d9190613f6c565b60405180910390f35b34801561066257600080fd5b5061066b611bae565b6040516106789190614389565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a391906135e4565b611bb4565b6040516106b59190614389565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190613611565b611bc6565b6040516106f29190613f51565b60405180910390f35b34801561070757600080fd5b50610722600480360381019061071d91906135e4565b611c5a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ef57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085757507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610867575061086682611d52565b5b9050919050565b60606002805461087d90614709565b80601f01602080910402602001604051908101604052809291908181526020018280546108a990614709565b80156108f65780601f106108cb576101008083540402835291602001916108f6565b820191906000526020600020905b8154815290600101906020018083116108d957829003601f168201915b5050505050905090565b600061090b82611dbc565b61094a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109419061432e565b60405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109908261101c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f8906141ee565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a20611dca565b73ffffffffffffffffffffffffffffffffffffffff161480610a4f5750610a4e81610a49611dca565b611bc6565b5b610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a85906140ce565b60405180910390fd5b610a99838383611dd2565b505050565b600060018054610aae91906145b8565b905090565b610abe838383611e84565b505050565b610acb611dca565b73ffffffffffffffffffffffffffffffffffffffff16610ae96114a2565b73ffffffffffffffffffffffffffffffffffffffff1614610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b369061416e565b60405180910390fd5b6002600a541415610b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7c906142ee565b60405180910390fd5b6002600a81905550610b968161243d565b6001600a8190555050565b6000610bac83611032565b821115610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590613f8e565b60405180910390fd5b6000610bf8610a9e565b9050600060019050600080600190505b838111610d65576000600560008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610cf957806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d515786841415610d42578195505050505050610da1565b8380610d4d9061476c565b9450505b508080610d5d9061476c565b915050610c08565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d98906142ae565b60405180910390fd5b92915050565b610daf611dca565b73ffffffffffffffffffffffffffffffffffffffff16610dcd6114a2565b73ffffffffffffffffffffffffffffffffffffffff1614610e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1a9061416e565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a8260ff16610e5491906147df565b14610e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8b9061400e565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a8260ff16610ec591906144f9565b905060005b818160ff161015610f1257610eff337f000000000000000000000000000000000000000000000000000000000000000a6126cb565b8080610f0a906147b5565b915050610eca565b505050565b610f3283838360405180602001604052806000815250611a64565b505050565b6000610f41610a9e565b8210610f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f799061402e565b60405180910390fd5b819050919050565b610f92611dca565b73ffffffffffffffffffffffffffffffffffffffff16610fb06114a2565b73ffffffffffffffffffffffffffffffffffffffff1614611006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffd9061416e565b60405180910390fd5b8181600d91906110179291906133c3565b505050565b6000611027826126e9565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a9061410e565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611123611dca565b73ffffffffffffffffffffffffffffffffffffffff166111416114a2565b73ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e9061416e565b60405180910390fd5b6111a160006128ec565b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112089061408e565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000001388600561123c610a9e565b61124691906144a3565b1115611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e9061412e565b60405180910390fd5b60001515600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613fee565b60405180910390fd5b6001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061137d3360056126cb565b565b611387611dca565b73ffffffffffffffffffffffffffffffffffffffff166113a56114a2565b73ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f29061416e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000138881611425610a9e565b61142f91906144a3565b1115611470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114679061412e565b60405180910390fd5b61147a82826126cb565b5050565b7f000000000000000000000000000000000000000000000000000000000000000a81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6114d3613449565b6114dc826126e9565b9050919050565b6060600380546114f290614709565b80601f016020809104026020016040519081016040528092919081815260200182805461151e90614709565b801561156b5780601f106115405761010080835404028352916020019161156b565b820191906000526020600020905b81548152906001019060200180831161154e57829003601f168201915b5050505050905090565b61157d611dca565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e2906141ae565b60405180910390fd5b80600860006115f8611dca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116a5611dca565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116ea9190613f51565b60405180910390a35050565b6116fe611dca565b73ffffffffffffffffffffffffffffffffffffffff1661171c6114a2565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117699061416e565b60405180910390fd5b6002600a5414156117b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117af906142ee565b60405180910390fd5b6002600a8190555060003373ffffffffffffffffffffffffffffffffffffffff16476040516117e690613ed5565b60006040518083038185875af1925050503d8060008114611823576040519150601f19603f3d011682016040523d82523d6000602084013e611828565b606091505b505090508061186c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118639061420e565b60405180910390fd5b506001600a81905550565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dc9061408e565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a8261191391906147df565b14611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a9061400e565b60405180910390fd5b6064811115611997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198e906140ae565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000001388816119c1610a9e565b6119cb91906144a3565b1115611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a039061412e565b60405180910390fd5b6000600a82611a1b91906144f9565b905060005b818160ff161015611a4957611a3633600a6126cb565b8080611a41906147b5565b915050611a20565b50611a6081600b54611a5b919061452a565b6129b0565b5050565b611a6f848484611e84565b611a7b84848484612a51565b611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab19061422e565b60405180910390fd5b50505050565b6060611acb82611dbc565b611b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b019061418e565b60405180910390fd5b6000821415611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b459061418e565b60405180910390fd5b6000611b58612be8565b90506000815111611b785760405180602001604052806000815250611ba6565b80611b8284612c7a565b6004604051602001611b9693929190613ea4565b6040516020818303038152906040525b915050919050565b60095481565b6000611bbf82612ddb565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c62611dca565b73ffffffffffffffffffffffffffffffffffffffff16611c806114a2565b73ffffffffffffffffffffffffffffffffffffffff1614611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd9061416e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3d90613fae565b60405180910390fd5b611d4f816128ec565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611e8f826126e9565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611eb6611dca565b73ffffffffffffffffffffffffffffffffffffffff161480611f125750611edb611dca565b73ffffffffffffffffffffffffffffffffffffffff16611efa84610900565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f2e5750611f2d8260000151611f28611dca565b611bc6565b5b905080611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f67906141ce565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd99061414e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120499061404e565b60405180910390fd5b61205f8585856001612ec4565b61206f6000848460000151611dd2565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166120dd9190614584565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff16612181919061445d565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506005600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461228791906144a3565b9050600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123cd576122fd81611dbc565b156123cc576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506005600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124358686866001612eca565b505050505050565b6000600954905060008211612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e906140ee565b60405180910390fd5b60006001838361249791906144a3565b6124a191906145b8565b905060017f00000000000000000000000000000000000000000000000000000000000013886124d091906145b8565b8111156125075760017f000000000000000000000000000000000000000000000000000000000000138861250491906145b8565b90505b61251081611dbc565b61254f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612546906142ce565b60405180910390fd5b60008290505b8181116126b257600073ffffffffffffffffffffffffffffffffffffffff166005600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561269f5760006125d2826126e9565b90506040518060400160405280826000015173ffffffffffffffffffffffffffffffffffffffff168152602001826020015167ffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505b80806126aa9061476c565b915050612555565b506001816126c091906144a3565b600981905550505050565b6126e5828260405180602001604052806000815250612ed0565b5050565b6126f1613449565b6126fa82611dbc565b612739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273090613fce565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000a831061279d5760017f000000000000000000000000000000000000000000000000000000000000000a8461279091906145b8565b61279a91906144a3565b90505b60008390505b8181106128ab576000600560008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612897578093505050506128e7565b5080806128a3906146df565b9150506127a3565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128de9061430e565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b803410156129f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ea9061424e565b60405180910390fd5b80341115612a4e573373ffffffffffffffffffffffffffffffffffffffff166108fc8234612a2191906145b8565b9081150290604051600060405180830381858888f19350505050158015612a4c573d6000803e3d6000fd5b505b50565b6000612a728473ffffffffffffffffffffffffffffffffffffffff166133b0565b15612bdb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a9b611dca565b8786866040518563ffffffff1660e01b8152600401612abd9493929190613f05565b602060405180830381600087803b158015612ad757600080fd5b505af1925050508015612b0857506040513d601f19601f82011682018060405250810190612b0591906137d4565b60015b612b8b573d8060008114612b38576040519150601f19603f3d011682016040523d82523d6000602084013e612b3d565b606091505b50600081511415612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a9061422e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612be0565b600190505b949350505050565b6060600d8054612bf790614709565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2390614709565b8015612c705780601f10612c4557610100808354040283529160200191612c70565b820191906000526020600020905b815481529060010190602001808311612c5357829003601f168201915b5050505050905090565b60606000821415612cc2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dd6565b600082905060005b60008214612cf4578080612cdd9061476c565b915050600a82612ced91906144f9565b9150612cca565b60008167ffffffffffffffff811115612d1057612d0f6148cc565b5b6040519080825280601f01601f191660200182016040528015612d425781602001600182028036833780820191505090505b5090505b60008514612dcf57600182612d5b91906145b8565b9150600a85612d6a91906147df565b6030612d7691906144a3565b60f81b818381518110612d8c57612d8b61489d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612dc891906144f9565b9450612d46565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e439061406e565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3e9061428e565b60405180910390fd5b612f5081611dbc565b15612f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f879061426e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a831115612ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fea9061434e565b60405180910390fd5b6130006000858386612ec4565b6000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516130fd919061445d565b6fffffffffffffffffffffffffffffffff168152602001858360200151613124919061445d565b6fffffffffffffffffffffffffffffffff16815250600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506005600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b8581101561339357818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133336000888488612a51565b613372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133699061422e565b60405180910390fd5b818061337d9061476c565b925050808061338b9061476c565b9150506132c2565b50806001819055506133a86000878588612eca565b505050505050565b600080823b905060008111915050919050565b8280546133cf90614709565b90600052602060002090601f0160209004810192826133f15760008555613438565b82601f1061340a57803560ff1916838001178555613438565b82800160010185558215613438579182015b8281111561343757823582559160200191906001019061341c565b5b5090506134459190613483565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561349c576000816000905550600101613484565b5090565b60006134b36134ae846143c9565b6143a4565b9050828152602081018484840111156134cf576134ce61490a565b5b6134da84828561469d565b509392505050565b6000813590506134f18161511c565b92915050565b60008135905061350681615133565b92915050565b60008135905061351b8161514a565b92915050565b6000815190506135308161514a565b92915050565b600082601f83011261354b5761354a614900565b5b813561355b8482602086016134a0565b91505092915050565b60008083601f84011261357a57613579614900565b5b8235905067ffffffffffffffff811115613597576135966148fb565b5b6020830191508360018202830111156135b3576135b2614905565b5b9250929050565b6000813590506135c981615161565b92915050565b6000813590506135de81615178565b92915050565b6000602082840312156135fa576135f9614914565b5b6000613608848285016134e2565b91505092915050565b6000806040838503121561362857613627614914565b5b6000613636858286016134e2565b9250506020613647858286016134e2565b9150509250929050565b60008060006060848603121561366a57613669614914565b5b6000613678868287016134e2565b9350506020613689868287016134e2565b925050604061369a868287016135ba565b9150509250925092565b600080600080608085870312156136be576136bd614914565b5b60006136cc878288016134e2565b94505060206136dd878288016134e2565b93505060406136ee878288016135ba565b925050606085013567ffffffffffffffff81111561370f5761370e61490f565b5b61371b87828801613536565b91505092959194509250565b6000806040838503121561373e5761373d614914565b5b600061374c858286016134e2565b925050602061375d858286016134f7565b9150509250929050565b6000806040838503121561377e5761377d614914565b5b600061378c858286016134e2565b925050602061379d858286016135ba565b9150509250929050565b6000602082840312156137bd576137bc614914565b5b60006137cb8482850161350c565b91505092915050565b6000602082840312156137ea576137e9614914565b5b60006137f884828501613521565b91505092915050565b6000806020838503121561381857613817614914565b5b600083013567ffffffffffffffff8111156138365761383561490f565b5b61384285828601613564565b92509250509250929050565b60006020828403121561386457613863614914565b5b6000613872848285016135ba565b91505092915050565b60006020828403121561389157613890614914565b5b600061389f848285016135cf565b91505092915050565b6138b1816145ec565b82525050565b6138c0816145ec565b82525050565b6138cf816145fe565b82525050565b60006138e08261440f565b6138ea8185614425565b93506138fa8185602086016146ac565b61390381614919565b840191505092915050565b60006139198261441a565b6139238185614441565b93506139338185602086016146ac565b61393c81614919565b840191505092915050565b60006139528261441a565b61395c8185614452565b935061396c8185602086016146ac565b80840191505092915050565b6000815461398581614709565b61398f8186614452565b945060018216600081146139aa57600181146139bb576139ee565b60ff198316865281860193506139ee565b6139c4856143fa565b60005b838110156139e6578154818901526001820191506020810190506139c7565b838801955050505b50505092915050565b6000613a04602283614441565b9150613a0f8261492a565b604082019050919050565b6000613a27602683614441565b9150613a3282614979565b604082019050919050565b6000613a4a602a83614441565b9150613a55826149c8565b604082019050919050565b6000613a6d601683614441565b9150613a7882614a17565b602082019050919050565b6000613a90602c83614441565b9150613a9b82614a40565b604082019050919050565b6000613ab3602383614441565b9150613abe82614a8f565b604082019050919050565b6000613ad6602583614441565b9150613ae182614ade565b604082019050919050565b6000613af9603183614441565b9150613b0482614b2d565b604082019050919050565b6000613b1c601e83614441565b9150613b2782614b7c565b602082019050919050565b6000613b3f601f83614441565b9150613b4a82614ba5565b602082019050919050565b6000613b62603983614441565b9150613b6d82614bce565b604082019050919050565b6000613b85601883614441565b9150613b9082614c1d565b602082019050919050565b6000613ba8602b83614441565b9150613bb382614c46565b604082019050919050565b6000613bcb601283614441565b9150613bd682614c95565b602082019050919050565b6000613bee602683614441565b9150613bf982614cbe565b604082019050919050565b6000613c11602083614441565b9150613c1c82614d0d565b602082019050919050565b6000613c34602f83614441565b9150613c3f82614d36565b604082019050919050565b6000613c57601a83614441565b9150613c6282614d85565b602082019050919050565b6000613c7a603283614441565b9150613c8582614dae565b604082019050919050565b6000613c9d602283614441565b9150613ca882614dfd565b604082019050919050565b6000613cc0600083614436565b9150613ccb82614e4c565b600082019050919050565b6000613ce3601083614441565b9150613cee82614e4f565b602082019050919050565b6000613d06603383614441565b9150613d1182614e78565b604082019050919050565b6000613d29601683614441565b9150613d3482614ec7565b602082019050919050565b6000613d4c601d83614441565b9150613d5782614ef0565b602082019050919050565b6000613d6f602183614441565b9150613d7a82614f19565b604082019050919050565b6000613d92602e83614441565b9150613d9d82614f68565b604082019050919050565b6000613db5602683614441565b9150613dc082614fb7565b604082019050919050565b6000613dd8601f83614441565b9150613de382615006565b602082019050919050565b6000613dfb602f83614441565b9150613e068261502f565b604082019050919050565b6000613e1e602d83614441565b9150613e298261507e565b604082019050919050565b6000613e41602283614441565b9150613e4c826150cd565b604082019050919050565b604082016000820151613e6d60008501826138a8565b506020820151613e806020850182613e95565b50505050565b613e8f81614672565b82525050565b613e9e8161467c565b82525050565b6000613eb08286613947565b9150613ebc8285613947565b9150613ec88284613978565b9150819050949350505050565b6000613ee082613cb3565b9150819050919050565b6000602082019050613eff60008301846138b7565b92915050565b6000608082019050613f1a60008301876138b7565b613f2760208301866138b7565b613f346040830185613e86565b8181036060830152613f4681846138d5565b905095945050505050565b6000602082019050613f6660008301846138c6565b92915050565b60006020820190508181036000830152613f86818461390e565b905092915050565b60006020820190508181036000830152613fa7816139f7565b9050919050565b60006020820190508181036000830152613fc781613a1a565b9050919050565b60006020820190508181036000830152613fe781613a3d565b9050919050565b6000602082019050818103600083015261400781613a60565b9050919050565b6000602082019050818103600083015261402781613a83565b9050919050565b6000602082019050818103600083015261404781613aa6565b9050919050565b6000602082019050818103600083015261406781613ac9565b9050919050565b6000602082019050818103600083015261408781613aec565b9050919050565b600060208201905081810360008301526140a781613b0f565b9050919050565b600060208201905081810360008301526140c781613b32565b9050919050565b600060208201905081810360008301526140e781613b55565b9050919050565b6000602082019050818103600083015261410781613b78565b9050919050565b6000602082019050818103600083015261412781613b9b565b9050919050565b6000602082019050818103600083015261414781613bbe565b9050919050565b6000602082019050818103600083015261416781613be1565b9050919050565b6000602082019050818103600083015261418781613c04565b9050919050565b600060208201905081810360008301526141a781613c27565b9050919050565b600060208201905081810360008301526141c781613c4a565b9050919050565b600060208201905081810360008301526141e781613c6d565b9050919050565b6000602082019050818103600083015261420781613c90565b9050919050565b6000602082019050818103600083015261422781613cd6565b9050919050565b6000602082019050818103600083015261424781613cf9565b9050919050565b6000602082019050818103600083015261426781613d1c565b9050919050565b6000602082019050818103600083015261428781613d3f565b9050919050565b600060208201905081810360008301526142a781613d62565b9050919050565b600060208201905081810360008301526142c781613d85565b9050919050565b600060208201905081810360008301526142e781613da8565b9050919050565b6000602082019050818103600083015261430781613dcb565b9050919050565b6000602082019050818103600083015261432781613dee565b9050919050565b6000602082019050818103600083015261434781613e11565b9050919050565b6000602082019050818103600083015261436781613e34565b9050919050565b60006040820190506143836000830184613e57565b92915050565b600060208201905061439e6000830184613e86565b92915050565b60006143ae6143bf565b90506143ba828261473b565b919050565b6000604051905090565b600067ffffffffffffffff8211156143e4576143e36148cc565b5b6143ed82614919565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061446882614636565b915061447383614636565b9250826fffffffffffffffffffffffffffffffff0382111561449857614497614810565b5b828201905092915050565b60006144ae82614672565b91506144b983614672565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144ee576144ed614810565b5b828201905092915050565b600061450482614672565b915061450f83614672565b92508261451f5761451e61483f565b5b828204905092915050565b600061453582614672565b915061454083614672565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561457957614578614810565b5b828202905092915050565b600061458f82614636565b915061459a83614636565b9250828210156145ad576145ac614810565b5b828203905092915050565b60006145c382614672565b91506145ce83614672565b9250828210156145e1576145e0614810565b5b828203905092915050565b60006145f782614652565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156146ca5780820151818401526020810190506146af565b838111156146d9576000848401525b50505050565b60006146ea82614672565b915060008214156146fe576146fd614810565b5b600182039050919050565b6000600282049050600182168061472157607f821691505b602082108114156147355761473461486e565b5b50919050565b61474482614919565b810181811067ffffffffffffffff82111715614763576147626148cc565b5b80604052505050565b600061477782614672565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147aa576147a9614810565b5b600182019050919050565b60006147c082614690565b915060ff8214156147d4576147d3614810565b5b600182019050919050565b60006147ea82614672565b91506147f583614672565b9250826148055761480461483f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f63616e206e6f7420667265656d696e7420616761696e00000000000000000000600082015250565b7f63616e206f6e6c79206d696e742061206d756c7469706c65206f66207468652060008201527f6d6178426174636853697a650000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7920666f72206f6e636500600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768206d696e7465642079657420666f722074686973206360008201527f6c65616e75700000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b615125816145ec565b811461513057600080fd5b50565b61513c816145fe565b811461514757600080fd5b50565b6151538161460a565b811461515e57600080fd5b50565b61516a81614672565b811461517557600080fd5b50565b61518181614690565b811461518c57600080fd5b5056fea26469706673582212204e14ff31eca1c34b86c1bc2edc8e95187d275988740992558caa9e54d2b7b6df64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000001388

-----Decoded View---------------
Arg [0] : maxBatchSize_ (uint256): 10
Arg [1] : collectionSize_ (uint256): 5000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001388


Deployed Bytecode Sourcemap

395:2912:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4082:370:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5808:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7453:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7016:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2639:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8303:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2920:118:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3272:746:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;905:321:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8508:157:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2804:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2623:100:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5631:118:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4508:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1650:94:9;;;;;;;;;;;;;:::i;:::-;;1928:312:12;;;:::i;:::-;;1230:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;457:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;999:87:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3157:147:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5963:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7721:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2729:181:12;;;;;;;;;;;;;:::i;:::-;;1411:515;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8728:311:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6128:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13141:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3044:107:12;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8058:186:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1899:192:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4082:370:3;4209:4;4254:25;4239:40;;;:11;:40;;;;:99;;;;4305:33;4290:48;;;:11;:48;;;;4239:99;:160;;;;4364:35;4349:50;;;:11;:50;;;;4239:160;:207;;;;4410:36;4434:11;4410:23;:36::i;:::-;4239:207;4225:221;;4082:370;;;:::o;5808:94::-;5862:13;5891:5;5884:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5808:94;:::o;7453:204::-;7521:7;7545:16;7553:7;7545;:16::i;:::-;7537:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7627:15;:24;7643:7;7627:24;;;;;;;;;;;;;;;;;;;;;7620:31;;7453:204;;;:::o;7016:379::-;7085:13;7101:24;7117:7;7101:15;:24::i;:::-;7085:40;;7146:5;7140:11;;:2;:11;;;;7132:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;7231:5;7215:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;7240:37;7257:5;7264:12;:10;:12::i;:::-;7240:16;:37::i;:::-;7215:62;7199:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;7361:28;7370:2;7374:7;7383:5;7361:8;:28::i;:::-;7078:317;7016:379;;:::o;2639:96::-;2692:7;2728:1;2715:12;;:14;;;;:::i;:::-;2708:21;;2639:96;:::o;8303:142::-;8411:28;8421:4;8427:2;8431:7;8411:9;:28::i;:::-;8303:142;;;:::o;2920:118:12:-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:10::1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;3004:28:12::2;3023:8;3004:18;:28::i;:::-;1669:1:10::1;2621:7;:22;;;;2920:118:12::0;:::o;3272:746:3:-;3381:7;3417:16;3427:5;3417:9;:16::i;:::-;3408:5;:25;;3400:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;3479:22;3504:13;:11;:13::i;:::-;3479:38;;3524:19;3546:1;3524:23;;3554:25;3604:9;3616:1;3604:13;;3599:351;3624:14;3619:1;:19;3599:351;;3654:31;3688:11;:14;3700:1;3688:14;;;;;;;;;;;3654:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3741:1;3715:28;;:9;:14;;;:28;;;3711:89;;3776:9;:14;;;3756:34;;3711:89;3833:5;3812:26;;:17;:26;;;3808:135;;;3870:5;3855:11;:20;3851:59;;;3897:1;3890:8;;;;;;;;;3851:59;3920:13;;;;;:::i;:::-;;;;3808:135;3645:305;3640:3;;;;;:::i;:::-;;;;3599:351;;;;3956:56;;;;;;;;;;:::i;:::-;;;;;;;;3272:746;;;;;:::o;905:321:12:-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1009:1:12::1;993:12;982:8;:23;;;;;;:::i;:::-;:28;965:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1081:17;1112:12;1101:8;:23;;;;;;:::i;:::-;1081:43;;1136:7;1131:90;1153:9;1149:1;:13;;;1131:90;;;1178:35;1188:10;1200:12;1178:9;:35::i;:::-;1164:3;;;;;:::i;:::-;;;;1131:90;;;;957:269;905:321:::0;:::o;8508:157:3:-;8620:39;8637:4;8643:2;8647:7;8620:39;;;;;;;;;;;;:16;:39::i;:::-;8508:157;;;:::o;2804:177::-;2871:7;2903:13;:11;:13::i;:::-;2895:5;:21;2887:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;2970:5;2963:12;;2804:177;;;:::o;2623:100:12:-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2710:7:12::1;;2694:13;:23;;;;;;;:::i;:::-;;2623:100:::0;;:::o;5631:118:3:-;5695:7;5718:20;5730:7;5718:11;:20::i;:::-;:25;;;5711:32;;5631:118;;;:::o;4508:211::-;4572:7;4613:1;4596:19;;:5;:19;;;;4588:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4685:12;:19;4698:5;4685:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;4677:36;;4670:43;;4508:211;;;:::o;1650:94:9:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;1928:312:12:-;838:10;825:23;;:9;:23;;;817:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2040:14:::1;2035:1;2019:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:35;;2011:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;2124:5;2100:29;;:8;:20;2109:10;2100:20;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;2084:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;2199:4;2176:8;:20;2185:10;2176:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;2210:24;2220:10;2232:1;2210:9;:24::i;:::-;1928:312::o:0;1230:177::-;:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1335:14:12::1;1325:6;1309:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:40;;1301:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;1379:22;1389:3;1394:6;1379:9;:22::i;:::-;1230:177:::0;;:::o;457:48::-;;;:::o;999:87:9:-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;3157:147:12:-;3238:21;;:::i;:::-;3278:20;3290:7;3278:11;:20::i;:::-;3271:27;;3157:147;;;:::o;5963:98:3:-;6019:13;6048:7;6041:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5963:98;:::o;7721:274::-;7824:12;:10;:12::i;:::-;7812:24;;:8;:24;;;;7804:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;7921:8;7876:18;:32;7895:12;:10;:12::i;:::-;7876:32;;;;;;;;;;;;;;;:42;7909:8;7876:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;7970:8;7941:48;;7956:12;:10;:12::i;:::-;7941:48;;;7980:8;7941:48;;;;;;:::i;:::-;;;;;;;;7721:274;;:::o;2729:181:12:-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1:10::1;2309:7;;:19;;2301:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1713:1;2442:7;:18;;;;2794:12:12::2;2812:10;:15;;2835:21;2812:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2793:68;;;2876:7;2868:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;2786:124;1669:1:10::1;2621:7;:22;;;;2729:181:12:o:0;1411:515::-;838:10;825:23;;:9;:23;;;817:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1554:1:::1;1538:12;1527:8;:23;;;;:::i;:::-;:28;1510:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;1646:3;1635:8;:14;;1627:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;1734:14;1722:8;1706:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;1698:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1778:14;1804:2;1795:8;:11;;;;:::i;:::-;1778:28;;1817:7;1813:75;1834:6;1830:1;:10;;;1813:75;;;1855:25;1865:10;1877:2;1855:9;:25::i;:::-;1842:3;;;;;:::i;:::-;;;;1813:75;;;;1894:26;1913:6;1907:5;;:12;;;;:::i;:::-;1894;:26::i;:::-;1501:425;1411:515:::0;:::o;8728:311:3:-;8865:28;8875:4;8881:2;8885:7;8865:9;:28::i;:::-;8916:48;8939:4;8945:2;8949:7;8958:5;8916:22;:48::i;:::-;8900:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;8728:311;;;;:::o;6128:510::-;6226:13;6273:16;6281:7;6273;:16::i;:::-;6257:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;6386:1;6377:7;:10;;6361:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;6459:21;6483:10;:8;:10::i;:::-;6459:34;;6538:1;6520:7;6514:21;:25;:118;;;;;;;;;;;;;;;;;6575:7;6584:18;:7;:16;:18::i;:::-;6603:13;6558:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6514:118;6500:132;;;6128:510;;;:::o;13141:43::-;;;;:::o;3044:107:12:-;3102:7;3125:20;3139:5;3125:13;:20::i;:::-;3118:27;;3044:107;;;:::o;8058:186:3:-;8180:4;8203:18;:25;8222:5;8203:25;;;;;;;;;;;;;;;:35;8229:8;8203:35;;;;;;;;;;;;;;;;;;;;;;;;;8196:42;;8058:186;;;;:::o;1899:192:9:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;787:157:2:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;9278:105:3:-;9335:4;9365:12;;9355:7;:22;9348:29;;9278:105;;;:::o;601:98:1:-;654:7;681:10;674:17;;601:98;:::o;12963:172:3:-;13087:2;13060:15;:24;13076:7;13060:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;13121:7;13117:2;13101:28;;13110:5;13101:28;;;;;;;;;;;;12963:172;;;:::o;11330:1527::-;11427:35;11465:20;11477:7;11465:11;:20::i;:::-;11427:58;;11494:22;11536:13;:18;;;11520:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;11589:12;:10;:12::i;:::-;11565:36;;:20;11577:7;11565:11;:20::i;:::-;:36;;;11520:81;:142;;;;11612:50;11629:13;:18;;;11649:12;:10;:12::i;:::-;11612:16;:50::i;:::-;11520:142;11494:169;;11686:17;11670:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;11818:4;11796:26;;:13;:18;;;:26;;;11780:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;11907:1;11893:16;;:2;:16;;;;11885:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;11960:43;11982:4;11988:2;11992:7;12001:1;11960:21;:43::i;:::-;12060:49;12077:1;12081:7;12090:13;:18;;;12060:8;:49::i;:::-;12148:1;12118:12;:18;12131:4;12118:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12184:1;12156:12;:16;12169:2;12156:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12215:43;;;;;;;;12230:2;12215:43;;;;;;12241:15;12215:43;;;;;12192:11;:20;12204:7;12192:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12486:19;12518:1;12508:7;:11;;;;:::i;:::-;12486:33;;12571:1;12530:43;;:11;:24;12542:11;12530:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;12526:236;;;12588:20;12596:11;12588:7;:20::i;:::-;12584:171;;;12648:97;;;;;;;;12675:13;:18;;;12648:97;;;;;;12706:13;:28;;;12648:97;;;;;12621:11;:24;12633:11;12621:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12584:171;12526:236;12794:7;12790:2;12775:27;;12784:4;12775:27;;;;;;;;;;;;12809:42;12830:4;12836:2;12840:7;12849:1;12809:20;:42::i;:::-;11420:1437;;;11330:1527;;;:::o;13289:846::-;13351:25;13379:24;;13351:52;;13429:1;13418:8;:12;13410:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;13466:16;13516:1;13505:8;13485:17;:28;;;;:::i;:::-;:32;;;;:::i;:::-;13466:51;;13556:1;13539:14;:18;;;;:::i;:::-;13528:8;:29;13524:81;;;13596:1;13579:14;:18;;;;:::i;:::-;13568:29;;13524:81;13720:17;13728:8;13720:7;:17::i;:::-;13712:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13792:9;13804:17;13792:29;;13787:297;13828:8;13823:1;:13;13787:297;;13887:1;13856:33;;:11;:14;13868:1;13856:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;13852:225;;;13902:31;13936:14;13948:1;13936:11;:14::i;:::-;13902:48;;13978:89;;;;;;;;14005:9;:14;;;13978:89;;;;;;14032:9;:24;;;13978:89;;;;;13961:11;:14;13973:1;13961:14;;;;;;;;;;;:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13891:186;13852:225;13838:3;;;;;:::i;:::-;;;;13787:297;;;;14128:1;14117:8;:12;;;;:::i;:::-;14090:24;:39;;;;13344:791;;13289:846;:::o;9389:98::-;9454:27;9464:2;9468:8;9454:27;;;;;;;;;;;;:9;:27::i;:::-;9389:98;;:::o;4971:606::-;5047:21;;:::i;:::-;5088:16;5096:7;5088;:16::i;:::-;5080:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5160:26;5208:12;5197:7;:23;5193:93;;5277:1;5262:12;5252:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;5231:47;;5193:93;5299:12;5314:7;5299:22;;5294:212;5331:18;5323:4;:26;5294:212;;5368:31;5402:11;:17;5414:4;5402:17;;;;;;;;;;;5368:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5458:1;5432:28;;:9;:14;;;:28;;;5428:71;;5480:9;5473:16;;;;;;;5428:71;5359:147;5351:6;;;;;:::i;:::-;;;;5294:212;;;;5514:57;;;;;;;;;;:::i;:::-;;;;;;;;4971:606;;;;:::o;2099:173:9:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2144:128;2099:173;:::o;2244:200:12:-;2316:4;2303:9;:17;;2295:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;2370:4;2358:9;:16;2354:85;;;2393:10;2385:28;;:46;2426:4;2414:9;:16;;;;:::i;:::-;2385:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2354:85;2244:200;:::o;14678:690:3:-;14815:4;14832:15;:2;:13;;;:15::i;:::-;14828:535;;;14887:2;14871:36;;;14908:12;:10;:12::i;:::-;14922:4;14928:7;14937:5;14871:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14858:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15119:1;15102:6;:13;:18;15098:215;;;15135:61;;;;;;;;;;:::i;:::-;;;;;;;;15098:215;15281:6;15275:13;15266:6;15262:2;15258:15;15251:38;14858:464;15003:45;;;14993:55;;;:6;:55;;;;14986:62;;;;;14828:535;15351:4;15344:11;;14678:690;;;;;;;:::o;2509:108:12:-;2569:13;2598;2591:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2509:108;:::o;288:723:11:-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;4725:240:3:-;4786:7;4835:1;4818:19;;:5;:19;;;;4802:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;4926:12;:19;4939:5;4926:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;4918:41;;4911:48;;4725:240;;;:::o;15830:141::-;;;;;:::o;16357:140::-;;;;;:::o;9826:1272::-;9931:20;9954:12;;9931:35;;9995:1;9981:16;;:2;:16;;;;9973:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10172:21;10180:12;10172:7;:21::i;:::-;10171:22;10163:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;10254:12;10242:8;:24;;10234:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10314:61;10344:1;10348:2;10352:12;10366:8;10314:21;:61::i;:::-;10384:30;10417:12;:16;10430:2;10417:16;;;;;;;;;;;;;;;10384:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10459:119;;;;;;;;10509:8;10479:11;:19;;;:39;;;;:::i;:::-;10459:119;;;;;;10562:8;10527:11;:24;;;:44;;;;:::i;:::-;10459:119;;;;;10440:12;:16;10453:2;10440:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10613:43;;;;;;;;10628:2;10613:43;;;;;;10639:15;10613:43;;;;;10585:11;:25;10597:12;10585:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10665:20;10688:12;10665:35;;10714:9;10709:281;10733:8;10729:1;:12;10709:281;;;10787:12;10783:2;10762:38;;10779:1;10762:38;;;;;;;;;;;;10827:59;10858:1;10862:2;10866:12;10880:5;10827:22;:59::i;:::-;10809:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;10968:14;;;;;:::i;:::-;;;;10743:3;;;;;:::i;:::-;;;;10709:281;;;;11013:12;10998;:27;;;;11032:60;11061:1;11065:2;11069:12;11083:8;11032:20;:60::i;:::-;9924:1174;;;9826:1272;;;:::o;743:387:0:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:13:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:135::-;2116:5;2154:6;2141:20;2132:29;;2170:31;2195:5;2170:31;:::i;:::-;2072:135;;;;:::o;2213:329::-;2272:6;2321:2;2309:9;2300:7;2296:23;2292:32;2289:119;;;2327:79;;:::i;:::-;2289:119;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2213:329;;;;:::o;2548:474::-;2616:6;2624;2673:2;2661:9;2652:7;2648:23;2644:32;2641:119;;;2679:79;;:::i;:::-;2641:119;2799:1;2824:53;2869:7;2860:6;2849:9;2845:22;2824:53;:::i;:::-;2814:63;;2770:117;2926:2;2952:53;2997:7;2988:6;2977:9;2973:22;2952:53;:::i;:::-;2942:63;;2897:118;2548:474;;;;;:::o;3028:619::-;3105:6;3113;3121;3170:2;3158:9;3149:7;3145:23;3141:32;3138:119;;;3176:79;;:::i;:::-;3138:119;3296:1;3321:53;3366:7;3357:6;3346:9;3342:22;3321:53;:::i;:::-;3311:63;;3267:117;3423:2;3449:53;3494:7;3485:6;3474:9;3470:22;3449:53;:::i;:::-;3439:63;;3394:118;3551:2;3577:53;3622:7;3613:6;3602:9;3598:22;3577:53;:::i;:::-;3567:63;;3522:118;3028:619;;;;;:::o;3653:943::-;3748:6;3756;3764;3772;3821:3;3809:9;3800:7;3796:23;3792:33;3789:120;;;3828:79;;:::i;:::-;3789:120;3948:1;3973:53;4018:7;4009:6;3998:9;3994:22;3973:53;:::i;:::-;3963:63;;3919:117;4075:2;4101:53;4146:7;4137:6;4126:9;4122:22;4101:53;:::i;:::-;4091:63;;4046:118;4203:2;4229:53;4274:7;4265:6;4254:9;4250:22;4229:53;:::i;:::-;4219:63;;4174:118;4359:2;4348:9;4344:18;4331:32;4390:18;4382:6;4379:30;4376:117;;;4412:79;;:::i;:::-;4376:117;4517:62;4571:7;4562:6;4551:9;4547:22;4517:62;:::i;:::-;4507:72;;4302:287;3653:943;;;;;;;:::o;4602:468::-;4667:6;4675;4724:2;4712:9;4703:7;4699:23;4695:32;4692:119;;;4730:79;;:::i;:::-;4692:119;4850:1;4875:53;4920:7;4911:6;4900:9;4896:22;4875:53;:::i;:::-;4865:63;;4821:117;4977:2;5003:50;5045:7;5036:6;5025:9;5021:22;5003:50;:::i;:::-;4993:60;;4948:115;4602:468;;;;;:::o;5076:474::-;5144:6;5152;5201:2;5189:9;5180:7;5176:23;5172:32;5169:119;;;5207:79;;:::i;:::-;5169:119;5327:1;5352:53;5397:7;5388:6;5377:9;5373:22;5352:53;:::i;:::-;5342:63;;5298:117;5454:2;5480:53;5525:7;5516:6;5505:9;5501:22;5480:53;:::i;:::-;5470:63;;5425:118;5076:474;;;;;:::o;5556:327::-;5614:6;5663:2;5651:9;5642:7;5638:23;5634:32;5631:119;;;5669:79;;:::i;:::-;5631:119;5789:1;5814:52;5858:7;5849:6;5838:9;5834:22;5814:52;:::i;:::-;5804:62;;5760:116;5556:327;;;;:::o;5889:349::-;5958:6;6007:2;5995:9;5986:7;5982:23;5978:32;5975:119;;;6013:79;;:::i;:::-;5975:119;6133:1;6158:63;6213:7;6204:6;6193:9;6189:22;6158:63;:::i;:::-;6148:73;;6104:127;5889:349;;;;:::o;6244:529::-;6315:6;6323;6372:2;6360:9;6351:7;6347:23;6343:32;6340:119;;;6378:79;;:::i;:::-;6340:119;6526:1;6515:9;6511:17;6498:31;6556:18;6548:6;6545:30;6542:117;;;6578:79;;:::i;:::-;6542:117;6691:65;6748:7;6739:6;6728:9;6724:22;6691:65;:::i;:::-;6673:83;;;;6469:297;6244:529;;;;;:::o;6779:329::-;6838:6;6887:2;6875:9;6866:7;6862:23;6858:32;6855:119;;;6893:79;;:::i;:::-;6855:119;7013:1;7038:53;7083:7;7074:6;7063:9;7059:22;7038:53;:::i;:::-;7028:63;;6984:117;6779:329;;;;:::o;7114:325::-;7171:6;7220:2;7208:9;7199:7;7195:23;7191:32;7188:119;;;7226:79;;:::i;:::-;7188:119;7346:1;7371:51;7414:7;7405:6;7394:9;7390:22;7371:51;:::i;:::-;7361:61;;7317:115;7114:325;;;;:::o;7445:108::-;7522:24;7540:5;7522:24;:::i;:::-;7517:3;7510:37;7445:108;;:::o;7559:118::-;7646:24;7664:5;7646:24;:::i;:::-;7641:3;7634:37;7559:118;;:::o;7683:109::-;7764:21;7779:5;7764:21;:::i;:::-;7759:3;7752:34;7683:109;;:::o;7798:360::-;7884:3;7912:38;7944:5;7912:38;:::i;:::-;7966:70;8029:6;8024:3;7966:70;:::i;:::-;7959:77;;8045:52;8090:6;8085:3;8078:4;8071:5;8067:16;8045:52;:::i;:::-;8122:29;8144:6;8122:29;:::i;:::-;8117:3;8113:39;8106:46;;7888:270;7798:360;;;;:::o;8164:364::-;8252:3;8280:39;8313:5;8280:39;:::i;:::-;8335:71;8399:6;8394:3;8335:71;:::i;:::-;8328:78;;8415:52;8460:6;8455:3;8448:4;8441:5;8437:16;8415:52;:::i;:::-;8492:29;8514:6;8492:29;:::i;:::-;8487:3;8483:39;8476:46;;8256:272;8164:364;;;;:::o;8534:377::-;8640:3;8668:39;8701:5;8668:39;:::i;:::-;8723:89;8805:6;8800:3;8723:89;:::i;:::-;8716:96;;8821:52;8866:6;8861:3;8854:4;8847:5;8843:16;8821:52;:::i;:::-;8898:6;8893:3;8889:16;8882:23;;8644:267;8534:377;;;;:::o;8941:845::-;9044:3;9081:5;9075:12;9110:36;9136:9;9110:36;:::i;:::-;9162:89;9244:6;9239:3;9162:89;:::i;:::-;9155:96;;9282:1;9271:9;9267:17;9298:1;9293:137;;;;9444:1;9439:341;;;;9260:520;;9293:137;9377:4;9373:9;9362;9358:25;9353:3;9346:38;9413:6;9408:3;9404:16;9397:23;;9293:137;;9439:341;9506:38;9538:5;9506:38;:::i;:::-;9566:1;9580:154;9594:6;9591:1;9588:13;9580:154;;;9668:7;9662:14;9658:1;9653:3;9649:11;9642:35;9718:1;9709:7;9705:15;9694:26;;9616:4;9613:1;9609:12;9604:17;;9580:154;;;9763:6;9758:3;9754:16;9747:23;;9446:334;;9260:520;;9048:738;;8941:845;;;;:::o;9792:366::-;9934:3;9955:67;10019:2;10014:3;9955:67;:::i;:::-;9948:74;;10031:93;10120:3;10031:93;:::i;:::-;10149:2;10144:3;10140:12;10133:19;;9792:366;;;:::o;10164:::-;10306:3;10327:67;10391:2;10386:3;10327:67;:::i;:::-;10320:74;;10403:93;10492:3;10403:93;:::i;:::-;10521:2;10516:3;10512:12;10505:19;;10164:366;;;:::o;10536:::-;10678:3;10699:67;10763:2;10758:3;10699:67;:::i;:::-;10692:74;;10775:93;10864:3;10775:93;:::i;:::-;10893:2;10888:3;10884:12;10877:19;;10536:366;;;:::o;10908:::-;11050:3;11071:67;11135:2;11130:3;11071:67;:::i;:::-;11064:74;;11147:93;11236:3;11147:93;:::i;:::-;11265:2;11260:3;11256:12;11249:19;;10908:366;;;:::o;11280:::-;11422:3;11443:67;11507:2;11502:3;11443:67;:::i;:::-;11436:74;;11519:93;11608:3;11519:93;:::i;:::-;11637:2;11632:3;11628:12;11621:19;;11280:366;;;:::o;11652:::-;11794:3;11815:67;11879:2;11874:3;11815:67;:::i;:::-;11808:74;;11891:93;11980:3;11891:93;:::i;:::-;12009:2;12004:3;12000:12;11993:19;;11652:366;;;:::o;12024:::-;12166:3;12187:67;12251:2;12246:3;12187:67;:::i;:::-;12180:74;;12263:93;12352:3;12263:93;:::i;:::-;12381:2;12376:3;12372:12;12365:19;;12024:366;;;:::o;12396:::-;12538:3;12559:67;12623:2;12618:3;12559:67;:::i;:::-;12552:74;;12635:93;12724:3;12635:93;:::i;:::-;12753:2;12748:3;12744:12;12737:19;;12396:366;;;:::o;12768:::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:::-;13282:3;13303:67;13367:2;13362:3;13303:67;:::i;:::-;13296:74;;13379:93;13468:3;13379:93;:::i;:::-;13497:2;13492:3;13488:12;13481:19;;13140:366;;;:::o;13512:::-;13654:3;13675:67;13739:2;13734:3;13675:67;:::i;:::-;13668:74;;13751:93;13840:3;13751:93;:::i;:::-;13869:2;13864:3;13860:12;13853:19;;13512:366;;;:::o;13884:::-;14026:3;14047:67;14111:2;14106:3;14047:67;:::i;:::-;14040:74;;14123:93;14212:3;14123:93;:::i;:::-;14241:2;14236:3;14232:12;14225:19;;13884:366;;;:::o;14256:::-;14398:3;14419:67;14483:2;14478:3;14419:67;:::i;:::-;14412:74;;14495:93;14584:3;14495:93;:::i;:::-;14613:2;14608:3;14604:12;14597:19;;14256:366;;;:::o;14628:::-;14770:3;14791:67;14855:2;14850:3;14791:67;:::i;:::-;14784:74;;14867:93;14956:3;14867:93;:::i;:::-;14985:2;14980:3;14976:12;14969:19;;14628:366;;;:::o;15000:::-;15142:3;15163:67;15227:2;15222:3;15163:67;:::i;:::-;15156:74;;15239:93;15328:3;15239:93;:::i;:::-;15357:2;15352:3;15348:12;15341:19;;15000:366;;;:::o;15372:::-;15514:3;15535:67;15599:2;15594:3;15535:67;:::i;:::-;15528:74;;15611:93;15700:3;15611:93;:::i;:::-;15729:2;15724:3;15720:12;15713:19;;15372:366;;;:::o;15744:::-;15886:3;15907:67;15971:2;15966:3;15907:67;:::i;:::-;15900:74;;15983:93;16072:3;15983:93;:::i;:::-;16101:2;16096:3;16092:12;16085:19;;15744:366;;;:::o;16116:::-;16258:3;16279:67;16343:2;16338:3;16279:67;:::i;:::-;16272:74;;16355:93;16444:3;16355:93;:::i;:::-;16473:2;16468:3;16464:12;16457:19;;16116:366;;;:::o;16488:::-;16630:3;16651:67;16715:2;16710:3;16651:67;:::i;:::-;16644:74;;16727:93;16816:3;16727:93;:::i;:::-;16845:2;16840:3;16836:12;16829:19;;16488:366;;;:::o;16860:::-;17002:3;17023:67;17087:2;17082:3;17023:67;:::i;:::-;17016:74;;17099:93;17188:3;17099:93;:::i;:::-;17217:2;17212:3;17208:12;17201:19;;16860:366;;;:::o;17232:398::-;17391:3;17412:83;17493:1;17488:3;17412:83;:::i;:::-;17405:90;;17504:93;17593:3;17504:93;:::i;:::-;17622:1;17617:3;17613:11;17606:18;;17232:398;;;:::o;17636:366::-;17778:3;17799:67;17863:2;17858:3;17799:67;:::i;:::-;17792:74;;17875:93;17964:3;17875:93;:::i;:::-;17993:2;17988:3;17984:12;17977:19;;17636:366;;;:::o;18008:::-;18150:3;18171:67;18235:2;18230:3;18171:67;:::i;:::-;18164:74;;18247:93;18336:3;18247:93;:::i;:::-;18365:2;18360:3;18356:12;18349:19;;18008:366;;;:::o;18380:::-;18522:3;18543:67;18607:2;18602:3;18543:67;:::i;:::-;18536:74;;18619:93;18708:3;18619:93;:::i;:::-;18737:2;18732:3;18728:12;18721:19;;18380:366;;;:::o;18752:::-;18894:3;18915:67;18979:2;18974:3;18915:67;:::i;:::-;18908:74;;18991:93;19080:3;18991:93;:::i;:::-;19109:2;19104:3;19100:12;19093:19;;18752:366;;;:::o;19124:::-;19266:3;19287:67;19351:2;19346:3;19287:67;:::i;:::-;19280:74;;19363:93;19452:3;19363:93;:::i;:::-;19481:2;19476:3;19472:12;19465:19;;19124:366;;;:::o;19496:::-;19638:3;19659:67;19723:2;19718:3;19659:67;:::i;:::-;19652:74;;19735:93;19824:3;19735:93;:::i;:::-;19853:2;19848:3;19844:12;19837:19;;19496:366;;;:::o;19868:::-;20010:3;20031:67;20095:2;20090:3;20031:67;:::i;:::-;20024:74;;20107:93;20196:3;20107:93;:::i;:::-;20225:2;20220:3;20216:12;20209:19;;19868:366;;;:::o;20240:::-;20382:3;20403:67;20467:2;20462:3;20403:67;:::i;:::-;20396:74;;20479:93;20568:3;20479:93;:::i;:::-;20597:2;20592:3;20588:12;20581:19;;20240:366;;;:::o;20612:::-;20754:3;20775:67;20839:2;20834:3;20775:67;:::i;:::-;20768:74;;20851:93;20940:3;20851:93;:::i;:::-;20969:2;20964:3;20960:12;20953:19;;20612:366;;;:::o;20984:::-;21126:3;21147:67;21211:2;21206:3;21147:67;:::i;:::-;21140:74;;21223:93;21312:3;21223:93;:::i;:::-;21341:2;21336:3;21332:12;21325:19;;20984:366;;;:::o;21356:::-;21498:3;21519:67;21583:2;21578:3;21519:67;:::i;:::-;21512:74;;21595:93;21684:3;21595:93;:::i;:::-;21713:2;21708:3;21704:12;21697:19;;21356:366;;;:::o;21798:527::-;21957:4;21952:3;21948:14;22044:4;22037:5;22033:16;22027:23;22063:63;22120:4;22115:3;22111:14;22097:12;22063:63;:::i;:::-;21972:164;22228:4;22221:5;22217:16;22211:23;22247:61;22302:4;22297:3;22293:14;22279:12;22247:61;:::i;:::-;22146:172;21926:399;21798:527;;:::o;22331:118::-;22418:24;22436:5;22418:24;:::i;:::-;22413:3;22406:37;22331:118;;:::o;22455:105::-;22530:23;22547:5;22530:23;:::i;:::-;22525:3;22518:36;22455:105;;:::o;22566:589::-;22791:3;22813:95;22904:3;22895:6;22813:95;:::i;:::-;22806:102;;22925:95;23016:3;23007:6;22925:95;:::i;:::-;22918:102;;23037:92;23125:3;23116:6;23037:92;:::i;:::-;23030:99;;23146:3;23139:10;;22566:589;;;;;;:::o;23161:379::-;23345:3;23367:147;23510:3;23367:147;:::i;:::-;23360:154;;23531:3;23524:10;;23161:379;;;:::o;23546:222::-;23639:4;23677:2;23666:9;23662:18;23654:26;;23690:71;23758:1;23747:9;23743:17;23734:6;23690:71;:::i;:::-;23546:222;;;;:::o;23774:640::-;23969:4;24007:3;23996:9;23992:19;23984:27;;24021:71;24089:1;24078:9;24074:17;24065:6;24021:71;:::i;:::-;24102:72;24170:2;24159:9;24155:18;24146:6;24102:72;:::i;:::-;24184;24252:2;24241:9;24237:18;24228:6;24184:72;:::i;:::-;24303:9;24297:4;24293:20;24288:2;24277:9;24273:18;24266:48;24331:76;24402:4;24393:6;24331:76;:::i;:::-;24323:84;;23774:640;;;;;;;:::o;24420:210::-;24507:4;24545:2;24534:9;24530:18;24522:26;;24558:65;24620:1;24609:9;24605:17;24596:6;24558:65;:::i;:::-;24420:210;;;;:::o;24636:313::-;24749:4;24787:2;24776:9;24772:18;24764:26;;24836:9;24830:4;24826:20;24822:1;24811:9;24807:17;24800:47;24864:78;24937:4;24928:6;24864:78;:::i;:::-;24856:86;;24636:313;;;;:::o;24955:419::-;25121:4;25159:2;25148:9;25144:18;25136:26;;25208:9;25202:4;25198:20;25194:1;25183:9;25179:17;25172:47;25236:131;25362:4;25236:131;:::i;:::-;25228:139;;24955:419;;;:::o;25380:::-;25546:4;25584:2;25573:9;25569:18;25561:26;;25633:9;25627:4;25623:20;25619:1;25608:9;25604:17;25597:47;25661:131;25787:4;25661:131;:::i;:::-;25653:139;;25380:419;;;:::o;25805:::-;25971:4;26009:2;25998:9;25994:18;25986:26;;26058:9;26052:4;26048:20;26044:1;26033:9;26029:17;26022:47;26086:131;26212:4;26086:131;:::i;:::-;26078:139;;25805:419;;;:::o;26230:::-;26396:4;26434:2;26423:9;26419:18;26411:26;;26483:9;26477:4;26473:20;26469:1;26458:9;26454:17;26447:47;26511:131;26637:4;26511:131;:::i;:::-;26503:139;;26230:419;;;:::o;26655:::-;26821:4;26859:2;26848:9;26844:18;26836:26;;26908:9;26902:4;26898:20;26894:1;26883:9;26879:17;26872:47;26936:131;27062:4;26936:131;:::i;:::-;26928:139;;26655:419;;;:::o;27080:::-;27246:4;27284:2;27273:9;27269:18;27261:26;;27333:9;27327:4;27323:20;27319:1;27308:9;27304:17;27297:47;27361:131;27487:4;27361:131;:::i;:::-;27353:139;;27080:419;;;:::o;27505:::-;27671:4;27709:2;27698:9;27694:18;27686:26;;27758:9;27752:4;27748:20;27744:1;27733:9;27729:17;27722:47;27786:131;27912:4;27786:131;:::i;:::-;27778:139;;27505:419;;;:::o;27930:::-;28096:4;28134:2;28123:9;28119:18;28111:26;;28183:9;28177:4;28173:20;28169:1;28158:9;28154:17;28147:47;28211:131;28337:4;28211:131;:::i;:::-;28203:139;;27930:419;;;:::o;28355:::-;28521:4;28559:2;28548:9;28544:18;28536:26;;28608:9;28602:4;28598:20;28594:1;28583:9;28579:17;28572:47;28636:131;28762:4;28636:131;:::i;:::-;28628:139;;28355:419;;;:::o;28780:::-;28946:4;28984:2;28973:9;28969:18;28961:26;;29033:9;29027:4;29023:20;29019:1;29008:9;29004:17;28997:47;29061:131;29187:4;29061:131;:::i;:::-;29053:139;;28780:419;;;:::o;29205:::-;29371:4;29409:2;29398:9;29394:18;29386:26;;29458:9;29452:4;29448:20;29444:1;29433:9;29429:17;29422:47;29486:131;29612:4;29486:131;:::i;:::-;29478:139;;29205:419;;;:::o;29630:::-;29796:4;29834:2;29823:9;29819:18;29811:26;;29883:9;29877:4;29873:20;29869:1;29858:9;29854:17;29847:47;29911:131;30037:4;29911:131;:::i;:::-;29903:139;;29630:419;;;:::o;30055:::-;30221:4;30259:2;30248:9;30244:18;30236:26;;30308:9;30302:4;30298:20;30294:1;30283:9;30279:17;30272:47;30336:131;30462:4;30336:131;:::i;:::-;30328:139;;30055:419;;;:::o;30480:::-;30646:4;30684:2;30673:9;30669:18;30661:26;;30733:9;30727:4;30723:20;30719:1;30708:9;30704:17;30697:47;30761:131;30887:4;30761:131;:::i;:::-;30753:139;;30480:419;;;:::o;30905:::-;31071:4;31109:2;31098:9;31094:18;31086:26;;31158:9;31152:4;31148:20;31144:1;31133:9;31129:17;31122:47;31186:131;31312:4;31186:131;:::i;:::-;31178:139;;30905:419;;;:::o;31330:::-;31496:4;31534:2;31523:9;31519:18;31511:26;;31583:9;31577:4;31573:20;31569:1;31558:9;31554:17;31547:47;31611:131;31737:4;31611:131;:::i;:::-;31603:139;;31330:419;;;:::o;31755:::-;31921:4;31959:2;31948:9;31944:18;31936:26;;32008:9;32002:4;31998:20;31994:1;31983:9;31979:17;31972:47;32036:131;32162:4;32036:131;:::i;:::-;32028:139;;31755:419;;;:::o;32180:::-;32346:4;32384:2;32373:9;32369:18;32361:26;;32433:9;32427:4;32423:20;32419:1;32408:9;32404:17;32397:47;32461:131;32587:4;32461:131;:::i;:::-;32453:139;;32180:419;;;:::o;32605:::-;32771:4;32809:2;32798:9;32794:18;32786:26;;32858:9;32852:4;32848:20;32844:1;32833:9;32829:17;32822:47;32886:131;33012:4;32886:131;:::i;:::-;32878:139;;32605:419;;;:::o;33030:::-;33196:4;33234:2;33223:9;33219:18;33211:26;;33283:9;33277:4;33273:20;33269:1;33258:9;33254:17;33247:47;33311:131;33437:4;33311:131;:::i;:::-;33303:139;;33030:419;;;:::o;33455:::-;33621:4;33659:2;33648:9;33644:18;33636:26;;33708:9;33702:4;33698:20;33694:1;33683:9;33679:17;33672:47;33736:131;33862:4;33736:131;:::i;:::-;33728:139;;33455:419;;;:::o;33880:::-;34046:4;34084:2;34073:9;34069:18;34061:26;;34133:9;34127:4;34123:20;34119:1;34108:9;34104:17;34097:47;34161:131;34287:4;34161:131;:::i;:::-;34153:139;;33880:419;;;:::o;34305:::-;34471:4;34509:2;34498:9;34494:18;34486:26;;34558:9;34552:4;34548:20;34544:1;34533:9;34529:17;34522:47;34586:131;34712:4;34586:131;:::i;:::-;34578:139;;34305:419;;;:::o;34730:::-;34896:4;34934:2;34923:9;34919:18;34911:26;;34983:9;34977:4;34973:20;34969:1;34958:9;34954:17;34947:47;35011:131;35137:4;35011:131;:::i;:::-;35003:139;;34730:419;;;:::o;35155:::-;35321:4;35359:2;35348:9;35344:18;35336:26;;35408:9;35402:4;35398:20;35394:1;35383:9;35379:17;35372:47;35436:131;35562:4;35436:131;:::i;:::-;35428:139;;35155:419;;;:::o;35580:::-;35746:4;35784:2;35773:9;35769:18;35761:26;;35833:9;35827:4;35823:20;35819:1;35808:9;35804:17;35797:47;35861:131;35987:4;35861:131;:::i;:::-;35853:139;;35580:419;;;:::o;36005:::-;36171:4;36209:2;36198:9;36194:18;36186:26;;36258:9;36252:4;36248:20;36244:1;36233:9;36229:17;36222:47;36286:131;36412:4;36286:131;:::i;:::-;36278:139;;36005:419;;;:::o;36430:::-;36596:4;36634:2;36623:9;36619:18;36611:26;;36683:9;36677:4;36673:20;36669:1;36658:9;36654:17;36647:47;36711:131;36837:4;36711:131;:::i;:::-;36703:139;;36430:419;;;:::o;36855:::-;37021:4;37059:2;37048:9;37044:18;37036:26;;37108:9;37102:4;37098:20;37094:1;37083:9;37079:17;37072:47;37136:131;37262:4;37136:131;:::i;:::-;37128:139;;36855:419;;;:::o;37280:::-;37446:4;37484:2;37473:9;37469:18;37461:26;;37533:9;37527:4;37523:20;37519:1;37508:9;37504:17;37497:47;37561:131;37687:4;37561:131;:::i;:::-;37553:139;;37280:419;;;:::o;37705:::-;37871:4;37909:2;37898:9;37894:18;37886:26;;37958:9;37952:4;37948:20;37944:1;37933:9;37929:17;37922:47;37986:131;38112:4;37986:131;:::i;:::-;37978:139;;37705:419;;;:::o;38130:346::-;38285:4;38323:2;38312:9;38308:18;38300:26;;38336:133;38466:1;38455:9;38451:17;38442:6;38336:133;:::i;:::-;38130:346;;;;:::o;38482:222::-;38575:4;38613:2;38602:9;38598:18;38590:26;;38626:71;38694:1;38683:9;38679:17;38670:6;38626:71;:::i;:::-;38482:222;;;;:::o;38710:129::-;38744:6;38771:20;;:::i;:::-;38761:30;;38800:33;38828:4;38820:6;38800:33;:::i;:::-;38710:129;;;:::o;38845:75::-;38878:6;38911:2;38905:9;38895:19;;38845:75;:::o;38926:307::-;38987:4;39077:18;39069:6;39066:30;39063:56;;;39099:18;;:::i;:::-;39063:56;39137:29;39159:6;39137:29;:::i;:::-;39129:37;;39221:4;39215;39211:15;39203:23;;38926:307;;;:::o;39239:141::-;39288:4;39311:3;39303:11;;39334:3;39331:1;39324:14;39368:4;39365:1;39355:18;39347:26;;39239:141;;;:::o;39386:98::-;39437:6;39471:5;39465:12;39455:22;;39386:98;;;:::o;39490:99::-;39542:6;39576:5;39570:12;39560:22;;39490:99;;;:::o;39595:168::-;39678:11;39712:6;39707:3;39700:19;39752:4;39747:3;39743:14;39728:29;;39595:168;;;;:::o;39769:147::-;39870:11;39907:3;39892:18;;39769:147;;;;:::o;39922:169::-;40006:11;40040:6;40035:3;40028:19;40080:4;40075:3;40071:14;40056:29;;39922:169;;;;:::o;40097:148::-;40199:11;40236:3;40221:18;;40097:148;;;;:::o;40251:273::-;40291:3;40310:20;40328:1;40310:20;:::i;:::-;40305:25;;40344:20;40362:1;40344:20;:::i;:::-;40339:25;;40466:1;40430:34;40426:42;40423:1;40420:49;40417:75;;;40472:18;;:::i;:::-;40417:75;40516:1;40513;40509:9;40502:16;;40251:273;;;;:::o;40530:305::-;40570:3;40589:20;40607:1;40589:20;:::i;:::-;40584:25;;40623:20;40641:1;40623:20;:::i;:::-;40618:25;;40777:1;40709:66;40705:74;40702:1;40699:81;40696:107;;;40783:18;;:::i;:::-;40696:107;40827:1;40824;40820:9;40813:16;;40530:305;;;;:::o;40841:185::-;40881:1;40898:20;40916:1;40898:20;:::i;:::-;40893:25;;40932:20;40950:1;40932:20;:::i;:::-;40927:25;;40971:1;40961:35;;40976:18;;:::i;:::-;40961:35;41018:1;41015;41011:9;41006:14;;40841:185;;;;:::o;41032:348::-;41072:7;41095:20;41113:1;41095:20;:::i;:::-;41090:25;;41129:20;41147:1;41129:20;:::i;:::-;41124:25;;41317:1;41249:66;41245:74;41242:1;41239:81;41234:1;41227:9;41220:17;41216:105;41213:131;;;41324:18;;:::i;:::-;41213:131;41372:1;41369;41365:9;41354:20;;41032:348;;;;:::o;41386:191::-;41426:4;41446:20;41464:1;41446:20;:::i;:::-;41441:25;;41480:20;41498:1;41480:20;:::i;:::-;41475:25;;41519:1;41516;41513:8;41510:34;;;41524:18;;:::i;:::-;41510:34;41569:1;41566;41562:9;41554:17;;41386:191;;;;:::o;41583:::-;41623:4;41643:20;41661:1;41643:20;:::i;:::-;41638:25;;41677:20;41695:1;41677:20;:::i;:::-;41672:25;;41716:1;41713;41710:8;41707:34;;;41721:18;;:::i;:::-;41707:34;41766:1;41763;41759:9;41751:17;;41583:191;;;;:::o;41780:96::-;41817:7;41846:24;41864:5;41846:24;:::i;:::-;41835:35;;41780:96;;;:::o;41882:90::-;41916:7;41959:5;41952:13;41945:21;41934:32;;41882:90;;;:::o;41978:149::-;42014:7;42054:66;42047:5;42043:78;42032:89;;41978:149;;;:::o;42133:118::-;42170:7;42210:34;42203:5;42199:46;42188:57;;42133:118;;;:::o;42257:126::-;42294:7;42334:42;42327:5;42323:54;42312:65;;42257:126;;;:::o;42389:77::-;42426:7;42455:5;42444:16;;42389:77;;;:::o;42472:101::-;42508:7;42548:18;42541:5;42537:30;42526:41;;42472:101;;;:::o;42579:86::-;42614:7;42654:4;42647:5;42643:16;42632:27;;42579:86;;;:::o;42671:154::-;42755:6;42750:3;42745;42732:30;42817:1;42808:6;42803:3;42799:16;42792:27;42671:154;;;:::o;42831:307::-;42899:1;42909:113;42923:6;42920:1;42917:13;42909:113;;;43008:1;43003:3;42999:11;42993:18;42989:1;42984:3;42980:11;42973:39;42945:2;42942:1;42938:10;42933:15;;42909:113;;;43040:6;43037:1;43034:13;43031:101;;;43120:1;43111:6;43106:3;43102:16;43095:27;43031:101;42880:258;42831:307;;;:::o;43144:171::-;43183:3;43206:24;43224:5;43206:24;:::i;:::-;43197:33;;43252:4;43245:5;43242:15;43239:41;;;43260:18;;:::i;:::-;43239:41;43307:1;43300:5;43296:13;43289:20;;43144:171;;;:::o;43321:320::-;43365:6;43402:1;43396:4;43392:12;43382:22;;43449:1;43443:4;43439:12;43470:18;43460:81;;43526:4;43518:6;43514:17;43504:27;;43460:81;43588:2;43580:6;43577:14;43557:18;43554:38;43551:84;;;43607:18;;:::i;:::-;43551:84;43372:269;43321:320;;;:::o;43647:281::-;43730:27;43752:4;43730:27;:::i;:::-;43722:6;43718:40;43860:6;43848:10;43845:22;43824:18;43812:10;43809:34;43806:62;43803:88;;;43871:18;;:::i;:::-;43803:88;43911:10;43907:2;43900:22;43690:238;43647:281;;:::o;43934:233::-;43973:3;43996:24;44014:5;43996:24;:::i;:::-;43987:33;;44042:66;44035:5;44032:77;44029:103;;;44112:18;;:::i;:::-;44029:103;44159:1;44152:5;44148:13;44141:20;;43934:233;;;:::o;44173:167::-;44210:3;44233:22;44249:5;44233:22;:::i;:::-;44224:31;;44277:4;44270:5;44267:15;44264:41;;;44285:18;;:::i;:::-;44264:41;44332:1;44325:5;44321:13;44314:20;;44173:167;;;:::o;44346:176::-;44378:1;44395:20;44413:1;44395:20;:::i;:::-;44390:25;;44429:20;44447:1;44429:20;:::i;:::-;44424:25;;44468:1;44458:35;;44473:18;;:::i;:::-;44458:35;44514:1;44511;44507:9;44502:14;;44346:176;;;;:::o;44528:180::-;44576:77;44573:1;44566:88;44673:4;44670:1;44663:15;44697:4;44694:1;44687:15;44714:180;44762:77;44759:1;44752:88;44859:4;44856:1;44849:15;44883:4;44880:1;44873:15;44900:180;44948:77;44945:1;44938:88;45045:4;45042:1;45035:15;45069:4;45066:1;45059:15;45086:180;45134:77;45131:1;45124:88;45231:4;45228:1;45221:15;45255:4;45252:1;45245:15;45272:180;45320:77;45317:1;45310:88;45417:4;45414:1;45407:15;45441:4;45438:1;45431:15;45458:117;45567:1;45564;45557:12;45581:117;45690:1;45687;45680:12;45704:117;45813:1;45810;45803:12;45827:117;45936:1;45933;45926:12;45950:117;46059:1;46056;46049:12;46073:117;46182:1;46179;46172:12;46196:102;46237:6;46288:2;46284:7;46279:2;46272:5;46268:14;46264:28;46254:38;;46196:102;;;:::o;46304:221::-;46444:34;46440:1;46432:6;46428:14;46421:58;46513:4;46508:2;46500:6;46496:15;46489:29;46304:221;:::o;46531:225::-;46671:34;46667:1;46659:6;46655:14;46648:58;46740:8;46735:2;46727:6;46723:15;46716:33;46531:225;:::o;46762:229::-;46902:34;46898:1;46890:6;46886:14;46879:58;46971:12;46966:2;46958:6;46954:15;46947:37;46762:229;:::o;46997:172::-;47137:24;47133:1;47125:6;47121:14;47114:48;46997:172;:::o;47175:231::-;47315:34;47311:1;47303:6;47299:14;47292:58;47384:14;47379:2;47371:6;47367:15;47360:39;47175:231;:::o;47412:222::-;47552:34;47548:1;47540:6;47536:14;47529:58;47621:5;47616:2;47608:6;47604:15;47597:30;47412:222;:::o;47640:224::-;47780:34;47776:1;47768:6;47764:14;47757:58;47849:7;47844:2;47836:6;47832:15;47825:32;47640:224;:::o;47870:236::-;48010:34;48006:1;47998:6;47994:14;47987:58;48079:19;48074:2;48066:6;48062:15;48055:44;47870:236;:::o;48112:180::-;48252:32;48248:1;48240:6;48236:14;48229:56;48112:180;:::o;48298:181::-;48438:33;48434:1;48426:6;48422:14;48415:57;48298:181;:::o;48485:244::-;48625:34;48621:1;48613:6;48609:14;48602:58;48694:27;48689:2;48681:6;48677:15;48670:52;48485:244;:::o;48735:174::-;48875:26;48871:1;48863:6;48859:14;48852:50;48735:174;:::o;48915:230::-;49055:34;49051:1;49043:6;49039:14;49032:58;49124:13;49119:2;49111:6;49107:15;49100:38;48915:230;:::o;49151:168::-;49291:20;49287:1;49279:6;49275:14;49268:44;49151:168;:::o;49325:225::-;49465:34;49461:1;49453:6;49449:14;49442:58;49534:8;49529:2;49521:6;49517:15;49510:33;49325:225;:::o;49556:182::-;49696:34;49692:1;49684:6;49680:14;49673:58;49556:182;:::o;49744:234::-;49884:34;49880:1;49872:6;49868:14;49861:58;49953:17;49948:2;49940:6;49936:15;49929:42;49744:234;:::o;49984:176::-;50124:28;50120:1;50112:6;50108:14;50101:52;49984:176;:::o;50166:237::-;50306:34;50302:1;50294:6;50290:14;50283:58;50375:20;50370:2;50362:6;50358:15;50351:45;50166:237;:::o;50409:221::-;50549:34;50545:1;50537:6;50533:14;50526:58;50618:4;50613:2;50605:6;50601:15;50594:29;50409:221;:::o;50636:114::-;;:::o;50756:166::-;50896:18;50892:1;50884:6;50880:14;50873:42;50756:166;:::o;50928:238::-;51068:34;51064:1;51056:6;51052:14;51045:58;51137:21;51132:2;51124:6;51120:15;51113:46;50928:238;:::o;51172:172::-;51312:24;51308:1;51300:6;51296:14;51289:48;51172:172;:::o;51350:179::-;51490:31;51486:1;51478:6;51474:14;51467:55;51350:179;:::o;51535:220::-;51675:34;51671:1;51663:6;51659:14;51652:58;51744:3;51739:2;51731:6;51727:15;51720:28;51535:220;:::o;51761:233::-;51901:34;51897:1;51889:6;51885:14;51878:58;51970:16;51965:2;51957:6;51953:15;51946:41;51761:233;:::o;52000:225::-;52140:34;52136:1;52128:6;52124:14;52117:58;52209:8;52204:2;52196:6;52192:15;52185:33;52000:225;:::o;52231:181::-;52371:33;52367:1;52359:6;52355:14;52348:57;52231:181;:::o;52418:234::-;52558:34;52554:1;52546:6;52542:14;52535:58;52627:17;52622:2;52614:6;52610:15;52603:42;52418:234;:::o;52658:232::-;52798:34;52794:1;52786:6;52782:14;52775:58;52867:15;52862:2;52854:6;52850:15;52843:40;52658:232;:::o;52896:221::-;53036:34;53032:1;53024:6;53020:14;53013:58;53105:4;53100:2;53092:6;53088:15;53081:29;52896:221;:::o;53123:122::-;53196:24;53214:5;53196:24;:::i;:::-;53189:5;53186:35;53176:63;;53235:1;53232;53225:12;53176:63;53123:122;:::o;53251:116::-;53321:21;53336:5;53321:21;:::i;:::-;53314:5;53311:32;53301:60;;53357:1;53354;53347:12;53301:60;53251:116;:::o;53373:120::-;53445:23;53462:5;53445:23;:::i;:::-;53438:5;53435:34;53425:62;;53483:1;53480;53473:12;53425:62;53373:120;:::o;53499:122::-;53572:24;53590:5;53572:24;:::i;:::-;53565:5;53562:35;53552:63;;53611:1;53608;53601:12;53552:63;53499:122;:::o;53627:118::-;53698:22;53714:5;53698:22;:::i;:::-;53691:5;53688:33;53678:61;;53735:1;53732;53725:12;53678:61;53627:118;:::o

Swarm Source

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