ETH Price: $2,605.05 (-1.59%)

Token

Port Du Soleil (PDS)
 

Overview

Max Total Supply

219 PDS

Holders

188

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
mdrfkr.eth
Balance
1 PDS
0x60314c86b99a2a108e5097fc2688aa1e3c30be30
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:
PDS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

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

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./Ownable.sol";
import "./ERC721Enumerable.sol";


interface IPDSReserved {
  function burn (address from, uint256 tokenId) external;
  function ownerOf(uint256 tokenId)  external view returns (address);

}

interface IHatchlingz {
  function balanceOf (address owner) external view returns (uint256);

}

contract PDS is ERC721, ERC721Enumerable, Ownable {
  
   IPDSReserved public PDSR;
   IHatchlingz public Hatchlingz;

   address  PDSWallet = 0x4C53E1DF995Aefec0d3723fCaFE9edffD4CC5Bcf;
   address  HatchlingzWallet = 0x44D4C4C2197F69aA276c74037f2ce6ebBC5e489E;

   uint PDSPay = 70; //will be divided by 100 and leave some space for infinite division
   uint HatchlingzPay = 295; //will be divided by 1000


    bool public saleIsActive = false;
    bool public isReservedClaimActive = false;

    string private _baseURIextended;

    bool public isAllowListActive = false;
    bool public isVIPListActive = false;
    uint256 public constant MAX_SUPPLY = 1122;
  
    uint256 public constant RESERVED_AMOUNT = 80;
    uint256 public constant PUBLIC_AVAILABLE_AMOUNT = MAX_SUPPLY-RESERVED_AMOUNT;

    uint256 public publicSupplyCounter =0;

    uint256 public constant PRICE_PER_TOKEN = 0.07 ether;
    uint256 public constant VIP_PRICE_PER_TOKEN = 0.03 ether;

    // mapping(address => uint8) private _allowList;
    mapping(address => uint8) private _VIPList;

    constructor() ERC721("Port Du Soleil", "PDS") {
    }

    function HatchlingzBalanceCheck(address wallet) external view returns (uint256){
        return Hatchlingz.balanceOf(wallet);
    }

     function setPDSR(address PDSRAddress) external onlyOwner {
        PDSR = IPDSReserved(PDSRAddress);
    }
    
     function setHatchlingz(address HatchlingzAddress) external onlyOwner {
        Hatchlingz = IHatchlingz(HatchlingzAddress);
    }

     function setReservedClaimState (bool newState) external onlyOwner {
      isReservedClaimActive = newState;
    }

    // function setIsAllowListActive(bool _isAllowListActive) external onlyOwner {
    //     isAllowListActive = _isAllowListActive;
    // }

    // function setAllowList(address[] calldata addresses, uint8 numAllowedToMint) external onlyOwner {
    //     for (uint256 i = 0; i < addresses.length; i++) {
    //         _allowList[addresses[i]] = numAllowedToMint;
    //     }
    // }

     function setIsVIPListActive(bool _isVIPListActive) external onlyOwner {
        isVIPListActive = _isVIPListActive;
    }

    function setVIPList(address[] calldata addresses, uint8 numAllowedToMint) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            _VIPList[addresses[i]] = numAllowedToMint;
        }
    }

    function VIPnumAvailableToMint(address addr) external view returns (uint8) {
        return _VIPList[addr];
    }

    // function mintAllowList(uint8 numberOfTokens) external payable {
    //     uint256 ts = totalSupply();
    //     require(isAllowListActive, "Allow list is not active");
    //     require(numberOfTokens <= _allowList[msg.sender], "Exceeded max available to purchase");
    //     require(publicSupplyCounter + numberOfTokens <= PUBLIC_AVAILABLE_AMOUNT, "Purchase would exceed max tokens");
    //     require(PRICE_PER_TOKEN * numberOfTokens <= msg.value, "Ether value sent is not correct");

    //     _allowList[msg.sender] -= numberOfTokens;
    //     for (uint256 i = 0; i < numberOfTokens; i++) {
    //         _safeMint(msg.sender, ts + i);
    //         publicSupplyCounter++;
    //     }
    // }

     function mintVIPList(uint8 numberOfTokens) external payable {
        uint256 ts = totalSupply();
        

        require(isVIPListActive, "Allow list is not active");
        require(numberOfTokens <= _VIPList[msg.sender], "Exceeded max available to purchase");
       
        require(publicSupplyCounter + numberOfTokens <= PUBLIC_AVAILABLE_AMOUNT, "Purchase would exceed max tokens");
        require(VIP_PRICE_PER_TOKEN * numberOfTokens <= msg.value, "Ether value sent is not correct");

        _VIPList[msg.sender] -= numberOfTokens;
        for (uint256 i = 0; i < numberOfTokens; i++) {
            _safeMint(msg.sender, ts + i);
            publicSupplyCounter++;
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function setBaseURI(string memory baseURI_) external onlyOwner() {
        _baseURIextended = baseURI_;
    }

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

  

    function reserve(address to, uint256 n) public onlyOwner {
      uint supply = totalSupply();
      uint i;
      require(publicSupplyCounter + n <= PUBLIC_AVAILABLE_AMOUNT, "Purchase would exceed max tokens");
      for (i = 0; i < n; i++) {
          _safeMint(to, supply + i);
          publicSupplyCounter++;
      }
    }

    function setSaleState(bool newState) public onlyOwner {
        saleIsActive = newState;
    }

    function mint(uint numberOfTokens) public payable {
        uint256 ts = totalSupply();
        require(saleIsActive, "Sale must be active to mint tokens");
        require(publicSupplyCounter + numberOfTokens <= PUBLIC_AVAILABLE_AMOUNT, "Purchase would exceed max tokens");
        require(PRICE_PER_TOKEN * numberOfTokens <= msg.value, "Ether value sent is not correct");

        for (uint256 i = 0; i < numberOfTokens; i++) {
            _safeMint(msg.sender, ts + i);
            publicSupplyCounter++;
        }
    }

     function reservedMintClaim (uint256[] memory tokenArray) external {
    uint256 ts = totalSupply();
    require(isReservedClaimActive, "can't reserve right now");
    require (ts + tokenArray.length <= MAX_SUPPLY, "eXCEEDED TOTAL SUPPLY");
    for ( uint i = 0; i < tokenArray.length ; i++){
        require(PDSR.ownerOf(tokenArray[i]) == msg.sender);
      PDSR.burn(msg.sender, tokenArray[i]);
      _safeMint(msg.sender, ts+ i );
    }

  }

    function withdraw() public onlyOwner {
        uint balance = address(this).balance;
        uint PDSPayout = balance*PDSPay/100;
        uint hatchlingzPayout = balance*HatchlingzPay/1000;
        payable(PDSWallet).transfer(PDSPayout);
        payable(HatchlingzWallet).transfer(hatchlingzPayout);
    }
}

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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

pragma solidity ^0.8.0;

import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./IERC721Metadata.sol";
import "./Address.sol";
import "./Context.sol";
import "./Strings.sol";
import "./ERC165.sol";

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // 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 Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @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 ||
            super.supportsInterface(interfaceId);
    }

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

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @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.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: 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`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender);
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * 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
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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

pragma solidity ^0.8.0;

import "./ERC721.sol";
import "./IERC721Enumerable.sol";

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

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

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * 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`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

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

pragma solidity ^0.8.0;

