ETH Price: $3,091.29 (-0.38%)
Gas: 2 Gwei

Token

The Wild Bunch (TWB)
 

Overview

Max Total Supply

4,000 TWB

Holders

1,756

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
rooshy.eth
Balance
1 TWB
0x29a0127e6090c1aa753d33bf5730591abb5ba83a
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

**One of 4000 federally wanted individuals from The Wild Bunch.** **Hand drawn by Warren Lotas:** https://www.instagram.com/warrenlotas/ **Join the hunt:** https://discord.gg/thewildbunch

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TheWildBunch

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-22
*/

// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.10;

library AddressUtils {

  /**
   * Returns whether the target address is a contract
   * @dev This function will return false if invoked during the constructor of a contract,
   * as the code is not actually created until after the constructor finishes.
   * @param _addr address to check
   * @return whether the target address is a contract
   */
  function isContract(address _addr) internal view returns (bool) {
    uint256 size;
    // XXX Currently there is no better way to check if there is a contract in an address
    // than to check the size of the code at that address.
    // See https://ethereum.stackexchange.com/a/14016/36603
    // for more details about how this works.
    // TODO Check this again before the Serenity release, because all addresses will be
    // contracts then.
    // solium-disable-next-line security/no-inline-assembly
    assembly { size := extcodesize(_addr) }
    return size > 0;
  }

}

/**
 * @dev Optional metadata extension for ERC-721 non-fungible token standard.
 * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md.
 */
interface ERC721Metadata
{

  /**
   * @dev Returns a descriptive name for a collection of NFTs in this contract.
   * @return _name Representing name.
   */
  function name()
    external
    view
    returns (string memory _name);

  /**
   * @dev Returns a abbreviated name for a collection of NFTs in this contract.
   * @return _symbol Representing symbol.
   */
  function symbol()
    external
    view
    returns (string memory _symbol);

}


/**
 * @dev ERC-721 interface for accepting safe transfers.
 * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md.
 */
interface ERC721TokenReceiver
{

  /**
   * @notice The contract address is always the message sender. A wallet/broker/auction application
   * MUST implement the wallet interface if it will accept safe transfers.
   * @dev Handle the receipt of a NFT. The ERC721 smart contract calls this function on the
   * recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return
   * of other than the magic value MUST result in the transaction being reverted.
   * Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` unless throwing.
   * @param _operator The address which called `safeTransferFrom` function.
   * @param _from The address which previously owned the token.
   * @param _tokenId The NFT identifier which is being transferred.
   * @param _data Additional data with no specified format.
   * @return Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
   */
  function onERC721Received(
    address _operator,
    address _from,
    uint256 _tokenId,
    bytes calldata _data
  )
    external
    returns(bytes4);

}


/**
 * @dev ERC-721 non-fungible token standard.
 * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md.
 */
interface ERC721
{

  /**
   * @dev Emits when ownership of any NFT changes by any mechanism. This event emits when NFTs are
   * created (`from` == 0) and destroyed (`to` == 0). Exception: during contract creation, any
   * number of NFTs may be created and assigned without emitting Transfer. At the time of any
   * transfer, the approved address for that NFT (if any) is reset to none.
   */
  event Transfer(
    address indexed _from,
    address indexed _to,
    uint256 indexed _tokenId
  );

  /**
   * @dev This emits when the approved address for an NFT is changed or reaffirmed. The zero
   * address indicates there is no approved address. When a Transfer event emits, this also
   * indicates that the approved address for that NFT (if any) is reset to none.
   */
  event Approval(
    address indexed _owner,
    address indexed _approved,
    uint256 indexed _tokenId
  );

  /**
   * @dev This emits when an operator is enabled or disabled for an owner. The operator can manage
   * all NFTs of the owner.
   */
  event ApprovalForAll(
    address indexed _owner,
    address indexed _operator,
    bool _approved
  );

  /**
   * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the
   * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is
   * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this
   * function checks if `_to` is a smart contract (code size > 0). If so, it calls
   * `onERC721Received` on `_to` and throws if the return value is not
   * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`.
   * @dev Transfers the ownership of an NFT from one address to another address. This function can
   * be changed to payable.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   * @param _data Additional data with no specified format, sent in call to `_to`.
   */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes calldata _data
  )
    external;

  /**
   * @notice This works identically to the other function with an extra data parameter, except this
   * function just sets data to ""
   * @dev Transfers the ownership of an NFT from one address to another address. This function can
   * be changed to payable.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external;

  /**
   * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else
   * they may be permanently lost.
   * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved
   * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero
   * address. Throws if `_tokenId` is not a valid NFT.  This function can be changed to payable.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function transferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external;

  /**
   * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is
   * the current NFT owner, or an authorized operator of the current owner.
   * @param _approved The new approved NFT controller.
   * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable.
   * @param _tokenId The NFT to approve.
   */
  function approve(
    address _approved,
    uint256 _tokenId
  )
    external;

  /**
   * @notice The contract MUST allow multiple operators per owner.
   * @dev Enables or disables approval for a third party ("operator") to manage all of
   * `msg.sender`'s assets. It also emits the ApprovalForAll event.
   * @param _operator Address to add to the set of authorized operators.
   * @param _approved True if the operators is approved, false to revoke approval.
   */
  function setApprovalForAll(
    address _operator,
    bool _approved
  )
    external;

  /**
   * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are
   * considered invalid, and this function throws for queries about the zero address.
   * @notice Count all NFTs assigned to an owner.
   * @param _owner Address for whom to query the balance.
   * @return Balance of _owner.
   */
  function balanceOf(
    address _owner
  )
    external
    view
    returns (uint256);

  /**
   * @notice Find the owner of an NFT.
   * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are
   * considered invalid, and queries about them do throw.
   * @param _tokenId The identifier for an NFT.
   * @return Address of _tokenId owner.
   */
  function ownerOf(
    uint256 _tokenId
  )
    external
    view
    returns (address);

  /**
   * @notice Throws if `_tokenId` is not a valid NFT.
   * @dev Get the approved address for a single NFT.
   * @param _tokenId The NFT to find the approved address for.
   * @return Address that _tokenId is approved for.
   */
  function getApproved(
    uint256 _tokenId
  )
    external
    view
    returns (address);

  /**
   * @notice Query if an address is an authorized operator for another address.
   * @dev Returns true if `_operator` is an approved operator for `_owner`, false otherwise.
   * @param _owner The address that owns the NFTs.
   * @param _operator The address that acts on behalf of the owner.
   * @return True if approved for all, false otherwise.
   */
  function isApprovedForAll(
    address _owner,
    address _operator
  )
    external
    view
    returns (bool);

}


/**
 * @dev A standard for detecting smart contract interfaces. 
 * See: https://eips.ethereum.org/EIPS/eip-165.
 */
interface ERC165
{

  /**
   * @dev Checks if the smart contract includes a specific interface.
   * This function uses less than 30,000 gas.
   * @param _interfaceID The interface identifier, as specified in ERC-165.
   * @return True if _interfaceID is supported, false otherwise.
   */
  function supportsInterface(
    bytes4 _interfaceID
  )
    external
    view
    returns (bool);
    
}


/**
 * @dev Implementation of standard for detect smart contract interfaces.
 */
contract SupportsInterface is
  ERC165
{

  /**
   * @dev Mapping of supported intefraces. You must not set element 0xffffffff to true.
   */
  mapping(bytes4 => bool) internal supportedInterfaces;

  /**
   * @dev Contract constructor.
   */
  constructor()
  {
    supportedInterfaces[0x01ffc9a7] = true; // ERC165
  }

  /**
   * @dev Function to check which interfaces are suported by this contract.
   * @param _interfaceID Id of the interface.
   * @return True if _interfaceID is supported, false otherwise.
   */
  function supportsInterface(
    bytes4 _interfaceID
  )
    external
    override
    view
    returns (bool)
  {
    return supportedInterfaces[_interfaceID];
  }

}

/**
 * @dev The contract has an owner address, and provides basic authorization control whitch
 * simplifies the implementation of user permissions. This contract is based on the source code at:
 * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol
 */
contract Ownable
{

  /**
   * @dev Error constants.
   */
  string public constant NOT_CURRENT_OWNER = "018001";
  string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002";

  /**
   * @dev Current owner address.
   */
  address public owner;

  /**
   * @dev An event which is triggered when the owner is changed.
   * @param previousOwner The address of the previous owner.
   * @param newOwner The address of the new owner.
   */
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );

  /**
   * @dev The constructor sets the original `owner` of the contract to the sender account.
   */
  constructor()
  {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner()
  {
    require(msg.sender == owner, NOT_CURRENT_OWNER);
    _;
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(
    address _newOwner
  )
    public
    onlyOwner
  {
    require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS);
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }

}


/**
 * @dev Implementation of ERC-721 non-fungible token standard.
 */
