ETH Price: $2,220.30 (-4.29%)

Contract

0x77DfdDA69e9491c7c8d78a9E2413562B32aEF2ff
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Mint127789562021-07-07 7:27:211332 days ago1625642841IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0128596530
Mint127788872021-07-07 7:08:491332 days ago1625641729IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0124309929
Mint127788622021-07-07 7:02:571332 days ago1625641377IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0124309929
Mint127782642021-07-07 4:44:421332 days ago1625633082IN
0x77DfdDA6...B32aEF2ff
0 ETH0.008573120
Mint127722782021-07-06 6:23:021333 days ago1625552582IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0042866710.00000145
Mint127694982021-07-05 19:49:221333 days ago1625514562IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0042866710
Mint127691602021-07-05 18:37:391333 days ago1625510259IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0042865510
Mint127690652021-07-05 18:18:421333 days ago1625509122IN
0x77DfdDA6...B32aEF2ff
0 ETH0.004715211
Mint127667942021-07-05 9:54:231334 days ago1625478863IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0042865510
Mint127667602021-07-05 9:47:091334 days ago1625478429IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0044295510
Create_Auction127667092021-07-05 9:35:431334 days ago1625477743IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0022619310
Mint127667042021-07-05 9:34:161334 days ago1625477656IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0040874310
Create_Auction127666772021-07-05 9:27:131334 days ago1625477233IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0022619310
Mint127666752021-07-05 9:26:511334 days ago1625477211IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0040874310
Mint127662562021-07-05 7:53:431334 days ago1625471623IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0068584816
Mint127662182021-07-05 7:43:281334 days ago1625471008IN
0x77DfdDA6...B32aEF2ff
0 ETH0.004872511
Mint127659292021-07-05 6:40:541334 days ago1625467254IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0044295510
Mint127652812021-07-05 4:16:311334 days ago1625458591IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0042866710
Mint127652672021-07-05 4:14:151334 days ago1625458455IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0042865510
Mint127652542021-07-05 4:11:331334 days ago1625458293IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0042865510
Mint127652332021-07-05 4:08:181334 days ago1625458098IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0042866710
Mint127652182021-07-05 4:03:571334 days ago1625457837IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0042865510
Mint127626372021-07-04 18:27:171334 days ago1625423237IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0068584816
Mint127625442021-07-04 18:05:301334 days ago1625421930IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0079731918
Mint127609922021-07-04 12:22:481335 days ago1625401368IN
0x77DfdDA6...B32aEF2ff
0 ETH0.0039755510
View all transactions

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Nft

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-03
*/

pragma solidity ^0.5.0;
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.5.0;
contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) public view returns (uint256 balance);

    function ownerOf(uint256 tokenId) public view returns (address owner);

    function safeTransferFrom(address from, address to, uint256 tokenId) public;
    function transferFrom(address from, address to, uint256 tokenId) public;
    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);


    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}


pragma solidity ^0.5.0;
contract IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}


pragma solidity ^0.5.0;
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}


pragma solidity ^0.5.0;
library Address {

    function isContract(address account) internal view returns (bool) {

        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}


pragma solidity ^0.5.0;
library Counters {
    using SafeMath for uint256;

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

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

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

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}

pragma solidity ^0.5.0;
contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
    }

    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

pragma solidity ^0.5.0;
contract ERC721 is ERC165, IERC721 {
    using SafeMath for uint256;
    using Address for address;
    using Counters for Counters.Counter;

    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

    mapping (uint256 => address) private _tokenOwner;
    mapping (uint256 => address) private _tokenApprovals;
    mapping (address => Counters.Counter) private _ownedTokensCount;
    mapping (address => mapping (address => bool)) private _operatorApprovals;

    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;

    constructor () public {
    }

    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _ownedTokensCount[owner].current();
    }

    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    function approve(address to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

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

    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address to, bool approved) public {
        require(to != msg.sender, "ERC721: approve to caller");
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

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

    function transferFrom(address from, address to, uint256 tokenId) public {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(from, tokenId), "ERC721: transfer caller is not owner nor approved");

        _transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to].increment();

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

    function _burn(address owner, uint256 tokenId) internal {
        require(ownerOf(tokenId) == owner, "ERC721: burn of token that is not own");

        _clearApproval(tokenId);

        _ownedTokensCount[owner].decrement();
        _tokenOwner[tokenId] = address(0);

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

    function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), tokenId); }
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _clearApproval(tokenId);

        _ownedTokensCount[from].decrement();
        _ownedTokensCount[to].increment();

        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) internal returns (bool) {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }
}


pragma solidity ^0.5.0;
contract IERC721Enumerable is IERC721 {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) public view returns (uint256);
}

pragma solidity ^0.5.0;
contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {

    mapping(address => uint256[]) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;
    
    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;


    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;

    constructor () public {
        // register the supported interface to conform to ERC721Enumerable via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view returns (uint256) {
        return _allTokens.length;
    }
    function tokenByIndex(uint256 index) public view returns (uint256) {
        require(index < totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        super._transferFrom(from, to, tokenId);

        _removeTokenFromOwnerEnumeration(from, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);
    }

    function _mint(address to, uint256 tokenId) internal {
        super._mint(to, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);

        _addTokenToAllTokensEnumeration(tokenId);
    }

    function _burn(address owner, uint256 tokenId) internal {
        super._burn(owner, tokenId);

        _removeTokenFromOwnerEnumeration(owner, tokenId);
        // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund
        _ownedTokensIndex[tokenId] = 0;

        _removeTokenFromAllTokensEnumeration(tokenId);
    }

    function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
        return _ownedTokens[owner];
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length;
        _ownedTokens[to].push(tokenId);
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

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

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

        // This also deletes the contents at the last position of the array
        _ownedTokens[from].length--;

        // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by
        // lastTokenId, or just over the end of the array if the token was the last one).
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length.sub(1);
        uint256 tokenIndex = _allTokensIndex[tokenId];

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

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

        // This also deletes the contents at the last position of the array
        _allTokens.length--;
        _allTokensIndex[tokenId] = 0;
    }
}


pragma solidity ^0.5.0;
contract IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}


pragma solidity ^0.5.0;
contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;
    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;

    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;

        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
    }

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }
    
    function tokenURI(uint256 tokenId) external view returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return _tokenURIs[tokenId];
    }

    function _setTokenURI(uint256 tokenId, string memory uri) internal {
        require(_exists(tokenId), "ERC721Metadata: URI set of nonexistent token");
        _tokenURIs[tokenId] = uri;
    }

    function _burn(address owner, uint256 tokenId) internal {
        super._burn(owner, tokenId);

        // Clear metadata (if any)
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}


pragma solidity ^0.5.0;
contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata {
    constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) {
        // solhint-disable-previous-line no-empty-blocks
    }
}