import "./IERC721.sol";

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

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Hatchlingz","outputs":[{"internalType":"contract IHatchlingz","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"HatchlingzBalanceCheck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PDSR","outputs":[{"internalType":"contract IPDSReserved","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_PER_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLIC_AVAILABLE_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESERVED_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VIP_PRICE_PER_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"VIPnumAvailableToMint","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAllowListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isReservedClaimActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVIPListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numberOfTokens","type":"uint8"}],"name":"mintVIPList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"publicSupplyCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenArray","type":"uint256[]"}],"name":"reservedMintClaim","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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"HatchlingzAddress","type":"address"}],"name":"setHatchlingz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isVIPListActive","type":"bool"}],"name":"setIsVIPListActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"PDSRAddress","type":"address"}],"name":"setPDSR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newState","type":"bool"}],"name":"setReservedClaimState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newState","type":"bool"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint8","name":"numAllowedToMint","type":"uint8"}],"name":"setVIPList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052734c53e1df995aefec0d3723fcafe9edffd4cc5bcf600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507344d4c4c2197f69aa276c74037f2ce6ebbc5e489e600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506046600f556101276010556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601360006101000a81548160ff0219169083151502179055506000601360016101000a81548160ff02191690831515021790555060006014553480156200013757600080fd5b506040518060400160405280600e81526020017f506f727420447520536f6c65696c0000000000000000000000000000000000008152506040518060400160405280600381526020017f50445300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001bc929190620002cc565b508060019080519060200190620001d5929190620002cc565b505050620001f8620001ec620001fe60201b60201c565b6200020660201b60201c565b620003e1565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002da906200037c565b90600052602060002090601f016020900481019282620002fe57600085556200034a565b82601f106200031957805160ff19168380011785556200034a565b828001600101855582156200034a579182015b82811115620003495782518255916020019190600101906200032c565b5b5090506200035991906200035d565b5090565b5b80821115620003785760008160009055506001016200035e565b5090565b600060028204905060018216806200039557607f821691505b60208210811415620003ac57620003ab620003b2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61535880620003f16000396000f3fe6080604052600436106102725760003560e01c80639382b8241161014f578063c4e37095116100c1578063d85f27401161007a578063d85f274014610948578063e985e9c514610973578063eb8d2444146109b0578063ede169eb146109db578063f1cac70214610a04578063f2fde38b14610a2d57610272565b8063c4e370951461083a578063c87b56dd14610863578063cc47a40b146108a0578063d2efb83c146108c9578063d3e43b19146108f4578063d7de76a21461091d57610272565b8063a413018f11610113578063a413018f1461074b578063ad3b0fa314610776578063b06816d21461079f578063b3348538146107bb578063b6290b37146107e6578063b88d4fde1461081157610272565b80639382b8241461066157806395d89b411461069e57806395e1ff40146106c9578063a0712d6814610706578063a22cb4651461072257610272565b80633db6d98a116101e85780636352211e116101ac5780636352211e1461054f5780636861c9701461058c57806370a08231146105b7578063715018a6146105f4578063833b94991461060b5780638da5cb5b1461063657610272565b80633db6d98a1461046e57806342842e0e1461049757806349044f9f146104c05780634f6ccce7146104e957806355f804b31461052657610272565b806318160ddd1161023a57806318160ddd1461037057806323b872dd1461039b57806329fc6bae146103c45780632f745c59146103ef57806332cb6b0c1461042c5780633ccfd60b1461045757610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c578063179084af14610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c78565b610a56565b6040516102ab91906142ec565b60405180910390f35b3480156102c057600080fd5b506102c9610a68565b6040516102d6919061433d565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613d1b565b610afa565b604051610313919061425c565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613b62565b610b7f565b005b34801561035157600080fd5b5061035a610c97565b604051610367919061467f565b60405180910390f35b34801561037c57600080fd5b50610385610ca2565b604051610392919061467f565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190613a4c565b610caf565b005b3480156103d057600080fd5b506103d9610d0f565b6040516103e691906142ec565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613b62565b610d22565b604051610423919061467f565b60405180910390f35b34801561043857600080fd5b50610441610dc7565b60405161044e919061467f565b60405180910390f35b34801561046357600080fd5b5061046c610dcd565b005b34801561047a57600080fd5b5061049560048036038101906104909190613c4b565b610f62565b005b3480156104a357600080fd5b506104be60048036038101906104b99190613a4c565b610ffb565b005b3480156104cc57600080fd5b506104e760048036038101906104e29190613c02565b61101b565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613d1b565b6112a5565b60405161051d919061467f565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190613cd2565b611316565b005b34801561055b57600080fd5b5061057660048036038101906105719190613d1b565b6113ac565b604051610583919061425c565b60405180910390f35b34801561059857600080fd5b506105a161145e565b6040516105ae91906142ec565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d991906139b2565b611471565b6040516105eb919061467f565b60405180910390f35b34801561060057600080fd5b50610609611529565b005b34801561061757600080fd5b506106206115b1565b60405161062d919061467f565b60405180910390f35b34801561064257600080fd5b5061064b6115bc565b604051610658919061425c565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906139b2565b6115e6565b604051610695919061469a565b60405180910390f35b3480156106aa57600080fd5b506106b361163c565b6040516106c0919061433d565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb91906139b2565b6116ce565b6040516106fd919061467f565b60405180910390f35b610720600480360381019061071b9190613d1b565b611782565b005b34801561072e57600080fd5b5061074960048036038101906107449190613b22565b6118e0565b005b34801561075757600080fd5b506107606118f6565b60405161076d919061467f565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906139b2565b6118fc565b005b6107b960048036038101906107b49190613d75565b6119bc565b005b3480156107c757600080fd5b506107d0611c2b565b6040516107dd9190614307565b60405180910390f35b3480156107f257600080fd5b506107fb611c51565b60405161080891906142ec565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190613a9f565b611c64565b005b34801561084657600080fd5b50610861600480360381019061085c9190613c4b565b611cc6565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613d1b565b611d5f565b604051610897919061433d565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190613b62565b611e06565b005b3480156108d557600080fd5b506108de611f41565b6040516108eb9190614322565b60405180910390f35b34801561090057600080fd5b5061091b60048036038101906109169190613c4b565b611f67565b005b34801561092957600080fd5b50610932612000565b60405161093f919061467f565b60405180910390f35b34801561095457600080fd5b5061095d612012565b60405161096a919061467f565b60405180910390f35b34801561097f57600080fd5b5061099a60048036038101906109959190613a0c565b612017565b6040516109a791906142ec565b60405180910390f35b3480156109bc57600080fd5b506109c56120ab565b6040516109d291906142ec565b60405180910390f35b3480156109e757600080fd5b50610a0260048036038101906109fd9190613ba2565b6120be565b005b348015610a1057600080fd5b50610a2b6004803603810190610a2691906139b2565b6121e0565b005b348015610a3957600080fd5b50610a546004803603810190610a4f91906139b2565b6122a0565b005b6000610a6182612398565b9050919050565b606060008054610a77906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa3906149ff565b8015610af05780601f10610ac557610100808354040283529160200191610af0565b820191906000526020600020905b815481529060010190602001808311610ad357829003601f168201915b5050505050905090565b6000610b0582612412565b610b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3b9061453f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8a826113ac565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf2906145bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1a61247e565b73ffffffffffffffffffffffffffffffffffffffff161480610c495750610c4881610c4361247e565b612017565b5b610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906144bf565b60405180910390fd5b610c928383612486565b505050565b666a94d74f43000081565b6000600880549050905090565b610cc0610cba61247e565b8261253f565b610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf69061461f565b60405180910390fd5b610d0a83838361261d565b505050565b601360009054906101000a900460ff1681565b6000610d2d83611471565b8210610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d659061437f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61046281565b610dd561247e565b73ffffffffffffffffffffffffffffffffffffffff16610df36115bc565b73ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061455f565b60405180910390fd5b600047905060006064600f5483610e609190614832565b610e6a9190614801565b905060006103e860105484610e7f9190614832565b610e899190614801565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610ef3573d6000803e3d6000fd5b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f5c573d6000803e3d6000fd5b50505050565b610f6a61247e565b73ffffffffffffffffffffffffffffffffffffffff16610f886115bc565b73ffffffffffffffffffffffffffffffffffffffff1614610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd59061455f565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b61101683838360405180602001604052806000815250611c64565b505050565b6000611025610ca2565b9050601160019054906101000a900460ff16611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d906145ff565b60405180910390fd5b61046282518261108691906147ab565b11156110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be9061435f565b60405180910390fd5b60005b82518110156112a0573373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e85848151811061113b5761113a614b98565b5b60200260200101516040518263ffffffff1660e01b815260040161115f919061467f565b60206040518083038186803b15801561117757600080fd5b505afa15801561118b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111af91906139df565b73ffffffffffffffffffffffffffffffffffffffff16146111cf57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac3385848151811061122157611220614b98565b5b60200260200101516040518363ffffffff1660e01b81526004016112469291906142c3565b600060405180830381600087803b15801561126057600080fd5b505af1158015611274573d6000803e3d6000fd5b5050505061128d33828461128891906147ab565b612884565b808061129890614a62565b9150506110ca565b505050565b60006112af610ca2565b82106112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e79061463f565b60405180910390fd5b6008828154811061130457611303614b98565b5b90600052602060002001549050919050565b61131e61247e565b73ffffffffffffffffffffffffffffffffffffffff1661133c6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113899061455f565b60405180910390fd5b80601290805190602001906113a8929190613693565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c906144ff565b60405180910390fd5b80915050919050565b601160019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d9906144df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153161247e565b73ffffffffffffffffffffffffffffffffffffffff1661154f6115bc565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c9061455f565b60405180910390fd5b6115af60006128a2565b565b66f8b0a10e47000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606001805461164b906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611677906149ff565b80156116c45780601f10611699576101008083540402835291602001916116c4565b820191906000526020600020905b8154815290600101906020018083116116a757829003601f168201915b5050505050905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161172b919061425c565b60206040518083038186803b15801561174357600080fd5b505afa158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190613d48565b9050919050565b600061178c610ca2565b9050601160009054906101000a900460ff166117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d49061459f565b60405180910390fd5b60506104626117ec919061488c565b826014546117fa91906147ab565b111561183b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611832906143df565b60405180910390fd5b348266f8b0a10e47000061184f9190614832565b1115611890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118879061447f565b60405180910390fd5b60005b828110156118db576118b03382846118ab91906147ab565b612884565b601460008154809291906118c390614a62565b919050555080806118d390614a62565b915050611893565b505050565b6118f26118eb61247e565b8383612968565b5050565b60145481565b61190461247e565b73ffffffffffffffffffffffffffffffffffffffff166119226115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f9061455f565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006119c6610ca2565b9050601360019054906101000a900460ff16611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061465f565b60405180910390fd5b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168260ff161115611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa3906145df565b60405180910390fd5b6050610462611abb919061488c565b8260ff16601454611acc91906147ab565b1115611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b04906143df565b60405180910390fd5b348260ff16666a94d74f430000611b249190614832565b1115611b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5c9061447f565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611bc091906148c0565b92506101000a81548160ff021916908360ff16021790555060005b8260ff16811015611c2657611bfb338284611bf691906147ab565b612884565b60146000815480929190611c0e90614a62565b91905055508080611c1e90614a62565b915050611bdb565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360019054906101000a900460ff1681565b611c75611c6f61247e565b8361253f565b611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab9061461f565b60405180910390fd5b611cc084848484612ad5565b50505050565b611cce61247e565b73ffffffffffffffffffffffffffffffffffffffff16611cec6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d399061455f565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060611d6a82612412565b611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da09061457f565b60405180910390fd5b6000611db3612b31565b90506000815111611dd35760405180602001604052806000815250611dfe565b80611ddd84612bc3565b604051602001611dee92919061422d565b6040516020818303038152906040525b915050919050565b611e0e61247e565b73ffffffffffffffffffffffffffffffffffffffff16611e2c6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e799061455f565b60405180910390fd5b6000611e8c610ca2565b905060006050610462611e9f919061488c565b83601454611ead91906147ab565b1115611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee5906143df565b60405180910390fd5b600090505b82811015611f3b57611f10848284611f0b91906147ab565b612884565b60146000815480929190611f2390614a62565b91905055508080611f3390614a62565b915050611ef3565b50505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f6f61247e565b73ffffffffffffffffffffffffffffffffffffffff16611f8d6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda9061455f565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b605061046261200f919061488c565b81565b605081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601160009054906101000a900460ff1681565b6120c661247e565b73ffffffffffffffffffffffffffffffffffffffff166120e46115bc565b73ffffffffffffffffffffffffffffffffffffffff161461213a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121319061455f565b60405180910390fd5b60005b838390508110156121da5781601560008686858181106121605761215f614b98565b5b905060200201602081019061217591906139b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806121d290614a62565b91505061213d565b50505050565b6121e861247e565b73ffffffffffffffffffffffffffffffffffffffff166122066115bc565b73ffffffffffffffffffffffffffffffffffffffff161461225c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122539061455f565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a861247e565b73ffffffffffffffffffffffffffffffffffffffff166122c66115bc565b73ffffffffffffffffffffffffffffffffffffffff161461231c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123139061455f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561238c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612383906143bf565b60405180910390fd5b612395816128a2565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061240b575061240a82612d24565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124f9836113ac565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061254a82612412565b612589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125809061449f565b60405180910390fd5b6000612594836113ac565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125d657506125d58185612017565b5b8061261457508373ffffffffffffffffffffffffffffffffffffffff166125fc84610afa565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661263d826113ac565b73ffffffffffffffffffffffffffffffffffffffff1614612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a906143ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fa9061443f565b60405180910390fd5b61270e838383612e06565b612719600082612486565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612769919061488c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127c091906147ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461287f838383612e16565b505050565b61289e828260405180602001604052806000815250612e1b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce9061445f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ac891906142ec565b60405180910390a3505050565b612ae084848461261d565b612aec84848484612e76565b612b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b229061439f565b60405180910390fd5b50505050565b606060128054612b40906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6c906149ff565b8015612bb95780601f10612b8e57610100808354040283529160200191612bb9565b820191906000526020600020905b815481529060010190602001808311612b9c57829003601f168201915b5050505050905090565b60606000821415612c0b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d1f565b600082905060005b60008214612c3d578080612c2690614a62565b915050600a82612c369190614801565b9150612c13565b60008167ffffffffffffffff811115612c5957612c58614bc7565b5b6040519080825280601f01601f191660200182016040528015612c8b5781602001600182028036833780820191505090505b5090505b60008514612d1857600182612ca4919061488c565b9150600a85612cb39190614aab565b6030612cbf91906147ab565b60f81b818381518110612cd557612cd4614b98565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d119190614801565b9450612c8f565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612def57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612dff5750612dfe8261300d565b5b9050919050565b612e11838383613077565b505050565b505050565b612e25838361318b565b612e326000848484612e76565b612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e689061439f565b60405180910390fd5b505050565b6000612e978473ffffffffffffffffffffffffffffffffffffffff16613365565b15613000578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ec061247e565b8786866040518563ffffffff1660e01b8152600401612ee29493929190614277565b602060405180830381600087803b158015612efc57600080fd5b505af1925050508015612f2d57506040513d601f19601f82011682018060405250810190612f2a9190613ca5565b60015b612fb0573d8060008114612f5d576040519150601f19603f3d011682016040523d82523d6000602084013e612f62565b606091505b50600081511415612fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9f9061439f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613005565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613082838383613388565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130c5576130c08161338d565b613104565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146131035761310283826133d6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131475761314281613543565b613186565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613185576131848282613614565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f29061451f565b60405180910390fd5b61320481612412565b15613244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323b9061441f565b60405180910390fd5b61325060008383612e06565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132a091906147ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461336160008383612e16565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016133e384611471565b6133ed919061488c565b90506000600760008481526020019081526020016000205490508181146134d2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613557919061488c565b905060006009600084815260200190815260200160002054905060006008838154811061358757613586614b98565b5b9060005260206000200154905080600883815481106135a9576135a8614b98565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806135f8576135f7614b69565b5b6001900381819060005260206000200160009055905550505050565b600061361f83611471565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461369f906149ff565b90600052602060002090601f0160209004810192826136c15760008555613708565b82601f106136da57805160ff1916838001178555613708565b82800160010185558215613708579182015b828111156137075782518255916020019190600101906136ec565b5b5090506137159190613719565b5090565b5b8082111561373257600081600090555060010161371a565b5090565b6000613749613744846146da565b6146b5565b9050808382526020820190508285602086028201111561376c5761376b614c00565b5b60005b8581101561379c57816137828882613973565b84526020840193506020830192505060018101905061376f565b5050509392505050565b60006137b96137b484614706565b6146b5565b9050828152602081018484840111156137d5576137d4614c05565b5b6137e08482856149bd565b509392505050565b60006137fb6137f684614737565b6146b5565b90508281526020810184848401111561381757613816614c05565b5b6138228482856149bd565b509392505050565b600081359050613839816152af565b92915050565b60008151905061384e816152af565b92915050565b60008083601f84011261386a57613869614bfb565b5b8235905067ffffffffffffffff81111561388757613886614bf6565b5b6020830191508360208202830111156138a3576138a2614c00565b5b9250929050565b600082601f8301126138bf576138be614bfb565b5b81356138cf848260208601613736565b91505092915050565b6000813590506138e7816152c6565b92915050565b6000813590506138fc816152dd565b92915050565b600081519050613911816152dd565b92915050565b600082601f83011261392c5761392b614bfb565b5b813561393c8482602086016137a6565b91505092915050565b600082601f83011261395a57613959614bfb565b5b813561396a8482602086016137e8565b91505092915050565b600081359050613982816152f4565b92915050565b600081519050613997816152f4565b92915050565b6000813590506139ac8161530b565b92915050565b6000602082840312156139c8576139c7614c0f565b5b60006139d68482850161382a565b91505092915050565b6000602082840312156139f5576139f4614c0f565b5b6000613a038482850161383f565b91505092915050565b60008060408385031215613a2357613a22614c0f565b5b6000613a318582860161382a565b9250506020613a428582860161382a565b9150509250929050565b600080600060608486031215613a6557613a64614c0f565b5b6000613a738682870161382a565b9350506020613a848682870161382a565b9250506040613a9586828701613973565b9150509250925092565b60008060008060808587031215613ab957613ab8614c0f565b5b6000613ac78782880161382a565b9450506020613ad88782880161382a565b9350506040613ae987828801613973565b925050606085013567ffffffffffffffff811115613b0a57613b09614c0a565b5b613b1687828801613917565b91505092959194509250565b60008060408385031215613b3957613b38614c0f565b5b6000613b478582860161382a565b9250506020613b58858286016138d8565b9150509250929050565b60008060408385031215613b7957613b78614c0f565b5b6000613b878582860161382a565b9250506020613b9885828601613973565b9150509250929050565b600080600060408486031215613bbb57613bba614c0f565b5b600084013567ffffffffffffffff811115613bd957613bd8614c0a565b5b613be586828701613854565b93509350506020613bf88682870161399d565b9150509250925092565b600060208284031215613c1857613c17614c0f565b5b600082013567ffffffffffffffff811115613c3657613c35614c0a565b5b613c42848285016138aa565b91505092915050565b600060208284031215613c6157613c60614c0f565b5b6000613c6f848285016138d8565b91505092915050565b600060208284031215613c8e57613c8d614c0f565b5b6000613c9c848285016138ed565b91505092915050565b600060208284031215613cbb57613cba614c0f565b5b6000613cc984828501613902565b91505092915050565b600060208284031215613ce857613ce7614c0f565b5b600082013567ffffffffffffffff811115613d0657613d05614c0a565b5b613d1284828501613945565b91505092915050565b600060208284031215613d3157613d30614c0f565b5b6000613d3f84828501613973565b91505092915050565b600060208284031215613d5e57613d5d614c0f565b5b6000613d6c84828501613988565b91505092915050565b600060208284031215613d8b57613d8a614c0f565b5b6000613d998482850161399d565b91505092915050565b613dab816148f4565b82525050565b613dba81614906565b82525050565b6000613dcb82614768565b613dd5818561477e565b9350613de58185602086016149cc565b613dee81614c14565b840191505092915050565b613e0281614975565b82525050565b613e1181614987565b82525050565b6000613e2282614773565b613e2c818561478f565b9350613e3c8185602086016149cc565b613e4581614c14565b840191505092915050565b6000613e5b82614773565b613e6581856147a0565b9350613e758185602086016149cc565b80840191505092915050565b6000613e8e60158361478f565b9150613e9982614c25565b602082019050919050565b6000613eb1602b8361478f565b9150613ebc82614c4e565b604082019050919050565b6000613ed460328361478f565b9150613edf82614c9d565b604082019050919050565b6000613ef760268361478f565b9150613f0282614cec565b604082019050919050565b6000613f1a60208361478f565b9150613f2582614d3b565b602082019050919050565b6000613f3d60258361478f565b9150613f4882614d64565b604082019050919050565b6000613f60601c8361478f565b9150613f6b82614db3565b602082019050919050565b6000613f8360248361478f565b9150613f8e82614ddc565b604082019050919050565b6000613fa660198361478f565b9150613fb182614e2b565b602082019050919050565b6000613fc9601f8361478f565b9150613fd482614e54565b602082019050919050565b6000613fec602c8361478f565b9150613ff782614e7d565b604082019050919050565b600061400f60388361478f565b915061401a82614ecc565b604082019050919050565b6000614032602a8361478f565b915061403d82614f1b565b604082019050919050565b600061405560298361478f565b915061406082614f6a565b604082019050919050565b600061407860208361478f565b915061408382614fb9565b602082019050919050565b600061409b602c8361478f565b91506140a682614fe2565b604082019050919050565b60006140be6005836147a0565b91506140c982615031565b600582019050919050565b60006140e160208361478f565b91506140ec8261505a565b602082019050919050565b6000614104602f8361478f565b915061410f82615083565b604082019050919050565b600061412760228361478f565b9150614132826150d2565b604082019050919050565b600061414a60218361478f565b915061415582615121565b604082019050919050565b600061416d60228361478f565b915061417882615170565b604082019050919050565b600061419060178361478f565b915061419b826151bf565b602082019050919050565b60006141b360318361478f565b91506141be826151e8565b604082019050919050565b60006141d6602c8361478f565b91506141e182615237565b604082019050919050565b60006141f960188361478f565b915061420482615286565b602082019050919050565b6142188161495e565b82525050565b61422781614968565b82525050565b60006142398285613e50565b91506142458284613e50565b9150614250826140b1565b91508190509392505050565b60006020820190506142716000830184613da2565b92915050565b600060808201905061428c6000830187613da2565b6142996020830186613da2565b6142a6604083018561420f565b81810360608301526142b88184613dc0565b905095945050505050565b60006040820190506142d86000830185613da2565b6142e5602083018461420f565b9392505050565b60006020820190506143016000830184613db1565b92915050565b600060208201905061431c6000830184613df9565b92915050565b60006020820190506143376000830184613e08565b92915050565b600060208201905081810360008301526143578184613e17565b905092915050565b6000602082019050818103600083015261437881613e81565b9050919050565b6000602082019050818103600083015261439881613ea4565b9050919050565b600060208201905081810360008301526143b881613ec7565b9050919050565b600060208201905081810360008301526143d881613eea565b9050919050565b600060208201905081810360008301526143f881613f0d565b9050919050565b6000602082019050818103600083015261441881613f30565b9050919050565b6000602082019050818103600083015261443881613f53565b9050919050565b6000602082019050818103600083015261445881613f76565b9050919050565b6000602082019050818103600083015261447881613f99565b9050919050565b6000602082019050818103600083015261449881613fbc565b9050919050565b600060208201905081810360008301526144b881613fdf565b9050919050565b600060208201905081810360008301526144d881614002565b9050919050565b600060208201905081810360008301526144f881614025565b9050919050565b6000602082019050818103600083015261451881614048565b9050919050565b600060208201905081810360008301526145388161406b565b9050919050565b600060208201905081810360008301526145588161408e565b9050919050565b60006020820190508181036000830152614578816140d4565b9050919050565b60006020820190508181036000830152614598816140f7565b9050919050565b600060208201905081810360008301526145b88161411a565b9050919050565b600060208201905081810360008301526145d88161413d565b9050919050565b600060208201905081810360008301526145f881614160565b9050919050565b6000602082019050818103600083015261461881614183565b9050919050565b60006020820190508181036000830152614638816141a6565b9050919050565b60006020820190508181036000830152614658816141c9565b9050919050565b60006020820190508181036000830152614678816141ec565b9050919050565b6000602082019050614694600083018461420f565b92915050565b60006020820190506146af600083018461421e565b92915050565b60006146bf6146d0565b90506146cb8282614a31565b919050565b6000604051905090565b600067ffffffffffffffff8211156146f5576146f4614bc7565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561472157614720614bc7565b5b61472a82614c14565b9050602081019050919050565b600067ffffffffffffffff82111561475257614751614bc7565b5b61475b82614c14565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147b68261495e565b91506147c18361495e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f6576147f5614adc565b5b828201905092915050565b600061480c8261495e565b91506148178361495e565b92508261482757614826614b0b565b5b828204905092915050565b600061483d8261495e565b91506148488361495e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561488157614880614adc565b5b828202905092915050565b60006148978261495e565b91506148a28361495e565b9250828210156148b5576148b4614adc565b5b828203905092915050565b60006148cb82614968565b91506148d683614968565b9250828210156148e9576148e8614adc565b5b828203905092915050565b60006148ff8261493e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061498082614999565b9050919050565b600061499282614999565b9050919050565b60006149a4826149ab565b9050919050565b60006149b68261493e565b9050919050565b82818337600083830152505050565b60005b838110156149ea5780820151818401526020810190506149cf565b838111156149f9576000848401525b50505050565b60006002820490506001821680614a1757607f821691505b60208210811415614a2b57614a2a614b3a565b5b50919050565b614a3a82614c14565b810181811067ffffffffffffffff82111715614a5957614a58614bc7565b5b80604052505050565b6000614a6d8261495e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aa057614a9f614adc565b5b600182019050919050565b6000614ab68261495e565b9150614ac18361495e565b925082614ad157614ad0614b0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f655843454544454420544f54414c20535550504c590000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420746f6b6560008201527f6e73000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f2070757263686160008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e27742072657365727665207269676874206e6f77000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416c6c6f77206c697374206973206e6f74206163746976650000000000000000600082015250565b6152b8816148f4565b81146152c357600080fd5b50565b6152cf81614906565b81146152da57600080fd5b50565b6152e681614912565b81146152f157600080fd5b50565b6152fd8161495e565b811461530857600080fd5b50565b61531481614968565b811461531f57600080fd5b5056fea2646970667358221220905828674ee6f0a294f30aef1c4757da5ffafde827eff31988b08bfd7233c25164736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102725760003560e01c80639382b8241161014f578063c4e37095116100c1578063d85f27401161007a578063d85f274014610948578063e985e9c514610973578063eb8d2444146109b0578063ede169eb146109db578063f1cac70214610a04578063f2fde38b14610a2d57610272565b8063c4e370951461083a578063c87b56dd14610863578063cc47a40b146108a0578063d2efb83c146108c9578063d3e43b19146108f4578063d7de76a21461091d57610272565b8063a413018f11610113578063a413018f1461074b578063ad3b0fa314610776578063b06816d21461079f578063b3348538146107bb578063b6290b37146107e6578063b88d4fde1461081157610272565b80639382b8241461066157806395d89b411461069e57806395e1ff40146106c9578063a0712d6814610706578063a22cb4651461072257610272565b80633db6d98a116101e85780636352211e116101ac5780636352211e1461054f5780636861c9701461058c57806370a08231146105b7578063715018a6146105f4578063833b94991461060b5780638da5cb5b1461063657610272565b80633db6d98a1461046e57806342842e0e1461049757806349044f9f146104c05780634f6ccce7146104e957806355f804b31461052657610272565b806318160ddd1161023a57806318160ddd1461037057806323b872dd1461039b57806329fc6bae146103c45780632f745c59146103ef57806332cb6b0c1461042c5780633ccfd60b1461045757610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c578063179084af14610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613c78565b610a56565b6040516102ab91906142ec565b60405180910390f35b3480156102c057600080fd5b506102c9610a68565b6040516102d6919061433d565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613d1b565b610afa565b604051610313919061425c565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613b62565b610b7f565b005b34801561035157600080fd5b5061035a610c97565b604051610367919061467f565b60405180910390f35b34801561037c57600080fd5b50610385610ca2565b604051610392919061467f565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd9190613a4c565b610caf565b005b3480156103d057600080fd5b506103d9610d0f565b6040516103e691906142ec565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613b62565b610d22565b604051610423919061467f565b60405180910390f35b34801561043857600080fd5b50610441610dc7565b60405161044e919061467f565b60405180910390f35b34801561046357600080fd5b5061046c610dcd565b005b34801561047a57600080fd5b5061049560048036038101906104909190613c4b565b610f62565b005b3480156104a357600080fd5b506104be60048036038101906104b99190613a4c565b610ffb565b005b3480156104cc57600080fd5b506104e760048036038101906104e29190613c02565b61101b565b005b3480156104f557600080fd5b50610510600480360381019061050b9190613d1b565b6112a5565b60405161051d919061467f565b60405180910390f35b34801561053257600080fd5b5061054d60048036038101906105489190613cd2565b611316565b005b34801561055b57600080fd5b5061057660048036038101906105719190613d1b565b6113ac565b604051610583919061425c565b60405180910390f35b34801561059857600080fd5b506105a161145e565b6040516105ae91906142ec565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d991906139b2565b611471565b6040516105eb919061467f565b60405180910390f35b34801561060057600080fd5b50610609611529565b005b34801561061757600080fd5b506106206115b1565b60405161062d919061467f565b60405180910390f35b34801561064257600080fd5b5061064b6115bc565b604051610658919061425c565b60405180910390f35b34801561066d57600080fd5b50610688600480360381019061068391906139b2565b6115e6565b604051610695919061469a565b60405180910390f35b3480156106aa57600080fd5b506106b361163c565b6040516106c0919061433d565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb91906139b2565b6116ce565b6040516106fd919061467f565b60405180910390f35b610720600480360381019061071b9190613d1b565b611782565b005b34801561072e57600080fd5b5061074960048036038101906107449190613b22565b6118e0565b005b34801561075757600080fd5b506107606118f6565b60405161076d919061467f565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906139b2565b6118fc565b005b6107b960048036038101906107b49190613d75565b6119bc565b005b3480156107c757600080fd5b506107d0611c2b565b6040516107dd9190614307565b60405180910390f35b3480156107f257600080fd5b506107fb611c51565b60405161080891906142ec565b60405180910390f35b34801561081d57600080fd5b5061083860048036038101906108339190613a9f565b611c64565b005b34801561084657600080fd5b50610861600480360381019061085c9190613c4b565b611cc6565b005b34801561086f57600080fd5b5061088a60048036038101906108859190613d1b565b611d5f565b604051610897919061433d565b60405180910390f35b3480156108ac57600080fd5b506108c760048036038101906108c29190613b62565b611e06565b005b3480156108d557600080fd5b506108de611f41565b6040516108eb9190614322565b60405180910390f35b34801561090057600080fd5b5061091b60048036038101906109169190613c4b565b611f67565b005b34801561092957600080fd5b50610932612000565b60405161093f919061467f565b60405180910390f35b34801561095457600080fd5b5061095d612012565b60405161096a919061467f565b60405180910390f35b34801561097f57600080fd5b5061099a60048036038101906109959190613a0c565b612017565b6040516109a791906142ec565b60405180910390f35b3480156109bc57600080fd5b506109c56120ab565b6040516109d291906142ec565b60405180910390f35b3480156109e757600080fd5b50610a0260048036038101906109fd9190613ba2565b6120be565b005b348015610a1057600080fd5b50610a2b6004803603810190610a2691906139b2565b6121e0565b005b348015610a3957600080fd5b50610a546004803603810190610a4f91906139b2565b6122a0565b005b6000610a6182612398565b9050919050565b606060008054610a77906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa3906149ff565b8015610af05780601f10610ac557610100808354040283529160200191610af0565b820191906000526020600020905b815481529060010190602001808311610ad357829003601f168201915b5050505050905090565b6000610b0582612412565b610b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3b9061453f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b8a826113ac565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf2906145bf565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c1a61247e565b73ffffffffffffffffffffffffffffffffffffffff161480610c495750610c4881610c4361247e565b612017565b5b610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906144bf565b60405180910390fd5b610c928383612486565b505050565b666a94d74f43000081565b6000600880549050905090565b610cc0610cba61247e565b8261253f565b610cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf69061461f565b60405180910390fd5b610d0a83838361261d565b505050565b601360009054906101000a900460ff1681565b6000610d2d83611471565b8210610d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d659061437f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61046281565b610dd561247e565b73ffffffffffffffffffffffffffffffffffffffff16610df36115bc565b73ffffffffffffffffffffffffffffffffffffffff1614610e49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e409061455f565b60405180910390fd5b600047905060006064600f5483610e609190614832565b610e6a9190614801565b905060006103e860105484610e7f9190614832565b610e899190614801565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015610ef3573d6000803e3d6000fd5b50600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f5c573d6000803e3d6000fd5b50505050565b610f6a61247e565b73ffffffffffffffffffffffffffffffffffffffff16610f886115bc565b73ffffffffffffffffffffffffffffffffffffffff1614610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd59061455f565b60405180910390fd5b80601360016101000a81548160ff02191690831515021790555050565b61101683838360405180602001604052806000815250611c64565b505050565b6000611025610ca2565b9050601160019054906101000a900460ff16611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d906145ff565b60405180910390fd5b61046282518261108691906147ab565b11156110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be9061435f565b60405180910390fd5b60005b82518110156112a0573373ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e85848151811061113b5761113a614b98565b5b60200260200101516040518263ffffffff1660e01b815260040161115f919061467f565b60206040518083038186803b15801561117757600080fd5b505afa15801561118b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111af91906139df565b73ffffffffffffffffffffffffffffffffffffffff16146111cf57600080fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac3385848151811061122157611220614b98565b5b60200260200101516040518363ffffffff1660e01b81526004016112469291906142c3565b600060405180830381600087803b15801561126057600080fd5b505af1158015611274573d6000803e3d6000fd5b5050505061128d33828461128891906147ab565b612884565b808061129890614a62565b9150506110ca565b505050565b60006112af610ca2565b82106112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e79061463f565b60405180910390fd5b6008828154811061130457611303614b98565b5b90600052602060002001549050919050565b61131e61247e565b73ffffffffffffffffffffffffffffffffffffffff1661133c6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113899061455f565b60405180910390fd5b80601290805190602001906113a8929190613693565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c906144ff565b60405180910390fd5b80915050919050565b601160019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d9906144df565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153161247e565b73ffffffffffffffffffffffffffffffffffffffff1661154f6115bc565b73ffffffffffffffffffffffffffffffffffffffff16146115a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159c9061455f565b60405180910390fd5b6115af60006128a2565b565b66f8b0a10e47000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606001805461164b906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054611677906149ff565b80156116c45780601f10611699576101008083540402835291602001916116c4565b820191906000526020600020905b8154815290600101906020018083116116a757829003601f168201915b5050505050905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161172b919061425c565b60206040518083038186803b15801561174357600080fd5b505afa158015611757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177b9190613d48565b9050919050565b600061178c610ca2565b9050601160009054906101000a900460ff166117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d49061459f565b60405180910390fd5b60506104626117ec919061488c565b826014546117fa91906147ab565b111561183b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611832906143df565b60405180910390fd5b348266f8b0a10e47000061184f9190614832565b1115611890576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118879061447f565b60405180910390fd5b60005b828110156118db576118b03382846118ab91906147ab565b612884565b601460008154809291906118c390614a62565b919050555080806118d390614a62565b915050611893565b505050565b6118f26118eb61247e565b8383612968565b5050565b60145481565b61190461247e565b73ffffffffffffffffffffffffffffffffffffffff166119226115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196f9061455f565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006119c6610ca2565b9050601360019054906101000a900460ff16611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061465f565b60405180910390fd5b601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1660ff168260ff161115611aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa3906145df565b60405180910390fd5b6050610462611abb919061488c565b8260ff16601454611acc91906147ab565b1115611b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b04906143df565b60405180910390fd5b348260ff16666a94d74f430000611b249190614832565b1115611b65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5c9061447f565b60405180910390fd5b81601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282829054906101000a900460ff16611bc091906148c0565b92506101000a81548160ff021916908360ff16021790555060005b8260ff16811015611c2657611bfb338284611bf691906147ab565b612884565b60146000815480929190611c0e90614a62565b91905055508080611c1e90614a62565b915050611bdb565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360019054906101000a900460ff1681565b611c75611c6f61247e565b8361253f565b611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab9061461f565b60405180910390fd5b611cc084848484612ad5565b50505050565b611cce61247e565b73ffffffffffffffffffffffffffffffffffffffff16611cec6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d399061455f565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6060611d6a82612412565b611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da09061457f565b60405180910390fd5b6000611db3612b31565b90506000815111611dd35760405180602001604052806000815250611dfe565b80611ddd84612bc3565b604051602001611dee92919061422d565b6040516020818303038152906040525b915050919050565b611e0e61247e565b73ffffffffffffffffffffffffffffffffffffffff16611e2c6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e799061455f565b60405180910390fd5b6000611e8c610ca2565b905060006050610462611e9f919061488c565b83601454611ead91906147ab565b1115611eee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee5906143df565b60405180910390fd5b600090505b82811015611f3b57611f10848284611f0b91906147ab565b612884565b60146000815480929190611f2390614a62565b91905055508080611f3390614a62565b915050611ef3565b50505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f6f61247e565b73ffffffffffffffffffffffffffffffffffffffff16611f8d6115bc565b73ffffffffffffffffffffffffffffffffffffffff1614611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda9061455f565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b605061046261200f919061488c565b81565b605081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601160009054906101000a900460ff1681565b6120c661247e565b73ffffffffffffffffffffffffffffffffffffffff166120e46115bc565b73ffffffffffffffffffffffffffffffffffffffff161461213a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121319061455f565b60405180910390fd5b60005b838390508110156121da5781601560008686858181106121605761215f614b98565b5b905060200201602081019061217591906139b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806121d290614a62565b91505061213d565b50505050565b6121e861247e565b73ffffffffffffffffffffffffffffffffffffffff166122066115bc565b73ffffffffffffffffffffffffffffffffffffffff161461225c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122539061455f565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122a861247e565b73ffffffffffffffffffffffffffffffffffffffff166122c66115bc565b73ffffffffffffffffffffffffffffffffffffffff161461231c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123139061455f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561238c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612383906143bf565b60405180910390fd5b612395816128a2565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061240b575061240a82612d24565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166124f9836113ac565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061254a82612412565b612589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125809061449f565b60405180910390fd5b6000612594836113ac565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806125d657506125d58185612017565b5b8061261457508373ffffffffffffffffffffffffffffffffffffffff166125fc84610afa565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661263d826113ac565b73ffffffffffffffffffffffffffffffffffffffff1614612693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268a906143ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fa9061443f565b60405180910390fd5b61270e838383612e06565b612719600082612486565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612769919061488c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127c091906147ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461287f838383612e16565b505050565b61289e828260405180602001604052806000815250612e1b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce9061445f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ac891906142ec565b60405180910390a3505050565b612ae084848461261d565b612aec84848484612e76565b612b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b229061439f565b60405180910390fd5b50505050565b606060128054612b40906149ff565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6c906149ff565b8015612bb95780601f10612b8e57610100808354040283529160200191612bb9565b820191906000526020600020905b815481529060010190602001808311612b9c57829003601f168201915b5050505050905090565b60606000821415612c0b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d1f565b600082905060005b60008214612c3d578080612c2690614a62565b915050600a82612c369190614801565b9150612c13565b60008167ffffffffffffffff811115612c5957612c58614bc7565b5b6040519080825280601f01601f191660200182016040528015612c8b5781602001600182028036833780820191505090505b5090505b60008514612d1857600182612ca4919061488c565b9150600a85612cb39190614aab565b6030612cbf91906147ab565b60f81b818381518110612cd557612cd4614b98565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d119190614801565b9450612c8f565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612def57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612dff5750612dfe8261300d565b5b9050919050565b612e11838383613077565b505050565b505050565b612e25838361318b565b612e326000848484612e76565b612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e689061439f565b60405180910390fd5b505050565b6000612e978473ffffffffffffffffffffffffffffffffffffffff16613365565b15613000578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ec061247e565b8786866040518563ffffffff1660e01b8152600401612ee29493929190614277565b602060405180830381600087803b158015612efc57600080fd5b505af1925050508015612f2d57506040513d601f19601f82011682018060405250810190612f2a9190613ca5565b60015b612fb0573d8060008114612f5d576040519150601f19603f3d011682016040523d82523d6000602084013e612f62565b606091505b50600081511415612fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9f9061439f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613005565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613082838383613388565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156130c5576130c08161338d565b613104565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146131035761310283826133d6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131475761314281613543565b613186565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613185576131848282613614565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156131fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f29061451f565b60405180910390fd5b61320481612412565b15613244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323b9061441f565b60405180910390fd5b61325060008383612e06565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132a091906147ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461336160008383612e16565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016133e384611471565b6133ed919061488c565b90506000600760008481526020019081526020016000205490508181146134d2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613557919061488c565b905060006009600084815260200190815260200160002054905060006008838154811061358757613586614b98565b5b9060005260206000200154905080600883815481106135a9576135a8614b98565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806135f8576135f7614b69565b5b6001900381819060005260206000200160009055905550505050565b600061361f83611471565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461369f906149ff565b90600052602060002090601f0160209004810192826136c15760008555613708565b82601f106136da57805160ff1916838001178555613708565b82800160010185558215613708579182015b828111156137075782518255916020019190600101906136ec565b5b5090506137159190613719565b5090565b5b8082111561373257600081600090555060010161371a565b5090565b6000613749613744846146da565b6146b5565b9050808382526020820190508285602086028201111561376c5761376b614c00565b5b60005b8581101561379c57816137828882613973565b84526020840193506020830192505060018101905061376f565b5050509392505050565b60006137b96137b484614706565b6146b5565b9050828152602081018484840111156137d5576137d4614c05565b5b6137e08482856149bd565b509392505050565b60006137fb6137f684614737565b6146b5565b90508281526020810184848401111561381757613816614c05565b5b6138228482856149bd565b509392505050565b600081359050613839816152af565b92915050565b60008151905061384e816152af565b92915050565b60008083601f84011261386a57613869614bfb565b5b8235905067ffffffffffffffff81111561388757613886614bf6565b5b6020830191508360208202830111156138a3576138a2614c00565b5b9250929050565b600082601f8301126138bf576138be614bfb565b5b81356138cf848260208601613736565b91505092915050565b6000813590506138e7816152c6565b92915050565b6000813590506138fc816152dd565b92915050565b600081519050613911816152dd565b92915050565b600082601f83011261392c5761392b614bfb565b5b813561393c8482602086016137a6565b91505092915050565b600082601f83011261395a57613959614bfb565b5b813561396a8482602086016137e8565b91505092915050565b600081359050613982816152f4565b92915050565b600081519050613997816152f4565b92915050565b6000813590506139ac8161530b565b92915050565b6000602082840312156139c8576139c7614c0f565b5b60006139d68482850161382a565b91505092915050565b6000602082840312156139f5576139f4614c0f565b5b6000613a038482850161383f565b91505092915050565b60008060408385031215613a2357613a22614c0f565b5b6000613a318582860161382a565b9250506020613a428582860161382a565b9150509250929050565b600080600060608486031215613a6557613a64614c0f565b5b6000613a738682870161382a565b9350506020613a848682870161382a565b9250506040613a9586828701613973565b9150509250925092565b60008060008060808587031215613ab957613ab8614c0f565b5b6000613ac78782880161382a565b9450506020613ad88782880161382a565b9350506040613ae987828801613973565b925050606085013567ffffffffffffffff811115613b0a57613b09614c0a565b5b613b1687828801613917565b91505092959194509250565b60008060408385031215613b3957613b38614c0f565b5b6000613b478582860161382a565b9250506020613b58858286016138d8565b9150509250929050565b60008060408385031215613b7957613b78614c0f565b5b6000613b878582860161382a565b9250506020613b9885828601613973565b9150509250929050565b600080600060408486031215613bbb57613bba614c0f565b5b600084013567ffffffffffffffff811115613bd957613bd8614c0a565b5b613be586828701613854565b93509350506020613bf88682870161399d565b9150509250925092565b600060208284031215613c1857613c17614c0f565b5b600082013567ffffffffffffffff811115613c3657613c35614c0a565b5b613c42848285016138aa565b91505092915050565b600060208284031215613c6157613c60614c0f565b5b6000613c6f848285016138d8565b91505092915050565b600060208284031215613c8e57613c8d614c0f565b5b6000613c9c848285016138ed565b91505092915050565b600060208284031215613cbb57613cba614c0f565b5b6000613cc984828501613902565b91505092915050565b600060208284031215613ce857613ce7614c0f565b5b600082013567ffffffffffffffff811115613d0657613d05614c0a565b5b613d1284828501613945565b91505092915050565b600060208284031215613d3157613d30614c0f565b5b6000613d3f84828501613973565b91505092915050565b600060208284031215613d5e57613d5d614c0f565b5b6000613d6c84828501613988565b91505092915050565b600060208284031215613d8b57613d8a614c0f565b5b6000613d998482850161399d565b91505092915050565b613dab816148f4565b82525050565b613dba81614906565b82525050565b6000613dcb82614768565b613dd5818561477e565b9350613de58185602086016149cc565b613dee81614c14565b840191505092915050565b613e0281614975565b82525050565b613e1181614987565b82525050565b6000613e2282614773565b613e2c818561478f565b9350613e3c8185602086016149cc565b613e4581614c14565b840191505092915050565b6000613e5b82614773565b613e6581856147a0565b9350613e758185602086016149cc565b80840191505092915050565b6000613e8e60158361478f565b9150613e9982614c25565b602082019050919050565b6000613eb1602b8361478f565b9150613ebc82614c4e565b604082019050919050565b6000613ed460328361478f565b9150613edf82614c9d565b604082019050919050565b6000613ef760268361478f565b9150613f0282614cec565b604082019050919050565b6000613f1a60208361478f565b9150613f2582614d3b565b602082019050919050565b6000613f3d60258361478f565b9150613f4882614d64565b604082019050919050565b6000613f60601c8361478f565b9150613f6b82614db3565b602082019050919050565b6000613f8360248361478f565b9150613f8e82614ddc565b604082019050919050565b6000613fa660198361478f565b9150613fb182614e2b565b602082019050919050565b6000613fc9601f8361478f565b9150613fd482614e54565b602082019050919050565b6000613fec602c8361478f565b9150613ff782614e7d565b604082019050919050565b600061400f60388361478f565b915061401a82614ecc565b604082019050919050565b6000614032602a8361478f565b915061403d82614f1b565b604082019050919050565b600061405560298361478f565b915061406082614f6a565b604082019050919050565b600061407860208361478f565b915061408382614fb9565b602082019050919050565b600061409b602c8361478f565b91506140a682614fe2565b604082019050919050565b60006140be6005836147a0565b91506140c982615031565b600582019050919050565b60006140e160208361478f565b91506140ec8261505a565b602082019050919050565b6000614104602f8361478f565b915061410f82615083565b604082019050919050565b600061412760228361478f565b9150614132826150d2565b604082019050919050565b600061414a60218361478f565b915061415582615121565b604082019050919050565b600061416d60228361478f565b915061417882615170565b604082019050919050565b600061419060178361478f565b915061419b826151bf565b602082019050919050565b60006141b360318361478f565b91506141be826151e8565b604082019050919050565b60006141d6602c8361478f565b91506141e182615237565b604082019050919050565b60006141f960188361478f565b915061420482615286565b602082019050919050565b6142188161495e565b82525050565b61422781614968565b82525050565b60006142398285613e50565b91506142458284613e50565b9150614250826140b1565b91508190509392505050565b60006020820190506142716000830184613da2565b92915050565b600060808201905061428c6000830187613da2565b6142996020830186613da2565b6142a6604083018561420f565b81810360608301526142b88184613dc0565b905095945050505050565b60006040820190506142d86000830185613da2565b6142e5602083018461420f565b9392505050565b60006020820190506143016000830184613db1565b92915050565b600060208201905061431c6000830184613df9565b92915050565b60006020820190506143376000830184613e08565b92915050565b600060208201905081810360008301526143578184613e17565b905092915050565b6000602082019050818103600083015261437881613e81565b9050919050565b6000602082019050818103600083015261439881613ea4565b9050919050565b600060208201905081810360008301526143b881613ec7565b9050919050565b600060208201905081810360008301526143d881613eea565b9050919050565b600060208201905081810360008301526143f881613f0d565b9050919050565b6000602082019050818103600083015261441881613f30565b9050919050565b6000602082019050818103600083015261443881613f53565b9050919050565b6000602082019050818103600083015261445881613f76565b9050919050565b6000602082019050818103600083015261447881613f99565b9050919050565b6000602082019050818103600083015261449881613fbc565b9050919050565b600060208201905081810360008301526144b881613fdf565b9050919050565b600060208201905081810360008301526144d881614002565b9050919050565b600060208201905081810360008301526144f881614025565b9050919050565b6000602082019050818103600083015261451881614048565b9050919050565b600060208201905081810360008301526145388161406b565b9050919050565b600060208201905081810360008301526145588161408e565b9050919050565b60006020820190508181036000830152614578816140d4565b9050919050565b60006020820190508181036000830152614598816140f7565b9050919050565b600060208201905081810360008301526145b88161411a565b9050919050565b600060208201905081810360008301526145d88161413d565b9050919050565b600060208201905081810360008301526145f881614160565b9050919050565b6000602082019050818103600083015261461881614183565b9050919050565b60006020820190508181036000830152614638816141a6565b9050919050565b60006020820190508181036000830152614658816141c9565b9050919050565b60006020820190508181036000830152614678816141ec565b9050919050565b6000602082019050614694600083018461420f565b92915050565b60006020820190506146af600083018461421e565b92915050565b60006146bf6146d0565b90506146cb8282614a31565b919050565b6000604051905090565b600067ffffffffffffffff8211156146f5576146f4614bc7565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561472157614720614bc7565b5b61472a82614c14565b9050602081019050919050565b600067ffffffffffffffff82111561475257614751614bc7565b5b61475b82614c14565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147b68261495e565b91506147c18361495e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147f6576147f5614adc565b5b828201905092915050565b600061480c8261495e565b91506148178361495e565b92508261482757614826614b0b565b5b828204905092915050565b600061483d8261495e565b91506148488361495e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561488157614880614adc565b5b828202905092915050565b60006148978261495e565b91506148a28361495e565b9250828210156148b5576148b4614adc565b5b828203905092915050565b60006148cb82614968565b91506148d683614968565b9250828210156148e9576148e8614adc565b5b828203905092915050565b60006148ff8261493e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061498082614999565b9050919050565b600061499282614999565b9050919050565b60006149a4826149ab565b9050919050565b60006149b68261493e565b9050919050565b82818337600083830152505050565b60005b838110156149ea5780820151818401526020810190506149cf565b838111156149f9576000848401525b50505050565b60006002820490506001821680614a1757607f821691505b60208210811415614a2b57614a2a614b3a565b5b50919050565b614a3a82614c14565b810181811067ffffffffffffffff82111715614a5957614a58614bc7565b5b80604052505050565b6000614a6d8261495e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aa057614a9f614adc565b5b600182019050919050565b6000614ab68261495e565b9150614ac18361495e565b925082614ad157614ad0614b0b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f655843454544454420544f54414c20535550504c590000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820746f6b656e73600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f45746865722076616c75652073656e74206973206e6f7420636f727265637400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e7420746f6b6560008201527f6e73000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d617820617661696c61626c6520746f2070757263686160008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e27742072657365727665207269676874206e6f77000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416c6c6f77206c697374206973206e6f74206163746976650000000000000000600082015250565b6152b8816148f4565b81146152c357600080fd5b50565b6152cf81614906565b81146152da57600080fd5b50565b6152e681614912565b81146152f157600080fd5b50565b6152fd8161495e565b811461530857600080fd5b50565b61531481614968565b811461531f57600080fd5b5056fea2646970667358221220905828674ee6f0a294f30aef1c4757da5ffafde827eff31988b08bfd7233c25164736f6c63430008070033

