ETH Price: $2,977.91 (-2.41%)
Gas: 4 Gwei

Token

REMO: Jurassic Edition (REM002)
 

Overview

Max Total Supply

343 REM002

Holders

122

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
griffawn.eth
Balance
1 REM002
0x0afb6658cb97ac27c4ac165a69d6d872beec243e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
remosworldsubcontract

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 3 of 4: jurassicedition.sol
// SPDX-License-Identifier: MIT

/*
  ____                         
 |  _ \  ___  _ __ ___    ___  
 | |_) |/ _ \| '_ ` _ \  / _ \ 
 |  _ <|  __/| | | | | || (_) |
 |_| \_\\___||_| |_| |_| \___/                           
      _                               _         _____     _  _  _    _               
     | | _   _  _ __  __ _  ___  ___ (_)  ___  | ____| __| |(_)| |_ (_)  ___   _ __  
  _  | || | | || '__|/ _` |/ __|/ __|| | / __| |  _|  / _` || || __|| | / _ \ | '_ \ 
 | |_| || |_| || |  | (_| |\__ \\__ \| || (__  | |___| (_| || || |_ | || (_) || | | |
  \___/  \__,_||_|   \__,_||___/|___/|_| \___| |_____|\__,_||_| \__||_| \___/ |_| |_|                                                                                  

Artist and Founder: Joey Tadiar
Smart Contract: giudev.eth
Technology: Forint Finance Ltd

*/


import "./contract.sol";
import "./library.sol";

pragma solidity ^0.8.14;

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

    IERC721A public remosAddress;

    string public uriPrefix = "";
    string public uriSuffix = "";

    bool public revealed = false;
    bool public paused = true;
    
    mapping(address => uint) public minted;
    mapping(uint => bool) public idMinted;

    uint256 public maxSupply = 500;
    uint256 public maxWalletAmount;
    

    uint256 public mintedNFT;
    
    uint256 public priceNFT = 0 ether;
    string public hiddenMetadataUri = "ipfs://QmdBZCmxMee698dr1CVjCR3PMdK23scu1barNMhK6z4jvn/";

    string public _name = "REMO: Jurassic Edition";
    string public _symbol = "REM002";
    
    constructor() ERC721A(_name, _symbol) {}

    modifier mintCompliance(uint256 _mintAmount) {
        require(msg.value >= priceNFT * _mintAmount, "Insufficient Funds");
        require(totalSupply() + _mintAmount <= maxSupply, "Mintable supply exceeded!");
        require(paused == false, "Contract paused");
        _;}

    function checkBalance(address _addr) public view returns (uint256) {
        uint256 balance = remosAddress.balanceOf(_addr);
        return balance;}

    function checkNFT(uint256[]memory _tokenId) public view returns (uint256[] memory, uint256[] memory) {
        
        uint256 _mintedAmount;
        uint256 _notMintedAmount;

        for (uint256 i = 0; i < _tokenId.length; i++) {
            if (idMinted[_tokenId[i]] == false) {
                _notMintedAmount ++;}
            else {
                _mintedAmount ++;}}

        uint256[] memory _notMintedNFT = new uint256[](_notMintedAmount);
        uint256[] memory _mintedNFT = new uint256[](_mintedAmount);
        uint256 _counterNotMinted;
        uint256 _counterMinted;

        for (uint256 i = 0; i < _tokenId.length; i++) {
            if (idMinted[_tokenId[i]] == false) {
                _notMintedNFT[_counterNotMinted] = _tokenId[i];
                _counterNotMinted ++;}
            else {
                _mintedNFT[_counterMinted] = _tokenId[i];
                _counterMinted ++;}}

        return (_notMintedNFT, _mintedNFT);}

    function setPrice(uint256 _price) public onlyOwner {
        priceNFT = _price;}

    function setNFTAddress(address _addr) public onlyOwner {
        remosAddress = IERC721A(_addr);}

    function ownerBlacklistBatchNFT(uint256[]memory _nftId) public onlyOwner {
        for (uint256 i = 0; i < _nftId.length; i++) {
            idMinted[_nftId[i]] = true;}}

    function blacklistBatchNFT(uint256[]memory _nftId) private {
        for (uint256 i = 0; i < _nftId.length; i++) {
            idMinted[_nftId[i]] = true;}}

    function mint(uint256[] memory _tokenId) public payable mintCompliance(_tokenId.length) nonReentrant {
        for (uint256 i = 0; i < _tokenId.length; i++) {
            require(remosAddress.ownerOf(_tokenId[i]) == _msgSender() && idMinted[_tokenId[i]] == false, "Not NFT owner or NFT not valid");}
        _safeMint(_msgSender(), _tokenId.length);
        blacklistBatchNFT(_tokenId);}

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

    function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
        require(_exists(_tokenId), 'ERC721Metadata: URI query for nonexistent token');
        if (revealed == false) {
            return hiddenMetadataUri;}
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)): '';}
    
    function setRevealed(bool _state) public onlyOwner {
        revealed = _state;}

    function setPause(bool _state) public onlyOwner {
        paused = _state;}

    function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
        hiddenMetadataUri = _hiddenMetadataUri;}

    function setUriPrefix(string memory _uriPrefix) public onlyOwner {
        uriPrefix = _uriPrefix;}

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

    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
        uriSuffix = _uriSuffix;}

    function getMinted() public view returns (uint256, uint256) {
        uint256 _mintedNFT = totalSupply();
        uint256 _totalSupply = maxSupply;
        return (_mintedNFT, _totalSupply);}

    receive() external payable {}

    fallback() external payable {}

    function transferERC20(address _tokenAddr, address _to, uint _amount) public onlyOwner nonReentrant {  
        require(new_type_IERC20(_tokenAddr).transfer(_to, _amount), "Could not transfer out tokens!");}

    function transferERC20O(address _tokenAddr, address _to, uint _amount) public onlyOwner nonReentrant {    
        old_type_IERC20(_tokenAddr).transfer(_to, _amount);}
        
    function withdrawEther(address _to) public onlyOwner nonReentrant {
        (bool os, ) = payable(_to).call{value: address(this).balance}('');
        require(os);}}

File 1 of 4: contract.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.14;

import "./interface.sol";

contract ERC721A is IERC721A {
    // Mask of an entry in packed address data.
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant BITMASK_BURNED = 1 << 224;
    
    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The tokenId of the next token to be minted.
    uint256 private _currentIndex;

    // The number of tokens burned.
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned.
    // See `_packedOwnershipOf` implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

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

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

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

    //Returns the starting token ID
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;}

    //Returns the next token ID to be minted
    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;}

    //Returns the total number of tokens in existence
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {return _currentIndex - _burnCounter - _startTokenId();}}

    //Returns the total amount of tokens minted in the contract
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to `_startTokenId()`
        unchecked {
            return _currentIndex - _startTokenId();}}

    //Returns the total number of tokens burned
    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;}

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes of the XOR of
        // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
        // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
        return
            interfaceId == 0x01ffc9a7 || interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f;}

    function balanceOf(address owner) public view 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 {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly { // Cast aux without masking.
            auxCasted := aux}
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;}

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;
        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // Invariant:
                        // There will always be an ownership that has an address and is not burned
                        // before an ownership that does not have an address and is not burned.
                        // Hence, curr will not underflow.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        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;}

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

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

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

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

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

    //Base URI for computing {tokenURI}. 
    function _baseURI() internal view virtual returns (string memory) {
        return '';}

    function _addressToUint256(address value) private pure returns (uint256 result) {
        assembly {
            result := value}}

    function _boolToUint256(bool value) private pure returns (uint256 result) {
        assembly {
            result := value}}

    function approve(address to, uint256 tokenId) public override {
        address owner = address(uint160(_packedOwnershipOf(tokenId)));
        if (to == owner) revert ApprovalToCurrentOwner();
        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();}
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);}

    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();
        return _tokenApprovals[tokenId];}

    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 transferFrom(address from, address to, uint256 tokenId) public virtual override {
        _transfer(from, to, tokenId);}

    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 {
        _transfer(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();}}

    //Returns whether `tokenId` exists
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && _packedOwnerships[tokenId] & BITMASK_BURNED == 0;}

    //Equivalent to `_safeMint(to, quantity, '')`
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');}

    //Safely mints `quantity` tokens and transfers them to `to`
    function _safeMint(address to, uint256 quantity, bytes memory _data) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        _beforeTokenTransfers(address(0), to, startTokenId, quantity);
        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);
            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);
            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;
            if (to.code.length != 0) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();}} 
                while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();} 
                else {
                do {emit Transfer(address(0), to, updatedIndex++);} while (updatedIndex < end);}
            _currentIndex = updatedIndex;}
        _afterTokenTransfers(address(0), to, startTokenId, quantity);}

    //Mints `quantity` tokens and transfers them to `to`
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        _beforeTokenTransfers(address(0), to, startTokenId, quantity);
        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);
            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);
            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;
            do {emit Transfer(address(0), to, updatedIndex++);} while (updatedIndex < end);
            _currentIndex = updatedIndex;}
        _afterTokenTransfers(address(0), to, startTokenId, quantity);}

    //Transfers `tokenId` from `from` to `to`
    function _transfer(address from, address to, uint256 tokenId) private {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);
        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();
        bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
            isApprovedForAll(from, _msgSenderERC721A()) ||
            getApproved(tokenId) == _msgSenderERC721A());
        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();
        _beforeTokenTransfers(from, to, tokenId, 1);
        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];
        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.
            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_NEXT_INITIALIZED;
            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;}}}}
        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);}

    //Equivalent to `_burn(tokenId, false)`
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);}

    //Destroys `tokenId`
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);
        address from = address(uint160(prevOwnershipPacked));
        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A());
            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();}
        _beforeTokenTransfers(from, address(0), tokenId, 1);
        // Clear approvals from the previous owner.
        delete _tokenApprovals[tokenId];
        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;
            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(from) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_BURNED | 
                BITMASK_NEXT_INITIALIZED;
            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;}}}}
        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);
        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {_burnCounter++;}}

    //Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract
    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))}}}}

    //Hook that is called before a set of serially-ordered token ids are about to be transferred
    function _beforeTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {}

    //Hook that is called after a set of serially-ordered token ids have been transferred
    function _afterTokenTransfers(address from, address to, uint256 startTokenId, uint256 quantity) internal virtual {}

    //Returns the message sender (defaults to `msg.sender`)
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;}

    //Converts a `uint256` to its ASCII `string` decimal representation
    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), 
            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length, 
            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for { 
                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)} 
            temp { 
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)} { // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))}
            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)}}}

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

    constructor() {
        _status = _NOT_ENTERED;}

    //Prevents a contract from calling itself, directly or indirectly.
    //Calling a `nonReentrant` function from another `nonReentrant`function is not supported. 
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;}}

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

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

abstract contract Ownable is Context {

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

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

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

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

    function renounceOwnership() public virtual onlyOwner {
        //Leaves the contract without owner
        _transferOwnership(address(0));}

    function transferOwnership(address newOwner) public virtual onlyOwner {
        //Transfers ownership of the contract to a new account (`newOwner`)
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);}

    function _transferOwnership(address newOwner) internal virtual {
        //Transfers ownership of the contract to a new account (`newOwner`)
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);}}

File 2 of 4: interface.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.14;
                                  
interface IERC721A {

    // The caller must own the token or be an approved operator
    error ApprovalCallerNotOwnerNorApproved();

    //The token does not exist
    error ApprovalQueryForNonexistentToken();

    //The caller cannot approve to their own address
    error ApproveToCaller();

    //The caller cannot approve to the current owner
    error ApprovalToCurrentOwner();

    //Cannot query the balance for the zero address
    error BalanceQueryForZeroAddress();

    //Cannot mint to the zero address
    error MintToZeroAddress();

    //The quantity of tokens minted must be more than zero
    error MintZeroQuantity();

    //The token does not exist
    error OwnerQueryForNonexistentToken();

    //The caller must own the token or be an approved operator.
    error TransferCallerNotOwnerNorApproved();

    ///The token must be owned by `from`
    error TransferFromIncorrectOwner();

    //Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
    error TransferToNonERC721ReceiverImplementer();

    //Cannot transfer to the zero address
    error TransferToZeroAddress();

    //The token does not exist
    error URIQueryForNonexistentToken();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;}

    //Returns the total amount of tokens stored by the contract
    //Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens
    function totalSupply() external view returns (uint256);

    //Returns true if this contract implements the interface defined by `interfaceId`
    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    //Emitted when `tokenId` token is transferred from `from` to `to`
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

    //Returns the number of tokens in `owner` account
    function balanceOf(address owner) external view returns (uint256 balance);

    //Returns the owner of the `tokenId` token
    function ownerOf(uint256 tokenId) external view returns (address owner);

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

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

    //Transfers `tokenId` token from `from` to `to`
    //Requirements: `from` cannot be the zero address
    //              `to` cannot be the zero address
    //              `tokenId` token must be owned by `from`
    //              If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}
    function transferFrom(address from, address to, uint256 tokenId) external;

    //Gives permission to `to` to transfer `tokenId` token to another account
    function approve(address to, uint256 tokenId) external;

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

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

    //Returns if the `operator` is allowed to manage all of the assets of `owner`
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    //Returns the token collection name
    function name() external view returns (string memory);

    //Returns the token collection symbol
    function symbol() external view returns (string memory);

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

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

interface new_type_IERC20 {
    function transfer(address, uint) external returns (bool);}

interface old_type_IERC20 {
    function transfer(address, uint) external;}

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