contract NFToken is
  ERC721,
  SupportsInterface
{
  using AddressUtils for address;

  /**
   * @dev List of revert message codes. Implementing dApp should handle showing the correct message.
   * Based on 0xcert framework error codes.
   */
  string constant ZERO_ADDRESS = "003001";
  string constant NOT_VALID_NFT = "003002";
  string constant NOT_OWNER_OR_OPERATOR = "003003";
  string constant NOT_OWNER_APPROVED_OR_OPERATOR = "003004";
  string constant NOT_ABLE_TO_RECEIVE_NFT = "003005";
  string constant NFT_ALREADY_EXISTS = "003006";
  string constant NOT_OWNER = "003007";
  string constant IS_OWNER = "003008";

  /**
   * @dev Magic value of a smart contract that can receive NFT.
   * Equal to: bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")).
   */
  bytes4 internal constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02;

  /**
   * @dev A mapping from NFT ID to the address that owns it.
   */
  mapping (uint256 => address) internal idToOwner;

  /**
   * @dev Mapping from NFT ID to approved address.
   */
  mapping (uint256 => address) internal idToApproval;

   /**
   * @dev Mapping from owner address to count of their tokens.
   */
  mapping (address => uint256) private ownerToNFTokenCount;

  /**
   * @dev Mapping from owner address to mapping of operator addresses.
   */
  mapping (address => mapping (address => bool)) internal ownerToOperators;

  /**
   * @dev Guarantees that the msg.sender is an owner or operator of the given NFT.
   * @param _tokenId ID of the NFT to validate.
   */
  modifier canOperate(
    uint256 _tokenId
  )
  {
    address tokenOwner = idToOwner[_tokenId];
    require(
      tokenOwner == msg.sender || ownerToOperators[tokenOwner][msg.sender],
      NOT_OWNER_OR_OPERATOR
    );
    _;
  }

  /**
   * @dev Guarantees that the msg.sender is allowed to transfer NFT.
   * @param _tokenId ID of the NFT to transfer.
   */
  modifier canTransfer(
    uint256 _tokenId
  )
  {
    address tokenOwner = idToOwner[_tokenId];
    require(
      tokenOwner == msg.sender
      || idToApproval[_tokenId] == msg.sender
      || ownerToOperators[tokenOwner][msg.sender],
      NOT_OWNER_APPROVED_OR_OPERATOR
    );
    _;
  }

  /**
   * @dev Guarantees that _tokenId is a valid Token.
   * @param _tokenId ID of the NFT to validate.
   */
  modifier validNFToken(
    uint256 _tokenId
  )
  {
    require(idToOwner[_tokenId] != address(0), NOT_VALID_NFT);
    _;
  }

  /**
   * @dev Contract constructor.
   */
  constructor()
  {
    supportedInterfaces[0x80ac58cd] = true; // ERC721
  }

  /**
   * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the
   * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is
   * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this
   * function checks if `_to` is a smart contract (code size > 0). If so, it calls
   * `onERC721Received` on `_to` and throws if the return value is not
   * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`.
   * @dev Transfers the ownership of an NFT from one address to another address. This function can
   * be changed to payable.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   * @param _data Additional data with no specified format, sent in call to `_to`.
   */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes calldata _data
  )
    external
    override
  {
    _safeTransferFrom(_from, _to, _tokenId, _data);
  }

  /**
   * @notice This works identically to the other function with an extra data parameter, except this
   * function just sets data to "".
   * @dev Transfers the ownership of an NFT from one address to another address. This function can
   * be changed to payable.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external
    override
  {
    _safeTransferFrom(_from, _to, _tokenId, "");
  }

  /**
   * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else
   * they may be permanently lost.
   * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved
   * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero
   * address. Throws if `_tokenId` is not a valid NFT. This function can be changed to payable.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   */
  function transferFrom(
    address _from,
    address _to,
    uint256 _tokenId
  )
    external
    override
    canTransfer(_tokenId)
    validNFToken(_tokenId)
  {
    address tokenOwner = idToOwner[_tokenId];
    require(tokenOwner == _from, NOT_OWNER);
    require(_to != address(0), ZERO_ADDRESS);

    _transfer(_to, _tokenId);
  }

  /**
   * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is
   * the current NFT owner, or an authorized operator of the current owner.
   * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable.
   * @param _approved Address to be approved for the given NFT ID.
   * @param _tokenId ID of the token to be approved.
   */
  function approve(
    address _approved,
    uint256 _tokenId
  )
    external
    override
    canOperate(_tokenId)
    validNFToken(_tokenId)
  {
    address tokenOwner = idToOwner[_tokenId];
    require(_approved != tokenOwner, IS_OWNER);

    idToApproval[_tokenId] = _approved;
    emit Approval(tokenOwner, _approved, _tokenId);
  }

  /**
   * @notice This works even if sender does not own any tokens at the time.
   * @dev Enables or disables approval for a third party ("operator") to manage all of
   * `msg.sender`'s assets. It also emits the ApprovalForAll event.
   * @param _operator Address to add to the set of authorized operators.
   * @param _approved True if the operators is approved, false to revoke approval.
   */
  function setApprovalForAll(
    address _operator,
    bool _approved
  )
    external
    override
  {
    ownerToOperators[msg.sender][_operator] = _approved;
    emit ApprovalForAll(msg.sender, _operator, _approved);
  }

  /**
   * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are
   * considered invalid, and this function throws for queries about the zero address.
   * @param _owner Address for whom to query the balance.
   * @return Balance of _owner.
   */
  function balanceOf(
    address _owner
  )
    external
    override
    view
    returns (uint256)
  {
    require(_owner != address(0), ZERO_ADDRESS);
    return _getOwnerNFTCount(_owner);
  }

  /**
   * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are
   * considered invalid, and queries about them do throw.
   * @param _tokenId The identifier for an NFT.
   * @return _owner Address of _tokenId owner.
   */
  function ownerOf(
    uint256 _tokenId
  )
    external
    override
    view
    returns (address _owner)
  {
    _owner = idToOwner[_tokenId];
    require(_owner != address(0), NOT_VALID_NFT);
  }
  
  function ownerOfInternal(
    uint256 _tokenId
  )
    internal
    view
    returns (address _owner)
  {
    _owner = idToOwner[_tokenId];
    require(_owner != address(0), NOT_VALID_NFT);
  }

  /**
   * @notice Throws if `_tokenId` is not a valid NFT.
   * @dev Get the approved address for a single NFT.
   * @param _tokenId ID of the NFT to query the approval of.
   * @return Address that _tokenId is approved for.
   */
  function getApproved(
    uint256 _tokenId
  )
    external
    override
    view
    validNFToken(_tokenId)
    returns (address)
  {
    return idToApproval[_tokenId];
  }

  /**
   * @dev Checks if `_operator` is an approved operator for `_owner`.
   * @param _owner The address that owns the NFTs.
   * @param _operator The address that acts on behalf of the owner.
   * @return True if approved for all, false otherwise.
   */
  function isApprovedForAll(
    address _owner,
    address _operator
  )
    external
    override
    view
    returns (bool)
  {
    return ownerToOperators[_owner][_operator];
  }

  /**
   * @notice Does NO checks.
   * @dev Actually performs the transfer.
   * @param _to Address of a new owner.
   * @param _tokenId The NFT that is being transferred.
   */
  function _transfer(
    address _to,
    uint256 _tokenId
  )
    internal
  {
    address from = idToOwner[_tokenId];
    _clearApproval(_tokenId);

    _removeNFToken(from, _tokenId);
    _addNFToken(_to, _tokenId);

    emit Transfer(from, _to, _tokenId);
  }

  /**
   * @notice This is an internal function which should be called from user-implemented external
   * mint function. Its purpose is to show and properly initialize data structures when using this
   * implementation.
   * @dev Mints a new NFT.
   * @param _to The address that will own the minted NFT.
   * @param _tokenId of the NFT to be minted by the msg.sender.
   */
  function _mint(
    address _to,
    uint256 _tokenId
  )
    internal
    virtual
  {
    require(_to != address(0), ZERO_ADDRESS);
    require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS);

    _addNFToken(_to, _tokenId);

    emit Transfer(address(0), _to, _tokenId);
  }

  /**
   * @notice This is an internal function which should be called from user-implemented external burn
   * function. Its purpose is to show and properly initialize data structures when using this
   * implementation. Also, note that this burn implementation allows the minter to re-mint a burned
   * NFT.
   * @dev Burns a NFT.
   * @param _tokenId ID of the NFT to be burned.
   */
  function _burn(
    uint256 _tokenId
  )
    internal
    virtual
    validNFToken(_tokenId)
  {
    address tokenOwner = idToOwner[_tokenId];
    _clearApproval(_tokenId);
    _removeNFToken(tokenOwner, _tokenId);
    emit Transfer(tokenOwner, address(0), _tokenId);
  }

  /**
   * @notice Use and override this function with caution. Wrong usage can have serious consequences.
   * @dev Removes a NFT from owner.
   * @param _from Address from which we want to remove the NFT.
   * @param _tokenId Which NFT we want to remove.
   */
  function _removeNFToken(
    address _from,
    uint256 _tokenId
  )
    internal
    virtual
  {
    require(idToOwner[_tokenId] == _from, NOT_OWNER);
    ownerToNFTokenCount[_from] -= 1;
    delete idToOwner[_tokenId];
  }

  /**
   * @notice Use and override this function with caution. Wrong usage can have serious consequences.
   * @dev Assigns a new NFT to owner.
   * @param _to Address to which we want to add the NFT.
   * @param _tokenId Which NFT we want to add.
   */
  function _addNFToken(
    address _to,
    uint256 _tokenId
  )
    internal
    virtual
  {
    require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS);

    idToOwner[_tokenId] = _to;
    ownerToNFTokenCount[_to] += 1;
  }

  /**
   * @dev Helper function that gets NFT count of owner. This is needed for overriding in enumerable
   * extension to remove double storage (gas optimization) of owner NFT count.
   * @param _owner Address for whom to query the count.
   * @return Number of _owner NFTs.
   */
  function _getOwnerNFTCount(
    address _owner
  )
    internal
    virtual
    view
    returns (uint256)
  {
    return ownerToNFTokenCount[_owner];
  }

  /**
   * @dev Actually perform the safeTransferFrom.
   * @param _from The current owner of the NFT.
   * @param _to The new owner.
   * @param _tokenId The NFT to transfer.
   * @param _data Additional data with no specified format, sent in call to `_to`.
   */
  function _safeTransferFrom(
    address _from,
    address _to,
    uint256 _tokenId,
    bytes memory _data
  )
    private
    canTransfer(_tokenId)
    validNFToken(_tokenId)
  {
    address tokenOwner = idToOwner[_tokenId];
    require(tokenOwner == _from, NOT_OWNER);
    require(_to != address(0), ZERO_ADDRESS);

    _transfer(_to, _tokenId);

    if (_to.isContract())
    {
      bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data);
      require(retval == MAGIC_ON_ERC721_RECEIVED, NOT_ABLE_TO_RECEIVE_NFT);
    }
  }

  /**
   * @dev Clears the current approval of a given NFT ID.
   * @param _tokenId ID of the NFT to be transferred.
   */
  function _clearApproval(
    uint256 _tokenId
  )
    private
  {
    delete idToApproval[_tokenId];
  }

}



/**
 * @dev Optional metadata implementation for ERC-721 non-fungible token standard.
 */
contract NFTokenMetadata is
  NFToken,
  ERC721Metadata
{

  /**
   * @dev A descriptive name for a collection of NFTs.
   */
  string internal nftName;

  /**
   * @dev An abbreviated name for NFTokens.
   */
  string internal nftSymbol;


  /**
   * @notice When implementing this contract don't forget to set nftName and nftSymbol.
   * @dev Contract constructor.
   */
  constructor()
  {
    supportedInterfaces[0x5b5e139f] = true; // ERC721Metadata
  }

  /**
   * @dev Returns a descriptive name for a collection of NFTokens.
   * @return _name Representing name.
   */
  function name()
    external
    override
    view
    returns (string memory _name)
  {
    _name = nftName;
  }

  /**
   * @dev Returns an abbreviated name for NFTokens.
   * @return _symbol Representing symbol.
   */
  function symbol()
    external
    override
    view
    returns (string memory _symbol)
  {
    _symbol = nftSymbol;
  }

  /**
   * @dev A distinct URI (RFC 3986) for a given NFT.
   * @param _tokenId Id for which we want uri.
   * @return URI of _tokenId.
   */


}