pragma solidity >=0.4.0 <0.8.2;
contract Nft is ERC721Full { 
    struct data { string URL;address payable creator;uint256 Token_ID;uint256 Token_Price;bool Status; }
    address payable public manager; 
      data[] public nft;
      mapping(string => bool) _nftExists;
    
      constructor() ERC721Full("Colexion", "CLXN") public { manager = address(0x7812ca983E0be569FEc1863Baaec388479577B17); }
      
    function mint(string memory url, uint64 Token_Price, bool _status) public {
        require(!_nftExists[url], "AlreadyExist.");
        data memory data123 = data(url,msg.sender,nft.length,Token_Price,_status);
        uint _id = nft.push(data123);
        _mint(msg.sender, _id-1);
        _setTokenURI( _id-1, url);
        _nftExists[url] = true;
        approve(address(this), _id-1);
    }
     
    function changeStatus(uint Token_ID) public only_owner(Token_ID) not_in_auction(Token_ID) {
        nft[Token_ID].Status = !nft[Token_ID].Status;
    }
    
    function purchaseToken(uint64 t_id, uint8 m, uint8 r, uint8 o) public payable not_in_auction(t_id){
        require(nft[t_id].Status == true, "TokenNotForSale");
         require(nft[t_id].Token_Price <= msg.value, "Invalid price");
        t_transfer(ownerOf(t_id), msg.sender, t_id, msg.value,m,r,o);
    }
     
    function t_transfer(address owner, address to, uint64 t_id, uint256 t_price,uint8 m, uint8 r, uint8 o)internal{
        address payable OwnToken = address (uint168(owner));
        manager.transfer( ( (t_price / 100) * m ) );   // transfer 7% to token manager.
        (nft[t_id].creator).transfer( ( (t_price / 100) * r ) );   // transfer 10% to token creator.
        (OwnToken).transfer( ( (t_price / 100) * o ) );   // transfer 83% to token owner.
        transferFrom(owner, to, t_id);
        nft[t_id].Status = false;
        nft[t_id].Token_Price = t_price;
    }
     
    function updateTokenPrice(uint t_id, uint _price) public only_owner(t_id) not_in_auction(t_id) returns(string memory){
        nft[t_id].Token_Price = _price;
        return "PriceUpdated";
     }
     
    mapping (uint => bool) public T_In_Auction;
    mapping (uint => Auction_data) public T_Auction;
    mapping(uint => mapping(address => uint)) public bids;
    mapping(uint => address[]) public token_bidders;    
    address[] bidder_list;

    struct Auction_data{
        uint Token_id; 
        address auction_owner; 
        address auction_winner; 
        uint256 auction_win_bid; 
        uint256 auction_start; 
        uint256 auction_end; 
        uint256 highestBid; 
        address highestBidder;
        uint256 minimunBid; 
        uint256 maximunBid; 
        bool state;
        address[] bidders;
    }

    function create_Auction (uint _biddingTime, uint t_id, uint _minBid, uint _maxBid) only_owner(t_id) not_in_auction(t_id) public {
        require(nft[t_id].Status == false, "TokeForSale");
        address[] memory emptyAddressList;
        Auction_data memory data1750 = Auction_data(t_id,ownerOf(t_id),address(0),0, now,(now +_biddingTime*1 minutes),0,address(0),_minBid,_maxBid, true, emptyAddressList);
        T_Auction[t_id] = data1750; 
        T_In_Auction[t_id] = true; 
        token_bidders[t_id].length = 0;
        approve(address(this), t_id);
    }

    // Not done yet => agr koi higgest bid kerre to token usko transfer hojai
    function bid(uint64 T_id) public payable in_auction(T_id) only_bidders(T_id) not_auction_winner(T_id) returns (bool){ 
        require(bids[T_id][msg.sender] + msg.value >=  T_Auction[T_id].minimunBid, "makeHigherBid");
        require(bids[T_id][msg.sender] + msg.value <=  T_Auction[T_id].maximunBid, "makeLowerBid");
        if(block.timestamp < T_Auction[T_id].auction_end){
            if(bids[T_id][msg.sender] + msg.value >= T_Auction[T_id].maximunBid){
                // bid hits maximum amount
                T_Auction[T_id].state = false;
                T_Auction[T_id].auction_win_bid = bids[T_id][msg.sender] + msg.value;
                T_Auction[T_id].auction_winner = msg.sender;
                T_Auction[T_id].highestBidder = address(0);
                T_Auction[T_id].highestBid = 0;
                bids[T_id][msg.sender] = 0;
                T_In_Auction[T_id] = false; 
                t_transfer(ownerOf(T_id), msg.sender, T_id, T_Auction[T_id].auction_win_bid,7,10,83);
                emit EndedEvent("Auction ended", block.timestamp); 
            } else {
                // bid not hits maximum amount
                bids[T_id][msg.sender] = bids[T_id][msg.sender] + msg.value;
                bidder_list = token_bidders[T_id];
                bidder_list.push(msg.sender);
                token_bidders[T_id] = bidder_list;
                T_Auction[T_id].highestBidder = T_Auction[T_id].highestBid > bids[T_id][msg.sender]  ? T_Auction[T_id].highestBidder : msg.sender;
                T_Auction[T_id].highestBid =  T_Auction[T_id].highestBid > bids[T_id][msg.sender] ? T_Auction[T_id].highestBid : bids[T_id][msg.sender];
                T_Auction[T_id].bidders.push(msg.sender);
                return true;
            }
        } else {
            end_auction_auto(T_id);
        }
    } 
    
    function withdraw(uint T_id) public payable only_bidders(T_id) auction_ended(T_id) not_auction_winner(T_id) returns (bool){
        uint amount = bids[T_id][msg.sender];
        require( amount > 0, "balance 0");
        
        msg.sender.transfer(amount); 
        bids[T_id][msg.sender] = 0; 
        emit WithdrawalEvent(msg.sender, bids[T_id][msg.sender]); 
        return true;
    }  
    
    function end_auction(uint64 T_id) public payable only_owner(T_id) returns (bool, string memory) { 
        require(T_In_Auction[T_id] == true, "TokenInAuction");
        require(nft[T_id].Status == false,"TokenForSale");
        T_Auction[T_id].state = false;
        T_In_Auction[T_id] = false; 
        if(T_Auction[T_id].highestBidder == address(0)){ return (true, "Auction Ended");}
        T_Auction[T_id].auction_win_bid = T_Auction[T_id].highestBid;
        T_Auction[T_id].auction_winner = T_Auction[T_id].highestBidder;
        T_Auction[T_id].highestBidder = address(0);
        T_Auction[T_id].highestBid = 0;
        bids[T_id][T_Auction[T_id].auction_winner] = 0;
        t_transfer(ownerOf(T_id), T_Auction[T_id].auction_winner, T_id, T_Auction[T_id].auction_win_bid,7,10,83);
        emit EndedEvent("Auction ended", block.timestamp); 
        return (true, "Auction Ended");
    }
    
    function end_auction_auto(uint64 T_id)public payable auctionTime_ends(T_id) returns (bool, string memory) { 
        require(T_In_Auction[T_id] == true , "This Token is not in Auction");
        T_Auction[T_id].state = false;
        T_In_Auction[T_id] = false; 
        T_Auction[T_id].auction_win_bid = T_Auction[T_id].highestBid;
        T_Auction[T_id].auction_winner = T_Auction[T_id].highestBidder;
        T_Auction[T_id].highestBidder = address(0);
        T_Auction[T_id].highestBid = 0;
         bids[T_id][T_Auction[T_id].auction_winner] = 0;
        msg.sender.transfer(msg.value);
        // address(uint168(ownerOf(T_id))).transfer(T_Auction[T_id].highestBid);
        t_transfer(ownerOf(T_id), T_Auction[T_id].auction_winner, T_id, T_Auction[T_id].auction_win_bid,7,10,83);
        emit EndedEvent("Auction ended", block.timestamp); 
        return (true, "Auction Ended");
    }
     
    modifier in_auction(uint T_id){ 
        require( T_In_Auction[T_id] == true, "tokenNotInAuction");
        _;
    } 
    modifier not_in_auction(uint T_id){ 
        require(T_In_Auction[T_id] == false , "TokenInAuction");
        _;
    } 
   
    modifier an_ongoing_auction(uint T_id){ 
        require( block.timestamp < T_Auction[T_id].auction_end, "BiddingIsEnd");
        _;
    } 
   
    modifier auctionTime_ends(uint T_id){ 
        require( block.timestamp > T_Auction[T_id].auction_end, "BiddingNotEnd");
        _;
    } 
   
    modifier auction_ended(uint T_id){ 
        require( T_Auction[T_id].state == false, "AuctionIsGoing");
        _;
    } 
   
    modifier only_owner(uint T_id){ 
        require(msg.sender == ownerOf(T_id), "OnlyOwner");
        _;
    } 
   
    modifier only_bidders(uint T_id){ 
        require(msg.sender != T_Auction[T_id].auction_owner, "OnlyBidderAction");
        _;
    } 
    
    modifier not_auction_winner(uint T_id){ 
        require(msg.sender != T_Auction[T_id].auction_winner, "AuctionWinner");
        _;
    } 
    event BidEvent(address indexed Bidder, uint256 Bid); 
    event WithdrawalEvent(address withdrawer, uint256 amount);
    event EndedEvent(string message, uint256 time);

}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"T_id","type":"uint256"}],"name":"withdraw","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"bids","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"manager","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"T_id","type":"uint64"}],"name":"end_auction_auto","outputs":[{"name":"","type":"bool"},{"name":"","type":"string"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"t_id","type":"uint64"},{"name":"m","type":"uint8"},{"name":"r","type":"uint8"},{"name":"o","type":"uint8"}],"name":"purchaseToken","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"t_id","type":"uint256"},{"name":"_price","type":"uint256"}],"name":"updateTokenPrice","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_biddingTime","type":"uint256"},{"name":"t_id","type":"uint256"},{"name":"_minBid","type":"uint256"},{"name":"_maxBid","type":"uint256"}],"name":"create_Auction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"T_id","type":"uint64"}],"name":"end_auction","outputs":[{"name":"","type":"bool"},{"name":"","type":"string"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"nft","outputs":[{"name":"URL","type":"string"},{"name":"creator","type":"address"},{"name":"Token_ID","type":"uint256"},{"name":"Token_Price","type":"uint256"},{"name":"Status","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"url","type":"string"},{"name":"Token_Price","type":"uint64"},{"name":"_status","type":"bool"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"T_In_Auction","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"T_id","type":"uint64"}],"name":"bid","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"T_Auction","outputs":[{"name":"Token_id","type":"uint256"},{"name":"auction_owner","type":"address"},{"name":"auction_winner","type":"address"},{"name":"auction_win_bid","type":"uint256"},{"name":"auction_start","type":"uint256"},{"name":"auction_end","type":"uint256"},{"name":"highestBid","type":"uint256"},{"name":"highestBidder","type":"address"},{"name":"minimunBid","type":"uint256"},{"name":"maximunBid","type":"uint256"},{"name":"state","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"Token_ID","type":"uint256"}],"name":"changeStatus","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"token_bidders","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Bidder","type":"address"},{"indexed":false,"name":"Bid","type":"uint256"}],"name":"BidEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"withdrawer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"WithdrawalEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"message","type":"string"},{"indexed":false,"name":"time","type":"uint256"}],"name":"EndedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

60806040523480156200001157600080fd5b506040805190810160405280600881526020017f436f6c6578696f6e0000000000000000000000000000000000000000000000008152506040805190810160405280600481526020017f434c584e000000000000000000000000000000000000000000000000000000008152508181620000bd63780e9d637c0100000000000000000000000000000000000000000000000000000000026200018b640100000000026401000000009004565b8160099080519060200190620000d5929190620002b2565b5080600a9080519060200190620000ee929190620002b2565b506200012c635b5e139f7c0100000000000000000000000000000000000000000000000000000000026200018b640100000000026401000000009004565b50505050737812ca983e0be569fec1863baaec388479577b17600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000361565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415151562000246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433136353a20696e76616c696420696e746572666163652069640000000081525060200191505060405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002f557805160ff191683800117855562000326565b8280016001018555821562000326579182015b828111156200032557825182559160200191906001019062000308565b5b50905062000335919062000339565b5090565b6200035e91905b808211156200035a57600081600090555060010162000340565b5090565b90565b615fda80620003716000396000f3fe60806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a71461019057806306fdde0314610202578063081812fc14610292578063095ea7b31461030d57806318160ddd1461036857806323b872dd146103935780632e1a7d4d1461040e5780632f745c59146104545780633f1ffcec146104c357806342842e0e14610532578063481c6a75146105ad5780634f6ccce7146106045780636352211e146106535780636fcda571146106ce57806370a082311461078a5780637fe746bf146107ef578063897925f51461084e57806395d89b411461090c5780639abe4e291461099c5780639b5a587b146109f55780639d0214cb14610ab1578063a22cb46514610bb1578063a3ab349614610c0e578063b662f67114610cf6578063b88d4fde14610d49578063c261d45614610e5b578063c87b56dd14610eab578063d095005914610f5f578063e8025d771461107c578063e985e9c5146110b7578063f49d66c014611140575b600080fd5b34801561019c57600080fd5b506101e8600480360360208110156101b357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506111c5565b604051808215151515815260200191505060405180910390f35b34801561020e57600080fd5b5061021761122c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025757808201518184015260208101905061023c565b50505050905090810190601f1680156102845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029e57600080fd5b506102cb600480360360208110156102b557600080fd5b81019080803590602001909291905050506112ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031957600080fd5b506103666004803603604081101561033057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113ae565b005b34801561037457600080fd5b5061037d611611565b6040518082815260200191505060405180910390f35b34801561039f57600080fd5b5061040c600480360360608110156103b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061161e565b005b61043a6004803603602081101561042457600080fd5b81019080803590602001909291905050506116d2565b604051808215151515815260200191505060405180910390f35b34801561046057600080fd5b506104ad6004803603604081101561047757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b5c565b6040518082815260200191505060405180910390f35b3480156104cf57600080fd5b5061051c600480360360408110156104e657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c62565b6040518082815260200191505060405180910390f35b34801561053e57600080fd5b506105ab6004803603606081101561055557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c87565b005b3480156105b957600080fd5b506105c2611ca8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061057600080fd5b5061063d6004803603602081101561062757600080fd5b8101908080359060200190929190505050611cce565b6040518082815260200191505060405180910390f35b34801561065f57600080fd5b5061068c6004803603602081101561067657600080fd5b8101908080359060200190929190505050611d95565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610704600480360360208110156106e457600080fd5b81019080803567ffffffffffffffff169060200190929190505050611ea2565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561074e578082015181840152602081019050610733565b50505050905090810190601f16801561077b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561079657600080fd5b506107d9600480360360208110156107ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123da565b6040518082815260200191505060405180910390f35b61084c6004803603608081101561080557600080fd5b81019080803567ffffffffffffffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff1690602001909291905050506124f4565b005b34801561085a57600080fd5b506108916004803603604081101561087157600080fd5b810190808035906020019092919080359060200190929190505050612718565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d15780820151818401526020810190506108b6565b50505050905090810190601f1680156108fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561091857600080fd5b506109216128c8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610961578082015181840152602081019050610946565b50505050905090810190601f16801561098e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109a857600080fd5b506109f3600480360360808110156109bf57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919050505061296a565b005b610a2b60048036036020811015610a0b57600080fd5b81019080803567ffffffffffffffff169060200190929190505050612de5565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a75578082015181840152602081019050610a5a565b50505050905090810190601f168015610aa25780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610abd57600080fd5b50610aea60048036036020811015610ad457600080fd5b810190808035906020019092919050505061345e565b60405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200183151515158152602001828103825287818151815260200191508051906020019080838360005b83811015610b72578082015181840152602081019050610b57565b50505050905090810190601f168015610b9f5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b348015610bbd57600080fd5b50610c0c60048036036040811015610bd457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613568565b005b348015610c1a57600080fd5b50610cf460048036036060811015610c3157600080fd5b8101908080359060200190640100000000811115610c4e57600080fd5b820183602082011115610c6057600080fd5b80359060200191846001830284011164010000000083111715610c8257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803567ffffffffffffffff16906020019092919080351515906020019092919050505061370d565b005b348015610d0257600080fd5b50610d2f60048036036020811015610d1957600080fd5b81019080803590602001909291905050506139d2565b604051808215151515815260200191505060405180910390f35b348015610d5557600080fd5b50610e5960048036036080811015610d6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610dd357600080fd5b820183602082011115610de557600080fd5b80359060200191846001830284011164010000000083111715610e0757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506139f2565b005b610e9160048036036020811015610e7157600080fd5b81019080803567ffffffffffffffff169060200190929190505050613aa9565b604051808215151515815260200191505060405180910390f35b348015610eb757600080fd5b50610ee460048036036020811015610ece57600080fd5b8101908080359060200190929190505050614711565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f24578082015181840152602081019050610f09565b50505050905090810190601f168015610f515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f6b57600080fd5b50610f9860048036036020811015610f8257600080fd5b8101908080359060200190929190505050614869565b604051808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001821515151581526020019b50505050505050505050505060405180910390f35b34801561108857600080fd5b506110b56004803603602081101561109f57600080fd5b8101908080359060200190929190505050614930565b005b3480156110c357600080fd5b50611126600480360360408110156110da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614ae4565b604051808215151515815260200191505060405180910390f35b34801561114c57600080fd5b506111836004803603604081101561116357600080fd5b810190808035906020019092919080359060200190929190505050614b78565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112c45780601f10611299576101008083540402835291602001916112c4565b820191906000526020600020905b8154815290600101906020018083116112a757829003601f168201915b5050505050905090565b60006112d982614bc5565b1515611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433732313a20617070726f76656420717565727920666f72206e6f6e657881526020017f697374656e7420746f6b656e000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006113b982611d95565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611485576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6581526020017f720000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114c557506114c48133614ae4565b5b151561155f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001807f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7781526020017f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000081525060400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b6116288382614c37565b15156116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f81526020017f776e6572206e6f7220617070726f76656400000000000000000000000000000081525060400191505060405180910390fd5b6116cd838383614d70565b505050565b6000816010600082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4f6e6c79426964646572416374696f6e0000000000000000000000000000000081525060200191505060405180910390fd5b826000151560106000838152602001908152602001600020600a0160009054906101000a900460ff16151514151561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f41756374696f6e4973476f696e6700000000000000000000000000000000000081525060200191505060405180910390fd5b836010600082815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561192a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f41756374696f6e57696e6e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b60006011600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f62616c616e63652030000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a3d573d6000803e3d6000fd5b5060006011600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2f174ca282119315c59efaf21147aef438581dabdeb498198ae28964373dd8bc336011600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001945050505050919050565b6000611b67836123da565b82101515611c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f455243373231456e756d657261626c653a206f776e657220696e646578206f7581526020017f74206f6620626f756e647300000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515611c4f57fe5b9060005260206000200154905092915050565b6011602052816000526040600020602052806000526040600020600091509150505481565b611ca383838360206040519081016040528060008152506139f2565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cd8611611565b82101515611d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f81526020017f7574206f6620626f756e6473000000000000000000000000000000000000000081525060400191505060405180910390fd5b600782815481101515611d8357fe5b90600052602060002001549050919050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611e99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f4552433732313a206f776e657220717565727920666f72206e6f6e657869737481526020017f656e7420746f6b656e000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80915050919050565b600060608267ffffffffffffffff16601060008281526020019081526020016000206005015442111515611f3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f42696464696e674e6f74456e640000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600f60008667ffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5468697320546f6b656e206973206e6f7420696e2041756374696f6e0000000081525060200191505060405180910390fd5b6000601060008667ffffffffffffffff168152602001908152602001600020600a0160006101000a81548160ff0219169083151502179055506000600f60008667ffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601060008567ffffffffffffffff16815260200190815260200160002060060154601060008667ffffffffffffffff16815260200190815260200160002060030181905550601060008567ffffffffffffffff16815260200190815260200160002060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060008667ffffffffffffffff16815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008667ffffffffffffffff16815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008667ffffffffffffffff168152602001908152602001600020600601819055506000601160008667ffffffffffffffff1681526020019081526020016000206000601060008867ffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156122a3573d6000803e3d6000fd5b506123286122ba8567ffffffffffffffff16611d95565b601060008767ffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686601060008967ffffffffffffffff168152602001908152602001600020600301546007600a6053614d94565b7f24a0951686f5c12f6a826f0d646142613f80d5ba6d01f5ab30d4aa121d8258d54260405180806020018381526020018281038252600d8152602001807f41756374696f6e20656e646564000000000000000000000000000000000000008152506020019250505060405180910390a160016040805190810160405280600d81526020017f41756374696f6e20456e646564000000000000000000000000000000000000008152509250925050915091565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f4552433732313a2062616c616e636520717565727920666f7220746865207a6581526020017f726f20616464726573730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6124ed600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614fb4565b9050919050565b8367ffffffffffffffff1660001515600f600083815260200190815260200160002060009054906101000a900460ff16151514151561259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600d8667ffffffffffffffff168154811015156125b857fe5b906000526020600020906005020160040160009054906101000a900460ff16151514151561264e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f546f6b656e4e6f74466f7253616c65000000000000000000000000000000000081525060200191505060405180910390fd5b34600d8667ffffffffffffffff1681548110151561266857fe5b906000526020600020906005020160030154111515156126f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642070726963650000000000000000000000000000000000000081525060200191505060405180910390fd5b6127116127068667ffffffffffffffff16611d95565b338734888888614d94565b5050505050565b60608261272481611d95565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8360001515600f600083815260200190815260200160002060009054906101000a900460ff161515141515612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b83600d8681548110151561287357fe5b9060005260206000209060050201600301819055506040805190810160405280600c81526020017f50726963655570646174656400000000000000000000000000000000000000008152509250505092915050565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129605780601f1061293557610100808354040283529160200191612960565b820191906000526020600020905b81548152906001019060200180831161294357829003601f168201915b5050505050905090565b8261297481611d95565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612a16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8360001515600f600083815260200190815260200160002060009054906101000a900460ff161515141515612ab3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600d86815481101515612ac657fe5b906000526020600020906005020160040160009054906101000a900460ff161515141515612b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f546f6b65466f7253616c6500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6060612b66615c24565b61018060405190810160405280888152602001612b8289611d95565b73ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001428152602001603c8a024201815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200187815260200186815260200160011515815260200183815250905080601060008981526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff02191690831515021790555061016082015181600b019080519060200190612d80929190615cca565b509050506001600f600089815260200190815260200160002060006101000a81548160ff02191690831515021790555060006012600089815260200190815260200160002081612dd09190615d54565b50612ddb30886113ae565b5050505050505050565b600060608267ffffffffffffffff16612dfd81611d95565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612e9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600f60008667ffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515612f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600d8567ffffffffffffffff16815481101515612f6257fe5b906000526020600020906005020160040160009054906101000a900460ff161515141515612ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f546f6b656e466f7253616c65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000601060008667ffffffffffffffff168152602001908152602001600020600a0160006101000a81548160ff0219169083151502179055506000600f60008667ffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16601060008667ffffffffffffffff16815260200190815260200160002060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561311d5760016040805190810160405280600d81526020017f41756374696f6e20456e6465640000000000000000000000000000000000000081525092509250613458565b601060008567ffffffffffffffff16815260200190815260200160002060060154601060008667ffffffffffffffff16815260200190815260200160002060030181905550601060008567ffffffffffffffff16815260200190815260200160002060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060008667ffffffffffffffff16815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008667ffffffffffffffff16815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008667ffffffffffffffff168152602001908152602001600020600601819055506000601160008667ffffffffffffffff1681526020019081526020016000206000601060008867ffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133ab61333d8567ffffffffffffffff16611d95565b601060008767ffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686601060008967ffffffffffffffff168152602001908152602001600020600301546007600a6053614d94565b7f24a0951686f5c12f6a826f0d646142613f80d5ba6d01f5ab30d4aa121d8258d54260405180806020018381526020018281038252600d8152602001807f41756374696f6e20656e646564000000000000000000000000000000000000008152506020019250505060405180910390a160016040805190810160405280600d81526020017f41756374696f6e20456e64656400000000000000000000000000000000000000815250925092505b50915091565b600d8181548110151561346d57fe5b9060005260206000209060050201600091509050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156135195780601f106134ee57610100808354040283529160200191613519565b820191906000526020600020905b8154815290600101906020018083116134fc57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040160009054906101000a900460ff16905085565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561360c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600e836040518082805190602001908083835b6020831015156137455780518252602082019150602081019050602083039250613720565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff161515156137fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f416c726561647945786973742e0000000000000000000000000000000000000081525060200191505060405180910390fd5b613803615d80565b60a0604051908101604052808581526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600d8054905081526020018467ffffffffffffffff16815260200183151581525090506000600d829080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906138a0929190615dc8565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055505050905061392d3360018303614fc2565b61393a6001820386614fe3565b6001600e866040518082805190602001908083835b602083101515613974578051825260208201915060208101905060208303925061394f565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055506139cb30600183036113ae565b5050505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6139fd84848461161e565b613a09848484846150b2565b1515613aa3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4552433732313a207472616e7366657220746f206e6f6e20455243373231526581526020017f63656976657220696d706c656d656e746572000000000000000000000000000081525060400191505060405180910390fd5b50505050565b60008167ffffffffffffffff1660011515600f600083815260200190815260200160002060009054906101000a900460ff161515141515613b52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f746f6b656e4e6f74496e41756374696f6e00000000000000000000000000000081525060200191505060405180910390fd5b8267ffffffffffffffff166010600082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515613c37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4f6e6c79426964646572416374696f6e0000000000000000000000000000000081525060200191505060405180910390fd5b8367ffffffffffffffff166010600082815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515613d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f41756374696f6e57696e6e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b601060008667ffffffffffffffff1681526020019081526020016000206008015434601160008867ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540110151515613e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6d616b654869676865724269640000000000000000000000000000000000000081525060200191505060405180910390fd5b601060008667ffffffffffffffff1681526020019081526020016000206009015434601160008867ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540111151515613f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6d616b654c6f776572426964000000000000000000000000000000000000000081525060200191505060405180910390fd5b601060008667ffffffffffffffff168152602001908152602001600020600501544210156146fc57601060008667ffffffffffffffff1681526020019081526020016000206009015434601160008867ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540110151561429f576000601060008767ffffffffffffffff168152602001908152602001600020600a0160006101000a81548160ff02191690831515021790555034601160008767ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401601060008767ffffffffffffffff1681526020019081526020016000206003018190555033601060008767ffffffffffffffff16815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008767ffffffffffffffff16815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008767ffffffffffffffff168152602001908152602001600020600601819055506000601160008767ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f60008767ffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061422a6141fc8667ffffffffffffffff16611d95565b3387601060008a67ffffffffffffffff168152602001908152602001600020600301546007600a6053614d94565b7f24a0951686f5c12f6a826f0d646142613f80d5ba6d01f5ab30d4aa121d8258d54260405180806020018381526020018281038252600d8152602001807f41756374696f6e20656e646564000000000000000000000000000000000000008152506020019250505060405180910390a16146f7565b34601160008767ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401601160008767ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601260008667ffffffffffffffff1681526020019081526020016000206013908054614387929190615e48565b5060133390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506013601260008767ffffffffffffffff16815260200190815260200160002090805461441b929190615e48565b50601160008667ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008767ffffffffffffffff16815260200190815260200160002060060154116144a357336144e5565b601060008667ffffffffffffffff16815260200190815260200160002060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b601060008767ffffffffffffffff16815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160008667ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008767ffffffffffffffff168152602001908152602001600020600601541161462457601160008667ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614646565b601060008667ffffffffffffffff168152602001908152602001600020600601545b601060008767ffffffffffffffff16815260200190815260200160002060060181905550601060008667ffffffffffffffff168152602001908152602001600020600b013390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060019350614709565b614708565b61470585611ea2565b50505b5b505050919050565b606061471c82614bc5565b15156147b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4552433732314d657461646174613a2055524920717565727920666f72206e6f81526020017f6e6578697374656e7420746f6b656e000000000000000000000000000000000081525060400191505060405180910390fd5b600b60008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561485d5780601f106148325761010080835404028352916020019161485d565b820191906000526020600020905b81548152906001019060200180831161484057829003601f168201915b50505050509050919050565b60106020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040154908060050154908060060154908060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600801549080600901549080600a0160009054906101000a900460ff1690508b565b8061493a81611d95565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156149dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8160001515600f600083815260200190815260200160002060009054906101000a900460ff161515141515614a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b600d83815481101515614a8857fe5b906000526020600020906005020160040160009054906101000a900460ff1615600d84815481101515614ab757fe5b906000526020600020906005020160040160006101000a81548160ff021916908315150217905550505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601260205281600052604060002081815481101515614b9357fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6000614c4282614bc5565b1515614cdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657881526020017f697374656e7420746f6b656e000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000614ce783611d95565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480614d5657508373ffffffffffffffffffffffffffffffffffffffff16614d3e846112ce565b73ffffffffffffffffffffffffffffffffffffffff16145b80614d675750614d668185614ae4565b5b91505092915050565b614d7b8383836152d5565b614d8583826155ba565b614d8f828261575e565b505050565b60008773ffffffffffffffffffffffffffffffffffffffff169050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8560ff16606488811515614dfb57fe5b04029081150290604051600060405180830381858888f19350505050158015614e28573d6000803e3d6000fd5b50600d8667ffffffffffffffff16815481101515614e4257fe5b906000526020600020906005020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8460ff16606488811515614e9d57fe5b04029081150290604051600060405180830381858888f19350505050158015614eca573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff166108fc8360ff16606488811515614ef557fe5b04029081150290604051600060405180830381858888f19350505050158015614f22573d6000803e3d6000fd5b50614f3888888867ffffffffffffffff1661161e565b6000600d8767ffffffffffffffff16815481101515614f5357fe5b906000526020600020906005020160040160006101000a81548160ff02191690831515021790555084600d8767ffffffffffffffff16815481101515614f9557fe5b9060005260206000209060050201600301819055505050505050505050565b600081600001549050919050565b614fcc8282615825565b614fd6828261575e565b614fdf81615a41565b5050565b614fec82614bc5565b1515615086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433732314d657461646174613a2055524920736574206f66206e6f6e657881526020017f697374656e7420746f6b656e000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600b600084815260200190815260200160002090805190602001906150ad929190615e9a565b505050565b60006150d38473ffffffffffffffffffffffffffffffffffffffff16615a8d565b15156150e257600190506152cd565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156151d95780820151818401526020810190506151be565b50505050905090810190601f1680156152065780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561522857600080fd5b505af115801561523c573d6000803e3d6000fd5b505050506040513d602081101561525257600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166152f582611d95565b73ffffffffffffffffffffffffffffffffffffffff161415156153a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f4552433732313a207472616e73666572206f6620746f6b656e2074686174206981526020017f73206e6f74206f776e000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515615471576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f4552433732313a207472616e7366657220746f20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61547a81615aa0565b6154c1600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020615b60565b615508600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020615b83565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006156126001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050615b9990919063ffffffff16565b90506000600660008481526020019081526020016000205490508181141515615705576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561568357fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156156dd57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036157579190615f1a565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156158ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b6158d381614bc5565b151515615948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506159e1600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020615b83565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515615b5d5760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b615b7860018260000154615b9990919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000828211151515615c13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6101806040519081016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600015158152602001606081525090565b828054828255906000526020600020908101928215615d43579160200282015b82811115615d425782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190615cea565b5b509050615d509190615f46565b5090565b815481835581811115615d7b57818360005260206000209182019101615d7a9190615f89565b5b505050565b60a06040519081016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615e0957805160ff1916838001178555615e37565b82800160010185558215615e37579182015b82811115615e36578251825591602001919060010190615e1b565b5b509050615e449190615f89565b5090565b828054828255906000526020600020908101928215615e895760005260206000209182015b82811115615e88578254825591600101919060010190615e6d565b5b509050615e969190615f46565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615edb57805160ff1916838001178555615f09565b82800160010185558215615f09579182015b82811115615f08578251825591602001919060010190615eed565b5b509050615f169190615f89565b5090565b815481835581811115615f4157818360005260206000209182019101615f409190615f89565b5b505050565b615f8691905b80821115615f8257600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101615f4c565b5090565b90565b615fab91905b80821115615fa7576000816000905550600101615f8f565b5090565b9056fea165627a7a7230582019c4f32cdec15a18ed7d6fcac5df56ce1b2dbb879d431e60cf999e631bb28f970029

Deployed Bytecode

0x60806040526004361061018b576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a71461019057806306fdde0314610202578063081812fc14610292578063095ea7b31461030d57806318160ddd1461036857806323b872dd146103935780632e1a7d4d1461040e5780632f745c59146104545780633f1ffcec146104c357806342842e0e14610532578063481c6a75146105ad5780634f6ccce7146106045780636352211e146106535780636fcda571146106ce57806370a082311461078a5780637fe746bf146107ef578063897925f51461084e57806395d89b411461090c5780639abe4e291461099c5780639b5a587b146109f55780639d0214cb14610ab1578063a22cb46514610bb1578063a3ab349614610c0e578063b662f67114610cf6578063b88d4fde14610d49578063c261d45614610e5b578063c87b56dd14610eab578063d095005914610f5f578063e8025d771461107c578063e985e9c5146110b7578063f49d66c014611140575b600080fd5b34801561019c57600080fd5b506101e8600480360360208110156101b357600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506111c5565b604051808215151515815260200191505060405180910390f35b34801561020e57600080fd5b5061021761122c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561025757808201518184015260208101905061023c565b50505050905090810190601f1680156102845780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561029e57600080fd5b506102cb600480360360208110156102b557600080fd5b81019080803590602001909291905050506112ce565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561031957600080fd5b506103666004803603604081101561033057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113ae565b005b34801561037457600080fd5b5061037d611611565b6040518082815260200191505060405180910390f35b34801561039f57600080fd5b5061040c600480360360608110156103b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061161e565b005b61043a6004803603602081101561042457600080fd5b81019080803590602001909291905050506116d2565b604051808215151515815260200191505060405180910390f35b34801561046057600080fd5b506104ad6004803603604081101561047757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b5c565b6040518082815260200191505060405180910390f35b3480156104cf57600080fd5b5061051c600480360360408110156104e657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c62565b6040518082815260200191505060405180910390f35b34801561053e57600080fd5b506105ab6004803603606081101561055557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c87565b005b3480156105b957600080fd5b506105c2611ca8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561061057600080fd5b5061063d6004803603602081101561062757600080fd5b8101908080359060200190929190505050611cce565b6040518082815260200191505060405180910390f35b34801561065f57600080fd5b5061068c6004803603602081101561067657600080fd5b8101908080359060200190929190505050611d95565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610704600480360360208110156106e457600080fd5b81019080803567ffffffffffffffff169060200190929190505050611ea2565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561074e578082015181840152602081019050610733565b50505050905090810190601f16801561077b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561079657600080fd5b506107d9600480360360208110156107ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123da565b6040518082815260200191505060405180910390f35b61084c6004803603608081101561080557600080fd5b81019080803567ffffffffffffffff169060200190929190803560ff169060200190929190803560ff169060200190929190803560ff1690602001909291905050506124f4565b005b34801561085a57600080fd5b506108916004803603604081101561087157600080fd5b810190808035906020019092919080359060200190929190505050612718565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d15780820151818401526020810190506108b6565b50505050905090810190601f1680156108fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561091857600080fd5b506109216128c8565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610961578082015181840152602081019050610946565b50505050905090810190601f16801561098e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156109a857600080fd5b506109f3600480360360808110156109bf57600080fd5b810190808035906020019092919080359060200190929190803590602001909291908035906020019092919050505061296a565b005b610a2b60048036036020811015610a0b57600080fd5b81019080803567ffffffffffffffff169060200190929190505050612de5565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a75578082015181840152602081019050610a5a565b50505050905090810190601f168015610aa25780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b348015610abd57600080fd5b50610aea60048036036020811015610ad457600080fd5b810190808035906020019092919050505061345e565b60405180806020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200183151515158152602001828103825287818151815260200191508051906020019080838360005b83811015610b72578082015181840152602081019050610b57565b50505050905090810190601f168015610b9f5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390f35b348015610bbd57600080fd5b50610c0c60048036036040811015610bd457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613568565b005b348015610c1a57600080fd5b50610cf460048036036060811015610c3157600080fd5b8101908080359060200190640100000000811115610c4e57600080fd5b820183602082011115610c6057600080fd5b80359060200191846001830284011164010000000083111715610c8257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803567ffffffffffffffff16906020019092919080351515906020019092919050505061370d565b005b348015610d0257600080fd5b50610d2f60048036036020811015610d1957600080fd5b81019080803590602001909291905050506139d2565b604051808215151515815260200191505060405180910390f35b348015610d5557600080fd5b50610e5960048036036080811015610d6c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610dd357600080fd5b820183602082011115610de557600080fd5b80359060200191846001830284011164010000000083111715610e0757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506139f2565b005b610e9160048036036020811015610e7157600080fd5b81019080803567ffffffffffffffff169060200190929190505050613aa9565b604051808215151515815260200191505060405180910390f35b348015610eb757600080fd5b50610ee460048036036020811015610ece57600080fd5b8101908080359060200190929190505050614711565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f24578082015181840152602081019050610f09565b50505050905090810190601f168015610f515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f6b57600080fd5b50610f9860048036036020811015610f8257600080fd5b8101908080359060200190929190505050614869565b604051808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018981526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001821515151581526020019b50505050505050505050505060405180910390f35b34801561108857600080fd5b506110b56004803603602081101561109f57600080fd5b8101908080359060200190929190505050614930565b005b3480156110c357600080fd5b50611126600480360360408110156110da57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614ae4565b604051808215151515815260200191505060405180910390f35b34801561114c57600080fd5b506111836004803603604081101561116357600080fd5b810190808035906020019092919080359060200190929190505050614b78565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112c45780601f10611299576101008083540402835291602001916112c4565b820191906000526020600020905b8154815290600101906020018083116112a757829003601f168201915b5050505050905090565b60006112d982614bc5565b1515611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433732313a20617070726f76656420717565727920666f72206e6f6e657881526020017f697374656e7420746f6b656e000000000000000000000000000000000000000081525060400191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006113b982611d95565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611485576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001807f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6581526020017f720000000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806114c557506114c48133614ae4565b5b151561155f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001807f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7781526020017f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000081525060400191505060405180910390fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b6116288382614c37565b15156116c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001807f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f81526020017f776e6572206e6f7220617070726f76656400000000000000000000000000000081525060400191505060405180910390fd5b6116cd838383614d70565b505050565b6000816010600082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4f6e6c79426964646572416374696f6e0000000000000000000000000000000081525060200191505060405180910390fd5b826000151560106000838152602001908152602001600020600a0160009054906101000a900460ff16151514151561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f41756374696f6e4973476f696e6700000000000000000000000000000000000081525060200191505060405180910390fd5b836010600082815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561192a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f41756374696f6e57696e6e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b60006011600087815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000811115156119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f62616c616e63652030000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a3d573d6000803e3d6000fd5b5060006011600088815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f2f174ca282119315c59efaf21147aef438581dabdeb498198ae28964373dd8bc336011600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001945050505050919050565b6000611b67836123da565b82101515611c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001807f455243373231456e756d657261626c653a206f776e657220696e646578206f7581526020017f74206f6620626f756e647300000000000000000000000000000000000000000081525060400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515611c4f57fe5b9060005260206000200154905092915050565b6011602052816000526040600020602052806000526040600020600091509150505481565b611ca383838360206040519081016040528060008152506139f2565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611cd8611611565b82101515611d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f81526020017f7574206f6620626f756e6473000000000000000000000000000000000000000081525060400191505060405180910390fd5b600782815481101515611d8357fe5b90600052602060002001549050919050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611e99576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f4552433732313a206f776e657220717565727920666f72206e6f6e657869737481526020017f656e7420746f6b656e000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b80915050919050565b600060608267ffffffffffffffff16601060008281526020019081526020016000206005015442111515611f3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f42696464696e674e6f74456e640000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600f60008667ffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5468697320546f6b656e206973206e6f7420696e2041756374696f6e0000000081525060200191505060405180910390fd5b6000601060008667ffffffffffffffff168152602001908152602001600020600a0160006101000a81548160ff0219169083151502179055506000600f60008667ffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601060008567ffffffffffffffff16815260200190815260200160002060060154601060008667ffffffffffffffff16815260200190815260200160002060030181905550601060008567ffffffffffffffff16815260200190815260200160002060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060008667ffffffffffffffff16815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008667ffffffffffffffff16815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008667ffffffffffffffff168152602001908152602001600020600601819055506000601160008667ffffffffffffffff1681526020019081526020016000206000601060008867ffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156122a3573d6000803e3d6000fd5b506123286122ba8567ffffffffffffffff16611d95565b601060008767ffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686601060008967ffffffffffffffff168152602001908152602001600020600301546007600a6053614d94565b7f24a0951686f5c12f6a826f0d646142613f80d5ba6d01f5ab30d4aa121d8258d54260405180806020018381526020018281038252600d8152602001807f41756374696f6e20656e646564000000000000000000000000000000000000008152506020019250505060405180910390a160016040805190810160405280600d81526020017f41756374696f6e20456e646564000000000000000000000000000000000000008152509250925050915091565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156124a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f4552433732313a2062616c616e636520717565727920666f7220746865207a6581526020017f726f20616464726573730000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6124ed600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020614fb4565b9050919050565b8367ffffffffffffffff1660001515600f600083815260200190815260200160002060009054906101000a900460ff16151514151561259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600d8667ffffffffffffffff168154811015156125b857fe5b906000526020600020906005020160040160009054906101000a900460ff16151514151561264e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f546f6b656e4e6f74466f7253616c65000000000000000000000000000000000081525060200191505060405180910390fd5b34600d8667ffffffffffffffff1681548110151561266857fe5b906000526020600020906005020160030154111515156126f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c69642070726963650000000000000000000000000000000000000081525060200191505060405180910390fd5b6127116127068667ffffffffffffffff16611d95565b338734888888614d94565b5050505050565b60608261272481611d95565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8360001515600f600083815260200190815260200160002060009054906101000a900460ff161515141515612863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b83600d8681548110151561287357fe5b9060005260206000209060050201600301819055506040805190810160405280600c81526020017f50726963655570646174656400000000000000000000000000000000000000008152509250505092915050565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156129605780601f1061293557610100808354040283529160200191612960565b820191906000526020600020905b81548152906001019060200180831161294357829003601f168201915b5050505050905090565b8261297481611d95565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612a16576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8360001515600f600083815260200190815260200160002060009054906101000a900460ff161515141515612ab3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600d86815481101515612ac657fe5b906000526020600020906005020160040160009054906101000a900460ff161515141515612b5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f546f6b65466f7253616c6500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6060612b66615c24565b61018060405190810160405280888152602001612b8289611d95565b73ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001428152602001603c8a024201815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200187815260200186815260200160011515815260200183815250905080601060008981526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080155610120820151816009015561014082015181600a0160006101000a81548160ff02191690831515021790555061016082015181600b019080519060200190612d80929190615cca565b509050506001600f600089815260200190815260200160002060006101000a81548160ff02191690831515021790555060006012600089815260200190815260200160002081612dd09190615d54565b50612ddb30886113ae565b5050505050505050565b600060608267ffffffffffffffff16612dfd81611d95565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612e9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60011515600f60008667ffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515612f45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b60001515600d8567ffffffffffffffff16815481101515612f6257fe5b906000526020600020906005020160040160009054906101000a900460ff161515141515612ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f546f6b656e466f7253616c65000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000601060008667ffffffffffffffff168152602001908152602001600020600a0160006101000a81548160ff0219169083151502179055506000600f60008667ffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16601060008667ffffffffffffffff16815260200190815260200160002060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561311d5760016040805190810160405280600d81526020017f41756374696f6e20456e6465640000000000000000000000000000000000000081525092509250613458565b601060008567ffffffffffffffff16815260200190815260200160002060060154601060008667ffffffffffffffff16815260200190815260200160002060030181905550601060008567ffffffffffffffff16815260200190815260200160002060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601060008667ffffffffffffffff16815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008667ffffffffffffffff16815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008667ffffffffffffffff168152602001908152602001600020600601819055506000601160008667ffffffffffffffff1681526020019081526020016000206000601060008867ffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133ab61333d8567ffffffffffffffff16611d95565b601060008767ffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686601060008967ffffffffffffffff168152602001908152602001600020600301546007600a6053614d94565b7f24a0951686f5c12f6a826f0d646142613f80d5ba6d01f5ab30d4aa121d8258d54260405180806020018381526020018281038252600d8152602001807f41756374696f6e20656e646564000000000000000000000000000000000000008152506020019250505060405180910390a160016040805190810160405280600d81526020017f41756374696f6e20456e64656400000000000000000000000000000000000000815250925092505b50915091565b600d8181548110151561346d57fe5b9060005260206000209060050201600091509050806000018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156135195780601f106134ee57610100808354040283529160200191613519565b820191906000526020600020905b8154815290600101906020018083116134fc57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040160009054906101000a900460ff16905085565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561360c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4552433732313a20617070726f766520746f2063616c6c65720000000000000081525060200191505060405180910390fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600e836040518082805190602001908083835b6020831015156137455780518252602082019150602081019050602083039250613720565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060009054906101000a900460ff161515156137fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f416c726561647945786973742e0000000000000000000000000000000000000081525060200191505060405180910390fd5b613803615d80565b60a0604051908101604052808581526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600d8054905081526020018467ffffffffffffffff16815260200183151581525090506000600d829080600181540180825580915050906001820390600052602060002090600502016000909192909190915060008201518160000190805190602001906138a0929190615dc8565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604082015181600201556060820151816003015560808201518160040160006101000a81548160ff0219169083151502179055505050905061392d3360018303614fc2565b61393a6001820386614fe3565b6001600e866040518082805190602001908083835b602083101515613974578051825260208201915060208101905060208303925061394f565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902060006101000a81548160ff0219169083151502179055506139cb30600183036113ae565b5050505050565b600f6020528060005260406000206000915054906101000a900460ff1681565b6139fd84848461161e565b613a09848484846150b2565b1515613aa3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4552433732313a207472616e7366657220746f206e6f6e20455243373231526581526020017f63656976657220696d706c656d656e746572000000000000000000000000000081525060400191505060405180910390fd5b50505050565b60008167ffffffffffffffff1660011515600f600083815260200190815260200160002060009054906101000a900460ff161515141515613b52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f746f6b656e4e6f74496e41756374696f6e00000000000000000000000000000081525060200191505060405180910390fd5b8267ffffffffffffffff166010600082815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515613c37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4f6e6c79426964646572416374696f6e0000000000000000000000000000000081525060200191505060405180910390fd5b8367ffffffffffffffff166010600082815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515613d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f41756374696f6e57696e6e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b601060008667ffffffffffffffff1681526020019081526020016000206008015434601160008867ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540110151515613e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f6d616b654869676865724269640000000000000000000000000000000000000081525060200191505060405180910390fd5b601060008667ffffffffffffffff1681526020019081526020016000206009015434601160008867ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540111151515613f04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6d616b654c6f776572426964000000000000000000000000000000000000000081525060200191505060405180910390fd5b601060008667ffffffffffffffff168152602001908152602001600020600501544210156146fc57601060008667ffffffffffffffff1681526020019081526020016000206009015434601160008867ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540110151561429f576000601060008767ffffffffffffffff168152602001908152602001600020600a0160006101000a81548160ff02191690831515021790555034601160008767ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401601060008767ffffffffffffffff1681526020019081526020016000206003018190555033601060008767ffffffffffffffff16815260200190815260200160002060020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008767ffffffffffffffff16815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008767ffffffffffffffff168152602001908152602001600020600601819055506000601160008767ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600f60008767ffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061422a6141fc8667ffffffffffffffff16611d95565b3387601060008a67ffffffffffffffff168152602001908152602001600020600301546007600a6053614d94565b7f24a0951686f5c12f6a826f0d646142613f80d5ba6d01f5ab30d4aa121d8258d54260405180806020018381526020018281038252600d8152602001807f41756374696f6e20656e646564000000000000000000000000000000000000008152506020019250505060405180910390a16146f7565b34601160008767ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401601160008767ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601260008667ffffffffffffffff1681526020019081526020016000206013908054614387929190615e48565b5060133390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506013601260008767ffffffffffffffff16815260200190815260200160002090805461441b929190615e48565b50601160008667ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008767ffffffffffffffff16815260200190815260200160002060060154116144a357336144e5565b601060008667ffffffffffffffff16815260200190815260200160002060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b601060008767ffffffffffffffff16815260200190815260200160002060070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160008667ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008767ffffffffffffffff168152602001908152602001600020600601541161462457601160008667ffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614646565b601060008667ffffffffffffffff168152602001908152602001600020600601545b601060008767ffffffffffffffff16815260200190815260200160002060060181905550601060008667ffffffffffffffff168152602001908152602001600020600b013390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060019350614709565b614708565b61470585611ea2565b50505b5b505050919050565b606061471c82614bc5565b15156147b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001807f4552433732314d657461646174613a2055524920717565727920666f72206e6f81526020017f6e6578697374656e7420746f6b656e000000000000000000000000000000000081525060400191505060405180910390fd5b600b60008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561485d5780601f106148325761010080835404028352916020019161485d565b820191906000526020600020905b81548152906001019060200180831161484057829003601f168201915b50505050509050919050565b60106020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040154908060050154908060060154908060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600801549080600901549080600a0160009054906101000a900460ff1690508b565b8061493a81611d95565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156149dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f4f6e6c794f776e6572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8160001515600f600083815260200190815260200160002060009054906101000a900460ff161515141515614a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f546f6b656e496e41756374696f6e00000000000000000000000000000000000081525060200191505060405180910390fd5b600d83815481101515614a8857fe5b906000526020600020906005020160040160009054906101000a900460ff1615600d84815481101515614ab757fe5b906000526020600020906005020160040160006101000a81548160ff021916908315150217905550505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b601260205281600052604060002081815481101515614b9357fe5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b6000614c4282614bc5565b1515614cdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657881526020017f697374656e7420746f6b656e000000000000000000000000000000000000000081525060400191505060405180910390fd5b6000614ce783611d95565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480614d5657508373ffffffffffffffffffffffffffffffffffffffff16614d3e846112ce565b73ffffffffffffffffffffffffffffffffffffffff16145b80614d675750614d668185614ae4565b5b91505092915050565b614d7b8383836152d5565b614d8583826155ba565b614d8f828261575e565b505050565b60008773ffffffffffffffffffffffffffffffffffffffff169050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8560ff16606488811515614dfb57fe5b04029081150290604051600060405180830381858888f19350505050158015614e28573d6000803e3d6000fd5b50600d8667ffffffffffffffff16815481101515614e4257fe5b906000526020600020906005020160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8460ff16606488811515614e9d57fe5b04029081150290604051600060405180830381858888f19350505050158015614eca573d6000803e3d6000fd5b508073ffffffffffffffffffffffffffffffffffffffff166108fc8360ff16606488811515614ef557fe5b04029081150290604051600060405180830381858888f19350505050158015614f22573d6000803e3d6000fd5b50614f3888888867ffffffffffffffff1661161e565b6000600d8767ffffffffffffffff16815481101515614f5357fe5b906000526020600020906005020160040160006101000a81548160ff02191690831515021790555084600d8767ffffffffffffffff16815481101515614f9557fe5b9060005260206000209060050201600301819055505050505050505050565b600081600001549050919050565b614fcc8282615825565b614fd6828261575e565b614fdf81615a41565b5050565b614fec82614bc5565b1515615086576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c8152602001807f4552433732314d657461646174613a2055524920736574206f66206e6f6e657881526020017f697374656e7420746f6b656e000000000000000000000000000000000000000081525060400191505060405180910390fd5b80600b600084815260200190815260200160002090805190602001906150ad929190615e9a565b505050565b60006150d38473ffffffffffffffffffffffffffffffffffffffff16615a8d565b15156150e257600190506152cd565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156151d95780820151818401526020810190506151be565b50505050905090810190601f1680156152065780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561522857600080fd5b505af115801561523c573d6000803e3d6000fd5b505050506040513d602081101561525257600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff166152f582611d95565b73ffffffffffffffffffffffffffffffffffffffff161415156153a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001807f4552433732313a207472616e73666572206f6620746f6b656e2074686174206981526020017f73206e6f74206f776e000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515615471576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f4552433732313a207472616e7366657220746f20746865207a65726f2061646481526020017f726573730000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b61547a81615aa0565b6154c1600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020615b60565b615508600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020615b83565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006156126001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050615b9990919063ffffffff16565b90506000600660008481526020019081526020016000205490508181141515615705576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110151561568357fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811015156156dd57fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036157579190615f1a565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156158ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4552433732313a206d696e7420746f20746865207a65726f206164647265737381525060200191505060405180910390fd5b6158d381614bc5565b151515615948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000081525060200191505060405180910390fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506159e1600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020615b83565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515615b5d5760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b615b7860018260000154615b9990919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b6000828211151515615c13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060200191505060405180910390fd5b600082840390508091505092915050565b6101806040519081016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600015158152602001606081525090565b828054828255906000526020600020908101928215615d43579160200282015b82811115615d425782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190615cea565b5b509050615d509190615f46565b5090565b815481835581811115615d7b57818360005260206000209182019101615d7a9190615f89565b5b505050565b60a06040519081016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081526020016000151581525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615e0957805160ff1916838001178555615e37565b82800160010185558215615e37579182015b82811115615e36578251825591602001919060010190615e1b565b5b509050615e449190615f89565b5090565b828054828255906000526020600020908101928215615e895760005260206000209182015b82811115615e88578254825591600101919060010190615e6d565b5b509050615e969190615f46565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615edb57805160ff1916838001178555615f09565b82800160010185558215615f09579182015b82811115615f08578251825591602001919060010190615eed565b5b509050615f169190615f89565b5090565b815481835581811115615f4157818360005260206000209182019101615f409190615f89565b5b505050565b615f8691905b80821115615f8257600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101615f4c565b5090565b90565b615fab91905b80821115615fa7576000816000905550600101615f8f565b5090565b9056fea165627a7a7230582019c4f32cdec15a18ed7d6fcac5df56ce1b2dbb879d431e60cf999e631bb28f970029

Deployed Bytecode Sourcemap

16057:8819:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3537:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3537:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3537:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14898:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14898:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14898:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5368:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5368:204:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5368:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4939:421;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4939:421:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4939:421:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10103:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10103:96:0;;;;;;;;;;;;;;;;;;;;;;;5989:284;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5989:284:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5989:284:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21328:398;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21328:398:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9863:232;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9863:232:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9863:232:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18257:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18257:53:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18257:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6281:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6281:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6281:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16198:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16198:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10205:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10205:199:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10205:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4705:226;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4705:226:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4705:226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22662:908;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22662:908:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;22662:908:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:209;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4488:209:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4488:209:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17025:312;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17025:312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17942:199;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17942:199:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17942:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;17942:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14991:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14991:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;14991:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18802:570;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18802:570:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18802:570:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21740:910;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21740:910:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;21740:910:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16238:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16238:17:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16238:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;16238:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5580:246;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5580:246:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5580:246:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16445:402;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16445:402:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16445:402:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;16445:402:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;16445:402:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;16445:402:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;16445:402:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18154:42;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18154:42:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18154:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6423:268;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6423:268:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;6423:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;6423:268:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6423:268:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;6423:268:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;6423:268:0;;;;;;;;;;;;;;;;;;19459:1856;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19459:1856:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15092:205;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15092:205:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15092:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15092:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18203:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18203:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18203:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16860:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16860:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16860:153:0;;;;;;;;;;;;;;;;;;;;5834:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5834:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5834:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18317:47;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18317:47:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18317:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3537:135;3607:4;3631:20;:33;3652:11;3631:33;;;;;;;;;;;;;;;;;;;;;;;;;;;3624:40;;3537:135;;;:::o;14898:85::-;14937:13;14970:5;14963:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14898:85;:::o;5368:204::-;5427:7;5455:16;5463:7;5455;:16::i;:::-;5447:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5540:15;:24;5556:7;5540:24;;;;;;;;;;;;;;;;;;;;;5533:31;;5368:204;;;:::o;4939:421::-;5003:13;5019:16;5027:7;5019;:16::i;:::-;5003:32;;5060:5;5054:11;;:2;:11;;;;5046:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5138:5;5124:19;;:10;:19;;;:58;;;;5147:35;5164:5;5171:10;5147:16;:35::i;:::-;5124:58;5116:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5306:2;5279:15;:24;5295:7;5279:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;5344:7;5340:2;5324:28;;5333:5;5324:28;;;;;;;;;;;;4939:421;;;:::o;10103:96::-;10147:7;10174:10;:17;;;;10167:24;;10103:96;:::o;5989:284::-;6133:33;6152:4;6158:7;6133:18;:33::i;:::-;6125:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6233:32;6247:4;6253:2;6257:7;6233:13;:32::i;:::-;5989:284;;;:::o;21328:398::-;21445:4;21385;24471:9;:15;24481:4;24471:15;;;;;;;;;;;:29;;;;;;;;;;;;24457:43;;:10;:43;;;;24449:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21405:4;24226:5;24201:30;;:9;:15;24211:4;24201:15;;;;;;;;;;;:21;;;;;;;;;;;;:30;;;24192:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21430:4;24626:9;:15;24636:4;24626:15;;;;;;;;;;;:30;;;;;;;;;;;;24612:44;;:10;:44;;;;24604:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21461:11;21475:4;:10;21480:4;21475:10;;;;;;;;;;;:22;21486:10;21475:22;;;;;;;;;;;;;;;;21461:36;;21526:1;21517:6;:10;21508:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21562:10;:19;;:27;21582:6;21562:27;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21562:27:0;21626:1;21601:4;:10;21606:4;21601:10;;;;;;;;;;;:22;21612:10;21601:22;;;;;;;;;;;;;;;:26;;;;21644:51;21660:10;21672:4;:10;21677:4;21672:10;;;;;;;;;;;:22;21683:10;21672:22;;;;;;;;;;;;;;;;21644:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;21714:4;21707:11;;;24261:1;24532;21328:398;;;;:::o;9863:232::-;9943:7;9979:16;9989:5;9979:9;:16::i;:::-;9971:5;:24;9963:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10061:12;:19;10074:5;10061:19;;;;;;;;;;;;;;;10081:5;10061:26;;;;;;;;;;;;;;;;;;10054:33;;9863:232;;;;:::o;18257:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6281:134::-;6368:39;6385:4;6391:2;6395:7;6368:39;;;;;;;;;;;;;:16;:39::i;:::-;6281:134;;;:::o;16198:30::-;;;;;;;;;;;;;:::o;10205:199::-;10263:7;10299:13;:11;:13::i;:::-;10291:5;:21;10283:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10379:10;10390:5;10379:17;;;;;;;;;;;;;;;;;;10372:24;;10205:199;;;:::o;4705:226::-;4760:7;4780:13;4796:11;:20;4808:7;4796:20;;;;;;;;;;;;;;;;;;;;;4780:36;;4852:1;4835:19;;:5;:19;;;;4827:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4918:5;4911:12;;;4705:226;;;:::o;22662:908::-;22747:4;22753:13;22732:4;23995:140;;24070:9;:15;24080:4;24070:15;;;;;;;;;;;:27;;;24052:15;:45;24043:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22810:4;22788:26;;:12;:18;22801:4;22788:18;;;;;;;;;;;;;;;;;;;;;;;:26;;;22780:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22883:5;22859:9;:15;22869:4;22859:15;;;;;;;;;;;;;:21;;;:29;;;;;;;;;;;;;;;;;;22920:5;22899:12;:18;22912:4;22899:18;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;22971:9;:15;22981:4;22971:15;;;;;;;;;;;;;:26;;;22937:9;:15;22947:4;22937:15;;;;;;;;;;;;;:31;;:60;;;;23041:9;:15;23051:4;23041:15;;;;;;;;;;;;;:29;;;;;;;;;;;;23008:9;:15;23018:4;23008:15;;;;;;;;;;;;;:30;;;:62;;;;;;;;;;;;;;;;;;23121:1;23081:9;:15;23091:4;23081:15;;;;;;;;;;;;;:29;;;:42;;;;;;;;;;;;;;;;;;23163:1;23134:9;:15;23144:4;23134:15;;;;;;;;;;;;;:26;;:30;;;;23221:1;23176:4;:10;23181:4;23176:10;;;;;;;;;;;;;:42;23187:9;:15;23197:4;23187:15;;;;;;;;;;;;;:30;;;;;;;;;;;;23176:42;;;;;;;;;;;;;;;:46;;;;23233:10;:19;;:30;23253:9;23233:30;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23233:30:0;23356:104;23367:13;23375:4;23367:13;;:7;:13::i;:::-;23382:9;:15;23392:4;23382:15;;;;;;;;;;;;;:30;;;;;;;;;;;;23414:4;23420:9;:15;23430:4;23420:15;;;;;;;;;;;;;:31;;;23452:1;23454:2;23457;23356:10;:104::i;:::-;23476:44;23504:15;23476:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23540:4;23532:30;;;;;;;;;;;;;;;;;;;;;;22662:908;;;;:::o;4488:209::-;4543:7;4588:1;4571:19;;:5;:19;;;;4563:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4655:34;:17;:24;4673:5;4655:24;;;;;;;;;;;;;;;:32;:34::i;:::-;4648:41;;4488:209;;;:::o;17025:312::-;17118:4;23709:121;;23785:5;23763:27;;:12;:18;23776:4;23763:18;;;;;;;;;;;;;;;;;;;;;:27;;;23755:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17162:4;17142:24;;:3;17146:4;17142:9;;;;;;;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;:24;;;17134:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17231:9;17206:3;17210:4;17206:9;;;;;;;;;;;;;;;;;;;;;;:21;;;:34;;17198:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17269;17280:13;17288:4;17280:13;;:7;:13::i;:::-;17295:10;17307:4;17313:9;17323:1;17325;17327;17269:10;:60::i;:::-;17025:312;;;;;:::o;17942:199::-;18045:13;18010:4;24346:13;24354:4;24346:7;:13::i;:::-;24332:27;;:10;:27;;;24324:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18031:4;23785:5;23763:27;;:12;:18;23776:4;23763:18;;;;;;;;;;;;;;;;;;;;;:27;;;23755:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18094:6;18070:3;18074:4;18070:9;;;;;;;;;;;;;;;;;;;;:21;;:30;;;;18111:21;;;;;;;;;;;;;;;;;;;;24384:1;17942:199;;;;;:::o;14991:89::-;15032:13;15065:7;15058:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14991:89;:::o;18802:570::-;18896:4;24346:13;24354:4;24346:7;:13::i;:::-;24332:27;;:10;:27;;;24324:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18917:4;23785:5;23763:27;;:12;:18;23776:4;23763:18;;;;;;;;;;;;;;;;;;;;;:27;;;23755:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18969:5;18949:25;;:3;18953:4;18949:9;;;;;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;:25;;;18941:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19001:33;19045:28;;:::i;:::-;19076:133;;;;;;;;;19089:4;19076:133;;;;19094:13;19102:4;19094:7;:13::i;:::-;19076:133;;;;;;19116:1;19076:133;;;;;;19119:1;19076:133;;;;19122:3;19076:133;;;;19145:9;19132:12;:22;19127:3;:27;19076:133;;;;19156:1;19076:133;;;;19166:1;19076:133;;;;;;19169:7;19076:133;;;;19177:7;19076:133;;;;19186:4;19076:133;;;;;;19192:16;19076:133;;;19045:164;;19238:8;19220:9;:15;19230:4;19220:15;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;19279:4;19258:12;:18;19271:4;19258:18;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;19324:1;19295:13;:19;19309:4;19295:19;;;;;;;;;;;:30;;;;;:::i;:::-;;19336:28;19352:4;19359;19336:7;:28::i;:::-;23821:1;;24384;18802:570;;;;;:::o;21740:910::-;21815:4;21821:13;21800:4;24282:111;;24346:13;24354:4;24346:7;:13::i;:::-;24332:27;;:10;:27;;;24324:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21878:4;21856:26;;:12;:18;21869:4;21856:18;;;;;;;;;;;;;;;;;;;;;;;:26;;;21848:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21940:5;21920:25;;:3;21924:4;21920:9;;;;;;;;;;;;;;;;;;;;;;:16;;;;;;;;;;;;:25;;;21912:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21996:5;21972:9;:15;21982:4;21972:15;;;;;;;;;;;;;:21;;;:29;;;;;;;;;;;;;;;;;;22033:5;22012:12;:18;22025:4;22012:18;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;22094:1;22053:43;;:9;:15;22063:4;22053:15;;;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;22050:81;;;22107:4;22099:30;;;;;;;;;;;;;;;;;;;;;;;;22050:81;22175:9;:15;22185:4;22175:15;;;;;;;;;;;;;:26;;;22141:9;:15;22151:4;22141:15;;;;;;;;;;;;;:31;;:60;;;;22245:9;:15;22255:4;22245:15;;;;;;;;;;;;;:29;;;;;;;;;;;;22212:9;:15;22222:4;22212:15;;;;;;;;;;;;;:30;;;:62;;;;;;;;;;;;;;;;;;22325:1;22285:9;:15;22295:4;22285:15;;;;;;;;;;;;;:29;;;:42;;;;;;;;;;;;;;;;;;22367:1;22338:9;:15;22348:4;22338:15;;;;;;;;;;;;;:26;;:30;;;;22424:1;22379:4;:10;22384:4;22379:10;;;;;;;;;;;;;:42;22390:9;:15;22400:4;22390:15;;;;;;;;;;;;;:30;;;;;;;;;;;;22379:42;;;;;;;;;;;;;;;:46;;;;22436:104;22447:13;22455:4;22447:13;;:7;:13::i;:::-;22462:9;:15;22472:4;22462:15;;;;;;;;;;;;;:30;;;;;;;;;;;;22494:4;22500:9;:15;22510:4;22500:15;;;;;;;;;;;;;:31;;;22532:1;22534:2;22537;22436:10;:104::i;:::-;22556:44;22584:15;22556:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22620:4;22612:30;;;;;;;;;;;;;;;;;;;;;;24384:1;21740:910;;;;:::o;16238:17::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5580:246::-;5666:10;5660:16;;:2;:16;;;;5652:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5754:8;5717:18;:30;5736:10;5717:30;;;;;;;;;;;;;;;:34;5748:2;5717:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;5805:2;5778:40;;5793:10;5778:40;;;5809:8;5778:40;;;;;;;;;;;;;;;;;;;;;;5580:246;;:::o;16445:402::-;16539:10;16550:3;16539:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16539:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16538:16;16530:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16583:19;;:::i;:::-;16605:51;;;;;;;;;16610:3;16605:51;;;;16614:10;16605:51;;;;;;16625:3;:10;;;;16605:51;;;;16636:11;16605:51;;;;;;16648:7;16605:51;;;;;16583:73;;16667:8;16678:3;16687:7;16678:17;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;16678:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16667:28;;16706:24;16712:10;16728:1;16724:3;:5;16706;:24::i;:::-;16741:25;16759:1;16755:3;:5;16762:3;16741:12;:25::i;:::-;16795:4;16777:10;16788:3;16777:15;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;16777:15:0;;;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;16810:29;16826:4;16837:1;16833:3;:5;16810:7;:29::i;:::-;16445:402;;;;;:::o;18154:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;6423:268::-;6530:31;6543:4;6549:2;6553:7;6530:12;:31::i;:::-;6580:48;6603:4;6609:2;6613:7;6622:5;6580:22;:48::i;:::-;6572:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6423:268;;;;:::o;19459:1856::-;19570:4;19511;23583:119;;23656:4;23634:26;;:12;:18;23647:4;23634:18;;;;;;;;;;;;;;;;;;;;;:26;;;23625:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19530:4;24405:136;;24471:9;:15;24481:4;24471:15;;;;;;;;;;;:29;;;;;;;;;;;;24457:43;;:10;:43;;;;24449:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19555:4;24554:140;;24626:9;:15;24636:4;24626:15;;;;;;;;;;;:30;;;;;;;;;;;;24612:44;;:10;:44;;;;24604:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19634:9;:15;19644:4;19634:15;;;;;;;;;;;;;:26;;;19620:9;19595:4;:10;19600:4;19595:10;;;;;;;;;;;;;:22;19606:10;19595:22;;;;;;;;;;;;;;;;:34;:65;;19587:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19736:9;:15;19746:4;19736:15;;;;;;;;;;;;;:26;;;19722:9;19697:4;:10;19702:4;19697:10;;;;;;;;;;;;;:22;19708:10;19697:22;;;;;;;;;;;;;;;;:34;:65;;19689:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19811:9;:15;19821:4;19811:15;;;;;;;;;;;;;:27;;;19793:15;:45;19790:1518;;;19895:9;:15;19905:4;19895:15;;;;;;;;;;;;;:26;;;19882:9;19857:4;:10;19862:4;19857:10;;;;;;;;;;;;;:22;19868:10;19857:22;;;;;;;;;;;;;;;;:34;:64;;19854:1388;;;20009:5;19985:9;:15;19995:4;19985:15;;;;;;;;;;;;;:21;;;:29;;;;;;;;;;;;;;;;;;20092:9;20067:4;:10;20072:4;20067:10;;;;;;;;;;;;;:22;20078:10;20067:22;;;;;;;;;;;;;;;;:34;20033:9;:15;20043:4;20033:15;;;;;;;;;;;;;:31;;:68;;;;20153:10;20120:9;:15;20130:4;20120:15;;;;;;;;;;;;;:30;;;:43;;;;;;;;;;;;;;;;;;20222:1;20182:9;:15;20192:4;20182:15;;;;;;;;;;;;;:29;;;:42;;;;;;;;;;;;;;;;;;20272:1;20243:9;:15;20253:4;20243:15;;;;;;;;;;;;;:26;;:30;;;;20317:1;20292:4;:10;20297:4;20292:10;;;;;;;;;;;;;:22;20303:10;20292:22;;;;;;;;;;;;;;;:26;;;;20358:5;20337:12;:18;20350:4;20337:18;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;20383:84;20394:13;20402:4;20394:13;;:7;:13::i;:::-;20409:10;20421:4;20427:9;:15;20437:4;20427:15;;;;;;;;;;;;;:31;;;20459:1;20461:2;20464;20383:10;:84::i;:::-;20491:44;20519:15;20491:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19854:1388;;;20675:9;20650:4;:10;20655:4;20650:10;;;;;;;;;;;;;:22;20661:10;20650:22;;;;;;;;;;;;;;;;:34;20625:4;:10;20630:4;20625:10;;;;;;;;;;;;;:22;20636:10;20625:22;;;;;;;;;;;;;;;:59;;;;20717:13;:19;20731:4;20717:19;;;;;;;;;;;;;20703:11;:33;;;;;;;;:::i;:::-;;20755:11;20772:10;20755:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;20755:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20824:11;20802:13;:19;20816:4;20802:19;;;;;;;;;;;;;:33;;;;;;;;:::i;:::-;;20915:4;:10;20920:4;20915:10;;;;;;;;;;;;;:22;20926:10;20915:22;;;;;;;;;;;;;;;;20886:9;:15;20896:4;20886:15;;;;;;;;;;;;;:26;;;:51;:97;;20973:10;20886:97;;;20941:9;:15;20951:4;20941:15;;;;;;;;;;;;;:29;;;;;;;;;;;;20886:97;20854:9;:15;20864:4;20854:15;;;;;;;;;;;;;:29;;;:129;;;;;;;;;;;;;;;;;;21061:4;:10;21066:4;21061:10;;;;;;;;;;;;;:22;21072:10;21061:22;;;;;;;;;;;;;;;;21032:9;:15;21042:4;21032:15;;;;;;;;;;;;;:26;;;:51;:105;;21115:4;:10;21120:4;21115:10;;;;;;;;;;;;;:22;21126:10;21115:22;;;;;;;;;;;;;;;;21032:105;;;21086:9;:15;21096:4;21086:15;;;;;;;;;;;;;:26;;;21032:105;21002:9;:15;21012:4;21002:15;;;;;;;;;;;;;:26;;:135;;;;21156:9;:15;21166:4;21156:15;;;;;;;;;;;;;:23;;21185:10;21156:40;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;21156:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21222:4;21215:11;;;;19854:1388;19790:1518;;;21274:22;21291:4;21274:16;:22::i;:::-;;;19790:1518;24685:1;24532;23693;19459:1856;;;;:::o;15092:205::-;15150:13;15184:16;15192:7;15184;:16::i;:::-;15176:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15270:10;:19;15281:7;15270:19;;;;;;;;;;;15263:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15092:205;;;:::o;18203:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16860:153::-;16915:8;24346:13;24354:4;24346:7;:13::i;:::-;24332:27;;:10;:27;;;24324:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16940:8;23785:5;23763:27;;:12;:18;23776:4;23763:18;;;;;;;;;;;;;;;;;;;;;:27;;;23755:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16985:3;16989:8;16985:13;;;;;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;16984:21;16961:3;16965:8;16961:13;;;;;;;;;;;;;;;;;;;;:20;;;:44;;;;;;;;;;;;;;;;;;24384:1;16860:153;;:::o;5834:147::-;5914:4;5938:18;:25;5957:5;5938:25;;;;;;;;;;;;;;;:35;5964:8;5938:35;;;;;;;;;;;;;;;;;;;;;;;;;5931:42;;5834:147;;;;:::o;18317:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6699:155::-;6756:4;6773:13;6789:11;:20;6801:7;6789:20;;;;;;;;;;;;;;;;;;;;;6773:36;;6844:1;6827:19;;:5;:19;;;;6820:26;;;6699:155;;;:::o;6862:333::-;6947:4;6972:16;6980:7;6972;:16::i;:::-;6964:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7048:13;7064:16;7072:7;7064;:16::i;:::-;7048:32;;7110:5;7099:16;;:7;:16;;;:51;;;;7143:7;7119:31;;:20;7131:7;7119:11;:20::i;:::-;:31;;;7099:51;:87;;;;7154:32;7171:5;7178:7;7154:16;:32::i;:::-;7099:87;7091:96;;;6862:333;;;;:::o;10410:245::-;10496:38;10516:4;10522:2;10526:7;10496:19;:38::i;:::-;10547:47;10580:4;10586:7;10547:32;:47::i;:::-;10607:40;10635:2;10639:7;10607:27;:40::i;:::-;10410:245;;;:::o;17350:579::-;17471:24;17515:5;17507:14;;17471:51;;17533:7;;;;;;;;;;;:16;;:43;17571:1;17553:19;;17564:3;17554:7;:13;;;;;;;;17553:19;17533:43;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17533:43:0;17623:3;17627:4;17623:9;;;;;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;17622:28;;:55;17672:1;17654:19;;17665:3;17655:7;:13;;;;;;;;17654:19;17622:55;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17622:55:0;17725:8;17724:19;;:46;17765:1;17747:19;;17758:3;17748:7;:13;;;;;;;;17747:19;17724:46;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17724:46:0;17815:29;17828:5;17835:2;17839:4;17815:29;;:12;:29::i;:::-;17874:5;17855:3;17859:4;17855:9;;;;;;;;;;;;;;;;;;;;;;:16;;;:24;;;;;;;;;;;;;;;;;;17914:7;17890:3;17894:4;17890:9;;;;;;;;;;;;;;;;;;;;;;:21;;:31;;;;17350:579;;;;;;;;:::o;2975:114::-;3040:7;3067;:14;;;3060:21;;2975:114;;;:::o;10663:202::-;10727:24;10739:2;10743:7;10727:11;:24::i;:::-;10764:40;10792:2;10796:7;10764:27;:40::i;:::-;10817;10849:7;10817:31;:40::i;:::-;10663:202;;:::o;15305:195::-;15391:16;15399:7;15391;:16::i;:::-;15383:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15489:3;15467:10;:19;15478:7;15467:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;15305:195;;:::o;8438:342::-;8551:4;8573:15;:2;:13;;;:15::i;:::-;8572:16;8568:60;;;8612:4;8605:11;;;;8568:60;8640:13;8672:2;8656:36;;;8693:10;8705:4;8711:7;8720:5;8656:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8656:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8656:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8656:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8656:70:0;;;;;;;;;;;;;;;;8640:86;;4099:10;8755:16;;8745:26;;;:6;:26;;;;8737:35;;;8438:342;;;;;;;:::o;7971:459::-;8085:4;8065:24;;:16;8073:7;8065;:16::i;:::-;:24;;;8057:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8168:1;8154:16;;:2;:16;;;;8146:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8224:23;8239:7;8224:14;:23::i;:::-;8260:35;:17;:23;8278:4;8260:23;;;;;;;;;;;;;;;:33;:35::i;:::-;8306:33;:17;:21;8324:2;8306:21;;;;;;;;;;;;;;;:31;:33::i;:::-;8375:2;8352:11;:20;8364:7;8352:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;8414:7;8410:2;8395:27;;8404:4;8395:27;;;;;;;;;;;;7971:459;;;:::o;11753:1148::-;12019:22;12044:32;12074:1;12044:12;:18;12057:4;12044:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;12019:57;;12087:18;12108:17;:26;12126:7;12108:26;;;;;;;;;;;;12087:47;;12255:14;12241:10;:28;;12237:328;;;12286:19;12308:12;:18;12321:4;12308:18;;;;;;;;;;;;;;;12327:14;12308:34;;;;;;;;;;;;;;;;;;12286:56;;12392:11;12359:12;:18;12372:4;12359:18;;;;;;;;;;;;;;;12378:10;12359:30;;;;;;;;;;;;;;;;;:44;;;;12509:10;12476:17;:30;12494:11;12476:30;;;;;;;;;;;:43;;;;12237:328;;12654:12;:18;12667:4;12654:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;11753:1148;;;;:::o;11387:186::-;11501:12;:16;11514:2;11501:16;;;;;;;;;;;;;;;:23;;;;11472:17;:26;11490:7;11472:26;;;;;;;;;;;:52;;;;11535:12;:16;11548:2;11535:16;;;;;;;;;;;;;;;11557:7;11535:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11535:30:0;;;;;;;;;;;;;;;;;;;;;;11387:186;;:::o;7203:335::-;7289:1;7275:16;;:2;:16;;;;7267:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7348:16;7356:7;7348;:16::i;:::-;7347:17;7339:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7433:2;7410:11;:20;7422:7;7410:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;7446:33;:17;:21;7464:2;7446:21;;;;;;;;;;;;;;;:31;:33::i;:::-;7522:7;7518:2;7497:33;;7514:1;7497:33;;;;;;;;;;;;7203:335;;:::o;11581:164::-;11685:10;:17;;;;11658:15;:24;11674:7;11658:24;;;;;;;;;;;:44;;;;11713:10;11729:7;11713:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;11713:24:0;;;;;;;;;;;;;;;;;;;;;;11581:164;:::o;2636:176::-;2696:4;2715:12;2769:7;2757:20;2749:28;;2803:1;2796:4;:8;2789:15;;;2636:176;;;:::o;8788:175::-;8888:1;8852:38;;:15;:24;8868:7;8852:24;;;;;;;;;;;;;;;;;;;;;:38;;;;8848:108;;;8942:1;8907:15;:24;8923:7;8907:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;8848:108;8788:175;:::o;3196:110::-;3277:21;3296:1;3277:7;:14;;;:18;;:21;;;;:::i;:::-;3260:7;:14;;:38;;;;3196:110;:::o;3097:91::-;3179:1;3161:7;:14;;;:19;;;;;;;;;;;3097:91;:::o;1632:182::-;1690:7;1723:1;1718;:6;;1710:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1770:9;1786:1;1782;:5;1770:17;;1805:1;1798:8;;;1632:182;;;;:::o;16057:8819::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://19c4f32cdec15a18ed7d6fcac5df56ce1b2dbb879d431e60cf999e631bb28f97

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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