pragma solidity ^0.8.14;

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","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":"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenId","type":"uint256[]"}],"name":"checkNFT","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"idMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenId","type":"uint256[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintedNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_nftId","type":"uint256[]"}],"name":"ownerBlacklistBatchNFT","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remosAddress","outputs":[{"internalType":"contract IERC721A","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferERC20O","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260405180602001604052805f815250600b908162000023919062000609565b5060405180602001604052805f815250600c908162000043919062000609565b505f600d5f6101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055506101f46010555f60135560405180606001604052806036815260200162004edb6036913960149081620000ac919062000609565b506040518060400160405280601681526020017f52454d4f3a204a757261737369632045646974696f6e0000000000000000000081525060159081620000f3919062000609565b506040518060400160405280600681526020017f52454d3030320000000000000000000000000000000000000000000000000000815250601690816200013a919062000609565b5034801562000147575f80fd5b5060158054620001579062000409565b80601f0160208091040260200160405190810160405280929190818152602001828054620001859062000409565b8015620001d45780601f10620001aa57610100808354040283529160200191620001d4565b820191905f5260205f20905b815481529060010190602001808311620001b657829003601f168201915b505050505060168054620001e89062000409565b80601f0160208091040260200160405190810160405280929190818152602001828054620002169062000409565b8015620002655780601f106200023b5761010080835404028352916020019162000265565b820191905f5260205f20905b8154815290600101906020018083116200024757829003601f168201915b505050505081600290816200027b919062000609565b5080600390816200028d919062000609565b506200029e620002d360201b60201c565b5f819055505050620002c5620002b9620002db60201b60201c565b620002e260201b60201c565b6001600981905550620006ed565b5f6001905090565b5f33905090565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200042157607f821691505b602082108103620004375762000436620003dc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200049b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200045e565b620004a786836200045e565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620004f1620004eb620004e584620004bf565b620004c8565b620004bf565b9050919050565b5f819050919050565b6200050c83620004d1565b620005246200051b82620004f8565b8484546200046a565b825550505050565b5f90565b6200053a6200052c565b6200054781848462000501565b505050565b5b818110156200056e57620005625f8262000530565b6001810190506200054d565b5050565b601f821115620005bd5762000587816200043d565b62000592846200044f565b81016020851015620005a2578190505b620005ba620005b1856200044f565b8301826200054c565b50505b505050565b5f82821c905092915050565b5f620005df5f1984600802620005c2565b1980831691505092915050565b5f620005f98383620005ce565b9150826002028217905092915050565b6200061482620003a5565b67ffffffffffffffff81111562000630576200062f620003af565b5b6200063c825462000409565b6200064982828562000572565b5f60209050601f8311600181146200067f575f84156200066a578287015190505b620006768582620005ec565b865550620006e5565b601f1984166200068f866200043d565b5f5b82811015620006b85784890151825560018201915060208501945060208101905062000691565b86831015620006d85784890151620006d4601f891682620005ce565b8355505b6001600288020188555050505b505050505050565b6147e080620006fb5f395ff3fe608060405260043610610280575f3560e01c80638da5cb5b1161014e578063b09f1266116100c0578063d5abeb0111610079578063d5abeb011461098d578063e0a80853146109b7578063e985e9c5146109df578063f044951314610a1b578063f2fde38b14610a43578063f8e93ef914610a6b57610287565b8063b09f126614610885578063b236ff82146108af578063b88d4fde146108d7578063bedb86fb146108ff578063c87b56dd14610927578063d28d88521461096357610287565b80639db5dbe4116101125780639db5dbe41461078e578063a22cb465146107b6578063a45ba8e7146107de578063aa4bde2814610808578063ac72200d14610832578063af933b571461085d57610287565b80638da5cb5b146106ab5780638e09a116146106d557806391b7f5ed1461071257806395d89b411461073a5780639d03e6d01461076457610287565b806351830227116101f257806365627f15116101ab57806365627f15146105b557806369d03738146105df5780636f0b78711461060757806370a0823114610631578063715018a61461066d5780637ec4a6591461068357610287565b806351830227146104955780635503a0e8146104bf5780635c975abb146104e95780635f5152261461051357806362b99ad41461054f5780636352211e1461057957610287565b806318160ddd1161024457806318160ddd1461037b5780631e7269c5146103a557806323b872dd146103e15780634272f4471461040957806342842e0e146104455780634fdd43cb1461046d57610287565b806301ffc9a71461028957806306fdde03146102c5578063081812fc146102ef578063095ea7b31461032b57806316ba10e01461035357610287565b3661028757005b005b348015610294575f80fd5b506102af60048036038101906102aa919061337a565b610a87565b6040516102bc91906133bf565b60405180910390f35b3480156102d0575f80fd5b506102d9610b18565b6040516102e69190613462565b60405180910390f35b3480156102fa575f80fd5b50610315600480360381019061031091906134b5565b610ba8565b604051610322919061351f565b60405180910390f35b348015610336575f80fd5b50610351600480360381019061034c9190613562565b610c20565b005b34801561035e575f80fd5b50610379600480360381019061037491906136cc565b610dc2565b005b348015610386575f80fd5b5061038f610e51565b60405161039c9190613722565b60405180910390f35b3480156103b0575f80fd5b506103cb60048036038101906103c6919061373b565b610e66565b6040516103d89190613722565b60405180910390f35b3480156103ec575f80fd5b5061040760048036038101906104029190613766565b610e7b565b005b348015610414575f80fd5b5061042f600480360381019061042a91906134b5565b610e8b565b60405161043c91906133bf565b60405180910390f35b348015610450575f80fd5b5061046b60048036038101906104669190613766565b610ea8565b005b348015610478575f80fd5b50610493600480360381019061048e91906136cc565b610ec7565b005b3480156104a0575f80fd5b506104a9610f56565b6040516104b691906133bf565b60405180910390f35b3480156104ca575f80fd5b506104d3610f68565b6040516104e09190613462565b60405180910390f35b3480156104f4575f80fd5b506104fd610ff4565b60405161050a91906133bf565b60405180910390f35b34801561051e575f80fd5b506105396004803603810190610534919061373b565b611007565b6040516105469190613722565b60405180910390f35b34801561055a575f80fd5b506105636110ad565b6040516105709190613462565b60405180910390f35b348015610584575f80fd5b5061059f600480360381019061059a91906134b5565b611139565b6040516105ac919061351f565b60405180910390f35b3480156105c0575f80fd5b506105c961114a565b6040516105d69190613811565b60405180910390f35b3480156105ea575f80fd5b506106056004803603810190610600919061373b565b61116f565b005b348015610612575f80fd5b5061061b61122e565b6040516106289190613722565b60405180910390f35b34801561063c575f80fd5b506106576004803603810190610652919061373b565b611234565b6040516106649190613722565b60405180910390f35b348015610678575f80fd5b506106816112e9565b005b34801561068e575f80fd5b506106a960048036038101906106a491906136cc565b611370565b005b3480156106b6575f80fd5b506106bf6113ff565b6040516106cc919061351f565b60405180910390f35b3480156106e0575f80fd5b506106fb60048036038101906106f691906138ee565b611427565b6040516107099291906139ec565b60405180910390f35b34801561071d575f80fd5b50610738600480360381019061073391906134b5565b611651565b005b348015610745575f80fd5b5061074e6116d7565b60405161075b9190613462565b60405180910390f35b34801561076f575f80fd5b50610778611767565b6040516107859190613722565b60405180910390f35b348015610799575f80fd5b506107b460048036038101906107af9190613766565b61176d565b005b3480156107c1575f80fd5b506107dc60048036038101906107d79190613a4b565b6118fd565b005b3480156107e9575f80fd5b506107f2611a6f565b6040516107ff9190613462565b60405180910390f35b348015610813575f80fd5b5061081c611afb565b6040516108299190613722565b60405180910390f35b34801561083d575f80fd5b50610846611b01565b604051610854929190613a89565b60405180910390f35b348015610868575f80fd5b50610883600480360381019061087e919061373b565b611b20565b005b348015610890575f80fd5b50610899611c66565b6040516108a69190613462565b60405180910390f35b3480156108ba575f80fd5b506108d560048036038101906108d09190613766565b611cf2565b005b3480156108e2575f80fd5b506108fd60048036038101906108f89190613b4e565b611e30565b005b34801561090a575f80fd5b5061092560048036038101906109209190613bce565b611ea2565b005b348015610932575f80fd5b5061094d600480360381019061094891906134b5565b611f3b565b60405161095a9190613462565b60405180910390f35b34801561096e575f80fd5b5061097761208c565b6040516109849190613462565b60405180910390f35b348015610998575f80fd5b506109a1612118565b6040516109ae9190613722565b60405180910390f35b3480156109c2575f80fd5b506109dd60048036038101906109d89190613bce565b61211e565b005b3480156109ea575f80fd5b50610a056004803603810190610a009190613bf9565b6121b6565b604051610a1291906133bf565b60405180910390f35b348015610a26575f80fd5b50610a416004803603810190610a3c91906138ee565b612244565b005b348015610a4e575f80fd5b50610a696004803603810190610a64919061373b565b612325565b005b610a856004803603810190610a8091906138ee565b61241b565b005b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ae157506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b115750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610b2790613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5390613c64565b8015610b9e5780601f10610b7557610100808354040283529160200191610b9e565b820191905f5260205f20905b815481529060010190602001808311610b8157829003601f168201915b5050505050905090565b5f610bb282612719565b610be8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610c2a82612773565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c91576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb0612836565b73ffffffffffffffffffffffffffffffffffffffff1614610d1357610cdc81610cd7612836565b6121b6565b610d12576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260065f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610dca61283d565b73ffffffffffffffffffffffffffffffffffffffff16610de86113ff565b73ffffffffffffffffffffffffffffffffffffffff1614610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3590613cde565b60405180910390fd5b80600c9081610e4d9190613e90565b5050565b5f610e5a612844565b6001545f540303905090565b600e602052805f5260405f205f915090505481565b610e8683838361284c565b505050565b600f602052805f5260405f205f915054906101000a900460ff1681565b610ec283838360405180602001604052805f815250611e30565b505050565b610ecf61283d565b73ffffffffffffffffffffffffffffffffffffffff16610eed6113ff565b73ffffffffffffffffffffffffffffffffffffffff1614610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90613cde565b60405180910390fd5b8060149081610f529190613e90565b5050565b600d5f9054906101000a900460ff1681565b600c8054610f7590613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa190613c64565b8015610fec5780601f10610fc357610100808354040283529160200191610fec565b820191905f5260205f20905b815481529060010190602001808311610fcf57829003601f168201915b505050505081565b600d60019054906101000a900460ff1681565b5f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611063919061351f565b602060405180830381865afa15801561107e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a29190613f73565b905080915050919050565b600b80546110ba90613c64565b80601f01602080910402602001604051908101604052809291908181526020018280546110e690613c64565b80156111315780601f1061110857610100808354040283529160200191611131565b820191905f5260205f20905b81548152906001019060200180831161111457829003601f168201915b505050505081565b5f61114382612773565b9050919050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61117761283d565b73ffffffffffffffffffffffffffffffffffffffff166111956113ff565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290613cde565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b6112f161283d565b73ffffffffffffffffffffffffffffffffffffffff1661130f6113ff565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90613cde565b60405180910390fd5b61136e5f612bdd565b565b61137861283d565b73ffffffffffffffffffffffffffffffffffffffff166113966113ff565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613cde565b60405180910390fd5b80600b90816113fb9190613e90565b5050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060805f805f5b85518110156114ae575f1515600f5f8884815181106114505761144f613f9e565b5b602002602001015181526020019081526020015f205f9054906101000a900460ff1615150361148c57818061148490613ff8565b92505061149b565b828061149790613ff8565b9350505b80806114a690613ff8565b91505061142e565b505f8167ffffffffffffffff8111156114ca576114c96135a8565b5b6040519080825280602002602001820160405280156114f85781602001602082028036833780820191505090505b5090505f8367ffffffffffffffff811115611516576115156135a8565b5b6040519080825280602002602001820160405280156115445781602001602082028036833780820191505090505b5090505f805f5b895181101561163f575f1515600f5f8c848151811061156d5761156c613f9e565b5b602002602001015181526020019081526020015f205f9054906101000a900460ff161515036115e3578981815181106115a9576115a8613f9e565b5b60200260200101518584815181106115c4576115c3613f9e565b5b60200260200101818152505082806115db90613ff8565b93505061162c565b8981815181106115f6576115f5613f9e565b5b602002602001015184838151811061161157611610613f9e565b5b602002602001018181525050818061162890613ff8565b9250505b808061163790613ff8565b91505061154b565b50838397509750505050505050915091565b61165961283d565b73ffffffffffffffffffffffffffffffffffffffff166116776113ff565b73ffffffffffffffffffffffffffffffffffffffff16146116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c490613cde565b60405180910390fd5b8060138190555050565b6060600380546116e690613c64565b80601f016020809104026020016040519081016040528092919081815260200182805461171290613c64565b801561175d5780601f106117345761010080835404028352916020019161175d565b820191905f5260205f20905b81548152906001019060200180831161174057829003601f168201915b5050505050905090565b60135481565b61177561283d565b73ffffffffffffffffffffffffffffffffffffffff166117936113ff565b73ffffffffffffffffffffffffffffffffffffffff16146117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090613cde565b60405180910390fd5b60026009540361182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590614089565b60405180910390fd5b60026009819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016118719291906140a7565b6020604051808303815f875af115801561188d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b191906140e2565b6118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614157565b60405180910390fd5b6001600981905550505050565b611905612836565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611969576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060075f611975612836565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a1e612836565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a6391906133bf565b60405180910390a35050565b60148054611a7c90613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa890613c64565b8015611af35780601f10611aca57610100808354040283529160200191611af3565b820191905f5260205f20905b815481529060010190602001808311611ad657829003601f168201915b505050505081565b60115481565b5f805f611b0c610e51565b90505f601054905081819350935050509091565b611b2861283d565b73ffffffffffffffffffffffffffffffffffffffff16611b466113ff565b73ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613cde565b60405180910390fd5b600260095403611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890614089565b60405180910390fd5b60026009819055505f8173ffffffffffffffffffffffffffffffffffffffff1647604051611c0e906141a2565b5f6040518083038185875af1925050503d805f8114611c48576040519150601f19603f3d011682016040523d82523d5f602084013e611c4d565b606091505b5050905080611c5a575f80fd5b50600160098190555050565b60168054611c7390613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9f90613c64565b8015611cea5780601f10611cc157610100808354040283529160200191611cea565b820191905f5260205f20905b815481529060010190602001808311611ccd57829003601f168201915b505050505081565b611cfa61283d565b73ffffffffffffffffffffffffffffffffffffffff16611d186113ff565b73ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613cde565b60405180910390fd5b600260095403611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90614089565b60405180910390fd5b60026009819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611df69291906140a7565b5f604051808303815f87803b158015611e0d575f80fd5b505af1158015611e1f573d5f803e3d5ffd5b505050506001600981905550505050565b611e3b84848461284c565b5f8373ffffffffffffffffffffffffffffffffffffffff163b14611e9c57611e6584848484612ca0565b611e9b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611eaa61283d565b73ffffffffffffffffffffffffffffffffffffffff16611ec86113ff565b73ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590613cde565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6060611f4682612719565b611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90614226565b60405180910390fd5b5f1515600d5f9054906101000a900460ff1615150361202e5760148054611fab90613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd790613c64565b80156120225780601f10611ff957610100808354040283529160200191612022565b820191905f5260205f20905b81548152906001019060200180831161200557829003601f168201915b50505050509050612087565b5f612037612deb565b90505f8151116120555760405180602001604052805f815250612083565b8061205f84612e7b565b600c604051602001612073939291906142fe565b6040516020818303038152906040525b9150505b919050565b6015805461209990613c64565b80601f01602080910402602001604051908101604052809291908181526020018280546120c590613c64565b80156121105780601f106120e757610100808354040283529160200191612110565b820191905f5260205f20905b8154815290600101906020018083116120f357829003601f168201915b505050505081565b60105481565b61212661283d565b73ffffffffffffffffffffffffffffffffffffffff166121446113ff565b73ffffffffffffffffffffffffffffffffffffffff161461219a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219190613cde565b60405180910390fd5b80600d5f6101000a81548160ff02191690831515021790555050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61224c61283d565b73ffffffffffffffffffffffffffffffffffffffff1661226a6113ff565b73ffffffffffffffffffffffffffffffffffffffff16146122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790613cde565b60405180910390fd5b5f5b8151811015612321576001600f5f8484815181106122e3576122e2613f9e565b5b602002602001015181526020019081526020015f205f6101000a81548160ff021916908315150217905550808061231990613ff8565b9150506122c2565b5050565b61232d61283d565b73ffffffffffffffffffffffffffffffffffffffff1661234b6113ff565b73ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239890613cde565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361240f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124069061439e565b60405180910390fd5b61241881612bdd565b50565b80518060135461242b91906143bc565b34101561246d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246490614447565b60405180910390fd5b60105481612479610e51565b6124839190614465565b11156124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb906144e2565b60405180910390fd5b5f1515600d60019054906101000a900460ff16151514612519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125109061454a565b60405180910390fd5b60026009540361255e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255590614089565b60405180910390fd5b60026009819055505f5b82518110156126f15761257961283d565b73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8584815181106125df576125de613f9e565b5b60200260200101516040518263ffffffff1660e01b81526004016126039190613722565b602060405180830381865afa15801561261e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612642919061457c565b73ffffffffffffffffffffffffffffffffffffffff1614801561269f57505f1515600f5f85848151811061267957612678613f9e565b5b602002602001015181526020019081526020015f205f9054906101000a900460ff161515145b6126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d5906145f1565b60405180910390fd5b80806126e990613ff8565b915050612568565b506127046126fd61283d565b8351612fd4565b61270d82612ff1565b60016009819055505050565b5f81612723612844565b1115801561273157505f5482105b801561276c57505f7c010000000000000000000000000000000000000000000000000000000060045f8581526020019081526020015f205416145b9050919050565b5f8082905080612781612844565b116127ff575f548110156127fe575f60045f8381526020019081526020015f205490505f7c01000000000000000000000000000000000000000000000000000000008216036127fc575b5f81036127f25760045f836001900393508381526020019081526020015f205490506127cb565b8092505050612831565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f33905090565b5f33905090565b5f6001905090565b5f61285682612773565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146128bd576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8473ffffffffffffffffffffffffffffffffffffffff166128dd612836565b73ffffffffffffffffffffffffffffffffffffffff16148061290c575061290b85612906612836565b6121b6565b5b80612951575061291a612836565b73ffffffffffffffffffffffffffffffffffffffff1661293984610ba8565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061298a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129ef576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129fc8585856001613056565b60065f8481526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b612af08661305c565b171760045f8581526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000831603612b6e575f6001840190505f60045f8381526020019081526020015f205403612b6c575f548114612b6b578260045f8381526020019081526020015f20819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bd68585856001613065565b5050505050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cc5612836565b8786866040518563ffffffff1660e01b8152600401612ce79493929190614661565b6020604051808303815f875af1925050508015612d2257506040513d601f19601f82011682018060405250810190612d1f91906146bf565b60015b612d98573d805f8114612d50576040519150601f19603f3d011682016040523d82523d5f602084013e612d55565b606091505b505f815103612d90576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b8054612dfa90613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2690613c64565b8015612e715780601f10612e4857610100808354040283529160200191612e71565b820191905f5260205f20905b815481529060010190602001808311612e5457829003601f168201915b5050505050905090565b60605f8203612ec1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fcf565b5f8290505f5b5f8214612ef0578080612ed990613ff8565b915050600a82612ee99190614717565b9150612ec7565b5f8167ffffffffffffffff811115612f0b57612f0a6135a8565b5b6040519080825280601f01601f191660200182016040528015612f3d5781602001600182028036833780820191505090505b5090505b5f8514612fc857600182612f559190614747565b9150600a85612f64919061477a565b6030612f709190614465565b60f81b818381518110612f8657612f85613f9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85612fc19190614717565b9450612f41565b8093505050505b919050565b612fed828260405180602001604052805f81525061306b565b5050565b5f5b8151811015613052576001600f5f84848151811061301457613013613f9e565b5b602002602001015181526020019081526020015f205f6101000a81548160ff021916908315150217905550808061304a90613ff8565b915050612ff3565b5050565b50505050565b5f819050919050565b50505050565b5f805490505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036130d5576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f830361310e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61311a5f858386613056565b600160406001901b17830260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555060e161317c6001851461330b565b901b60a042901b61318c8661305c565b171760045f8381526020019081526020015f20819055505f8190505f84820190505f8673ffffffffffffffffffffffffffffffffffffffff163b14613287575b818673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132395f878480600101955087612ca0565b61326f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106131cc57825f5414613282575f80fd5b6132f1565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613288575b815f8190555050506133055f858386613065565b50505050565b5f819050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61335981613325565b8114613363575f80fd5b50565b5f8135905061337481613350565b92915050565b5f6020828403121561338f5761338e61331d565b5b5f61339c84828501613366565b91505092915050565b5f8115159050919050565b6133b9816133a5565b82525050565b5f6020820190506133d25f8301846133b0565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561340f5780820151818401526020810190506133f4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613434826133d8565b61343e81856133e2565b935061344e8185602086016133f2565b6134578161341a565b840191505092915050565b5f6020820190508181035f83015261347a818461342a565b905092915050565b5f819050919050565b61349481613482565b811461349e575f80fd5b50565b5f813590506134af8161348b565b92915050565b5f602082840312156134ca576134c961331d565b5b5f6134d7848285016134a1565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613509826134e0565b9050919050565b613519816134ff565b82525050565b5f6020820190506135325f830184613510565b92915050565b613541816134ff565b811461354b575f80fd5b50565b5f8135905061355c81613538565b92915050565b5f80604083850312156135785761357761331d565b5b5f6135858582860161354e565b9250506020613596858286016134a1565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6135de8261341a565b810181811067ffffffffffffffff821117156135fd576135fc6135a8565b5b80604052505050565b5f61360f613314565b905061361b82826135d5565b919050565b5f67ffffffffffffffff82111561363a576136396135a8565b5b6136438261341a565b9050602081019050919050565b828183375f83830152505050565b5f61367061366b84613620565b613606565b90508281526020810184848401111561368c5761368b6135a4565b5b613697848285613650565b509392505050565b5f82601f8301126136b3576136b26135a0565b5b81356136c384826020860161365e565b91505092915050565b5f602082840312156136e1576136e061331d565b5b5f82013567ffffffffffffffff8111156136fe576136fd613321565b5b61370a8482850161369f565b91505092915050565b61371c81613482565b82525050565b5f6020820190506137355f830184613713565b92915050565b5f602082840312156137505761374f61331d565b5b5f61375d8482850161354e565b91505092915050565b5f805f6060848603121561377d5761377c61331d565b5b5f61378a8682870161354e565b935050602061379b8682870161354e565b92505060406137ac868287016134a1565b9150509250925092565b5f819050919050565b5f6137d96137d46137cf846134e0565b6137b6565b6134e0565b9050919050565b5f6137ea826137bf565b9050919050565b5f6137fb826137e0565b9050919050565b61380b816137f1565b82525050565b5f6020820190506138245f830184613802565b92915050565b5f67ffffffffffffffff821115613844576138436135a8565b5b602082029050602081019050919050565b5f80fd5b5f61386b6138668461382a565b613606565b9050808382526020820190506020840283018581111561388e5761388d613855565b5b835b818110156138b757806138a388826134a1565b845260208401935050602081019050613890565b5050509392505050565b5f82601f8301126138d5576138d46135a0565b5b81356138e5848260208601613859565b91505092915050565b5f602082840312156139035761390261331d565b5b5f82013567ffffffffffffffff8111156139205761391f613321565b5b61392c848285016138c1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61396781613482565b82525050565b5f613978838361395e565b60208301905092915050565b5f602082019050919050565b5f61399a82613935565b6139a4818561393f565b93506139af8361394f565b805f5b838110156139df5781516139c6888261396d565b97506139d183613984565b9250506001810190506139b2565b5085935050505092915050565b5f6040820190508181035f830152613a048185613990565b90508181036020830152613a188184613990565b90509392505050565b613a2a816133a5565b8114613a34575f80fd5b50565b5f81359050613a4581613a21565b92915050565b5f8060408385031215613a6157613a6061331d565b5b5f613a6e8582860161354e565b9250506020613a7f85828601613a37565b9150509250929050565b5f604082019050613a9c5f830185613713565b613aa96020830184613713565b9392505050565b5f67ffffffffffffffff821115613aca57613ac96135a8565b5b613ad38261341a565b9050602081019050919050565b5f613af2613aed84613ab0565b613606565b905082815260208101848484011115613b0e57613b0d6135a4565b5b613b19848285613650565b509392505050565b5f82601f830112613b3557613b346135a0565b5b8135613b45848260208601613ae0565b91505092915050565b5f805f8060808587031215613b6657613b6561331d565b5b5f613b738782880161354e565b9450506020613b848782880161354e565b9350506040613b95878288016134a1565b925050606085013567ffffffffffffffff811115613bb657613bb5613321565b5b613bc287828801613b21565b91505092959194509250565b5f60208284031215613be357613be261331d565b5b5f613bf084828501613a37565b91505092915050565b5f8060408385031215613c0f57613c0e61331d565b5b5f613c1c8582860161354e565b9250506020613c2d8582860161354e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c7b57607f821691505b602082108103613c8e57613c8d613c37565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613cc86020836133e2565b9150613cd382613c94565b602082019050919050565b5f6020820190508181035f830152613cf581613cbc565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613d587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d1d565b613d628683613d1d565b95508019841693508086168417925050509392505050565b5f613d94613d8f613d8a84613482565b6137b6565b613482565b9050919050565b5f819050919050565b613dad83613d7a565b613dc1613db982613d9b565b848454613d29565b825550505050565b5f90565b613dd5613dc9565b613de0818484613da4565b505050565b5b81811015613e0357613df85f82613dcd565b600181019050613de6565b5050565b601f821115613e4857613e1981613cfc565b613e2284613d0e565b81016020851015613e31578190505b613e45613e3d85613d0e565b830182613de5565b50505b505050565b5f82821c905092915050565b5f613e685f1984600802613e4d565b1980831691505092915050565b5f613e808383613e59565b9150826002028217905092915050565b613e99826133d8565b67ffffffffffffffff811115613eb257613eb16135a8565b5b613ebc8254613c64565b613ec7828285613e07565b5f60209050601f831160018114613ef8575f8415613ee6578287015190505b613ef08582613e75565b865550613f57565b601f198416613f0686613cfc565b5f5b82811015613f2d57848901518255600182019150602085019450602081019050613f08565b86831015613f4a5784890151613f46601f891682613e59565b8355505b6001600288020188555050505b505050505050565b5f81519050613f6d8161348b565b92915050565b5f60208284031215613f8857613f8761331d565b5b5f613f9584828501613f5f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61400282613482565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361403457614033613fcb565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614073601f836133e2565b915061407e8261403f565b602082019050919050565b5f6020820190508181035f8301526140a081614067565b9050919050565b5f6040820190506140ba5f830185613510565b6140c76020830184613713565b9392505050565b5f815190506140dc81613a21565b92915050565b5f602082840312156140f7576140f661331d565b5b5f614104848285016140ce565b91505092915050565b7f436f756c64206e6f74207472616e73666572206f757420746f6b656e732100005f82015250565b5f614141601e836133e2565b915061414c8261410d565b602082019050919050565b5f6020820190508181035f83015261416e81614135565b9050919050565b5f81905092915050565b50565b5f61418d5f83614175565b91506141988261417f565b5f82019050919050565b5f6141ac82614182565b9150819050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f614210602f836133e2565b915061421b826141b6565b604082019050919050565b5f6020820190508181035f83015261423d81614204565b9050919050565b5f81905092915050565b5f614258826133d8565b6142628185614244565b93506142728185602086016133f2565b80840191505092915050565b5f815461428a81613c64565b6142948186614244565b9450600182165f81146142ae57600181146142c3576142f5565b60ff19831686528115158202860193506142f5565b6142cc85613cfc565b5f5b838110156142ed578154818901526001820191506020810190506142ce565b838801955050505b50505092915050565b5f614309828661424e565b9150614315828561424e565b9150614321828461427e565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6143886026836133e2565b91506143938261432e565b604082019050919050565b5f6020820190508181035f8301526143b58161437c565b9050919050565b5f6143c682613482565b91506143d183613482565b92508282026143df81613482565b915082820484148315176143f6576143f5613fcb565b5b5092915050565b7f496e73756666696369656e742046756e647300000000000000000000000000005f82015250565b5f6144316012836133e2565b915061443c826143fd565b602082019050919050565b5f6020820190508181035f83015261445e81614425565b9050919050565b5f61446f82613482565b915061447a83613482565b925082820190508082111561449257614491613fcb565b5b92915050565b7f4d696e7461626c6520737570706c7920657863656564656421000000000000005f82015250565b5f6144cc6019836133e2565b91506144d782614498565b602082019050919050565b5f6020820190508181035f8301526144f9816144c0565b9050919050565b7f436f6e74726163742070617573656400000000000000000000000000000000005f82015250565b5f614534600f836133e2565b915061453f82614500565b602082019050919050565b5f6020820190508181035f83015261456181614528565b9050919050565b5f8151905061457681613538565b92915050565b5f602082840312156145915761459061331d565b5b5f61459e84828501614568565b91505092915050565b7f4e6f74204e4654206f776e6572206f72204e4654206e6f742076616c696400005f82015250565b5f6145db601e836133e2565b91506145e6826145a7565b602082019050919050565b5f6020820190508181035f830152614608816145cf565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6146338261460f565b61463d8185614619565b935061464d8185602086016133f2565b6146568161341a565b840191505092915050565b5f6080820190506146745f830187613510565b6146816020830186613510565b61468e6040830185613713565b81810360608301526146a08184614629565b905095945050505050565b5f815190506146b981613350565b92915050565b5f602082840312156146d4576146d361331d565b5b5f6146e1848285016146ab565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61472182613482565b915061472c83613482565b92508261473c5761473b6146ea565b5b828204905092915050565b5f61475182613482565b915061475c83613482565b925082820390508181111561477457614773613fcb565b5b92915050565b5f61478482613482565b915061478f83613482565b92508261479f5761479e6146ea565b5b82820690509291505056fea2646970667358221220e9488f60c641a3d13d6aabcbce94e1077599e934fdc4e2444ebb6d49f1f96f5064736f6c63430008150033697066733a2f2f516d64425a436d784d656536393864723143566a435233504d644b3233736375316261724e4d684b367a346a766e2f

Deployed Bytecode

0x608060405260043610610280575f3560e01c80638da5cb5b1161014e578063b09f1266116100c0578063d5abeb0111610079578063d5abeb011461098d578063e0a80853146109b7578063e985e9c5146109df578063f044951314610a1b578063f2fde38b14610a43578063f8e93ef914610a6b57610287565b8063b09f126614610885578063b236ff82146108af578063b88d4fde146108d7578063bedb86fb146108ff578063c87b56dd14610927578063d28d88521461096357610287565b80639db5dbe4116101125780639db5dbe41461078e578063a22cb465146107b6578063a45ba8e7146107de578063aa4bde2814610808578063ac72200d14610832578063af933b571461085d57610287565b80638da5cb5b146106ab5780638e09a116146106d557806391b7f5ed1461071257806395d89b411461073a5780639d03e6d01461076457610287565b806351830227116101f257806365627f15116101ab57806365627f15146105b557806369d03738146105df5780636f0b78711461060757806370a0823114610631578063715018a61461066d5780637ec4a6591461068357610287565b806351830227146104955780635503a0e8146104bf5780635c975abb146104e95780635f5152261461051357806362b99ad41461054f5780636352211e1461057957610287565b806318160ddd1161024457806318160ddd1461037b5780631e7269c5146103a557806323b872dd146103e15780634272f4471461040957806342842e0e146104455780634fdd43cb1461046d57610287565b806301ffc9a71461028957806306fdde03146102c5578063081812fc146102ef578063095ea7b31461032b57806316ba10e01461035357610287565b3661028757005b005b348015610294575f80fd5b506102af60048036038101906102aa919061337a565b610a87565b6040516102bc91906133bf565b60405180910390f35b3480156102d0575f80fd5b506102d9610b18565b6040516102e69190613462565b60405180910390f35b3480156102fa575f80fd5b50610315600480360381019061031091906134b5565b610ba8565b604051610322919061351f565b60405180910390f35b348015610336575f80fd5b50610351600480360381019061034c9190613562565b610c20565b005b34801561035e575f80fd5b50610379600480360381019061037491906136cc565b610dc2565b005b348015610386575f80fd5b5061038f610e51565b60405161039c9190613722565b60405180910390f35b3480156103b0575f80fd5b506103cb60048036038101906103c6919061373b565b610e66565b6040516103d89190613722565b60405180910390f35b3480156103ec575f80fd5b5061040760048036038101906104029190613766565b610e7b565b005b348015610414575f80fd5b5061042f600480360381019061042a91906134b5565b610e8b565b60405161043c91906133bf565b60405180910390f35b348015610450575f80fd5b5061046b60048036038101906104669190613766565b610ea8565b005b348015610478575f80fd5b50610493600480360381019061048e91906136cc565b610ec7565b005b3480156104a0575f80fd5b506104a9610f56565b6040516104b691906133bf565b60405180910390f35b3480156104ca575f80fd5b506104d3610f68565b6040516104e09190613462565b60405180910390f35b3480156104f4575f80fd5b506104fd610ff4565b60405161050a91906133bf565b60405180910390f35b34801561051e575f80fd5b506105396004803603810190610534919061373b565b611007565b6040516105469190613722565b60405180910390f35b34801561055a575f80fd5b506105636110ad565b6040516105709190613462565b60405180910390f35b348015610584575f80fd5b5061059f600480360381019061059a91906134b5565b611139565b6040516105ac919061351f565b60405180910390f35b3480156105c0575f80fd5b506105c961114a565b6040516105d69190613811565b60405180910390f35b3480156105ea575f80fd5b506106056004803603810190610600919061373b565b61116f565b005b348015610612575f80fd5b5061061b61122e565b6040516106289190613722565b60405180910390f35b34801561063c575f80fd5b506106576004803603810190610652919061373b565b611234565b6040516106649190613722565b60405180910390f35b348015610678575f80fd5b506106816112e9565b005b34801561068e575f80fd5b506106a960048036038101906106a491906136cc565b611370565b005b3480156106b6575f80fd5b506106bf6113ff565b6040516106cc919061351f565b60405180910390f35b3480156106e0575f80fd5b506106fb60048036038101906106f691906138ee565b611427565b6040516107099291906139ec565b60405180910390f35b34801561071d575f80fd5b50610738600480360381019061073391906134b5565b611651565b005b348015610745575f80fd5b5061074e6116d7565b60405161075b9190613462565b60405180910390f35b34801561076f575f80fd5b50610778611767565b6040516107859190613722565b60405180910390f35b348015610799575f80fd5b506107b460048036038101906107af9190613766565b61176d565b005b3480156107c1575f80fd5b506107dc60048036038101906107d79190613a4b565b6118fd565b005b3480156107e9575f80fd5b506107f2611a6f565b6040516107ff9190613462565b60405180910390f35b348015610813575f80fd5b5061081c611afb565b6040516108299190613722565b60405180910390f35b34801561083d575f80fd5b50610846611b01565b604051610854929190613a89565b60405180910390f35b348015610868575f80fd5b50610883600480360381019061087e919061373b565b611b20565b005b348015610890575f80fd5b50610899611c66565b6040516108a69190613462565b60405180910390f35b3480156108ba575f80fd5b506108d560048036038101906108d09190613766565b611cf2565b005b3480156108e2575f80fd5b506108fd60048036038101906108f89190613b4e565b611e30565b005b34801561090a575f80fd5b5061092560048036038101906109209190613bce565b611ea2565b005b348015610932575f80fd5b5061094d600480360381019061094891906134b5565b611f3b565b60405161095a9190613462565b60405180910390f35b34801561096e575f80fd5b5061097761208c565b6040516109849190613462565b60405180910390f35b348015610998575f80fd5b506109a1612118565b6040516109ae9190613722565b60405180910390f35b3480156109c2575f80fd5b506109dd60048036038101906109d89190613bce565b61211e565b005b3480156109ea575f80fd5b50610a056004803603810190610a009190613bf9565b6121b6565b604051610a1291906133bf565b60405180910390f35b348015610a26575f80fd5b50610a416004803603810190610a3c91906138ee565b612244565b005b348015610a4e575f80fd5b50610a696004803603810190610a64919061373b565b612325565b005b610a856004803603810190610a8091906138ee565b61241b565b005b5f6301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ae157506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b115750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060028054610b2790613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5390613c64565b8015610b9e5780601f10610b7557610100808354040283529160200191610b9e565b820191905f5260205f20905b815481529060010190602001808311610b8157829003601f168201915b5050505050905090565b5f610bb282612719565b610be8576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f610c2a82612773565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c91576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb0612836565b73ffffffffffffffffffffffffffffffffffffffff1614610d1357610cdc81610cd7612836565b6121b6565b610d12576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b8260065f8481526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b610dca61283d565b73ffffffffffffffffffffffffffffffffffffffff16610de86113ff565b73ffffffffffffffffffffffffffffffffffffffff1614610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3590613cde565b60405180910390fd5b80600c9081610e4d9190613e90565b5050565b5f610e5a612844565b6001545f540303905090565b600e602052805f5260405f205f915090505481565b610e8683838361284c565b505050565b600f602052805f5260405f205f915054906101000a900460ff1681565b610ec283838360405180602001604052805f815250611e30565b505050565b610ecf61283d565b73ffffffffffffffffffffffffffffffffffffffff16610eed6113ff565b73ffffffffffffffffffffffffffffffffffffffff1614610f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3a90613cde565b60405180910390fd5b8060149081610f529190613e90565b5050565b600d5f9054906101000a900460ff1681565b600c8054610f7590613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa190613c64565b8015610fec5780601f10610fc357610100808354040283529160200191610fec565b820191905f5260205f20905b815481529060010190602001808311610fcf57829003601f168201915b505050505081565b600d60019054906101000a900460ff1681565b5f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401611063919061351f565b602060405180830381865afa15801561107e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a29190613f73565b905080915050919050565b600b80546110ba90613c64565b80601f01602080910402602001604051908101604052809291908181526020018280546110e690613c64565b80156111315780601f1061110857610100808354040283529160200191611131565b820191905f5260205f20905b81548152906001019060200180831161111457829003601f168201915b505050505081565b5f61114382612773565b9050919050565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61117761283d565b73ffffffffffffffffffffffffffffffffffffffff166111956113ff565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e290613cde565b60405180910390fd5b80600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361129a576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054169050919050565b6112f161283d565b73ffffffffffffffffffffffffffffffffffffffff1661130f6113ff565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90613cde565b60405180910390fd5b61136e5f612bdd565b565b61137861283d565b73ffffffffffffffffffffffffffffffffffffffff166113966113ff565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390613cde565b60405180910390fd5b80600b90816113fb9190613e90565b5050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060805f805f5b85518110156114ae575f1515600f5f8884815181106114505761144f613f9e565b5b602002602001015181526020019081526020015f205f9054906101000a900460ff1615150361148c57818061148490613ff8565b92505061149b565b828061149790613ff8565b9350505b80806114a690613ff8565b91505061142e565b505f8167ffffffffffffffff8111156114ca576114c96135a8565b5b6040519080825280602002602001820160405280156114f85781602001602082028036833780820191505090505b5090505f8367ffffffffffffffff811115611516576115156135a8565b5b6040519080825280602002602001820160405280156115445781602001602082028036833780820191505090505b5090505f805f5b895181101561163f575f1515600f5f8c848151811061156d5761156c613f9e565b5b602002602001015181526020019081526020015f205f9054906101000a900460ff161515036115e3578981815181106115a9576115a8613f9e565b5b60200260200101518584815181106115c4576115c3613f9e565b5b60200260200101818152505082806115db90613ff8565b93505061162c565b8981815181106115f6576115f5613f9e565b5b602002602001015184838151811061161157611610613f9e565b5b602002602001018181525050818061162890613ff8565b9250505b808061163790613ff8565b91505061154b565b50838397509750505050505050915091565b61165961283d565b73ffffffffffffffffffffffffffffffffffffffff166116776113ff565b73ffffffffffffffffffffffffffffffffffffffff16146116cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c490613cde565b60405180910390fd5b8060138190555050565b6060600380546116e690613c64565b80601f016020809104026020016040519081016040528092919081815260200182805461171290613c64565b801561175d5780601f106117345761010080835404028352916020019161175d565b820191905f5260205f20905b81548152906001019060200180831161174057829003601f168201915b5050505050905090565b60135481565b61177561283d565b73ffffffffffffffffffffffffffffffffffffffff166117936113ff565b73ffffffffffffffffffffffffffffffffffffffff16146117e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e090613cde565b60405180910390fd5b60026009540361182e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182590614089565b60405180910390fd5b60026009819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016118719291906140a7565b6020604051808303815f875af115801561188d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118b191906140e2565b6118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614157565b60405180910390fd5b6001600981905550505050565b611905612836565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611969576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060075f611975612836565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a1e612836565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611a6391906133bf565b60405180910390a35050565b60148054611a7c90613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa890613c64565b8015611af35780601f10611aca57610100808354040283529160200191611af3565b820191905f5260205f20905b815481529060010190602001808311611ad657829003601f168201915b505050505081565b60115481565b5f805f611b0c610e51565b90505f601054905081819350935050509091565b611b2861283d565b73ffffffffffffffffffffffffffffffffffffffff16611b466113ff565b73ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390613cde565b60405180910390fd5b600260095403611be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd890614089565b60405180910390fd5b60026009819055505f8173ffffffffffffffffffffffffffffffffffffffff1647604051611c0e906141a2565b5f6040518083038185875af1925050503d805f8114611c48576040519150601f19603f3d011682016040523d82523d5f602084013e611c4d565b606091505b5050905080611c5a575f80fd5b50600160098190555050565b60168054611c7390613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9f90613c64565b8015611cea5780601f10611cc157610100808354040283529160200191611cea565b820191905f5260205f20905b815481529060010190602001808311611ccd57829003601f168201915b505050505081565b611cfa61283d565b73ffffffffffffffffffffffffffffffffffffffff16611d186113ff565b73ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590613cde565b60405180910390fd5b600260095403611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90614089565b60405180910390fd5b60026009819055508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611df69291906140a7565b5f604051808303815f87803b158015611e0d575f80fd5b505af1158015611e1f573d5f803e3d5ffd5b505050506001600981905550505050565b611e3b84848461284c565b5f8373ffffffffffffffffffffffffffffffffffffffff163b14611e9c57611e6584848484612ca0565b611e9b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b611eaa61283d565b73ffffffffffffffffffffffffffffffffffffffff16611ec86113ff565b73ffffffffffffffffffffffffffffffffffffffff1614611f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1590613cde565b60405180910390fd5b80600d60016101000a81548160ff02191690831515021790555050565b6060611f4682612719565b611f85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7c90614226565b60405180910390fd5b5f1515600d5f9054906101000a900460ff1615150361202e5760148054611fab90613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054611fd790613c64565b80156120225780601f10611ff957610100808354040283529160200191612022565b820191905f5260205f20905b81548152906001019060200180831161200557829003601f168201915b50505050509050612087565b5f612037612deb565b90505f8151116120555760405180602001604052805f815250612083565b8061205f84612e7b565b600c604051602001612073939291906142fe565b6040516020818303038152906040525b9150505b919050565b6015805461209990613c64565b80601f01602080910402602001604051908101604052809291908181526020018280546120c590613c64565b80156121105780601f106120e757610100808354040283529160200191612110565b820191905f5260205f20905b8154815290600101906020018083116120f357829003601f168201915b505050505081565b60105481565b61212661283d565b73ffffffffffffffffffffffffffffffffffffffff166121446113ff565b73ffffffffffffffffffffffffffffffffffffffff161461219a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219190613cde565b60405180910390fd5b80600d5f6101000a81548160ff02191690831515021790555050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b61224c61283d565b73ffffffffffffffffffffffffffffffffffffffff1661226a6113ff565b73ffffffffffffffffffffffffffffffffffffffff16146122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790613cde565b60405180910390fd5b5f5b8151811015612321576001600f5f8484815181106122e3576122e2613f9e565b5b602002602001015181526020019081526020015f205f6101000a81548160ff021916908315150217905550808061231990613ff8565b9150506122c2565b5050565b61232d61283d565b73ffffffffffffffffffffffffffffffffffffffff1661234b6113ff565b73ffffffffffffffffffffffffffffffffffffffff16146123a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239890613cde565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361240f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124069061439e565b60405180910390fd5b61241881612bdd565b50565b80518060135461242b91906143bc565b34101561246d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246490614447565b60405180910390fd5b60105481612479610e51565b6124839190614465565b11156124c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bb906144e2565b60405180910390fd5b5f1515600d60019054906101000a900460ff16151514612519576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125109061454a565b60405180910390fd5b60026009540361255e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255590614089565b60405180910390fd5b60026009819055505f5b82518110156126f15761257961283d565b73ffffffffffffffffffffffffffffffffffffffff16600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8584815181106125df576125de613f9e565b5b60200260200101516040518263ffffffff1660e01b81526004016126039190613722565b602060405180830381865afa15801561261e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612642919061457c565b73ffffffffffffffffffffffffffffffffffffffff1614801561269f57505f1515600f5f85848151811061267957612678613f9e565b5b602002602001015181526020019081526020015f205f9054906101000a900460ff161515145b6126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d5906145f1565b60405180910390fd5b80806126e990613ff8565b915050612568565b506127046126fd61283d565b8351612fd4565b61270d82612ff1565b60016009819055505050565b5f81612723612844565b1115801561273157505f5482105b801561276c57505f7c010000000000000000000000000000000000000000000000000000000060045f8581526020019081526020015f205416145b9050919050565b5f8082905080612781612844565b116127ff575f548110156127fe575f60045f8381526020019081526020015f205490505f7c01000000000000000000000000000000000000000000000000000000008216036127fc575b5f81036127f25760045f836001900393508381526020019081526020015f205490506127cb565b8092505050612831565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b5f33905090565b5f33905090565b5f6001905090565b5f61285682612773565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146128bd576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8473ffffffffffffffffffffffffffffffffffffffff166128dd612836565b73ffffffffffffffffffffffffffffffffffffffff16148061290c575061290b85612906612836565b6121b6565b5b80612951575061291a612836565b73ffffffffffffffffffffffffffffffffffffffff1661293984610ba8565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061298a576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129ef576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129fc8585856001613056565b60065f8481526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600190039190508190555060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b612af08661305c565b171760045f8581526020019081526020015f20819055505f7c0200000000000000000000000000000000000000000000000000000000831603612b6e575f6001840190505f60045f8381526020019081526020015f205403612b6c575f548114612b6b578260045f8381526020019081526020015f20819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612bd68585856001613065565b5050505050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cc5612836565b8786866040518563ffffffff1660e01b8152600401612ce79493929190614661565b6020604051808303815f875af1925050508015612d2257506040513d601f19601f82011682018060405250810190612d1f91906146bf565b60015b612d98573d805f8114612d50576040519150601f19603f3d011682016040523d82523d5f602084013e612d55565b606091505b505f815103612d90576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b8054612dfa90613c64565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2690613c64565b8015612e715780601f10612e4857610100808354040283529160200191612e71565b820191905f5260205f20905b815481529060010190602001808311612e5457829003601f168201915b5050505050905090565b60605f8203612ec1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612fcf565b5f8290505f5b5f8214612ef0578080612ed990613ff8565b915050600a82612ee99190614717565b9150612ec7565b5f8167ffffffffffffffff811115612f0b57612f0a6135a8565b5b6040519080825280601f01601f191660200182016040528015612f3d5781602001600182028036833780820191505090505b5090505b5f8514612fc857600182612f559190614747565b9150600a85612f64919061477a565b6030612f709190614465565b60f81b818381518110612f8657612f85613f9e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85612fc19190614717565b9450612f41565b8093505050505b919050565b612fed828260405180602001604052805f81525061306b565b5050565b5f5b8151811015613052576001600f5f84848151811061301457613013613f9e565b5b602002602001015181526020019081526020015f205f6101000a81548160ff021916908315150217905550808061304a90613ff8565b915050612ff3565b5050565b50505050565b5f819050919050565b50505050565b5f805490505f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036130d5576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f830361310e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61311a5f858386613056565b600160406001901b17830260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254019250508190555060e161317c6001851461330b565b901b60a042901b61318c8661305c565b171760045f8381526020019081526020015f20819055505f8190505f84820190505f8673ffffffffffffffffffffffffffffffffffffffff163b14613287575b818673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132395f878480600101955087612ca0565b61326f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106131cc57825f5414613282575f80fd5b6132f1565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210613288575b815f8190555050506133055f858386613065565b50505050565b5f819050919050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61335981613325565b8114613363575f80fd5b50565b5f8135905061337481613350565b92915050565b5f6020828403121561338f5761338e61331d565b5b5f61339c84828501613366565b91505092915050565b5f8115159050919050565b6133b9816133a5565b82525050565b5f6020820190506133d25f8301846133b0565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561340f5780820151818401526020810190506133f4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613434826133d8565b61343e81856133e2565b935061344e8185602086016133f2565b6134578161341a565b840191505092915050565b5f6020820190508181035f83015261347a818461342a565b905092915050565b5f819050919050565b61349481613482565b811461349e575f80fd5b50565b5f813590506134af8161348b565b92915050565b5f602082840312156134ca576134c961331d565b5b5f6134d7848285016134a1565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613509826134e0565b9050919050565b613519816134ff565b82525050565b5f6020820190506135325f830184613510565b92915050565b613541816134ff565b811461354b575f80fd5b50565b5f8135905061355c81613538565b92915050565b5f80604083850312156135785761357761331d565b5b5f6135858582860161354e565b9250506020613596858286016134a1565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6135de8261341a565b810181811067ffffffffffffffff821117156135fd576135fc6135a8565b5b80604052505050565b5f61360f613314565b905061361b82826135d5565b919050565b5f67ffffffffffffffff82111561363a576136396135a8565b5b6136438261341a565b9050602081019050919050565b828183375f83830152505050565b5f61367061366b84613620565b613606565b90508281526020810184848401111561368c5761368b6135a4565b5b613697848285613650565b509392505050565b5f82601f8301126136b3576136b26135a0565b5b81356136c384826020860161365e565b91505092915050565b5f602082840312156136e1576136e061331d565b5b5f82013567ffffffffffffffff8111156136fe576136fd613321565b5b61370a8482850161369f565b91505092915050565b61371c81613482565b82525050565b5f6020820190506137355f830184613713565b92915050565b5f602082840312156137505761374f61331d565b5b5f61375d8482850161354e565b91505092915050565b5f805f6060848603121561377d5761377c61331d565b5b5f61378a8682870161354e565b935050602061379b8682870161354e565b92505060406137ac868287016134a1565b9150509250925092565b5f819050919050565b5f6137d96137d46137cf846134e0565b6137b6565b6134e0565b9050919050565b5f6137ea826137bf565b9050919050565b5f6137fb826137e0565b9050919050565b61380b816137f1565b82525050565b5f6020820190506138245f830184613802565b92915050565b5f67ffffffffffffffff821115613844576138436135a8565b5b602082029050602081019050919050565b5f80fd5b5f61386b6138668461382a565b613606565b9050808382526020820190506020840283018581111561388e5761388d613855565b5b835b818110156138b757806138a388826134a1565b845260208401935050602081019050613890565b5050509392505050565b5f82601f8301126138d5576138d46135a0565b5b81356138e5848260208601613859565b91505092915050565b5f602082840312156139035761390261331d565b5b5f82013567ffffffffffffffff8111156139205761391f613321565b5b61392c848285016138c1565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61396781613482565b82525050565b5f613978838361395e565b60208301905092915050565b5f602082019050919050565b5f61399a82613935565b6139a4818561393f565b93506139af8361394f565b805f5b838110156139df5781516139c6888261396d565b97506139d183613984565b9250506001810190506139b2565b5085935050505092915050565b5f6040820190508181035f830152613a048185613990565b90508181036020830152613a188184613990565b90509392505050565b613a2a816133a5565b8114613a34575f80fd5b50565b5f81359050613a4581613a21565b92915050565b5f8060408385031215613a6157613a6061331d565b5b5f613a6e8582860161354e565b9250506020613a7f85828601613a37565b9150509250929050565b5f604082019050613a9c5f830185613713565b613aa96020830184613713565b9392505050565b5f67ffffffffffffffff821115613aca57613ac96135a8565b5b613ad38261341a565b9050602081019050919050565b5f613af2613aed84613ab0565b613606565b905082815260208101848484011115613b0e57613b0d6135a4565b5b613b19848285613650565b509392505050565b5f82601f830112613b3557613b346135a0565b5b8135613b45848260208601613ae0565b91505092915050565b5f805f8060808587031215613b6657613b6561331d565b5b5f613b738782880161354e565b9450506020613b848782880161354e565b9350506040613b95878288016134a1565b925050606085013567ffffffffffffffff811115613bb657613bb5613321565b5b613bc287828801613b21565b91505092959194509250565b5f60208284031215613be357613be261331d565b5b5f613bf084828501613a37565b91505092915050565b5f8060408385031215613c0f57613c0e61331d565b5b5f613c1c8582860161354e565b9250506020613c2d8582860161354e565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613c7b57607f821691505b602082108103613c8e57613c8d613c37565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613cc86020836133e2565b9150613cd382613c94565b602082019050919050565b5f6020820190508181035f830152613cf581613cbc565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613d587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d1d565b613d628683613d1d565b95508019841693508086168417925050509392505050565b5f613d94613d8f613d8a84613482565b6137b6565b613482565b9050919050565b5f819050919050565b613dad83613d7a565b613dc1613db982613d9b565b848454613d29565b825550505050565b5f90565b613dd5613dc9565b613de0818484613da4565b505050565b5b81811015613e0357613df85f82613dcd565b600181019050613de6565b5050565b601f821115613e4857613e1981613cfc565b613e2284613d0e565b81016020851015613e31578190505b613e45613e3d85613d0e565b830182613de5565b50505b505050565b5f82821c905092915050565b5f613e685f1984600802613e4d565b1980831691505092915050565b5f613e808383613e59565b9150826002028217905092915050565b613e99826133d8565b67ffffffffffffffff811115613eb257613eb16135a8565b5b613ebc8254613c64565b613ec7828285613e07565b5f60209050601f831160018114613ef8575f8415613ee6578287015190505b613ef08582613e75565b865550613f57565b601f198416613f0686613cfc565b5f5b82811015613f2d57848901518255600182019150602085019450602081019050613f08565b86831015613f4a5784890151613f46601f891682613e59565b8355505b6001600288020188555050505b505050505050565b5f81519050613f6d8161348b565b92915050565b5f60208284031215613f8857613f8761331d565b5b5f613f9584828501613f5f565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61400282613482565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361403457614033613fcb565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c005f82015250565b5f614073601f836133e2565b915061407e8261403f565b602082019050919050565b5f6020820190508181035f8301526140a081614067565b9050919050565b5f6040820190506140ba5f830185613510565b6140c76020830184613713565b9392505050565b5f815190506140dc81613a21565b92915050565b5f602082840312156140f7576140f661331d565b5b5f614104848285016140ce565b91505092915050565b7f436f756c64206e6f74207472616e73666572206f757420746f6b656e732100005f82015250565b5f614141601e836133e2565b915061414c8261410d565b602082019050919050565b5f6020820190508181035f83015261416e81614135565b9050919050565b5f81905092915050565b50565b5f61418d5f83614175565b91506141988261417f565b5f82019050919050565b5f6141ac82614182565b9150819050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f5f8201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b5f614210602f836133e2565b915061421b826141b6565b604082019050919050565b5f6020820190508181035f83015261423d81614204565b9050919050565b5f81905092915050565b5f614258826133d8565b6142628185614244565b93506142728185602086016133f2565b80840191505092915050565b5f815461428a81613c64565b6142948186614244565b9450600182165f81146142ae57600181146142c3576142f5565b60ff19831686528115158202860193506142f5565b6142cc85613cfc565b5f5b838110156142ed578154818901526001820191506020810190506142ce565b838801955050505b50505092915050565b5f614309828661424e565b9150614315828561424e565b9150614321828461427e565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6143886026836133e2565b91506143938261432e565b604082019050919050565b5f6020820190508181035f8301526143b58161437c565b9050919050565b5f6143c682613482565b91506143d183613482565b92508282026143df81613482565b915082820484148315176143f6576143f5613fcb565b5b5092915050565b7f496e73756666696369656e742046756e647300000000000000000000000000005f82015250565b5f6144316012836133e2565b915061443c826143fd565b602082019050919050565b5f6020820190508181035f83015261445e81614425565b9050919050565b5f61446f82613482565b915061447a83613482565b925082820190508082111561449257614491613fcb565b5b92915050565b7f4d696e7461626c6520737570706c7920657863656564656421000000000000005f82015250565b5f6144cc6019836133e2565b91506144d782614498565b602082019050919050565b5f6020820190508181035f8301526144f9816144c0565b9050919050565b7f436f6e74726163742070617573656400000000000000000000000000000000005f82015250565b5f614534600f836133e2565b915061453f82614500565b602082019050919050565b5f6020820190508181035f83015261456181614528565b9050919050565b5f8151905061457681613538565b92915050565b5f602082840312156145915761459061331d565b5b5f61459e84828501614568565b91505092915050565b7f4e6f74204e4654206f776e6572206f72204e4654206e6f742076616c696400005f82015250565b5f6145db601e836133e2565b91506145e6826145a7565b602082019050919050565b5f6020820190508181035f830152614608816145cf565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f6146338261460f565b61463d8185614619565b935061464d8185602086016133f2565b6146568161341a565b840191505092915050565b5f6080820190506146745f830187613510565b6146816020830186613510565b61468e6040830185613713565b81810360608301526146a08184614629565b905095945050505050565b5f815190506146b981613350565b92915050565b5f602082840312156146d4576146d361331d565b5b5f6146e1848285016146ab565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61472182613482565b915061472c83613482565b92508261473c5761473b6146ea565b5b828204905092915050565b5f61475182613482565b915061475c83613482565b925082820390508181111561477457614773613fcb565b5b92915050565b5f61478482613482565b915061478f83613482565b92508261479f5761479e6146ea565b5b82820690509291505056fea2646970667358221220e9488f60c641a3d13d6aabcbce94e1077599e934fdc4e2444ebb6d49f1f96f5064736f6c63430008150033

Deployed Bytecode Sourcemap

907:5066:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3657:465:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7130:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8495:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8046:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5041:99:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2893:282:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1187:38:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9161:129:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1231:37:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9296:144:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4690:131:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1117:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1082;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1151:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1946:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1048:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6987:137:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1013:28:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3150:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1353:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4128:216:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23861:140;;;;;;;;;;;;;:::i;:::-;;4827:99:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23543:131:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2102:956:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3064:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7229:97:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1388:33:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5414:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8695:297:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1427:90:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1311:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5146:191;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;5808:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1576:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5627:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9446:329:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4609:75:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4084:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1524:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1275:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4523:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8998:157:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3253:170:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24007:269:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3591:387:2;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3657:465:0;3742:4;4052:10;4037:25;;:11;:25;;;;:54;;;;4081:10;4066:25;;:11;:25;;;;4037:54;:83;;;;4110:10;4095:25;;:11;:25;;;;4037:83;4018:102;;3657:465;;;:::o;7130:93::-;7184:13;7216:5;7209:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7130:93;:::o;8495:194::-;8563:7;8587:16;8595:7;8587;:16::i;:::-;8582:64;;8612:34;;;;;;;;;;;;;;8582:64;8663:15;:24;8679:7;8663:24;;;;;;;;;;;;;;;;;;;;;8656:31;;8495:194;;;:::o;8046:443::-;8118:13;8150:27;8169:7;8150:18;:27::i;:::-;8118:61;;8199:5;8193:11;;:2;:11;;;8189:48;;8213:24;;;;;;;;;;;;;;8189:48;8274:5;8251:28;;:19;:17;:19::i;:::-;:28;;;8247:159;;8298:44;8315:5;8322:19;:17;:19::i;:::-;8298:16;:44::i;:::-;8293:113;;8369:35;;;;;;;;;;;;;;8293:113;8247:159;8442:2;8415:15;:24;8431:7;8415:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;8479:7;8475:2;8459:28;;8468:5;8459:28;;;;;;;;;;;;8108:381;8046:443;;:::o;5041:99:2:-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5128:10:2::1;5116:9;:22;;;;;;:::i;:::-;;5041:99:::0;:::o;2893:282:0:-;2946:7;3157:15;:13;:15::i;:::-;3142:12;;3126:13;;:28;:46;3119:53;;2893:282;:::o;1187:38:2:-;;;;;;;;;;;;;;;;;:::o;9161:129:0:-;9260:28;9270:4;9276:2;9280:7;9260:9;:28::i;:::-;9161:129;;;:::o;1231:37:2:-;;;;;;;;;;;;;;;;;;;;;;:::o;9296:144:0:-;9399:39;9416:4;9422:2;9426:7;9399:39;;;;;;;;;;;;:16;:39::i;:::-;9296:144;;;:::o;4690:131:2:-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4801:18:2::1;4781:17;:38;;;;;;:::i;:::-;;4690:131:::0;:::o;1117:28::-;;;;;;;;;;;;;:::o;1082:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1151:25::-;;;;;;;;;;;;;:::o;1946:150::-;2004:7;2023:15;2041:12;;;;;;;;;;;:22;;;2064:5;2041:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2023:47;;2087:7;2080:14;;;1946:150;;;:::o;1048:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6987:137:0:-;7051:7;7093:27;7112:7;7093:18;:27::i;:::-;7070:52;;6987:137;;;:::o;1013:28:2:-;;;;;;;;;;;;;:::o;3150:97::-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3239:5:2::1;3215:12;;:30;;;;;;;;;;;;;;;;;;3150:97:::0;:::o;1353:24::-;;;;:::o;4128:216:0:-;4192:7;4232:1;4215:19;;:5;:19;;;4211:60;;4243:28;;;;;;;;;;;;;;4211:60;224:13;4288:18;:25;4307:5;4288:25;;;;;;;;;;;;;;;;:54;4281:61;;4128:216;;;:::o;23861:140::-;23793:12;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23969:30:::1;23996:1;23969:18;:30::i;:::-;23861:140::o:0;4827:99:2:-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4914:10:2::1;4902:9;:22;;;;;;:::i;:::-;;4827:99:::0;:::o;23543:131:0:-;23589:7;23666:6;;;;;;;;;;;23659:13;;23543:131;:::o;2102:956:2:-;2167:16;2185;2222:21;2253:24;2293:9;2288:190;2312:8;:15;2308:1;:19;2288:190;;;2377:5;2352:30;;:8;:21;2361:8;2370:1;2361:11;;;;;;;;:::i;:::-;;;;;;;;2352:21;;;;;;;;;;;;;;;;;;;;;:30;;;2348:129;;2402:19;;;;;:::i;:::-;;;;2348:129;;;2459:16;;;;;:::i;:::-;;;;2348:129;2329:3;;;;;:::i;:::-;;;;2288:190;;;;2488:30;2535:16;2521:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2488:64;;2562:27;2606:13;2592:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2562:58;;2630:25;2665:22;2703:9;2698:314;2722:8;:15;2718:1;:19;2698:314;;;2787:5;2762:30;;:8;:21;2771:8;2780:1;2771:11;;;;;;;;:::i;:::-;;;;;;;;2762:21;;;;;;;;;;;;;;;;;;;;;:30;;;2758:253;;2847:8;2856:1;2847:11;;;;;;;;:::i;:::-;;;;;;;;2812:13;2826:17;2812:32;;;;;;;;:::i;:::-;;;;;;;:46;;;;;2876:20;;;;;:::i;:::-;;;;2758:253;;;2963:8;2972:1;2963:11;;;;;;;;:::i;:::-;;;;;;;;2934:10;2945:14;2934:26;;;;;;;;:::i;:::-;;;;;;;:40;;;;;2992:17;;;;;:::i;:::-;;;;2758:253;2739:3;;;;;:::i;:::-;;;;2698:314;;;;3030:13;3045:10;3022:34;;;;;;;;;;2102:956;;;:::o;3064:80::-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3136:6:2::1;3125:8;:17;;;;3064:80:::0;:::o;7229:97:0:-;7285:13;7317:7;7310:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7229:97;:::o;1388:33:2:-;;;;:::o;5414:207::-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22445:1:::1;22815:7;;:19:::0;22807:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22445:1;22944:7;:18;;;;5550:10:2::2;5534:36;;;5571:3;5576:7;5534:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5526:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;22402:1:0::1;22983:7;:22;;;;5414:207:2::0;;;:::o;8695:297:0:-;8805:19;:17;:19::i;:::-;8793:31;;:8;:31;;;8789:61;;8833:17;;;;;;;;;;;;;;8789:61;8912:8;8860:18;:39;8879:19;:17;:19::i;:::-;8860:39;;;;;;;;;;;;;;;:49;8900:8;8860:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;8971:8;8935:55;;8950:19;:17;:19::i;:::-;8935:55;;;8981:8;8935:55;;;;;;:::i;:::-;;;;;;;;8695:297;;:::o;1427:90:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1311:30::-;;;;:::o;5146:191::-;5188:7;5197;5216:18;5237:13;:11;:13::i;:::-;5216:34;;5260:20;5283:9;;5260:32;;5310:10;5322:12;5302:33;;;;;;5146:191;;:::o;5808:164::-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22445:1:::1;22815:7;;:19:::0;22807:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22445:1;22944:7;:18;;;;5885:7:2::2;5906:3;5898:17;;5923:21;5898:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5884:65;;;5967:2;5959:11;;;::::0;::::2;;5874:98;22402:1:0::1;22983:7;:22;;;;5808:164:2::0;:::o;1576:32::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5627:167::-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22445:1:::1;22815:7;;:19:::0;22807:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22445:1;22944:7;:18;;;;5758:10:2::2;5742:36;;;5779:3;5784:7;5742:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;22402:1:0::1;22983:7;:22;;;;5627:167:2::0;;;:::o;9446:329:0:-;9569:28;9579:4;9585:2;9589:7;9569:9;:28::i;:::-;9629:1;9611:2;:14;;;:19;9607:167;;9649:56;9680:4;9686:2;9690:7;9699:5;9649:30;:56::i;:::-;9644:130;;9732:40;;;;;;;;;;;;;;9644:130;9607:167;9446:329;;;;:::o;4609:75:2:-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4676:6:2::1;4667;;:15;;;;;;;;;;;;;;;;;;4609:75:::0;:::o;4084:429::-;4158:13;4191:17;4199:8;4191:7;:17::i;:::-;4183:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;4286:5;4274:17;;:8;;;;;;;;;;;:17;;;4270:63;;4314:17;4307:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4270:63;4342:28;4373:10;:8;:10::i;:::-;4342:41;;4431:1;4406:14;4400:28;:32;:111;;;;;;;;;;;;;;;;;4459:14;4475:19;:8;:17;:19::i;:::-;4496:9;4442:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4400:111;4393:118;;;4084:429;;;;:::o;1524:46::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1275:30::-;;;;:::o;4523:80::-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4595:6:2::1;4584:8;;:17;;;;;;;;;;;;;;;;;;4523:80:::0;:::o;8998:157:0:-;9095:4;9118:18;:25;9137:5;9118:25;;;;;;;;;;;;;;;:35;9144:8;9118:35;;;;;;;;;;;;;;;;;;;;;;;;;9111:42;;8998:157;;;;:::o;3253:170:2:-;23793:12:0;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3341:9:2::1;3336:86;3360:6;:13;3356:1;:17;3336:86;;;3416:4;3394:8;:19;3403:6;3410:1;3403:9;;;;;;;;:::i;:::-;;;;;;;;3394:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3375:3;;;;;:::i;:::-;;;;3336:86;;;;3253:170:::0;:::o;24007:269:0:-;23793:12;:10;:12::i;:::-;23782:23;;:7;:5;:7::i;:::-;:23;;;23774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24191:1:::1;24171:22;;:8;:22;;::::0;24163:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24246:28;24265:8;24246:18;:28::i;:::-;24007:269:::0;:::o;3591:387:2:-;3662:8;:15;1752:11;1741:8;;:22;;;;:::i;:::-;1728:9;:35;;1720:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1835:9;;1820:11;1804:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;1796:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;1902:5;1892:15;;:6;;;;;;;;;;;:15;;;1884:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;22445:1:0::1;22815:7;;:19:::0;22807:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22445:1;22944:7;:18;;;;3707:9:2::2;3702:188;3726:8;:15;3722:1;:19;3702:188;;;3807:12;:10;:12::i;:::-;3770:49;;:12;;;;;;;;;;;:20;;;3791:8;3800:1;3791:11;;;;;;;;:::i;:::-;;;;;;;;3770:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;:83;;;;;3848:5;3823:30;;:8;:21;3832:8;3841:1;3832:11;;;;;;;;:::i;:::-;;;;;;;;3823:21;;;;;;;;;;;;;;;;;;;;;:30;;;3770:83;3762:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;3743:3;;;;;:::i;:::-;;;;3702:188;;;;3899:40;3909:12;:10;:12::i;:::-;3923:8;:15;3899:9;:40::i;:::-;3949:27;3967:8;3949:17;:27::i;:::-;22402:1:0::1;22983:7;:22;;;;3591:387:2::0;;:::o;9820:187:0:-;9877:4;9919:7;9900:15;:13;:15::i;:::-;:26;;:53;;;;;9940:13;;9930:7;:23;9900:53;:105;;;;;10004:1;976:8;9957:17;:26;9975:7;9957:26;;;;;;;;;;;;:43;:48;9900:105;9893:112;;9820:187;;;:::o;5177:1027::-;5244:7;5263:12;5278:7;5263:22;;5342:4;5323:15;:13;:15::i;:::-;:23;5319:835;;5375:13;;5368:4;:20;5364:790;;;5412:14;5429:17;:23;5447:4;5429:23;;;;;;;;;;;;5412:40;;5543:1;976:8;5516:6;:23;:28;5512:641;;6027:86;6044:1;6034:6;:11;6027:86;;6086:17;:25;6104:6;;;;;;;6086:25;;;;;;;;;;;;6077:34;;6027:86;;;6145:6;6138:13;;;;;;5512:641;5390:764;5364:790;5319:835;6171:31;;;;;;;;;;;;;;5177:1027;;;;:::o;20276:98::-;20336:7;20362:10;20355:17;;20276:98;:::o;23042:91::-;23095:7;23121:10;23114:17;;23042:91;:::o;3984:94:2:-;4049:7;4075:1;4068:8;;3984:94;:::o;13980:2356:0:-;14060:27;14090;14109:7;14090:18;:27::i;:::-;14060:57;;14172:4;14131:45;;14147:19;14131:45;;;14127:86;;14185:28;;;;;;;;;;;;;;14127:86;14223:22;14272:4;14249:27;;:19;:17;:19::i;:::-;:27;;;:86;;;;14292:43;14309:4;14315:19;:17;:19::i;:::-;14292:16;:43::i;:::-;14249:86;:145;;;;14375:19;:17;:19::i;:::-;14351:43;;:20;14363:7;14351:11;:20::i;:::-;:43;;;14249:145;14223:172;;14410:17;14405:66;;14436:35;;;;;;;;;;;;;;14405:66;14499:1;14485:16;;:2;:16;;;14481:52;;14510:23;;;;;;;;;;;;;;14481:52;14543:43;14565:4;14571:2;14575:7;14584:1;14543:21;:43::i;:::-;14655:15;:24;14671:7;14655:24;;;;;;;;;;;;14648:31;;;;;;;;;;;15039:18;:24;15058:4;15039:24;;;;;;;;;;;;;;;;15037:26;;;;;;;;;;;;15107:18;:22;15126:2;15107:22;;;;;;;;;;;;;;;;15105:24;;;;;;;;;;;1252:8;863:3;15478:15;:41;;15437:21;15455:2;15437:17;:21::i;:::-;:83;:126;15392:17;:26;15410:7;15392:26;;;;;;;;;;;:171;;;;15729:1;1252:8;15679:19;:46;:51;15675:565;;15750:19;15782:1;15772:7;:11;15750:33;;15937:1;15903:17;:30;15921:11;15903:30;;;;;;;;;;;;:35;15899:340;;16039:13;;16024:11;:28;16020:218;;16217:19;16184:17;:30;16202:11;16184:30;;;;;;;;;;;:52;;;;16020:218;15899:340;15732:508;15675:565;16274:7;16270:2;16255:27;;16264:4;16255:27;;;;;;;;;;;;16292:42;16313:4;16319:2;16323:7;16332:1;16292:20;:42::i;:::-;14050:2286;;13980:2356;;;:::o;24282:258::-;24431:16;24450:6;;;;;;;;;;;24431:25;;24475:8;24466:6;;:17;;;;;;;;;;;;;;;;;;24529:8;24498:40;;24519:8;24498:40;;;;;;;;;;;;24345:195;24282:258;:::o;19204:576::-;19324:4;19369:2;19344:45;;;19390:19;:17;:19::i;:::-;19411:4;19417:7;19426:5;19344:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19340:439;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19621:1;19604:6;:13;:18;19600:178;;19649:40;;;;;;;;;;;;;;19600:178;19768:6;19762:13;19753:6;19749:2;19745:15;19738:38;19340:439;19488:54;;;19478:64;;;:6;:64;;;;19471:71;;;19204:576;;;;;;:::o;4932:103:2:-;4992:13;5024:9;5017:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4932:103;:::o;195:483:3:-;251:13;289:1;280:5;:10;276:42;;306:10;;;;;;;;;;;;;;;;;;;;;276:42;327:12;342:5;327:20;;357:14;381:66;396:1;388:4;:9;381:66;;413:8;;;;;:::i;:::-;;;;443:2;435:10;;;;;:::i;:::-;;;381:66;;;456:19;488:6;478:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;456:39;;505:141;521:1;512:5;:10;505:141;;548:1;538:11;;;;;:::i;:::-;;;614:2;606:5;:10;;;;:::i;:::-;593:2;:24;;;;:::i;:::-;580:39;;563:6;570;563:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;642:2;633:11;;;;;:::i;:::-;;;505:141;;;669:6;655:21;;;;;195:483;;;;:::o;10063:97:0:-;10131:27;10141:2;10145:8;10131:27;;;;;;;;;;;;:9;:27::i;:::-;10063:97;;:::o;3429:156:2:-;3503:9;3498:86;3522:6;:13;3518:1;:17;3498:86;;;3578:4;3556:8;:19;3565:6;3572:1;3565:9;;;;;;;;:::i;:::-;;;;;;;;3556:19;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3537:3;;;;;:::i;:::-;;;;3498:86;;;;3429:156;:::o;19883:116:0:-;;;;;:::o;7780:130::-;7844:14;7903:5;7893:15;;7780:130;;;:::o;20095:115::-;;;;;:::o;10230:2067::-;10318:20;10341:13;;10318:36;;10382:1;10368:16;;:2;:16;;;10364:48;;10393:19;;;;;;;;;;;;;;10364:48;10438:1;10426:8;:13;10422:44;;10448:18;;;;;;;;;;;;;;10422:44;10476:61;10506:1;10510:2;10514:12;10528:8;10476:21;:61::i;:::-;11068:1;358:2;11039:1;:25;;11038:31;11026:8;:44;11000:18;:22;11019:2;11000:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;1120:3;11458:29;11485:1;11473:8;:13;11458:14;:29::i;:::-;:56;;863:3;11396:15;:41;;11355:21;11373:2;11355:17;:21::i;:::-;:83;:160;11305:17;:31;11323:12;11305:31;;;;;;;;;;;:210;;;;11529:20;11552:12;11529:35;;11578:11;11607:8;11592:12;:23;11578:37;;11651:1;11633:2;:14;;;:19;11629:554;;11672:287;11727:12;11723:2;11702:38;;11719:1;11702:38;;;;;;;;;;;;11767:69;11806:1;11810:2;11814:14;;;;;;11830:5;11767:30;:69::i;:::-;11762:151;;11871:40;;;;;;;;;;;;;;11762:151;11954:3;11939:12;:18;11672:287;;12038:12;12021:13;;:29;12017:43;;12052:8;;;12017:43;11629:554;;;12103:79;12137:14;;;;;;12133:2;12112:40;;12129:1;12112:40;;;;;;;;;;;;12177:3;12162:12;:18;12103:79;;11629:554;12212:12;12196:13;:28;;;;10783:1443;;12235:60;12264:1;12268:2;12272:12;12286:8;12235:20;:60::i;:::-;10308:1989;10230:2067;;;:::o;7916:124::-;7974:14;8033:5;8023:15;;7916:124;;;:::o;7:75:4:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:117::-;4999:1;4996;4989:12;5013:117;5122:1;5119;5112:12;5136:180;5184:77;5181:1;5174:88;5281:4;5278:1;5271:15;5305:4;5302:1;5295:15;5322:281;5405:27;5427:4;5405:27;:::i;:::-;5397:6;5393:40;5535:6;5523:10;5520:22;5499:18;5487:10;5484:34;5481:62;5478:88;;;5546:18;;:::i;:::-;5478:88;5586:10;5582:2;5575:22;5365:238;5322:281;;:::o;5609:129::-;5643:6;5670:20;;:::i;:::-;5660:30;;5699:33;5727:4;5719:6;5699:33;:::i;:::-;5609:129;;;:::o;5744:308::-;5806:4;5896:18;5888:6;5885:30;5882:56;;;5918:18;;:::i;:::-;5882:56;5956:29;5978:6;5956:29;:::i;:::-;5948:37;;6040:4;6034;6030:15;6022:23;;5744:308;;;:::o;6058:146::-;6155:6;6150:3;6145;6132:30;6196:1;6187:6;6182:3;6178:16;6171:27;6058:146;;;:::o;6210:425::-;6288:5;6313:66;6329:49;6371:6;6329:49;:::i;:::-;6313:66;:::i;:::-;6304:75;;6402:6;6395:5;6388:21;6440:4;6433:5;6429:16;6478:3;6469:6;6464:3;6460:16;6457:25;6454:112;;;6485:79;;:::i;:::-;6454:112;6575:54;6622:6;6617:3;6612;6575:54;:::i;:::-;6294:341;6210:425;;;;;:::o;6655:340::-;6711:5;6760:3;6753:4;6745:6;6741:17;6737:27;6727:122;;6768:79;;:::i;:::-;6727:122;6885:6;6872:20;6910:79;6985:3;6977:6;6970:4;6962:6;6958:17;6910:79;:::i;:::-;6901:88;;6717:278;6655:340;;;;:::o;7001:509::-;7070:6;7119:2;7107:9;7098:7;7094:23;7090:32;7087:119;;;7125:79;;:::i;:::-;7087:119;7273:1;7262:9;7258:17;7245:31;7303:18;7295:6;7292:30;7289:117;;;7325:79;;:::i;:::-;7289:117;7430:63;7485:7;7476:6;7465:9;7461:22;7430:63;:::i;:::-;7420:73;;7216:287;7001:509;;;;:::o;7516:118::-;7603:24;7621:5;7603:24;:::i;:::-;7598:3;7591:37;7516:118;;:::o;7640:222::-;7733:4;7771:2;7760:9;7756:18;7748:26;;7784:71;7852:1;7841:9;7837:17;7828:6;7784:71;:::i;:::-;7640:222;;;;:::o;7868:329::-;7927:6;7976:2;7964:9;7955:7;7951:23;7947:32;7944:119;;;7982:79;;:::i;:::-;7944:119;8102:1;8127:53;8172:7;8163:6;8152:9;8148:22;8127:53;:::i;:::-;8117:63;;8073:117;7868:329;;;;:::o;8203:619::-;8280:6;8288;8296;8345:2;8333:9;8324:7;8320:23;8316:32;8313:119;;;8351:79;;:::i;:::-;8313:119;8471:1;8496:53;8541:7;8532:6;8521:9;8517:22;8496:53;:::i;:::-;8486:63;;8442:117;8598:2;8624:53;8669:7;8660:6;8649:9;8645:22;8624:53;:::i;:::-;8614:63;;8569:118;8726:2;8752:53;8797:7;8788:6;8777:9;8773:22;8752:53;:::i;:::-;8742:63;;8697:118;8203:619;;;;;:::o;8828:60::-;8856:3;8877:5;8870:12;;8828:60;;;:::o;8894:142::-;8944:9;8977:53;8995:34;9004:24;9022:5;9004:24;:::i;:::-;8995:34;:::i;:::-;8977:53;:::i;:::-;8964:66;;8894:142;;;:::o;9042:126::-;9092:9;9125:37;9156:5;9125:37;:::i;:::-;9112:50;;9042:126;;;:::o;9174:143::-;9241:9;9274:37;9305:5;9274:37;:::i;:::-;9261:50;;9174:143;;;:::o;9323:165::-;9427:54;9475:5;9427:54;:::i;:::-;9422:3;9415:67;9323:165;;:::o;9494:256::-;9604:4;9642:2;9631:9;9627:18;9619:26;;9655:88;9740:1;9729:9;9725:17;9716:6;9655:88;:::i;:::-;9494:256;;;;:::o;9756:311::-;9833:4;9923:18;9915:6;9912:30;9909:56;;;9945:18;;:::i;:::-;9909:56;9995:4;9987:6;9983:17;9975:25;;10055:4;10049;10045:15;10037:23;;9756:311;;;:::o;10073:117::-;10182:1;10179;10172:12;10213:710;10309:5;10334:81;10350:64;10407:6;10350:64;:::i;:::-;10334:81;:::i;:::-;10325:90;;10435:5;10464:6;10457:5;10450:21;10498:4;10491:5;10487:16;10480:23;;10551:4;10543:6;10539:17;10531:6;10527:30;10580:3;10572:6;10569:15;10566:122;;;10599:79;;:::i;:::-;10566:122;10714:6;10697:220;10731:6;10726:3;10723:15;10697:220;;;10806:3;10835:37;10868:3;10856:10;10835:37;:::i;:::-;10830:3;10823:50;10902:4;10897:3;10893:14;10886:21;;10773:144;10757:4;10752:3;10748:14;10741:21;;10697:220;;;10701:21;10315:608;;10213:710;;;;;:::o;10946:370::-;11017:5;11066:3;11059:4;11051:6;11047:17;11043:27;11033:122;;11074:79;;:::i;:::-;11033:122;11191:6;11178:20;11216:94;11306:3;11298:6;11291:4;11283:6;11279:17;11216:94;:::i;:::-;11207:103;;11023:293;10946:370;;;;:::o;11322:539::-;11406:6;11455:2;11443:9;11434:7;11430:23;11426:32;11423:119;;;11461:79;;:::i;:::-;11423:119;11609:1;11598:9;11594:17;11581:31;11639:18;11631:6;11628:30;11625:117;;;11661:79;;:::i;:::-;11625:117;11766:78;11836:7;11827:6;11816:9;11812:22;11766:78;:::i;:::-;11756:88;;11552:302;11322:539;;;;:::o;11867:114::-;11934:6;11968:5;11962:12;11952:22;;11867:114;;;:::o;11987:184::-;12086:11;12120:6;12115:3;12108:19;12160:4;12155:3;12151:14;12136:29;;11987:184;;;;:::o;12177:132::-;12244:4;12267:3;12259:11;;12297:4;12292:3;12288:14;12280:22;;12177:132;;;:::o;12315:108::-;12392:24;12410:5;12392:24;:::i;:::-;12387:3;12380:37;12315:108;;:::o;12429:179::-;12498:10;12519:46;12561:3;12553:6;12519:46;:::i;:::-;12597:4;12592:3;12588:14;12574:28;;12429:179;;;;:::o;12614:113::-;12684:4;12716;12711:3;12707:14;12699:22;;12614:113;;;:::o;12763:732::-;12882:3;12911:54;12959:5;12911:54;:::i;:::-;12981:86;13060:6;13055:3;12981:86;:::i;:::-;12974:93;;13091:56;13141:5;13091:56;:::i;:::-;13170:7;13201:1;13186:284;13211:6;13208:1;13205:13;13186:284;;;13287:6;13281:13;13314:63;13373:3;13358:13;13314:63;:::i;:::-;13307:70;;13400:60;13453:6;13400:60;:::i;:::-;13390:70;;13246:224;13233:1;13230;13226:9;13221:14;;13186:284;;;13190:14;13486:3;13479:10;;12887:608;;;12763:732;;;;:::o;13501:634::-;13722:4;13760:2;13749:9;13745:18;13737:26;;13809:9;13803:4;13799:20;13795:1;13784:9;13780:17;13773:47;13837:108;13940:4;13931:6;13837:108;:::i;:::-;13829:116;;13992:9;13986:4;13982:20;13977:2;13966:9;13962:18;13955:48;14020:108;14123:4;14114:6;14020:108;:::i;:::-;14012:116;;13501:634;;;;;:::o;14141:116::-;14211:21;14226:5;14211:21;:::i;:::-;14204:5;14201:32;14191:60;;14247:1;14244;14237:12;14191:60;14141:116;:::o;14263:133::-;14306:5;14344:6;14331:20;14322:29;;14360:30;14384:5;14360:30;:::i;:::-;14263:133;;;;:::o;14402:468::-;14467:6;14475;14524:2;14512:9;14503:7;14499:23;14495:32;14492:119;;;14530:79;;:::i;:::-;14492:119;14650:1;14675:53;14720:7;14711:6;14700:9;14696:22;14675:53;:::i;:::-;14665:63;;14621:117;14777:2;14803:50;14845:7;14836:6;14825:9;14821:22;14803:50;:::i;:::-;14793:60;;14748:115;14402:468;;;;;:::o;14876:332::-;14997:4;15035:2;15024:9;15020:18;15012:26;;15048:71;15116:1;15105:9;15101:17;15092:6;15048:71;:::i;:::-;15129:72;15197:2;15186:9;15182:18;15173:6;15129:72;:::i;:::-;14876:332;;;;;:::o;15214:307::-;15275:4;15365:18;15357:6;15354:30;15351:56;;;15387:18;;:::i;:::-;15351:56;15425:29;15447:6;15425:29;:::i;:::-;15417:37;;15509:4;15503;15499:15;15491:23;;15214:307;;;:::o;15527:423::-;15604:5;15629:65;15645:48;15686:6;15645:48;:::i;:::-;15629:65;:::i;:::-;15620:74;;15717:6;15710:5;15703:21;15755:4;15748:5;15744:16;15793:3;15784:6;15779:3;15775:16;15772:25;15769:112;;;15800:79;;:::i;:::-;15769:112;15890:54;15937:6;15932:3;15927;15890:54;:::i;:::-;15610:340;15527:423;;;;;:::o;15969:338::-;16024:5;16073:3;16066:4;16058:6;16054:17;16050:27;16040:122;;16081:79;;:::i;:::-;16040:122;16198:6;16185:20;16223:78;16297:3;16289:6;16282:4;16274:6;16270:17;16223:78;:::i;:::-;16214:87;;16030:277;15969:338;;;;:::o;16313:943::-;16408:6;16416;16424;16432;16481:3;16469:9;16460:7;16456:23;16452:33;16449:120;;;16488:79;;:::i;:::-;16449:120;16608:1;16633:53;16678:7;16669:6;16658:9;16654:22;16633:53;:::i;:::-;16623:63;;16579:117;16735:2;16761:53;16806:7;16797:6;16786:9;16782:22;16761:53;:::i;:::-;16751:63;;16706:118;16863:2;16889:53;16934:7;16925:6;16914:9;16910:22;16889:53;:::i;:::-;16879:63;;16834:118;17019:2;17008:9;17004:18;16991:32;17050:18;17042:6;17039:30;17036:117;;;17072:79;;:::i;:::-;17036:117;17177:62;17231:7;17222:6;17211:9;17207:22;17177:62;:::i;:::-;17167:72;;16962:287;16313:943;;;;;;;:::o;17262:323::-;17318:6;17367:2;17355:9;17346:7;17342:23;17338:32;17335:119;;;17373:79;;:::i;:::-;17335:119;17493:1;17518:50;17560:7;17551:6;17540:9;17536:22;17518:50;:::i;:::-;17508:60;;17464:114;17262:323;;;;:::o;17591:474::-;17659:6;17667;17716:2;17704:9;17695:7;17691:23;17687:32;17684:119;;;17722:79;;:::i;:::-;17684:119;17842:1;17867:53;17912:7;17903:6;17892:9;17888:22;17867:53;:::i;:::-;17857:63;;17813:117;17969:2;17995:53;18040:7;18031:6;18020:9;18016:22;17995:53;:::i;:::-;17985:63;;17940:118;17591:474;;;;;:::o;18071:180::-;18119:77;18116:1;18109:88;18216:4;18213:1;18206:15;18240:4;18237:1;18230:15;18257:320;18301:6;18338:1;18332:4;18328:12;18318:22;;18385:1;18379:4;18375:12;18406:18;18396:81;;18462:4;18454:6;18450:17;18440:27;;18396:81;18524:2;18516:6;18513:14;18493:18;18490:38;18487:84;;18543:18;;:::i;:::-;18487:84;18308:269;18257:320;;;:::o;18583:182::-;18723:34;18719:1;18711:6;18707:14;18700:58;18583:182;:::o;18771:366::-;18913:3;18934:67;18998:2;18993:3;18934:67;:::i;:::-;18927:74;;19010:93;19099:3;19010:93;:::i;:::-;19128:2;19123:3;19119:12;19112:19;;18771:366;;;:::o;19143:419::-;19309:4;19347:2;19336:9;19332:18;19324:26;;19396:9;19390:4;19386:20;19382:1;19371:9;19367:17;19360:47;19424:131;19550:4;19424:131;:::i;:::-;19416:139;;19143:419;;;:::o;19568:141::-;19617:4;19640:3;19632:11;;19663:3;19660:1;19653:14;19697:4;19694:1;19684:18;19676:26;;19568:141;;;:::o;19715:93::-;19752:6;19799:2;19794;19787:5;19783:14;19779:23;19769:33;;19715:93;;;:::o;19814:107::-;19858:8;19908:5;19902:4;19898:16;19877:37;;19814:107;;;;:::o;19927:393::-;19996:6;20046:1;20034:10;20030:18;20069:97;20099:66;20088:9;20069:97;:::i;:::-;20187:39;20217:8;20206:9;20187:39;:::i;:::-;20175:51;;20259:4;20255:9;20248:5;20244:21;20235:30;;20308:4;20298:8;20294:19;20287:5;20284:30;20274:40;;20003:317;;19927:393;;;;;:::o;20326:142::-;20376:9;20409:53;20427:34;20436:24;20454:5;20436:24;:::i;:::-;20427:34;:::i;:::-;20409:53;:::i;:::-;20396:66;;20326:142;;;:::o;20474:75::-;20517:3;20538:5;20531:12;;20474:75;;;:::o;20555:269::-;20665:39;20696:7;20665:39;:::i;:::-;20726:91;20775:41;20799:16;20775:41;:::i;:::-;20767:6;20760:4;20754:11;20726:91;:::i;:::-;20720:4;20713:105;20631:193;20555:269;;;:::o;20830:73::-;20875:3;20830:73;:::o;20909:189::-;20986:32;;:::i;:::-;21027:65;21085:6;21077;21071:4;21027:65;:::i;:::-;20962:136;20909:189;;:::o;21104:186::-;21164:120;21181:3;21174:5;21171:14;21164:120;;;21235:39;21272:1;21265:5;21235:39;:::i;:::-;21208:1;21201:5;21197:13;21188:22;;21164:120;;;21104:186;;:::o;21296:543::-;21397:2;21392:3;21389:11;21386:446;;;21431:38;21463:5;21431:38;:::i;:::-;21515:29;21533:10;21515:29;:::i;:::-;21505:8;21501:44;21698:2;21686:10;21683:18;21680:49;;;21719:8;21704:23;;21680:49;21742:80;21798:22;21816:3;21798:22;:::i;:::-;21788:8;21784:37;21771:11;21742:80;:::i;:::-;21401:431;;21386:446;21296:543;;;:::o;21845:117::-;21899:8;21949:5;21943:4;21939:16;21918:37;;21845:117;;;;:::o;21968:169::-;22012:6;22045:51;22093:1;22089:6;22081:5;22078:1;22074:13;22045:51;:::i;:::-;22041:56;22126:4;22120;22116:15;22106:25;;22019:118;21968:169;;;;:::o;22142:295::-;22218:4;22364:29;22389:3;22383:4;22364:29;:::i;:::-;22356:37;;22426:3;22423:1;22419:11;22413:4;22410:21;22402:29;;22142:295;;;;:::o;22442:1395::-;22559:37;22592:3;22559:37;:::i;:::-;22661:18;22653:6;22650:30;22647:56;;;22683:18;;:::i;:::-;22647:56;22727:38;22759:4;22753:11;22727:38;:::i;:::-;22812:67;22872:6;22864;22858:4;22812:67;:::i;:::-;22906:1;22930:4;22917:17;;22962:2;22954:6;22951:14;22979:1;22974:618;;;;23636:1;23653:6;23650:77;;;23702:9;23697:3;23693:19;23687:26;23678:35;;23650:77;23753:67;23813:6;23806:5;23753:67;:::i;:::-;23747:4;23740:81;23609:222;22944:887;;22974:618;23026:4;23022:9;23014:6;23010:22;23060:37;23092:4;23060:37;:::i;:::-;23119:1;23133:208;23147:7;23144:1;23141:14;23133:208;;;23226:9;23221:3;23217:19;23211:26;23203:6;23196:42;23277:1;23269:6;23265:14;23255:24;;23324:2;23313:9;23309:18;23296:31;;23170:4;23167:1;23163:12;23158:17;;23133:208;;;23369:6;23360:7;23357:19;23354:179;;;23427:9;23422:3;23418:19;23412:26;23470:48;23512:4;23504:6;23500:17;23489:9;23470:48;:::i;:::-;23462:6;23455:64;23377:156;23354:179;23579:1;23575;23567:6;23563:14;23559:22;23553:4;23546:36;22981:611;;;22944:887;;22534:1303;;;22442:1395;;:::o;23843:143::-;23900:5;23931:6;23925:13;23916:22;;23947:33;23974:5;23947:33;:::i;:::-;23843:143;;;;:::o;23992:351::-;24062:6;24111:2;24099:9;24090:7;24086:23;24082:32;24079:119;;;24117:79;;:::i;:::-;24079:119;24237:1;24262:64;24318:7;24309:6;24298:9;24294:22;24262:64;:::i;:::-;24252:74;;24208:128;23992:351;;;;:::o;24349:180::-;24397:77;24394:1;24387:88;24494:4;24491:1;24484:15;24518:4;24515:1;24508:15;24535:180;24583:77;24580:1;24573:88;24680:4;24677:1;24670:15;24704:4;24701:1;24694:15;24721:233;24760:3;24783:24;24801:5;24783:24;:::i;:::-;24774:33;;24829:66;24822:5;24819:77;24816:103;;24899:18;;:::i;:::-;24816:103;24946:1;24939:5;24935:13;24928:20;;24721:233;;;:::o;24960:181::-;25100:33;25096:1;25088:6;25084:14;25077:57;24960:181;:::o;25147:366::-;25289:3;25310:67;25374:2;25369:3;25310:67;:::i;:::-;25303:74;;25386:93;25475:3;25386:93;:::i;:::-;25504:2;25499:3;25495:12;25488:19;;25147:366;;;:::o;25519:419::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25772:9;25766:4;25762:20;25758:1;25747:9;25743:17;25736:47;25800:131;25926:4;25800:131;:::i;:::-;25792:139;;25519:419;;;:::o;25944:332::-;26065:4;26103:2;26092:9;26088:18;26080:26;;26116:71;26184:1;26173:9;26169:17;26160:6;26116:71;:::i;:::-;26197:72;26265:2;26254:9;26250:18;26241:6;26197:72;:::i;:::-;25944:332;;;;;:::o;26282:137::-;26336:5;26367:6;26361:13;26352:22;;26383:30;26407:5;26383:30;:::i;:::-;26282:137;;;;:::o;26425:345::-;26492:6;26541:2;26529:9;26520:7;26516:23;26512:32;26509:119;;;26547:79;;:::i;:::-;26509:119;26667:1;26692:61;26745:7;26736:6;26725:9;26721:22;26692:61;:::i;:::-;26682:71;;26638:125;26425:345;;;;:::o;26776:180::-;26916:32;26912:1;26904:6;26900:14;26893:56;26776:180;:::o;26962:366::-;27104:3;27125:67;27189:2;27184:3;27125:67;:::i;:::-;27118:74;;27201:93;27290:3;27201:93;:::i;:::-;27319:2;27314:3;27310:12;27303:19;;26962:366;;;:::o;27334:419::-;27500:4;27538:2;27527:9;27523:18;27515:26;;27587:9;27581:4;27577:20;27573:1;27562:9;27558:17;27551:47;27615:131;27741:4;27615:131;:::i;:::-;27607:139;;27334:419;;;:::o;27759:147::-;27860:11;27897:3;27882:18;;27759:147;;;;:::o;27912:114::-;;:::o;28032:398::-;28191:3;28212:83;28293:1;28288:3;28212:83;:::i;:::-;28205:90;;28304:93;28393:3;28304:93;:::i;:::-;28422:1;28417:3;28413:11;28406:18;;28032:398;;;:::o;28436:379::-;28620:3;28642:147;28785:3;28642:147;:::i;:::-;28635:154;;28806:3;28799:10;;28436:379;;;:::o;28821:234::-;28961:34;28957:1;28949:6;28945:14;28938:58;29030:17;29025:2;29017:6;29013:15;29006:42;28821:234;:::o;29061:366::-;29203:3;29224:67;29288:2;29283:3;29224:67;:::i;:::-;29217:74;;29300:93;29389:3;29300:93;:::i;:::-;29418:2;29413:3;29409:12;29402:19;;29061:366;;;:::o;29433:419::-;29599:4;29637:2;29626:9;29622:18;29614:26;;29686:9;29680:4;29676:20;29672:1;29661:9;29657:17;29650:47;29714:131;29840:4;29714:131;:::i;:::-;29706:139;;29433:419;;;:::o;29858:148::-;29960:11;29997:3;29982:18;;29858:148;;;;:::o;30012:390::-;30118:3;30146:39;30179:5;30146:39;:::i;:::-;30201:89;30283:6;30278:3;30201:89;:::i;:::-;30194:96;;30299:65;30357:6;30352:3;30345:4;30338:5;30334:16;30299:65;:::i;:::-;30389:6;30384:3;30380:16;30373:23;;30122:280;30012:390;;;;:::o;30432:874::-;30535:3;30572:5;30566:12;30601:36;30627:9;30601:36;:::i;:::-;30653:89;30735:6;30730:3;30653:89;:::i;:::-;30646:96;;30773:1;30762:9;30758:17;30789:1;30784:166;;;;30964:1;30959:341;;;;30751:549;;30784:166;30868:4;30864:9;30853;30849:25;30844:3;30837:38;30930:6;30923:14;30916:22;30908:6;30904:35;30899:3;30895:45;30888:52;;30784:166;;30959:341;31026:38;31058:5;31026:38;:::i;:::-;31086:1;31100:154;31114:6;31111:1;31108:13;31100:154;;;31188:7;31182:14;31178:1;31173:3;31169:11;31162:35;31238:1;31229:7;31225:15;31214:26;;31136:4;31133:1;31129:12;31124:17;;31100:154;;;31283:6;31278:3;31274:16;31267:23;;30966:334;;30751:549;;30539:767;;30432:874;;;;:::o;31312:589::-;31537:3;31559:95;31650:3;31641:6;31559:95;:::i;:::-;31552:102;;31671:95;31762:3;31753:6;31671:95;:::i;:::-;31664:102;;31783:92;31871:3;31862:6;31783:92;:::i;:::-;31776:99;;31892:3;31885:10;;31312:589;;;;;;:::o;31907:225::-;32047:34;32043:1;32035:6;32031:14;32024:58;32116:8;32111:2;32103:6;32099:15;32092:33;31907:225;:::o;32138:366::-;32280:3;32301:67;32365:2;32360:3;32301:67;:::i;:::-;32294:74;;32377:93;32466:3;32377:93;:::i;:::-;32495:2;32490:3;32486:12;32479:19;;32138:366;;;:::o;32510:419::-;32676:4;32714:2;32703:9;32699:18;32691:26;;32763:9;32757:4;32753:20;32749:1;32738:9;32734:17;32727:47;32791:131;32917:4;32791:131;:::i;:::-;32783:139;;32510:419;;;:::o;32935:410::-;32975:7;32998:20;33016:1;32998:20;:::i;:::-;32993:25;;33032:20;33050:1;33032:20;:::i;:::-;33027:25;;33087:1;33084;33080:9;33109:30;33127:11;33109:30;:::i;:::-;33098:41;;33288:1;33279:7;33275:15;33272:1;33269:22;33249:1;33242:9;33222:83;33199:139;;33318:18;;:::i;:::-;33199:139;32983:362;32935:410;;;;:::o;33351:168::-;33491:20;33487:1;33479:6;33475:14;33468:44;33351:168;:::o;33525:366::-;33667:3;33688:67;33752:2;33747:3;33688:67;:::i;:::-;33681:74;;33764:93;33853:3;33764:93;:::i;:::-;33882:2;33877:3;33873:12;33866:19;;33525:366;;;:::o;33897:419::-;34063:4;34101:2;34090:9;34086:18;34078:26;;34150:9;34144:4;34140:20;34136:1;34125:9;34121:17;34114:47;34178:131;34304:4;34178:131;:::i;:::-;34170:139;;33897:419;;;:::o;34322:191::-;34362:3;34381:20;34399:1;34381:20;:::i;:::-;34376:25;;34415:20;34433:1;34415:20;:::i;:::-;34410:25;;34458:1;34455;34451:9;34444:16;;34479:3;34476:1;34473:10;34470:36;;;34486:18;;:::i;:::-;34470:36;34322:191;;;;:::o;34519:175::-;34659:27;34655:1;34647:6;34643:14;34636:51;34519:175;:::o;34700:366::-;34842:3;34863:67;34927:2;34922:3;34863:67;:::i;:::-;34856:74;;34939:93;35028:3;34939:93;:::i;:::-;35057:2;35052:3;35048:12;35041:19;;34700:366;;;:::o;35072:419::-;35238:4;35276:2;35265:9;35261:18;35253:26;;35325:9;35319:4;35315:20;35311:1;35300:9;35296:17;35289:47;35353:131;35479:4;35353:131;:::i;:::-;35345:139;;35072:419;;;:::o;35497:165::-;35637:17;35633:1;35625:6;35621:14;35614:41;35497:165;:::o;35668:366::-;35810:3;35831:67;35895:2;35890:3;35831:67;:::i;:::-;35824:74;;35907:93;35996:3;35907:93;:::i;:::-;36025:2;36020:3;36016:12;36009:19;;35668:366;;;:::o;36040:419::-;36206:4;36244:2;36233:9;36229:18;36221:26;;36293:9;36287:4;36283:20;36279:1;36268:9;36264:17;36257:47;36321:131;36447:4;36321:131;:::i;:::-;36313:139;;36040:419;;;:::o;36465:143::-;36522:5;36553:6;36547:13;36538:22;;36569:33;36596:5;36569:33;:::i;:::-;36465:143;;;;:::o;36614:351::-;36684:6;36733:2;36721:9;36712:7;36708:23;36704:32;36701:119;;;36739:79;;:::i;:::-;36701:119;36859:1;36884:64;36940:7;36931:6;36920:9;36916:22;36884:64;:::i;:::-;36874:74;;36830:128;36614:351;;;;:::o;36971:180::-;37111:32;37107:1;37099:6;37095:14;37088:56;36971:180;:::o;37157:366::-;37299:3;37320:67;37384:2;37379:3;37320:67;:::i;:::-;37313:74;;37396:93;37485:3;37396:93;:::i;:::-;37514:2;37509:3;37505:12;37498:19;;37157:366;;;:::o;37529:419::-;37695:4;37733:2;37722:9;37718:18;37710:26;;37782:9;37776:4;37772:20;37768:1;37757:9;37753:17;37746:47;37810:131;37936:4;37810:131;:::i;:::-;37802:139;;37529:419;;;:::o;37954:98::-;38005:6;38039:5;38033:12;38023:22;;37954:98;;;:::o;38058:168::-;38141:11;38175:6;38170:3;38163:19;38215:4;38210:3;38206:14;38191:29;;38058:168;;;;:::o;38232:373::-;38318:3;38346:38;38378:5;38346:38;:::i;:::-;38400:70;38463:6;38458:3;38400:70;:::i;:::-;38393:77;;38479:65;38537:6;38532:3;38525:4;38518:5;38514:16;38479:65;:::i;:::-;38569:29;38591:6;38569:29;:::i;:::-;38564:3;38560:39;38553:46;;38322:283;38232:373;;;;:::o;38611:640::-;38806:4;38844:3;38833:9;38829:19;38821:27;;38858:71;38926:1;38915:9;38911:17;38902:6;38858:71;:::i;:::-;38939:72;39007:2;38996:9;38992:18;38983:6;38939:72;:::i;:::-;39021;39089:2;39078:9;39074:18;39065:6;39021:72;:::i;:::-;39140:9;39134:4;39130:20;39125:2;39114:9;39110:18;39103:48;39168:76;39239:4;39230:6;39168:76;:::i;:::-;39160:84;;38611:640;;;;;;;:::o;39257:141::-;39313:5;39344:6;39338:13;39329:22;;39360:32;39386:5;39360:32;:::i;:::-;39257:141;;;;:::o;39404:349::-;39473:6;39522:2;39510:9;39501:7;39497:23;39493:32;39490:119;;;39528:79;;:::i;:::-;39490:119;39648:1;39673:63;39728:7;39719:6;39708:9;39704:22;39673:63;:::i;:::-;39663:73;;39619:127;39404:349;;;;:::o;39759:180::-;39807:77;39804:1;39797:88;39904:4;39901:1;39894:15;39928:4;39925:1;39918:15;39945:185;39985:1;40002:20;40020:1;40002:20;:::i;:::-;39997:25;;40036:20;40054:1;40036:20;:::i;:::-;40031:25;;40075:1;40065:35;;40080:18;;:::i;:::-;40065:35;40122:1;40119;40115:9;40110:14;;39945:185;;;;:::o;40136:194::-;40176:4;40196:20;40214:1;40196:20;:::i;:::-;40191:25;;40230:20;40248:1;40230:20;:::i;:::-;40225:25;;40274:1;40271;40267:9;40259:17;;40298:1;40292:4;40289:11;40286:37;;;40303:18;;:::i;:::-;40286:37;40136:194;;;;:::o;40336:176::-;40368:1;40385:20;40403:1;40385:20;:::i;:::-;40380:25;;40419:20;40437:1;40419:20;:::i;:::-;40414:25;;40458:1;40448:35;;40463:18;;:::i;:::-;40448:35;40504:1;40501;40497:9;40492:14;;40336:176;;;;:::o

Swarm Source

ipfs://e9488f60c641a3d13d6aabcbce94e1077599e934fdc4e2444ebb6d49f1f96f50
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.