ETH Price: $3,151.17 (+1.92%)

Contract

0xb47DbCC411eBFAa41E0FB074a4A886d1D09b914E
 

Overview

ETH Balance

0.111 ETH

Eth Value

$349.78 (@ $3,151.17/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...186505782023-11-25 18:44:47357 days ago1700937887IN
Space Headz: SpaceHeadz Token
0 ETH0.0005890523.67682963
Set Approval For...170946012023-04-21 11:55:11575 days ago1682078111IN
Space Headz: SpaceHeadz Token
0 ETH0.0016054234.37217356
Set Approval For...161380132022-12-08 5:50:11709 days ago1670478611IN
Space Headz: SpaceHeadz Token
0 ETH0.0006083313
Set Approval For...160979462022-12-02 15:13:47715 days ago1669994027IN
Space Headz: SpaceHeadz Token
0 ETH0.0007976717.06960728
Set Approval For...159863272022-11-17 1:02:11730 days ago1668646931IN
Space Headz: SpaceHeadz Token
0 ETH0.000631913.52221846
Set Approval For...159188292022-11-07 14:45:35740 days ago1667832335IN
Space Headz: SpaceHeadz Token
0 ETH0.001516432.44956368
Set Approval For...158623572022-10-30 17:25:23748 days ago1667150723IN
Space Headz: SpaceHeadz Token
0 ETH0.000408968.74023261
Set Approval For...158567292022-10-29 22:35:11748 days ago1667082911IN
Space Headz: SpaceHeadz Token
0 ETH0.00022949.22538105
Set Approval For...158551092022-10-29 17:09:47749 days ago1667063387IN
Space Headz: SpaceHeadz Token
0 ETH0.0005958223.94894433
Set Approval For...158389882022-10-27 11:02:23751 days ago1666868543IN
Space Headz: SpaceHeadz Token
0 ETH0.0008511918.21470193
Set Approval For...158389672022-10-27 10:58:11751 days ago1666868291IN
Space Headz: SpaceHeadz Token
0 ETH0.0007127515.25232952
Safe Transfer Fr...158389572022-10-27 10:56:11751 days ago1666868171IN
Space Headz: SpaceHeadz Token
0 ETH0.001475813.12565835
Set Approval For...158341662022-10-26 18:53:35752 days ago1666810415IN
Space Headz: SpaceHeadz Token
0 ETH0.0013829829.5945652
Set Approval For...158108612022-10-23 12:38:11755 days ago1666528691IN
Space Headz: SpaceHeadz Token
0 ETH0.0007102115.19800463
Set Approval For...157972002022-10-21 14:53:23757 days ago1666364003IN
Space Headz: SpaceHeadz Token
0 ETH0.0014388730.79050598
Set Approval For...157950362022-10-21 7:38:11757 days ago1666337891IN
Space Headz: SpaceHeadz Token
0 ETH0.000960920.5625426
Set Approval For...157892092022-10-20 12:07:59758 days ago1666267679IN
Space Headz: SpaceHeadz Token
0 ETH0.0011188823.94309332
Set Approval For...157883482022-10-20 9:14:59758 days ago1666257299IN
Space Headz: SpaceHeadz Token
0 ETH0.0009606220.5565483
Set Approval For...157854502022-10-19 23:32:11758 days ago1666222331IN
Space Headz: SpaceHeadz Token
0 ETH0.0013191628.22879961
Set Approval For...157851032022-10-19 22:22:23758 days ago1666218143IN
Space Headz: SpaceHeadz Token
0 ETH0.0017327637.07964683
Set Approval For...157837762022-10-19 17:54:47759 days ago1666202087IN
Space Headz: SpaceHeadz Token
0 ETH0.0022016447.05280415
Set Approval For...157837742022-10-19 17:54:23759 days ago1666202063IN
Space Headz: SpaceHeadz Token
0 ETH0.0021843146.68247316
Set Approval For...157837722022-10-19 17:53:59759 days ago1666202039IN
Space Headz: SpaceHeadz Token
0 ETH0.0022608148.37942579
Set Approval For...155903582022-09-22 17:25:47786 days ago1663867547IN
Space Headz: SpaceHeadz Token
0 ETH0.000269310.82462344
Set Approval For...154911222022-09-07 15:36:06801 days ago1662564966IN
Space Headz: SpaceHeadz Token
0 ETH0.0007572130.53896902
View all transactions

Latest 3 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
149922432022-06-19 18:38:48881 days ago1655663928
Space Headz: SpaceHeadz Token
0.306 ETH
149570432022-06-13 16:52:48887 days ago1655139168
Space Headz: SpaceHeadz Token
0.435 ETH
149409522022-06-10 22:45:38889 days ago1654901138
Space Headz: SpaceHeadz Token
1.695 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpaceHeadz

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-09
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; 

library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }
   function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

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

abstract contract ReentrancyGuard { 
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
   _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
 
    function toString(uint256 value) internal pure returns (string memory) { 
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
 
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
 
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        _transferOwnership(_msgSender());
    }
 
    function owner() public view virtual returns (address) {
        return _owner;
    } 
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
library Address { 
    function isContract(address account) internal view returns (bool) { 
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    } 
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
 
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    } 
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
 
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    } 
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
 
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
 
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
 
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else { 
            if (returndata.length > 0) { 

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
interface IERC721Receiver { 
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
interface IERC165 { 
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
abstract contract ERC165 is IERC165 { 
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
} 
interface IERC721 is IERC165 { 
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); 
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); 
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved); 
    function balanceOf(address owner) external view returns (uint256 balance); 
    function ownerOf(uint256 tokenId) external view returns (address owner); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external; 
    function approve(address to, uint256 tokenId) external;
 
    function getApproved(uint256 tokenId) external view returns (address operator); 
    function setApprovalForAll(address operator, bool _approved) external; 
    function isApprovedForAll(address owner, address operator) external view returns (bool); 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
} 
interface IERC721Enumerable is IERC721 { 
    function totalSupply() external view returns (uint256); 
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); 
    function tokenByIndex(uint256 index) external view returns (uint256);
}  
interface IERC721Metadata is IERC721 { 
    function name() external view returns (string memory); 
    function symbol() external view returns (string memory); 
    function tokenURI(uint256 tokenId) external view returns (string memory);
} 
contract ERC721A is
  Context,
  ERC165,
  IERC721,
  IERC721Metadata,
  IERC721Enumerable
{
  using Address for address;
  using Strings for uint256;

  struct TokenOwnership {
    address addr;
    uint64 startTimestamp;
  }

  struct AddressData {
    uint128 balance;
    uint128 numberMinted;
  }

  uint256 private currentIndex = 1;

  uint256 internal immutable collectionSize;
  uint256 internal immutable maxBatchSize; 
  string private _name; 
  string private _symbol; 
  mapping(uint256 => TokenOwnership) private _ownerships; 
  mapping(address => AddressData) private _addressData; 
  mapping(uint256 => address) private _tokenApprovals; 
  mapping(address => mapping(address => bool)) private _operatorApprovals; 
  constructor(
    string memory name_,
    string memory symbol_,
    uint256 maxBatchSize_,
    uint256 collectionSize_
  ) {
    require(
      collectionSize_ > 0,
      "ERC721A: collection must have a nonzero supply"
    );
    require(maxBatchSize_ > 0, "ERC721A: max batch size must be nonzero");
    _name = name_;
    _symbol = symbol_;
    maxBatchSize = maxBatchSize_;
    collectionSize = collectionSize_;
  } 
  function totalSupply() public view override returns (uint256) {
    return currentIndex;
  } 
  function tokenByIndex(uint256 index) public view override returns (uint256) {
    require(index < totalSupply(), "ERC721A: global index out of bounds");
    return index;
  } 
  function tokenOfOwnerByIndex(address owner, uint256 index)
    public
    view
    override
    returns (uint256)
  {
    require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
    uint256 numMintedSoFar = totalSupply();
    uint256 tokenIdsIdx = 0;
    address currOwnershipAddr = address(0);
    for (uint256 i = 0; i < numMintedSoFar; i++) {
      TokenOwnership memory ownership = _ownerships[i];
      if (ownership.addr != address(0)) {
        currOwnershipAddr = ownership.addr;
      }
      if (currOwnershipAddr == owner) {
        if (tokenIdsIdx == index) {
          return i;
        }
        tokenIdsIdx++;
      }
    }
    revert("ERC721A: unable to get token of owner by index");
  } 
  function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(ERC165, IERC165)
    returns (bool)
  {
    return
      interfaceId == type(IERC721).interfaceId ||
      interfaceId == type(IERC721Metadata).interfaceId ||
      interfaceId == type(IERC721Enumerable).interfaceId ||
      super.supportsInterface(interfaceId);
  } 
  function balanceOf(address owner) public view override returns (uint256) {
    require(owner != address(0), "ERC721A: balance query for the zero address");
    return uint256(_addressData[owner].balance);
  }

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

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

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

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

    revert("ERC721A: unable to determine the owner of token");
  } 
  function ownerOf(uint256 tokenId) public view override returns (address) {
    return ownershipOf(tokenId).addr;
  } 
  function name() public view virtual override returns (string memory) {
    return _name;
  } 
  function symbol() public view virtual override returns (string memory) {
    return _symbol;
  } 
  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),_getUriExtension()))
        : "";
  } 
  function _baseURI() internal view virtual returns (string memory) {
    return "";
  }

  function _getUriExtension() internal view virtual returns (string memory) {
    return "";
  }
 
  function approve(address to, uint256 tokenId) public override {
    address owner = ERC721A.ownerOf(tokenId);
    require(to != owner, "ERC721A: approval to current owner");

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

    _approve(to, tokenId, owner);
  } 
  function getApproved(uint256 tokenId) public view override returns (address) {
    require(_exists(tokenId), "ERC721A: approved query for nonexistent token");

    return _tokenApprovals[tokenId];
  } 
  function setApprovalForAll(address operator, bool approved) public override {
    require(operator != _msgSender(), "ERC721A: approve to caller");

    _operatorApprovals[_msgSender()][operator] = approved;
    emit ApprovalForAll(_msgSender(), operator, approved);
  }
 
  function isApprovedForAll(address owner, address operator)
    public
    view
    virtual
    override
    returns (bool)
  {
    return _operatorApprovals[owner][operator];
  }
 
  function transferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    _transfer(from, to, tokenId);
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId
  ) public override {
    safeTransferFrom(from, to, tokenId, "");
  } 
  function safeTransferFrom(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) public override {
    _transfer(from, to, tokenId);
    require(
      _checkOnERC721Received(from, to, tokenId, _data),
      "ERC721A: transfer to non ERC721Receiver implementer"
    );
  } 
  function _exists(uint256 tokenId) internal view returns (bool) {
    return tokenId < currentIndex;
  }

  function _safeMint(address to, uint256 quantity) internal {
    _safeMint(to, quantity, "");
  } 
  function _safeMint(
    address to,
    uint256 quantity,
    bytes memory _data
  ) internal {
    uint256 startTokenId = currentIndex;
    require(to != address(0), "ERC721A: mint to the zero address"); 
    require(!_exists(startTokenId), "ERC721A: token already minted");
    require(quantity <= maxBatchSize, "ERC721A: quantity to mint too high");

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

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

    uint256 updatedIndex = startTokenId;

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

    currentIndex = updatedIndex;
    _afterTokenTransfers(address(0), to, startTokenId, quantity);
  } 
  function _transfer(
    address from,
    address to,
    uint256 tokenId
  ) private {
    TokenOwnership memory prevOwnership = ownershipOf(tokenId);

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

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

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

    _beforeTokenTransfers(from, to, tokenId, 1); 
    _approve(address(0), tokenId, prevOwnership.addr);

    _addressData[from].balance -= 1;
    _addressData[to].balance += 1;
    _ownerships[tokenId] = TokenOwnership(to, uint64(block.timestamp)); 
    uint256 nextTokenId = tokenId + 1;
    if (_ownerships[nextTokenId].addr == address(0)) {
      if (_exists(nextTokenId)) {
        _ownerships[nextTokenId] = TokenOwnership(
          prevOwnership.addr,
          prevOwnership.startTimestamp
        );
      }
    }

    emit Transfer(from, to, tokenId);
    _afterTokenTransfers(from, to, tokenId, 1);
  } 
  function _approve(
    address to,
    uint256 tokenId,
    address owner
  ) private {
    _tokenApprovals[tokenId] = to;
    emit Approval(owner, to, tokenId);
  }

  uint256 public nextOwnerToExplicitlySet = 0; 
  function _setOwnersExplicit(uint256 quantity) internal {
    uint256 oldNextOwnerToSet = nextOwnerToExplicitlySet;
    require(quantity > 0, "quantity must be nonzero");
    uint256 endIndex = oldNextOwnerToSet + quantity - 1;
    if (endIndex > collectionSize - 1) {
      endIndex = collectionSize - 1;
    } 
    require(_exists(endIndex), "not enough minted yet for this cleanup");
    for (uint256 i = oldNextOwnerToSet; i <= endIndex; i++) {
      if (_ownerships[i].addr == address(0)) {
        TokenOwnership memory ownership = ownershipOf(i);
        _ownerships[i] = TokenOwnership(
          ownership.addr,
          ownership.startTimestamp
        );
      }
    }
    nextOwnerToExplicitlySet = endIndex + 1;
  } 
  function _checkOnERC721Received(
    address from,
    address to,
    uint256 tokenId,
    bytes memory _data
  ) private returns (bool) {
    if (to.isContract()) {
      try
        IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data)
      returns (bytes4 retval) {
        return retval == IERC721Receiver(to).onERC721Received.selector;
      } catch (bytes memory reason) {
        if (reason.length == 0) {
          revert("ERC721A: transfer to non ERC721Receiver implementer");
        } else {
          assembly {
            revert(add(32, reason), mload(reason))
          }
        }
      }
    } else {
      return true;
    }
  } 
  function _beforeTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {} 
  function _afterTokenTransfers(
    address from,
    address to,
    uint256 startTokenId,
    uint256 quantity
  ) internal virtual {}
}
// --------------------------------------------------//