Deployed Bytecode Sourcemap

415:6418:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4633:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2501:100:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4069:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3592:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1348:56:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1658:113:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4819:339:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;969:37:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1326:256:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1055:41:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6519:311;;;;;;;;;;;;;:::i;:::-;;2508:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5229:185:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6058:453:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1848:233:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4820:111:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2195:239:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;879:41:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1925:208:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:11;;;;;;;;;;;;;:::i;:::-;;1289:52:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1063:87:11;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2873:115:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2670:104:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1580:133:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5516:533;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4362:155:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1243:37:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1843:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3730:706;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;505:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1013:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5485:328:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5412:96:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2845:342:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5070:334:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;475:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1983:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1158:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1107:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4588:164:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;840:32:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2639:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1722:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1972:201:11;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4633:179:10;4744:4;4768:36;4792:11;4768:23;:36::i;:::-;4761:43;;4633:179;;;:::o;2501:100:3:-;2555:13;2588:5;2581:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2501:100;:::o;4069:221::-;4145:7;4173:16;4181:7;4173;:16::i;:::-;4165:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4258:15;:24;4274:7;4258:24;;;;;;;;;;;;;;;;;;;;;4251:31;;4069:221;;;:::o;3592:411::-;3673:13;3689:23;3704:7;3689:14;:23::i;:::-;3673:39;;3737:5;3731:11;;:2;:11;;;;3723:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3831:5;3815:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3840:37;3857:5;3864:12;:10;:12::i;:::-;3840:16;:37::i;:::-;3815:62;3793:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;3974:21;3983:2;3987:7;3974:8;:21::i;:::-;3662:341;3592:411;;:::o;1348:56:10:-;1394:10;1348:56;:::o;1658:113:4:-;1719:7;1746:10;:17;;;;1739:24;;1658:113;:::o;4819:339:3:-;5014:41;5033:12;:10;:12::i;:::-;5047:7;5014:18;:41::i;:::-;5006:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5122:28;5132:4;5138:2;5142:7;5122:9;:28::i;:::-;4819:339;;;:::o;969:37:10:-;;;;;;;;;;;;;:::o;1326:256:4:-;1423:7;1459:23;1476:5;1459:16;:23::i;:::-;1451:5;:31;1443:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1548:12;:19;1561:5;1548:19;;;;;;;;;;;;;;;:26;1568:5;1548:26;;;;;;;;;;;;1541:33;;1326:256;;;;:::o;1055:41:10:-;1092:4;1055:41;:::o;6519:311::-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6567:12:10::1;6582:21;6567:36;;6614:14;6646:3;6639:6;;6631:7;:14;;;;:::i;:::-;:18;;;;:::i;:::-;6614:35;;6660:21;6706:4;6692:13;;6684:7;:21;;;;:::i;:::-;:26;;;;:::i;:::-;6660:50;;6729:9;;;;;;;;;;;6721:27;;:38;6749:9;6721:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6778:16;;;;;;;;;;;6770:34;;:52;6805:16;6770:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;6556:274;;;6519:311::o:0;2508:123::-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2607:16:10::1;2589:15;;:34;;;;;;;;;;;;;;;;;;2508:123:::0;:::o;5229:185:3:-;5367:39;5384:4;5390:2;5394:7;5367:39;;;;;;;;;;;;:16;:39::i;:::-;5229:185;;;:::o;6058:453:10:-;6131:10;6144:13;:11;:13::i;:::-;6131:26;;6172:21;;;;;;;;;;;6164:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;1092:4;6242:10;:17;6237:2;:22;;;;:::i;:::-;:36;;6228:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6312:6;6306:198;6328:10;:17;6324:1;:21;6306:198;;;6402:10;6371:41;;:4;;;;;;;;;;;:12;;;6384:10;6395:1;6384:13;;;;;;;;:::i;:::-;;;;;;;;6371:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;6363:50;;;;;;6422:4;;;;;;;;;;;:9;;;6432:10;6444;6455:1;6444:13;;;;;;;;:::i;:::-;;;;;;;;6422:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6467:29;6477:10;6493:1;6489:2;:5;;;;:::i;:::-;6467:9;:29::i;:::-;6348:3;;;;;:::i;:::-;;;;6306:198;;;;6124:387;6058:453;:::o;1848:233:4:-;1923:7;1959:30;:28;:30::i;:::-;1951:5;:38;1943:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2056:10;2067:5;2056:17;;;;;;;;:::i;:::-;;;;;;;;;;2049:24;;1848:233;;;:::o;4820:111:10:-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4915:8:10::1;4896:16;:27;;;;;;;;;;;;:::i;:::-;;4820:111:::0;:::o;2195:239:3:-;2267:7;2287:13;2303:7;:16;2311:7;2303:16;;;;;;;;;;;;;;;;;;;;;2287:32;;2355:1;2338:19;;:5;:19;;;;2330:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2421:5;2414:12;;;2195:239;;;:::o;879:41:10:-;;;;;;;;;;;;;:::o;1925:208:3:-;1997:7;2042:1;2025:19;;:5;:19;;;;2017:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2109:9;:16;2119:5;2109:16;;;;;;;;;;;;;;;;2102:23;;1925:208;;;:::o;1714:103:11:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;1289:52:10:-;1331:10;1289:52;:::o;1063:87:11:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;2873:115:10:-;2941:5;2966:8;:14;2975:4;2966:14;;;;;;;;;;;;;;;;;;;;;;;;;2959:21;;2873:115;;;:::o;2670:104:3:-;2726:13;2759:7;2752:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2670:104;:::o;1580:133:10:-;1651:7;1677:10;;;;;;;;;;;:20;;;1698:6;1677:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1670:35;;1580:133;;;:::o;5516:533::-;5577:10;5590:13;:11;:13::i;:::-;5577:26;;5622:12;;;;;;;;;;;5614:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;1149:2;1092:4;1208:26;;;;:::i;:::-;5714:14;5692:19;;:36;;;;:::i;:::-;:63;;5684:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;5847:9;5829:14;1331:10;5811:32;;;;:::i;:::-;:45;;5803:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;5910:9;5905:137;5929:14;5925:1;:18;5905:137;;;5965:29;5975:10;5992:1;5987:2;:6;;;;:::i;:::-;5965:9;:29::i;:::-;6009:19;;:21;;;;;;;;;:::i;:::-;;;;;;5945:3;;;;;:::i;:::-;;;;5905:137;;;;5566:483;5516:533;:::o;4362:155:3:-;4457:52;4476:12;:10;:12::i;:::-;4490:8;4500;4457:18;:52::i;:::-;4362:155;;:::o;1243:37:10:-;;;;:::o;1843:131::-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1948:17:10::1;1923:10;;:43;;;;;;;;;;;;;;;;;;1843:131:::0;:::o;3730:706::-;3801:10;3814:13;:11;:13::i;:::-;3801:26;;3858:15;;;;;;;;;;;3850:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;3939:8;:20;3948:10;3939:20;;;;;;;;;;;;;;;;;;;;;;;;;3921:38;;:14;:38;;;;3913:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;1149:2;1092:4;1208:26;;;;:::i;:::-;4048:14;4026:36;;:19;;:36;;;;:::i;:::-;:63;;4018:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;4185:9;4167:14;4145:36;;1394:10;4145:36;;;;:::i;:::-;:49;;4137:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;4267:14;4243:8;:20;4252:10;4243:20;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4297:9;4292:137;4316:14;4312:18;;:1;:18;4292:137;;;4352:29;4362:10;4379:1;4374:2;:6;;;;:::i;:::-;4352:9;:29::i;:::-;4396:19;;:21;;;;;;;;;:::i;:::-;;;;;;4332:3;;;;;:::i;:::-;;;;4292:137;;;;3790:646;3730:706;:::o;505:29::-;;;;;;;;;;;;;:::o;1013:35::-;;;;;;;;;;;;;:::o;5485:328:3:-;5660:41;5679:12;:10;:12::i;:::-;5693:7;5660:18;:41::i;:::-;5652:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5766:39;5780:4;5786:2;5790:7;5799:5;5766:13;:39::i;:::-;5485:328;;;;:::o;5412:96:10:-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5492:8:10::1;5477:12;;:23;;;;;;;;;;;;;;;;;;5412:96:::0;:::o;2845:342:3:-;2918:13;2952:16;2960:7;2952;:16::i;:::-;2944:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3033:21;3057:10;:8;:10::i;:::-;3033:34;;3109:1;3091:7;3085:21;:25;:94;;;;;;;;;;;;;;;;;3137:7;3146:18;:7;:16;:18::i;:::-;3120:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3085:94;3078:101;;;2845:342;;;:::o;5070:334:10:-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5136:11:10::1;5150:13;:11;:13::i;:::-;5136:27;;5172:6;1149:2;1092:4;1208:26;;;;:::i;:::-;5217:1;5195:19;;:23;;;;:::i;:::-;:50;;5187:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;5300:1;5296:5;;5291:106;5307:1;5303;:5;5291:106;;;5328:25;5338:2;5351:1;5342:6;:10;;;;:::i;:::-;5328:9;:25::i;:::-;5366:19;;:21;;;;;;;;;:::i;:::-;;;;;;5310:3;;;;;:::i;:::-;;;;5291:106;;;5127:277;;5070:334:::0;;:::o;475:24::-;;;;;;;;;;;;;:::o;1983:115::-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2082:8:10::1;2058:21;;:32;;;;;;;;;;;;;;;;;;1983:115:::0;:::o;1158:76::-;1149:2;1092:4;1208:26;;;;:::i;:::-;1158:76;:::o;1107:44::-;1149:2;1107:44;:::o;4588:164:3:-;4685:4;4709:18;:25;4728:5;4709:25;;;;;;;;;;;;;;;:35;4735:8;4709:35;;;;;;;;;;;;;;;;;;;;;;;;;4702:42;;4588:164;;;;:::o;840:32:10:-;;;;;;;;;;;;;:::o;2639:226::-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2748:9:10::1;2743:115;2767:9;;:16;;2763:1;:20;2743:115;;;2830:16;2805:8;:22;2814:9;;2824:1;2814:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2805:22;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;2785:3;;;;;:::i;:::-;;;;2743:115;;;;2639:226:::0;;;:::o;1722:108::-;1294:12:11;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1810:11:10::1;1790:4;;:32;;;;;;;;;;;;;;;;;;1722:108:::0;:::o;1972:201:11:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;1018:224:4:-;1120:4;1159:35;1144:50;;;:11;:50;;;;:90;;;;1198:36;1222:11;1198:23;:36::i;:::-;1144:90;1137:97;;1018:224;;;:::o;7323:127:3:-;7388:4;7440:1;7412:30;;:7;:16;7420:7;7412:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7405:37;;7323:127;;;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;11469:174:3:-;11571:2;11544:15;:24;11560:7;11544:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11627:7;11623:2;11589:46;;11598:23;11613:7;11598:14;:23::i;:::-;11589:46;;;;;;;;;;;;11469:174;;:::o;7617:348::-;7710:4;7735:16;7743:7;7735;:16::i;:::-;7727:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7811:13;7827:23;7842:7;7827:14;:23::i;:::-;7811:39;;7880:5;7869:16;;:7;:16;;;:52;;;;7889:32;7906:5;7913:7;7889:16;:32::i;:::-;7869:52;:87;;;;7949:7;7925:31;;:20;7937:7;7925:11;:20::i;:::-;:31;;;7869:87;7861:96;;;7617:348;;;;:::o;10726:625::-;10885:4;10858:31;;:23;10873:7;10858:14;:23::i;:::-;:31;;;10850:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10964:1;10950:16;;:2;:16;;;;10942:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11020:39;11041:4;11047:2;11051:7;11020:20;:39::i;:::-;11124:29;11141:1;11145:7;11124:8;:29::i;:::-;11185:1;11166:9;:15;11176:4;11166:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11214:1;11197:9;:13;11207:2;11197:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11245:2;11226:7;:16;11234:7;11226:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11284:7;11280:2;11265:27;;11274:4;11265:27;;;;;;;;;;;;11305:38;11325:4;11331:2;11335:7;11305:19;:38::i;:::-;10726:625;;;:::o;8307:110::-;8383:26;8393:2;8397:7;8383:26;;;;;;;;;;;;:9;:26::i;:::-;8307:110;;:::o;2333:191:11:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2396:128;2333:191;:::o;11785:315:3:-;11940:8;11931:17;;:5;:17;;;;11923:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12027:8;11989:18;:25;12008:5;11989:25;;;;;;;;;;;;;;;:35;12015:8;11989:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12073:8;12051:41;;12066:5;12051:41;;;12083:8;12051:41;;;;;;:::i;:::-;;;;;;;;11785:315;;;:::o;6695:::-;6852:28;6862:4;6868:2;6872:7;6852:9;:28::i;:::-;6899:48;6922:4;6928:2;6932:7;6941:5;6899:22;:48::i;:::-;6891:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6695:315;;;;:::o;4939:117:10:-;4999:13;5032:16;5025:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4939:117;:::o;342:723:12:-;398:13;628:1;619:5;:10;615:53;;;646:10;;;;;;;;;;;;;;;;;;;;;615:53;678:12;693:5;678:20;;709:14;734:78;749:1;741:4;:9;734:78;;767:8;;;;;:::i;:::-;;;;798:2;790:10;;;;;:::i;:::-;;;734:78;;;822:19;854:6;844:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;822:39;;872:154;888:1;879:5;:10;872:154;;916:1;906:11;;;;;:::i;:::-;;;983:2;975:5;:10;;;;:::i;:::-;962:2;:24;;;;:::i;:::-;949:39;;932:6;939;932:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1012:2;1003:11;;;;;:::i;:::-;;;872:154;;;1050:6;1036:21;;;;;342:723;;;;:::o;1556:305:3:-;1658:4;1710:25;1695:40;;;:11;:40;;;;:105;;;;1767:33;1752:48;;;:11;:48;;;;1695:105;:158;;;;1817:36;1841:11;1817:23;:36::i;:::-;1695:158;1675:178;;1556:305;;;:::o;4444:181:10:-;4572:45;4599:4;4605:2;4609:7;4572:26;:45::i;:::-;4444:181;;;:::o;14547:125:3:-;;;;:::o;8644:321::-;8774:18;8780:2;8784:7;8774:5;:18::i;:::-;8825:54;8856:1;8860:2;8864:7;8873:5;8825:22;:54::i;:::-;8803:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;8644:321;;;:::o;12665:799::-;12820:4;12841:15;:2;:13;;;:15::i;:::-;12837:620;;;12893:2;12877:36;;;12914:12;:10;:12::i;:::-;12928:4;12934:7;12943:5;12877:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12873:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13136:1;13119:6;:13;:18;13115:272;;;13162:60;;;;;;;;;;:::i;:::-;;;;;;;;13115:272;13337:6;13331:13;13322:6;13318:2;13314:15;13307:38;12873:529;13010:41;;;13000:51;;;:6;:51;;;;12993:58;;;;;12837:620;13441:4;13434:11;;12665:799;;;;;;;:::o;854:157:2:-;939:4;978:25;963:40;;;:11;:40;;;;956:47;;854:157;;;:::o;2694:589:4:-;2838:45;2865:4;2871:2;2875:7;2838:26;:45::i;:::-;2916:1;2900:18;;:4;:18;;;2896:187;;;2935:40;2967:7;2935:31;:40::i;:::-;2896:187;;;3005:2;2997:10;;:4;:10;;;2993:90;;3024:47;3057:4;3063:7;3024:32;:47::i;:::-;2993:90;2896:187;3111:1;3097:16;;:2;:16;;;3093:183;;;3130:45;3167:7;3130:36;:45::i;:::-;3093:183;;;3203:4;3197:10;;:2;:10;;;3193:83;;3224:40;3252:2;3256:7;3224:27;:40::i;:::-;3193:83;3093:183;2694:589;;;:::o;9301:439:3:-;9395:1;9381:16;;:2;:16;;;;9373:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9454:16;9462:7;9454;:16::i;:::-;9453:17;9445:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9516:45;9545:1;9549:2;9553:7;9516:20;:45::i;:::-;9591:1;9574:9;:13;9584:2;9574:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9622:2;9603:7;:16;9611:7;9603:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9667:7;9663:2;9642:33;;9659:1;9642:33;;;;;;;;;;;;9688:44;9716:1;9720:2;9724:7;9688:19;:44::i;:::-;9301:439;;:::o;1210:326:0:-;1270:4;1527:1;1505:7;:19;;;:23;1498:30;;1210:326;;;:::o;14036:126:3:-;;;;:::o;4006:164:4:-;4110:10;:17;;;;4083:15;:24;4099:7;4083:24;;;;;;;;;;;:44;;;;4138:10;4154:7;4138:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4006:164;:::o;4797:988::-;5063:22;5113:1;5088:22;5105:4;5088:16;:22::i;:::-;:26;;;;:::i;:::-;5063:51;;5125:18;5146:17;:26;5164:7;5146:26;;;;;;;;;;;;5125:47;;5293:14;5279:10;:28;5275:328;;5324:19;5346:12;:18;5359:4;5346:18;;;;;;;;;;;;;;;:34;5365:14;5346:34;;;;;;;;;;;;5324:56;;5430:11;5397:12;:18;5410:4;5397:18;;;;;;;;;;;;;;;:30;5416:10;5397:30;;;;;;;;;;;:44;;;;5547:10;5514:17;:30;5532:11;5514:30;;;;;;;;;;;:43;;;;5309:294;5275:328;5699:17;:26;5717:7;5699:26;;;;;;;;;;;5692:33;;;5743:12;:18;5756:4;5743:18;;;;;;;;;;;;;;;:34;5762:14;5743:34;;;;;;;;;;;5736:41;;;4878:907;;4797:988;;:::o;6080:1079::-;6333:22;6378:1;6358:10;:17;;;;:21;;;;:::i;:::-;6333:46;;6390:18;6411:15;:24;6427:7;6411:24;;;;;;;;;;;;6390:45;;6762:19;6784:10;6795:14;6784:26;;;;;;;;:::i;:::-;;;;;;;;;;6762:48;;6848:11;6823:10;6834;6823:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;6959:10;6928:15;:28;6944:11;6928:28;;;;;;;;;;;:41;;;;7100:15;:24;7116:7;7100:24;;;;;;;;;;;7093:31;;;7135:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6151:1008;;;6080:1079;:::o;3584:221::-;3669:14;3686:20;3703:2;3686:16;:20::i;:::-;3669:37;;3744:7;3717:12;:16;3730:2;3717:16;;;;;;;;;;;;;;;:24;3734:6;3717:24;;;;;;;;;;;:34;;;;3791:6;3762:17;:26;3780:7;3762:26;;;;;;;;;;;:35;;;;3658:147;3584:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:13:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1731:143::-;1788:5;1819:6;1813:13;1804:22;;1835:33;1862:5;1835:33;:::i;:::-;1731:143;;;;:::o;1897:568::-;1970:8;1980:6;2030:3;2023:4;2015:6;2011:17;2007:27;1997:122;;2038:79;;:::i;:::-;1997:122;2151:6;2138:20;2128:30;;2181:18;2173:6;2170:30;2167:117;;;2203:79;;:::i;:::-;2167:117;2317:4;2309:6;2305:17;2293:29;;2371:3;2363:4;2355:6;2351:17;2341:8;2337:32;2334:41;2331:128;;;2378:79;;:::i;:::-;2331:128;1897:568;;;;;:::o;2488:370::-;2559:5;2608:3;2601:4;2593:6;2589:17;2585:27;2575:122;;2616:79;;:::i;:::-;2575:122;2733:6;2720:20;2758:94;2848:3;2840:6;2833:4;2825:6;2821:17;2758:94;:::i;:::-;2749:103;;2565:293;2488:370;;;;:::o;2864:133::-;2907:5;2945:6;2932:20;2923:29;;2961:30;2985:5;2961:30;:::i;:::-;2864:133;;;;:::o;3003:137::-;3048:5;3086:6;3073:20;3064:29;;3102:32;3128:5;3102:32;:::i;:::-;3003:137;;;;:::o;3146:141::-;3202:5;3233:6;3227:13;3218:22;;3249:32;3275:5;3249:32;:::i;:::-;3146:141;;;;:::o;3306:338::-;3361:5;3410:3;3403:4;3395:6;3391:17;3387:27;3377:122;;3418:79;;:::i;:::-;3377:122;3535:6;3522:20;3560:78;3634:3;3626:6;3619:4;3611:6;3607:17;3560:78;:::i;:::-;3551:87;;3367:277;3306:338;;;;:::o;3664:340::-;3720:5;3769:3;3762:4;3754:6;3750:17;3746:27;3736:122;;3777:79;;:::i;:::-;3736:122;3894:6;3881:20;3919:79;3994:3;3986:6;3979:4;3971:6;3967:17;3919:79;:::i;:::-;3910:88;;3726:278;3664:340;;;;:::o;4010:139::-;4056:5;4094:6;4081:20;4072:29;;4110:33;4137:5;4110:33;:::i;:::-;4010:139;;;;:::o;4155:143::-;4212:5;4243:6;4237:13;4228:22;;4259:33;4286:5;4259:33;:::i;:::-;4155:143;;;;:::o;4304:135::-;4348:5;4386:6;4373:20;4364:29;;4402:31;4427:5;4402:31;:::i;:::-;4304:135;;;;:::o;4445:329::-;4504:6;4553:2;4541:9;4532:7;4528:23;4524:32;4521:119;;;4559:79;;:::i;:::-;4521:119;4679:1;4704:53;4749:7;4740:6;4729:9;4725:22;4704:53;:::i;:::-;4694:63;;4650:117;4445:329;;;;:::o;4780:351::-;4850:6;4899:2;4887:9;4878:7;4874:23;4870:32;4867:119;;;4905:79;;:::i;:::-;4867:119;5025:1;5050:64;5106:7;5097:6;5086:9;5082:22;5050:64;:::i;:::-;5040:74;;4996:128;4780:351;;;;:::o;5137:474::-;5205:6;5213;5262:2;5250:9;5241:7;5237:23;5233:32;5230:119;;;5268:79;;:::i;:::-;5230:119;5388:1;5413:53;5458:7;5449:6;5438:9;5434:22;5413:53;:::i;:::-;5403:63;;5359:117;5515:2;5541:53;5586:7;5577:6;5566:9;5562:22;5541:53;:::i;:::-;5531:63;;5486:118;5137:474;;;;;:::o;5617:619::-;5694:6;5702;5710;5759:2;5747:9;5738:7;5734:23;5730:32;5727:119;;;5765:79;;:::i;:::-;5727:119;5885:1;5910:53;5955:7;5946:6;5935:9;5931:22;5910:53;:::i;:::-;5900:63;;5856:117;6012:2;6038:53;6083:7;6074:6;6063:9;6059:22;6038:53;:::i;:::-;6028:63;;5983:118;6140:2;6166:53;6211:7;6202:6;6191:9;6187:22;6166:53;:::i;:::-;6156:63;;6111:118;5617:619;;;;;:::o;6242:943::-;6337:6;6345;6353;6361;6410:3;6398:9;6389:7;6385:23;6381:33;6378:120;;;6417:79;;:::i;:::-;6378:120;6537:1;6562:53;6607:7;6598:6;6587:9;6583:22;6562:53;:::i;:::-;6552:63;;6508:117;6664:2;6690:53;6735:7;6726:6;6715:9;6711:22;6690:53;:::i;:::-;6680:63;;6635:118;6792:2;6818:53;6863:7;6854:6;6843:9;6839:22;6818:53;:::i;:::-;6808:63;;6763:118;6948:2;6937:9;6933:18;6920:32;6979:18;6971:6;6968:30;6965:117;;;7001:79;;:::i;:::-;6965:117;7106:62;7160:7;7151:6;7140:9;7136:22;7106:62;:::i;:::-;7096:72;;6891:287;6242:943;;;;;;;:::o;7191:468::-;7256:6;7264;7313:2;7301:9;7292:7;7288:23;7284:32;7281:119;;;7319:79;;:::i;:::-;7281:119;7439:1;7464:53;7509:7;7500:6;7489:9;7485:22;7464:53;:::i;:::-;7454:63;;7410:117;7566:2;7592:50;7634:7;7625:6;7614:9;7610:22;7592:50;:::i;:::-;7582:60;;7537:115;7191:468;;;;;:::o;7665:474::-;7733:6;7741;7790:2;7778:9;7769:7;7765:23;7761:32;7758:119;;;7796:79;;:::i;:::-;7758:119;7916:1;7941:53;7986:7;7977:6;7966:9;7962:22;7941:53;:::i;:::-;7931:63;;7887:117;8043:2;8069:53;8114:7;8105:6;8094:9;8090:22;8069:53;:::i;:::-;8059:63;;8014:118;7665:474;;;;;:::o;8145:700::-;8238:6;8246;8254;8303:2;8291:9;8282:7;8278:23;8274:32;8271:119;;;8309:79;;:::i;:::-;8271:119;8457:1;8446:9;8442:17;8429:31;8487:18;8479:6;8476:30;8473:117;;;8509:79;;:::i;:::-;8473:117;8622:80;8694:7;8685:6;8674:9;8670:22;8622:80;:::i;:::-;8604:98;;;;8400:312;8751:2;8777:51;8820:7;8811:6;8800:9;8796:22;8777:51;:::i;:::-;8767:61;;8722:116;8145:700;;;;;:::o;8851:539::-;8935:6;8984:2;8972:9;8963:7;8959:23;8955:32;8952:119;;;8990:79;;:::i;:::-;8952:119;9138:1;9127:9;9123:17;9110:31;9168:18;9160:6;9157:30;9154:117;;;9190:79;;:::i;:::-;9154:117;9295:78;9365:7;9356:6;9345:9;9341:22;9295:78;:::i;:::-;9285:88;;9081:302;8851:539;;;;:::o;9396:323::-;9452:6;9501:2;9489:9;9480:7;9476:23;9472:32;9469:119;;;9507:79;;:::i;:::-;9469:119;9627:1;9652:50;9694:7;9685:6;9674:9;9670:22;9652:50;:::i;:::-;9642:60;;9598:114;9396:323;;;;:::o;9725:327::-;9783:6;9832:2;9820:9;9811:7;9807:23;9803:32;9800:119;;;9838:79;;:::i;:::-;9800:119;9958:1;9983:52;10027:7;10018:6;10007:9;10003:22;9983:52;:::i;:::-;9973:62;;9929:116;9725:327;;;;:::o;10058:349::-;10127:6;10176:2;10164:9;10155:7;10151:23;10147:32;10144:119;;;10182:79;;:::i;:::-;10144:119;10302:1;10327:63;10382:7;10373:6;10362:9;10358:22;10327:63;:::i;:::-;10317:73;;10273:127;10058:349;;;;:::o;10413:509::-;10482:6;10531:2;10519:9;10510:7;10506:23;10502:32;10499:119;;;10537:79;;:::i;:::-;10499:119;10685:1;10674:9;10670:17;10657:31;10715:18;10707:6;10704:30;10701:117;;;10737:79;;:::i;:::-;10701:117;10842:63;10897:7;10888:6;10877:9;10873:22;10842:63;:::i;:::-;10832:73;;10628:287;10413:509;;;;:::o;10928:329::-;10987:6;11036:2;11024:9;11015:7;11011:23;11007:32;11004:119;;;11042:79;;:::i;:::-;11004:119;11162:1;11187:53;11232:7;11223:6;11212:9;11208:22;11187:53;:::i;:::-;11177:63;;11133:117;10928:329;;;;:::o;11263:351::-;11333:6;11382:2;11370:9;11361:7;11357:23;11353:32;11350:119;;;11388:79;;:::i;:::-;11350:119;11508:1;11533:64;11589:7;11580:6;11569:9;11565:22;11533:64;:::i;:::-;11523:74;;11479:128;11263:351;;;;:::o;11620:325::-;11677:6;11726:2;11714:9;11705:7;11701:23;11697:32;11694:119;;;11732:79;;:::i;:::-;11694:119;11852:1;11877:51;11920:7;11911:6;11900:9;11896:22;11877:51;:::i;:::-;11867:61;;11823:115;11620:325;;;;:::o;11951:118::-;12038:24;12056:5;12038:24;:::i;:::-;12033:3;12026:37;11951:118;;:::o;12075:109::-;12156:21;12171:5;12156:21;:::i;:::-;12151:3;12144:34;12075:109;;:::o;12190:360::-;12276:3;12304:38;12336:5;12304:38;:::i;:::-;12358:70;12421:6;12416:3;12358:70;:::i;:::-;12351:77;;12437:52;12482:6;12477:3;12470:4;12463:5;12459:16;12437:52;:::i;:::-;12514:29;12536:6;12514:29;:::i;:::-;12509:3;12505:39;12498:46;;12280:270;12190:360;;;;:::o;12556:171::-;12663:57;12714:5;12663:57;:::i;:::-;12658:3;12651:70;12556:171;;:::o;12733:173::-;12841:58;12893:5;12841:58;:::i;:::-;12836:3;12829:71;12733:173;;:::o;12912:364::-;13000:3;13028:39;13061:5;13028:39;:::i;:::-;13083:71;13147:6;13142:3;13083:71;:::i;:::-;13076:78;;13163:52;13208:6;13203:3;13196:4;13189:5;13185:16;13163:52;:::i;:::-;13240:29;13262:6;13240:29;:::i;:::-;13235:3;13231:39;13224:46;;13004:272;12912:364;;;;:::o;13282:377::-;13388:3;13416:39;13449:5;13416:39;:::i;:::-;13471:89;13553:6;13548:3;13471:89;:::i;:::-;13464:96;;13569:52;13614:6;13609:3;13602:4;13595:5;13591:16;13569:52;:::i;:::-;13646:6;13641:3;13637:16;13630:23;;13392:267;13282:377;;;;:::o;13665:366::-;13807:3;13828:67;13892:2;13887:3;13828:67;:::i;:::-;13821:74;;13904:93;13993:3;13904:93;:::i;:::-;14022:2;14017:3;14013:12;14006:19;;13665:366;;;:::o;14037:::-;14179:3;14200:67;14264:2;14259:3;14200:67;:::i;:::-;14193:74;;14276:93;14365:3;14276:93;:::i;:::-;14394:2;14389:3;14385:12;14378:19;;14037:366;;;:::o;14409:::-;14551:3;14572:67;14636:2;14631:3;14572:67;:::i;:::-;14565:74;;14648:93;14737:3;14648:93;:::i;:::-;14766:2;14761:3;14757:12;14750:19;;14409:366;;;:::o;14781:::-;14923:3;14944:67;15008:2;15003:3;14944:67;:::i;:::-;14937:74;;15020:93;15109:3;15020:93;:::i;:::-;15138:2;15133:3;15129:12;15122:19;;14781:366;;;:::o;15153:::-;15295:3;15316:67;15380:2;15375:3;15316:67;:::i;:::-;15309:74;;15392:93;15481:3;15392:93;:::i;:::-;15510:2;15505:3;15501:12;15494:19;;15153:366;;;:::o;15525:::-;15667:3;15688:67;15752:2;15747:3;15688:67;:::i;:::-;15681:74;;15764:93;15853:3;15764:93;:::i;:::-;15882:2;15877:3;15873:12;15866:19;;15525:366;;;:::o;15897:::-;16039:3;16060:67;16124:2;16119:3;16060:67;:::i;:::-;16053:74;;16136:93;16225:3;16136:93;:::i;:::-;16254:2;16249:3;16245:12;16238:19;;15897:366;;;:::o;16269:::-;16411:3;16432:67;16496:2;16491:3;16432:67;:::i;:::-;16425:74;;16508:93;16597:3;16508:93;:::i;:::-;16626:2;16621:3;16617:12;16610:19;;16269:366;;;:::o;16641:::-;16783:3;16804:67;16868:2;16863:3;16804:67;:::i;:::-;16797:74;;16880:93;16969:3;16880:93;:::i;:::-;16998:2;16993:3;16989:12;16982:19;;16641:366;;;:::o;17013:::-;17155:3;17176:67;17240:2;17235:3;17176:67;:::i;:::-;17169:74;;17252:93;17341:3;17252:93;:::i;:::-;17370:2;17365:3;17361:12;17354:19;;17013:366;;;:::o;17385:::-;17527:3;17548:67;17612:2;17607:3;17548:67;:::i;:::-;17541:74;;17624:93;17713:3;17624:93;:::i;:::-;17742:2;17737:3;17733:12;17726:19;;17385:366;;;:::o;17757:::-;17899:3;17920:67;17984:2;17979:3;17920:67;:::i;:::-;17913:74;;17996:93;18085:3;17996:93;:::i;:::-;18114:2;18109:3;18105:12;18098:19;;17757:366;;;:::o;18129:::-;18271:3;18292:67;18356:2;18351:3;18292:67;:::i;:::-;18285:74;;18368:93;18457:3;18368:93;:::i;:::-;18486:2;18481:3;18477:12;18470:19;;18129:366;;;:::o;18501:::-;18643:3;18664:67;18728:2;18723:3;18664:67;:::i;:::-;18657:74;;18740:93;18829:3;18740:93;:::i;:::-;18858:2;18853:3;18849:12;18842:19;;18501:366;;;:::o;18873:::-;19015:3;19036:67;19100:2;19095:3;19036:67;:::i;:::-;19029:74;;19112:93;19201:3;19112:93;:::i;:::-;19230:2;19225:3;19221:12;19214:19;;18873:366;;;:::o;19245:::-;19387:3;19408:67;19472:2;19467:3;19408:67;:::i;:::-;19401:74;;19484:93;19573:3;19484:93;:::i;:::-;19602:2;19597:3;19593:12;19586:19;;19245:366;;;:::o;19617:400::-;19777:3;19798:84;19880:1;19875:3;19798:84;:::i;:::-;19791:91;;19891:93;19980:3;19891:93;:::i;:::-;20009:1;20004:3;20000:11;19993:18;;19617:400;;;:::o;20023:366::-;20165:3;20186:67;20250:2;20245:3;20186:67;:::i;:::-;20179:74;;20262:93;20351:3;20262:93;:::i;:::-;20380:2;20375:3;20371:12;20364:19;;20023:366;;;:::o;20395:::-;20537:3;20558:67;20622:2;20617:3;20558:67;:::i;:::-;20551:74;;20634:93;20723:3;20634:93;:::i;:::-;20752:2;20747:3;20743:12;20736:19;;20395:366;;;:::o;20767:::-;20909:3;20930:67;20994:2;20989:3;20930:67;:::i;:::-;20923:74;;21006:93;21095:3;21006:93;:::i;:::-;21124:2;21119:3;21115:12;21108:19;;20767:366;;;:::o;21139:::-;21281:3;21302:67;21366:2;21361:3;21302:67;:::i;:::-;21295:74;;21378:93;21467:3;21378:93;:::i;:::-;21496:2;21491:3;21487:12;21480:19;;21139:366;;;:::o;21511:::-;21653:3;21674:67;21738:2;21733:3;21674:67;:::i;:::-;21667:74;;21750:93;21839:3;21750:93;:::i;:::-;21868:2;21863:3;21859:12;21852:19;;21511:366;;;:::o;21883:::-;22025:3;22046:67;22110:2;22105:3;22046:67;:::i;:::-;22039:74;;22122:93;22211:3;22122:93;:::i;:::-;22240:2;22235:3;22231:12;22224:19;;21883:366;;;:::o;22255:::-;22397:3;22418:67;22482:2;22477:3;22418:67;:::i;:::-;22411:74;;22494:93;22583:3;22494:93;:::i;:::-;22612:2;22607:3;22603:12;22596:19;;22255:366;;;:::o;22627:::-;22769:3;22790:67;22854:2;22849:3;22790:67;:::i;:::-;22783:74;;22866:93;22955:3;22866:93;:::i;:::-;22984:2;22979:3;22975:12;22968:19;;22627:366;;;:::o;22999:::-;23141:3;23162:67;23226:2;23221:3;23162:67;:::i;:::-;23155:74;;23238:93;23327:3;23238:93;:::i;:::-;23356:2;23351:3;23347:12;23340:19;;22999:366;;;:::o;23371:118::-;23458:24;23476:5;23458:24;:::i;:::-;23453:3;23446:37;23371:118;;:::o;23495:112::-;23578:22;23594:5;23578:22;:::i;:::-;23573:3;23566:35;23495:112;;:::o;23613:701::-;23894:3;23916:95;24007:3;23998:6;23916:95;:::i;:::-;23909:102;;24028:95;24119:3;24110:6;24028:95;:::i;:::-;24021:102;;24140:148;24284:3;24140:148;:::i;:::-;24133:155;;24305:3;24298:10;;23613:701;;;;;:::o;24320:222::-;24413:4;24451:2;24440:9;24436:18;24428:26;;24464:71;24532:1;24521:9;24517:17;24508:6;24464:71;:::i;:::-;24320:222;;;;:::o;24548:640::-;24743:4;24781:3;24770:9;24766:19;24758:27;;24795:71;24863:1;24852:9;24848:17;24839:6;24795:71;:::i;:::-;24876:72;24944:2;24933:9;24929:18;24920:6;24876:72;:::i;:::-;24958;25026:2;25015:9;25011:18;25002:6;24958:72;:::i;:::-;25077:9;25071:4;25067:20;25062:2;25051:9;25047:18;25040:48;25105:76;25176:4;25167:6;25105:76;:::i;:::-;25097:84;;24548:640;;;;;;;:::o;25194:332::-;25315:4;25353:2;25342:9;25338:18;25330:26;;25366:71;25434:1;25423:9;25419:17;25410:6;25366:71;:::i;:::-;25447:72;25515:2;25504:9;25500:18;25491:6;25447:72;:::i;:::-;25194:332;;;;;:::o;25532:210::-;25619:4;25657:2;25646:9;25642:18;25634:26;;25670:65;25732:1;25721:9;25717:17;25708:6;25670:65;:::i;:::-;25532:210;;;;:::o;25748:262::-;25861:4;25899:2;25888:9;25884:18;25876:26;;25912:91;26000:1;25989:9;25985:17;25976:6;25912:91;:::i;:::-;25748:262;;;;:::o;26016:264::-;26130:4;26168:2;26157:9;26153:18;26145:26;;26181:92;26270:1;26259:9;26255:17;26246:6;26181:92;:::i;:::-;26016:264;;;;:::o;26286:313::-;26399:4;26437:2;26426:9;26422:18;26414:26;;26486:9;26480:4;26476:20;26472:1;26461:9;26457:17;26450:47;26514:78;26587:4;26578:6;26514:78;:::i;:::-;26506:86;;26286:313;;;;:::o;26605:419::-;26771:4;26809:2;26798:9;26794:18;26786:26;;26858:9;26852:4;26848:20;26844:1;26833:9;26829:17;26822:47;26886:131;27012:4;26886:131;:::i;:::-;26878:139;;26605:419;;;:::o;27030:::-;27196:4;27234:2;27223:9;27219:18;27211:26;;27283:9;27277:4;27273:20;27269:1;27258:9;27254:17;27247:47;27311:131;27437:4;27311:131;:::i;:::-;27303:139;;27030:419;;;:::o;27455:::-;27621:4;27659:2;27648:9;27644:18;27636:26;;27708:9;27702:4;27698:20;27694:1;27683:9;27679:17;27672:47;27736:131;27862:4;27736:131;:::i;:::-;27728:139;;27455:419;;;:::o;27880:::-;28046:4;28084:2;28073:9;28069:18;28061:26;;28133:9;28127:4;28123:20;28119:1;28108:9;28104:17;28097:47;28161:131;28287:4;28161:131;:::i;:::-;28153:139;;27880:419;;;:::o;28305:::-;28471:4;28509:2;28498:9;28494:18;28486:26;;28558:9;28552:4;28548:20;28544:1;28533:9;28529:17;28522:47;28586:131;28712:4;28586:131;:::i;:::-;28578:139;;28305:419;;;:::o;28730:::-;28896:4;28934:2;28923:9;28919:18;28911:26;;28983:9;28977:4;28973:20;28969:1;28958:9;28954:17;28947:47;29011:131;29137:4;29011:131;:::i;:::-;29003:139;;28730:419;;;:::o;29155:::-;29321:4;29359:2;29348:9;29344:18;29336:26;;29408:9;29402:4;29398:20;29394:1;29383:9;29379:17;29372:47;29436:131;29562:4;29436:131;:::i;:::-;29428:139;;29155:419;;;:::o;29580:::-;29746:4;29784:2;29773:9;29769:18;29761:26;;29833:9;29827:4;29823:20;29819:1;29808:9;29804:17;29797:47;29861:131;29987:4;29861:131;:::i;:::-;29853:139;;29580:419;;;:::o;30005:::-;30171:4;30209:2;30198:9;30194:18;30186:26;;30258:9;30252:4;30248:20;30244:1;30233:9;30229:17;30222:47;30286:131;30412:4;30286:131;:::i;:::-;30278:139;;30005:419;;;:::o;30430:::-;30596:4;30634:2;30623:9;30619:18;30611:26;;30683:9;30677:4;30673:20;30669:1;30658:9;30654:17;30647:47;30711:131;30837:4;30711:131;:::i;:::-;30703:139;;30430:419;;;:::o;30855:::-;31021:4;31059:2;31048:9;31044:18;31036:26;;31108:9;31102:4;31098:20;31094:1;31083:9;31079:17;31072:47;31136:131;31262:4;31136:131;:::i;:::-;31128:139;;30855:419;;;:::o;31280:::-;31446:4;31484:2;31473:9;31469:18;31461:26;;31533:9;31527:4;31523:20;31519:1;31508:9;31504:17;31497:47;31561:131;31687:4;31561:131;:::i;:::-;31553:139;;31280:419;;;:::o;31705:::-;31871:4;31909:2;31898:9;31894:18;31886:26;;31958:9;31952:4;31948:20;31944:1;31933:9;31929:17;31922:47;31986:131;32112:4;31986:131;:::i;:::-;31978:139;;31705:419;;;:::o;32130:::-;32296:4;32334:2;32323:9;32319:18;32311:26;;32383:9;32377:4;32373:20;32369:1;32358:9;32354:17;32347:47;32411:131;32537:4;32411:131;:::i;:::-;32403:139;;32130:419;;;:::o;32555:::-;32721:4;32759:2;32748:9;32744:18;32736:26;;32808:9;32802:4;32798:20;32794:1;32783:9;32779:17;32772:47;32836:131;32962:4;32836:131;:::i;:::-;32828:139;;32555:419;;;:::o;32980:::-;33146:4;33184:2;33173:9;33169:18;33161:26;;33233:9;33227:4;33223:20;33219:1;33208:9;33204:17;33197:47;33261:131;33387:4;33261:131;:::i;:::-;33253:139;;32980:419;;;:::o;33405:::-;33571:4;33609:2;33598:9;33594:18;33586:26;;33658:9;33652:4;33648:20;33644:1;33633:9;33629:17;33622:47;33686:131;33812:4;33686:131;:::i;:::-;33678:139;;33405:419;;;:::o;33830:::-;33996:4;34034:2;34023:9;34019:18;34011:26;;34083:9;34077:4;34073:20;34069:1;34058:9;34054:17;34047:47;34111:131;34237:4;34111:131;:::i;:::-;34103:139;;33830:419;;;:::o;34255:::-;34421:4;34459:2;34448:9;34444:18;34436:26;;34508:9;34502:4;34498:20;34494:1;34483:9;34479:17;34472:47;34536:131;34662:4;34536:131;:::i;:::-;34528:139;;34255:419;;;:::o;34680:::-;34846:4;34884:2;34873:9;34869:18;34861:26;;34933:9;34927:4;34923:20;34919:1;34908:9;34904:17;34897:47;34961:131;35087:4;34961:131;:::i;:::-;34953:139;;34680:419;;;:::o;35105:::-;35271:4;35309:2;35298:9;35294:18;35286:26;;35358:9;35352:4;35348:20;35344:1;35333:9;35329:17;35322:47;35386:131;35512:4;35386:131;:::i;:::-;35378:139;;35105:419;;;:::o;35530:::-;35696:4;35734:2;35723:9;35719:18;35711:26;;35783:9;35777:4;35773:20;35769:1;35758:9;35754:17;35747:47;35811:131;35937:4;35811:131;:::i;:::-;35803:139;;35530:419;;;:::o;35955:::-;36121:4;36159:2;36148:9;36144:18;36136:26;;36208:9;36202:4;36198:20;36194:1;36183:9;36179:17;36172:47;36236:131;36362:4;36236:131;:::i;:::-;36228:139;;35955:419;;;:::o;36380:::-;36546:4;36584:2;36573:9;36569:18;36561:26;;36633:9;36627:4;36623:20;36619:1;36608:9;36604:17;36597:47;36661:131;36787:4;36661:131;:::i;:::-;36653:139;;36380:419;;;:::o;36805:::-;36971:4;37009:2;36998:9;36994:18;36986:26;;37058:9;37052:4;37048:20;37044:1;37033:9;37029:17;37022:47;37086:131;37212:4;37086:131;:::i;:::-;37078:139;;36805:419;;;:::o;37230:222::-;37323:4;37361:2;37350:9;37346:18;37338:26;;37374:71;37442:1;37431:9;37427:17;37418:6;37374:71;:::i;:::-;37230:222;;;;:::o;37458:214::-;37547:4;37585:2;37574:9;37570:18;37562:26;;37598:67;37662:1;37651:9;37647:17;37638:6;37598:67;:::i;:::-;37458:214;;;;:::o;37678:129::-;37712:6;37739:20;;:::i;:::-;37729:30;;37768:33;37796:4;37788:6;37768:33;:::i;:::-;37678:129;;;:::o;37813:75::-;37846:6;37879:2;37873:9;37863:19;;37813:75;:::o;37894:311::-;37971:4;38061:18;38053:6;38050:30;38047:56;;;38083:18;;:::i;:::-;38047:56;38133:4;38125:6;38121:17;38113:25;;38193:4;38187;38183:15;38175:23;;37894:311;;;:::o;38211:307::-;38272:4;38362:18;38354:6;38351:30;38348:56;;;38384:18;;:::i;:::-;38348:56;38422:29;38444:6;38422:29;:::i;:::-;38414:37;;38506:4;38500;38496:15;38488:23;;38211:307;;;:::o;38524:308::-;38586:4;38676:18;38668:6;38665:30;38662:56;;;38698:18;;:::i;:::-;38662:56;38736:29;38758:6;38736:29;:::i;:::-;38728:37;;38820:4;38814;38810:15;38802:23;;38524:308;;;:::o;38838:98::-;38889:6;38923:5;38917:12;38907:22;;38838:98;;;:::o;38942:99::-;38994:6;39028:5;39022:12;39012:22;;38942:99;;;:::o;39047:168::-;39130:11;39164:6;39159:3;39152:19;39204:4;39199:3;39195:14;39180:29;;39047:168;;;;:::o;39221:169::-;39305:11;39339:6;39334:3;39327:19;39379:4;39374:3;39370:14;39355:29;;39221:169;;;;:::o;39396:148::-;39498:11;39535:3;39520:18;;39396:148;;;;:::o;39550:305::-;39590:3;39609:20;39627:1;39609:20;:::i;:::-;39604:25;;39643:20;39661:1;39643:20;:::i;:::-;39638:25;;39797:1;39729:66;39725:74;39722:1;39719:81;39716:107;;;39803:18;;:::i;:::-;39716:107;39847:1;39844;39840:9;39833:16;;39550:305;;;;:::o;39861:185::-;39901:1;39918:20;39936:1;39918:20;:::i;:::-;39913:25;;39952:20;39970:1;39952:20;:::i;:::-;39947:25;;39991:1;39981:35;;39996:18;;:::i;:::-;39981:35;40038:1;40035;40031:9;40026:14;;39861:185;;;;:::o;40052:348::-;40092:7;40115:20;40133:1;40115:20;:::i;:::-;40110:25;;40149:20;40167:1;40149:20;:::i;:::-;40144:25;;40337:1;40269:66;40265:74;40262:1;40259:81;40254:1;40247:9;40240:17;40236:105;40233:131;;;40344:18;;:::i;:::-;40233:131;40392:1;40389;40385:9;40374:20;;40052:348;;;;:::o;40406:191::-;40446:4;40466:20;40484:1;40466:20;:::i;:::-;40461:25;;40500:20;40518:1;40500:20;:::i;:::-;40495:25;;40539:1;40536;40533:8;40530:34;;;40544:18;;:::i;:::-;40530:34;40589:1;40586;40582:9;40574:17;;40406:191;;;;:::o;40603:185::-;40641:4;40661:18;40677:1;40661:18;:::i;:::-;40656:23;;40693:18;40709:1;40693:18;:::i;:::-;40688:23;;40730:1;40727;40724:8;40721:34;;;40735:18;;:::i;:::-;40721:34;40780:1;40777;40773:9;40765:17;;40603:185;;;;:::o;40794:96::-;40831:7;40860:24;40878:5;40860:24;:::i;:::-;40849:35;;40794:96;;;:::o;40896:90::-;40930:7;40973:5;40966:13;40959:21;40948:32;;40896:90;;;:::o;40992:149::-;41028:7;41068:66;41061:5;41057:78;41046:89;;40992:149;;;:::o;41147:126::-;41184:7;41224:42;41217:5;41213:54;41202:65;;41147:126;;;:::o;41279:77::-;41316:7;41345:5;41334:16;;41279:77;;;:::o;41362:86::-;41397:7;41437:4;41430:5;41426:16;41415:27;;41362:86;;;:::o;41454:146::-;41524:9;41557:37;41588:5;41557:37;:::i;:::-;41544:50;;41454:146;;;:::o;41606:147::-;41677:9;41710:37;41741:5;41710:37;:::i;:::-;41697:50;;41606:147;;;:::o;41759:126::-;41809:9;41842:37;41873:5;41842:37;:::i;:::-;41829:50;;41759:126;;;:::o;41891:113::-;41941:9;41974:24;41992:5;41974:24;:::i;:::-;41961:37;;41891:113;;;:::o;42010:154::-;42094:6;42089:3;42084;42071:30;42156:1;42147:6;42142:3;42138:16;42131:27;42010:154;;;:::o;42170:307::-;42238:1;42248:113;42262:6;42259:1;42256:13;42248:113;;;42347:1;42342:3;42338:11;42332:18;42328:1;42323:3;42319:11;42312:39;42284:2;42281:1;42277:10;42272:15;;42248:113;;;42379:6;42376:1;42373:13;42370:101;;;42459:1;42450:6;42445:3;42441:16;42434:27;42370:101;42219:258;42170:307;;;:::o;42483:320::-;42527:6;42564:1;42558:4;42554:12;42544:22;;42611:1;42605:4;42601:12;42632:18;42622:81;;42688:4;42680:6;42676:17;42666:27;;42622:81;42750:2;42742:6;42739:14;42719:18;42716:38;42713:84;;;42769:18;;:::i;:::-;42713:84;42534:269;42483:320;;;:::o;42809:281::-;42892:27;42914:4;42892:27;:::i;:::-;42884:6;42880:40;43022:6;43010:10;43007:22;42986:18;42974:10;42971:34;42968:62;42965:88;;;43033:18;;:::i;:::-;42965:88;43073:10;43069:2;43062:22;42852:238;42809:281;;:::o;43096:233::-;43135:3;43158:24;43176:5;43158:24;:::i;:::-;43149:33;;43204:66;43197:5;43194:77;43191:103;;;43274:18;;:::i;:::-;43191:103;43321:1;43314:5;43310:13;43303:20;;43096:233;;;:::o;43335:176::-;43367:1;43384:20;43402:1;43384:20;:::i;:::-;43379:25;;43418:20;43436:1;43418:20;:::i;:::-;43413:25;;43457:1;43447:35;;43462:18;;:::i;:::-;43447:35;43503:1;43500;43496:9;43491:14;;43335:176;;;;:::o;43517:180::-;43565:77;43562:1;43555:88;43662:4;43659:1;43652:15;43686:4;43683:1;43676:15;43703:180;43751:77;43748:1;43741:88;43848:4;43845:1;43838:15;43872:4;43869:1;43862:15;43889:180;43937:77;43934:1;43927:88;44034:4;44031:1;44024:15;44058:4;44055:1;44048:15;44075:180;44123:77;44120:1;44113:88;44220:4;44217:1;44210:15;44244:4;44241:1;44234:15;44261:180;44309:77;44306:1;44299:88;44406:4;44403:1;44396:15;44430:4;44427:1;44420:15;44447:180;44495:77;44492:1;44485:88;44592:4;44589:1;44582:15;44616:4;44613:1;44606:15;44633:117;44742:1;44739;44732:12;44756:117;44865:1;44862;44855:12;44879:117;44988:1;44985;44978:12;45002:117;45111:1;45108;45101:12;45125:117;45234:1;45231;45224:12;45248:117;45357:1;45354;45347:12;45371:102;45412:6;45463:2;45459:7;45454:2;45447:5;45443:14;45439:28;45429:38;;45371:102;;;:::o;45479:171::-;45619:23;45615:1;45607:6;45603:14;45596:47;45479:171;:::o;45656:230::-;45796:34;45792:1;45784:6;45780:14;45773:58;45865:13;45860:2;45852:6;45848:15;45841:38;45656:230;:::o;45892:237::-;46032:34;46028:1;46020:6;46016:14;46009:58;46101:20;46096:2;46088:6;46084:15;46077:45;45892:237;:::o;46135:225::-;46275:34;46271:1;46263:6;46259:14;46252:58;46344:8;46339:2;46331:6;46327:15;46320:33;46135:225;:::o;46366:182::-;46506:34;46502:1;46494:6;46490:14;46483:58;46366:182;:::o;46554:224::-;46694:34;46690:1;46682:6;46678:14;46671:58;46763:7;46758:2;46750:6;46746:15;46739:32;46554:224;:::o;46784:178::-;46924:30;46920:1;46912:6;46908:14;46901:54;46784:178;:::o;46968:223::-;47108:34;47104:1;47096:6;47092:14;47085:58;47177:6;47172:2;47164:6;47160:15;47153:31;46968:223;:::o;47197:175::-;47337:27;47333:1;47325:6;47321:14;47314:51;47197:175;:::o;47378:181::-;47518:33;47514:1;47506:6;47502:14;47495:57;47378:181;:::o;47565:231::-;47705:34;47701:1;47693:6;47689:14;47682:58;47774:14;47769:2;47761:6;47757:15;47750:39;47565:231;:::o;47802:243::-;47942:34;47938:1;47930:6;47926:14;47919:58;48011:26;48006:2;47998:6;47994:15;47987:51;47802:243;:::o;48051:229::-;48191:34;48187:1;48179:6;48175:14;48168:58;48260:12;48255:2;48247:6;48243:15;48236:37;48051:229;:::o;48286:228::-;48426:34;48422:1;48414:6;48410:14;48403:58;48495:11;48490:2;48482:6;48478:15;48471:36;48286:228;:::o;48520:182::-;48660:34;48656:1;48648:6;48644:14;48637:58;48520:182;:::o;48708:231::-;48848:34;48844:1;48836:6;48832:14;48825:58;48917:14;48912:2;48904:6;48900:15;48893:39;48708:231;:::o;48945:155::-;49085:7;49081:1;49073:6;49069:14;49062:31;48945:155;:::o;49106:182::-;49246:34;49242:1;49234:6;49230:14;49223:58;49106:182;:::o;49294:234::-;49434:34;49430:1;49422:6;49418:14;49411:58;49503:17;49498:2;49490:6;49486:15;49479:42;49294:234;:::o;49534:221::-;49674:34;49670:1;49662:6;49658:14;49651:58;49743:4;49738:2;49730:6;49726:15;49719:29;49534:221;:::o;49761:220::-;49901:34;49897:1;49889:6;49885:14;49878:58;49970:3;49965:2;49957:6;49953:15;49946:28;49761:220;:::o;49987:221::-;50127:34;50123:1;50115:6;50111:14;50104:58;50196:4;50191:2;50183:6;50179:15;50172:29;49987:221;:::o;50214:173::-;50354:25;50350:1;50342:6;50338:14;50331:49;50214:173;:::o;50393:236::-;50533:34;50529:1;50521:6;50517:14;50510:58;50602:19;50597:2;50589:6;50585:15;50578:44;50393:236;:::o;50635:231::-;50775:34;50771:1;50763:6;50759:14;50752:58;50844:14;50839:2;50831:6;50827:15;50820:39;50635:231;:::o;50872:174::-;51012:26;51008:1;51000:6;50996:14;50989:50;50872:174;:::o;51052:122::-;51125:24;51143:5;51125:24;:::i;:::-;51118:5;51115:35;51105:63;;51164:1;51161;51154:12;51105:63;51052:122;:::o;51180:116::-;51250:21;51265:5;51250:21;:::i;:::-;51243:5;51240:32;51230:60;;51286:1;51283;51276:12;51230:60;51180:116;:::o;51302:120::-;51374:23;51391:5;51374:23;:::i;:::-;51367:5;51364:34;51354:62;;51412:1;51409;51402:12;51354:62;51302:120;:::o;51428:122::-;51501:24;51519:5;51501:24;:::i;:::-;51494:5;51491:35;51481:63;;51540:1;51537;51530:12;51481:63;51428:122;:::o;51556:118::-;51627:22;51643:5;51627:22;:::i;:::-;51620:5;51617:33;51607:61;;51664:1;51661;51654:12;51607:61;51556:118;:::o

Swarm Source

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