contract TheWildBunch is NFTokenMetadata, Ownable 
{
    // Properties
    address payable feeAddress;
    uint constant public wildOnePrice = 0.1 ether;
    uint constant public maxWildOnes = 4000;    // Total WildOne Supply

    // Switches
    bool public isMintingActive = false;        // Is minting open? Yes or no.
    bool public isWhiteListActive = true;       // Is the public sale open or is it only whitelisted?

    // Mappings
    mapping(address => bool) private whiteList; // Map of addresses on the whitelist.
    mapping(address => uint256) public wildOnesClaimed; // Map of how many Wild Ones are minted per address.

    // Vars
    uint256 public current_minted = 0;
    uint public mintLimit = 5;
    
    // URI Data
    string private metaAddress = "https://api.thewildbunch.io/metadata/";
    string constant private jsonAppend = ".json";

    // Events
    event Minted(address sender, uint256 count);

    constructor()
    {
        nftName = "The Wild Bunch";
        nftSymbol = "TWB";
        feeAddress = payable(msg.sender);
    }

    function tokenURI(uint tokenID) external view returns (string memory)
    {   // @dev Token URIs are generated dynamically on view requests. 
        // This is to allow easy server changes and reduce gas fees for minting. -ssa2
        require(tokenID > 0, "Token does not exist.");
        require(tokenID <= current_minted, "Token hasn't been minted yet.");

        bytes32 thisToken;
        bytes memory concat;
        thisToken = uintToBytes(tokenID);
        concat = abi.encodePacked(metaAddress, thisToken, jsonAppend);
        return string(concat);
    }

    // Toggle whether any gals can be minted at all.
    function toggleMinting() public onlyOwner
    {
        isMintingActive = !isMintingActive;
    }

    // Toggle if we're in the Whitelist or Public Sale.
    function toggleWhiteList() public onlyOwner
    {
        isWhiteListActive = !isWhiteListActive;
    }

    // Add a list of wallet addresses to the Whitelist.
    function addToWhiteList(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add the null address");

            whiteList[addresses[i]] = true;
        }
    }

    // Tells the world if a given address is whitelisted or not.
    function onWhiteList(address addr) external view returns (bool) {
        return whiteList[addr];
    }

    // }:)
    function removeFromwhiteList(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cant add null address");

            whiteList[addresses[i]] = false;
        }
    }

    // Tells the world how many Wild Ones a given address has minted.
    function claimedBy(address owner) external view returns (uint256) {
        require(owner != address(0), 'The zero address cannot mint anything.');

        return wildOnesClaimed[owner];
    }

    // Address  ETH gets sent to when withdrawing.
    function updateRecipient(address payable _newAddress) public onlyOwner
    {
        feeAddress = _newAddress;
    }

    // Takes care of converting an integer into the raw bytes of it's abi-encodable string.
    function uintToBytes(uint v) private pure returns (bytes32 ret) {
        if (v == 0)
        {
            ret = '0';
        }
        else
        {
            while (v > 0) 
            {
                ret = bytes32(uint(ret) / (2 ** 8));
                ret |= bytes32(((v % 10) + 48) * 2 ** (8 * 31));
                v /= 10;
            }
        }
        return ret;
    }

    // Public Sale minting function
    function mint(uint8 _mintNum) public payable
    {
        require(isMintingActive, "Yall cant mint yet.");
        require(_mintNum > 0, "Youre gonna have to mint at least one...");
        require(_mintNum + wildOnesClaimed[msg.sender] <= mintLimit, "Cant mint more than 5 Wild Ones per Wallet.");
        require(msg.value >= wildOnePrice * _mintNum, "Yall are gonna need more ETH to afford that.");
        require(current_minted + _mintNum <= maxWildOnes, "Sorry partner, we dont got enough of those left in stock.");
        if(isWhiteListActive)
        {
            require(whiteList[msg.sender], "I reckon youre not on the whitelist...");
        }

        for(uint i = 0; i < _mintNum; i++)
        {
            current_minted += 1;
            super._mint(msg.sender, current_minted);
            wildOnesClaimed[msg.sender] += 1;
        }

        emit Minted(msg.sender, _mintNum);
    }

    // Emergency Devmint function if something gets messed up.
    function devMint(uint8 _mintNum) external onlyOwner 
    {
        require(_mintNum + current_minted <= maxWildOnes, "Cannot mint more the total supply.");
        for(uint256 i = 0; i < _mintNum; i++) 
        {
            current_minted += 1;
            wildOnesClaimed[msg.sender] += 1;
            super._mint(msg.sender, current_minted);
        }
    }

    // Withdraw the ETH stored in the contract.
    function withdrawETH() external onlyOwner 
    {
        feeAddress.transfer(address(this).balance);
    }

    // Update the metadata URI to a new server or IPFS if needed.
    function updateURI(string calldata _URI) external onlyOwner 
    {
        metaAddress = _URI;
    }

    // Update how many can be purchased at a time if need be.
    function updateLimit(uint newLimit) external onlyOwner
    {
        mintLimit = newLimit;
    }

    // Get how many Wild Ones are minted right now.
    function totalSupply() public view returns(uint) 
    {
        return current_minted;
    }

    // Get how many Wild Ones MAX can be minted.    
    function maxSupply() public pure returns(uint) 
    {
        return maxWildOnes;
    }
}

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":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"Minted","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":"CANNOT_TRANSFER_TO_ZERO_ADDRESS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","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":"address","name":"owner","type":"address"}],"name":"claimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"current_minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintNum","type":"uint8"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"isMintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhiteListActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxWildOnes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintNum","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"onWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"removeFromwhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWhiteList","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"updateLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newAddress","type":"address"}],"name":"updateRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_URI","type":"string"}],"name":"updateURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wildOnePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wildOnesClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600860146101000a81548160ff0219169083151502179055506001600860156101000a81548160ff0219169083151502179055506000600b556005600c5560405180606001604052806025815260200162004edb60259139600d9080519060200190620000759291906200029b565b503480156200008357600080fd5b5060016000806301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060016000806380ac58cd60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600080635b5e139f60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600e81526020017f5468652057696c642042756e636800000000000000000000000000000000000081525060059080519060200190620002059291906200029b565b506040518060400160405280600381526020017f545742000000000000000000000000000000000000000000000000000000000081525060069080519060200190620002539291906200029b565b5033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003b0565b828054620002a9906200037a565b90600052602060002090601f016020900481019282620002cd576000855562000319565b82601f10620002e857805160ff191683800117855562000319565b8280016001018555821562000319579182015b8281111562000318578251825591602001919060010190620002fb565b5b5090506200032891906200032c565b5090565b5b80821115620003475760008160009055506001016200032d565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200039357607f821691505b60208210811415620003aa57620003a96200034b565b5b50919050565b614b1b80620003c06000396000f3fe6080604052600436106102255760003560e01c80637d55094d11610123578063c30f4a5a116100ab578063e9e707501161006f578063e9e70750146107fa578063f2fde38b14610825578063f3fe3bc31461084e578063fae0959a14610879578063feec756c146108a257610225565b8063c30f4a5a14610715578063c87b56dd1461073e578063d5abeb011461077b578063e086e5ec146107a6578063e985e9c5146107bd57610225565b8063974fbca8116100f2578063974fbca814610632578063996517cf1461065b578063a22cb46514610686578063b22d0c83146106af578063b88d4fde146106ec57610225565b80637d55094d1461059a578063860d248a146105b15780638da5cb5b146105dc57806395d89b411461060757610225565b80633497d165116101b15780636352211e116101755780636352211e146104b05780636ac437b0146104ed5780636ecd23061461051857806370a0823114610534578063740d73f31461057157610225565b80633497d165146103f15780633df277b11461041a57806342842e0e14610445578063573f5dae1461046e57806363430b381461049957610225565b806318160ddd116101f857806318160ddd146102f85780631daf77f6146103235780631fb26d5b1461036057806323b872dd1461038b57806329998d4b146103b457610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613934565b6108cb565b60405161025e919061397c565b60405180910390f35b34801561027357600080fd5b5061027c610932565b6040516102899190613a30565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613a88565b6109c4565b6040516102c69190613af6565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613b3d565b610adf565b005b34801561030457600080fd5b5061030d610ec2565b60405161031a9190613b8c565b60405180910390f35b34801561032f57600080fd5b5061034a60048036038101906103459190613ba7565b610ecc565b6040516103579190613b8c565b60405180910390f35b34801561036c57600080fd5b50610375610ee4565b6040516103829190613b8c565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613bd4565b610eea565b005b3480156103c057600080fd5b506103db60048036038101906103d69190613ba7565b61133c565b6040516103e89190613b8c565b60405180910390f35b3480156103fd57600080fd5b5061041860048036038101906104139190613c60565b6113f4565b005b34801561042657600080fd5b5061042f6115b4565b60405161043c9190613b8c565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613bd4565b6115c0565b005b34801561047a57600080fd5b506104836115e0565b604051610490919061397c565b60405180910390f35b3480156104a557600080fd5b506104ae6115f3565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190613a88565b6116e8565b6040516104e49190613af6565b60405180910390f35b3480156104f957600080fd5b506105026117ce565b60405161050f919061397c565b60405180910390f35b610532600480360381019061052d9190613c60565b6117e1565b005b34801561054057600080fd5b5061055b60048036038101906105569190613ba7565b611b33565b6040516105689190613b8c565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613cf2565b611bed565b005b3480156105a657600080fd5b506105af611df2565b005b3480156105bd57600080fd5b506105c6611ee7565b6040516105d39190613a30565b60405180910390f35b3480156105e857600080fd5b506105f1611f20565b6040516105fe9190613af6565b60405180910390f35b34801561061357600080fd5b5061061c611f46565b6040516106299190613a30565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613cf2565b611fd8565b005b34801561066757600080fd5b506106706121dd565b60405161067d9190613b8c565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190613d6b565b6121e3565b005b3480156106bb57600080fd5b506106d660048036038101906106d19190613ba7565b6122e0565b6040516106e3919061397c565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190613e01565b612336565b005b34801561072157600080fd5b5061073c60048036038101906107379190613edf565b61238d565b005b34801561074a57600080fd5b5061076560048036038101906107609190613a88565b61246c565b6040516107729190613a30565b60405180910390f35b34801561078757600080fd5b5061079061256b565b60405161079d9190613b8c565b60405180910390f35b3480156107b257600080fd5b506107bb612575565b005b3480156107c957600080fd5b506107e460048036038101906107df9190613f2c565b6126a9565b6040516107f1919061397c565b60405180910390f35b34801561080657600080fd5b5061080f61273d565b60405161081c9190613b8c565b60405180910390f35b34801561083157600080fd5b5061084c60048036038101906108479190613ba7565b612743565b005b34801561085a57600080fd5b50610863612975565b6040516108709190613a30565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190613a88565b6129ae565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190613faa565b612a81565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60606005805461094190614006565b80601f016020809104026020016040519081016040528092919081815260200182805461096d90614006565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a999190613a30565b60405180910390fd5b506002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610bd85750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303033000000000000000000000000000000000000000000000000000081525090610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c469190613a30565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d239190613a30565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303038000000000000000000000000000000000000000000000000000081525090610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e039190613a30565b60405180910390fd5b50856002600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b6000600b54905090565b600a6020528060005260406000206000915090505481565b600b5481565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610fbb57503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b8061104c5750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f3030333030340000000000000000000000000000000000000000000000000000815250906110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba9190613a30565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906111a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111979190613a30565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303700000000000000000000000000000000000000000000000000008152509061127f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112769190613a30565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f9190613a30565b60405180910390fd5b506113338686612b8e565b50505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a4906140aa565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b39190613a30565b60405180910390fd5b50610fa0600b548260ff166114d191906140f9565b1115611512576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611509906141c1565b60405180910390fd5b60005b8160ff168110156115b0576001600b600082825461153391906140f9565b925050819055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158a91906140f9565b9250508190555061159d33600b54612c43565b80806115a8906141e1565b915050611515565b5050565b67016345785d8a000081565b6115db83838360405180602001604052806000815250612e31565b505050565b600860159054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b29190613a30565b60405180910390fd5b50600860159054906101000a900460ff1615600860156101000a81548160ff021916908315150217905550565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf9190613a30565b60405180910390fd5b50919050565b600860149054906101000a900460ff1681565b600860149054906101000a900460ff16611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790614276565b60405180910390fd5b60008160ff1611611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90614308565b60405180910390fd5b600c54600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548260ff166118c791906140f9565b1115611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061439a565b60405180910390fd5b8060ff1667016345785d8a000061191f91906143ba565b341015611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614486565b60405180910390fd5b610fa08160ff16600b5461197591906140f9565b11156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90614518565b60405180910390fd5b600860159054906101000a900460ff1615611a5857600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e906145aa565b60405180910390fd5b5b60005b8160ff16811015611af6576001600b6000828254611a7991906140f9565b92505081905550611a8c33600b54612c43565b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611adc91906140f9565b925050819055508080611aee906141e1565b915050611a5b565b507f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe3382604051611b28929190614605565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd39190613a30565b60405180910390fd5b50611be6826133f0565b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac9190613a30565b60405180910390fd5b5060005b82829050811015611ded57600073ffffffffffffffffffffffffffffffffffffffff16838383818110611cef57611cee61462e565b5b9050602002016020810190611d049190613ba7565b73ffffffffffffffffffffffffffffffffffffffff161415611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906146a9565b60405180910390fd5b600160096000858585818110611d7457611d7361462e565b5b9050602002016020810190611d899190613ba7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611de5906141e1565b915050611cb9565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb19190613a30565b60405180910390fd5b50600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b6040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060068054611f5590614006565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8190614006565b8015611fce5780601f10611fa357610100808354040283529160200191611fce565b820191906000526020600020905b815481529060010190602001808311611fb157829003601f168201915b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120979190613a30565b60405180910390fd5b5060005b828290508110156121d857600073ffffffffffffffffffffffffffffffffffffffff168383838181106120da576120d961462e565b5b90506020020160208101906120ef9190613ba7565b73ffffffffffffffffffffffffffffffffffffffff161415612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90614715565b60405180910390fd5b60006009600085858581811061215f5761215e61462e565b5b90506020020160208101906121749190613ba7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806121d0906141e1565b9150506120a4565b505050565b600c5481565b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122d4919061397c565b60405180910390a35050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61238685858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612e31565b5050505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c9190613a30565b60405180910390fd5b508181600d919061246792919061382f565b505050565b6060600082116124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890614781565b60405180910390fd5b600b548211156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed906147ed565b60405180910390fd5b6000606061250384613439565b9150600d826040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060405160200161255093929190614908565b60405160208183030381529060405290508092505050919050565b6000610fa0905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061263d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126349190613a30565b60405180910390fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156126a6573d6000803e3d6000fd5b50565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610fa081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061280b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128029190613a30565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3031383030320000000000000000000000000000000000000000000000000000815250906128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab9190613a30565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090612a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6d9190613a30565b60405180910390fd5b5080600c8190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b409190613a30565b60405180910390fd5b5080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612bcf826134f0565b612bd98183613529565b612be38383613694565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce29190613a30565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303036000000000000000000000000000000000000000000000000000081525090612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd9190613a30565b60405180910390fd5b50612dd18282613694565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8160006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480612f0257503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80612f935750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f30303330303400000000000000000000000000000000000000000000000000008152509061300a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130019190613a30565b60405180910390fd5b5083600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906130e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130de9190613a30565b60405180910390fd5b5060006001600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030370000000000000000000000000000000000000000000000000000815250906131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd9190613a30565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303100000000000000000000000000000000000000000000000000008152509061326f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132669190613a30565b60405180910390fd5b5061327a8787612b8e565b6132998773ffffffffffffffffffffffffffffffffffffffff1661381c565b156133e65760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b81526004016132df9493929190614992565b6020604051808303816000875af11580156132fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332291906149f3565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146040518060400160405280600681526020017f3030333030350000000000000000000000000000000000000000000000000000815250906133e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133da9190613a30565b60405180910390fd5b50505b5050505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008082141561346b577f300000000000000000000000000000000000000000000000000000000000000090506134eb565b5b60008211156134ea576101008160001c6134869190614a4f565b60001b90507f01000000000000000000000000000000000000000000000000000000000000006030600a846134bb9190614a80565b6134c591906140f9565b6134cf91906143ba565b60001b81179050600a826134e39190614a4f565b915061346c565b5b919050565b6002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b8173ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090613602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f99190613a30565b60405180910390fd5b506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136539190614ab1565b925050819055506001600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050565b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303600000000000000000000000000000000000000000000000000008152509061376e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137659190613a30565b60405180910390fd5b50816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461381191906140f9565b925050819055505050565b600080823b905060008111915050919050565b82805461383b90614006565b90600052602060002090601f01602090048101928261385d57600085556138a4565b82601f1061387657803560ff19168380011785556138a4565b828001600101855582156138a4579182015b828111156138a3578235825591602001919060010190613888565b5b5090506138b191906138b5565b5090565b5b808211156138ce5760008160009055506001016138b6565b5090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613911816138dc565b811461391c57600080fd5b50565b60008135905061392e81613908565b92915050565b60006020828403121561394a576139496138d2565b5b60006139588482850161391f565b91505092915050565b60008115159050919050565b61397681613961565b82525050565b6000602082019050613991600083018461396d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139d15780820151818401526020810190506139b6565b838111156139e0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a0282613997565b613a0c81856139a2565b9350613a1c8185602086016139b3565b613a25816139e6565b840191505092915050565b60006020820190508181036000830152613a4a81846139f7565b905092915050565b6000819050919050565b613a6581613a52565b8114613a7057600080fd5b50565b600081359050613a8281613a5c565b92915050565b600060208284031215613a9e57613a9d6138d2565b5b6000613aac84828501613a73565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ae082613ab5565b9050919050565b613af081613ad5565b82525050565b6000602082019050613b0b6000830184613ae7565b92915050565b613b1a81613ad5565b8114613b2557600080fd5b50565b600081359050613b3781613b11565b92915050565b60008060408385031215613b5457613b536138d2565b5b6000613b6285828601613b28565b9250506020613b7385828601613a73565b9150509250929050565b613b8681613a52565b82525050565b6000602082019050613ba16000830184613b7d565b92915050565b600060208284031215613bbd57613bbc6138d2565b5b6000613bcb84828501613b28565b91505092915050565b600080600060608486031215613bed57613bec6138d2565b5b6000613bfb86828701613b28565b9350506020613c0c86828701613b28565b9250506040613c1d86828701613a73565b9150509250925092565b600060ff82169050919050565b613c3d81613c27565b8114613c4857600080fd5b50565b600081359050613c5a81613c34565b92915050565b600060208284031215613c7657613c756138d2565b5b6000613c8484828501613c4b565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613cb257613cb1613c8d565b5b8235905067ffffffffffffffff811115613ccf57613cce613c92565b5b602083019150836020820283011115613ceb57613cea613c97565b5b9250929050565b60008060208385031215613d0957613d086138d2565b5b600083013567ffffffffffffffff811115613d2757613d266138d7565b5b613d3385828601613c9c565b92509250509250929050565b613d4881613961565b8114613d5357600080fd5b50565b600081359050613d6581613d3f565b92915050565b60008060408385031215613d8257613d816138d2565b5b6000613d9085828601613b28565b9250506020613da185828601613d56565b9150509250929050565b60008083601f840112613dc157613dc0613c8d565b5b8235905067ffffffffffffffff811115613dde57613ddd613c92565b5b602083019150836001820283011115613dfa57613df9613c97565b5b9250929050565b600080600080600060808688031215613e1d57613e1c6138d2565b5b6000613e2b88828901613b28565b9550506020613e3c88828901613b28565b9450506040613e4d88828901613a73565b935050606086013567ffffffffffffffff811115613e6e57613e6d6138d7565b5b613e7a88828901613dab565b92509250509295509295909350565b60008083601f840112613e9f57613e9e613c8d565b5b8235905067ffffffffffffffff811115613ebc57613ebb613c92565b5b602083019150836001820283011115613ed857613ed7613c97565b5b9250929050565b60008060208385031215613ef657613ef56138d2565b5b600083013567ffffffffffffffff811115613f1457613f136138d7565b5b613f2085828601613e89565b92509250509250929050565b60008060408385031215613f4357613f426138d2565b5b6000613f5185828601613b28565b9250506020613f6285828601613b28565b9150509250929050565b6000613f7782613ab5565b9050919050565b613f8781613f6c565b8114613f9257600080fd5b50565b600081359050613fa481613f7e565b92915050565b600060208284031215613fc057613fbf6138d2565b5b6000613fce84828501613f95565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061401e57607f821691505b6020821081141561403257614031613fd7565b5b50919050565b7f546865207a65726f20616464726573732063616e6e6f74206d696e7420616e7960008201527f7468696e672e0000000000000000000000000000000000000000000000000000602082015250565b60006140946026836139a2565b915061409f82614038565b604082019050919050565b600060208201905081810360008301526140c381614087565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061410482613a52565b915061410f83613a52565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614144576141436140ca565b5b828201905092915050565b7f43616e6e6f74206d696e74206d6f72652074686520746f74616c20737570706c60008201527f792e000000000000000000000000000000000000000000000000000000000000602082015250565b60006141ab6022836139a2565b91506141b68261414f565b604082019050919050565b600060208201905081810360008301526141da8161419e565b9050919050565b60006141ec82613a52565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561421f5761421e6140ca565b5b600182019050919050565b7f59616c6c2063616e74206d696e74207965742e00000000000000000000000000600082015250565b60006142606013836139a2565b915061426b8261422a565b602082019050919050565b6000602082019050818103600083015261428f81614253565b9050919050565b7f596f75726520676f6e6e61206861766520746f206d696e74206174206c65617360008201527f74206f6e652e2e2e000000000000000000000000000000000000000000000000602082015250565b60006142f26028836139a2565b91506142fd82614296565b604082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b7f43616e74206d696e74206d6f7265207468616e20352057696c64204f6e65732060008201527f7065722057616c6c65742e000000000000000000000000000000000000000000602082015250565b6000614384602b836139a2565b915061438f82614328565b604082019050919050565b600060208201905081810360008301526143b381614377565b9050919050565b60006143c582613a52565b91506143d083613a52565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614409576144086140ca565b5b828202905092915050565b7f59616c6c2061726520676f6e6e61206e656564206d6f72652045544820746f2060008201527f6166666f726420746861742e0000000000000000000000000000000000000000602082015250565b6000614470602c836139a2565b915061447b82614414565b604082019050919050565b6000602082019050818103600083015261449f81614463565b9050919050565b7f536f72727920706172746e65722c20776520646f6e7420676f7420656e6f756760008201527f68206f662074686f7365206c65667420696e2073746f636b2e00000000000000602082015250565b60006145026039836139a2565b915061450d826144a6565b604082019050919050565b60006020820190508181036000830152614531816144f5565b9050919050565b7f49207265636b6f6e20796f757265206e6f74206f6e207468652077686974656c60008201527f6973742e2e2e0000000000000000000000000000000000000000000000000000602082015250565b60006145946026836139a2565b915061459f82614538565b604082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b6000819050919050565b60006145ef6145ea6145e584613c27565b6145ca565b613a52565b9050919050565b6145ff816145d4565b82525050565b600060408201905061461a6000830185613ae7565b61462760208301846145f6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f742061646420746865206e756c6c20616464726573730000000000600082015250565b6000614693601b836139a2565b915061469e8261465d565b602082019050919050565b600060208201905081810360008301526146c281614686565b9050919050565b7f43616e7420616464206e756c6c20616464726573730000000000000000000000600082015250565b60006146ff6015836139a2565b915061470a826146c9565b602082019050919050565b6000602082019050818103600083015261472e816146f2565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b600061476b6015836139a2565b915061477682614735565b602082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b7f546f6b656e206861736e2774206265656e206d696e746564207965742e000000600082015250565b60006147d7601d836139a2565b91506147e2826147a1565b602082019050919050565b60006020820190508181036000830152614806816147ca565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461483a81614006565b614844818661480d565b9450600182166000811461485f5760018114614870576148a3565b60ff198316865281860193506148a3565b61487985614818565b60005b8381101561489b5781548189015260018201915060208101905061487c565b838801955050505b50505092915050565b6000819050919050565b6000819050919050565b6148d16148cc826148ac565b6148b6565b82525050565b60006148e282613997565b6148ec818561480d565b93506148fc8185602086016139b3565b80840191505092915050565b6000614914828661482d565b915061492082856148c0565b60208201915061493082846148d7565b9150819050949350505050565b600081519050919050565b600082825260208201905092915050565b60006149648261493d565b61496e8185614948565b935061497e8185602086016139b3565b614987816139e6565b840191505092915050565b60006080820190506149a76000830187613ae7565b6149b46020830186613ae7565b6149c16040830185613b7d565b81810360608301526149d38184614959565b905095945050505050565b6000815190506149ed81613908565b92915050565b600060208284031215614a0957614a086138d2565b5b6000614a17848285016149de565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a5a82613a52565b9150614a6583613a52565b925082614a7557614a74614a20565b5b828204905092915050565b6000614a8b82613a52565b9150614a9683613a52565b925082614aa657614aa5614a20565b5b828206905092915050565b6000614abc82613a52565b9150614ac783613a52565b925082821015614ada57614ad96140ca565b5b82820390509291505056fea26469706673582212201fac2cbb7f2e0561c58432938dc7a65580425384d871d748d83e2df9a663662464736f6c634300080a003368747470733a2f2f6170692e74686577696c6462756e63682e696f2f6d657461646174612f