contract SpaceHeadz is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;

     bytes32 public merkleRoot = 0x6dda27bb24289cd482fe990e245166cbe0ee289047013366bf025558e08fc9ce;
  function setMerkleRoot(bytes32 m) public onlyOwner{
    merkleRoot = m;
  }


  uint256 public MAX_PER_Transtion = 2; // maximam amount that user can mint
  uint256 public MAX_PER_Address = 2; // maximam amount that user can mint

  uint256 public  PRICE = 0.05 ether;

  uint256 private constant TotalCollectionSize_ = 5555; // total number of nfts
  uint256 private constant MaxMintPerBatch_ = 50; //max mint per traction

  bool public _revelNFT = false;
  string private _baseTokenURI;
  string private _uriBeforeRevel;
  uint private stopat = 5555;
  uint private reserve = 55;

  uint public status = 0; //0-pause 1-whitelist 2-public

  mapping(address => bool) private whitelistedAddresses;

  constructor() ERC721A("Space Headz","SpaceHeadz", MaxMintPerBatch_, TotalCollectionSize_) {
    _uriBeforeRevel = "ipfs://QmXJXkFTm4u5PUeSubTREAqQW2B4DbvHa8RhDsF3qZExFg/";
  }

  modifier callerIsUser() {
    require(tx.origin == msg.sender, "The caller is another contract");
    _;
  }
 
  function mint(uint256 quantity) external payable callerIsUser {
    require(status == 2 , "Sale is not Active");
    require(totalSupply() + quantity <= collectionSize - reserve, "reached max supply");
    require( (numberMinted(msg.sender) + quantity <= MAX_PER_Address ) , "Quantity exceeds allowed Mints" );
    require(  quantity <= MAX_PER_Transtion,"can not mint this many");
    require(msg.value >= PRICE * quantity, "Need to send more ETH.");
    _safeMint(msg.sender, quantity);   
    if(totalSupply() >= stopat) {status = 0;}
  }

    function whitelistMint(uint256 quantity, bytes32[] calldata merkleproof) external payable callerIsUser {
    bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
    require(MerkleProof.verify( merkleproof, merkleRoot, leaf),"Not whitelisted");
    require(status == 1, "Whitelisting not started");
    require(totalSupply() + quantity <= TotalCollectionSize_ - reserve, "reached max supply");
    require( ( numberMinted(msg.sender) + quantity <= MAX_PER_Address ) , "Quantity exceeds allowed Mints" );
    require(  quantity <= MAX_PER_Transtion,"can not mint this many");
    require(msg.value >= PRICE * quantity, "Need to send more ETH.");
    _safeMint(msg.sender, quantity);
    if(totalSupply() >= stopat) {status = 0;} 
  }



   function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
    require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
    if(_revelNFT){
    string memory baseURI = _baseURI();
    return
      bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString(),".json"))
        : "";
    } else{
      return _uriBeforeRevel;
    }
  }

  function isWhitelisted(address _user) public view returns (bool) {
    return whitelistedAddresses[_user];
  }

   function conf(uint256 Status , uint256 MaxPerAddress , uint256 MaxPerWallet , uint256 Price, uint256 Stop_At )external onlyOwner{
      status = Status;
      stopat = Stop_At;
      PRICE = Price;
      MAX_PER_Address = MaxPerAddress;
      MAX_PER_Transtion = MaxPerWallet;
  }

  function setURIbeforeRevel(string memory URI) external onlyOwner {
    _uriBeforeRevel = URI;
  }

  function setBaseURI(string memory baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }
  function _baseURI() internal view virtual override returns (string memory) {
    return _baseTokenURI;
  }
  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }
  function getOwnershipData(uint256 tokenId)
    external
    view
    returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }
  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }
  function changeRevelStatus() external onlyOwner {
    _revelNFT = !_revelNFT;
  }
  function changeMintPrice(uint256 _newPrice) external onlyOwner
  {
      PRICE = _newPrice;
  }
  function changeMAX_PER_Transtion(uint256 MAXPERTranstion) external onlyOwner
  {
      MAX_PER_Transtion = MAXPERTranstion;
  }
  function changeMAX_PER_Address(uint256 MAXPERAddress) external onlyOwner
  {
      MAX_PER_Address = MAXPERAddress;
  }
  function setStatus(uint256 status_)external onlyOwner{
      status = status_;
  } 
  function giveaway(address address_, uint quantity_)public onlyOwner{
    require(totalSupply() + quantity_ <= collectionSize - reserve, "reached max supply");
    _safeMint(address_, quantity_);
  }
    function setStop(uint256 stopat_)external onlyOwner{
      stopat = stopat_;
  }
  function setReserve(uint256 reserve_)external onlyOwner{
      reserve = reserve_;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_PER_Address","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_Transtion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_revelNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"MAXPERAddress","type":"uint256"}],"name":"changeMAX_PER_Address","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"MAXPERTranstion","type":"uint256"}],"name":"changeMAX_PER_Transtion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeRevelStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Status","type":"uint256"},{"internalType":"uint256","name":"MaxPerAddress","type":"uint256"},{"internalType":"uint256","name":"MaxPerWallet","type":"uint256"},{"internalType":"uint256","name":"Price","type":"uint256"},{"internalType":"uint256","name":"Stop_At","type":"uint256"}],"name":"conf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"quantity_","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"m","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserve_","type":"uint256"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"status_","type":"uint256"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stopat_","type":"uint256"}],"name":"setStop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setURIbeforeRevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleproof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001805560006008557f6dda27bb24289cd482fe990e245166cbe0ee289047013366bf025558e08fc9ce60001b600a556002600b556002600c5566b1a2bc2ec50000600d556000600e60006101000a81548160ff0219169083151502179055506115b3601155603760125560006013553480156200008157600080fd5b506040518060400160405280600b81526020017f537061636520486561647a0000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f5370616365486561647a0000000000000000000000000000000000000000000081525060326115b362000113620001076200022560201b60201c565b6200022d60201b60201c565b6000811162000159576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001509062000411565b60405180910390fd5b600082116200019f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019690620003ef565b60405180910390fd5b8360029080519060200190620001b7929190620002f1565b508260039080519060200190620001d0929190620002f1565b508160a08181525050806080818152505050505050600160098190555060405180606001604052806036815260200162005e5960369139601090805190602001906200021e929190620002f1565b5062000547565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002ff9062000444565b90600052602060002090601f0160209004810192826200032357600085556200036f565b82601f106200033e57805160ff19168380011785556200036f565b828001600101855582156200036f579182015b828111156200036e57825182559160200191906001019062000351565b5b5090506200037e919062000382565b5090565b5b808211156200039d57600081600090555060010162000383565b5090565b6000620003b060278362000433565b9150620003bd82620004a9565b604082019050919050565b6000620003d7602e8362000433565b9150620003e482620004f8565b604082019050919050565b600060208201905081810360008301526200040a81620003a1565b9050919050565b600060208201905081810360008301526200042c81620003c8565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200045d57607f821691505b602082108114156200047457620004736200047a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f455243373231413a206d61782062617463682073697a65206d7573742062652060008201527f6e6f6e7a65726f00000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20636f6c6c656374696f6e206d757374206861766520612060008201527f6e6f6e7a65726f20737570706c79000000000000000000000000000000000000602082015250565b60805160a0516158d76200058260003960008181612d0b01528181612d3401526134ca015260008181610c6b015261192e01526158d76000f3fe6080604052600436106102675760003560e01c806369ba1a7511610144578063af7b26e9116100b6578063d04950a11161007a578063d04950a114610905578063d2cab05614610930578063d7224ba01461094c578063dc33e68114610977578063e985e9c5146109b4578063f2fde38b146109f157610267565b8063af7b26e914610836578063b88d4fde1461085f578063bd0a843914610888578063c1f127e21461089f578063c87b56dd146108c857610267565b80638da5cb5b116101085780638da5cb5b146107475780639231ab2a1461077257806395d89b41146107af578063a0712d68146107da578063a22cb465146107f6578063ac4460021461081f57610267565b806369ba1a751461067657806370a082311461069f578063715018a6146106dc5780637cb64759146106f35780638d859f3e1461071c57610267565b80632f2ffc57116101dd57806342842e0e116101a157806342842e0e146105565780634f6ccce71461057f57806355f804b3146105bc5780635c37809d146105e557806362c6f7b91461060e5780636352211e1461063957610267565b80632f2ffc571461045f5780632f745c591461048a5780633af32abf146104c75780633fd17366146105045780634256dbe31461052d57610267565b8063081812fc1161022f578063081812fc1461034f578063095ea7b31461038c57806318160ddd146103b5578063200d2ed2146103e057806323b872dd1461040b5780632eb4a7ab1461043457610267565b80630199e3471461026c57806301ffc9a714610295578063050225ea146102d257806305060ed9146102fb57806306fdde0314610324575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613eb7565b610a1a565b005b3480156102a157600080fd5b506102bc60048036038101906102b79190613e14565b610aa0565b6040516102c9919061464b565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190613da7565b610bea565b005b34801561030757600080fd5b50610322600480360381019061031d9190613f44565b610cf6565b005b34801561033057600080fd5b50610339610d9c565b6040516103469190614681565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613eb7565b610e2e565b60405161038391906145e4565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613da7565b610eb3565b005b3480156103c157600080fd5b506103ca610fcc565b6040516103d79190614a9e565b60405180910390f35b3480156103ec57600080fd5b506103f5610fd6565b6040516104029190614a9e565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190613c91565b610fdc565b005b34801561044057600080fd5b50610449610fec565b6040516104569190614666565b60405180910390f35b34801561046b57600080fd5b50610474610ff2565b6040516104819190614a9e565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190613da7565b610ff8565b6040516104be9190614a9e565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613c24565b6111f6565b6040516104fb919061464b565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190613eb7565b61124c565b005b34801561053957600080fd5b50610554600480360381019061054f9190613eb7565b6112d2565b005b34801561056257600080fd5b5061057d60048036038101906105789190613c91565b611358565b005b34801561058b57600080fd5b506105a660048036038101906105a19190613eb7565b611378565b6040516105b39190614a9e565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de9190613e6e565b6113cb565b005b3480156105f157600080fd5b5061060c60048036038101906106079190613e6e565b611461565b005b34801561061a57600080fd5b506106236114f7565b604051610630919061464b565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190613eb7565b61150a565b60405161066d91906145e4565b60405180910390f35b34801561068257600080fd5b5061069d60048036038101906106989190613eb7565b611520565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190613c24565b6115a6565b6040516106d39190614a9e565b60405180910390f35b3480156106e857600080fd5b506106f161168f565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613de7565b611717565b005b34801561072857600080fd5b5061073161179d565b60405161073e9190614a9e565b60405180910390f35b34801561075357600080fd5b5061075c6117a3565b60405161076991906145e4565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613eb7565b6117cc565b6040516107a69190614a83565b60405180910390f35b3480156107bb57600080fd5b506107c46117e4565b6040516107d19190614681565b60405180910390f35b6107f460048036038101906107ef9190613eb7565b611876565b005b34801561080257600080fd5b5061081d60048036038101906108189190613d67565b611abe565b005b34801561082b57600080fd5b50610834611c3f565b005b34801561084257600080fd5b5061085d60048036038101906108589190613eb7565b611dc0565b005b34801561086b57600080fd5b5061088660048036038101906108819190613ce4565b611e46565b005b34801561089457600080fd5b5061089d611ea2565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613eb7565b611f4a565b005b3480156108d457600080fd5b506108ef60048036038101906108ea9190613eb7565b611fd0565b6040516108fc9190614681565b60405180910390f35b34801561091157600080fd5b5061091a61211f565b6040516109279190614a9e565b60405180910390f35b61094a60048036038101906109459190613ee4565b612125565b005b34801561095857600080fd5b5061096161240a565b60405161096e9190614a9e565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190613c24565b612410565b6040516109ab9190614a9e565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d69190613c51565b612422565b6040516109e8919061464b565b60405180910390f35b3480156109fd57600080fd5b50610a186004803603810190610a139190613c24565b6124b6565b005b610a226125ae565b73ffffffffffffffffffffffffffffffffffffffff16610a406117a3565b73ffffffffffffffffffffffffffffffffffffffff1614610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90614883565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610be35750610be2826125b6565b5b9050919050565b610bf26125ae565b73ffffffffffffffffffffffffffffffffffffffff16610c106117a3565b73ffffffffffffffffffffffffffffffffffffffff1614610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90614883565b60405180910390fd5b6012547f0000000000000000000000000000000000000000000000000000000000000000610c949190614ce9565b81610c9d610fcc565b610ca79190614bd4565b1115610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90614843565b60405180910390fd5b610cf28282612620565b5050565b610cfe6125ae565b73ffffffffffffffffffffffffffffffffffffffff16610d1c6117a3565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990614883565b60405180910390fd5b846013819055508060118190555081600d8190555083600c8190555082600b819055505050505050565b606060028054610dab90614e37565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd790614e37565b8015610e245780601f10610df957610100808354040283529160200191610e24565b820191906000526020600020905b815481529060010190602001808311610e0757829003601f168201915b5050505050905090565b6000610e398261263e565b610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90614a43565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ebe8261150a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690614903565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f4e6125ae565b73ffffffffffffffffffffffffffffffffffffffff161480610f7d5750610f7c81610f776125ae565b612422565b5b610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb3906147e3565b60405180910390fd5b610fc783838361264c565b505050565b6000600154905090565b60135481565b610fe78383836126fe565b505050565b600a5481565b600c5481565b6000611003836115a6565b8210611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b906146a3565b60405180910390fd5b600061104e610fcc565b905060008060005b838110156111b4576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461114857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111a057868414156111915781955050505050506111f0565b838061119c90614e9a565b9450505b5080806111ac90614e9a565b915050611056565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e7906149e3565b60405180910390fd5b92915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112546125ae565b73ffffffffffffffffffffffffffffffffffffffff166112726117a3565b73ffffffffffffffffffffffffffffffffffffffff16146112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90614883565b60405180910390fd5b80600d8190555050565b6112da6125ae565b73ffffffffffffffffffffffffffffffffffffffff166112f86117a3565b73ffffffffffffffffffffffffffffffffffffffff161461134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590614883565b60405180910390fd5b8060128190555050565b61137383838360405180602001604052806000815250611e46565b505050565b6000611382610fcc565b82106113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90614723565b60405180910390fd5b819050919050565b6113d36125ae565b73ffffffffffffffffffffffffffffffffffffffff166113f16117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90614883565b60405180910390fd5b80600f908051906020019061145d929190613993565b5050565b6114696125ae565b73ffffffffffffffffffffffffffffffffffffffff166114876117a3565b73ffffffffffffffffffffffffffffffffffffffff16146114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d490614883565b60405180910390fd5b80601090805190602001906114f3929190613993565b5050565b600e60009054906101000a900460ff1681565b600061151582612cb7565b600001519050919050565b6115286125ae565b73ffffffffffffffffffffffffffffffffffffffff166115466117a3565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390614883565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90614823565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116976125ae565b73ffffffffffffffffffffffffffffffffffffffff166116b56117a3565b73ffffffffffffffffffffffffffffffffffffffff161461170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290614883565b60405180910390fd5b6117156000612eba565b565b61171f6125ae565b73ffffffffffffffffffffffffffffffffffffffff1661173d6117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90614883565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117d4613a19565b6117dd82612cb7565b9050919050565b6060600380546117f390614e37565b80601f016020809104026020016040519081016040528092919081815260200182805461181f90614e37565b801561186c5780601f106118415761010080835404028352916020019161186c565b820191906000526020600020905b81548152906001019060200180831161184f57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db906147a3565b60405180910390fd5b600260135414611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090614783565b60405180910390fd5b6012547f00000000000000000000000000000000000000000000000000000000000000006119579190614ce9565b81611960610fcc565b61196a9190614bd4565b11156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a290614843565b60405180910390fd5b600c54816119b833612410565b6119c29190614bd4565b1115611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614803565b60405180910390fd5b600b54811115611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f906149c3565b60405180910390fd5b80600d54611a569190614c5b565b341015611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90614963565b60405180910390fd5b611aa23382612620565b601154611aad610fcc565b10611abb5760006013819055505b50565b611ac66125ae565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b906148c3565b60405180910390fd5b8060076000611b416125ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bee6125ae565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c33919061464b565b60405180910390a35050565b611c476125ae565b73ffffffffffffffffffffffffffffffffffffffff16611c656117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290614883565b60405180910390fd5b60026009541415611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890614a03565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d2f906145cf565b60006040518083038185875af1925050503d8060008114611d6c576040519150601f19603f3d011682016040523d82523d6000602084013e611d71565b606091505b5050905080611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90614923565b60405180910390fd5b506001600981905550565b611dc86125ae565b73ffffffffffffffffffffffffffffffffffffffff16611de66117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3390614883565b60405180910390fd5b80600b8190555050565b611e518484846126fe565b611e5d84848484612f7e565b611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390614943565b60405180910390fd5b50505050565b611eaa6125ae565b73ffffffffffffffffffffffffffffffffffffffff16611ec86117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590614883565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b611f526125ae565b73ffffffffffffffffffffffffffffffffffffffff16611f706117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbd90614883565b60405180910390fd5b8060118190555050565b6060611fdb8261263e565b61201a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612011906148a3565b60405180910390fd5b600e60009054906101000a900460ff161561208c576000612039613115565b905060008151116120595760405180602001604052806000815250612084565b80612063846131a7565b6040516020016120749291906145a0565b6040516020818303038152906040525b91505061211a565b6010805461209990614e37565b80601f01602080910402602001604051908101604052809291908181526020018280546120c590614e37565b80156121125780601f106120e757610100808354040283529160200191612112565b820191906000526020600020905b8154815290600101906020018083116120f557829003601f168201915b505050505090505b919050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906147a3565b60405180910390fd5b6000336040516020016121a69190614585565b60405160208183030381529060405280519060200120905061220c838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483613308565b61224b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612242906147c3565b60405180910390fd5b600160135414612290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612287906146e3565b60405180910390fd5b6012546115b36122a09190614ce9565b846122a9610fcc565b6122b39190614bd4565b11156122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb90614843565b60405180910390fd5b600c548461230133612410565b61230b9190614bd4565b111561234c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234390614803565b60405180910390fd5b600b54841115612391576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612388906149c3565b60405180910390fd5b83600d5461239f9190614c5b565b3410156123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890614963565b60405180910390fd5b6123eb3385612620565b6011546123f6610fcc565b106124045760006013819055505b50505050565b60085481565b600061241b8261331f565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124be6125ae565b73ffffffffffffffffffffffffffffffffffffffff166124dc6117a3565b73ffffffffffffffffffffffffffffffffffffffff1614612532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252990614883565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612599906146c3565b60405180910390fd5b6125ab81612eba565b50565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61263a828260405180602001604052806000815250613408565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061270982612cb7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166127306125ae565b73ffffffffffffffffffffffffffffffffffffffff16148061278c57506127556125ae565b73ffffffffffffffffffffffffffffffffffffffff1661277484610e2e565b73ffffffffffffffffffffffffffffffffffffffff16145b806127a857506127a782600001516127a26125ae565b612422565b5b9050806127ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e1906148e3565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390614863565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c390614743565b60405180910390fd5b6128d985858560016138e8565b6128e9600084846000015161264c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129579190614cb5565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129fb9190614b8e565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612b019190614bd4565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c4757612b778161263e565b15612c46576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612caf86868660016138ee565b505050505050565b612cbf613a19565b612cc88261263e565b612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe90614703565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008310612d6b5760017f000000000000000000000000000000000000000000000000000000000000000084612d5e9190614ce9565b612d689190614bd4565b90505b60008390505b818110612e79576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6557809350505050612eb5565b508080612e7190614e0d565b915050612d71565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac90614a23565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f9f8473ffffffffffffffffffffffffffffffffffffffff166138f4565b15613108578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fc86125ae565b8786866040518563ffffffff1660e01b8152600401612fea94939291906145ff565b602060405180830381600087803b15801561300457600080fd5b505af192505050801561303557506040513d601f19601f820116820180604052508101906130329190613e41565b60015b6130b8573d8060008114613065576040519150601f19603f3d011682016040523d82523d6000602084013e61306a565b606091505b506000815114156130b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a790614943565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061310d565b600190505b949350505050565b6060600f805461312490614e37565b80601f016020809104026020016040519081016040528092919081815260200182805461315090614e37565b801561319d5780601f106131725761010080835404028352916020019161319d565b820191906000526020600020905b81548152906001019060200180831161318057829003601f168201915b5050505050905090565b606060008214156131ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613303565b600082905060005b6000821461322157808061320a90614e9a565b915050600a8261321a9190614c2a565b91506131f7565b60008167ffffffffffffffff81111561323d5761323c614ff4565b5b6040519080825280601f01601f19166020018201604052801561326f5781602001600182028036833780820191505090505b5090505b600085146132fc576001826132889190614ce9565b9150600a856132979190614f07565b60306132a39190614bd4565b60f81b8183815181106132b9576132b8614fc5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132f59190614c2a565b9450613273565b8093505050505b919050565b6000826133158584613907565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338790614763565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561347f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613476906149a3565b60405180910390fd5b6134888161263e565b156134c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134bf90614983565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000083111561352b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352290614a63565b60405180910390fd5b61353860008583866138e8565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516136359190614b8e565b6fffffffffffffffffffffffffffffffff16815260200185836020015161365c9190614b8e565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156138cb57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461386b6000888488612f7e565b6138aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a190614943565b60405180910390fd5b81806138b590614e9a565b92505080806138c390614e9a565b9150506137fa565b50806001819055506138e060008785886138ee565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b60008082905060005b845181101561397157600085828151811061392e5761392d614fc5565b5b6020026020010151905080831161395057613949838261397c565b925061395d565b61395a818461397c565b92505b50808061396990614e9a565b915050613910565b508091505092915050565b600082600052816020526040600020905092915050565b82805461399f90614e37565b90600052602060002090601f0160209004810192826139c15760008555613a08565b82601f106139da57805160ff1916838001178555613a08565b82800160010185558215613a08579182015b82811115613a075782518255916020019190600101906139ec565b5b509050613a159190613a53565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613a6c576000816000905550600101613a54565b5090565b6000613a83613a7e84614ade565b614ab9565b905082815260208101848484011115613a9f57613a9e615032565b5b613aaa848285614dcb565b509392505050565b6000613ac5613ac084614b0f565b614ab9565b905082815260208101848484011115613ae157613ae0615032565b5b613aec848285614dcb565b509392505050565b600081359050613b038161582e565b92915050565b60008083601f840112613b1f57613b1e615028565b5b8235905067ffffffffffffffff811115613b3c57613b3b615023565b5b602083019150836020820283011115613b5857613b5761502d565b5b9250929050565b600081359050613b6e81615845565b92915050565b600081359050613b838161585c565b92915050565b600081359050613b9881615873565b92915050565b600081519050613bad81615873565b92915050565b600082601f830112613bc857613bc7615028565b5b8135613bd8848260208601613a70565b91505092915050565b600082601f830112613bf657613bf5615028565b5b8135613c06848260208601613ab2565b91505092915050565b600081359050613c1e8161588a565b92915050565b600060208284031215613c3a57613c3961503c565b5b6000613c4884828501613af4565b91505092915050565b60008060408385031215613c6857613c6761503c565b5b6000613c7685828601613af4565b9250506020613c8785828601613af4565b9150509250929050565b600080600060608486031215613caa57613ca961503c565b5b6000613cb886828701613af4565b9350506020613cc986828701613af4565b9250506040613cda86828701613c0f565b9150509250925092565b60008060008060808587031215613cfe57613cfd61503c565b5b6000613d0c87828801613af4565b9450506020613d1d87828801613af4565b9350506040613d2e87828801613c0f565b925050606085013567ffffffffffffffff811115613d4f57613d4e615037565b5b613d5b87828801613bb3565b91505092959194509250565b60008060408385031215613d7e57613d7d61503c565b5b6000613d8c85828601613af4565b9250506020613d9d85828601613b5f565b9150509250929050565b60008060408385031215613dbe57613dbd61503c565b5b6000613dcc85828601613af4565b9250506020613ddd85828601613c0f565b9150509250929050565b600060208284031215613dfd57613dfc61503c565b5b6000613e0b84828501613b74565b91505092915050565b600060208284031215613e2a57613e2961503c565b5b6000613e3884828501613b89565b91505092915050565b600060208284031215613e5757613e5661503c565b5b6000613e6584828501613b9e565b91505092915050565b600060208284031215613e8457613e8361503c565b5b600082013567ffffffffffffffff811115613ea257613ea1615037565b5b613eae84828501613be1565b91505092915050565b600060208284031215613ecd57613ecc61503c565b5b6000613edb84828501613c0f565b91505092915050565b600080600060408486031215613efd57613efc61503c565b5b6000613f0b86828701613c0f565b935050602084013567ffffffffffffffff811115613f2c57613f2b615037565b5b613f3886828701613b09565b92509250509250925092565b600080600080600060a08688031215613f6057613f5f61503c565b5b6000613f6e88828901613c0f565b9550506020613f7f88828901613c0f565b9450506040613f9088828901613c0f565b9350506060613fa188828901613c0f565b9250506080613fb288828901613c0f565b9150509295509295909350565b613fc881614d1d565b82525050565b613fd781614d1d565b82525050565b613fee613fe982614d1d565b614ee3565b82525050565b613ffd81614d2f565b82525050565b61400c81614d3b565b82525050565b600061401d82614b40565b6140278185614b56565b9350614037818560208601614dda565b61404081615041565b840191505092915050565b600061405682614b4b565b6140608185614b72565b9350614070818560208601614dda565b61407981615041565b840191505092915050565b600061408f82614b4b565b6140998185614b83565b93506140a9818560208601614dda565b80840191505092915050565b60006140c2602283614b72565b91506140cd8261505f565b604082019050919050565b60006140e5602683614b72565b91506140f0826150ae565b604082019050919050565b6000614108601883614b72565b9150614113826150fd565b602082019050919050565b600061412b602a83614b72565b915061413682615126565b604082019050919050565b600061414e602383614b72565b915061415982615175565b604082019050919050565b6000614171602583614b72565b915061417c826151c4565b604082019050919050565b6000614194603183614b72565b915061419f82615213565b604082019050919050565b60006141b7601283614b72565b91506141c282615262565b602082019050919050565b60006141da601e83614b72565b91506141e58261528b565b602082019050919050565b60006141fd600f83614b72565b9150614208826152b4565b602082019050919050565b6000614220603983614b72565b915061422b826152dd565b604082019050919050565b6000614243601e83614b72565b915061424e8261532c565b602082019050919050565b6000614266602b83614b72565b915061427182615355565b604082019050919050565b6000614289601283614b72565b9150614294826153a4565b602082019050919050565b60006142ac602683614b72565b91506142b7826153cd565b604082019050919050565b60006142cf600583614b83565b91506142da8261541c565b600582019050919050565b60006142f2602083614b72565b91506142fd82615445565b602082019050919050565b6000614315602f83614b72565b91506143208261546e565b604082019050919050565b6000614338601a83614b72565b9150614343826154bd565b602082019050919050565b600061435b603283614b72565b9150614366826154e6565b604082019050919050565b600061437e602283614b72565b915061438982615535565b604082019050919050565b60006143a1600083614b67565b91506143ac82615584565b600082019050919050565b60006143c4601083614b72565b91506143cf82615587565b602082019050919050565b60006143e7603383614b72565b91506143f2826155b0565b604082019050919050565b600061440a601683614b72565b9150614415826155ff565b602082019050919050565b600061442d601d83614b72565b915061443882615628565b602082019050919050565b6000614450602183614b72565b915061445b82615651565b604082019050919050565b6000614473601683614b72565b915061447e826156a0565b602082019050919050565b6000614496602e83614b72565b91506144a1826156c9565b604082019050919050565b60006144b9601f83614b72565b91506144c482615718565b602082019050919050565b60006144dc602f83614b72565b91506144e782615741565b604082019050919050565b60006144ff602d83614b72565b915061450a82615790565b604082019050919050565b6000614522602283614b72565b915061452d826157df565b604082019050919050565b60408201600082015161454e6000850182613fbf565b5060208201516145616020850182614576565b50505050565b61457081614dad565b82525050565b61457f81614db7565b82525050565b60006145918284613fdd565b60148201915081905092915050565b60006145ac8285614084565b91506145b88284614084565b91506145c3826142c2565b91508190509392505050565b60006145da82614394565b9150819050919050565b60006020820190506145f96000830184613fce565b92915050565b60006080820190506146146000830187613fce565b6146216020830186613fce565b61462e6040830185614567565b81810360608301526146408184614012565b905095945050505050565b60006020820190506146606000830184613ff4565b92915050565b600060208201905061467b6000830184614003565b92915050565b6000602082019050818103600083015261469b818461404b565b905092915050565b600060208201905081810360008301526146bc816140b5565b9050919050565b600060208201905081810360008301526146dc816140d8565b9050919050565b600060208201905081810360008301526146fc816140fb565b9050919050565b6000602082019050818103600083015261471c8161411e565b9050919050565b6000602082019050818103600083015261473c81614141565b9050919050565b6000602082019050818103600083015261475c81614164565b9050919050565b6000602082019050818103600083015261477c81614187565b9050919050565b6000602082019050818103600083015261479c816141aa565b9050919050565b600060208201905081810360008301526147bc816141cd565b9050919050565b600060208201905081810360008301526147dc816141f0565b9050919050565b600060208201905081810360008301526147fc81614213565b9050919050565b6000602082019050818103600083015261481c81614236565b9050919050565b6000602082019050818103600083015261483c81614259565b9050919050565b6000602082019050818103600083015261485c8161427c565b9050919050565b6000602082019050818103600083015261487c8161429f565b9050919050565b6000602082019050818103600083015261489c816142e5565b9050919050565b600060208201905081810360008301526148bc81614308565b9050919050565b600060208201905081810360008301526148dc8161432b565b9050919050565b600060208201905081810360008301526148fc8161434e565b9050919050565b6000602082019050818103600083015261491c81614371565b9050919050565b6000602082019050818103600083015261493c816143b7565b9050919050565b6000602082019050818103600083015261495c816143da565b9050919050565b6000602082019050818103600083015261497c816143fd565b9050919050565b6000602082019050818103600083015261499c81614420565b9050919050565b600060208201905081810360008301526149bc81614443565b9050919050565b600060208201905081810360008301526149dc81614466565b9050919050565b600060208201905081810360008301526149fc81614489565b9050919050565b60006020820190508181036000830152614a1c816144ac565b9050919050565b60006020820190508181036000830152614a3c816144cf565b9050919050565b60006020820190508181036000830152614a5c816144f2565b9050919050565b60006020820190508181036000830152614a7c81614515565b9050919050565b6000604082019050614a986000830184614538565b92915050565b6000602082019050614ab36000830184614567565b92915050565b6000614ac3614ad4565b9050614acf8282614e69565b919050565b6000604051905090565b600067ffffffffffffffff821115614af957614af8614ff4565b5b614b0282615041565b9050602081019050919050565b600067ffffffffffffffff821115614b2a57614b29614ff4565b5b614b3382615041565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b9982614d71565b9150614ba483614d71565b9250826fffffffffffffffffffffffffffffffff03821115614bc957614bc8614f38565b5b828201905092915050565b6000614bdf82614dad565b9150614bea83614dad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c1f57614c1e614f38565b5b828201905092915050565b6000614c3582614dad565b9150614c4083614dad565b925082614c5057614c4f614f67565b5b828204905092915050565b6000614c6682614dad565b9150614c7183614dad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614caa57614ca9614f38565b5b828202905092915050565b6000614cc082614d71565b9150614ccb83614d71565b925082821015614cde57614cdd614f38565b5b828203905092915050565b6000614cf482614dad565b9150614cff83614dad565b925082821015614d1257614d11614f38565b5b828203905092915050565b6000614d2882614d8d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614df8578082015181840152602081019050614ddd565b83811115614e07576000848401525b50505050565b6000614e1882614dad565b91506000821415614e2c57614e2b614f38565b5b600182039050919050565b60006002820490506001821680614e4f57607f821691505b60208210811415614e6357614e62614f96565b5b50919050565b614e7282615041565b810181811067ffffffffffffffff82111715614e9157614e90614ff4565b5b80604052505050565b6000614ea582614dad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ed857614ed7614f38565b5b600182019050919050565b6000614eee82614ef5565b9050919050565b6000614f0082615052565b9050919050565b6000614f1282614dad565b9150614f1d83614dad565b925082614f2d57614f2c614f67565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374696e67206e6f7420737461727465640000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61583781614d1d565b811461584257600080fd5b50565b61584e81614d2f565b811461585957600080fd5b50565b61586581614d3b565b811461587057600080fd5b50565b61587c81614d45565b811461588757600080fd5b50565b61589381614dad565b811461589e57600080fd5b5056fea264697066735822122007ec9c2ce568f4724d6d510a40c9575867b66ca6259495594402d750e7c9548264736f6c63430008070033697066733a2f2f516d584a586b46546d34753550556553756254524541715157324234446276486138526844734633715a457846672f

