ETH Price: $2,671.85 (+1.31%)

Contract

0xcE7D9CCe3561B12913Ab58C9699234070CdCe458
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Safe Transfer Fr...158295212022-10-26 3:20:59667 days ago1666754459IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008438611.94749998
Set Approval For...157291832022-10-12 2:55:59681 days ago1665543359IN
0xcE7D9CCe...70CdCe458
0 ETH0.0010579122.65012617
Safe Transfer Fr...157079212022-10-09 3:42:11684 days ago1665286931IN
0xcE7D9CCe...70CdCe458
0 ETH0.0020100329.77124156
Safe Transfer Fr...157070542022-10-09 0:47:59684 days ago1665276479IN
0xcE7D9CCe...70CdCe458
0 ETH0.0020688322.99446055
Safe Transfer Fr...157070502022-10-09 0:47:11684 days ago1665276431IN
0xcE7D9CCe...70CdCe458
0 ETH0.0020837323.75137409
Set Approval For...157067852022-10-08 23:53:59684 days ago1665273239IN
0xcE7D9CCe...70CdCe458
0 ETH0.0011790825.24431405
Reveal Puxxies157065852022-10-08 23:13:59684 days ago1665270839IN
0xcE7D9CCe...70CdCe458
0 ETH0.0009173421.00734154
Safe Transfer Fr...157036282022-10-08 13:19:23684 days ago1665235163IN
0xcE7D9CCe...70CdCe458
0 ETH0.00050785.78823452
Set Approval For...157001182022-10-08 1:34:35685 days ago1665192875IN
0xcE7D9CCe...70CdCe458
0 ETH0.000260165.57005903
Set Approval For...156849802022-10-05 22:47:11687 days ago1665010031IN
0xcE7D9CCe...70CdCe458
0 ETH0.001138524.3754216
Set Approval For...156839492022-10-05 19:19:59687 days ago1664997599IN
0xcE7D9CCe...70CdCe458
0 ETH0.0007525816.11284009
Set Approval For...156839492022-10-05 19:19:59687 days ago1664997599IN
0xcE7D9CCe...70CdCe458
0 ETH0.0007525816.11284009
Set Approval For...156839492022-10-05 19:19:59687 days ago1664997599IN
0xcE7D9CCe...70CdCe458
0 ETH0.0007525816.11284009
Set Approval For...156839492022-10-05 19:19:59687 days ago1664997599IN
0xcE7D9CCe...70CdCe458
0 ETH0.0007525816.11284009
Set Approval For...156839492022-10-05 19:19:59687 days ago1664997599IN
0xcE7D9CCe...70CdCe458
0 ETH0.0007525816.11284009
Set Approval For...156839492022-10-05 19:19:59687 days ago1664997599IN
0xcE7D9CCe...70CdCe458
0 ETH0.0007525816.11284009
Set Approval For...156839412022-10-05 19:18:23687 days ago1664997503IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008093717.32876159
Set Approval For...156839412022-10-05 19:18:23687 days ago1664997503IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008093717.32876159
Set Approval For...156839412022-10-05 19:18:23687 days ago1664997503IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008093717.32876159
Set Approval For...156839412022-10-05 19:18:23687 days ago1664997503IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008093717.32876159
Set Approval For...156839412022-10-05 19:18:23687 days ago1664997503IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008093717.32876159
Set Approval For...156839412022-10-05 19:18:23687 days ago1664997503IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008093717.32876159
Set Approval For...156839412022-10-05 19:18:23687 days ago1664997503IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008093717.32876159
Set Approval For...156839412022-10-05 19:18:23687 days ago1664997503IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008093717.32876159
Set Approval For...156839412022-10-05 19:18:23687 days ago1664997503IN
0xcE7D9CCe...70CdCe458
0 ETH0.0008093717.32876159
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Puxxies_Gang

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-10-05
*/

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


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;
    }
}



pragma solidity ^0.8.0;


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    
    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);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}



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 verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(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++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }


    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

  
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

 
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

   
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
   
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
    
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

  
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
  
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

      
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
      
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

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



pragma solidity ^0.8.0;


library Counters {
    struct Counter {
      
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}


pragma solidity ^0.8.0;


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.0;



abstract contract Ownable is Context {
    address private _owner;

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

  
    constructor() {
        _transferOwnership(_msgSender());
    }

 
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

   
    function owner() public view virtual returns (address) {
        return _owner;
    }

   
    function _checkOwner() internal view virtual {
        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);
    }
}



pragma solidity ^0.8.4;


interface IERC721A {
   
    error ApprovalCallerNotOwnerNorApproved();

 
    error ApprovalQueryForNonexistentToken();

 
    error ApproveToCaller();

 
    error BalanceQueryForZeroAddress();

   
    error MintToZeroAddress();

 
    error MintZeroQuantity();

 
    error OwnerQueryForNonexistentToken();

 
    error TransferCallerNotOwnerNorApproved();

 
    error TransferFromIncorrectOwner();

 
    error TransferToNonERC721ReceiverImplementer();


    error TransferToZeroAddress();

 
    error URIQueryForNonexistentToken();

  
    error MintERC2309QuantityExceedsLimit();

 
    error OwnershipNotInitializedForExtraData();

   
    struct TokenOwnership {
        
        address addr;
      
        uint64 startTimestamp;

        bool burned;

        uint24 extraData;
    }


    function totalSupply() external view returns (uint256);


    function supportsInterface(bytes4 interfaceId) external view returns (bool);

 
    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,
        bytes calldata data
    ) external;

  
    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 setApprovalForAll(address operator, bool _approved) external;

  
    function getApproved(uint256 tokenId) external view returns (address operator);

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);


    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}



pragma solidity ^0.8.4;



interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