Deployed Bytecode

0x6080604052600436106102255760003560e01c80637d55094d11610123578063c30f4a5a116100ab578063e9e707501161006f578063e9e70750146107fa578063f2fde38b14610825578063f3fe3bc31461084e578063fae0959a14610879578063feec756c146108a257610225565b8063c30f4a5a14610715578063c87b56dd1461073e578063d5abeb011461077b578063e086e5ec146107a6578063e985e9c5146107bd57610225565b8063974fbca8116100f2578063974fbca814610632578063996517cf1461065b578063a22cb46514610686578063b22d0c83146106af578063b88d4fde146106ec57610225565b80637d55094d1461059a578063860d248a146105b15780638da5cb5b146105dc57806395d89b411461060757610225565b80633497d165116101b15780636352211e116101755780636352211e146104b05780636ac437b0146104ed5780636ecd23061461051857806370a0823114610534578063740d73f31461057157610225565b80633497d165146103f15780633df277b11461041a57806342842e0e14610445578063573f5dae1461046e57806363430b381461049957610225565b806318160ddd116101f857806318160ddd146102f85780631daf77f6146103235780631fb26d5b1461036057806323b872dd1461038b57806329998d4b146103b457610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613934565b6108cb565b60405161025e919061397c565b60405180910390f35b34801561027357600080fd5b5061027c610932565b6040516102899190613a30565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613a88565b6109c4565b6040516102c69190613af6565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190613b3d565b610adf565b005b34801561030457600080fd5b5061030d610ec2565b60405161031a9190613b8c565b60405180910390f35b34801561032f57600080fd5b5061034a60048036038101906103459190613ba7565b610ecc565b6040516103579190613b8c565b60405180910390f35b34801561036c57600080fd5b50610375610ee4565b6040516103829190613b8c565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190613bd4565b610eea565b005b3480156103c057600080fd5b506103db60048036038101906103d69190613ba7565b61133c565b6040516103e89190613b8c565b60405180910390f35b3480156103fd57600080fd5b5061041860048036038101906104139190613c60565b6113f4565b005b34801561042657600080fd5b5061042f6115b4565b60405161043c9190613b8c565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613bd4565b6115c0565b005b34801561047a57600080fd5b506104836115e0565b604051610490919061397c565b60405180910390f35b3480156104a557600080fd5b506104ae6115f3565b005b3480156104bc57600080fd5b506104d760048036038101906104d29190613a88565b6116e8565b6040516104e49190613af6565b60405180910390f35b3480156104f957600080fd5b506105026117ce565b60405161050f919061397c565b60405180910390f35b610532600480360381019061052d9190613c60565b6117e1565b005b34801561054057600080fd5b5061055b60048036038101906105569190613ba7565b611b33565b6040516105689190613b8c565b60405180910390f35b34801561057d57600080fd5b5061059860048036038101906105939190613cf2565b611bed565b005b3480156105a657600080fd5b506105af611df2565b005b3480156105bd57600080fd5b506105c6611ee7565b6040516105d39190613a30565b60405180910390f35b3480156105e857600080fd5b506105f1611f20565b6040516105fe9190613af6565b60405180910390f35b34801561061357600080fd5b5061061c611f46565b6040516106299190613a30565b60405180910390f35b34801561063e57600080fd5b5061065960048036038101906106549190613cf2565b611fd8565b005b34801561066757600080fd5b506106706121dd565b60405161067d9190613b8c565b60405180910390f35b34801561069257600080fd5b506106ad60048036038101906106a89190613d6b565b6121e3565b005b3480156106bb57600080fd5b506106d660048036038101906106d19190613ba7565b6122e0565b6040516106e3919061397c565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190613e01565b612336565b005b34801561072157600080fd5b5061073c60048036038101906107379190613edf565b61238d565b005b34801561074a57600080fd5b5061076560048036038101906107609190613a88565b61246c565b6040516107729190613a30565b60405180910390f35b34801561078757600080fd5b5061079061256b565b60405161079d9190613b8c565b60405180910390f35b3480156107b257600080fd5b506107bb612575565b005b3480156107c957600080fd5b506107e460048036038101906107df9190613f2c565b6126a9565b6040516107f1919061397c565b60405180910390f35b34801561080657600080fd5b5061080f61273d565b60405161081c9190613b8c565b60405180910390f35b34801561083157600080fd5b5061084c60048036038101906108479190613ba7565b612743565b005b34801561085a57600080fd5b50610863612975565b6040516108709190613a30565b60405180910390f35b34801561088557600080fd5b506108a0600480360381019061089b9190613a88565b6129ae565b005b3480156108ae57600080fd5b506108c960048036038101906108c49190613faa565b612a81565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60606005805461094190614006565b80601f016020809104026020016040519081016040528092919081815260200182805461096d90614006565b80156109ba5780601f1061098f576101008083540402835291602001916109ba565b820191906000526020600020905b81548152906001019060200180831161099d57829003601f168201915b5050505050905090565b600081600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a999190613a30565b60405180910390fd5b506002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610bd85750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f303033303033000000000000000000000000000000000000000000000000000081525090610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c469190613a30565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303032000000000000000000000000000000000000000000000000000081525090610d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d239190613a30565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303038000000000000000000000000000000000000000000000000000081525090610e0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e039190613a30565b60405180910390fd5b50856002600087815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050505050565b6000600b54905090565b600a6020528060005260406000206000915090505481565b600b5481565b8060006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610fbb57503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b8061104c5750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f3030333030340000000000000000000000000000000000000000000000000000815250906110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba9190613a30565b60405180910390fd5b5082600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906111a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111979190613a30565b60405180910390fd5b5060006001600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303700000000000000000000000000000000000000000000000000008152509061127f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112769190613a30565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f9190613a30565b60405180910390fd5b506113338686612b8e565b50505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a4906140aa565b60405180910390fd5b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906114bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b39190613a30565b60405180910390fd5b50610fa0600b548260ff166114d191906140f9565b1115611512576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611509906141c1565b60405180910390fd5b60005b8160ff168110156115b0576001600b600082825461153391906140f9565b925050819055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461158a91906140f9565b9250508190555061159d33600b54612c43565b80806115a8906141e1565b915050611515565b5050565b67016345785d8a000081565b6115db83838360405180602001604052806000815250612e31565b505050565b600860159054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b29190613a30565b60405180910390fd5b50600860159054906101000a900460ff1615600860156101000a81548160ff021916908315150217905550565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906117c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bf9190613a30565b60405180910390fd5b50919050565b600860149054906101000a900460ff1681565b600860149054906101000a900460ff16611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790614276565b60405180910390fd5b60008160ff1611611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90614308565b60405180910390fd5b600c54600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548260ff166118c791906140f9565b1115611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061439a565b60405180910390fd5b8060ff1667016345785d8a000061191f91906143ba565b341015611961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195890614486565b60405180910390fd5b610fa08160ff16600b5461197591906140f9565b11156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90614518565b60405180910390fd5b600860159054906101000a900460ff1615611a5857600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e906145aa565b60405180910390fd5b5b60005b8160ff16811015611af6576001600b6000828254611a7991906140f9565b92505081905550611a8c33600b54612c43565b6001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611adc91906140f9565b925050819055508080611aee906141e1565b915050611a5b565b507f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe3382604051611b28929190614605565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd39190613a30565b60405180910390fd5b50611be6826133f0565b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090611cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cac9190613a30565b60405180910390fd5b5060005b82829050811015611ded57600073ffffffffffffffffffffffffffffffffffffffff16838383818110611cef57611cee61462e565b5b9050602002016020810190611d049190613ba7565b73ffffffffffffffffffffffffffffffffffffffff161415611d5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d52906146a9565b60405180910390fd5b600160096000858585818110611d7457611d7361462e565b5b9050602002016020810190611d899190613ba7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611de5906141e1565b915050611cb9565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090611eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb19190613a30565b60405180910390fd5b50600860149054906101000a900460ff1615600860146101000a81548160ff021916908315150217905550565b6040518060400160405280600681526020017f303138303032000000000000000000000000000000000000000000000000000081525081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060068054611f5590614006565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8190614006565b8015611fce5780601f10611fa357610100808354040283529160200191611fce565b820191906000526020600020905b815481529060010190602001808311611fb157829003601f168201915b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3031383030310000000000000000000000000000000000000000000000000000815250906120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120979190613a30565b60405180910390fd5b5060005b828290508110156121d857600073ffffffffffffffffffffffffffffffffffffffff168383838181106120da576120d961462e565b5b90506020020160208101906120ef9190613ba7565b73ffffffffffffffffffffffffffffffffffffffff161415612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90614715565b60405180910390fd5b60006009600085858581811061215f5761215e61462e565b5b90506020020160208101906121749190613ba7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806121d0906141e1565b9150506120a4565b505050565b600c5481565b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122d4919061397c565b60405180910390a35050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61238685858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612e31565b5050505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c9190613a30565b60405180910390fd5b508181600d919061246792919061382f565b505050565b6060600082116124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a890614781565b60405180910390fd5b600b548211156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed906147ed565b60405180910390fd5b6000606061250384613439565b9150600d826040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060405160200161255093929190614908565b60405160208183030381529060405290508092505050919050565b6000610fa0905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061263d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126349190613a30565b60405180910390fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156126a6573d6000803e3d6000fd5b50565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610fa081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30313830303100000000000000000000000000000000000000000000000000008152509061280b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128029190613a30565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3031383030320000000000000000000000000000000000000000000000000000815250906128b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ab9190613a30565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525081565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090612a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6d9190613a30565b60405180910390fd5b5080600c8190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303138303031000000000000000000000000000000000000000000000000000081525090612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b409190613a30565b60405180910390fd5b5080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050612bcf826134f0565b612bd98183613529565b612be38383613694565b818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f303033303031000000000000000000000000000000000000000000000000000081525090612ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce29190613a30565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303036000000000000000000000000000000000000000000000000000081525090612dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbd9190613a30565b60405180910390fd5b50612dd18282613694565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8160006001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480612f0257503373ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80612f935750600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6040518060400160405280600681526020017f30303330303400000000000000000000000000000000000000000000000000008152509061300a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130019190613a30565b60405180910390fd5b5083600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f3030333030320000000000000000000000000000000000000000000000000000815250906130e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130de9190613a30565b60405180910390fd5b5060006001600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508773ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f3030333030370000000000000000000000000000000000000000000000000000815250906131c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131bd9190613a30565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600681526020017f30303330303100000000000000000000000000000000000000000000000000008152509061326f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132669190613a30565b60405180910390fd5b5061327a8787612b8e565b6132998773ffffffffffffffffffffffffffffffffffffffff1661381c565b156133e65760008773ffffffffffffffffffffffffffffffffffffffff1663150b7a02338b8a8a6040518563ffffffff1660e01b81526004016132df9493929190614992565b6020604051808303816000875af11580156132fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332291906149f3565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146040518060400160405280600681526020017f3030333030350000000000000000000000000000000000000000000000000000815250906133e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133da9190613a30565b60405180910390fd5b50505b5050505050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008082141561346b577f300000000000000000000000000000000000000000000000000000000000000090506134eb565b5b60008211156134ea576101008160001c6134869190614a4f565b60001b90507f01000000000000000000000000000000000000000000000000000000000000006030600a846134bb9190614a80565b6134c591906140f9565b6134cf91906143ba565b60001b81179050600a826134e39190614a4f565b915061346c565b5b919050565b6002600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550565b8173ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f303033303037000000000000000000000000000000000000000000000000000081525090613602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f99190613a30565b60405180910390fd5b506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136539190614ab1565b925050819055506001600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050565b600073ffffffffffffffffffffffffffffffffffffffff166001600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600681526020017f30303330303600000000000000000000000000000000000000000000000000008152509061376e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137659190613a30565b60405180910390fd5b50816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461381191906140f9565b925050819055505050565b600080823b905060008111915050919050565b82805461383b90614006565b90600052602060002090601f01602090048101928261385d57600085556138a4565b82601f1061387657803560ff19168380011785556138a4565b828001600101855582156138a4579182015b828111156138a3578235825591602001919060010190613888565b5b5090506138b191906138b5565b5090565b5b808211156138ce5760008160009055506001016138b6565b5090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613911816138dc565b811461391c57600080fd5b50565b60008135905061392e81613908565b92915050565b60006020828403121561394a576139496138d2565b5b60006139588482850161391f565b91505092915050565b60008115159050919050565b61397681613961565b82525050565b6000602082019050613991600083018461396d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139d15780820151818401526020810190506139b6565b838111156139e0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a0282613997565b613a0c81856139a2565b9350613a1c8185602086016139b3565b613a25816139e6565b840191505092915050565b60006020820190508181036000830152613a4a81846139f7565b905092915050565b6000819050919050565b613a6581613a52565b8114613a7057600080fd5b50565b600081359050613a8281613a5c565b92915050565b600060208284031215613a9e57613a9d6138d2565b5b6000613aac84828501613a73565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ae082613ab5565b9050919050565b613af081613ad5565b82525050565b6000602082019050613b0b6000830184613ae7565b92915050565b613b1a81613ad5565b8114613b2557600080fd5b50565b600081359050613b3781613b11565b92915050565b60008060408385031215613b5457613b536138d2565b5b6000613b6285828601613b28565b9250506020613b7385828601613a73565b9150509250929050565b613b8681613a52565b82525050565b6000602082019050613ba16000830184613b7d565b92915050565b600060208284031215613bbd57613bbc6138d2565b5b6000613bcb84828501613b28565b91505092915050565b600080600060608486031215613bed57613bec6138d2565b5b6000613bfb86828701613b28565b9350506020613c0c86828701613b28565b9250506040613c1d86828701613a73565b9150509250925092565b600060ff82169050919050565b613c3d81613c27565b8114613c4857600080fd5b50565b600081359050613c5a81613c34565b92915050565b600060208284031215613c7657613c756138d2565b5b6000613c8484828501613c4b565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613cb257613cb1613c8d565b5b8235905067ffffffffffffffff811115613ccf57613cce613c92565b5b602083019150836020820283011115613ceb57613cea613c97565b5b9250929050565b60008060208385031215613d0957613d086138d2565b5b600083013567ffffffffffffffff811115613d2757613d266138d7565b5b613d3385828601613c9c565b92509250509250929050565b613d4881613961565b8114613d5357600080fd5b50565b600081359050613d6581613d3f565b92915050565b60008060408385031215613d8257613d816138d2565b5b6000613d9085828601613b28565b9250506020613da185828601613d56565b9150509250929050565b60008083601f840112613dc157613dc0613c8d565b5b8235905067ffffffffffffffff811115613dde57613ddd613c92565b5b602083019150836001820283011115613dfa57613df9613c97565b5b9250929050565b600080600080600060808688031215613e1d57613e1c6138d2565b5b6000613e2b88828901613b28565b9550506020613e3c88828901613b28565b9450506040613e4d88828901613a73565b935050606086013567ffffffffffffffff811115613e6e57613e6d6138d7565b5b613e7a88828901613dab565b92509250509295509295909350565b60008083601f840112613e9f57613e9e613c8d565b5b8235905067ffffffffffffffff811115613ebc57613ebb613c92565b5b602083019150836001820283011115613ed857613ed7613c97565b5b9250929050565b60008060208385031215613ef657613ef56138d2565b5b600083013567ffffffffffffffff811115613f1457613f136138d7565b5b613f2085828601613e89565b92509250509250929050565b60008060408385031215613f4357613f426138d2565b5b6000613f5185828601613b28565b9250506020613f6285828601613b28565b9150509250929050565b6000613f7782613ab5565b9050919050565b613f8781613f6c565b8114613f9257600080fd5b50565b600081359050613fa481613f7e565b92915050565b600060208284031215613fc057613fbf6138d2565b5b6000613fce84828501613f95565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061401e57607f821691505b6020821081141561403257614031613fd7565b5b50919050565b7f546865207a65726f20616464726573732063616e6e6f74206d696e7420616e7960008201527f7468696e672e0000000000000000000000000000000000000000000000000000602082015250565b60006140946026836139a2565b915061409f82614038565b604082019050919050565b600060208201905081810360008301526140c381614087565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061410482613a52565b915061410f83613a52565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614144576141436140ca565b5b828201905092915050565b7f43616e6e6f74206d696e74206d6f72652074686520746f74616c20737570706c60008201527f792e000000000000000000000000000000000000000000000000000000000000602082015250565b60006141ab6022836139a2565b91506141b68261414f565b604082019050919050565b600060208201905081810360008301526141da8161419e565b9050919050565b60006141ec82613a52565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561421f5761421e6140ca565b5b600182019050919050565b7f59616c6c2063616e74206d696e74207965742e00000000000000000000000000600082015250565b60006142606013836139a2565b915061426b8261422a565b602082019050919050565b6000602082019050818103600083015261428f81614253565b9050919050565b7f596f75726520676f6e6e61206861766520746f206d696e74206174206c65617360008201527f74206f6e652e2e2e000000000000000000000000000000000000000000000000602082015250565b60006142f26028836139a2565b91506142fd82614296565b604082019050919050565b60006020820190508181036000830152614321816142e5565b9050919050565b7f43616e74206d696e74206d6f7265207468616e20352057696c64204f6e65732060008201527f7065722057616c6c65742e000000000000000000000000000000000000000000602082015250565b6000614384602b836139a2565b915061438f82614328565b604082019050919050565b600060208201905081810360008301526143b381614377565b9050919050565b60006143c582613a52565b91506143d083613a52565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614409576144086140ca565b5b828202905092915050565b7f59616c6c2061726520676f6e6e61206e656564206d6f72652045544820746f2060008201527f6166666f726420746861742e0000000000000000000000000000000000000000602082015250565b6000614470602c836139a2565b915061447b82614414565b604082019050919050565b6000602082019050818103600083015261449f81614463565b9050919050565b7f536f72727920706172746e65722c20776520646f6e7420676f7420656e6f756760008201527f68206f662074686f7365206c65667420696e2073746f636b2e00000000000000602082015250565b60006145026039836139a2565b915061450d826144a6565b604082019050919050565b60006020820190508181036000830152614531816144f5565b9050919050565b7f49207265636b6f6e20796f757265206e6f74206f6e207468652077686974656c60008201527f6973742e2e2e0000000000000000000000000000000000000000000000000000602082015250565b60006145946026836139a2565b915061459f82614538565b604082019050919050565b600060208201905081810360008301526145c381614587565b9050919050565b6000819050919050565b60006145ef6145ea6145e584613c27565b6145ca565b613a52565b9050919050565b6145ff816145d4565b82525050565b600060408201905061461a6000830185613ae7565b61462760208301846145f6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f43616e6e6f742061646420746865206e756c6c20616464726573730000000000600082015250565b6000614693601b836139a2565b915061469e8261465d565b602082019050919050565b600060208201905081810360008301526146c281614686565b9050919050565b7f43616e7420616464206e756c6c20616464726573730000000000000000000000600082015250565b60006146ff6015836139a2565b915061470a826146c9565b602082019050919050565b6000602082019050818103600083015261472e816146f2565b9050919050565b7f546f6b656e20646f6573206e6f742065786973742e0000000000000000000000600082015250565b600061476b6015836139a2565b915061477682614735565b602082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b7f546f6b656e206861736e2774206265656e206d696e746564207965742e000000600082015250565b60006147d7601d836139a2565b91506147e2826147a1565b602082019050919050565b60006020820190508181036000830152614806816147ca565b9050919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461483a81614006565b614844818661480d565b9450600182166000811461485f5760018114614870576148a3565b60ff198316865281860193506148a3565b61487985614818565b60005b8381101561489b5781548189015260018201915060208101905061487c565b838801955050505b50505092915050565b6000819050919050565b6000819050919050565b6148d16148cc826148ac565b6148b6565b82525050565b60006148e282613997565b6148ec818561480d565b93506148fc8185602086016139b3565b80840191505092915050565b6000614914828661482d565b915061492082856148c0565b60208201915061493082846148d7565b9150819050949350505050565b600081519050919050565b600082825260208201905092915050565b60006149648261493d565b61496e8185614948565b935061497e8185602086016139b3565b614987816139e6565b840191505092915050565b60006080820190506149a76000830187613ae7565b6149b46020830186613ae7565b6149c16040830185613b7d565b81810360608301526149d38184614959565b905095945050505050565b6000815190506149ed81613908565b92915050565b600060208284031215614a0957614a086138d2565b5b6000614a17848285016149de565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a5a82613a52565b9150614a6583613a52565b925082614a7557614a74614a20565b5b828204905092915050565b6000614a8b82613a52565b9150614a9683613a52565b925082614aa657614aa5614a20565b5b828206905092915050565b6000614abc82613a52565b9150614ac783613a52565b925082821015614ada57614ad96140ca565b5b82820390509291505056fea26469706673582212201fac2cbb7f2e0561c58432938dc7a65580425384d871d748d83e2df9a663662464736f6c634300080a0033