Deployed Bytecode

0x6080604052600436106102675760003560e01c806369ba1a7511610144578063af7b26e9116100b6578063d04950a11161007a578063d04950a114610905578063d2cab05614610930578063d7224ba01461094c578063dc33e68114610977578063e985e9c5146109b4578063f2fde38b146109f157610267565b8063af7b26e914610836578063b88d4fde1461085f578063bd0a843914610888578063c1f127e21461089f578063c87b56dd146108c857610267565b80638da5cb5b116101085780638da5cb5b146107475780639231ab2a1461077257806395d89b41146107af578063a0712d68146107da578063a22cb465146107f6578063ac4460021461081f57610267565b806369ba1a751461067657806370a082311461069f578063715018a6146106dc5780637cb64759146106f35780638d859f3e1461071c57610267565b80632f2ffc57116101dd57806342842e0e116101a157806342842e0e146105565780634f6ccce71461057f57806355f804b3146105bc5780635c37809d146105e557806362c6f7b91461060e5780636352211e1461063957610267565b80632f2ffc571461045f5780632f745c591461048a5780633af32abf146104c75780633fd17366146105045780634256dbe31461052d57610267565b8063081812fc1161022f578063081812fc1461034f578063095ea7b31461038c57806318160ddd146103b5578063200d2ed2146103e057806323b872dd1461040b5780632eb4a7ab1461043457610267565b80630199e3471461026c57806301ffc9a714610295578063050225ea146102d257806305060ed9146102fb57806306fdde0314610324575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613eb7565b610a1a565b005b3480156102a157600080fd5b506102bc60048036038101906102b79190613e14565b610aa0565b6040516102c9919061464b565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190613da7565b610bea565b005b34801561030757600080fd5b50610322600480360381019061031d9190613f44565b610cf6565b005b34801561033057600080fd5b50610339610d9c565b6040516103469190614681565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613eb7565b610e2e565b60405161038391906145e4565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613da7565b610eb3565b005b3480156103c157600080fd5b506103ca610fcc565b6040516103d79190614a9e565b60405180910390f35b3480156103ec57600080fd5b506103f5610fd6565b6040516104029190614a9e565b60405180910390f35b34801561041757600080fd5b50610432600480360381019061042d9190613c91565b610fdc565b005b34801561044057600080fd5b50610449610fec565b6040516104569190614666565b60405180910390f35b34801561046b57600080fd5b50610474610ff2565b6040516104819190614a9e565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190613da7565b610ff8565b6040516104be9190614a9e565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190613c24565b6111f6565b6040516104fb919061464b565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190613eb7565b61124c565b005b34801561053957600080fd5b50610554600480360381019061054f9190613eb7565b6112d2565b005b34801561056257600080fd5b5061057d60048036038101906105789190613c91565b611358565b005b34801561058b57600080fd5b506105a660048036038101906105a19190613eb7565b611378565b6040516105b39190614a9e565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de9190613e6e565b6113cb565b005b3480156105f157600080fd5b5061060c60048036038101906106079190613e6e565b611461565b005b34801561061a57600080fd5b506106236114f7565b604051610630919061464b565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190613eb7565b61150a565b60405161066d91906145e4565b60405180910390f35b34801561068257600080fd5b5061069d60048036038101906106989190613eb7565b611520565b005b3480156106ab57600080fd5b506106c660048036038101906106c19190613c24565b6115a6565b6040516106d39190614a9e565b60405180910390f35b3480156106e857600080fd5b506106f161168f565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613de7565b611717565b005b34801561072857600080fd5b5061073161179d565b60405161073e9190614a9e565b60405180910390f35b34801561075357600080fd5b5061075c6117a3565b60405161076991906145e4565b60405180910390f35b34801561077e57600080fd5b5061079960048036038101906107949190613eb7565b6117cc565b6040516107a69190614a83565b60405180910390f35b3480156107bb57600080fd5b506107c46117e4565b6040516107d19190614681565b60405180910390f35b6107f460048036038101906107ef9190613eb7565b611876565b005b34801561080257600080fd5b5061081d60048036038101906108189190613d67565b611abe565b005b34801561082b57600080fd5b50610834611c3f565b005b34801561084257600080fd5b5061085d60048036038101906108589190613eb7565b611dc0565b005b34801561086b57600080fd5b5061088660048036038101906108819190613ce4565b611e46565b005b34801561089457600080fd5b5061089d611ea2565b005b3480156108ab57600080fd5b506108c660048036038101906108c19190613eb7565b611f4a565b005b3480156108d457600080fd5b506108ef60048036038101906108ea9190613eb7565b611fd0565b6040516108fc9190614681565b60405180910390f35b34801561091157600080fd5b5061091a61211f565b6040516109279190614a9e565b60405180910390f35b61094a60048036038101906109459190613ee4565b612125565b005b34801561095857600080fd5b5061096161240a565b60405161096e9190614a9e565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190613c24565b612410565b6040516109ab9190614a9e565b60405180910390f35b3480156109c057600080fd5b506109db60048036038101906109d69190613c51565b612422565b6040516109e8919061464b565b60405180910390f35b3480156109fd57600080fd5b50610a186004803603810190610a139190613c24565b6124b6565b005b610a226125ae565b73ffffffffffffffffffffffffffffffffffffffff16610a406117a3565b73ffffffffffffffffffffffffffffffffffffffff1614610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90614883565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b6b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bd357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610be35750610be2826125b6565b5b9050919050565b610bf26125ae565b73ffffffffffffffffffffffffffffffffffffffff16610c106117a3565b73ffffffffffffffffffffffffffffffffffffffff1614610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90614883565b60405180910390fd5b6012547f00000000000000000000000000000000000000000000000000000000000015b3610c949190614ce9565b81610c9d610fcc565b610ca79190614bd4565b1115610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90614843565b60405180910390fd5b610cf28282612620565b5050565b610cfe6125ae565b73ffffffffffffffffffffffffffffffffffffffff16610d1c6117a3565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990614883565b60405180910390fd5b846013819055508060118190555081600d8190555083600c8190555082600b819055505050505050565b606060028054610dab90614e37565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd790614e37565b8015610e245780601f10610df957610100808354040283529160200191610e24565b820191906000526020600020905b815481529060010190602001808311610e0757829003601f168201915b5050505050905090565b6000610e398261263e565b610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90614a43565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ebe8261150a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2690614903565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f4e6125ae565b73ffffffffffffffffffffffffffffffffffffffff161480610f7d5750610f7c81610f776125ae565b612422565b5b610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb3906147e3565b60405180910390fd5b610fc783838361264c565b505050565b6000600154905090565b60135481565b610fe78383836126fe565b505050565b600a5481565b600c5481565b6000611003836115a6565b8210611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b906146a3565b60405180910390fd5b600061104e610fcc565b905060008060005b838110156111b4576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461114857806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111a057868414156111915781955050505050506111f0565b838061119c90614e9a565b9450505b5080806111ac90614e9a565b915050611056565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e7906149e3565b60405180910390fd5b92915050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6112546125ae565b73ffffffffffffffffffffffffffffffffffffffff166112726117a3565b73ffffffffffffffffffffffffffffffffffffffff16146112c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf90614883565b60405180910390fd5b80600d8190555050565b6112da6125ae565b73ffffffffffffffffffffffffffffffffffffffff166112f86117a3565b73ffffffffffffffffffffffffffffffffffffffff161461134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590614883565b60405180910390fd5b8060128190555050565b61137383838360405180602001604052806000815250611e46565b505050565b6000611382610fcc565b82106113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90614723565b60405180910390fd5b819050919050565b6113d36125ae565b73ffffffffffffffffffffffffffffffffffffffff166113f16117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143e90614883565b60405180910390fd5b80600f908051906020019061145d929190613993565b5050565b6114696125ae565b73ffffffffffffffffffffffffffffffffffffffff166114876117a3565b73ffffffffffffffffffffffffffffffffffffffff16146114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d490614883565b60405180910390fd5b80601090805190602001906114f3929190613993565b5050565b600e60009054906101000a900460ff1681565b600061151582612cb7565b600001519050919050565b6115286125ae565b73ffffffffffffffffffffffffffffffffffffffff166115466117a3565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390614883565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160e90614823565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6116976125ae565b73ffffffffffffffffffffffffffffffffffffffff166116b56117a3565b73ffffffffffffffffffffffffffffffffffffffff161461170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290614883565b60405180910390fd5b6117156000612eba565b565b61171f6125ae565b73ffffffffffffffffffffffffffffffffffffffff1661173d6117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a90614883565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117d4613a19565b6117dd82612cb7565b9050919050565b6060600380546117f390614e37565b80601f016020809104026020016040519081016040528092919081815260200182805461181f90614e37565b801561186c5780601f106118415761010080835404028352916020019161186c565b820191906000526020600020905b81548152906001019060200180831161184f57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146118e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118db906147a3565b60405180910390fd5b600260135414611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090614783565b60405180910390fd5b6012547f00000000000000000000000000000000000000000000000000000000000015b36119579190614ce9565b81611960610fcc565b61196a9190614bd4565b11156119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a290614843565b60405180910390fd5b600c54816119b833612410565b6119c29190614bd4565b1115611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614803565b60405180910390fd5b600b54811115611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f906149c3565b60405180910390fd5b80600d54611a569190614c5b565b341015611a98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8f90614963565b60405180910390fd5b611aa23382612620565b601154611aad610fcc565b10611abb5760006013819055505b50565b611ac66125ae565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b906148c3565b60405180910390fd5b8060076000611b416125ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bee6125ae565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c33919061464b565b60405180910390a35050565b611c476125ae565b73ffffffffffffffffffffffffffffffffffffffff16611c656117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290614883565b60405180910390fd5b60026009541415611d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf890614a03565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611d2f906145cf565b60006040518083038185875af1925050503d8060008114611d6c576040519150601f19603f3d011682016040523d82523d6000602084013e611d71565b606091505b5050905080611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90614923565b60405180910390fd5b506001600981905550565b611dc86125ae565b73ffffffffffffffffffffffffffffffffffffffff16611de66117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3390614883565b60405180910390fd5b80600b8190555050565b611e518484846126fe565b611e5d84848484612f7e565b611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390614943565b60405180910390fd5b50505050565b611eaa6125ae565b73ffffffffffffffffffffffffffffffffffffffff16611ec86117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590614883565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b611f526125ae565b73ffffffffffffffffffffffffffffffffffffffff16611f706117a3565b73ffffffffffffffffffffffffffffffffffffffff1614611fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbd90614883565b60405180910390fd5b8060118190555050565b6060611fdb8261263e565b61201a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612011906148a3565b60405180910390fd5b600e60009054906101000a900460ff161561208c576000612039613115565b905060008151116120595760405180602001604052806000815250612084565b80612063846131a7565b6040516020016120749291906145a0565b6040516020818303038152906040525b91505061211a565b6010805461209990614e37565b80601f01602080910402602001604051908101604052809291908181526020018280546120c590614e37565b80156121125780601f106120e757610100808354040283529160200191612112565b820191906000526020600020905b8154815290600101906020018083116120f557829003601f168201915b505050505090505b919050565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906147a3565b60405180910390fd5b6000336040516020016121a69190614585565b60405160208183030381529060405280519060200120905061220c838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a5483613308565b61224b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612242906147c3565b60405180910390fd5b600160135414612290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612287906146e3565b60405180910390fd5b6012546115b36122a09190614ce9565b846122a9610fcc565b6122b39190614bd4565b11156122f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122eb90614843565b60405180910390fd5b600c548461230133612410565b61230b9190614bd4565b111561234c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234390614803565b60405180910390fd5b600b54841115612391576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612388906149c3565b60405180910390fd5b83600d5461239f9190614c5b565b3410156123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d890614963565b60405180910390fd5b6123eb3385612620565b6011546123f6610fcc565b106124045760006013819055505b50505050565b60085481565b600061241b8261331f565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124be6125ae565b73ffffffffffffffffffffffffffffffffffffffff166124dc6117a3565b73ffffffffffffffffffffffffffffffffffffffff1614612532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252990614883565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612599906146c3565b60405180910390fd5b6125ab81612eba565b50565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61263a828260405180602001604052806000815250613408565b5050565b600060015482109050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061270982612cb7565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166127306125ae565b73ffffffffffffffffffffffffffffffffffffffff16148061278c57506127556125ae565b73ffffffffffffffffffffffffffffffffffffffff1661277484610e2e565b73ffffffffffffffffffffffffffffffffffffffff16145b806127a857506127a782600001516127a26125ae565b612422565b5b9050806127ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e1906148e3565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390614863565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156128cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c390614743565b60405180910390fd5b6128d985858560016138e8565b6128e9600084846000015161264c565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129579190614cb5565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff166129fb9190614b8e565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050506000600184612b019190614bd4565b9050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c4757612b778161263e565b15612c46576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506004600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612caf86868660016138ee565b505050505050565b612cbf613a19565b612cc88261263e565b612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cfe90614703565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000328310612d6b5760017f000000000000000000000000000000000000000000000000000000000000003284612d5e9190614ce9565b612d689190614bd4565b90505b60008390505b818110612e79576000600460008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e6557809350505050612eb5565b508080612e7190614e0d565b915050612d71565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac90614a23565b60405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612f9f8473ffffffffffffffffffffffffffffffffffffffff166138f4565b15613108578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fc86125ae565b8786866040518563ffffffff1660e01b8152600401612fea94939291906145ff565b602060405180830381600087803b15801561300457600080fd5b505af192505050801561303557506040513d601f19601f820116820180604052508101906130329190613e41565b60015b6130b8573d8060008114613065576040519150601f19603f3d011682016040523d82523d6000602084013e61306a565b606091505b506000815114156130b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a790614943565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061310d565b600190505b949350505050565b6060600f805461312490614e37565b80601f016020809104026020016040519081016040528092919081815260200182805461315090614e37565b801561319d5780601f106131725761010080835404028352916020019161319d565b820191906000526020600020905b81548152906001019060200180831161318057829003601f168201915b5050505050905090565b606060008214156131ef576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613303565b600082905060005b6000821461322157808061320a90614e9a565b915050600a8261321a9190614c2a565b91506131f7565b60008167ffffffffffffffff81111561323d5761323c614ff4565b5b6040519080825280601f01601f19166020018201604052801561326f5781602001600182028036833780820191505090505b5090505b600085146132fc576001826132889190614ce9565b9150600a856132979190614f07565b60306132a39190614bd4565b60f81b8183815181106132b9576132b8614fc5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132f59190614c2a565b9450613273565b8093505050505b919050565b6000826133158584613907565b1490509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338790614763565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561347f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613476906149a3565b60405180910390fd5b6134888161263e565b156134c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134bf90614983565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000003283111561352b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352290614a63565b60405180910390fd5b61353860008583866138e8565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681525050905060405180604001604052808583600001516136359190614b8e565b6fffffffffffffffffffffffffffffffff16815260200185836020015161365c9190614b8e565b6fffffffffffffffffffffffffffffffff16815250600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506004600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b858110156138cb57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461386b6000888488612f7e565b6138aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a190614943565b60405180910390fd5b81806138b590614e9a565b92505080806138c390614e9a565b9150506137fa565b50806001819055506138e060008785886138ee565b505050505050565b50505050565b50505050565b600080823b905060008111915050919050565b60008082905060005b845181101561397157600085828151811061392e5761392d614fc5565b5b6020026020010151905080831161395057613949838261397c565b925061395d565b61395a818461397c565b92505b50808061396990614e9a565b915050613910565b508091505092915050565b600082600052816020526040600020905092915050565b82805461399f90614e37565b90600052602060002090601f0160209004810192826139c15760008555613a08565b82601f106139da57805160ff1916838001178555613a08565b82800160010185558215613a08579182015b82811115613a075782518255916020019190600101906139ec565b5b509050613a159190613a53565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613a6c576000816000905550600101613a54565b5090565b6000613a83613a7e84614ade565b614ab9565b905082815260208101848484011115613a9f57613a9e615032565b5b613aaa848285614dcb565b509392505050565b6000613ac5613ac084614b0f565b614ab9565b905082815260208101848484011115613ae157613ae0615032565b5b613aec848285614dcb565b509392505050565b600081359050613b038161582e565b92915050565b60008083601f840112613b1f57613b1e615028565b5b8235905067ffffffffffffffff811115613b3c57613b3b615023565b5b602083019150836020820283011115613b5857613b5761502d565b5b9250929050565b600081359050613b6e81615845565b92915050565b600081359050613b838161585c565b92915050565b600081359050613b9881615873565b92915050565b600081519050613bad81615873565b92915050565b600082601f830112613bc857613bc7615028565b5b8135613bd8848260208601613a70565b91505092915050565b600082601f830112613bf657613bf5615028565b5b8135613c06848260208601613ab2565b91505092915050565b600081359050613c1e8161588a565b92915050565b600060208284031215613c3a57613c3961503c565b5b6000613c4884828501613af4565b91505092915050565b60008060408385031215613c6857613c6761503c565b5b6000613c7685828601613af4565b9250506020613c8785828601613af4565b9150509250929050565b600080600060608486031215613caa57613ca961503c565b5b6000613cb886828701613af4565b9350506020613cc986828701613af4565b9250506040613cda86828701613c0f565b9150509250925092565b60008060008060808587031215613cfe57613cfd61503c565b5b6000613d0c87828801613af4565b9450506020613d1d87828801613af4565b9350506040613d2e87828801613c0f565b925050606085013567ffffffffffffffff811115613d4f57613d4e615037565b5b613d5b87828801613bb3565b91505092959194509250565b60008060408385031215613d7e57613d7d61503c565b5b6000613d8c85828601613af4565b9250506020613d9d85828601613b5f565b9150509250929050565b60008060408385031215613dbe57613dbd61503c565b5b6000613dcc85828601613af4565b9250506020613ddd85828601613c0f565b9150509250929050565b600060208284031215613dfd57613dfc61503c565b5b6000613e0b84828501613b74565b91505092915050565b600060208284031215613e2a57613e2961503c565b5b6000613e3884828501613b89565b91505092915050565b600060208284031215613e5757613e5661503c565b5b6000613e6584828501613b9e565b91505092915050565b600060208284031215613e8457613e8361503c565b5b600082013567ffffffffffffffff811115613ea257613ea1615037565b5b613eae84828501613be1565b91505092915050565b600060208284031215613ecd57613ecc61503c565b5b6000613edb84828501613c0f565b91505092915050565b600080600060408486031215613efd57613efc61503c565b5b6000613f0b86828701613c0f565b935050602084013567ffffffffffffffff811115613f2c57613f2b615037565b5b613f3886828701613b09565b92509250509250925092565b600080600080600060a08688031215613f6057613f5f61503c565b5b6000613f6e88828901613c0f565b9550506020613f7f88828901613c0f565b9450506040613f9088828901613c0f565b9350506060613fa188828901613c0f565b9250506080613fb288828901613c0f565b9150509295509295909350565b613fc881614d1d565b82525050565b613fd781614d1d565b82525050565b613fee613fe982614d1d565b614ee3565b82525050565b613ffd81614d2f565b82525050565b61400c81614d3b565b82525050565b600061401d82614b40565b6140278185614b56565b9350614037818560208601614dda565b61404081615041565b840191505092915050565b600061405682614b4b565b6140608185614b72565b9350614070818560208601614dda565b61407981615041565b840191505092915050565b600061408f82614b4b565b6140998185614b83565b93506140a9818560208601614dda565b80840191505092915050565b60006140c2602283614b72565b91506140cd8261505f565b604082019050919050565b60006140e5602683614b72565b91506140f0826150ae565b604082019050919050565b6000614108601883614b72565b9150614113826150fd565b602082019050919050565b600061412b602a83614b72565b915061413682615126565b604082019050919050565b600061414e602383614b72565b915061415982615175565b604082019050919050565b6000614171602583614b72565b915061417c826151c4565b604082019050919050565b6000614194603183614b72565b915061419f82615213565b604082019050919050565b60006141b7601283614b72565b91506141c282615262565b602082019050919050565b60006141da601e83614b72565b91506141e58261528b565b602082019050919050565b60006141fd600f83614b72565b9150614208826152b4565b602082019050919050565b6000614220603983614b72565b915061422b826152dd565b604082019050919050565b6000614243601e83614b72565b915061424e8261532c565b602082019050919050565b6000614266602b83614b72565b915061427182615355565b604082019050919050565b6000614289601283614b72565b9150614294826153a4565b602082019050919050565b60006142ac602683614b72565b91506142b7826153cd565b604082019050919050565b60006142cf600583614b83565b91506142da8261541c565b600582019050919050565b60006142f2602083614b72565b91506142fd82615445565b602082019050919050565b6000614315602f83614b72565b91506143208261546e565b604082019050919050565b6000614338601a83614b72565b9150614343826154bd565b602082019050919050565b600061435b603283614b72565b9150614366826154e6565b604082019050919050565b600061437e602283614b72565b915061438982615535565b604082019050919050565b60006143a1600083614b67565b91506143ac82615584565b600082019050919050565b60006143c4601083614b72565b91506143cf82615587565b602082019050919050565b60006143e7603383614b72565b91506143f2826155b0565b604082019050919050565b600061440a601683614b72565b9150614415826155ff565b602082019050919050565b600061442d601d83614b72565b915061443882615628565b602082019050919050565b6000614450602183614b72565b915061445b82615651565b604082019050919050565b6000614473601683614b72565b915061447e826156a0565b602082019050919050565b6000614496602e83614b72565b91506144a1826156c9565b604082019050919050565b60006144b9601f83614b72565b91506144c482615718565b602082019050919050565b60006144dc602f83614b72565b91506144e782615741565b604082019050919050565b60006144ff602d83614b72565b915061450a82615790565b604082019050919050565b6000614522602283614b72565b915061452d826157df565b604082019050919050565b60408201600082015161454e6000850182613fbf565b5060208201516145616020850182614576565b50505050565b61457081614dad565b82525050565b61457f81614db7565b82525050565b60006145918284613fdd565b60148201915081905092915050565b60006145ac8285614084565b91506145b88284614084565b91506145c3826142c2565b91508190509392505050565b60006145da82614394565b9150819050919050565b60006020820190506145f96000830184613fce565b92915050565b60006080820190506146146000830187613fce565b6146216020830186613fce565b61462e6040830185614567565b81810360608301526146408184614012565b905095945050505050565b60006020820190506146606000830184613ff4565b92915050565b600060208201905061467b6000830184614003565b92915050565b6000602082019050818103600083015261469b818461404b565b905092915050565b600060208201905081810360008301526146bc816140b5565b9050919050565b600060208201905081810360008301526146dc816140d8565b9050919050565b600060208201905081810360008301526146fc816140fb565b9050919050565b6000602082019050818103600083015261471c8161411e565b9050919050565b6000602082019050818103600083015261473c81614141565b9050919050565b6000602082019050818103600083015261475c81614164565b9050919050565b6000602082019050818103600083015261477c81614187565b9050919050565b6000602082019050818103600083015261479c816141aa565b9050919050565b600060208201905081810360008301526147bc816141cd565b9050919050565b600060208201905081810360008301526147dc816141f0565b9050919050565b600060208201905081810360008301526147fc81614213565b9050919050565b6000602082019050818103600083015261481c81614236565b9050919050565b6000602082019050818103600083015261483c81614259565b9050919050565b6000602082019050818103600083015261485c8161427c565b9050919050565b6000602082019050818103600083015261487c8161429f565b9050919050565b6000602082019050818103600083015261489c816142e5565b9050919050565b600060208201905081810360008301526148bc81614308565b9050919050565b600060208201905081810360008301526148dc8161432b565b9050919050565b600060208201905081810360008301526148fc8161434e565b9050919050565b6000602082019050818103600083015261491c81614371565b9050919050565b6000602082019050818103600083015261493c816143b7565b9050919050565b6000602082019050818103600083015261495c816143da565b9050919050565b6000602082019050818103600083015261497c816143fd565b9050919050565b6000602082019050818103600083015261499c81614420565b9050919050565b600060208201905081810360008301526149bc81614443565b9050919050565b600060208201905081810360008301526149dc81614466565b9050919050565b600060208201905081810360008301526149fc81614489565b9050919050565b60006020820190508181036000830152614a1c816144ac565b9050919050565b60006020820190508181036000830152614a3c816144cf565b9050919050565b60006020820190508181036000830152614a5c816144f2565b9050919050565b60006020820190508181036000830152614a7c81614515565b9050919050565b6000604082019050614a986000830184614538565b92915050565b6000602082019050614ab36000830184614567565b92915050565b6000614ac3614ad4565b9050614acf8282614e69565b919050565b6000604051905090565b600067ffffffffffffffff821115614af957614af8614ff4565b5b614b0282615041565b9050602081019050919050565b600067ffffffffffffffff821115614b2a57614b29614ff4565b5b614b3382615041565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b9982614d71565b9150614ba483614d71565b9250826fffffffffffffffffffffffffffffffff03821115614bc957614bc8614f38565b5b828201905092915050565b6000614bdf82614dad565b9150614bea83614dad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c1f57614c1e614f38565b5b828201905092915050565b6000614c3582614dad565b9150614c4083614dad565b925082614c5057614c4f614f67565b5b828204905092915050565b6000614c6682614dad565b9150614c7183614dad565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614caa57614ca9614f38565b5b828202905092915050565b6000614cc082614d71565b9150614ccb83614d71565b925082821015614cde57614cdd614f38565b5b828203905092915050565b6000614cf482614dad565b9150614cff83614dad565b925082821015614d1257614d11614f38565b5b828203905092915050565b6000614d2882614d8d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614df8578082015181840152602081019050614ddd565b83811115614e07576000848401525b50505050565b6000614e1882614dad565b91506000821415614e2c57614e2b614f38565b5b600182039050919050565b60006002820490506001821680614e4f57607f821691505b60208210811415614e6357614e62614f96565b5b50919050565b614e7282615041565b810181811067ffffffffffffffff82111715614e9157614e90614ff4565b5b80604052505050565b6000614ea582614dad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ed857614ed7614f38565b5b600182019050919050565b6000614eee82614ef5565b9050919050565b6000614f0082615052565b9050919050565b6000614f1282614dad565b9150614f1d83614dad565b925082614f2d57614f2c614f67565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374696e67206e6f7420737461727465640000000000000000600082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f4e6f742077686974656c69737465640000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f5175616e74697479206578636565647320616c6c6f776564204d696e74730000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f4e65656420746f2073656e64206d6f7265204554482e00000000000000000000600082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e7469747920746f206d696e7420746f6f20686960008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b61583781614d1d565b811461584257600080fd5b50565b61584e81614d2f565b811461585957600080fd5b50565b61586581614d3b565b811461587057600080fd5b50565b61587c81614d45565b811461588757600080fd5b50565b61589381614dad565b811461589e57600080fd5b5056fea264697066735822122007ec9c2ce568f4724d6d510a40c9575867b66ca6259495594402d750e7c9548264736f6c63430008070033