contract ERC721A is IERC721A {

    struct TokenApprovalRef {
        address value;
    }

  
    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    uint256 private constant _BITPOS_AUX = 192;

    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    uint256 private constant _BITMASK_BURNED = 1 << 224;

    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

   
    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;

  
    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

  
    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

  
    uint256 private _currentIndex;

  
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    
    mapping(uint256 => uint256) private _packedOwnerships;

 
    mapping(address => uint256) private _packedAddressData;

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

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

 
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

  
    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

 
    function totalSupply() public view virtual override returns (uint256) {
     
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }


    function _totalMinted() internal view virtual returns (uint256) {
      
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

 
    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }

  
    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

   
    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

  
    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

  
    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }


    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
       
        return
            interfaceId == 0x01ffc9a7 || 
            interfaceId == 0x80ac58cd || 
            interfaceId == 0x5b5e139f;
    }

 
    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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }


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

  
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

 
    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

  
    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

   
    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

  
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                 
                    if (packed & _BITMASK_BURNED == 0) {
                       
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

 
    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP);
        ownership.burned = packed & _BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA);
    }

 
    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
           
            owner := and(owner, _BITMASK_ADDRESS)
          
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

   
    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
       
        assembly {
        
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

   
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId].value = to;
        emit Approval(owner, to, tokenId);
    }

 
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }

  
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();

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

 
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

  
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && 
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; 
    }

  
    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            
            owner := and(owner, _BITMASK_ADDRESS)         
            msgSender := and(msgSender, _BITMASK_ADDRESS)  
            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

 
    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];
        
        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }


    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

       
        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

       
        assembly {
            if approvedAddress {
                
                sstore(approvedAddressSlot, 0)
            }
        }

      
        unchecked {
          
            --_packedAddressData[from]; 
            ++_packedAddressData[to];

           
            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

          
            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
               
                if (_packedOwnerships[nextTokenId] == 0) {
                   
                    if (nextTokenId != _currentIndex) {
                      
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

 
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

  
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}


    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}


    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }


    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

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

      
        unchecked {
          
            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

          
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

          
            assembly {
               
                toMasked := and(to, _BITMASK_ADDRESS)
               
                log4(
                    0,
                    0, 
                    _TRANSFER_EVENT_SIGNATURE, 
                    0, 
                    toMasked, 
                    startTokenId 
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {
                    
                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

 
    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

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

      
        unchecked {
          
            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

 
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                
                if (_currentIndex != end) revert();
            }
        }
    }

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

  
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

   
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
          
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

      
        assembly {
            if approvedAddress {
             
                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {
          
            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

         
            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

           
            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
               
                if (_packedOwnerships[nextTokenId] == 0) {
                    
                    if (nextTokenId != _currentIndex) {
                       
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);


        unchecked {
            _burnCounter++;
        }
    }

   
    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
       
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

   
    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

  
    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }

  
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

   
    function _toString(uint256 value) internal pure virtual returns (string memory ptr) {
        assembly {
       
            ptr := add(mload(0x40), 128)
           
            mstore(0x40, ptr)

            
            let end := ptr

           
            for {
               
                let temp := value
               
                ptr := sub(ptr, 1)
                
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp {
               
                temp := div(temp, 10)
            } {
                
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }

            let length := sub(end, ptr)
            
            ptr := sub(ptr, 32)
            
            mstore(ptr, length)
        }
    }
}




pragma solidity ^0.8.4;







contract Puxxies_Gang is ERC721A, Ownable, ReentrancyGuard {
    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;


    string public PROVENANCE_HASH;


    string public baseURI;
    string public baseExtension = ".json";

 

    uint256 public constant MAX_SUPPLY = 369;
    uint256 private _currentId;



    uint256 public constant whitelist_LIMIT = 0;
    uint256 public constant whitelist_PRICE = 0 ether;

 

    uint256 public constant public_LIMIT = 3;
    uint256 public constant public_PRICE = 0 ether;


    bool public publicIsActive = false;
    bool public whitelistIsActive = false;


    bytes32 public root; 

    mapping(address => uint256) private _alreadyMinted;

  
    address public beneficiary;


    address public royalties;

   
    address public nftContractAddress;

  
    constructor(
        address _royalties,
        address _beneficiary,
        string memory _initBaseURI 
        
        ) ERC721A("Puxxies Gang", "PG") {
        beneficiary = _beneficiary;
        royalties = _royalties;
        revealPuxxies(_initBaseURI);
        
    }


    function _msgSender() internal view virtual override returns (address) {
        return msg.sender;
    }

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

    function setProvenanceHash(string calldata hash) public onlyOwner {
        PROVENANCE_HASH = hash;
    }

    function setBeneficiary(address _beneficiary) public onlyOwner {
        beneficiary = _beneficiary;
    }

    function setRoyalties(address _royalties) public onlyOwner {
        royalties = _royalties;
    }

  
    function setPublicActive(bool _publicIsActive) public onlyOwner {
        publicIsActive = _publicIsActive;
    }

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

    function alreadyMinted(address addr) public view returns (uint256) {
        return _alreadyMinted[addr];
    }

    
  

   
    function freePuxxies(uint256 quantity) public payable nonReentrant {
        address sender = _msgSender();

        require(publicIsActive, "Mint is closed");
        require(
            quantity <= public_LIMIT - _alreadyMinted[sender],
            "You can't feed that many"
        );
        require(msg.value == public_PRICE * quantity, "Incorrect payable amount");

        _alreadyMinted[sender] += quantity;
        _internalMint(sender, quantity);
    }


    function ownerMint(address to, uint256 quantity) public onlyOwner {
        _internalMint(to, quantity);
    }

   
    function withdraw() public onlyOwner {
        payable(beneficiary).transfer(address(this).balance);
    }


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

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

  
    function revealPuxxies(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
    }


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

 
    function _internalMint(address to, uint256 quantity) private {

        require( MAX_SUPPLY >= totalSupply() + quantity, "Not enough Puxxies left!");
   
            _safeMint(to, quantity);
    }


  

    function royaltyInfo(uint256 _tokenId, uint256 _salePrice)
        external
        view
        returns (address, uint256 royaltyAmount)
    {
        _tokenId; // silence solc warning
        royaltyAmount = (_salePrice / 100) * 5;
        return (royalties, royaltyAmount);
    }


    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721A)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_royalties","type":"address"},{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"alreadyMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"freePuxxies","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"public_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"public_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"revealPuxxies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royalties","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"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":"address","name":"_beneficiary","type":"address"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_publicIsActive","type":"bool"}],"name":"setPublicActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royalties","type":"address"}],"name":"setRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelist_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelist_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d908051906020019062000051929190620003f3565b506000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055503480156200009557600080fd5b5060405162003f6f38038062003f6f8339818101604052810190620000bb919062000538565b6040518060400160405280600c81526020017f507578786965732047616e6700000000000000000000000000000000000000008152506040518060400160405280600281526020017f504700000000000000000000000000000000000000000000000000000000000081525081600290805190602001906200013f929190620003f3565b50806003908051906020019062000158929190620003f3565b50620001696200023560201b60201c565b600081905550505062000191620001856200023e60201b60201c565b6200024660201b60201c565b600160098190555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200022c816200030c60201b60201c565b50505062000808565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200031c6200033860201b60201c565b80600c908051906020019062000334929190620003f3565b5050565b620003486200023e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200036e620003c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003be90620005da565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200040190620006d6565b90600052602060002090601f01602090048101928262000425576000855562000471565b82601f106200044057805160ff191683800117855562000471565b8280016001018555821562000471579182015b828111156200047057825182559160200191906001019062000453565b5b50905062000480919062000484565b5090565b5b808211156200049f57600081600090555060010162000485565b5090565b6000620004ba620004b48462000625565b620005fc565b905082815260208101848484011115620004d957620004d8620007a5565b5b620004e6848285620006a0565b509392505050565b600081519050620004ff81620007ee565b92915050565b600082601f8301126200051d576200051c620007a0565b5b81516200052f848260208601620004a3565b91505092915050565b600080600060608486031215620005545762000553620007af565b5b60006200056486828701620004ee565b93505060206200057786828701620004ee565b925050604084015167ffffffffffffffff8111156200059b576200059a620007aa565b5b620005a98682870162000505565b9150509250925092565b6000620005c26020836200065b565b9150620005cf82620007c5565b602082019050919050565b60006020820190508181036000830152620005f581620005b3565b9050919050565b6000620006086200061b565b90506200061682826200070c565b919050565b6000604051905090565b600067ffffffffffffffff82111562000643576200064262000771565b5b6200064e82620007b4565b9050602081019050919050565b600082825260208201905092915050565b6000620006798262000680565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620006c0578082015181840152602081019050620006a3565b83811115620006d0576000848401525b50505050565b60006002820490506001821680620006ef57607f821691505b6020821081141562000706576200070562000742565b5b50919050565b6200071782620007b4565b810181811067ffffffffffffffff8211171562000739576200073862000771565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620007f9816200066c565b81146200080557600080fd5b50565b61375780620008186000396000f3fe6080604052600436106102515760003560e01c80634dd7d3bc11610139578063aae282e1116100b6578063e1ca320e1161007a578063e1ca320e146108a8578063e985e9c5146108d1578063ebf0c7171461090e578063f053dc5c14610939578063f2fde38b14610964578063ff1b65561461098d57610251565b8063aae282e1146107af578063b88d4fde146107da578063c668286214610803578063c87b56dd1461082e578063dc33e6811461086b57610251565b8063715018a6116100fd578063715018a6146106f05780638aca408c146107075780638da5cb5b1461073057806395d89b411461075b578063a22cb4651461078657610251565b80634dd7d3bc146106045780636352211e1461062057806368d21bfd1461065d5780636c0360eb1461068857806370a08231146106b357610251565b80631c31f710116101d257806332cb6b0c1161019657806332cb6b0c1461051a57806338af3eed146105455780633ccfd60b146105705780633fc18b071461058757806342842e0e146105b2578063484b973c146105db57610251565b80631c31f710146104365780631fe70d6f1461045f57806323b872dd1461048a5780632a55205a146104b35780632a9e63c6146104f157610251565b8063095ea7b311610219578063095ea7b3146103515780630a398b881461037a5780630e827678146103b757806310969523146103e257806318160ddd1461040b57610251565b806301ffc9a714610256578063033a02d61461029357806304a99f7c146102be57806306fdde03146102e9578063081812fc14610314575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190612a7f565b6109b8565b60405161028a9190612f13565b60405180910390f35b34801561029f57600080fd5b506102a86109ca565b6040516102b59190612f13565b60405180910390f35b3480156102ca57600080fd5b506102d36109dd565b6040516102e0919061306b565b60405180910390f35b3480156102f557600080fd5b506102fe6109e2565b60405161030b9190612f49565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190612b6f565b610a74565b6040516103489190612e83565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612a12565b610af3565b005b34801561038657600080fd5b506103a1600480360381019061039c919061288f565b610c37565b6040516103ae919061306b565b60405180910390f35b3480156103c357600080fd5b506103cc610c80565b6040516103d9919061306b565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190612ad9565b610c85565b005b34801561041757600080fd5b50610420610ca3565b60405161042d919061306b565b60405180910390f35b34801561044257600080fd5b5061045d6004803603810190610458919061288f565b610cba565b005b34801561046b57600080fd5b50610474610d06565b6040516104819190612f13565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac91906128fc565b610d19565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190612b9c565b61103e565b6040516104e8929190612eea565b60405180910390f35b3480156104fd57600080fd5b506105186004803603810190610513919061288f565b611088565b005b34801561052657600080fd5b5061052f6110d4565b60405161053c919061306b565b60405180910390f35b34801561055157600080fd5b5061055a6110da565b6040516105679190612e83565b60405180910390f35b34801561057c57600080fd5b50610585611100565b005b34801561059357600080fd5b5061059c611173565b6040516105a9919061306b565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d491906128fc565b611178565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190612a12565b611198565b005b61061e60048036038101906106199190612b6f565b6111ae565b005b34801561062c57600080fd5b5061064760048036038101906106429190612b6f565b61139f565b6040516106549190612e83565b60405180910390f35b34801561066957600080fd5b506106726113b1565b60405161067f919061306b565b60405180910390f35b34801561069457600080fd5b5061069d6113b6565b6040516106aa9190612f49565b60405180910390f35b3480156106bf57600080fd5b506106da60048036038101906106d5919061288f565b611444565b6040516106e7919061306b565b60405180910390f35b3480156106fc57600080fd5b506107056114fd565b005b34801561071357600080fd5b5061072e60048036038101906107299190612a52565b611511565b005b34801561073c57600080fd5b50610745611536565b6040516107529190612e83565b60405180910390f35b34801561076757600080fd5b50610770611560565b60405161077d9190612f49565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a891906129d2565b6115f2565b005b3480156107bb57600080fd5b506107c461176a565b6040516107d19190612e83565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc919061294f565b611790565b005b34801561080f57600080fd5b50610818611803565b6040516108259190612f49565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190612b6f565b611891565b6040516108629190612f49565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d919061288f565b61193b565b60405161089f919061306b565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190612b26565b61194d565b005b3480156108dd57600080fd5b506108f860048036038101906108f391906128bc565b61196f565b6040516109059190612f13565b60405180910390f35b34801561091a57600080fd5b50610923611a03565b6040516109309190612f2e565b60405180910390f35b34801561094557600080fd5b5061094e611a09565b60405161095b9190612e83565b60405180910390f35b34801561097057600080fd5b5061098b6004803603810190610986919061288f565b611a2f565b005b34801561099957600080fd5b506109a2611ab3565b6040516109af9190612f49565b60405180910390f35b60006109c382611b41565b9050919050565b600f60009054906101000a900460ff1681565b600381565b6060600280546109f19061333a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1d9061333a565b8015610a6a5780601f10610a3f57610100808354040283529160200191610a6a565b820191906000526020600020905b815481529060010190602001808311610a4d57829003601f168201915b5050505050905090565b6000610a7f82611bd3565b610ab5576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610afe8261139f565b90508073ffffffffffffffffffffffffffffffffffffffff16610b1f611c32565b73ffffffffffffffffffffffffffffffffffffffff1614610b8257610b4b81610b46611c32565b61196f565b610b81576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081565b610c8d611c3a565b8181600b9190610c9e9291906125c7565b505050565b6000610cad611cb8565b6001546000540303905090565b610cc2611c3a565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b6000610d2482611cc1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d8b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610d9784611d8f565b91509150610dad8187610da8611c32565b611db6565b610df957610dc286610dbd611c32565b61196f565b610df8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610e60576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6d8686866001611dfa565b8015610e7857600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610f4685610f22888887611e00565b7c020000000000000000000000000000000000000000000000000000000017611e28565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610fce576000600185019050600060046000838152602001908152602001600020541415610fcc576000548114610fcb578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46110368686866001611e53565b505050505050565b600080600560648461105091906131bb565b61105a91906131ec565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691509250929050565b611090611c3a565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61017181565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611108611c3a565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611170573d6000803e3d6000fd5b50565b600081565b61119383838360405180602001604052806000815250611790565b505050565b6111a0611c3a565b6111aa8282611e59565b5050565b600260095414156111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb9061302b565b60405180910390fd5b60026009819055506000611206611ebe565b9050600f60009054906101000a900460ff16611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90612f6b565b60405180910390fd5b601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460036112a39190613246565b8211156112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc9061304b565b60405180910390fd5b8160006112f291906131ec565b3414611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90612fab565b60405180910390fd5b81601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113829190613165565b925050819055506113938183611e59565b50600160098190555050565b60006113aa82611cc1565b9050919050565b600081565b600c80546113c39061333a565b80601f01602080910402602001604051908101604052809291908181526020018280546113ef9061333a565b801561143c5780601f106114115761010080835404028352916020019161143c565b820191906000526020600020905b81548152906001019060200180831161141f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ac576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611505611c3a565b61150f6000611ec6565b565b611519611c3a565b80600f60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461156f9061333a565b80601f016020809104026020016040519081016040528092919081815260200182805461159b9061333a565b80156115e85780601f106115bd576101008083540402835291602001916115e8565b820191906000526020600020905b8154815290600101906020018083116115cb57829003601f168201915b5050505050905090565b6115fa611c32565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061166c611c32565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611719611c32565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161175e9190612f13565b60405180910390a35050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61179b848484610d19565b60008373ffffffffffffffffffffffffffffffffffffffff163b146117fd576117c684848484611f8c565b6117fc576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600d80546118109061333a565b80601f016020809104026020016040519081016040528092919081815260200182805461183c9061333a565b80156118895780601f1061185e57610100808354040283529160200191611889565b820191906000526020600020905b81548152906001019060200180831161186c57829003601f168201915b505050505081565b606061189c82611bd3565b6118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290612feb565b60405180910390fd5b60006118e56120ec565b905060008151116119055760405180602001604052806000815250611933565b8061190f8461217e565b600d60405160200161192393929190612e52565b6040516020818303038152906040525b915050919050565b6000611946826122df565b9050919050565b611955611c3a565b80600c908051906020019061196b92919061264d565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60105481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a37611c3a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90612f8b565b60405180910390fd5b611ab081611ec6565b50565b600b8054611ac09061333a565b80601f0160208091040260200160405190810160405280929190818152602001828054611aec9061333a565b8015611b395780601f10611b0e57610100808354040283529160200191611b39565b820191906000526020600020905b815481529060010190602001808311611b1c57829003601f168201915b505050505081565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b9c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bcc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600081611bde611cb8565b11158015611bed575060005482105b8015611c2b575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b611c42611ebe565b73ffffffffffffffffffffffffffffffffffffffff16611c60611536565b73ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90612fcb565b60405180910390fd5b565b60006001905090565b60008082905080611cd0611cb8565b11611d5857600054811015611d575760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611d55575b6000811415611d4b576004600083600190039350838152602001908152602001600020549050611d20565b8092505050611d8a565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611e17868684612336565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b80611e62610ca3565b611e6c9190613165565b6101711015611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea79061300b565b60405180910390fd5b611eba828261233f565b5050565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fb2611c32565b8786866040518563ffffffff1660e01b8152600401611fd49493929190612e9e565b602060405180830381600087803b158015611fee57600080fd5b505af192505050801561201f57506040513d601f19601f8201168201806040525081019061201c9190612aac565b60015b612099573d806000811461204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b50600081511415612091576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c80546120fb9061333a565b80601f01602080910402602001604051908101604052809291908181526020018280546121279061333a565b80156121745780601f1061214957610100808354040283529160200191612174565b820191906000526020600020905b81548152906001019060200180831161215757829003601f168201915b5050505050905090565b606060008214156121c6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122da565b600082905060005b600082146121f85780806121e19061339d565b915050600a826121f191906131bb565b91506121ce565b60008167ffffffffffffffff811115612214576122136134d3565b5b6040519080825280601f01601f1916602001820160405280156122465781602001600182028036833780820191505090505b5090505b600085146122d35760018261225f9190613246565b9150600a8561226e91906133e6565b603061227a9190613165565b60f81b8183815181106122905761228f6134a4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122cc91906131bb565b945061224a565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b60009392505050565b61235982826040518060200160405280600081525061235d565b5050565b61236783836123fa565b60008373ffffffffffffffffffffffffffffffffffffffff163b146123f557600080549050600083820390505b6123a76000868380600101945086611f8c565b6123dd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106123945781600054146123f257600080fd5b50505b505050565b600080549050600082141561243b576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124486000848385611dfa565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506124bf836124b06000866000611e00565b6124b9856125b7565b17611e28565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461256057808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612525565b50600082141561259c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506125b26000848385611e53565b505050565b60006001821460e11b9050919050565b8280546125d39061333a565b90600052602060002090601f0160209004810192826125f5576000855561263c565b82601f1061260e57803560ff191683800117855561263c565b8280016001018555821561263c579182015b8281111561263b578235825591602001919060010190612620565b5b50905061264991906126d3565b5090565b8280546126599061333a565b90600052602060002090601f01602090048101928261267b57600085556126c2565b82601f1061269457805160ff19168380011785556126c2565b828001600101855582156126c2579182015b828111156126c15782518255916020019190600101906126a6565b5b5090506126cf91906126d3565b5090565b5b808211156126ec5760008160009055506001016126d4565b5090565b60006127036126fe846130ab565b613086565b90508281526020810184848401111561271f5761271e613511565b5b61272a8482856132f8565b509392505050565b6000612745612740846130dc565b613086565b90508281526020810184848401111561276157612760613511565b5b61276c8482856132f8565b509392505050565b600081359050612783816136c5565b92915050565b600081359050612798816136dc565b92915050565b6000813590506127ad816136f3565b92915050565b6000815190506127c2816136f3565b92915050565b600082601f8301126127dd576127dc613507565b5b81356127ed8482602086016126f0565b91505092915050565b60008083601f84011261280c5761280b613507565b5b8235905067ffffffffffffffff81111561282957612828613502565b5b6020830191508360018202830111156128455761284461350c565b5b9250929050565b600082601f83011261286157612860613507565b5b8135612871848260208601612732565b91505092915050565b6000813590506128898161370a565b92915050565b6000602082840312156128a5576128a461351b565b5b60006128b384828501612774565b91505092915050565b600080604083850312156128d3576128d261351b565b5b60006128e185828601612774565b92505060206128f285828601612774565b9150509250929050565b6000806000606084860312156129155761291461351b565b5b600061292386828701612774565b935050602061293486828701612774565b92505060406129458682870161287a565b9150509250925092565b600080600080608085870312156129695761296861351b565b5b600061297787828801612774565b945050602061298887828801612774565b93505060406129998782880161287a565b925050606085013567ffffffffffffffff8111156129ba576129b9613516565b5b6129c6878288016127c8565b91505092959194509250565b600080604083850312156129e9576129e861351b565b5b60006129f785828601612774565b9250506020612a0885828601612789565b9150509250929050565b60008060408385031215612a2957612a2861351b565b5b6000612a3785828601612774565b9250506020612a488582860161287a565b9150509250929050565b600060208284031215612a6857612a6761351b565b5b6000612a7684828501612789565b91505092915050565b600060208284031215612a9557612a9461351b565b5b6000612aa38482850161279e565b91505092915050565b600060208284031215612ac257612ac161351b565b5b6000612ad0848285016127b3565b91505092915050565b60008060208385031215612af057612aef61351b565b5b600083013567ffffffffffffffff811115612b0e57612b0d613516565b5b612b1a858286016127f6565b92509250509250929050565b600060208284031215612b3c57612b3b61351b565b5b600082013567ffffffffffffffff811115612b5a57612b59613516565b5b612b668482850161284c565b91505092915050565b600060208284031215612b8557612b8461351b565b5b6000612b938482850161287a565b91505092915050565b60008060408385031215612bb357612bb261351b565b5b6000612bc18582860161287a565b9250506020612bd28582860161287a565b9150509250929050565b612be58161327a565b82525050565b612bf48161328c565b82525050565b612c0381613298565b82525050565b6000612c1482613122565b612c1e8185613138565b9350612c2e818560208601613307565b612c3781613520565b840191505092915050565b6000612c4d8261312d565b612c578185613149565b9350612c67818560208601613307565b612c7081613520565b840191505092915050565b6000612c868261312d565b612c90818561315a565b9350612ca0818560208601613307565b80840191505092915050565b60008154612cb98161333a565b612cc3818661315a565b94506001821660008114612cde5760018114612cef57612d22565b60ff19831686528186019350612d22565b612cf88561310d565b60005b83811015612d1a57815481890152600182019150602081019050612cfb565b838801955050505b50505092915050565b6000612d38600e83613149565b9150612d4382613531565b602082019050919050565b6000612d5b602683613149565b9150612d668261355a565b604082019050919050565b6000612d7e601883613149565b9150612d89826135a9565b602082019050919050565b6000612da1602083613149565b9150612dac826135d2565b602082019050919050565b6000612dc4602f83613149565b9150612dcf826135fb565b604082019050919050565b6000612de7601883613149565b9150612df28261364a565b602082019050919050565b6000612e0a601f83613149565b9150612e1582613673565b602082019050919050565b6000612e2d601883613149565b9150612e388261369c565b602082019050919050565b612e4c816132ee565b82525050565b6000612e5e8286612c7b565b9150612e6a8285612c7b565b9150612e768284612cac565b9150819050949350505050565b6000602082019050612e986000830184612bdc565b92915050565b6000608082019050612eb36000830187612bdc565b612ec06020830186612bdc565b612ecd6040830185612e43565b8181036060830152612edf8184612c09565b905095945050505050565b6000604082019050612eff6000830185612bdc565b612f0c6020830184612e43565b9392505050565b6000602082019050612f286000830184612beb565b92915050565b6000602082019050612f436000830184612bfa565b92915050565b60006020820190508181036000830152612f638184612c42565b905092915050565b60006020820190508181036000830152612f8481612d2b565b9050919050565b60006020820190508181036000830152612fa481612d4e565b9050919050565b60006020820190508181036000830152612fc481612d71565b9050919050565b60006020820190508181036000830152612fe481612d94565b9050919050565b6000602082019050818103600083015261300481612db7565b9050919050565b6000602082019050818103600083015261302481612dda565b9050919050565b6000602082019050818103600083015261304481612dfd565b9050919050565b6000602082019050818103600083015261306481612e20565b9050919050565b60006020820190506130806000830184612e43565b92915050565b60006130906130a1565b905061309c828261336c565b919050565b6000604051905090565b600067ffffffffffffffff8211156130c6576130c56134d3565b5b6130cf82613520565b9050602081019050919050565b600067ffffffffffffffff8211156130f7576130f66134d3565b5b61310082613520565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613170826132ee565b915061317b836132ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131b0576131af613417565b5b828201905092915050565b60006131c6826132ee565b91506131d1836132ee565b9250826131e1576131e0613446565b5b828204905092915050565b60006131f7826132ee565b9150613202836132ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561323b5761323a613417565b5b828202905092915050565b6000613251826132ee565b915061325c836132ee565b92508282101561326f5761326e613417565b5b828203905092915050565b6000613285826132ce565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561332557808201518184015260208101905061330a565b83811115613334576000848401525b50505050565b6000600282049050600182168061335257607f821691505b6020821081141561336657613365613475565b5b50919050565b61337582613520565b810181811067ffffffffffffffff82111715613394576133936134d3565b5b80604052505050565b60006133a8826132ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133db576133da613417565b5b600182019050919050565b60006133f1826132ee565b91506133fc836132ee565b92508261340c5761340b613446565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e7420697320636c6f736564000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e636f72726563742070617961626c6520616d6f756e740000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682050757878696573206c656674210000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f596f752063616e277420666565642074686174206d616e790000000000000000600082015250565b6136ce8161327a565b81146136d957600080fd5b50565b6136e58161328c565b81146136f057600080fd5b50565b6136fc816132a2565b811461370757600080fd5b50565b613713816132ee565b811461371e57600080fd5b5056fea26469706673582212206828fe5e45dae81e9992886cd171009a85cef085393dd8af5d84fca20d67845c64736f6c634300080700330000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d5466725a4a6d4252767554665747366e324b6879454c4363325533385135654574624e4b6a584852577158372f00000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102515760003560e01c80634dd7d3bc11610139578063aae282e1116100b6578063e1ca320e1161007a578063e1ca320e146108a8578063e985e9c5146108d1578063ebf0c7171461090e578063f053dc5c14610939578063f2fde38b14610964578063ff1b65561461098d57610251565b8063aae282e1146107af578063b88d4fde146107da578063c668286214610803578063c87b56dd1461082e578063dc33e6811461086b57610251565b8063715018a6116100fd578063715018a6146106f05780638aca408c146107075780638da5cb5b1461073057806395d89b411461075b578063a22cb4651461078657610251565b80634dd7d3bc146106045780636352211e1461062057806368d21bfd1461065d5780636c0360eb1461068857806370a08231146106b357610251565b80631c31f710116101d257806332cb6b0c1161019657806332cb6b0c1461051a57806338af3eed146105455780633ccfd60b146105705780633fc18b071461058757806342842e0e146105b2578063484b973c146105db57610251565b80631c31f710146104365780631fe70d6f1461045f57806323b872dd1461048a5780632a55205a146104b35780632a9e63c6146104f157610251565b8063095ea7b311610219578063095ea7b3146103515780630a398b881461037a5780630e827678146103b757806310969523146103e257806318160ddd1461040b57610251565b806301ffc9a714610256578063033a02d61461029357806304a99f7c146102be57806306fdde03146102e9578063081812fc14610314575b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190612a7f565b6109b8565b60405161028a9190612f13565b60405180910390f35b34801561029f57600080fd5b506102a86109ca565b6040516102b59190612f13565b60405180910390f35b3480156102ca57600080fd5b506102d36109dd565b6040516102e0919061306b565b60405180910390f35b3480156102f557600080fd5b506102fe6109e2565b60405161030b9190612f49565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190612b6f565b610a74565b6040516103489190612e83565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190612a12565b610af3565b005b34801561038657600080fd5b506103a1600480360381019061039c919061288f565b610c37565b6040516103ae919061306b565b60405180910390f35b3480156103c357600080fd5b506103cc610c80565b6040516103d9919061306b565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190612ad9565b610c85565b005b34801561041757600080fd5b50610420610ca3565b60405161042d919061306b565b60405180910390f35b34801561044257600080fd5b5061045d6004803603810190610458919061288f565b610cba565b005b34801561046b57600080fd5b50610474610d06565b6040516104819190612f13565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac91906128fc565b610d19565b005b3480156104bf57600080fd5b506104da60048036038101906104d59190612b9c565b61103e565b6040516104e8929190612eea565b60405180910390f35b3480156104fd57600080fd5b506105186004803603810190610513919061288f565b611088565b005b34801561052657600080fd5b5061052f6110d4565b60405161053c919061306b565b60405180910390f35b34801561055157600080fd5b5061055a6110da565b6040516105679190612e83565b60405180910390f35b34801561057c57600080fd5b50610585611100565b005b34801561059357600080fd5b5061059c611173565b6040516105a9919061306b565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d491906128fc565b611178565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190612a12565b611198565b005b61061e60048036038101906106199190612b6f565b6111ae565b005b34801561062c57600080fd5b5061064760048036038101906106429190612b6f565b61139f565b6040516106549190612e83565b60405180910390f35b34801561066957600080fd5b506106726113b1565b60405161067f919061306b565b60405180910390f35b34801561069457600080fd5b5061069d6113b6565b6040516106aa9190612f49565b60405180910390f35b3480156106bf57600080fd5b506106da60048036038101906106d5919061288f565b611444565b6040516106e7919061306b565b60405180910390f35b3480156106fc57600080fd5b506107056114fd565b005b34801561071357600080fd5b5061072e60048036038101906107299190612a52565b611511565b005b34801561073c57600080fd5b50610745611536565b6040516107529190612e83565b60405180910390f35b34801561076757600080fd5b50610770611560565b60405161077d9190612f49565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a891906129d2565b6115f2565b005b3480156107bb57600080fd5b506107c461176a565b6040516107d19190612e83565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc919061294f565b611790565b005b34801561080f57600080fd5b50610818611803565b6040516108259190612f49565b60405180910390f35b34801561083a57600080fd5b5061085560048036038101906108509190612b6f565b611891565b6040516108629190612f49565b60405180910390f35b34801561087757600080fd5b50610892600480360381019061088d919061288f565b61193b565b60405161089f919061306b565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca9190612b26565b61194d565b005b3480156108dd57600080fd5b506108f860048036038101906108f391906128bc565b61196f565b6040516109059190612f13565b60405180910390f35b34801561091a57600080fd5b50610923611a03565b6040516109309190612f2e565b60405180910390f35b34801561094557600080fd5b5061094e611a09565b60405161095b9190612e83565b60405180910390f35b34801561097057600080fd5b5061098b6004803603810190610986919061288f565b611a2f565b005b34801561099957600080fd5b506109a2611ab3565b6040516109af9190612f49565b60405180910390f35b60006109c382611b41565b9050919050565b600f60009054906101000a900460ff1681565b600381565b6060600280546109f19061333a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1d9061333a565b8015610a6a5780601f10610a3f57610100808354040283529160200191610a6a565b820191906000526020600020905b815481529060010190602001808311610a4d57829003601f168201915b5050505050905090565b6000610a7f82611bd3565b610ab5576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610afe8261139f565b90508073ffffffffffffffffffffffffffffffffffffffff16610b1f611c32565b73ffffffffffffffffffffffffffffffffffffffff1614610b8257610b4b81610b46611c32565b61196f565b610b81576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081565b610c8d611c3a565b8181600b9190610c9e9291906125c7565b505050565b6000610cad611cb8565b6001546000540303905090565b610cc2611c3a565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b6000610d2482611cc1565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610d8b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610d9784611d8f565b91509150610dad8187610da8611c32565b611db6565b610df957610dc286610dbd611c32565b61196f565b610df8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610e60576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e6d8686866001611dfa565b8015610e7857600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610f4685610f22888887611e00565b7c020000000000000000000000000000000000000000000000000000000017611e28565b600460008681526020019081526020016000208190555060007c020000000000000000000000000000000000000000000000000000000084161415610fce576000600185019050600060046000838152602001908152602001600020541415610fcc576000548114610fcb578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46110368686866001611e53565b505050505050565b600080600560648461105091906131bb565b61105a91906131ec565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691509250929050565b611090611c3a565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61017181565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611108611c3a565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611170573d6000803e3d6000fd5b50565b600081565b61119383838360405180602001604052806000815250611790565b505050565b6111a0611c3a565b6111aa8282611e59565b5050565b600260095414156111f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111eb9061302b565b60405180910390fd5b60026009819055506000611206611ebe565b9050600f60009054906101000a900460ff16611257576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124e90612f6b565b60405180910390fd5b601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460036112a39190613246565b8211156112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc9061304b565b60405180910390fd5b8160006112f291906131ec565b3414611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90612fab565b60405180910390fd5b81601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113829190613165565b925050819055506113938183611e59565b50600160098190555050565b60006113aa82611cc1565b9050919050565b600081565b600c80546113c39061333a565b80601f01602080910402602001604051908101604052809291908181526020018280546113ef9061333a565b801561143c5780601f106114115761010080835404028352916020019161143c565b820191906000526020600020905b81548152906001019060200180831161141f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ac576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b611505611c3a565b61150f6000611ec6565b565b611519611c3a565b80600f60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461156f9061333a565b80601f016020809104026020016040519081016040528092919081815260200182805461159b9061333a565b80156115e85780601f106115bd576101008083540402835291602001916115e8565b820191906000526020600020905b8154815290600101906020018083116115cb57829003601f168201915b5050505050905090565b6115fa611c32565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061166c611c32565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611719611c32565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161175e9190612f13565b60405180910390a35050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61179b848484610d19565b60008373ffffffffffffffffffffffffffffffffffffffff163b146117fd576117c684848484611f8c565b6117fc576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600d80546118109061333a565b80601f016020809104026020016040519081016040528092919081815260200182805461183c9061333a565b80156118895780601f1061185e57610100808354040283529160200191611889565b820191906000526020600020905b81548152906001019060200180831161186c57829003601f168201915b505050505081565b606061189c82611bd3565b6118db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d290612feb565b60405180910390fd5b60006118e56120ec565b905060008151116119055760405180602001604052806000815250611933565b8061190f8461217e565b600d60405160200161192393929190612e52565b6040516020818303038152906040525b915050919050565b6000611946826122df565b9050919050565b611955611c3a565b80600c908051906020019061196b92919061264d565b5050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60105481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a37611c3a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9e90612f8b565b60405180910390fd5b611ab081611ec6565b50565b600b8054611ac09061333a565b80601f0160208091040260200160405190810160405280929190818152602001828054611aec9061333a565b8015611b395780601f10611b0e57610100808354040283529160200191611b39565b820191906000526020600020905b815481529060010190602001808311611b1c57829003601f168201915b505050505081565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b9c57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bcc5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600081611bde611cb8565b11158015611bed575060005482105b8015611c2b575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b611c42611ebe565b73ffffffffffffffffffffffffffffffffffffffff16611c60611536565b73ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90612fcb565b60405180910390fd5b565b60006001905090565b60008082905080611cd0611cb8565b11611d5857600054811015611d575760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611d55575b6000811415611d4b576004600083600190039350838152602001908152602001600020549050611d20565b8092505050611d8a565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8611e17868684612336565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b80611e62610ca3565b611e6c9190613165565b6101711015611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea79061300b565b60405180910390fd5b611eba828261233f565b5050565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fb2611c32565b8786866040518563ffffffff1660e01b8152600401611fd49493929190612e9e565b602060405180830381600087803b158015611fee57600080fd5b505af192505050801561201f57506040513d601f19601f8201168201806040525081019061201c9190612aac565b60015b612099573d806000811461204f576040519150601f19603f3d011682016040523d82523d6000602084013e612054565b606091505b50600081511415612091576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c80546120fb9061333a565b80601f01602080910402602001604051908101604052809291908181526020018280546121279061333a565b80156121745780601f1061214957610100808354040283529160200191612174565b820191906000526020600020905b81548152906001019060200180831161215757829003601f168201915b5050505050905090565b606060008214156121c6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506122da565b600082905060005b600082146121f85780806121e19061339d565b915050600a826121f191906131bb565b91506121ce565b60008167ffffffffffffffff811115612214576122136134d3565b5b6040519080825280601f01601f1916602001820160405280156122465781602001600182028036833780820191505090505b5090505b600085146122d35760018261225f9190613246565b9150600a8561226e91906133e6565b603061227a9190613165565b60f81b8183815181106122905761228f6134a4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122cc91906131bb565b945061224a565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b60009392505050565b61235982826040518060200160405280600081525061235d565b5050565b61236783836123fa565b60008373ffffffffffffffffffffffffffffffffffffffff163b146123f557600080549050600083820390505b6123a76000868380600101945086611f8c565b6123dd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106123945781600054146123f257600080fd5b50505b505050565b600080549050600082141561243b576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124486000848385611dfa565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506124bf836124b06000866000611e00565b6124b9856125b7565b17611e28565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461256057808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612525565b50600082141561259c576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008190555050506125b26000848385611e53565b505050565b60006001821460e11b9050919050565b8280546125d39061333a565b90600052602060002090601f0160209004810192826125f5576000855561263c565b82601f1061260e57803560ff191683800117855561263c565b8280016001018555821561263c579182015b8281111561263b578235825591602001919060010190612620565b5b50905061264991906126d3565b5090565b8280546126599061333a565b90600052602060002090601f01602090048101928261267b57600085556126c2565b82601f1061269457805160ff19168380011785556126c2565b828001600101855582156126c2579182015b828111156126c15782518255916020019190600101906126a6565b5b5090506126cf91906126d3565b5090565b5b808211156126ec5760008160009055506001016126d4565b5090565b60006127036126fe846130ab565b613086565b90508281526020810184848401111561271f5761271e613511565b5b61272a8482856132f8565b509392505050565b6000612745612740846130dc565b613086565b90508281526020810184848401111561276157612760613511565b5b61276c8482856132f8565b509392505050565b600081359050612783816136c5565b92915050565b600081359050612798816136dc565b92915050565b6000813590506127ad816136f3565b92915050565b6000815190506127c2816136f3565b92915050565b600082601f8301126127dd576127dc613507565b5b81356127ed8482602086016126f0565b91505092915050565b60008083601f84011261280c5761280b613507565b5b8235905067ffffffffffffffff81111561282957612828613502565b5b6020830191508360018202830111156128455761284461350c565b5b9250929050565b600082601f83011261286157612860613507565b5b8135612871848260208601612732565b91505092915050565b6000813590506128898161370a565b92915050565b6000602082840312156128a5576128a461351b565b5b60006128b384828501612774565b91505092915050565b600080604083850312156128d3576128d261351b565b5b60006128e185828601612774565b92505060206128f285828601612774565b9150509250929050565b6000806000606084860312156129155761291461351b565b5b600061292386828701612774565b935050602061293486828701612774565b92505060406129458682870161287a565b9150509250925092565b600080600080608085870312156129695761296861351b565b5b600061297787828801612774565b945050602061298887828801612774565b93505060406129998782880161287a565b925050606085013567ffffffffffffffff8111156129ba576129b9613516565b5b6129c6878288016127c8565b91505092959194509250565b600080604083850312156129e9576129e861351b565b5b60006129f785828601612774565b9250506020612a0885828601612789565b9150509250929050565b60008060408385031215612a2957612a2861351b565b5b6000612a3785828601612774565b9250506020612a488582860161287a565b9150509250929050565b600060208284031215612a6857612a6761351b565b5b6000612a7684828501612789565b91505092915050565b600060208284031215612a9557612a9461351b565b5b6000612aa38482850161279e565b91505092915050565b600060208284031215612ac257612ac161351b565b5b6000612ad0848285016127b3565b91505092915050565b60008060208385031215612af057612aef61351b565b5b600083013567ffffffffffffffff811115612b0e57612b0d613516565b5b612b1a858286016127f6565b92509250509250929050565b600060208284031215612b3c57612b3b61351b565b5b600082013567ffffffffffffffff811115612b5a57612b59613516565b5b612b668482850161284c565b91505092915050565b600060208284031215612b8557612b8461351b565b5b6000612b938482850161287a565b91505092915050565b60008060408385031215612bb357612bb261351b565b5b6000612bc18582860161287a565b9250506020612bd28582860161287a565b9150509250929050565b612be58161327a565b82525050565b612bf48161328c565b82525050565b612c0381613298565b82525050565b6000612c1482613122565b612c1e8185613138565b9350612c2e818560208601613307565b612c3781613520565b840191505092915050565b6000612c4d8261312d565b612c578185613149565b9350612c67818560208601613307565b612c7081613520565b840191505092915050565b6000612c868261312d565b612c90818561315a565b9350612ca0818560208601613307565b80840191505092915050565b60008154612cb98161333a565b612cc3818661315a565b94506001821660008114612cde5760018114612cef57612d22565b60ff19831686528186019350612d22565b612cf88561310d565b60005b83811015612d1a57815481890152600182019150602081019050612cfb565b838801955050505b50505092915050565b6000612d38600e83613149565b9150612d4382613531565b602082019050919050565b6000612d5b602683613149565b9150612d668261355a565b604082019050919050565b6000612d7e601883613149565b9150612d89826135a9565b602082019050919050565b6000612da1602083613149565b9150612dac826135d2565b602082019050919050565b6000612dc4602f83613149565b9150612dcf826135fb565b604082019050919050565b6000612de7601883613149565b9150612df28261364a565b602082019050919050565b6000612e0a601f83613149565b9150612e1582613673565b602082019050919050565b6000612e2d601883613149565b9150612e388261369c565b602082019050919050565b612e4c816132ee565b82525050565b6000612e5e8286612c7b565b9150612e6a8285612c7b565b9150612e768284612cac565b9150819050949350505050565b6000602082019050612e986000830184612bdc565b92915050565b6000608082019050612eb36000830187612bdc565b612ec06020830186612bdc565b612ecd6040830185612e43565b8181036060830152612edf8184612c09565b905095945050505050565b6000604082019050612eff6000830185612bdc565b612f0c6020830184612e43565b9392505050565b6000602082019050612f286000830184612beb565b92915050565b6000602082019050612f436000830184612bfa565b92915050565b60006020820190508181036000830152612f638184612c42565b905092915050565b60006020820190508181036000830152612f8481612d2b565b9050919050565b60006020820190508181036000830152612fa481612d4e565b9050919050565b60006020820190508181036000830152612fc481612d71565b9050919050565b60006020820190508181036000830152612fe481612d94565b9050919050565b6000602082019050818103600083015261300481612db7565b9050919050565b6000602082019050818103600083015261302481612dda565b9050919050565b6000602082019050818103600083015261304481612dfd565b9050919050565b6000602082019050818103600083015261306481612e20565b9050919050565b60006020820190506130806000830184612e43565b92915050565b60006130906130a1565b905061309c828261336c565b919050565b6000604051905090565b600067ffffffffffffffff8211156130c6576130c56134d3565b5b6130cf82613520565b9050602081019050919050565b600067ffffffffffffffff8211156130f7576130f66134d3565b5b61310082613520565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613170826132ee565b915061317b836132ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131b0576131af613417565b5b828201905092915050565b60006131c6826132ee565b91506131d1836132ee565b9250826131e1576131e0613446565b5b828204905092915050565b60006131f7826132ee565b9150613202836132ee565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561323b5761323a613417565b5b828202905092915050565b6000613251826132ee565b915061325c836132ee565b92508282101561326f5761326e613417565b5b828203905092915050565b6000613285826132ce565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561332557808201518184015260208101905061330a565b83811115613334576000848401525b50505050565b6000600282049050600182168061335257607f821691505b6020821081141561336657613365613475565b5b50919050565b61337582613520565b810181811067ffffffffffffffff82111715613394576133936134d3565b5b80604052505050565b60006133a8826132ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133db576133da613417565b5b600182019050919050565b60006133f1826132ee565b91506133fc836132ee565b92508261340c5761340b613446565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e7420697320636c6f736564000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e636f72726563742070617961626c6520616d6f756e740000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682050757878696573206c656674210000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f596f752063616e277420666565642074686174206d616e790000000000000000600082015250565b6136ce8161327a565b81146136d957600080fd5b50565b6136e58161328c565b81146136f057600080fd5b50565b6136fc816132a2565b811461370757600080fd5b50565b613713816132ee565b811461371e57600080fd5b5056fea26469706673582212206828fe5e45dae81e9992886cd171009a85cef085393dd8af5d84fca20d67845c64736f6c63430008070033

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

0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000004468747470733a2f2f697066732e696f2f697066732f516d5466725a4a6d4252767554665747366e324b6879454c4363325533385135654574624e4b6a584852577158372f00000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _royalties (address): 0x8CCd7fE0e34ECcb3fE0c55e5Ae6ed9ffCB48575e
Arg [1] : _beneficiary (address): 0x8CCd7fE0e34ECcb3fE0c55e5Ae6ed9ffCB48575e
Arg [2] : _initBaseURI (string): https://ipfs.io/ipfs/QmTfrZJmBRvuTfWG6n2KhyELCc2U38Q5eEtbNKjXHRWqX7/

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e
Arg [1] : 0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000044
Arg [4] : 68747470733a2f2f697066732e696f2f697066732f516d5466725a4a6d425276
Arg [5] : 7554665747366e324b6879454c4363325533385135654574624e4b6a58485257
Arg [6] : 7158372f00000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

31238:4355:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35395:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31853:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31749:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15355:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18747:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18336:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33328:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31686:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32735:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13477:185;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32850:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31894:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20565:1775;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35095:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;32966:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31550:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32034:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34077:108;;;;;;;;;;;;;:::i;:::-;;31796:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22351:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33952:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33466:476;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16014:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31636:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31471:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13962:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8072:103;;;;;;;;;;;;;:::i;:::-;;33078:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7830:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15466:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18977:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32109:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22547:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31499:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34199:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34754:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34641:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19296:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31942:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32071:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8186:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31431:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35395:195;35517:4;35546:36;35570:11;35546:23;:36::i;:::-;35539:43;;35395:195;;;:::o;31853:34::-;;;;;;;;;;;;;:::o;31749:40::-;31788:1;31749:40;:::o;15355:100::-;15409:13;15442:5;15435:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15355:100;:::o;18747:218::-;18823:7;18848:16;18856:7;18848;:16::i;:::-;18843:64;;18873:34;;;;;;;;;;;;;;18843:64;18927:15;:24;18943:7;18927:24;;;;;;;;;;;:30;;;;;;;;;;;;18920:37;;18747:218;;;:::o;18336:400::-;18417:13;18433:16;18441:7;18433;:16::i;:::-;18417:32;;18489:5;18466:28;;:19;:17;:19::i;:::-;:28;;;18462:175;;18514:44;18531:5;18538:19;:17;:19::i;:::-;18514:16;:44::i;:::-;18509:128;;18586:35;;;;;;;;;;;;;;18509:128;18462:175;18682:2;18649:15;:24;18665:7;18649:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;18720:7;18716:2;18700:28;;18709:5;18700:28;;;;;;;;;;;;18406:330;18336:400;;:::o;33328:113::-;33386:7;33413:14;:20;33428:4;33413:20;;;;;;;;;;;;;;;;33406:27;;33328:113;;;:::o;31686:49::-;31728:7;31686:49;:::o;32735:107::-;7784:13;:11;:13::i;:::-;32830:4:::1;;32812:15;:22;;;;;;;:::i;:::-;;32735:107:::0;;:::o;13477:185::-;13538:7;13628:15;:13;:15::i;:::-;13613:12;;13597:13;;:28;:46;13590:53;;13477:185;:::o;32850:108::-;7784:13;:11;:13::i;:::-;32938:12:::1;32924:11;;:26;;;;;;;;;;;;;;;;;;32850:108:::0;:::o;31894:37::-;;;;;;;;;;;;;:::o;20565:1775::-;20699:27;20729;20748:7;20729:18;:27::i;:::-;20699:57;;20814:4;20773:45;;20789:19;20773:45;;;20769:86;;20827:28;;;;;;;;;;;;;;20769:86;20869:27;20898:23;20925:35;20952:7;20925:26;:35::i;:::-;20868:92;;;;20987:68;21012:15;21029:4;21035:19;:17;:19::i;:::-;20987:24;:68::i;:::-;20982:180;;21075:43;21092:4;21098:19;:17;:19::i;:::-;21075:16;:43::i;:::-;21070:92;;21127:35;;;;;;;;;;;;;;21070:92;20982:180;21193:1;21179:16;;:2;:16;;;21175:52;;;21204:23;;;;;;;;;;;;;;21175:52;21240:43;21262:4;21268:2;21272:7;21281:1;21240:21;:43::i;:::-;21332:15;21329:101;;;21413:1;21392:19;21385:30;21329:101;21500:18;:24;21519:4;21500:24;;;;;;;;;;;;;;;;21498:26;;;;;;;;;;;;21542:18;:22;21561:2;21542:22;;;;;;;;;;;;;;;;21540:24;;;;;;;;;;;21623:146;21660:2;21709:45;21724:4;21730:2;21734:19;21709:14;:45::i;:::-;12078:8;21681:73;21623:18;:146::i;:::-;21594:17;:26;21612:7;21594:26;;;;;;;;;;;:175;;;;21853:1;12078:8;21802:19;:47;:52;21798:426;;;21875:19;21907:1;21897:7;:11;21875:33;;21982:1;21948:17;:30;21966:11;21948:30;;;;;;;;;;;;:35;21944:265;;;22048:13;;22033:11;:28;22029:161;;22147:19;22114:17;:30;22132:11;22114:30;;;;;;;;;;;:52;;;;22029:161;21944:265;21856:368;21798:426;22271:7;22267:2;22252:27;;22261:4;22252:27;;;;;;;;;;;;22290:42;22311:4;22317:2;22321:7;22330:1;22290:20;:42::i;:::-;20688:1652;;;20565:1775;;;:::o;35095:290::-;35204:7;35213:21;35332:1;35325:3;35312:10;:16;;;;:::i;:::-;35311:22;;;;:::i;:::-;35295:38;;35352:9;;;;;;;;;;;35344:33;;35095:290;;;;;:::o;32966:100::-;7784:13;:11;:13::i;:::-;33048:10:::1;33036:9;;:22;;;;;;;;;;;;;;;;;;32966:100:::0;:::o;31550:40::-;31587:3;31550:40;:::o;32034:26::-;;;;;;;;;;;;;:::o;34077:108::-;7784:13;:11;:13::i;:::-;34133:11:::1;;;;;;;;;;;34125:29;;:52;34155:21;34125:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34077:108::o:0;31796:46::-;31835:7;31796:46;:::o;22351:185::-;22489:39;22506:4;22512:2;22516:7;22489:39;;;;;;;;;;;;:16;:39::i;:::-;22351:185;;;:::o;33952:112::-;7784:13;:11;:13::i;:::-;34029:27:::1;34043:2;34047:8;34029:13;:27::i;:::-;33952:112:::0;;:::o;33466:476::-;189:1;347:7;;:19;;339:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;189:1;425:7;:18;;;;33544:14:::1;33561:12;:10;:12::i;:::-;33544:29;;33594:14;;;;;;;;;;;33586:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33687:14;:22;33702:6;33687:22;;;;;;;;;;;;;;;;31788:1;33672:37;;;;:::i;:::-;33660:8;:49;;33638:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;33808:8;31835:7;33793:23;;;;:::i;:::-;33780:9;:36;33772:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33884:8;33858:14;:22;33873:6;33858:22;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;33903:31;33917:6;33925:8;33903:13;:31::i;:::-;33533:409;145:1:::0;480:7;:22;;;;33466:476;:::o;16014:152::-;16086:7;16129:27;16148:7;16129:18;:27::i;:::-;16106:52;;16014:152;;;:::o;31636:43::-;31678:1;31636:43;:::o;31471:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13962:233::-;14034:7;14075:1;14058:19;;:5;:19;;;14054:60;;;14086:28;;;;;;;;;;;;;;14054:60;11570:13;14132:18;:25;14151:5;14132:25;;;;;;;;;;;;;;;;:55;14125:62;;13962:233;;;:::o;8072:103::-;7784:13;:11;:13::i;:::-;8137:30:::1;8164:1;8137:18;:30::i;:::-;8072:103::o:0;33078:115::-;7784:13;:11;:13::i;:::-;33170:15:::1;33153:14;;:32;;;;;;;;;;;;;;;;;;33078:115:::0;:::o;7830:87::-;7876:7;7903:6;;;;;;;;;;;7896:13;;7830:87;:::o;15466:104::-;15522:13;15555:7;15548:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15466:104;:::o;18977:308::-;19088:19;:17;:19::i;:::-;19076:31;;:8;:31;;;19072:61;;;19116:17;;;;;;;;;;;;;;19072:61;19198:8;19146:18;:39;19165:19;:17;:19::i;:::-;19146:39;;;;;;;;;;;;;;;:49;19186:8;19146:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;19258:8;19222:55;;19237:19;:17;:19::i;:::-;19222:55;;;19268:8;19222:55;;;;;;:::i;:::-;;;;;;;;18977:308;;:::o;32109:33::-;;;;;;;;;;;;;:::o;22547:399::-;22714:31;22727:4;22733:2;22737:7;22714:12;:31::i;:::-;22778:1;22760:2;:14;;;:19;22756:183;;22799:56;22830:4;22836:2;22840:7;22849:5;22799:30;:56::i;:::-;22794:145;;22883:40;;;;;;;;;;;;;;22794:145;22756:183;22547:399;;;;:::o;31499:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34199:430::-;34297:13;34340:16;34348:7;34340;:16::i;:::-;34324:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;34433:28;34464:10;:8;:10::i;:::-;34433:41;;34519:1;34494:14;34488:28;:32;:133;;;;;;;;;;;;;;;;;34556:14;34572:18;:7;:16;:18::i;:::-;34592:13;34539:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34488:133;34481:140;;;34199:430;;;:::o;34754:113::-;34812:7;34839:20;34853:5;34839:13;:20::i;:::-;34832:27;;34754:113;;;:::o;34641:103::-;7784:13;:11;:13::i;:::-;34725:11:::1;34715:7;:21;;;;;;;;;;;;:::i;:::-;;34641:103:::0;:::o;19296:164::-;19393:4;19417:18;:25;19436:5;19417:25;;;;;;;;;;;;;;;:35;19443:8;19417:35;;;;;;;;;;;;;;;;;;;;;;;;;19410:42;;19296:164;;;;:::o;31942:19::-;;;;:::o;32071:24::-;;;;;;;;;;;;;:::o;8186:201::-;7784:13;:11;:13::i;:::-;8295:1:::1;8275:22;;:8;:22;;;;8267:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8351:28;8370:8;8351:18;:28::i;:::-;8186:201:::0;:::o;31431:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15094:250::-;15179:4;15240:10;15225:25;;:11;:25;;;;:68;;;;15283:10;15268:25;;:11;:25;;;;15225:68;:111;;;;15326:10;15311:25;;:11;:25;;;;15225:111;15205:131;;15094:250;;;:::o;19472:244::-;19537:4;19593:7;19574:15;:13;:15::i;:::-;:26;;:66;;;;;19627:13;;19617:7;:23;19574:66;:133;;;;;19706:1;11944:8;19658:17;:26;19676:7;19658:26;;;;;;;;;;;;:44;:49;19574:133;19554:153;;19472:244;;;:::o;30201:105::-;30261:7;30288:10;30281:17;;30201:105;:::o;7930:132::-;8005:12;:10;:12::i;:::-;7994:23;;:7;:5;:7::i;:::-;:23;;;7986:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7930:132::o;13259:92::-;13315:7;13342:1;13335:8;;13259:92;:::o;16737:673::-;16804:7;16824:12;16839:7;16824:22;;16907:4;16888:15;:13;:15::i;:::-;:23;16884:459;;16941:13;;16934:4;:20;16930:413;;;16979:14;16996:17;:23;17014:4;16996:23;;;;;;;;;;;;16979:40;;17093:1;11944:8;17065:6;:24;:29;17061:263;;;17148:113;17165:1;17155:6;:11;17148:113;;;17208:17;:25;17226:6;;;;;;;17208:25;;;;;;;;;;;;17199:34;;17148:113;;;17294:6;17287:13;;;;;;17061:263;16956:387;16930:413;16884:459;17371:31;;;;;;;;;;;;;;16737:673;;;;:::o;20155:400::-;20257:27;20286:23;20327:38;20368:15;:24;20384:7;20368:24;;;;;;;;;;;20327:65;;20460:18;20437:41;;20517:19;20511:26;20492:45;;20422:126;20155:400;;;:::o;19728:416::-;19877:11;19959:16;19952:5;19948:28;19939:37;;20027:16;20016:9;20012:32;19999:45;;20109:15;20098:9;20095:30;20087:5;20076:9;20073:20;20070:56;20060:66;;19728:416;;;;;:::o;22958:159::-;;;;;:::o;29878:311::-;30013:7;30033:16;12141:3;30059:19;:41;;30033:68;;12141:3;30127:31;30138:4;30144:2;30148:9;30127:10;:31::i;:::-;30119:40;;:62;;30112:69;;;29878:311;;;;;:::o;17798:298::-;17878:14;17962:16;17955:5;17951:28;17942:37;;18071:5;18057:11;18032:23;18028:41;18025:52;18018:5;18015:63;18005:73;;17798:298;;;;:::o;23127:158::-;;;;;:::o;34878:201::-;34991:8;34975:13;:11;:13::i;:::-;:24;;;;:::i;:::-;31587:3;34961:38;;34952:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35048:23;35058:2;35062:8;35048:9;:23::i;:::-;34878:201;;:::o;32452:107::-;32514:7;32541:10;32534:17;;32452:107;:::o;8400:191::-;8474:16;8493:6;;;;;;;;;;;8474:25;;8519:8;8510:6;;:17;;;;;;;;;;;;;;;;;;8574:8;8543:40;;8564:8;8543:40;;;;;;;;;;;;8463:128;8400:191;:::o;23295:716::-;23458:4;23504:2;23479:45;;;23525:19;:17;:19::i;:::-;23546:4;23552:7;23561:5;23479:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23475:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23779:1;23762:6;:13;:18;23758:235;;;23808:40;;;;;;;;;;;;;;23758:235;23951:6;23945:13;23936:6;23932:2;23928:15;23921:38;23475:529;23648:54;;;23638:64;;;:6;:64;;;;23631:71;;;23295:716;;;;;;:::o;33212:108::-;33272:13;33305:7;33298:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33212:108;:::o;696:540::-;752:13;799:1;790:5;:10;786:53;;;817:10;;;;;;;;;;;;;;;;;;;;;786:53;849:12;864:5;849:20;;880:14;905:78;920:1;912:4;:9;905:78;;938:8;;;;;:::i;:::-;;;;969:2;961:10;;;;;:::i;:::-;;;905:78;;;993:19;1025:6;1015:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;993:39;;1043:154;1059:1;1050:5;:10;1043:154;;1087:1;1077:11;;;;;:::i;:::-;;;1154:2;1146:5;:10;;;;:::i;:::-;1133:2;:24;;;;:::i;:::-;1120:39;;1103:6;1110;1103:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1183:2;1174:11;;;;;:::i;:::-;;;1043:154;;;1221:6;1207:21;;;;;696:540;;;;:::o;14208:178::-;14269:7;11570:13;11641:2;14297:18;:25;14316:5;14297:25;;;;;;;;;;;;;;;;:50;;14296:82;14289:89;;14208:178;;;:::o;29719:147::-;29856:6;29719:147;;;;;:::o;27221:112::-;27298:27;27308:2;27312:8;27298:27;;;;;;;;;;;;:9;:27::i;:::-;27221:112;;:::o;26545:664::-;26676:19;26682:2;26686:8;26676:5;:19::i;:::-;26755:1;26737:2;:14;;;:19;26733:458;;26777:11;26791:13;;26777:27;;26823:13;26845:8;26839:3;:14;26823:30;;26872:233;26903:62;26942:1;26946:2;26950:7;;;;;;26959:5;26903:30;:62::i;:::-;26898:167;;27001:40;;;;;;;;;;;;;;26898:167;27100:3;27092:5;:11;26872:233;;27162:3;27145:13;;:20;27141:34;;27167:8;;;27141:34;26758:433;;26733:458;26545:664;;;:::o;24021:1533::-;24094:20;24117:13;;24094:36;;24157:1;24145:8;:13;24141:44;;;24167:18;;;;;;;;;;;;;;24141:44;24198:61;24228:1;24232:2;24236:12;24250:8;24198:21;:61::i;:::-;24386:1;11641:2;24356:1;:26;;24355:32;24343:8;:45;24317:18;:22;24336:2;24317:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;24451:139;24488:2;24542:33;24565:1;24569:2;24573:1;24542:14;:33::i;:::-;24509:30;24530:8;24509:20;:30::i;:::-;:66;24451:18;:139::i;:::-;24417:17;:31;24435:12;24417:31;;;;;;;;;;;:173;;;;24607:16;24638:11;24667:8;24652:12;:23;24638:37;;24769:16;24765:2;24761:25;24749:37;;25003:12;24971:8;24946:1;24897:25;24872:1;24848;24821:214;25115:1;25101:12;25097:20;25055:299;25156:3;25147:7;25144:16;25055:299;;25327:7;25317:8;25314:1;25287:25;25284:1;25281;25276:59;25209:1;25200:7;25196:15;25185:26;;25055:299;;;25059:77;25399:1;25387:8;:13;25383:45;;;25409:19;;;;;;;;;;;;;;25383:45;25461:3;25445:13;:19;;;;24280:1196;;25486:60;25515:1;25519:2;25523:12;25537:8;25486:20;:60::i;:::-;24083:1471;24021:1533;;:::o;18109:214::-;18179:14;18302:1;18292:8;18289:15;18263:24;18259:46;18249:56;;18109:214;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::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;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:553::-;1844:8;1854:6;1904:3;1897:4;1889:6;1885:17;1881:27;1871:122;;1912:79;;:::i;:::-;1871:122;2025:6;2012:20;2002:30;;2055:18;2047:6;2044:30;2041:117;;;2077:79;;:::i;:::-;2041:117;2191:4;2183:6;2179:17;2167:29;;2245:3;2237:4;2229:6;2225:17;2215:8;2211:32;2208:41;2205:128;;;2252:79;;:::i;:::-;2205:128;1786:553;;;;;:::o;2359:340::-;2415:5;2464:3;2457:4;2449:6;2445:17;2441:27;2431:122;;2472:79;;:::i;:::-;2431:122;2589:6;2576:20;2614:79;2689:3;2681:6;2674:4;2666:6;2662:17;2614:79;:::i;:::-;2605:88;;2421:278;2359:340;;;;:::o;2705:139::-;2751:5;2789:6;2776:20;2767:29;;2805:33;2832:5;2805:33;:::i;:::-;2705:139;;;;:::o;2850:329::-;2909:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:119;;;2964:79;;:::i;:::-;2926:119;3084:1;3109:53;3154:7;3145:6;3134:9;3130:22;3109:53;:::i;:::-;3099:63;;3055:117;2850:329;;;;:::o;3185:474::-;3253:6;3261;3310:2;3298:9;3289:7;3285:23;3281:32;3278:119;;;3316:79;;:::i;:::-;3278:119;3436:1;3461:53;3506:7;3497:6;3486:9;3482:22;3461:53;:::i;:::-;3451:63;;3407:117;3563:2;3589:53;3634:7;3625:6;3614:9;3610:22;3589:53;:::i;:::-;3579:63;;3534:118;3185:474;;;;;:::o;3665:619::-;3742:6;3750;3758;3807:2;3795:9;3786:7;3782:23;3778:32;3775:119;;;3813:79;;:::i;:::-;3775:119;3933:1;3958:53;4003:7;3994:6;3983:9;3979:22;3958:53;:::i;:::-;3948:63;;3904:117;4060:2;4086:53;4131:7;4122:6;4111:9;4107:22;4086:53;:::i;:::-;4076:63;;4031:118;4188:2;4214:53;4259:7;4250:6;4239:9;4235:22;4214:53;:::i;:::-;4204:63;;4159:118;3665:619;;;;;:::o;4290:943::-;4385:6;4393;4401;4409;4458:3;4446:9;4437:7;4433:23;4429:33;4426:120;;;4465:79;;:::i;:::-;4426:120;4585:1;4610:53;4655:7;4646:6;4635:9;4631:22;4610:53;:::i;:::-;4600:63;;4556:117;4712:2;4738:53;4783:7;4774:6;4763:9;4759:22;4738:53;:::i;:::-;4728:63;;4683:118;4840:2;4866:53;4911:7;4902:6;4891:9;4887:22;4866:53;:::i;:::-;4856:63;;4811:118;4996:2;4985:9;4981:18;4968:32;5027:18;5019:6;5016:30;5013:117;;;5049:79;;:::i;:::-;5013:117;5154:62;5208:7;5199:6;5188:9;5184:22;5154:62;:::i;:::-;5144:72;;4939:287;4290:943;;;;;;;:::o;5239:468::-;5304:6;5312;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5614:2;5640:50;5682:7;5673:6;5662:9;5658:22;5640:50;:::i;:::-;5630:60;;5585:115;5239:468;;;;;:::o;5713:474::-;5781:6;5789;5838:2;5826:9;5817:7;5813:23;5809:32;5806:119;;;5844:79;;:::i;:::-;5806:119;5964:1;5989:53;6034:7;6025:6;6014:9;6010:22;5989:53;:::i;:::-;5979:63;;5935:117;6091:2;6117:53;6162:7;6153:6;6142:9;6138:22;6117:53;:::i;:::-;6107:63;;6062:118;5713:474;;;;;:::o;6193:323::-;6249:6;6298:2;6286:9;6277:7;6273:23;6269:32;6266:119;;;6304:79;;:::i;:::-;6266:119;6424:1;6449:50;6491:7;6482:6;6471:9;6467:22;6449:50;:::i;:::-;6439:60;;6395:114;6193:323;;;;:::o;6522:327::-;6580:6;6629:2;6617:9;6608:7;6604:23;6600:32;6597:119;;;6635:79;;:::i;:::-;6597:119;6755:1;6780:52;6824:7;6815:6;6804:9;6800:22;6780:52;:::i;:::-;6770:62;;6726:116;6522:327;;;;:::o;6855:349::-;6924:6;6973:2;6961:9;6952:7;6948:23;6944:32;6941:119;;;6979:79;;:::i;:::-;6941:119;7099:1;7124:63;7179:7;7170:6;7159:9;7155:22;7124:63;:::i;:::-;7114:73;;7070:127;6855:349;;;;:::o;7210:529::-;7281:6;7289;7338:2;7326:9;7317:7;7313:23;7309:32;7306:119;;;7344:79;;:::i;:::-;7306:119;7492:1;7481:9;7477:17;7464:31;7522:18;7514:6;7511:30;7508:117;;;7544:79;;:::i;:::-;7508:117;7657:65;7714:7;7705:6;7694:9;7690:22;7657:65;:::i;:::-;7639:83;;;;7435:297;7210:529;;;;;:::o;7745:509::-;7814:6;7863:2;7851:9;7842:7;7838:23;7834:32;7831:119;;;7869:79;;:::i;:::-;7831:119;8017:1;8006:9;8002:17;7989:31;8047:18;8039:6;8036:30;8033:117;;;8069:79;;:::i;:::-;8033:117;8174:63;8229:7;8220:6;8209:9;8205:22;8174:63;:::i;:::-;8164:73;;7960:287;7745:509;;;;:::o;8260:329::-;8319:6;8368:2;8356:9;8347:7;8343:23;8339:32;8336:119;;;8374:79;;:::i;:::-;8336:119;8494:1;8519:53;8564:7;8555:6;8544:9;8540:22;8519:53;:::i;:::-;8509:63;;8465:117;8260:329;;;;:::o;8595:474::-;8663:6;8671;8720:2;8708:9;8699:7;8695:23;8691:32;8688:119;;;8726:79;;:::i;:::-;8688:119;8846:1;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8817:117;8973:2;8999:53;9044:7;9035:6;9024:9;9020:22;8999:53;:::i;:::-;8989:63;;8944:118;8595:474;;;;;:::o;9075:118::-;9162:24;9180:5;9162:24;:::i;:::-;9157:3;9150:37;9075:118;;:::o;9199:109::-;9280:21;9295:5;9280:21;:::i;:::-;9275:3;9268:34;9199:109;;:::o;9314:118::-;9401:24;9419:5;9401:24;:::i;:::-;9396:3;9389:37;9314:118;;:::o;9438:360::-;9524:3;9552:38;9584:5;9552:38;:::i;:::-;9606:70;9669:6;9664:3;9606:70;:::i;:::-;9599:77;;9685:52;9730:6;9725:3;9718:4;9711:5;9707:16;9685:52;:::i;:::-;9762:29;9784:6;9762:29;:::i;:::-;9757:3;9753:39;9746:46;;9528:270;9438:360;;;;:::o;9804:364::-;9892:3;9920:39;9953:5;9920:39;:::i;:::-;9975:71;10039:6;10034:3;9975:71;:::i;:::-;9968:78;;10055:52;10100:6;10095:3;10088:4;10081:5;10077:16;10055:52;:::i;:::-;10132:29;10154:6;10132:29;:::i;:::-;10127:3;10123:39;10116:46;;9896:272;9804:364;;;;:::o;10174:377::-;10280:3;10308:39;10341:5;10308:39;:::i;:::-;10363:89;10445:6;10440:3;10363:89;:::i;:::-;10356:96;;10461:52;10506:6;10501:3;10494:4;10487:5;10483:16;10461:52;:::i;:::-;10538:6;10533:3;10529:16;10522:23;;10284:267;10174:377;;;;:::o;10581:845::-;10684:3;10721:5;10715:12;10750:36;10776:9;10750:36;:::i;:::-;10802:89;10884:6;10879:3;10802:89;:::i;:::-;10795:96;;10922:1;10911:9;10907:17;10938:1;10933:137;;;;11084:1;11079:341;;;;10900:520;;10933:137;11017:4;11013:9;11002;10998:25;10993:3;10986:38;11053:6;11048:3;11044:16;11037:23;;10933:137;;11079:341;11146:38;11178:5;11146:38;:::i;:::-;11206:1;11220:154;11234:6;11231:1;11228:13;11220:154;;;11308:7;11302:14;11298:1;11293:3;11289:11;11282:35;11358:1;11349:7;11345:15;11334:26;;11256:4;11253:1;11249:12;11244:17;;11220:154;;;11403:6;11398:3;11394:16;11387:23;;11086:334;;10900:520;;10688:738;;10581:845;;;;:::o;11432:366::-;11574:3;11595:67;11659:2;11654:3;11595:67;:::i;:::-;11588:74;;11671:93;11760:3;11671:93;:::i;:::-;11789:2;11784:3;11780:12;11773:19;;11432:366;;;:::o;11804:::-;11946:3;11967:67;12031:2;12026:3;11967:67;:::i;:::-;11960:74;;12043:93;12132:3;12043:93;:::i;:::-;12161:2;12156:3;12152:12;12145:19;;11804:366;;;:::o;12176:::-;12318:3;12339:67;12403:2;12398:3;12339:67;:::i;:::-;12332:74;;12415:93;12504:3;12415:93;:::i;:::-;12533:2;12528:3;12524:12;12517:19;;12176:366;;;:::o;12548:::-;12690:3;12711:67;12775:2;12770:3;12711:67;:::i;:::-;12704:74;;12787:93;12876:3;12787:93;:::i;:::-;12905:2;12900:3;12896:12;12889:19;;12548:366;;;:::o;12920:::-;13062:3;13083:67;13147:2;13142:3;13083:67;:::i;:::-;13076:74;;13159:93;13248:3;13159:93;:::i;:::-;13277:2;13272:3;13268:12;13261:19;;12920:366;;;:::o;13292:::-;13434:3;13455:67;13519:2;13514:3;13455:67;:::i;:::-;13448:74;;13531:93;13620:3;13531:93;:::i;:::-;13649:2;13644:3;13640:12;13633:19;;13292:366;;;:::o;13664:::-;13806:3;13827:67;13891:2;13886:3;13827:67;:::i;:::-;13820:74;;13903:93;13992:3;13903:93;:::i;:::-;14021:2;14016:3;14012:12;14005:19;;13664:366;;;:::o;14036:::-;14178:3;14199:67;14263:2;14258:3;14199:67;:::i;:::-;14192:74;;14275:93;14364:3;14275:93;:::i;:::-;14393:2;14388:3;14384:12;14377:19;;14036:366;;;:::o;14408:118::-;14495:24;14513:5;14495:24;:::i;:::-;14490:3;14483:37;14408:118;;:::o;14532:589::-;14757:3;14779:95;14870:3;14861:6;14779:95;:::i;:::-;14772:102;;14891:95;14982:3;14973:6;14891:95;:::i;:::-;14884:102;;15003:92;15091:3;15082:6;15003:92;:::i;:::-;14996:99;;15112:3;15105:10;;14532:589;;;;;;:::o;15127:222::-;15220:4;15258:2;15247:9;15243:18;15235:26;;15271:71;15339:1;15328:9;15324:17;15315:6;15271:71;:::i;:::-;15127:222;;;;:::o;15355:640::-;15550:4;15588:3;15577:9;15573:19;15565:27;;15602:71;15670:1;15659:9;15655:17;15646:6;15602:71;:::i;:::-;15683:72;15751:2;15740:9;15736:18;15727:6;15683:72;:::i;:::-;15765;15833:2;15822:9;15818:18;15809:6;15765:72;:::i;:::-;15884:9;15878:4;15874:20;15869:2;15858:9;15854:18;15847:48;15912:76;15983:4;15974:6;15912:76;:::i;:::-;15904:84;;15355:640;;;;;;;:::o;16001:332::-;16122:4;16160:2;16149:9;16145:18;16137:26;;16173:71;16241:1;16230:9;16226:17;16217:6;16173:71;:::i;:::-;16254:72;16322:2;16311:9;16307:18;16298:6;16254:72;:::i;:::-;16001:332;;;;;:::o;16339:210::-;16426:4;16464:2;16453:9;16449:18;16441:26;;16477:65;16539:1;16528:9;16524:17;16515:6;16477:65;:::i;:::-;16339:210;;;;:::o;16555:222::-;16648:4;16686:2;16675:9;16671:18;16663:26;;16699:71;16767:1;16756:9;16752:17;16743:6;16699:71;:::i;:::-;16555:222;;;;:::o;16783:313::-;16896:4;16934:2;16923:9;16919:18;16911:26;;16983:9;16977:4;16973:20;16969:1;16958:9;16954:17;16947:47;17011:78;17084:4;17075:6;17011:78;:::i;:::-;17003:86;;16783:313;;;;:::o;17102:419::-;17268:4;17306:2;17295:9;17291:18;17283:26;;17355:9;17349:4;17345:20;17341:1;17330:9;17326:17;17319:47;17383:131;17509:4;17383:131;:::i;:::-;17375:139;;17102:419;;;:::o;17527:::-;17693:4;17731:2;17720:9;17716:18;17708:26;;17780:9;17774:4;17770:20;17766:1;17755:9;17751:17;17744:47;17808:131;17934:4;17808:131;:::i;:::-;17800:139;;17527:419;;;:::o;17952:::-;18118:4;18156:2;18145:9;18141:18;18133:26;;18205:9;18199:4;18195:20;18191:1;18180:9;18176:17;18169:47;18233:131;18359:4;18233:131;:::i;:::-;18225:139;;17952:419;;;:::o;18377:::-;18543:4;18581:2;18570:9;18566:18;18558:26;;18630:9;18624:4;18620:20;18616:1;18605:9;18601:17;18594:47;18658:131;18784:4;18658:131;:::i;:::-;18650:139;;18377:419;;;:::o;18802:::-;18968:4;19006:2;18995:9;18991:18;18983:26;;19055:9;19049:4;19045:20;19041:1;19030:9;19026:17;19019:47;19083:131;19209:4;19083:131;:::i;:::-;19075:139;;18802:419;;;:::o;19227:::-;19393:4;19431:2;19420:9;19416:18;19408:26;;19480:9;19474:4;19470:20;19466:1;19455:9;19451:17;19444:47;19508:131;19634:4;19508:131;:::i;:::-;19500:139;;19227:419;;;:::o;19652:::-;19818:4;19856:2;19845:9;19841:18;19833:26;;19905:9;19899:4;19895:20;19891:1;19880:9;19876:17;19869:47;19933:131;20059:4;19933:131;:::i;:::-;19925:139;;19652:419;;;:::o;20077:::-;20243:4;20281:2;20270:9;20266:18;20258:26;;20330:9;20324:4;20320:20;20316:1;20305:9;20301:17;20294:47;20358:131;20484:4;20358:131;:::i;:::-;20350:139;;20077:419;;;:::o;20502:222::-;20595:4;20633:2;20622:9;20618:18;20610:26;;20646:71;20714:1;20703:9;20699:17;20690:6;20646:71;:::i;:::-;20502:222;;;;:::o;20730:129::-;20764:6;20791:20;;:::i;:::-;20781:30;;20820:33;20848:4;20840:6;20820:33;:::i;:::-;20730:129;;;:::o;20865:75::-;20898:6;20931:2;20925:9;20915:19;;20865:75;:::o;20946:307::-;21007:4;21097:18;21089:6;21086:30;21083:56;;;21119:18;;:::i;:::-;21083:56;21157:29;21179:6;21157:29;:::i;:::-;21149:37;;21241:4;21235;21231:15;21223:23;;20946:307;;;:::o;21259:308::-;21321:4;21411:18;21403:6;21400:30;21397:56;;;21433:18;;:::i;:::-;21397:56;21471:29;21493:6;21471:29;:::i;:::-;21463:37;;21555:4;21549;21545:15;21537:23;;21259:308;;;:::o;21573:141::-;21622:4;21645:3;21637:11;;21668:3;21665:1;21658:14;21702:4;21699:1;21689:18;21681:26;;21573:141;;;:::o;21720:98::-;21771:6;21805:5;21799:12;21789:22;;21720:98;;;:::o;21824:99::-;21876:6;21910:5;21904:12;21894:22;;21824:99;;;:::o;21929:168::-;22012:11;22046:6;22041:3;22034:19;22086:4;22081:3;22077:14;22062:29;;21929:168;;;;:::o;22103:169::-;22187:11;22221:6;22216:3;22209:19;22261:4;22256:3;22252:14;22237:29;;22103:169;;;;:::o;22278:148::-;22380:11;22417:3;22402:18;;22278:148;;;;:::o;22432:305::-;22472:3;22491:20;22509:1;22491:20;:::i;:::-;22486:25;;22525:20;22543:1;22525:20;:::i;:::-;22520:25;;22679:1;22611:66;22607:74;22604:1;22601:81;22598:107;;;22685:18;;:::i;:::-;22598:107;22729:1;22726;22722:9;22715:16;;22432:305;;;;:::o;22743:185::-;22783:1;22800:20;22818:1;22800:20;:::i;:::-;22795:25;;22834:20;22852:1;22834:20;:::i;:::-;22829:25;;22873:1;22863:35;;22878:18;;:::i;:::-;22863:35;22920:1;22917;22913:9;22908:14;;22743:185;;;;:::o;22934:348::-;22974:7;22997:20;23015:1;22997:20;:::i;:::-;22992:25;;23031:20;23049:1;23031:20;:::i;:::-;23026:25;;23219:1;23151:66;23147:74;23144:1;23141:81;23136:1;23129:9;23122:17;23118:105;23115:131;;;23226:18;;:::i;:::-;23115:131;23274:1;23271;23267:9;23256:20;;22934:348;;;;:::o;23288:191::-;23328:4;23348:20;23366:1;23348:20;:::i;:::-;23343:25;;23382:20;23400:1;23382:20;:::i;:::-;23377:25;;23421:1;23418;23415:8;23412:34;;;23426:18;;:::i;:::-;23412:34;23471:1;23468;23464:9;23456:17;;23288:191;;;;:::o;23485:96::-;23522:7;23551:24;23569:5;23551:24;:::i;:::-;23540:35;;23485:96;;;:::o;23587:90::-;23621:7;23664:5;23657:13;23650:21;23639:32;;23587:90;;;:::o;23683:77::-;23720:7;23749:5;23738:16;;23683:77;;;:::o;23766:149::-;23802:7;23842:66;23835:5;23831:78;23820:89;;23766:149;;;:::o;23921:126::-;23958:7;23998:42;23991:5;23987:54;23976:65;;23921:126;;;:::o;24053:77::-;24090:7;24119:5;24108:16;;24053:77;;;:::o;24136:154::-;24220:6;24215:3;24210;24197:30;24282:1;24273:6;24268:3;24264:16;24257:27;24136:154;;;:::o;24296:307::-;24364:1;24374:113;24388:6;24385:1;24382:13;24374:113;;;24473:1;24468:3;24464:11;24458:18;24454:1;24449:3;24445:11;24438:39;24410:2;24407:1;24403:10;24398:15;;24374:113;;;24505:6;24502:1;24499:13;24496:101;;;24585:1;24576:6;24571:3;24567:16;24560:27;24496:101;24345:258;24296:307;;;:::o;24609:320::-;24653:6;24690:1;24684:4;24680:12;24670:22;;24737:1;24731:4;24727:12;24758:18;24748:81;;24814:4;24806:6;24802:17;24792:27;;24748:81;24876:2;24868:6;24865:14;24845:18;24842:38;24839:84;;;24895:18;;:::i;:::-;24839:84;24660:269;24609:320;;;:::o;24935:281::-;25018:27;25040:4;25018:27;:::i;:::-;25010:6;25006:40;25148:6;25136:10;25133:22;25112:18;25100:10;25097:34;25094:62;25091:88;;;25159:18;;:::i;:::-;25091:88;25199:10;25195:2;25188:22;24978:238;24935:281;;:::o;25222:233::-;25261:3;25284:24;25302:5;25284:24;:::i;:::-;25275:33;;25330:66;25323:5;25320:77;25317:103;;;25400:18;;:::i;:::-;25317:103;25447:1;25440:5;25436:13;25429:20;;25222:233;;;:::o;25461:176::-;25493:1;25510:20;25528:1;25510:20;:::i;:::-;25505:25;;25544:20;25562:1;25544:20;:::i;:::-;25539:25;;25583:1;25573:35;;25588:18;;:::i;:::-;25573:35;25629:1;25626;25622:9;25617:14;;25461:176;;;;:::o;25643:180::-;25691:77;25688:1;25681:88;25788:4;25785:1;25778:15;25812:4;25809:1;25802:15;25829:180;25877:77;25874:1;25867:88;25974:4;25971:1;25964:15;25998:4;25995:1;25988:15;26015:180;26063:77;26060:1;26053:88;26160:4;26157:1;26150:15;26184:4;26181:1;26174:15;26201:180;26249:77;26246:1;26239:88;26346:4;26343:1;26336:15;26370:4;26367:1;26360:15;26387:180;26435:77;26432:1;26425:88;26532:4;26529:1;26522:15;26556:4;26553:1;26546:15;26573:117;26682:1;26679;26672:12;26696:117;26805:1;26802;26795:12;26819:117;26928:1;26925;26918:12;26942:117;27051:1;27048;27041:12;27065:117;27174:1;27171;27164:12;27188:117;27297:1;27294;27287:12;27311:102;27352:6;27403:2;27399:7;27394:2;27387:5;27383:14;27379:28;27369:38;;27311:102;;;:::o;27419:164::-;27559:16;27555:1;27547:6;27543:14;27536:40;27419:164;:::o;27589:225::-;27729:34;27725:1;27717:6;27713:14;27706:58;27798:8;27793:2;27785:6;27781:15;27774:33;27589:225;:::o;27820:174::-;27960:26;27956:1;27948:6;27944:14;27937:50;27820:174;:::o;28000:182::-;28140:34;28136:1;28128:6;28124:14;28117:58;28000:182;:::o;28188:234::-;28328:34;28324:1;28316:6;28312:14;28305:58;28397:17;28392:2;28384:6;28380:15;28373:42;28188:234;:::o;28428:174::-;28568:26;28564:1;28556:6;28552:14;28545:50;28428:174;:::o;28608:181::-;28748:33;28744:1;28736:6;28732:14;28725:57;28608:181;:::o;28795:174::-;28935:26;28931:1;28923:6;28919:14;28912:50;28795:174;:::o;28975:122::-;29048:24;29066:5;29048:24;:::i;:::-;29041:5;29038:35;29028:63;;29087:1;29084;29077:12;29028:63;28975:122;:::o;29103:116::-;29173:21;29188:5;29173:21;:::i;:::-;29166:5;29163:32;29153:60;;29209:1;29206;29199:12;29153:60;29103:116;:::o;29225:120::-;29297:23;29314:5;29297:23;:::i;:::-;29290:5;29287:34;29277:62;;29335:1;29332;29325:12;29277:62;29225:120;:::o;29351:122::-;29424:24;29442:5;29424:24;:::i;:::-;29417:5;29414:35;29404:63;;29463:1;29460;29453:12;29404:63;29351:122;:::o

Swarm Source

ipfs://6828fe5e45dae81e9992886cd171009a85cef085393dd8af5d84fca20d67845c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.