Deployed Bytecode Sourcemap

26552:6024:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10259:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26026:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20242:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17816:352;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32326:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27096:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27221:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17042:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29464:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31382:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26663:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16287:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26887:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28459:106;;;;;;;;;;;;;:::i;:::-;;19580:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26807:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30386:924;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19106:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28630:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28294:100;;;;;;;;;;;;;:::i;:::-;;10868:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10988:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26262:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29107:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27261:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18580:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28982:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15667:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31992:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27654:578;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32483:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31808:109;;;;;;;;;;;;;:::i;:::-;;20694:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26715:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11813:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10812:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32166:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29721:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10259:172;10369:4;10392:19;:33;10412:12;10392:33;;;;;;;;;;;;;;;;;;;;;;;;;;;10385:40;;10259:172;;;:::o;26026:120::-;26094:19;26133:7;26125:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26026:120;:::o;20242:183::-;20371:7;20347:8;14630:1;14599:33;;:9;:19;14609:8;14599:19;;;;;;;;;;;;;;;;;;;;;:33;;;;14634:13;;;;;;;;;;;;;;;;;14591:57;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20397:12:::1;:22;20410:8;20397:22;;;;;;;;;;;;;;;;;;;;;20390:29;;20242:183:::0;;;;:::o;17816:352::-;17929:8;13783:18;13804:9;:19;13814:8;13804:19;;;;;;;;;;;;;;;;;;;;;13783:40;;13860:10;13846:24;;:10;:24;;;:68;;;;13874:16;:28;13891:10;13874:28;;;;;;;;;;;;;;;:40;13903:10;13874:40;;;;;;;;;;;;;;;;;;;;;;;;;13846:68;13923:21;;;;;;;;;;;;;;;;;13830:121;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17957:8:::1;14630:1;14599:33;;:9;:19;14609:8;14599:19;;;;;;;;;;;;;;;;;;;;;:33;;;;14634:13;;;;;;;;;;;;;;;;::::0;14591:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17977:18:::2;17998:9;:19;18008:8;17998:19;;;;;;;;;;;;;;;;;;;;;17977:40;;18045:10;18032:23;;:9;:23;;;;18057:8;;;;;;;;;;;;;;;;::::0;18024:42:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18100:9;18075:12;:22;18088:8;18075:22;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;18153:8;18142:9;18121:41;;18130:10;18121:41;;;;;;;;;;;;17970:198;13958:1:::1;13776:189:::0;17816:352;;;:::o;32326:95::-;32369:4;32399:14;;32392:21;;32326:95;:::o;27096:50::-;;;;;;;;;;;;;;;;;:::o;27221:33::-;;;;:::o;17042:353::-;17175:8;14163:18;14184:9;:19;14194:8;14184:19;;;;;;;;;;;;;;;;;;;;;14163:40;;14240:10;14226:24;;:10;:24;;;:71;;;;14287:10;14261:36;;:12;:22;14274:8;14261:22;;;;;;;;;;;;;;;;;;;;;:36;;;14226:71;:122;;;;14308:16;:28;14325:10;14308:28;;;;;;;;;;;;;;;:40;14337:10;14308:40;;;;;;;;;;;;;;;;;;;;;;;;;14226:122;14357:30;;;;;;;;;;;;;;;;;14210:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17203:8:::1;14630:1;14599:33;;:9;:19;14609:8;14599:19;;;;;;;;;;;;;;;;;;;;;:33;;;;14634:13;;;;;;;;;;;;;;;;::::0;14591:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17223:18:::2;17244:9;:19;17254:8;17244:19;;;;;;;;;;;;;;;;;;;;;17223:40;;17292:5;17278:19;;:10;:19;;;17299:9;;;;;;;;;;;;;;;;::::0;17270:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17339:1;17324:17;;:3;:17;;;;17343:12;;;;;;;;;;;;;;;;::::0;17316:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17365:24;17375:3;17380:8;17365:9;:24::i;:::-;17216:179;14401:1:::1;14156:252:::0;17042:353;;;;:::o;29464:197::-;29521:7;29566:1;29549:19;;:5;:19;;;;29541:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29631:15;:22;29647:5;29631:22;;;;;;;;;;;;;;;;29624:29;;29464:197;;;:::o;31382:369::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26750:4:::1;31470:14;;31459:8;:25;;;;;;:::i;:::-;:40;;31451:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31553:9;31549:195;31572:8;31568:12;;:1;:12;31549:195;;;31630:1;31612:14;;:19;;;;;;;:::i;:::-;;;;;;;;31677:1;31646:15;:27;31662:10;31646:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;31693:39;31705:10;31717:14;;31693:11;:39::i;:::-;31582:3;;;;;:::i;:::-;;;;31549:195;;;;31382:369:::0;:::o;26663:45::-;26699:9;26663:45;:::o;16287:179::-;16417:43;16435:5;16442:3;16447:8;16417:43;;;;;;;;;;;;:17;:43::i;:::-;16287:179;;;:::o;26887:36::-;;;;;;;;;;;;;:::o;28459:106::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28540:17:::1;;;;;;;;;;;28539:18;28519:17;;:38;;;;;;;;;;;;;;;;;;28459:106::o:0;19580:208::-;19677:14;19712:9;:19;19722:8;19712:19;;;;;;;;;;;;;;;;;;;;;19703:28;;19764:1;19746:20;;:6;:20;;;;19768:13;;;;;;;;;;;;;;;;;19738:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19580:208;;;:::o;26807:35::-;;;;;;;;;;;;;:::o;30386:924::-;30455:15;;;;;;;;;;;30447:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;30524:1;30513:8;:12;;;30505:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30631:9;;30600:15;:27;30616:10;30600:27;;;;;;;;;;;;;;;;30589:8;:38;;;;;;:::i;:::-;:51;;30581:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;30735:8;30720:23;;26699:9;30720:23;;;;:::i;:::-;30707:9;:36;;30699:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;26750:4;30828:8;30811:25;;:14;;:25;;;;:::i;:::-;:40;;30803:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30927:17;;;;;;;;;;;30924:130;;;30978:9;:21;30988:10;30978:21;;;;;;;;;;;;;;;;;;;;;;;;;30970:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;30924:130;31070:6;31066:191;31086:8;31082:12;;:1;:12;31066:191;;;31143:1;31125:14;;:19;;;;;;;:::i;:::-;;;;;;;;31159:39;31171:10;31183:14;;31159:11;:39::i;:::-;31244:1;31213:15;:27;31229:10;31213:27;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;31096:3;;;;;:::i;:::-;;;;31066:191;;;;31274:28;31281:10;31293:8;31274:28;;;;;;;:::i;:::-;;;;;;;;30386:924;:::o;19106:204::-;19203:7;19248:1;19230:20;;:6;:20;;;;19252:12;;;;;;;;;;;;;;;;;19222:43;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19279:25;19297:6;19279:17;:25::i;:::-;19272:32;;19106:204;;;:::o;28630:278::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28719:9:::1;28714:187;28738:9;;:16;;28734:1;:20;28714:187;;;28808:1;28784:26;;:9;;28794:1;28784:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;28776:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28885:4;28859:9;:23;28869:9;;28879:1;28869:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;28859:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;28756:3;;;;;:::i;:::-;;;;28714:187;;;;28630:278:::0;;:::o;28294:100::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28371:15:::1;;;;;;;;;;;28370:16;28352:15;;:34;;;;;;;;;;;;;;;;;;28294:100::o:0;10868:65::-;;;;;;;;;;;;;;;;;;;:::o;10988:20::-;;;;;;;;;;;;;:::o;26262:128::-;26332:21;26375:9;26365:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26262:128;:::o;29107:278::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29201:9:::1;29196:182;29220:9;;:16;;29216:1;:20;29196:182;;;29290:1;29266:26;;:9;;29276:1;29266:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:26;;;;29258:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29361:5;29335:9;:23;29345:9;;29355:1;29345:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29335:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;29238:3;;;;;:::i;:::-;;;;29196:182;;;;29107:278:::0;;:::o;27261:25::-;;;;:::o;18580:232::-;18737:9;18695:16;:28;18712:10;18695:28;;;;;;;;;;;;;;;:39;18724:9;18695:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;18785:9;18758:48;;18773:10;18758:48;;;18796:9;18758:48;;;;;;:::i;:::-;;;;;;;;18580:232;;:::o;28982:105::-;29040:4;29064:9;:15;29074:4;29064:15;;;;;;;;;;;;;;;;;;;;;;;;;29057:22;;28982:105;;;:::o;15667:209::-;15824:46;15842:5;15849:3;15854:8;15864:5;;15824:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:46::i;:::-;15667:209;;;;;:::o;31992:103::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32083:4:::1;;32069:11;:18;;;;;;;:::i;:::-;;31992:103:::0;;:::o;27654:578::-;27709:13;27912:1;27902:7;:11;27894:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;27969:14;;27958:7;:25;;27950:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28030:17;28058:19;28100:20;28112:7;28100:11;:20::i;:::-;28088:32;;28157:11;28170:9;28181:10;;;;;;;;;;;;;;;;;28140:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28131:61;;28217:6;28203:21;;;;27654:578;;;:::o;32483:90::-;32524:4;26750;32547:18;;32483:90;:::o;31808:109::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;31867:10:::1;;;;;;;;;;;:19;;:42;31887:21;31867:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;31808:109::o:0;20694:192::-;20822:4;20845:16;:24;20862:6;20845:24;;;;;;;;;;;;;;;:35;20870:9;20845:35;;;;;;;;;;;;;;;;;;;;;;;;;20838:42;;20694:192;;;;:::o;26715:39::-;26750:4;26715:39;:::o;11813:238::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11935:1:::1;11914:23;;:9;:23;;;;11939:31;;;;;;;;;;;;;;;;::::0;11906:65:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12011:9;11983:38;;12004:5;;;;;;;;;;;11983:38;;;;;;;;;;;;12036:9;12028:5;;:17;;;;;;;;;;;;;;;;;;11813:238:::0;:::o;10812:51::-;;;;;;;;;;;;;;;;;;;:::o;32166:99::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32249:8:::1;32237:9;:20;;;;32166:99:::0;:::o;29721:119::-;11606:5;;;;;;;;;;;11592:19;;:10;:19;;;11613:17;;;;;;;;;;;;;;;;;11584:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29821:11:::1;29808:10;;:24;;;;;;;;;;;;;;;;;;29721:119:::0;:::o;21077:275::-;21166:12;21181:9;:19;21191:8;21181:19;;;;;;;;;;;;;;;;;;;;;21166:34;;21207:24;21222:8;21207:14;:24::i;:::-;21240:30;21255:4;21261:8;21240:14;:30::i;:::-;21277:26;21289:3;21294:8;21277:11;:26::i;:::-;21337:8;21332:3;21317:29;;21326:4;21317:29;;;;;;;;;;;;21159:193;21077:275;;:::o;21743:297::-;21864:1;21849:17;;:3;:17;;;;21868:12;;;;;;;;;;;;;;;;;21841:40;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21927:1;21896:33;;:9;:19;21906:8;21896:19;;;;;;;;;;;;;;;;;;;;;:33;;;21931:18;;;;;;;;;;;;;;;;;21888:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21959:26;21971:3;21976:8;21959:11;:26::i;:::-;22025:8;22020:3;21999:35;;22016:1;21999:35;;;;;;;;;;;;21743:297;;:::o;24479:590::-;24627:8;14163:18;14184:9;:19;14194:8;14184:19;;;;;;;;;;;;;;;;;;;;;14163:40;;14240:10;14226:24;;:10;:24;;;:71;;;;14287:10;14261:36;;:12;:22;14274:8;14261:22;;;;;;;;;;;;;;;;;;;;;:36;;;14226:71;:122;;;;14308:16;:28;14325:10;14308:28;;;;;;;;;;;;;;;:40;14337:10;14308:40;;;;;;;;;;;;;;;;;;;;;;;;;14226:122;14357:30;;;;;;;;;;;;;;;;;14210:184;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24655:8:::1;14630:1;14599:33;;:9;:19;14609:8;14599:19;;;;;;;;;;;;;;;;;;;;;:33;;;;14634:13;;;;;;;;;;;;;;;;::::0;14591:57:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24675:18:::2;24696:9;:19;24706:8;24696:19;;;;;;;;;;;;;;;;;;;;;24675:40;;24744:5;24730:19;;:10;:19;;;24751:9;;;;;;;;;;;;;;;;::::0;24722:39:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24791:1;24776:17;;:3;:17;;;;24795:12;;;;;;;;;;;;;;;;::::0;24768:40:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24817:24;24827:3;24832:8;24817:9;:24::i;:::-;24854:16;:3;:14;;;:16::i;:::-;24850:214;;;24886:13;24922:3;24902:41;;;24944:10;24956:5;24963:8;24973:5;24902:77;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24886:93;;13001:10;25006:24;;24996:34;;;:6;:34;;;;25032:23;;;;;;;;;;;;;;;;::::0;24988:68:::2;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24877:187;24850:214;24668:401;14401:1:::1;14156:252:::0;24479:590;;;;;:::o;24038:163::-;24142:7;24168:19;:27;24188:6;24168:27;;;;;;;;;;;;;;;;24161:34;;24038:163;;;:::o;29941:400::-;29992:11;30025:1;30020;:6;30016:297;;;30052:9;;;30016:297;;;30112:190;30123:1;30119;:5;30112:190;;;30186:6;30178:3;30173:9;;:20;;;;:::i;:::-;30165:29;;30159:35;;30246:13;30240:2;30234;30230:1;:6;;;;:::i;:::-;30229:13;;;;:::i;:::-;30228:31;;;;:::i;:::-;30220:40;;30213:47;;;;30284:2;30279:7;;;;;:::i;:::-;;;30112:190;;;30016:297;29941:400;;;:::o;25202:110::-;25284:12;:22;25297:8;25284:22;;;;;;;;;;;;25277:29;;;;;;;;;;;25202:110;:::o;23000:234::-;23140:5;23117:28;;:9;:19;23127:8;23117:19;;;;;;;;;;;;;;;;;;;;;:28;;;23147:9;;;;;;;;;;;;;;;;;23109:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23194:1;23164:19;:26;23184:5;23164:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;23209:9;:19;23219:8;23209:19;;;;;;;;;;;;23202:26;;;;;;;;;;;23000:234;;:::o;23501:242::-;23644:1;23613:33;;:9;:19;23623:8;23613:19;;;;;;;;;;;;;;;;;;;;;:33;;;23648:18;;;;;;;;;;;;;;;;;23605:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;23698:3;23676:9;:19;23686:8;23676:19;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;23736:1;23708:19;:24;23728:3;23708:24;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;23501:242;;:::o;427:589::-;485:4;498:12;981:5;969:18;961:26;;1009:1;1002:4;:8;995:15;;;427:589;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:329::-;5349:6;5398:2;5386:9;5377:7;5373:23;5369:32;5366:119;;;5404:79;;:::i;:::-;5366:119;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5290:329;;;;:::o;5625:619::-;5702:6;5710;5718;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:53;5963:7;5954:6;5943:9;5939:22;5918:53;:::i;:::-;5908:63;;5864:117;6020:2;6046:53;6091:7;6082:6;6071:9;6067:22;6046:53;:::i;:::-;6036:63;;5991:118;6148:2;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6119:118;5625:619;;;;;:::o;6250:86::-;6285:7;6325:4;6318:5;6314:16;6303:27;;6250:86;;;:::o;6342:118::-;6413:22;6429:5;6413:22;:::i;:::-;6406:5;6403:33;6393:61;;6450:1;6447;6440:12;6393:61;6342:118;:::o;6466:135::-;6510:5;6548:6;6535:20;6526:29;;6564:31;6589:5;6564:31;:::i;:::-;6466:135;;;;:::o;6607:325::-;6664:6;6713:2;6701:9;6692:7;6688:23;6684:32;6681:119;;;6719:79;;:::i;:::-;6681:119;6839:1;6864:51;6907:7;6898:6;6887:9;6883:22;6864:51;:::i;:::-;6854:61;;6810:115;6607:325;;;;:::o;6938:117::-;7047:1;7044;7037:12;7061:117;7170:1;7167;7160:12;7184:117;7293:1;7290;7283:12;7324:568;7397:8;7407:6;7457:3;7450:4;7442:6;7438:17;7434:27;7424:122;;7465:79;;:::i;:::-;7424:122;7578:6;7565:20;7555:30;;7608:18;7600:6;7597:30;7594:117;;;7630:79;;:::i;:::-;7594:117;7744:4;7736:6;7732:17;7720:29;;7798:3;7790:4;7782:6;7778:17;7768:8;7764:32;7761:41;7758:128;;;7805:79;;:::i;:::-;7758:128;7324:568;;;;;:::o;7898:559::-;7984:6;7992;8041:2;8029:9;8020:7;8016:23;8012:32;8009:119;;;8047:79;;:::i;:::-;8009:119;8195:1;8184:9;8180:17;8167:31;8225:18;8217:6;8214:30;8211:117;;;8247:79;;:::i;:::-;8211:117;8360:80;8432:7;8423:6;8412:9;8408:22;8360:80;:::i;:::-;8342:98;;;;8138:312;7898:559;;;;;:::o;8463:116::-;8533:21;8548:5;8533:21;:::i;:::-;8526:5;8523:32;8513:60;;8569:1;8566;8559:12;8513:60;8463:116;:::o;8585:133::-;8628:5;8666:6;8653:20;8644:29;;8682:30;8706:5;8682:30;:::i;:::-;8585:133;;;;:::o;8724:468::-;8789:6;8797;8846:2;8834:9;8825:7;8821:23;8817:32;8814:119;;;8852:79;;:::i;:::-;8814:119;8972:1;8997:53;9042:7;9033:6;9022:9;9018:22;8997:53;:::i;:::-;8987:63;;8943:117;9099:2;9125:50;9167:7;9158:6;9147:9;9143:22;9125:50;:::i;:::-;9115:60;;9070:115;8724:468;;;;;:::o;9211:552::-;9268:8;9278:6;9328:3;9321:4;9313:6;9309:17;9305:27;9295:122;;9336:79;;:::i;:::-;9295:122;9449:6;9436:20;9426:30;;9479:18;9471:6;9468:30;9465:117;;;9501:79;;:::i;:::-;9465:117;9615:4;9607:6;9603:17;9591:29;;9669:3;9661:4;9653:6;9649:17;9639:8;9635:32;9632:41;9629:128;;;9676:79;;:::i;:::-;9629:128;9211:552;;;;;:::o;9769:963::-;9866:6;9874;9882;9890;9898;9947:3;9935:9;9926:7;9922:23;9918:33;9915:120;;;9954:79;;:::i;:::-;9915:120;10074:1;10099:53;10144:7;10135:6;10124:9;10120:22;10099:53;:::i;:::-;10089:63;;10045:117;10201:2;10227:53;10272:7;10263:6;10252:9;10248:22;10227:53;:::i;:::-;10217:63;;10172:118;10329:2;10355:53;10400:7;10391:6;10380:9;10376:22;10355:53;:::i;:::-;10345:63;;10300:118;10485:2;10474:9;10470:18;10457:32;10516:18;10508:6;10505:30;10502:117;;;10538:79;;:::i;:::-;10502:117;10651:64;10707:7;10698:6;10687:9;10683:22;10651:64;:::i;:::-;10633:82;;;;10428:297;9769:963;;;;;;;;:::o;10752:553::-;10810:8;10820:6;10870:3;10863:4;10855:6;10851:17;10847:27;10837:122;;10878:79;;:::i;:::-;10837:122;10991:6;10978:20;10968:30;;11021:18;11013:6;11010:30;11007:117;;;11043:79;;:::i;:::-;11007:117;11157:4;11149:6;11145:17;11133:29;;11211:3;11203:4;11195:6;11191:17;11181:8;11177:32;11174:41;11171:128;;;11218:79;;:::i;:::-;11171:128;10752:553;;;;;:::o;11311:529::-;11382:6;11390;11439:2;11427:9;11418:7;11414:23;11410:32;11407:119;;;11445:79;;:::i;:::-;11407:119;11593:1;11582:9;11578:17;11565:31;11623:18;11615:6;11612:30;11609:117;;;11645:79;;:::i;:::-;11609:117;11758:65;11815:7;11806:6;11795:9;11791:22;11758:65;:::i;:::-;11740:83;;;;11536:297;11311:529;;;;;:::o;11846:474::-;11914:6;11922;11971:2;11959:9;11950:7;11946:23;11942:32;11939:119;;;11977:79;;:::i;:::-;11939:119;12097:1;12122:53;12167:7;12158:6;12147:9;12143:22;12122:53;:::i;:::-;12112:63;;12068:117;12224:2;12250:53;12295:7;12286:6;12275:9;12271:22;12250:53;:::i;:::-;12240:63;;12195:118;11846:474;;;;;:::o;12326:104::-;12371:7;12400:24;12418:5;12400:24;:::i;:::-;12389:35;;12326:104;;;:::o;12436:138::-;12517:32;12543:5;12517:32;:::i;:::-;12510:5;12507:43;12497:71;;12564:1;12561;12554:12;12497:71;12436:138;:::o;12580:155::-;12634:5;12672:6;12659:20;12650:29;;12688:41;12723:5;12688:41;:::i;:::-;12580:155;;;;:::o;12741:345::-;12808:6;12857:2;12845:9;12836:7;12832:23;12828:32;12825:119;;;12863:79;;:::i;:::-;12825:119;12983:1;13008:61;13061:7;13052:6;13041:9;13037:22;13008:61;:::i;:::-;12998:71;;12954:125;12741:345;;;;:::o;13092:180::-;13140:77;13137:1;13130:88;13237:4;13234:1;13227:15;13261:4;13258:1;13251:15;13278:320;13322:6;13359:1;13353:4;13349:12;13339:22;;13406:1;13400:4;13396:12;13427:18;13417:81;;13483:4;13475:6;13471:17;13461:27;;13417:81;13545:2;13537:6;13534:14;13514:18;13511:38;13508:84;;;13564:18;;:::i;:::-;13508:84;13329:269;13278:320;;;:::o;13604:225::-;13744:34;13740:1;13732:6;13728:14;13721:58;13813:8;13808:2;13800:6;13796:15;13789:33;13604:225;:::o;13835:366::-;13977:3;13998:67;14062:2;14057:3;13998:67;:::i;:::-;13991:74;;14074:93;14163:3;14074:93;:::i;:::-;14192:2;14187:3;14183:12;14176:19;;13835:366;;;:::o;14207:419::-;14373:4;14411:2;14400:9;14396:18;14388:26;;14460:9;14454:4;14450:20;14446:1;14435:9;14431:17;14424:47;14488:131;14614:4;14488:131;:::i;:::-;14480:139;;14207:419;;;:::o;14632:180::-;14680:77;14677:1;14670:88;14777:4;14774:1;14767:15;14801:4;14798:1;14791:15;14818:305;14858:3;14877:20;14895:1;14877:20;:::i;:::-;14872:25;;14911:20;14929:1;14911:20;:::i;:::-;14906:25;;15065:1;14997:66;14993:74;14990:1;14987:81;14984:107;;;15071:18;;:::i;:::-;14984:107;15115:1;15112;15108:9;15101:16;;14818:305;;;;:::o;15129:221::-;15269:34;15265:1;15257:6;15253:14;15246:58;15338:4;15333:2;15325:6;15321:15;15314:29;15129:221;:::o;15356:366::-;15498:3;15519:67;15583:2;15578:3;15519:67;:::i;:::-;15512:74;;15595:93;15684:3;15595:93;:::i;:::-;15713:2;15708:3;15704:12;15697:19;;15356:366;;;:::o;15728:419::-;15894:4;15932:2;15921:9;15917:18;15909:26;;15981:9;15975:4;15971:20;15967:1;15956:9;15952:17;15945:47;16009:131;16135:4;16009:131;:::i;:::-;16001:139;;15728:419;;;:::o;16153:233::-;16192:3;16215:24;16233:5;16215:24;:::i;:::-;16206:33;;16261:66;16254:5;16251:77;16248:103;;;16331:18;;:::i;:::-;16248:103;16378:1;16371:5;16367:13;16360:20;;16153:233;;;:::o;16392:169::-;16532:21;16528:1;16520:6;16516:14;16509:45;16392:169;:::o;16567:366::-;16709:3;16730:67;16794:2;16789:3;16730:67;:::i;:::-;16723:74;;16806:93;16895:3;16806:93;:::i;:::-;16924:2;16919:3;16915:12;16908:19;;16567:366;;;:::o;16939:419::-;17105:4;17143:2;17132:9;17128:18;17120:26;;17192:9;17186:4;17182:20;17178:1;17167:9;17163:17;17156:47;17220:131;17346:4;17220:131;:::i;:::-;17212:139;;16939:419;;;:::o;17364:227::-;17504:34;17500:1;17492:6;17488:14;17481:58;17573:10;17568:2;17560:6;17556:15;17549:35;17364:227;:::o;17597:366::-;17739:3;17760:67;17824:2;17819:3;17760:67;:::i;:::-;17753:74;;17836:93;17925:3;17836:93;:::i;:::-;17954:2;17949:3;17945:12;17938:19;;17597:366;;;:::o;17969:419::-;18135:4;18173:2;18162:9;18158:18;18150:26;;18222:9;18216:4;18212:20;18208:1;18197:9;18193:17;18186:47;18250:131;18376:4;18250:131;:::i;:::-;18242:139;;17969:419;;;:::o;18394:230::-;18534:34;18530:1;18522:6;18518:14;18511:58;18603:13;18598:2;18590:6;18586:15;18579:38;18394:230;:::o;18630:366::-;18772:3;18793:67;18857:2;18852:3;18793:67;:::i;:::-;18786:74;;18869:93;18958:3;18869:93;:::i;:::-;18987:2;18982:3;18978:12;18971:19;;18630:366;;;:::o;19002:419::-;19168:4;19206:2;19195:9;19191:18;19183:26;;19255:9;19249:4;19245:20;19241:1;19230:9;19226:17;19219:47;19283:131;19409:4;19283:131;:::i;:::-;19275:139;;19002:419;;;:::o;19427:348::-;19467:7;19490:20;19508:1;19490:20;:::i;:::-;19485:25;;19524:20;19542:1;19524:20;:::i;:::-;19519:25;;19712:1;19644:66;19640:74;19637:1;19634:81;19629:1;19622:9;19615:17;19611:105;19608:131;;;19719:18;;:::i;:::-;19608:131;19767:1;19764;19760:9;19749:20;;19427:348;;;;:::o;19781:231::-;19921:34;19917:1;19909:6;19905:14;19898:58;19990:14;19985:2;19977:6;19973:15;19966:39;19781:231;:::o;20018:366::-;20160:3;20181:67;20245:2;20240:3;20181:67;:::i;:::-;20174:74;;20257:93;20346:3;20257:93;:::i;:::-;20375:2;20370:3;20366:12;20359:19;;20018:366;;;:::o;20390:419::-;20556:4;20594:2;20583:9;20579:18;20571:26;;20643:9;20637:4;20633:20;20629:1;20618:9;20614:17;20607:47;20671:131;20797:4;20671:131;:::i;:::-;20663:139;;20390:419;;;:::o;20815:244::-;20955:34;20951:1;20943:6;20939:14;20932:58;21024:27;21019:2;21011:6;21007:15;21000:52;20815:244;:::o;21065:366::-;21207:3;21228:67;21292:2;21287:3;21228:67;:::i;:::-;21221:74;;21304:93;21393:3;21304:93;:::i;:::-;21422:2;21417:3;21413:12;21406:19;;21065:366;;;:::o;21437:419::-;21603:4;21641:2;21630:9;21626:18;21618:26;;21690:9;21684:4;21680:20;21676:1;21665:9;21661:17;21654:47;21718:131;21844:4;21718:131;:::i;:::-;21710:139;;21437:419;;;:::o;21862:225::-;22002:34;21998:1;21990:6;21986:14;21979:58;22071:8;22066:2;22058:6;22054:15;22047:33;21862:225;:::o;22093:366::-;22235:3;22256:67;22320:2;22315:3;22256:67;:::i;:::-;22249:74;;22332:93;22421:3;22332:93;:::i;:::-;22450:2;22445:3;22441:12;22434:19;;22093:366;;;:::o;22465:419::-;22631:4;22669:2;22658:9;22654:18;22646:26;;22718:9;22712:4;22708:20;22704:1;22693:9;22689:17;22682:47;22746:131;22872:4;22746:131;:::i;:::-;22738:139;;22465:419;;;:::o;22890:60::-;22918:3;22939:5;22932:12;;22890:60;;;:::o;22956:138::-;23004:9;23037:51;23055:32;23064:22;23080:5;23064:22;:::i;:::-;23055:32;:::i;:::-;23037:51;:::i;:::-;23024:64;;22956:138;;;:::o;23100:127::-;23185:35;23214:5;23185:35;:::i;:::-;23180:3;23173:48;23100:127;;:::o;23233:328::-;23352:4;23390:2;23379:9;23375:18;23367:26;;23403:71;23471:1;23460:9;23456:17;23447:6;23403:71;:::i;:::-;23484:70;23550:2;23539:9;23535:18;23526:6;23484:70;:::i;:::-;23233:328;;;;;:::o;23567:180::-;23615:77;23612:1;23605:88;23712:4;23709:1;23702:15;23736:4;23733:1;23726:15;23753:177;23893:29;23889:1;23881:6;23877:14;23870:53;23753:177;:::o;23936:366::-;24078:3;24099:67;24163:2;24158:3;24099:67;:::i;:::-;24092:74;;24175:93;24264:3;24175:93;:::i;:::-;24293:2;24288:3;24284:12;24277:19;;23936:366;;;:::o;24308:419::-;24474:4;24512:2;24501:9;24497:18;24489:26;;24561:9;24555:4;24551:20;24547:1;24536:9;24532:17;24525:47;24589:131;24715:4;24589:131;:::i;:::-;24581:139;;24308:419;;;:::o;24733:171::-;24873:23;24869:1;24861:6;24857:14;24850:47;24733:171;:::o;24910:366::-;25052:3;25073:67;25137:2;25132:3;25073:67;:::i;:::-;25066:74;;25149:93;25238:3;25149:93;:::i;:::-;25267:2;25262:3;25258:12;25251:19;;24910:366;;;:::o;25282:419::-;25448:4;25486:2;25475:9;25471:18;25463:26;;25535:9;25529:4;25525:20;25521:1;25510:9;25506:17;25499:47;25563:131;25689:4;25563:131;:::i;:::-;25555:139;;25282:419;;;:::o;25707:171::-;25847:23;25843:1;25835:6;25831:14;25824:47;25707:171;:::o;25884:366::-;26026:3;26047:67;26111:2;26106:3;26047:67;:::i;:::-;26040:74;;26123:93;26212:3;26123:93;:::i;:::-;26241:2;26236:3;26232:12;26225:19;;25884:366;;;:::o;26256:419::-;26422:4;26460:2;26449:9;26445:18;26437:26;;26509:9;26503:4;26499:20;26495:1;26484:9;26480:17;26473:47;26537:131;26663:4;26537:131;:::i;:::-;26529:139;;26256:419;;;:::o;26681:179::-;26821:31;26817:1;26809:6;26805:14;26798:55;26681:179;:::o;26866:366::-;27008:3;27029:67;27093:2;27088:3;27029:67;:::i;:::-;27022:74;;27105:93;27194:3;27105:93;:::i;:::-;27223:2;27218:3;27214:12;27207:19;;26866:366;;;:::o;27238:419::-;27404:4;27442:2;27431:9;27427:18;27419:26;;27491:9;27485:4;27481:20;27477:1;27466:9;27462:17;27455:47;27519:131;27645:4;27519:131;:::i;:::-;27511:139;;27238:419;;;:::o;27663:148::-;27765:11;27802:3;27787:18;;27663:148;;;;:::o;27817:141::-;27866:4;27889:3;27881:11;;27912:3;27909:1;27902:14;27946:4;27943:1;27933:18;27925:26;;27817:141;;;:::o;27988:845::-;28091:3;28128:5;28122:12;28157:36;28183:9;28157:36;:::i;:::-;28209:89;28291:6;28286:3;28209:89;:::i;:::-;28202:96;;28329:1;28318:9;28314:17;28345:1;28340:137;;;;28491:1;28486:341;;;;28307:520;;28340:137;28424:4;28420:9;28409;28405:25;28400:3;28393:38;28460:6;28455:3;28451:16;28444:23;;28340:137;;28486:341;28553:38;28585:5;28553:38;:::i;:::-;28613:1;28627:154;28641:6;28638:1;28635:13;28627:154;;;28715:7;28709:14;28705:1;28700:3;28696:11;28689:35;28765:1;28756:7;28752:15;28741:26;;28663:4;28660:1;28656:12;28651:17;;28627:154;;;28810:6;28805:3;28801:16;28794:23;;28493:334;;28307:520;;28095:738;;27988:845;;;;:::o;28839:77::-;28876:7;28905:5;28894:16;;28839:77;;;:::o;28922:79::-;28961:7;28990:5;28979:16;;28922:79;;;:::o;29007:157::-;29112:45;29132:24;29150:5;29132:24;:::i;:::-;29112:45;:::i;:::-;29107:3;29100:58;29007:157;;:::o;29170:377::-;29276:3;29304:39;29337:5;29304:39;:::i;:::-;29359:89;29441:6;29436:3;29359:89;:::i;:::-;29352:96;;29457:52;29502:6;29497:3;29490:4;29483:5;29479:16;29457:52;:::i;:::-;29534:6;29529:3;29525:16;29518:23;;29280:267;29170:377;;;;:::o;29553:570::-;29758:3;29780:92;29868:3;29859:6;29780:92;:::i;:::-;29773:99;;29882:75;29953:3;29944:6;29882:75;:::i;:::-;29982:2;29977:3;29973:12;29966:19;;30002:95;30093:3;30084:6;30002:95;:::i;:::-;29995:102;;30114:3;30107:10;;29553:570;;;;;;:::o;30129:98::-;30180:6;30214:5;30208:12;30198:22;;30129:98;;;:::o;30233:168::-;30316:11;30350:6;30345:3;30338:19;30390:4;30385:3;30381:14;30366:29;;30233:168;;;;:::o;30407:360::-;30493:3;30521:38;30553:5;30521:38;:::i;:::-;30575:70;30638:6;30633:3;30575:70;:::i;:::-;30568:77;;30654:52;30699:6;30694:3;30687:4;30680:5;30676:16;30654:52;:::i;:::-;30731:29;30753:6;30731:29;:::i;:::-;30726:3;30722:39;30715:46;;30497:270;30407:360;;;;:::o;30773:640::-;30968:4;31006:3;30995:9;30991:19;30983:27;;31020:71;31088:1;31077:9;31073:17;31064:6;31020:71;:::i;:::-;31101:72;31169:2;31158:9;31154:18;31145:6;31101:72;:::i;:::-;31183;31251:2;31240:9;31236:18;31227:6;31183:72;:::i;:::-;31302:9;31296:4;31292:20;31287:2;31276:9;31272:18;31265:48;31330:76;31401:4;31392:6;31330:76;:::i;:::-;31322:84;;30773:640;;;;;;;:::o;31419:141::-;31475:5;31506:6;31500:13;31491:22;;31522:32;31548:5;31522:32;:::i;:::-;31419:141;;;;:::o;31566:349::-;31635:6;31684:2;31672:9;31663:7;31659:23;31655:32;31652:119;;;31690:79;;:::i;:::-;31652:119;31810:1;31835:63;31890:7;31881:6;31870:9;31866:22;31835:63;:::i;:::-;31825:73;;31781:127;31566:349;;;;:::o;31921:180::-;31969:77;31966:1;31959:88;32066:4;32063:1;32056:15;32090:4;32087:1;32080:15;32107:185;32147:1;32164:20;32182:1;32164:20;:::i;:::-;32159:25;;32198:20;32216:1;32198:20;:::i;:::-;32193:25;;32237:1;32227:35;;32242:18;;:::i;:::-;32227:35;32284:1;32281;32277:9;32272:14;;32107:185;;;;:::o;32298:176::-;32330:1;32347:20;32365:1;32347:20;:::i;:::-;32342:25;;32381:20;32399:1;32381:20;:::i;:::-;32376:25;;32420:1;32410:35;;32425:18;;:::i;:::-;32410:35;32466:1;32463;32459:9;32454:14;;32298:176;;;;:::o;32480:191::-;32520:4;32540:20;32558:1;32540:20;:::i;:::-;32535:25;;32574:20;32592:1;32574:20;:::i;:::-;32569:25;;32613:1;32610;32607:8;32604:34;;;32618:18;;:::i;:::-;32604:34;32663:1;32660;32656:9;32648:17;;32480:191;;;;:::o

Swarm Source

ipfs://1fac2cbb7f2e0561c58432938dc7a65580425384d871d748d83e2df9a6636624
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.