Deployed Bytecode Sourcemap

20887:5063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25351:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12147:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25566:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23970:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13719:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14920:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14536:379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11117:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21690:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15603:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20986:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21248:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11398:744;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23851:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25115:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25859:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15750:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11216:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24367:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24262:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21525:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13596:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25477:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12522:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3606:103;;;;;;;;;;;;;:::i;:::-;;21085:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21326:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3383:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24692:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13818:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22111:549;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15129:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24843:181;;;;;;;;;;;;;:::i;:::-;;25217:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15912:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25028:83;;;;;;;;;;;;;:::i;:::-;;25773:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23424:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21170:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22668:745;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19042:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24581:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15410:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3718:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25351:122;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25454:13:::1;25436:15;:31;;;;25351:122:::0;:::o;12147:370::-;12274:4;12319:25;12304:40;;;:11;:40;;;;:99;;;;12370:33;12355:48;;;:11;:48;;;;12304:99;:160;;;;12429:35;12414:50;;;:11;:50;;;;12304:160;:207;;;;12475:36;12499:11;12475:23;:36::i;:::-;12304:207;12290:221;;12147:370;;;:::o;25566:201::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25694:7:::1;;25677:14;:24;;;;:::i;:::-;25664:9;25648:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:53;;25640:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;25731:30;25741:8;25751:9;25731;:30::i;:::-;25566:201:::0;;:::o;23970:286::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24116:6:::1;24107;:15;;;;24140:7;24131:6;:16;;;;24164:5;24156;:13;;;;24196;24178:15;:31;;;;24238:12;24218:17;:32;;;;23970:286:::0;;;;;:::o;13719:94::-;13773:13;13802:5;13795:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13719:94;:::o;14920:204::-;14988:7;15012:16;15020:7;15012;:16::i;:::-;15004:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15094:15;:24;15110:7;15094:24;;;;;;;;;;;;;;;;;;;;;15087:31;;14920:204;;;:::o;14536:379::-;14605:13;14621:24;14637:7;14621:15;:24::i;:::-;14605:40;;14666:5;14660:11;;:2;:11;;;;14652:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;14751:5;14735:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;14760:37;14777:5;14784:12;:10;:12::i;:::-;14760:16;:37::i;:::-;14735:62;14719:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;14881:28;14890:2;14894:7;14903:5;14881:8;:28::i;:::-;14598:317;14536:379;;:::o;11117:94::-;11170:7;11193:12;;11186:19;;11117:94;:::o;21690:22::-;;;;:::o;15603:142::-;15711:28;15721:4;15727:2;15731:7;15711:9;:28::i;:::-;15603:142;;;:::o;20986:94::-;;;;:::o;21248:34::-;;;;:::o;11398:744::-;11507:7;11542:16;11552:5;11542:9;:16::i;:::-;11534:5;:24;11526:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11604:22;11629:13;:11;:13::i;:::-;11604:38;;11649:19;11679:25;11729:9;11724:350;11748:14;11744:1;:18;11724:350;;;11778:31;11812:11;:14;11824:1;11812:14;;;;;;;;;;;11778:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11865:1;11839:28;;:9;:14;;;:28;;;11835:89;;11900:9;:14;;;11880:34;;11835:89;11957:5;11936:26;;:17;:26;;;11932:135;;;11994:5;11979:11;:20;11975:59;;;12021:1;12014:8;;;;;;;;;11975:59;12044:13;;;;;:::i;:::-;;;;11932:135;11769:305;11764:3;;;;;:::i;:::-;;;;11724:350;;;;12080:56;;;;;;;;;;:::i;:::-;;;;;;;;11398:744;;;;;:::o;23851:112::-;23910:4;23930:20;:27;23951:5;23930:27;;;;;;;;;;;;;;;;;;;;;;;;;23923:34;;23851:112;;;:::o;25115:98::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25198:9:::1;25190:5;:17;;;;25115:98:::0;:::o;25859:88::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25933:8:::1;25923:7;:18;;;;25859:88:::0;:::o;15750:157::-;15862:39;15879:4;15885:2;15889:7;15862:39;;;;;;;;;;;;:16;:39::i;:::-;15750:157;;;:::o;11216:177::-;11283:7;11315:13;:11;:13::i;:::-;11307:5;:21;11299:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;11382:5;11375:12;;11216:177;;;:::o;24367:98::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24452:7:::1;24436:13;:23;;;;;;;;;;;;:::i;:::-;;24367:98:::0;:::o;24262:99::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24352:3:::1;24334:15;:21;;;;;;;;;;;;:::i;:::-;;24262:99:::0;:::o;21525:29::-;;;;;;;;;;;;;:::o;13596:118::-;13660:7;13683:20;13695:7;13683:11;:20::i;:::-;:25;;;13676:32;;13596:118;;;:::o;25477:84::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25548:7:::1;25539:6;:16;;;;25477:84:::0;:::o;12522:211::-;12586:7;12627:1;12610:19;;:5;:19;;;;12602:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;12699:12;:19;12712:5;12699:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;12691:36;;12684:43;;12522:211;;;:::o;3606:103::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3671:30:::1;3698:1;3671:18;:30::i;:::-;3606:103::o:0;21085:77::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21155:1:::1;21142:10;:14;;;;21085:77:::0;:::o;21326:34::-;;;;:::o;3383:87::-;3429:7;3456:6;;;;;;;;;;;3449:13;;3383:87;:::o;24692:147::-;24773:21;;:::i;:::-;24813:20;24825:7;24813:11;:20::i;:::-;24806:27;;24692:147;;;:::o;13818:98::-;13874:13;13903:7;13896:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13818:98;:::o;22111:549::-;22045:10;22032:23;;:9;:23;;;22024:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22198:1:::1;22188:6;;:11;22180:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;22283:7;;22266:14;:24;;;;:::i;:::-;22254:8;22238:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:52;;22230:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22369:15;;22357:8;22330:24;22343:10;22330:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;22320:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;22452:17;;22440:8;:29;;22430:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22531:8;22523:5;;:16;;;;:::i;:::-;22510:9;:29;;22502:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22573:31;22583:10;22595:8;22573:9;:31::i;:::-;22634:6;;22617:13;:11;:13::i;:::-;:23;22614:41;;22652:1;22643:6;:10;;;;22614:41;22111:549:::0;:::o;15129:274::-;15232:12;:10;:12::i;:::-;15220:24;;:8;:24;;;;15212:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;15329:8;15284:18;:32;15303:12;:10;:12::i;:::-;15284:32;;;;;;;;;;;;;;;:42;15317:8;15284:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;15378:8;15349:48;;15364:12;:10;:12::i;:::-;15349:48;;;15388:8;15349:48;;;;;;:::i;:::-;;;;;;;;15129:274;;:::o;24843:181::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1165:1:::1;1311:7;;:19;;1303:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1165:1;1372:7;:18;;;;24908:12:::2;24926:10;:15;;24949:21;24926:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24907:68;;;24990:7;24982:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;24900:124;1121:1:::1;1415:7;:22;;;;24843:181::o:0;25217:130::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25326:15:::1;25306:17;:35;;;;25217:130:::0;:::o;15912:311::-;16049:28;16059:4;16065:2;16069:7;16049:9;:28::i;:::-;16100:48;16123:4;16129:2;16133:7;16142:5;16100:22;:48::i;:::-;16084:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;15912:311;;;;:::o;25028:83::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25096:9:::1;;;;;;;;;;;25095:10;25083:9;;:22;;;;;;;;;;;;;;;;;;25028:83::o:0;25773:82::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25842:7:::1;25833:6;:16;;;;25773:82:::0;:::o;23424:421::-;23497:13;23527:16;23535:7;23527;:16::i;:::-;23519:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23604:9;;;;;;;;;;;23601:239;;;23621:21;23645:10;:8;:10::i;:::-;23621:34;;23700:1;23682:7;23676:21;:25;:112;;;;;;;;;;;;;;;;;23737:7;23746:18;:7;:16;:18::i;:::-;23720:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23676:112;23662:126;;;;;23601:239;23817:15;23810:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23424:421;;;;:::o;21170:36::-;;;;:::o;22668:745::-;22045:10;22032:23;;:9;:23;;;22024:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;22778:12:::1;22820:10;22803:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;22793:39;;;;;;22778:54;;22847:50;22867:11;;22847:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22880:10;;22892:4;22847:18;:50::i;:::-;22839:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22941:1;22931:6;;:11;22923:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23037:7;;21415:4;23014:30;;;;:::i;:::-;23002:8;22986:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:58;;22978:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23124:15;;23112:8;23085:24;23098:10;23085:12;:24::i;:::-;:35;;;;:::i;:::-;:54;;23074:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;23207:17;;23195:8;:29;;23185:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23286:8;23278:5;;:16;;;;:::i;:::-;23265:9;:29;;23257:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23328:31;23338:10;23350:8;23328:9;:31::i;:::-;23386:6;;23369:13;:11;:13::i;:::-;:23;23366:41;;23404:1;23395:6;:10;;;;23366:41;22771:642;22668:745:::0;;;:::o;19042:43::-;;;;:::o;24581:107::-;24639:7;24662:20;24676:5;24662:13;:20::i;:::-;24655:27;;24581:107;;;:::o;15410:186::-;15532:4;15555:18;:25;15574:5;15555:25;;;;;;;;;;;;;;;:35;15581:8;15555:35;;;;;;;;;;;;;;;;;;;;;;;;;15548:42;;15410:186;;;;:::o;3718:201::-;3528:12;:10;:12::i;:::-;3517:23;;:7;:5;:7::i;:::-;:23;;;3509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3827:1:::1;3807:22;;:8;:22;;;;3799:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3883:28;3902:8;3883:18;:28::i;:::-;3718:201:::0;:::o;2926:98::-;2979:7;3006:10;2999:17;;2926:98;:::o;8036:157::-;8121:4;8160:25;8145:40;;;:11;:40;;;;8138:47;;8036:157;;;:::o;16339:98::-;16404:27;16414:2;16418:8;16404:27;;;;;;;;;;;;:9;:27::i;:::-;16339:98;;:::o;16228:105::-;16285:4;16315:12;;16305:7;:22;16298:29;;16228:105;;;:::o;18864:172::-;18988:2;18961:15;:24;18977:7;18961:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;19022:7;19018:2;19002:28;;19011:5;19002:28;;;;;;;;;;;;18864:172;;;:::o;17599:1260::-;17696:35;17734:20;17746:7;17734:11;:20::i;:::-;17696:58;;17763:22;17805:13;:18;;;17789:34;;:12;:10;:12::i;:::-;:34;;;:81;;;;17858:12;:10;:12::i;:::-;17834:36;;:20;17846:7;17834:11;:20::i;:::-;:36;;;17789:81;:142;;;;17881:50;17898:13;:18;;;17918:12;:10;:12::i;:::-;17881:16;:50::i;:::-;17789:142;17763:169;;17957:17;17941:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;18089:4;18067:26;;:13;:18;;;:26;;;18051:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;18178:1;18164:16;;:2;:16;;;;18156:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;18231:43;18253:4;18259:2;18263:7;18272:1;18231:21;:43::i;:::-;18282:49;18299:1;18303:7;18312:13;:18;;;18282:8;:49::i;:::-;18370:1;18340:12;:18;18353:4;18340:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18406:1;18378:12;:16;18391:2;18378:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18437:43;;;;;;;;18452:2;18437:43;;;;;;18463:15;18437:43;;;;;18414:11;:20;18426:7;18414:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18488:19;18520:1;18510:7;:11;;;;:::i;:::-;18488:33;;18573:1;18532:43;;:11;:24;18544:11;18532:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;18528:236;;;18590:20;18598:11;18590:7;:20::i;:::-;18586:171;;;18650:97;;;;;;;;18677:13;:18;;;18650:97;;;;;;18708:13;:28;;;18650:97;;;;;18623:11;:24;18635:11;18623:24;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18586:171;18528:236;18796:7;18792:2;18777:27;;18786:4;18777:27;;;;;;;;;;;;18811:42;18832:4;18838:2;18842:7;18851:1;18811:20;:42::i;:::-;17689:1170;;;17599:1260;;;:::o;12985:606::-;13061:21;;:::i;:::-;13102:16;13110:7;13102;:16::i;:::-;13094:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13174:26;13222:12;13211:7;:23;13207:93;;13291:1;13276:12;13266:7;:22;;;;:::i;:::-;:26;;;;:::i;:::-;13245:47;;13207:93;13313:12;13328:7;13313:22;;13308:212;13345:18;13337:4;:26;13308:212;;13382:31;13416:11;:17;13428:4;13416:17;;;;;;;;;;;13382:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13472:1;13446:28;;:9;:14;;;:28;;;13442:71;;13494:9;13487:16;;;;;;;13442:71;13373:147;13365:6;;;;;:::i;:::-;;;;13308:212;;;;13528:57;;;;;;;;;;:::i;:::-;;;;;;;;12985:606;;;;:::o;3928:191::-;4002:16;4021:6;;;;;;;;;;;4002:25;;4047:8;4038:6;;:17;;;;;;;;;;;;;;;;;;4102:8;4071:40;;4092:8;4071:40;;;;;;;;;;;;3991:128;3928:191;:::o;19842:690::-;19979:4;19996:15;:2;:13;;;:15::i;:::-;19992:535;;;20051:2;20035:36;;;20072:12;:10;:12::i;:::-;20086:4;20092:7;20101:5;20035:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20022:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20283:1;20266:6;:13;:18;20262:215;;;20299:61;;;;;;;;;;:::i;:::-;;;;;;;;20262:215;20445:6;20439:13;20430:6;20426:2;20422:15;20415:38;20022:464;20167:45;;;20157:55;;;:6;:55;;;;20150:62;;;;;19992:535;20515:4;20508:11;;19842:690;;;;;;;:::o;24469:108::-;24529:13;24558;24551:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24469:108;:::o;1543:533::-;1599:13;1639:1;1630:5;:10;1626:53;;;1657:10;;;;;;;;;;;;;;;;;;;;;1626:53;1689:12;1704:5;1689:20;;1720:14;1745:78;1760:1;1752:4;:9;1745:78;;1778:8;;;;;:::i;:::-;;;;1809:2;1801:10;;;;;:::i;:::-;;;1745:78;;;1833:19;1865:6;1855:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1833:39;;1883:154;1899:1;1890:5;:10;1883:154;;1927:1;1917:11;;;;;:::i;:::-;;;1994:2;1986:5;:10;;;;:::i;:::-;1973:2;:24;;;;:::i;:::-;1960:39;;1943:6;1950;1943:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2023:2;2014:11;;;;;:::i;:::-;;;1883:154;;;2061:6;2047:21;;;;;1543:533;;;;:::o;88:190::-;213:4;266;237:25;250:5;257:4;237:12;:25::i;:::-;:33;230:40;;88:190;;;;;:::o;12739:240::-;12800:7;12849:1;12832:19;;:5;:19;;;;12816:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;12940:12;:19;12953:5;12940:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;12932:41;;12925:48;;12739:240;;;:::o;16442:1152::-;16547:20;16570:12;;16547:35;;16611:1;16597:16;;:2;:16;;;;16589:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16668:21;16676:12;16668:7;:21::i;:::-;16667:22;16659:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16750:12;16738:8;:24;;16730:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16810:61;16840:1;16844:2;16848:12;16862:8;16810:21;:61::i;:::-;16880:30;16913:12;:16;16926:2;16913:16;;;;;;;;;;;;;;;16880:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16955:119;;;;;;;;17005:8;16975:11;:19;;;:39;;;;:::i;:::-;16955:119;;;;;;17058:8;17023:11;:24;;;:44;;;;:::i;:::-;16955:119;;;;;16936:12;:16;16949:2;16936:16;;;;;;;;;;;;;;;:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17109:43;;;;;;;;17124:2;17109:43;;;;;;17135:15;17109:43;;;;;17081:11;:25;17093:12;17081:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17161:20;17184:12;17161:35;;17210:9;17205:281;17229:8;17225:1;:12;17205:281;;;17283:12;17279:2;17258:38;;17275:1;17258:38;;;;;;;;;;;;17323:59;17354:1;17358:2;17362:12;17376:5;17323:22;:59::i;:::-;17305:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;17464:14;;;;;:::i;:::-;;;;17239:3;;;;;:::i;:::-;;;;17205:281;;;;17509:12;17494;:27;;;;17528:60;17557:1;17561:2;17565:12;17579:8;17528:20;:60::i;:::-;16540:1054;;;16442:1152;;;:::o;20537:141::-;;;;;:::o;20683:140::-;;;;;:::o;4151:197::-;4211:4;4229:12;4296:7;4284:20;4276:28;;4339:1;4332:4;:8;4325:15;;;4151:197;;;:::o;283:517::-;366:7;386:20;409:4;386:27;;429:9;424:339;448:5;:12;444:1;:16;424:339;;;482:20;505:5;511:1;505:8;;;;;;;;:::i;:::-;;;;;;;;482:31;;548:12;532;:28;528:224;;596:42;611:12;625;596:14;:42::i;:::-;581:57;;528:224;;;694:42;709:12;723;694:14;:42::i;:::-;679:57;;528:224;467:296;462:3;;;;;:::i;:::-;;;;424:339;;;;780:12;773:19;;;283:517;;;;:::o;808:224::-;876:13;939:1;933:4;926:15;968:1;962:4;955:15;1009:4;1003;993:21;984:30;;808:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:329::-;6415:6;6464:2;6452:9;6443:7;6439:23;6435:32;6432:119;;;6470:79;;:::i;:::-;6432:119;6590:1;6615:53;6660:7;6651:6;6640:9;6636:22;6615:53;:::i;:::-;6605:63;;6561:117;6356:329;;;;:::o;6691:327::-;6749:6;6798:2;6786:9;6777:7;6773:23;6769:32;6766:119;;;6804:79;;:::i;:::-;6766:119;6924:1;6949:52;6993:7;6984:6;6973:9;6969:22;6949:52;:::i;:::-;6939:62;;6895:116;6691:327;;;;:::o;7024:349::-;7093:6;7142:2;7130:9;7121:7;7117:23;7113:32;7110:119;;;7148:79;;:::i;:::-;7110:119;7268:1;7293:63;7348:7;7339:6;7328:9;7324:22;7293:63;:::i;:::-;7283:73;;7239:127;7024:349;;;;:::o;7379:509::-;7448:6;7497:2;7485:9;7476:7;7472:23;7468:32;7465:119;;;7503:79;;:::i;:::-;7465:119;7651:1;7640:9;7636:17;7623:31;7681:18;7673:6;7670:30;7667:117;;;7703:79;;:::i;:::-;7667:117;7808:63;7863:7;7854:6;7843:9;7839:22;7808:63;:::i;:::-;7798:73;;7594:287;7379:509;;;;:::o;7894:329::-;7953:6;8002:2;7990:9;7981:7;7977:23;7973:32;7970:119;;;8008:79;;:::i;:::-;7970:119;8128:1;8153:53;8198:7;8189:6;8178:9;8174:22;8153:53;:::i;:::-;8143:63;;8099:117;7894:329;;;;:::o;8229:704::-;8324:6;8332;8340;8389:2;8377:9;8368:7;8364:23;8360:32;8357:119;;;8395:79;;:::i;:::-;8357:119;8515:1;8540:53;8585:7;8576:6;8565:9;8561:22;8540:53;:::i;:::-;8530:63;;8486:117;8670:2;8659:9;8655:18;8642:32;8701:18;8693:6;8690:30;8687:117;;;8723:79;;:::i;:::-;8687:117;8836:80;8908:7;8899:6;8888:9;8884:22;8836:80;:::i;:::-;8818:98;;;;8613:313;8229:704;;;;;:::o;8939:911::-;9034:6;9042;9050;9058;9066;9115:3;9103:9;9094:7;9090:23;9086:33;9083:120;;;9122:79;;:::i;:::-;9083:120;9242:1;9267:53;9312:7;9303:6;9292:9;9288:22;9267:53;:::i;:::-;9257:63;;9213:117;9369:2;9395:53;9440:7;9431:6;9420:9;9416:22;9395:53;:::i;:::-;9385:63;;9340:118;9497:2;9523:53;9568:7;9559:6;9548:9;9544:22;9523:53;:::i;:::-;9513:63;;9468:118;9625:2;9651:53;9696:7;9687:6;9676:9;9672:22;9651:53;:::i;:::-;9641:63;;9596:118;9753:3;9780:53;9825:7;9816:6;9805:9;9801:22;9780:53;:::i;:::-;9770:63;;9724:119;8939:911;;;;;;;;:::o;9856:108::-;9933:24;9951:5;9933:24;:::i;:::-;9928:3;9921:37;9856:108;;:::o;9970:118::-;10057:24;10075:5;10057:24;:::i;:::-;10052:3;10045:37;9970:118;;:::o;10094:157::-;10199:45;10219:24;10237:5;10219:24;:::i;:::-;10199:45;:::i;:::-;10194:3;10187:58;10094:157;;:::o;10257:109::-;10338:21;10353:5;10338:21;:::i;:::-;10333:3;10326:34;10257:109;;:::o;10372:118::-;10459:24;10477:5;10459:24;:::i;:::-;10454:3;10447:37;10372:118;;:::o;10496:360::-;10582:3;10610:38;10642:5;10610:38;:::i;:::-;10664:70;10727:6;10722:3;10664:70;:::i;:::-;10657:77;;10743:52;10788:6;10783:3;10776:4;10769:5;10765:16;10743:52;:::i;:::-;10820:29;10842:6;10820:29;:::i;:::-;10815:3;10811:39;10804:46;;10586:270;10496:360;;;;:::o;10862:364::-;10950:3;10978:39;11011:5;10978:39;:::i;:::-;11033:71;11097:6;11092:3;11033:71;:::i;:::-;11026:78;;11113:52;11158:6;11153:3;11146:4;11139:5;11135:16;11113:52;:::i;:::-;11190:29;11212:6;11190:29;:::i;:::-;11185:3;11181:39;11174:46;;10954:272;10862:364;;;;:::o;11232:377::-;11338:3;11366:39;11399:5;11366:39;:::i;:::-;11421:89;11503:6;11498:3;11421:89;:::i;:::-;11414:96;;11519:52;11564:6;11559:3;11552:4;11545:5;11541:16;11519:52;:::i;:::-;11596:6;11591:3;11587:16;11580:23;;11342:267;11232:377;;;;:::o;11615:366::-;11757:3;11778:67;11842:2;11837:3;11778:67;:::i;:::-;11771:74;;11854:93;11943:3;11854:93;:::i;:::-;11972:2;11967:3;11963:12;11956:19;;11615:366;;;:::o;11987:::-;12129:3;12150:67;12214:2;12209:3;12150:67;:::i;:::-;12143:74;;12226:93;12315:3;12226:93;:::i;:::-;12344:2;12339:3;12335:12;12328:19;;11987:366;;;:::o;12359:::-;12501:3;12522:67;12586:2;12581:3;12522:67;:::i;:::-;12515:74;;12598:93;12687:3;12598:93;:::i;:::-;12716:2;12711:3;12707:12;12700:19;;12359:366;;;:::o;12731:::-;12873:3;12894:67;12958:2;12953:3;12894:67;:::i;:::-;12887:74;;12970:93;13059:3;12970:93;:::i;:::-;13088:2;13083:3;13079:12;13072:19;;12731:366;;;:::o;13103:::-;13245:3;13266:67;13330:2;13325:3;13266:67;:::i;:::-;13259:74;;13342:93;13431:3;13342:93;:::i;:::-;13460:2;13455:3;13451:12;13444:19;;13103:366;;;:::o;13475:::-;13617:3;13638:67;13702:2;13697:3;13638:67;:::i;:::-;13631:74;;13714:93;13803:3;13714:93;:::i;:::-;13832:2;13827:3;13823:12;13816:19;;13475:366;;;:::o;13847:::-;13989:3;14010:67;14074:2;14069:3;14010:67;:::i;:::-;14003:74;;14086:93;14175:3;14086:93;:::i;:::-;14204:2;14199:3;14195:12;14188:19;;13847:366;;;:::o;14219:::-;14361:3;14382:67;14446:2;14441:3;14382:67;:::i;:::-;14375:74;;14458:93;14547:3;14458:93;:::i;:::-;14576:2;14571:3;14567:12;14560:19;;14219:366;;;:::o;14591:::-;14733:3;14754:67;14818:2;14813:3;14754:67;:::i;:::-;14747:74;;14830:93;14919:3;14830:93;:::i;:::-;14948:2;14943:3;14939:12;14932:19;;14591:366;;;:::o;14963:::-;15105:3;15126:67;15190:2;15185:3;15126:67;:::i;:::-;15119:74;;15202:93;15291:3;15202:93;:::i;:::-;15320:2;15315:3;15311:12;15304:19;;14963:366;;;:::o;15335:::-;15477:3;15498:67;15562:2;15557:3;15498:67;:::i;:::-;15491:74;;15574:93;15663:3;15574:93;:::i;:::-;15692:2;15687:3;15683:12;15676:19;;15335:366;;;:::o;15707:::-;15849:3;15870:67;15934:2;15929:3;15870:67;:::i;:::-;15863:74;;15946:93;16035:3;15946:93;:::i;:::-;16064:2;16059:3;16055:12;16048:19;;15707:366;;;:::o;16079:::-;16221:3;16242:67;16306:2;16301:3;16242:67;:::i;:::-;16235:74;;16318:93;16407:3;16318:93;:::i;:::-;16436:2;16431:3;16427:12;16420:19;;16079:366;;;:::o;16451:::-;16593:3;16614:67;16678:2;16673:3;16614:67;:::i;:::-;16607:74;;16690:93;16779:3;16690:93;:::i;:::-;16808:2;16803:3;16799:12;16792:19;;16451:366;;;:::o;16823:::-;16965:3;16986:67;17050:2;17045:3;16986:67;:::i;:::-;16979:74;;17062:93;17151:3;17062:93;:::i;:::-;17180:2;17175:3;17171:12;17164:19;;16823:366;;;:::o;17195:400::-;17355:3;17376:84;17458:1;17453:3;17376:84;:::i;:::-;17369:91;;17469:93;17558:3;17469:93;:::i;:::-;17587:1;17582:3;17578:11;17571:18;;17195:400;;;:::o;17601:366::-;17743:3;17764:67;17828:2;17823:3;17764:67;:::i;:::-;17757:74;;17840:93;17929:3;17840:93;:::i;:::-;17958:2;17953:3;17949:12;17942:19;;17601:366;;;:::o;17973:::-;18115:3;18136:67;18200:2;18195:3;18136:67;:::i;:::-;18129:74;;18212:93;18301:3;18212:93;:::i;:::-;18330:2;18325:3;18321:12;18314:19;;17973:366;;;:::o;18345:::-;18487:3;18508:67;18572:2;18567:3;18508:67;:::i;:::-;18501:74;;18584:93;18673:3;18584:93;:::i;:::-;18702:2;18697:3;18693:12;18686:19;;18345:366;;;:::o;18717:::-;18859:3;18880:67;18944:2;18939:3;18880:67;:::i;:::-;18873:74;;18956:93;19045:3;18956:93;:::i;:::-;19074:2;19069:3;19065:12;19058:19;;18717:366;;;:::o;19089:::-;19231:3;19252:67;19316:2;19311:3;19252:67;:::i;:::-;19245:74;;19328:93;19417:3;19328:93;:::i;:::-;19446:2;19441:3;19437:12;19430:19;;19089:366;;;:::o;19461:398::-;19620:3;19641:83;19722:1;19717:3;19641:83;:::i;:::-;19634:90;;19733:93;19822:3;19733:93;:::i;:::-;19851:1;19846:3;19842:11;19835:18;;19461:398;;;:::o;19865:366::-;20007:3;20028:67;20092:2;20087:3;20028:67;:::i;:::-;20021:74;;20104:93;20193:3;20104:93;:::i;:::-;20222:2;20217:3;20213:12;20206:19;;19865:366;;;:::o;20237:::-;20379:3;20400:67;20464:2;20459:3;20400:67;:::i;:::-;20393:74;;20476:93;20565:3;20476:93;:::i;:::-;20594:2;20589:3;20585:12;20578:19;;20237:366;;;:::o;20609:::-;20751:3;20772:67;20836:2;20831:3;20772:67;:::i;:::-;20765:74;;20848:93;20937:3;20848:93;:::i;:::-;20966:2;20961:3;20957:12;20950:19;;20609:366;;;:::o;20981:::-;21123:3;21144:67;21208:2;21203:3;21144:67;:::i;:::-;21137:74;;21220:93;21309:3;21220:93;:::i;:::-;21338:2;21333:3;21329:12;21322:19;;20981:366;;;:::o;21353:::-;21495:3;21516:67;21580:2;21575:3;21516:67;:::i;:::-;21509:74;;21592:93;21681:3;21592:93;:::i;:::-;21710:2;21705:3;21701:12;21694:19;;21353:366;;;:::o;21725:::-;21867:3;21888:67;21952:2;21947:3;21888:67;:::i;:::-;21881:74;;21964:93;22053:3;21964:93;:::i;:::-;22082:2;22077:3;22073:12;22066:19;;21725:366;;;:::o;22097:::-;22239:3;22260:67;22324:2;22319:3;22260:67;:::i;:::-;22253:74;;22336:93;22425:3;22336:93;:::i;:::-;22454:2;22449:3;22445:12;22438:19;;22097:366;;;:::o;22469:::-;22611:3;22632:67;22696:2;22691:3;22632:67;:::i;:::-;22625:74;;22708:93;22797:3;22708:93;:::i;:::-;22826:2;22821:3;22817:12;22810:19;;22469:366;;;:::o;22841:::-;22983:3;23004:67;23068:2;23063:3;23004:67;:::i;:::-;22997:74;;23080:93;23169:3;23080:93;:::i;:::-;23198:2;23193:3;23189:12;23182:19;;22841:366;;;:::o;23213:::-;23355:3;23376:67;23440:2;23435:3;23376:67;:::i;:::-;23369:74;;23452:93;23541:3;23452:93;:::i;:::-;23570:2;23565:3;23561:12;23554:19;;23213:366;;;:::o;23585:::-;23727:3;23748:67;23812:2;23807:3;23748:67;:::i;:::-;23741:74;;23824:93;23913:3;23824:93;:::i;:::-;23942:2;23937:3;23933:12;23926:19;;23585:366;;;:::o;24027:527::-;24186:4;24181:3;24177:14;24273:4;24266:5;24262:16;24256:23;24292:63;24349:4;24344:3;24340:14;24326:12;24292:63;:::i;:::-;24201:164;24457:4;24450:5;24446:16;24440:23;24476:61;24531:4;24526:3;24522:14;24508:12;24476:61;:::i;:::-;24375:172;24155:399;24027:527;;:::o;24560:118::-;24647:24;24665:5;24647:24;:::i;:::-;24642:3;24635:37;24560:118;;:::o;24684:105::-;24759:23;24776:5;24759:23;:::i;:::-;24754:3;24747:36;24684:105;;:::o;24795:256::-;24907:3;24922:75;24993:3;24984:6;24922:75;:::i;:::-;25022:2;25017:3;25013:12;25006:19;;25042:3;25035:10;;24795:256;;;;:::o;25057:701::-;25338:3;25360:95;25451:3;25442:6;25360:95;:::i;:::-;25353:102;;25472:95;25563:3;25554:6;25472:95;:::i;:::-;25465:102;;25584:148;25728:3;25584:148;:::i;:::-;25577:155;;25749:3;25742:10;;25057:701;;;;;:::o;25764:379::-;25948:3;25970:147;26113:3;25970:147;:::i;:::-;25963:154;;26134:3;26127:10;;25764:379;;;:::o;26149:222::-;26242:4;26280:2;26269:9;26265:18;26257:26;;26293:71;26361:1;26350:9;26346:17;26337:6;26293:71;:::i;:::-;26149:222;;;;:::o;26377:640::-;26572:4;26610:3;26599:9;26595:19;26587:27;;26624:71;26692:1;26681:9;26677:17;26668:6;26624:71;:::i;:::-;26705:72;26773:2;26762:9;26758:18;26749:6;26705:72;:::i;:::-;26787;26855:2;26844:9;26840:18;26831:6;26787:72;:::i;:::-;26906:9;26900:4;26896:20;26891:2;26880:9;26876:18;26869:48;26934:76;27005:4;26996:6;26934:76;:::i;:::-;26926:84;;26377:640;;;;;;;:::o;27023:210::-;27110:4;27148:2;27137:9;27133:18;27125:26;;27161:65;27223:1;27212:9;27208:17;27199:6;27161:65;:::i;:::-;27023:210;;;;:::o;27239:222::-;27332:4;27370:2;27359:9;27355:18;27347:26;;27383:71;27451:1;27440:9;27436:17;27427:6;27383:71;:::i;:::-;27239:222;;;;:::o;27467:313::-;27580:4;27618:2;27607:9;27603:18;27595:26;;27667:9;27661:4;27657:20;27653:1;27642:9;27638:17;27631:47;27695:78;27768:4;27759:6;27695:78;:::i;:::-;27687:86;;27467:313;;;;:::o;27786:419::-;27952:4;27990:2;27979:9;27975:18;27967:26;;28039:9;28033:4;28029:20;28025:1;28014:9;28010:17;28003:47;28067:131;28193:4;28067:131;:::i;:::-;28059:139;;27786:419;;;:::o;28211:::-;28377:4;28415:2;28404:9;28400:18;28392:26;;28464:9;28458:4;28454:20;28450:1;28439:9;28435:17;28428:47;28492:131;28618:4;28492:131;:::i;:::-;28484:139;;28211:419;;;:::o;28636:::-;28802:4;28840:2;28829:9;28825:18;28817:26;;28889:9;28883:4;28879:20;28875:1;28864:9;28860:17;28853:47;28917:131;29043:4;28917:131;:::i;:::-;28909:139;;28636:419;;;:::o;29061:::-;29227:4;29265:2;29254:9;29250:18;29242:26;;29314:9;29308:4;29304:20;29300:1;29289:9;29285:17;29278:47;29342:131;29468:4;29342:131;:::i;:::-;29334:139;;29061:419;;;:::o;29486:::-;29652:4;29690:2;29679:9;29675:18;29667:26;;29739:9;29733:4;29729:20;29725:1;29714:9;29710:17;29703:47;29767:131;29893:4;29767:131;:::i;:::-;29759:139;;29486:419;;;:::o;29911:::-;30077:4;30115:2;30104:9;30100:18;30092:26;;30164:9;30158:4;30154:20;30150:1;30139:9;30135:17;30128:47;30192:131;30318:4;30192:131;:::i;:::-;30184:139;;29911:419;;;:::o;30336:::-;30502:4;30540:2;30529:9;30525:18;30517:26;;30589:9;30583:4;30579:20;30575:1;30564:9;30560:17;30553:47;30617:131;30743:4;30617:131;:::i;:::-;30609:139;;30336:419;;;:::o;30761:::-;30927:4;30965:2;30954:9;30950:18;30942:26;;31014:9;31008:4;31004:20;31000:1;30989:9;30985:17;30978:47;31042:131;31168:4;31042:131;:::i;:::-;31034:139;;30761:419;;;:::o;31186:::-;31352:4;31390:2;31379:9;31375:18;31367:26;;31439:9;31433:4;31429:20;31425:1;31414:9;31410:17;31403:47;31467:131;31593:4;31467:131;:::i;:::-;31459:139;;31186:419;;;:::o;31611:::-;31777:4;31815:2;31804:9;31800:18;31792:26;;31864:9;31858:4;31854:20;31850:1;31839:9;31835:17;31828:47;31892:131;32018:4;31892:131;:::i;:::-;31884:139;;31611:419;;;:::o;32036:::-;32202:4;32240:2;32229:9;32225:18;32217:26;;32289:9;32283:4;32279:20;32275:1;32264:9;32260:17;32253:47;32317:131;32443:4;32317:131;:::i;:::-;32309:139;;32036:419;;;:::o;32461:::-;32627:4;32665:2;32654:9;32650:18;32642:26;;32714:9;32708:4;32704:20;32700:1;32689:9;32685:17;32678:47;32742:131;32868:4;32742:131;:::i;:::-;32734:139;;32461:419;;;:::o;32886:::-;33052:4;33090:2;33079:9;33075:18;33067:26;;33139:9;33133:4;33129:20;33125:1;33114:9;33110:17;33103:47;33167:131;33293:4;33167:131;:::i;:::-;33159:139;;32886:419;;;:::o;33311:::-;33477:4;33515:2;33504:9;33500:18;33492:26;;33564:9;33558:4;33554:20;33550:1;33539:9;33535:17;33528:47;33592:131;33718:4;33592:131;:::i;:::-;33584:139;;33311:419;;;:::o;33736:::-;33902:4;33940:2;33929:9;33925:18;33917:26;;33989:9;33983:4;33979:20;33975:1;33964:9;33960:17;33953:47;34017:131;34143:4;34017:131;:::i;:::-;34009:139;;33736:419;;;:::o;34161:::-;34327:4;34365:2;34354:9;34350:18;34342:26;;34414:9;34408:4;34404:20;34400:1;34389:9;34385:17;34378:47;34442:131;34568:4;34442:131;:::i;:::-;34434:139;;34161:419;;;:::o;34586:::-;34752:4;34790:2;34779:9;34775:18;34767:26;;34839:9;34833:4;34829:20;34825:1;34814:9;34810:17;34803:47;34867:131;34993:4;34867:131;:::i;:::-;34859:139;;34586:419;;;:::o;35011:::-;35177:4;35215:2;35204:9;35200:18;35192:26;;35264:9;35258:4;35254:20;35250:1;35239:9;35235:17;35228:47;35292:131;35418:4;35292:131;:::i;:::-;35284:139;;35011:419;;;:::o;35436:::-;35602:4;35640:2;35629:9;35625:18;35617:26;;35689:9;35683:4;35679:20;35675:1;35664:9;35660:17;35653:47;35717:131;35843:4;35717:131;:::i;:::-;35709:139;;35436:419;;;:::o;35861:::-;36027:4;36065:2;36054:9;36050:18;36042:26;;36114:9;36108:4;36104:20;36100:1;36089:9;36085:17;36078:47;36142:131;36268:4;36142:131;:::i;:::-;36134:139;;35861:419;;;:::o;36286:::-;36452:4;36490:2;36479:9;36475:18;36467:26;;36539:9;36533:4;36529:20;36525:1;36514:9;36510:17;36503:47;36567:131;36693:4;36567:131;:::i;:::-;36559:139;;36286:419;;;:::o;36711:::-;36877:4;36915:2;36904:9;36900:18;36892:26;;36964:9;36958:4;36954:20;36950:1;36939:9;36935:17;36928:47;36992:131;37118:4;36992:131;:::i;:::-;36984:139;;36711:419;;;:::o;37136:::-;37302:4;37340:2;37329:9;37325:18;37317:26;;37389:9;37383:4;37379:20;37375:1;37364:9;37360:17;37353:47;37417:131;37543:4;37417:131;:::i;:::-;37409:139;;37136:419;;;:::o;37561:::-;37727:4;37765:2;37754:9;37750:18;37742:26;;37814:9;37808:4;37804:20;37800:1;37789:9;37785:17;37778:47;37842:131;37968:4;37842:131;:::i;:::-;37834:139;;37561:419;;;:::o;37986:::-;38152:4;38190:2;38179:9;38175:18;38167:26;;38239:9;38233:4;38229:20;38225:1;38214:9;38210:17;38203:47;38267:131;38393:4;38267:131;:::i;:::-;38259:139;;37986:419;;;:::o;38411:::-;38577:4;38615:2;38604:9;38600:18;38592:26;;38664:9;38658:4;38654:20;38650:1;38639:9;38635:17;38628:47;38692:131;38818:4;38692:131;:::i;:::-;38684:139;;38411:419;;;:::o;38836:::-;39002:4;39040:2;39029:9;39025:18;39017:26;;39089:9;39083:4;39079:20;39075:1;39064:9;39060:17;39053:47;39117:131;39243:4;39117:131;:::i;:::-;39109:139;;38836:419;;;:::o;39261:::-;39427:4;39465:2;39454:9;39450:18;39442:26;;39514:9;39508:4;39504:20;39500:1;39489:9;39485:17;39478:47;39542:131;39668:4;39542:131;:::i;:::-;39534:139;;39261:419;;;:::o;39686:::-;39852:4;39890:2;39879:9;39875:18;39867:26;;39939:9;39933:4;39929:20;39925:1;39914:9;39910:17;39903:47;39967:131;40093:4;39967:131;:::i;:::-;39959:139;;39686:419;;;:::o;40111:::-;40277:4;40315:2;40304:9;40300:18;40292:26;;40364:9;40358:4;40354:20;40350:1;40339:9;40335:17;40328:47;40392:131;40518:4;40392:131;:::i;:::-;40384:139;;40111:419;;;:::o;40536:::-;40702:4;40740:2;40729:9;40725:18;40717:26;;40789:9;40783:4;40779:20;40775:1;40764:9;40760:17;40753:47;40817:131;40943:4;40817:131;:::i;:::-;40809:139;;40536:419;;;:::o;40961:346::-;41116:4;41154:2;41143:9;41139:18;41131:26;;41167:133;41297:1;41286:9;41282:17;41273:6;41167:133;:::i;:::-;40961:346;;;;:::o;41313:222::-;41406:4;41444:2;41433:9;41429:18;41421:26;;41457:71;41525:1;41514:9;41510:17;41501:6;41457:71;:::i;:::-;41313:222;;;;:::o;41541:129::-;41575:6;41602:20;;:::i;:::-;41592:30;;41631:33;41659:4;41651:6;41631:33;:::i;:::-;41541:129;;;:::o;41676:75::-;41709:6;41742:2;41736:9;41726:19;;41676:75;:::o;41757:307::-;41818:4;41908:18;41900:6;41897:30;41894:56;;;41930:18;;:::i;:::-;41894:56;41968:29;41990:6;41968:29;:::i;:::-;41960:37;;42052:4;42046;42042:15;42034:23;;41757:307;;;:::o;42070:308::-;42132:4;42222:18;42214:6;42211:30;42208:56;;;42244:18;;:::i;:::-;42208:56;42282:29;42304:6;42282:29;:::i;:::-;42274:37;;42366:4;42360;42356:15;42348:23;;42070:308;;;:::o;42384:98::-;42435:6;42469:5;42463:12;42453:22;;42384:98;;;:::o;42488:99::-;42540:6;42574:5;42568:12;42558:22;;42488:99;;;:::o;42593:168::-;42676:11;42710:6;42705:3;42698:19;42750:4;42745:3;42741:14;42726:29;;42593:168;;;;:::o;42767:147::-;42868:11;42905:3;42890:18;;42767:147;;;;:::o;42920:169::-;43004:11;43038:6;43033:3;43026:19;43078:4;43073:3;43069:14;43054:29;;42920:169;;;;:::o;43095:148::-;43197:11;43234:3;43219:18;;43095:148;;;;:::o;43249:273::-;43289:3;43308:20;43326:1;43308:20;:::i;:::-;43303:25;;43342:20;43360:1;43342:20;:::i;:::-;43337:25;;43464:1;43428:34;43424:42;43421:1;43418:49;43415:75;;;43470:18;;:::i;:::-;43415:75;43514:1;43511;43507:9;43500:16;;43249:273;;;;:::o;43528:305::-;43568:3;43587:20;43605:1;43587:20;:::i;:::-;43582:25;;43621:20;43639:1;43621:20;:::i;:::-;43616:25;;43775:1;43707:66;43703:74;43700:1;43697:81;43694:107;;;43781:18;;:::i;:::-;43694:107;43825:1;43822;43818:9;43811:16;;43528:305;;;;:::o;43839:185::-;43879:1;43896:20;43914:1;43896:20;:::i;:::-;43891:25;;43930:20;43948:1;43930:20;:::i;:::-;43925:25;;43969:1;43959:35;;43974:18;;:::i;:::-;43959:35;44016:1;44013;44009:9;44004:14;;43839:185;;;;:::o;44030:348::-;44070:7;44093:20;44111:1;44093:20;:::i;:::-;44088:25;;44127:20;44145:1;44127:20;:::i;:::-;44122:25;;44315:1;44247:66;44243:74;44240:1;44237:81;44232:1;44225:9;44218:17;44214:105;44211:131;;;44322:18;;:::i;:::-;44211:131;44370:1;44367;44363:9;44352:20;;44030:348;;;;:::o;44384:191::-;44424:4;44444:20;44462:1;44444:20;:::i;:::-;44439:25;;44478:20;44496:1;44478:20;:::i;:::-;44473:25;;44517:1;44514;44511:8;44508:34;;;44522:18;;:::i;:::-;44508:34;44567:1;44564;44560:9;44552:17;;44384:191;;;;:::o;44581:::-;44621:4;44641:20;44659:1;44641:20;:::i;:::-;44636:25;;44675:20;44693:1;44675:20;:::i;:::-;44670:25;;44714:1;44711;44708:8;44705:34;;;44719:18;;:::i;:::-;44705:34;44764:1;44761;44757:9;44749:17;;44581:191;;;;:::o;44778:96::-;44815:7;44844:24;44862:5;44844:24;:::i;:::-;44833:35;;44778:96;;;:::o;44880:90::-;44914:7;44957:5;44950:13;44943:21;44932:32;;44880:90;;;:::o;44976:77::-;45013:7;45042:5;45031:16;;44976:77;;;:::o;45059:149::-;45095:7;45135:66;45128:5;45124:78;45113:89;;45059:149;;;:::o;45214:118::-;45251:7;45291:34;45284:5;45280:46;45269:57;;45214:118;;;:::o;45338:126::-;45375:7;45415:42;45408:5;45404:54;45393:65;;45338:126;;;:::o;45470:77::-;45507:7;45536:5;45525:16;;45470:77;;;:::o;45553:101::-;45589:7;45629:18;45622:5;45618:30;45607:41;;45553:101;;;:::o;45660:154::-;45744:6;45739:3;45734;45721:30;45806:1;45797:6;45792:3;45788:16;45781:27;45660:154;;;:::o;45820:307::-;45888:1;45898:113;45912:6;45909:1;45906:13;45898:113;;;45997:1;45992:3;45988:11;45982:18;45978:1;45973:3;45969:11;45962:39;45934:2;45931:1;45927:10;45922:15;;45898:113;;;46029:6;46026:1;46023:13;46020:101;;;46109:1;46100:6;46095:3;46091:16;46084:27;46020:101;45869:258;45820:307;;;:::o;46133:171::-;46172:3;46195:24;46213:5;46195:24;:::i;:::-;46186:33;;46241:4;46234:5;46231:15;46228:41;;;46249:18;;:::i;:::-;46228:41;46296:1;46289:5;46285:13;46278:20;;46133:171;;;:::o;46310:320::-;46354:6;46391:1;46385:4;46381:12;46371:22;;46438:1;46432:4;46428:12;46459:18;46449:81;;46515:4;46507:6;46503:17;46493:27;;46449:81;46577:2;46569:6;46566:14;46546:18;46543:38;46540:84;;;46596:18;;:::i;:::-;46540:84;46361:269;46310:320;;;:::o;46636:281::-;46719:27;46741:4;46719:27;:::i;:::-;46711:6;46707:40;46849:6;46837:10;46834:22;46813:18;46801:10;46798:34;46795:62;46792:88;;;46860:18;;:::i;:::-;46792:88;46900:10;46896:2;46889:22;46679:238;46636:281;;:::o;46923:233::-;46962:3;46985:24;47003:5;46985:24;:::i;:::-;46976:33;;47031:66;47024:5;47021:77;47018:103;;;47101:18;;:::i;:::-;47018:103;47148:1;47141:5;47137:13;47130:20;;46923:233;;;:::o;47162:100::-;47201:7;47230:26;47250:5;47230:26;:::i;:::-;47219:37;;47162:100;;;:::o;47268:94::-;47307:7;47336:20;47350:5;47336:20;:::i;:::-;47325:31;;47268:94;;;:::o;47368:176::-;47400:1;47417:20;47435:1;47417:20;:::i;:::-;47412:25;;47451:20;47469:1;47451:20;:::i;:::-;47446:25;;47490:1;47480:35;;47495:18;;:::i;:::-;47480:35;47536:1;47533;47529:9;47524:14;;47368:176;;;;:::o;47550:180::-;47598:77;47595:1;47588:88;47695:4;47692:1;47685:15;47719:4;47716:1;47709:15;47736:180;47784:77;47781:1;47774:88;47881:4;47878:1;47871:15;47905:4;47902:1;47895:15;47922:180;47970:77;47967:1;47960:88;48067:4;48064:1;48057:15;48091:4;48088:1;48081:15;48108:180;48156:77;48153:1;48146:88;48253:4;48250:1;48243:15;48277:4;48274:1;48267:15;48294:180;48342:77;48339:1;48332:88;48439:4;48436:1;48429:15;48463:4;48460:1;48453:15;48480:117;48589:1;48586;48579:12;48603:117;48712:1;48709;48702:12;48726:117;48835:1;48832;48825:12;48849:117;48958:1;48955;48948:12;48972:117;49081:1;49078;49071:12;49095:117;49204:1;49201;49194:12;49218:102;49259:6;49310:2;49306:7;49301:2;49294:5;49290:14;49286:28;49276:38;;49218:102;;;:::o;49326:94::-;49359:8;49407:5;49403:2;49399:14;49378:35;;49326:94;;;:::o;49426:221::-;49566:34;49562:1;49554:6;49550:14;49543:58;49635:4;49630:2;49622:6;49618:15;49611:29;49426:221;:::o;49653:225::-;49793:34;49789:1;49781:6;49777:14;49770:58;49862:8;49857:2;49849:6;49845:15;49838:33;49653:225;:::o;49884:174::-;50024:26;50020:1;50012:6;50008:14;50001:50;49884:174;:::o;50064:229::-;50204:34;50200:1;50192:6;50188:14;50181:58;50273:12;50268:2;50260:6;50256:15;50249:37;50064:229;:::o;50299:222::-;50439:34;50435:1;50427:6;50423:14;50416:58;50508:5;50503:2;50495:6;50491:15;50484:30;50299:222;:::o;50527:224::-;50667:34;50663:1;50655:6;50651:14;50644:58;50736:7;50731:2;50723:6;50719:15;50712:32;50527:224;:::o;50757:236::-;50897:34;50893:1;50885:6;50881:14;50874:58;50966:19;50961:2;50953:6;50949:15;50942:44;50757:236;:::o;50999:168::-;51139:20;51135:1;51127:6;51123:14;51116:44;50999:168;:::o;51173:180::-;51313:32;51309:1;51301:6;51297:14;51290:56;51173:180;:::o;51359:165::-;51499:17;51495:1;51487:6;51483:14;51476:41;51359:165;:::o;51530:244::-;51670:34;51666:1;51658:6;51654:14;51647:58;51739:27;51734:2;51726:6;51722:15;51715:52;51530:244;:::o;51780:180::-;51920:32;51916:1;51908:6;51904:14;51897:56;51780:180;:::o;51966:230::-;52106:34;52102:1;52094:6;52090:14;52083:58;52175:13;52170:2;52162:6;52158:15;52151:38;51966:230;:::o;52202:168::-;52342:20;52338:1;52330:6;52326:14;52319:44;52202:168;:::o;52376:225::-;52516:34;52512:1;52504:6;52500:14;52493:58;52585:8;52580:2;52572:6;52568:15;52561:33;52376:225;:::o;52607:155::-;52747:7;52743:1;52735:6;52731:14;52724:31;52607:155;:::o;52768:182::-;52908:34;52904:1;52896:6;52892:14;52885:58;52768:182;:::o;52956:234::-;53096:34;53092:1;53084:6;53080:14;53073:58;53165:17;53160:2;53152:6;53148:15;53141:42;52956:234;:::o;53196:176::-;53336:28;53332:1;53324:6;53320:14;53313:52;53196:176;:::o;53378:237::-;53518:34;53514:1;53506:6;53502:14;53495:58;53587:20;53582:2;53574:6;53570:15;53563:45;53378:237;:::o;53621:221::-;53761:34;53757:1;53749:6;53745:14;53738:58;53830:4;53825:2;53817:6;53813:15;53806:29;53621:221;:::o;53848:114::-;;:::o;53968:166::-;54108:18;54104:1;54096:6;54092:14;54085:42;53968:166;:::o;54140:238::-;54280:34;54276:1;54268:6;54264:14;54257:58;54349:21;54344:2;54336:6;54332:15;54325:46;54140:238;:::o;54384:172::-;54524:24;54520:1;54512:6;54508:14;54501:48;54384:172;:::o;54562:179::-;54702:31;54698:1;54690:6;54686:14;54679:55;54562:179;:::o;54747:220::-;54887:34;54883:1;54875:6;54871:14;54864:58;54956:3;54951:2;54943:6;54939:15;54932:28;54747:220;:::o;54973:172::-;55113:24;55109:1;55101:6;55097:14;55090:48;54973:172;:::o;55151:233::-;55291:34;55287:1;55279:6;55275:14;55268:58;55360:16;55355:2;55347:6;55343:15;55336:41;55151:233;:::o;55390:181::-;55530:33;55526:1;55518:6;55514:14;55507:57;55390:181;:::o;55577:234::-;55717:34;55713:1;55705:6;55701:14;55694:58;55786:17;55781:2;55773:6;55769:15;55762:42;55577:234;:::o;55817:232::-;55957:34;55953:1;55945:6;55941:14;55934:58;56026:15;56021:2;56013:6;56009:15;56002:40;55817:232;:::o;56055:221::-;56195:34;56191:1;56183:6;56179:14;56172:58;56264:4;56259:2;56251:6;56247:15;56240:29;56055:221;:::o;56282:122::-;56355:24;56373:5;56355:24;:::i;:::-;56348:5;56345:35;56335:63;;56394:1;56391;56384:12;56335:63;56282:122;:::o;56410:116::-;56480:21;56495:5;56480:21;:::i;:::-;56473:5;56470:32;56460:60;;56516:1;56513;56506:12;56460:60;56410:116;:::o;56532:122::-;56605:24;56623:5;56605:24;:::i;:::-;56598:5;56595:35;56585:63;;56644:1;56641;56634:12;56585:63;56532:122;:::o;56660:120::-;56732:23;56749:5;56732:23;:::i;:::-;56725:5;56722:34;56712:62;;56770:1;56767;56760:12;56712:62;56660:120;:::o;56786:122::-;56859:24;56877:5;56859:24;:::i;:::-;56852:5;56849:35;56839:63;;56898:1;56895;56888:12;56839:63;56786:122;:::o

Swarm Source

ipfs://07ec9c2ce568f4724d6d510a40c9575867b66ca6259495594402d750e7c95482

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

SpacedHeadz NFTs: a collection of 5555 SpacedHeadz NFTs on the ETH Network designed to launch a new fun and friendly Web 3 Brand

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.