ETH Price: $2,436.35 (-0.41%)

Contract

0xC00d444eeD049ad0d858a4A8D6Cac5417054405D
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00
Transaction Hash
Method
Block
From
To
Set Approval For...202555412024-07-07 15:30:3592 days ago1720366235IN
0xC00d444e...17054405D
0 ETH0.000054422.24091796
Set Approval For...199431832024-05-25 0:01:23135 days ago1716595283IN
0xC00d444e...17054405D
0 ETH0.000214454.64337256
Set Approval For...197182042024-04-23 12:50:35167 days ago1713876635IN
0xC00d444e...17054405D
0 ETH0.000319813.16901166
Set Approval For...194504232024-03-16 22:29:11204 days ago1710628151IN
0xC00d444e...17054405D
0 ETH0.0007453230.70586388
Set Approval For...193058002024-02-25 16:29:59225 days ago1708878599IN
0xC00d444e...17054405D
0 ETH0.000859535.39257506
Set Approval For...189106492024-01-01 5:55:35280 days ago1704088535IN
0xC00d444e...17054405D
0 ETH0.000457019.91066164
Set Approval For...189079542023-12-31 20:51:23280 days ago1704055883IN
0xC00d444e...17054405D
0 ETH0.0007486916.2108091
Set Approval For...189072512023-12-31 18:29:35281 days ago1704047375IN
0xC00d444e...17054405D
0 ETH0.0006806614.73783085
Set Approval For...187458462023-12-09 2:58:11303 days ago1702090691IN
0xC00d444e...17054405D
0 ETH0.0010019241.25709916
Set Approval For...187207072023-12-05 14:22:35307 days ago1701786155IN
0xC00d444e...17054405D
0 ETH0.0017605872.49674609
Set Approval For...185680502023-11-14 5:27:59328 days ago1699939679IN
0xC00d444e...17054405D
0 ETH0.0011526224.95660072
Set Approval For...183517222023-10-14 22:52:23358 days ago1697323943IN
0xC00d444e...17054405D
0 ETH0.000121715.01203653
Set Approval For...183517202023-10-14 22:51:59358 days ago1697323919IN
0xC00d444e...17054405D
0 ETH0.000137055.64375683
Set Approval For...182899152023-10-06 7:16:59367 days ago1696576619IN
0xC00d444e...17054405D
0 ETH0.000245715.32860462
Set Approval For...182555142023-10-01 11:52:59372 days ago1696161179IN
0xC00d444e...17054405D
0 ETH0.000163316.72478389
Set Approval For...179664482023-08-21 23:41:47412 days ago1692661307IN
0xC00d444e...17054405D
0 ETH0.0007796316.87633523
Set Approval For...179664452023-08-21 23:41:11412 days ago1692661271IN
0xC00d444e...17054405D
0 ETH0.0008213617.77955819
Set Approval For...179572082023-08-20 16:40:23414 days ago1692549623IN
0xC00d444e...17054405D
0 ETH0.0010515822.8044987
Set Approval For...179211722023-08-15 15:36:11419 days ago1692113771IN
0xC00d444e...17054405D
0 ETH0.0007952632.74699992
Set Approval For...177959642023-07-29 3:18:11436 days ago1690600691IN
0xC00d444e...17054405D
0 ETH0.0003517614.48488134
Set Approval For...176127482023-07-03 10:08:23462 days ago1688378903IN
0xC00d444e...17054405D
0 ETH0.0011139124.15630495
Set Approval For...176088422023-07-02 20:57:11462 days ago1688331431IN
0xC00d444e...17054405D
0 ETH0.0003263813.43983523
Approve175409802023-06-23 8:07:11472 days ago1687507631IN
0xC00d444e...17054405D
0 ETH0.0006490913.29450934
Set Approval For...175238292023-06-20 22:19:47474 days ago1687299587IN
0xC00d444e...17054405D
0 ETH0.0006538114.17844175
Transfer From175077912023-06-18 16:16:35477 days ago1687104995IN
0xC00d444e...17054405D
0 ETH0.0018057315.16520155
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
133385502021-10-02 7:37:081101 days ago1633160228
0xC00d444e...17054405D
0.005 ETH
133316632021-10-01 5:52:211102 days ago1633067541
0xC00d444e...17054405D
0.005 ETH
133315942021-10-01 5:35:561102 days ago1633066556
0xC00d444e...17054405D
0.005 ETH
133315832021-10-01 5:33:331102 days ago1633066413
0xC00d444e...17054405D
0.005 ETH
133312012021-10-01 4:07:131102 days ago1633061233
0xC00d444e...17054405D
0.005 ETH
133253952021-09-30 6:03:551103 days ago1632981835
0xC00d444e...17054405D
0.005 ETH
133205302021-09-29 11:59:561104 days ago1632916796
0xC00d444e...17054405D
0.005 ETH
133203562021-09-29 11:22:231104 days ago1632914543
0xC00d444e...17054405D
0.005 ETH
133203372021-09-29 11:17:401104 days ago1632914260
0xC00d444e...17054405D
0.005 ETH
133143662021-09-28 12:54:261105 days ago1632833666
0xC00d444e...17054405D
0.005 ETH
133082182021-09-27 14:07:491106 days ago1632751669
0xC00d444e...17054405D
0.005 ETH
133032552021-09-26 19:13:201106 days ago1632683600
0xC00d444e...17054405D
0.005 ETH
133028242021-09-26 17:45:141107 days ago1632678314
0xC00d444e...17054405D
0.005 ETH
133025662021-09-26 16:51:111107 days ago1632675071
0xC00d444e...17054405D
0.005 ETH
133023102021-09-26 15:52:431107 days ago1632671563
0xC00d444e...17054405D
0.005 ETH
133022952021-09-26 15:49:201107 days ago1632671360
0xC00d444e...17054405D
0.005 ETH
133022892021-09-26 15:47:431107 days ago1632671263
0xC00d444e...17054405D
0.005 ETH
133022792021-09-26 15:44:551107 days ago1632671095
0xC00d444e...17054405D
0.005 ETH
133022642021-09-26 15:42:441107 days ago1632670964
0xC00d444e...17054405D
0.005 ETH
133019452021-09-26 14:38:061107 days ago1632667086
0xC00d444e...17054405D
0.005 ETH
133010762021-09-26 11:18:421107 days ago1632655122
0xC00d444e...17054405D
0.005 ETH
133010732021-09-26 11:17:351107 days ago1632655055
0xC00d444e...17054405D
0.005 ETH
133010642021-09-26 11:15:231107 days ago1632654923
0xC00d444e...17054405D
0.005 ETH
133010552021-09-26 11:13:201107 days ago1632654800
0xC00d444e...17054405D
0.005 ETH
133010472021-09-26 11:11:511107 days ago1632654711
0xC00d444e...17054405D
0.005 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ArtStars

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

library Address {
  
    function isContract(address account) internal view returns (bool) {
       
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }

}
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b);
        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        // uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return a / b;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
        c = a + b;
        require(c >= a);
        return c;
    }
}


interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

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

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    event Mint(uint indexed index, address indexed minter);
    event Deposit(address indexed account, uint indexed amount);
    event Withdraw(address indexed account, uint indexed amount);
    event NewBid(address indexed bidder, uint indexed amount, uint indexed tokenId);
    event Trade(address indexed seller, address indexed buyer, uint indexed tokenId,uint amount);
    event SellNft(address indexed owner,uint indexed tokenId,uint indexed minPrice);
    event CancelSellNft(address indexed owner,uint indexed tokenId);
    event SaleIsStarted();

    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

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

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

}

abstract contract ERC165 is IERC165 {
       function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping (address => bool) members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId
            || super.supportsInterface(interfaceId);
    }

    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    function grantRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    function revokeRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

contract ERC721 is  Context, ERC165, AccessControl, IERC721, IERC721Metadata {
    using Address for address;
    using SafeMath for uint256;

    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
    bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");

    string private _name;
    string private _symbol;
    string internal baseURI;
    uint internal price = 5 * 10 ** 15;
    uint256 internal tokensSold = 0;
    bool public _startSale = false;

    uint256 constant MAX_SUPPLY = 10000;
    address public royalty;


    mapping (uint => ForSale) public nftForSale;
    mapping (uint256 => address) private _owners;
    mapping (address => uint256) private _balances;
    mapping (uint256 => address) private _tokenApprovals;
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    mapping (uint256 => string) private _tokenURIs;
    mapping (address => uint256[]) public tokensPerOwner;
    mapping(address => uint256[]) internal ownerToIds;
    mapping(uint256 => uint256) internal idToOwnerIndex;
   
    struct ForSale {
        uint nft_uid;
        address owner;
        address bidder;
        uint minValue;
        uint highestBid;
    }
   
    constructor (string memory name_, string memory symbol_,string memory baseURI_,address _royalty) {
        _name = name_;
        _symbol = symbol_;
        baseURI = baseURI_;
        royalty = _royalty;
    }
    

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165, AccessControl) returns (bool) {
        return interfaceId == type(IERC721).interfaceId
            || interfaceId == type(IERC721Metadata).interfaceId
            || super.supportsInterface(interfaceId);
    }

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

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

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }


    function totalSupply() public view returns (uint256) {
        return tokensSold;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return string(abi.encodePacked(_baseURI(), toString(tokenId)));
    }

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


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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

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

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

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
        _mint(to, tokenId);
        require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function toString(uint256 value) internal pure returns (string memory) {
           
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }


    function _addNFToken(address _to, uint256 _tokenId) internal {
        require(_owners[_tokenId] == address(0), "Cannot add, already owned.");
        _owners[_tokenId] = _to;

        ownerToIds[_to].push(_tokenId);
        idToOwnerIndex[_tokenId] = ownerToIds[_to].length.sub(1);
    }

    function _removeNFToken(address _from, uint256 _tokenId) internal {
        require(_owners[_tokenId] == _from, "Incorrect owner.");
        delete _owners[_tokenId];
        delete nftForSale[_tokenId];
        uint256 tokenToRemoveIndex = idToOwnerIndex[_tokenId];
        uint256 lastTokenIndex = ownerToIds[_from].length.sub(1);

        if (lastTokenIndex != tokenToRemoveIndex) {
            uint256 lastToken = ownerToIds[_from][lastTokenIndex];
            ownerToIds[_from][tokenToRemoveIndex] = lastToken;
            idToOwnerIndex[lastToken] = tokenToRemoveIndex;
        }

        ownerToIds[_from].pop();
        emit CancelSellNft(_msgSender(),_tokenId);
    }

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

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        tokensSold += 1;
        tokensPerOwner[to].push(tokenId);
        _addNFToken(to, tokenId);
        emit Mint(tokenId, to);
        emit Transfer(address(0), to, tokenId);
    }

    function devMint(uint count, address recipient) external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(tokensSold+count <=10000, "The tokens limit has reached.");
        for (uint i = 0; i < count; i++) {
            uint256 _tokenId = tokensSold + 1;
            _mint(recipient, _tokenId);
        }
    }


    
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];
        tokensPerOwner[owner].push(tokenId);
        emit Transfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);
        
        _removeNFToken(from, tokenId);
        _addNFToken(to, tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        
        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}

contract ArtStars is ERC721  {
    using SafeMath for uint256;

    bool private lock = false;
    bool public contractPaused;
    uint256 constant CONTRACT_ROYALTY = 2;//Contract royalty in percent
    
    mapping (address => uint256) public ethBalance;



    constructor() ERC721("Art Stars", "ARTSTR", " https://unencrypted.digital/json/" ,address(0x4204BfFf4752E288f886F8FB06CEecb4c813929f)) {

        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setupRole(ADMIN_ROLE, _msgSender());
        _setupRole(MINTER_ROLE, _msgSender());
    }
    modifier nonReentrant {
        require(!lock, "ReentrancyGuard: reentrant call");
        lock = true;
        _;
        lock = false;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function pauseContract(bool _paused) external  {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to pause the contract");
        contractPaused = _paused;
    }

    function setBaseURI(string memory newURI) public returns (bool) {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        baseURI = newURI;
        return true;

    }

    function changeRoyaltyAddr(address _newRoyaltyAddr) public returns(bool){
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change royalty address");
        royalty = _newRoyaltyAddr;
        return true;
    }


    function getTokensByOwner(address _owner) public view returns (uint256[] memory){
        return ownerToIds[_owner];
    }

    function toSellNFT(uint tokenId, uint minPrice) public returns (bool){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved");
        nftForSale[tokenId] =ForSale(tokenId,_msgSender(),address(0),minPrice,0);
        emit SellNft(_msgSender(),tokenId,minPrice);
        return true;
    }

    function toCancelSaleOfNFT(uint tokenId) public returns (bool){
        require(_isApprovedOrOwner(_msgSender(), tokenId), "The seller is not owner or approved");
        delete nftForSale[tokenId];
        emit CancelSellNft(_msgSender(),tokenId);
        return true;
    }


    function toMakeBid(uint tokenId) public payable nonReentrant returns(bool){
        require(_exists(tokenId), "The token is nonexistent");
        ForSale memory order = nftForSale[tokenId];
        require(order.owner != address(0),"The token is not for sale");
        require(!_isApprovedOrOwner(_msgSender(), tokenId), "The owner can't make bid");
        if (order.bidder == _msgSender()){
            require(msg.value > 0,"Insufficient funds to make bid");
            order.highestBid = order.highestBid.add(msg.value);
        } else{
            require(msg.value >= order.minValue && msg.value > order.highestBid, "Insufficient funds to make bid");
            order.highestBid = msg.value;
            order.bidder = _msgSender();
        }
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value);
        nftForSale[tokenId] = order;
        emit Deposit(_msgSender(),msg.value);
        emit NewBid(_msgSender(),order.highestBid,tokenId);
        return true;
    }

    function toAcceptBid(uint tokenId) public nonReentrant returns(bool){
        require(!contractPaused);
        require(_exists(tokenId), "The token is nonexistent");
        ForSale memory order = nftForSale[tokenId];
        require(order.owner != address(0),"The token is not for sale");
        require(_isApprovedOrOwner(_msgSender(), tokenId), "Only owner or approved can accept the bid");
        require(ethBalance[order.bidder] >= order.highestBid,"Insufficient funds of the bidder balance");
        delete nftForSale[tokenId];
        uint256 total_royalty = order.highestBid / 100 * CONTRACT_ROYALTY;
        ethBalance[order.bidder] = ethBalance[order.bidder].sub(order.highestBid);
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(order.highestBid);
        ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(total_royalty);
        (bool success, ) = royalty.call{value:total_royalty}("");
        require(success);
        _transfer(order.owner,order.bidder,tokenId);
        emit CancelSellNft(_msgSender(),tokenId);
        emit Trade(_msgSender(),order.bidder,order.highestBid,tokenId);
        emit Transfer(order.owner,order.bidder,tokenId);
        return true;
    }

    function startSale() external {
        require(hasRole(MINTER_ROLE, _msgSender()), "You must have minter role to change baseURI");
        require(!_startSale);
        _startSale = true;
        emit SaleIsStarted();
    }



    function buyNFT()external payable nonReentrant returns(bool, uint){
        require(!contractPaused);
        require(_startSale, "The sale hasn't started.");
        require(tokensSold+1 <=10000, "The tokens limit has reached.");
        require(msg.value >= price, "Insufficient funds to purchase.");
        (bool success, ) = royalty.call{value:msg.value}("");
        require(success);
        uint _tokenId = tokensSold + 1;
        _mint(_msgSender(), _tokenId);        
        return (true,_tokenId);
    }

    function withdraw(uint amount) external nonReentrant {
        require(!contractPaused);
        require(amount <= ethBalance[_msgSender()],"Insufficient funds to withdraw.");
        ethBalance[_msgSender()] = ethBalance[_msgSender()].sub(amount);
        (bool success, ) = msg.sender.call{value:amount}("");
        require(success);
        emit Withdraw(_msgSender(), amount);
    }

    function deposit() external payable {
        ethBalance[_msgSender()] = ethBalance[_msgSender()].add(msg.value);
        emit Deposit(_msgSender(), msg.value);
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CancelSellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":true,"internalType":"address","name":"minter","type":"address"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bidder","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NewBid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[],"name":"SaleIsStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"SellNft","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"seller","type":"address"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyNFT","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRoyaltyAddr","type":"address"}],"name":"changeRoyaltyAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getTokensByOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nftForSale","outputs":[{"internalType":"uint256","name":"nft_uid","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"bidder","type":"address"},{"internalType":"uint256","name":"minValue","type":"uint256"},{"internalType":"uint256","name":"highestBid","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"royalty","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toAcceptBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toCancelSaleOfNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"toMakeBid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"minPrice","type":"uint256"}],"name":"toSellNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensPerOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526611c37937e0800060045560006005556006805460ff199081169091556010805490911690553480156200003757600080fd5b506040518060400160405280600981526020016841727420537461727360b81b8152506040518060400160405280600681526020016520a92a29aa2960d11b815250604051806060016040528060228152602001620035e7602291398251734204bfff4752e288f886f8fb06ceecb4c813929f90620000be90600190602087019062000238565b508251620000d490600290602086019062000238565b508151620000ea90600390602085019062000238565b50600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055506200012a915060009050620001243390565b62000188565b620001567fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753362000188565b620001827f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a63362000188565b6200031b565b62000194828262000198565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000194576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620001f43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200024690620002de565b90600052602060002090601f0160209004810192826200026a5760008555620002b5565b82601f106200028557805160ff1916838001178555620002b5565b82800160010185558215620002b5579182015b82811115620002b557825182559160200191906001019062000298565b50620002c3929150620002c7565b5090565b5b80821115620002c35760008155600101620002c8565b600181811c90821680620002f357607f821691505b602082108114156200031557634e487b7160e01b600052602260045260246000fd5b50919050565b6132bc806200032b6000396000f3fe6080604052600436106102465760003560e01c80638a67456a11610139578063bff29cee116100b6578063d8f3790f1161007a578063d8f3790f1461072f578063e272b8921461075c578063e985e9c51461077c578063ef5793ce146107c5578063f6e4bba6146107e5578063f7932ab81461080557600080fd5b8063bff29cee146106a6578063c87b56dd146106c5578063d0e30db0146106e5578063d5391393146106ed578063d547741f1461070f57600080fd5b8063a217fddf116100fd578063a217fddf14610622578063a22cb46514610637578063b291850314610657578063b66a0e5d14610671578063b88d4fde1461068657600080fd5b80638a67456a14610524578063906f33301461054357806390ba7a321461056357806391d14854146105ed57806395d89b411461060d57600080fd5b80632f2ff15d116101c75780636352211e1161018b5780636352211e1461047d57806370a082311461049d57806375b238fc146104bd5780637ed0f281146104f15780637fc9b4a61461051157600080fd5b80632f2ff15d146103d057806336568abe146103f057806340398d671461041057806342842e0e1461043d57806355f804b31461045d57600080fd5b806323b872dd1161020e57806323b872dd1461031b578063248a9ca31461033b57806329ee566c1461036b5780632d1a12f6146103905780632e1a7d4d146103b057600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a2578063095ea7b3146102da57806318160ddd146102fc575b600080fd5b34801561025757600080fd5b5061026b610266366004612e1d565b610825565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b50610295610836565b6040516102779190612f98565b3480156102ae57600080fd5b506102c26102bd366004612de3565b6108c8565b6040516001600160a01b039091168152602001610277565b3480156102e657600080fd5b506102fa6102f5366004612da0565b610955565b005b34801561030857600080fd5b506005545b604051908152602001610277565b34801561032757600080fd5b506102fa610336366004612cc3565b610a6b565b34801561034757600080fd5b5061030d610356366004612de3565b60009081526020819052604090206001015490565b34801561037757600080fd5b506006546102c29061010090046001600160a01b031681565b34801561039c57600080fd5b506102fa6103ab366004612dfb565b610a9c565b3480156103bc57600080fd5b506102fa6103cb366004612de3565b610b6a565b3480156103dc57600080fd5b506102fa6103eb366004612dfb565b610cd5565b3480156103fc57600080fd5b506102fa61040b366004612dfb565b610d64565b34801561041c57600080fd5b5061043061042b366004612c77565b610dde565b6040516102779190612f54565b34801561044957600080fd5b506102fa610458366004612cc3565b610e4a565b34801561046957600080fd5b5061026b610478366004612e55565b610e65565b34801561048957600080fd5b506102c2610498366004612de3565b610eb7565b3480156104a957600080fd5b5061030d6104b8366004612c77565b610f2e565b3480156104c957600080fd5b5061030d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156104fd57600080fd5b5061026b61050c366004612de3565b610fb5565b61026b61051f366004612de3565b61104e565b34801561053057600080fd5b5060105461026b90610100900460ff1681565b34801561054f57600080fd5b5061026b61055e366004612e9b565b6113c9565b34801561056f57600080fd5b506105b961057e366004612de3565b6007602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610277565b3480156105f957600080fd5b5061026b610608366004612dfb565b6114cd565b34801561061957600080fd5b506102956114f6565b34801561062e57600080fd5b5061030d600081565b34801561064357600080fd5b506102fa610652366004612d77565b611505565b34801561066357600080fd5b5060065461026b9060ff1681565b34801561067d57600080fd5b506102fa6115ca565b34801561069257600080fd5b506102fa6106a1366004612cfe565b611646565b6106ae61167d565b604080519215158352602083019190915201610277565b3480156106d157600080fd5b506102956106e0366004612de3565b611861565b6102fa611908565b3480156106f957600080fd5b5061030d60008051602061326783398151915281565b34801561071b57600080fd5b506102fa61072a366004612dfb565b611953565b34801561073b57600080fd5b5061030d61074a366004612c77565b60116020526000908152604090205481565b34801561076857600080fd5b506102fa610777366004612dc9565b6119d3565b34801561078857600080fd5b5061026b610797366004612c91565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b3480156107d157600080fd5b5061030d6107e0366004612da0565b611a69565b3480156107f157600080fd5b5061026b610800366004612de3565b611a9a565b34801561081157600080fd5b5061026b610820366004612c77565b611eff565b600061083082611fad565b92915050565b606060018054610845906131a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610871906131a1565b80156108be5780601f10610893576101008083540402835291602001916108be565b820191906000526020600020905b8154815290600101906020018083116108a157829003601f168201915b5050505050905090565b60006108d382611fed565b6109395760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600a60205260409020546001600160a01b031690565b600061096082610eb7565b9050806001600160a01b0316836001600160a01b031614156109ce5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610930565b336001600160a01b03821614806109ea57506109ea8133610797565b610a5c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610930565b610a66838361200a565b505050565b610a753382612078565b610a915760405162461bcd60e51b81526004016109309061308b565b610a66838383612162565b610ab4600080516020613267833981519152336114cd565b610ad05760405162461bcd60e51b815260040161093090612ffd565b61271082600554610ae19190613113565b1115610b2f5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610930565b60005b82811015610a665760006005546001610b4b9190613113565b9050610b5783826122fa565b5080610b62816131dc565b915050610b32565b60105460ff1615610b8d5760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff1615610bae57600080fd5b33600090815260116020526040902054811115610c0d5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e006044820152606401610930565b610c378160116000335b6001600160a01b0316815260208101919091526040016000205490612495565b3360008181526011602052604080822093909355915183908381818185875af1925050503d8060008114610c87576040519150601f19603f3d011682016040523d82523d6000602084013e610c8c565b606091505b5050905080610c9a57600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506010805460ff19169055565b600082815260208190526040902060010154610cf2905b336114cd565b610d565760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b6064820152608401610930565b610d6082826124b5565b5050565b6001600160a01b0381163314610dd45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610930565b610d608282612539565b6001600160a01b0381166000908152600e6020908152604091829020805483518184028101840190945280845260609392830182828015610e3e57602002820191906000526020600020905b815481526020019060010190808311610e2a575b50505050509050919050565b610a6683838360405180602001604052806000815250611646565b6000610e7f600080516020613267833981519152336114cd565b610e9b5760405162461bcd60e51b815260040161093090612ffd565b8151610eae906003906020850190612b3c565b50600192915050565b6000818152600860205260408120546001600160a01b0316806108305760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610930565b60006001600160a01b038216610f995760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610930565b506001600160a01b031660009081526009602052604090205490565b6000610fc2335b83612078565b610fde5760405162461bcd60e51b815260040161093090613048565b6000828152600760205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60105460009060ff16156110745760405162461bcd60e51b8152600401610930906130dc565b6010805460ff1916600117905561108a82611fed565b6110d15760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b6044820152606401610930565b600082815260076020908152604091829020825160a0810184528154815260018201546001600160a01b03908116938201849052600283015416938101939093526003810154606084015260040154608083015261116d5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b6044820152606401610930565b611178335b84612078565b156111c55760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b652062696400000000000000006044820152606401610930565b60408101516001600160a01b0316331415611243576000341161122a5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b652062696400006044820152606401610930565b6080810151611239903461259e565b60808201526112b3565b8060600151341015801561125a5750806080015134115b6112a65760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b652062696400006044820152606401610930565b3460808201523360408201525b6112dd3460116000335b6001600160a01b031681526020810191909152604001600020549061259e565b336000818152601160209081526040808320949094558682526007815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516113823390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506010805460ff1916905550600190565b60006113d433611172565b6113f05760405162461bcd60e51b815260040161093090613048565b6040518060a001604052808481526020016114083390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600782529182902085518155908501516001820180549185166001600160a01b03199283161790559185015160028201805491909416921691909117909155908201516003820155608090910151600490910155818361148f3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060028054610845906131a1565b6001600160a01b03821633141561155e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610930565b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115e2600080516020613267833981519152336114cd565b6115fe5760405162461bcd60e51b815260040161093090612ffd565b60065460ff161561160e57600080fd5b6006805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b61164f33610fbc565b61166b5760405162461bcd60e51b81526004016109309061308b565b611677848484846125b9565b50505050565b601054600090819060ff16156116a55760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff16156116c657600080fd5b60065460ff166117185760405162461bcd60e51b815260206004820152601860248201527f5468652073616c65206861736e277420737461727465642e00000000000000006044820152606401610930565b612710600554600161172a9190613113565b11156117785760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610930565b6004543410156117ca5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e006044820152606401610930565b60065460405160009161010090046001600160a01b03169034908381818185875af1925050503d806000811461181c576040519150601f19603f3d011682016040523d82523d6000602084013e611821565b606091505b505090508061182f57600080fd5b600060055460016118409190613113565b905061184c33826122fa565b600193509150506010805460ff191690559091565b606061186c82611fed565b6118d05760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610930565b6118d86125ec565b6118e1836125fb565b6040516020016118f2929190612ee8565b6040516020818303038152906040529050919050565b6119163460116000336112bd565b3360008181526011602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b60008281526020819052604090206001015461196e90610cec565b610dd45760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610930565b6119eb600080516020613267833981519152336114cd565b611a4f5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b6064820152608401610930565b601080549115156101000261ff0019909216919091179055565b600d6020528160005260406000208181548110611a8557600080fd5b90600052602060002001600091509150505481565b60105460009060ff1615611ac05760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff1615611ae157600080fd5b611aea82611fed565b611b315760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b6044820152606401610930565b600082815260076020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611bcd5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b6044820152606401610930565b611bd633611172565b611c345760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b6064820152608401610930565b60808101516040808301516001600160a01b03166000908152601160205220541015611cb35760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b6064820152608401610930565b60008381526007602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151611d069060649061312b565b611d10919061313f565b60808301516040808501516001600160a01b0316600090815260116020522054919250611d3d9190612495565b6040808401516001600160a01b0316600090815260116020819052918120929092556080840151611d7192909190336112bd565b336000818152601160208190526040822093909355611d94928492909190610c17565b33600090815260116020526040808220929092556006549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114611df8576040519150601f19603f3d011682016040523d82523d6000602084013e611dfd565b606091505b5050905080611e0b57600080fd5b611e1e8360200151846040015187612162565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf84588604051611e9991815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506010805460ff1916905550600192915050565b6000611f19600080516020613267833981519152336114cd565b611f815760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b6064820152608401610930565b50600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b1480611fde57506001600160e01b03198216635b5e139f60e01b145b80610830575061083082612715565b6000908152600860205260409020546001600160a01b0316151590565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061203f82610eb7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061208382611fed565b6120e45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610930565b60006120ef83610eb7565b9050806001600160a01b0316846001600160a01b0316148061212a5750836001600160a01b031661211f846108c8565b6001600160a01b0316145b8061215a57506001600160a01b038082166000908152600b602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661217582610eb7565b6001600160a01b0316146121dd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610930565b6001600160a01b03821661223f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610930565b61224a60008261200a565b612254838261274a565b61225e8282612960565b6001600160a01b038316600090815260096020526040812080546001929061228790849061315e565b90915550506001600160a01b03821660009081526009602052604081208054600192906122b5908490613113565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166123505760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610930565b61235981611fed565b156123a65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610930565b6001600160a01b03821660009081526009602052604081208054600192906123cf908490613113565b925050819055506001600560008282546123e99190613113565b90915550506001600160a01b0382166000908152600d60209081526040822080546001810182559083529120018190556124238282612960565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828211156124a457600080fd5b6124ae828461315e565b9392505050565b6124bf82826114cd565b610d60576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556124f53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61254382826114cd565b15610d60576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006125aa8284613113565b90508281101561083057600080fd5b6125c4848484612162565b6125d084848484612a2f565b6116775760405162461bcd60e51b815260040161093090612fab565b606060038054610845906131a1565b60608161261f5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126495780612633816131dc565b91506126429050600a8361312b565b9150612623565b60008167ffffffffffffffff81111561267257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561269c576020820181803683370190505b5090505b841561215a576126b160018361315e565b91506126be600a866131f7565b6126c9906030613113565b60f81b8183815181106126ec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061270e600a8661312b565b94506126a0565b60006001600160e01b03198216637965db0b60e01b148061083057506301ffc9a760e01b6001600160e01b0319831614610830565b6000818152600860205260409020546001600160a01b038381169116146127a65760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b6044820152606401610930565b600081815260086020908152604080832080546001600160a01b031990811690915560078352818420848155600181810180548416905560028201805490931690925560038101859055600401849055600f8352818420546001600160a01b0387168552600e9093529083205491929161281f91612495565b90508181146128d2576001600160a01b0384166000908152600e6020526040812080548390811061286057634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600e6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106128b257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600f9052604090208290555b6001600160a01b0384166000908152600e6020526040902080548061290757634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055826129253390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600860205260409020546001600160a01b0316156129c55760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e0000000000006044820152606401610930565b600081815260086020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600e83529083208054600181810183558286529385200185905592529054612a1c91612495565b6000918252600f60205260409091205550565b60006001600160a01b0384163b15612b3157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a73903390899088908890600401612f17565b602060405180830381600087803b158015612a8d57600080fd5b505af1925050508015612abd575060408051601f3d908101601f19168201909252612aba91810190612e39565b60015b612b17573d808015612aeb576040519150601f19603f3d011682016040523d82523d6000602084013e612af0565b606091505b508051612b0f5760405162461bcd60e51b815260040161093090612fab565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061215a565b506001949350505050565b828054612b48906131a1565b90600052602060002090601f016020900481019282612b6a5760008555612bb0565b82601f10612b8357805160ff1916838001178555612bb0565b82800160010185558215612bb0579182015b82811115612bb0578251825591602001919060010190612b95565b50612bbc929150612bc0565b5090565b5b80821115612bbc5760008155600101612bc1565b600067ffffffffffffffff80841115612bf057612bf0613237565b604051601f8501601f19908116603f01168101908282118183101715612c1857612c18613237565b81604052809350858152868686011115612c3157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612c6257600080fd5b919050565b80358015158114612c6257600080fd5b600060208284031215612c88578081fd5b6124ae82612c4b565b60008060408385031215612ca3578081fd5b612cac83612c4b565b9150612cba60208401612c4b565b90509250929050565b600080600060608486031215612cd7578081fd5b612ce084612c4b565b9250612cee60208501612c4b565b9150604084013590509250925092565b60008060008060808587031215612d13578081fd5b612d1c85612c4b565b9350612d2a60208601612c4b565b925060408501359150606085013567ffffffffffffffff811115612d4c578182fd5b8501601f81018713612d5c578182fd5b612d6b87823560208401612bd5565b91505092959194509250565b60008060408385031215612d89578182fd5b612d9283612c4b565b9150612cba60208401612c67565b60008060408385031215612db2578182fd5b612dbb83612c4b565b946020939093013593505050565b600060208284031215612dda578081fd5b6124ae82612c67565b600060208284031215612df4578081fd5b5035919050565b60008060408385031215612e0d578182fd5b82359150612cba60208401612c4b565b600060208284031215612e2e578081fd5b81356124ae8161324d565b600060208284031215612e4a578081fd5b81516124ae8161324d565b600060208284031215612e66578081fd5b813567ffffffffffffffff811115612e7c578182fd5b8201601f81018413612e8c578182fd5b61215a84823560208401612bd5565b60008060408385031215612ead578182fd5b50508035926020909101359150565b60008151808452612ed4816020860160208601613175565b601f01601f19169290920160200192915050565b60008351612efa818460208801613175565b835190830190612f0e818360208801613175565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4a90830184612ebc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f8c57835183529284019291840191600101612f70565b50909695505050505050565b6020815260006124ae6020830184612ebc565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156131265761312661320b565b500190565b60008261313a5761313a613221565b500490565b60008160001904831182151516156131595761315961320b565b500290565b6000828210156131705761317061320b565b500390565b60005b83811015613190578181015183820152602001613178565b838111156116775750506000910152565b600181811c908216806131b557607f821691505b602082108114156131d657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131f0576131f061320b565b5060010190565b60008261320657613206613221565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461326357600080fd5b5056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220ca5539928883c20377811d02461061aade6362756c71febb43e89df71272259664736f6c634300080400332068747470733a2f2f756e656e637279707465642e6469676974616c2f6a736f6e2f

Deployed Bytecode

0x6080604052600436106102465760003560e01c80638a67456a11610139578063bff29cee116100b6578063d8f3790f1161007a578063d8f3790f1461072f578063e272b8921461075c578063e985e9c51461077c578063ef5793ce146107c5578063f6e4bba6146107e5578063f7932ab81461080557600080fd5b8063bff29cee146106a6578063c87b56dd146106c5578063d0e30db0146106e5578063d5391393146106ed578063d547741f1461070f57600080fd5b8063a217fddf116100fd578063a217fddf14610622578063a22cb46514610637578063b291850314610657578063b66a0e5d14610671578063b88d4fde1461068657600080fd5b80638a67456a14610524578063906f33301461054357806390ba7a321461056357806391d14854146105ed57806395d89b411461060d57600080fd5b80632f2ff15d116101c75780636352211e1161018b5780636352211e1461047d57806370a082311461049d57806375b238fc146104bd5780637ed0f281146104f15780637fc9b4a61461051157600080fd5b80632f2ff15d146103d057806336568abe146103f057806340398d671461041057806342842e0e1461043d57806355f804b31461045d57600080fd5b806323b872dd1161020e57806323b872dd1461031b578063248a9ca31461033b57806329ee566c1461036b5780632d1a12f6146103905780632e1a7d4d146103b057600080fd5b806301ffc9a71461024b57806306fdde0314610280578063081812fc146102a2578063095ea7b3146102da57806318160ddd146102fc575b600080fd5b34801561025757600080fd5b5061026b610266366004612e1d565b610825565b60405190151581526020015b60405180910390f35b34801561028c57600080fd5b50610295610836565b6040516102779190612f98565b3480156102ae57600080fd5b506102c26102bd366004612de3565b6108c8565b6040516001600160a01b039091168152602001610277565b3480156102e657600080fd5b506102fa6102f5366004612da0565b610955565b005b34801561030857600080fd5b506005545b604051908152602001610277565b34801561032757600080fd5b506102fa610336366004612cc3565b610a6b565b34801561034757600080fd5b5061030d610356366004612de3565b60009081526020819052604090206001015490565b34801561037757600080fd5b506006546102c29061010090046001600160a01b031681565b34801561039c57600080fd5b506102fa6103ab366004612dfb565b610a9c565b3480156103bc57600080fd5b506102fa6103cb366004612de3565b610b6a565b3480156103dc57600080fd5b506102fa6103eb366004612dfb565b610cd5565b3480156103fc57600080fd5b506102fa61040b366004612dfb565b610d64565b34801561041c57600080fd5b5061043061042b366004612c77565b610dde565b6040516102779190612f54565b34801561044957600080fd5b506102fa610458366004612cc3565b610e4a565b34801561046957600080fd5b5061026b610478366004612e55565b610e65565b34801561048957600080fd5b506102c2610498366004612de3565b610eb7565b3480156104a957600080fd5b5061030d6104b8366004612c77565b610f2e565b3480156104c957600080fd5b5061030d7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b3480156104fd57600080fd5b5061026b61050c366004612de3565b610fb5565b61026b61051f366004612de3565b61104e565b34801561053057600080fd5b5060105461026b90610100900460ff1681565b34801561054f57600080fd5b5061026b61055e366004612e9b565b6113c9565b34801561056f57600080fd5b506105b961057e366004612de3565b6007602052600090815260409020805460018201546002830154600384015460049094015492936001600160a01b0392831693929091169185565b604080519586526001600160a01b03948516602087015292909316918401919091526060830152608082015260a001610277565b3480156105f957600080fd5b5061026b610608366004612dfb565b6114cd565b34801561061957600080fd5b506102956114f6565b34801561062e57600080fd5b5061030d600081565b34801561064357600080fd5b506102fa610652366004612d77565b611505565b34801561066357600080fd5b5060065461026b9060ff1681565b34801561067d57600080fd5b506102fa6115ca565b34801561069257600080fd5b506102fa6106a1366004612cfe565b611646565b6106ae61167d565b604080519215158352602083019190915201610277565b3480156106d157600080fd5b506102956106e0366004612de3565b611861565b6102fa611908565b3480156106f957600080fd5b5061030d60008051602061326783398151915281565b34801561071b57600080fd5b506102fa61072a366004612dfb565b611953565b34801561073b57600080fd5b5061030d61074a366004612c77565b60116020526000908152604090205481565b34801561076857600080fd5b506102fa610777366004612dc9565b6119d3565b34801561078857600080fd5b5061026b610797366004612c91565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205460ff1690565b3480156107d157600080fd5b5061030d6107e0366004612da0565b611a69565b3480156107f157600080fd5b5061026b610800366004612de3565b611a9a565b34801561081157600080fd5b5061026b610820366004612c77565b611eff565b600061083082611fad565b92915050565b606060018054610845906131a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610871906131a1565b80156108be5780601f10610893576101008083540402835291602001916108be565b820191906000526020600020905b8154815290600101906020018083116108a157829003601f168201915b5050505050905090565b60006108d382611fed565b6109395760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600a60205260409020546001600160a01b031690565b600061096082610eb7565b9050806001600160a01b0316836001600160a01b031614156109ce5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610930565b336001600160a01b03821614806109ea57506109ea8133610797565b610a5c5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610930565b610a66838361200a565b505050565b610a753382612078565b610a915760405162461bcd60e51b81526004016109309061308b565b610a66838383612162565b610ab4600080516020613267833981519152336114cd565b610ad05760405162461bcd60e51b815260040161093090612ffd565b61271082600554610ae19190613113565b1115610b2f5760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610930565b60005b82811015610a665760006005546001610b4b9190613113565b9050610b5783826122fa565b5080610b62816131dc565b915050610b32565b60105460ff1615610b8d5760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff1615610bae57600080fd5b33600090815260116020526040902054811115610c0d5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2077697468647261772e006044820152606401610930565b610c378160116000335b6001600160a01b0316815260208101919091526040016000205490612495565b3360008181526011602052604080822093909355915183908381818185875af1925050503d8060008114610c87576040519150601f19603f3d011682016040523d82523d6000602084013e610c8c565b606091505b5050905080610c9a57600080fd5b604051829033907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436490600090a350506010805460ff19169055565b600082815260208190526040902060010154610cf2905b336114cd565b610d565760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526e0818591b5a5b881d1bc819dc985b9d608a1b6064820152608401610930565b610d6082826124b5565b5050565b6001600160a01b0381163314610dd45760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610930565b610d608282612539565b6001600160a01b0381166000908152600e6020908152604091829020805483518184028101840190945280845260609392830182828015610e3e57602002820191906000526020600020905b815481526020019060010190808311610e2a575b50505050509050919050565b610a6683838360405180602001604052806000815250611646565b6000610e7f600080516020613267833981519152336114cd565b610e9b5760405162461bcd60e51b815260040161093090612ffd565b8151610eae906003906020850190612b3c565b50600192915050565b6000818152600860205260408120546001600160a01b0316806108305760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610930565b60006001600160a01b038216610f995760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610930565b506001600160a01b031660009081526009602052604090205490565b6000610fc2335b83612078565b610fde5760405162461bcd60e51b815260040161093090613048565b6000828152600760205260408082208281556001810180546001600160a01b031990811690915560028201805490911690556003810183905560040182905551839133917f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc9190a3506001919050565b60105460009060ff16156110745760405162461bcd60e51b8152600401610930906130dc565b6010805460ff1916600117905561108a82611fed565b6110d15760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b6044820152606401610930565b600082815260076020908152604091829020825160a0810184528154815260018201546001600160a01b03908116938201849052600283015416938101939093526003810154606084015260040154608083015261116d5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b6044820152606401610930565b611178335b84612078565b156111c55760405162461bcd60e51b815260206004820152601860248201527f546865206f776e65722063616e2774206d616b652062696400000000000000006044820152606401610930565b60408101516001600160a01b0316331415611243576000341161122a5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b652062696400006044820152606401610930565b6080810151611239903461259e565b60808201526112b3565b8060600151341015801561125a5750806080015134115b6112a65760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320746f206d616b652062696400006044820152606401610930565b3460808201523360408201525b6112dd3460116000335b6001600160a01b031681526020810191909152604001600020549061259e565b336000818152601160209081526040808320949094558682526007815283822085518155908501516001820180546001600160a01b039283166001600160a01b03199182161790915586860151600284018054919093169116179055606085015160038201556080850151600490910155915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a38281608001516113823390565b6001600160a01b03167f87f5b2fe112bf269d30fb8ca9dc0bde0afd0cc39258e13fafd75fe794795bf0e60405160405180910390a450506010805460ff1916905550600190565b60006113d433611172565b6113f05760405162461bcd60e51b815260040161093090613048565b6040518060a001604052808481526020016114083390565b6001600160a01b0390811682526000602080840182905260408085018890526060948501839052888352600782529182902085518155908501516001820180549185166001600160a01b03199283161790559185015160028201805491909416921691909117909155908201516003820155608090910151600490910155818361148f3390565b6001600160a01b03167f3717c35c2bbd44105584b2f11db3f276443b6788fbbd518272b823fa5988802460405160405180910390a450600192915050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060028054610845906131a1565b6001600160a01b03821633141561155e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610930565b336000818152600b602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6115e2600080516020613267833981519152336114cd565b6115fe5760405162461bcd60e51b815260040161093090612ffd565b60065460ff161561160e57600080fd5b6006805460ff191660011790556040517f3a40cba5bc9ba53b982e020c19f51fdf3b4e536da88b16beafe417447277536d90600090a1565b61164f33610fbc565b61166b5760405162461bcd60e51b81526004016109309061308b565b611677848484846125b9565b50505050565b601054600090819060ff16156116a55760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff16156116c657600080fd5b60065460ff166117185760405162461bcd60e51b815260206004820152601860248201527f5468652073616c65206861736e277420737461727465642e00000000000000006044820152606401610930565b612710600554600161172a9190613113565b11156117785760405162461bcd60e51b815260206004820152601d60248201527f54686520746f6b656e73206c696d69742068617320726561636865642e0000006044820152606401610930565b6004543410156117ca5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e742066756e647320746f2070757263686173652e006044820152606401610930565b60065460405160009161010090046001600160a01b03169034908381818185875af1925050503d806000811461181c576040519150601f19603f3d011682016040523d82523d6000602084013e611821565b606091505b505090508061182f57600080fd5b600060055460016118409190613113565b905061184c33826122fa565b600193509150506010805460ff191690559091565b606061186c82611fed565b6118d05760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610930565b6118d86125ec565b6118e1836125fb565b6040516020016118f2929190612ee8565b6040516020818303038152906040529050919050565b6119163460116000336112bd565b3360008181526011602052604080822093909355915134927fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c91a3565b60008281526020819052604090206001015461196e90610cec565b610dd45760405162461bcd60e51b815260206004820152603060248201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60448201526f2061646d696e20746f207265766f6b6560801b6064820152608401610930565b6119eb600080516020613267833981519152336114cd565b611a4f5760405162461bcd60e51b815260206004820152602f60248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2070617560448201526e1cd9481d1a194818dbdb9d1c9858dd608a1b6064820152608401610930565b601080549115156101000261ff0019909216919091179055565b600d6020528160005260406000208181548110611a8557600080fd5b90600052602060002001600091509150505481565b60105460009060ff1615611ac05760405162461bcd60e51b8152600401610930906130dc565b6010805460ff191660011790819055610100900460ff1615611ae157600080fd5b611aea82611fed565b611b315760405162461bcd60e51b8152602060048201526018602482015277151a19481d1bdad95b881a5cc81b9bdb995e1a5cdd195b9d60421b6044820152606401610930565b600082815260076020908152604091829020825160a0810184528154815260018201546001600160a01b039081169382018490526002830154169381019390935260038101546060840152600401546080830152611bcd5760405162461bcd60e51b815260206004820152601960248201527854686520746f6b656e206973206e6f7420666f722073616c6560381b6044820152606401610930565b611bd633611172565b611c345760405162461bcd60e51b815260206004820152602960248201527f4f6e6c79206f776e6572206f7220617070726f7665642063616e2061636365706044820152681d081d1a1948189a5960ba1b6064820152608401610930565b60808101516040808301516001600160a01b03166000908152601160205220541015611cb35760405162461bcd60e51b815260206004820152602860248201527f496e73756666696369656e742066756e6473206f6620746865206269646465726044820152672062616c616e636560c01b6064820152608401610930565b60008381526007602052604081208181556001810180546001600160a01b0319908116909155600280830180549092169091556003820183905560049091018290556080830151611d069060649061312b565b611d10919061313f565b60808301516040808501516001600160a01b0316600090815260116020522054919250611d3d9190612495565b6040808401516001600160a01b0316600090815260116020819052918120929092556080840151611d7192909190336112bd565b336000818152601160208190526040822093909355611d94928492909190610c17565b33600090815260116020526040808220929092556006549151909161010090046001600160a01b03169083908381818185875af1925050503d8060008114611df8576040519150601f19603f3d011682016040523d82523d6000602084013e611dfd565b606091505b5050905080611e0b57600080fd5b611e1e8360200151846040015187612162565b604051859033907f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc90600090a3608083015160408401516001600160a01b0316336001600160a01b03167f4b5796113f074ebf8f11d5bcdeb6349b2fbe47abed78419cdcdbbc15c6fcf84588604051611e9991815260200190565b60405180910390a48483604001516001600160a01b031684602001516001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450506010805460ff1916905550600192915050565b6000611f19600080516020613267833981519152336114cd565b611f815760405162461bcd60e51b815260206004820152603360248201527f596f75206d7573742068617665206d696e74657220726f6c6520746f206368616044820152726e676520726f79616c7479206164647265737360681b6064820152608401610930565b50600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055600190565b60006001600160e01b031982166380ac58cd60e01b1480611fde57506001600160e01b03198216635b5e139f60e01b145b80610830575061083082612715565b6000908152600860205260409020546001600160a01b0316151590565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061203f82610eb7565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061208382611fed565b6120e45760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610930565b60006120ef83610eb7565b9050806001600160a01b0316846001600160a01b0316148061212a5750836001600160a01b031661211f846108c8565b6001600160a01b0316145b8061215a57506001600160a01b038082166000908152600b602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661217582610eb7565b6001600160a01b0316146121dd5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610930565b6001600160a01b03821661223f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610930565b61224a60008261200a565b612254838261274a565b61225e8282612960565b6001600160a01b038316600090815260096020526040812080546001929061228790849061315e565b90915550506001600160a01b03821660009081526009602052604081208054600192906122b5908490613113565b909155505060405181906001600160a01b0380851691908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a4505050565b6001600160a01b0382166123505760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610930565b61235981611fed565b156123a65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610930565b6001600160a01b03821660009081526009602052604081208054600192906123cf908490613113565b925050819055506001600560008282546123e99190613113565b90915550506001600160a01b0382166000908152600d60209081526040822080546001810182559083529120018190556124238282612960565b6040516001600160a01b0383169082907ff3cea5493d790af0133817606f7350a91d7f154ea52eaa79d179d4d231e5010290600090a360405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000828211156124a457600080fd5b6124ae828461315e565b9392505050565b6124bf82826114cd565b610d60576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556124f53390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61254382826114cd565b15610d60576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006125aa8284613113565b90508281101561083057600080fd5b6125c4848484612162565b6125d084848484612a2f565b6116775760405162461bcd60e51b815260040161093090612fab565b606060038054610845906131a1565b60608161261f5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156126495780612633816131dc565b91506126429050600a8361312b565b9150612623565b60008167ffffffffffffffff81111561267257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561269c576020820181803683370190505b5090505b841561215a576126b160018361315e565b91506126be600a866131f7565b6126c9906030613113565b60f81b8183815181106126ec57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061270e600a8661312b565b94506126a0565b60006001600160e01b03198216637965db0b60e01b148061083057506301ffc9a760e01b6001600160e01b0319831614610830565b6000818152600860205260409020546001600160a01b038381169116146127a65760405162461bcd60e51b815260206004820152601060248201526f24b731b7b93932b1ba1037bbb732b91760811b6044820152606401610930565b600081815260086020908152604080832080546001600160a01b031990811690915560078352818420848155600181810180548416905560028201805490931690925560038101859055600401849055600f8352818420546001600160a01b0387168552600e9093529083205491929161281f91612495565b90508181146128d2576001600160a01b0384166000908152600e6020526040812080548390811061286057634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080600e6000876001600160a01b03166001600160a01b0316815260200190815260200160002084815481106128b257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600f9052604090208290555b6001600160a01b0384166000908152600e6020526040902080548061290757634e487b7160e01b600052603160045260246000fd5b60019003818190600052602060002001600090559055826129253390565b6001600160a01b03167f6d97e11e5e36c8f052a95826e5998a393bc23c1ca95dc24d00e28ce375dae1fc60405160405180910390a350505050565b6000818152600860205260409020546001600160a01b0316156129c55760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74206164642c20616c7265616479206f776e65642e0000000000006044820152606401610930565b600081815260086020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600e83529083208054600181810183558286529385200185905592529054612a1c91612495565b6000918252600f60205260409091205550565b60006001600160a01b0384163b15612b3157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a73903390899088908890600401612f17565b602060405180830381600087803b158015612a8d57600080fd5b505af1925050508015612abd575060408051601f3d908101601f19168201909252612aba91810190612e39565b60015b612b17573d808015612aeb576040519150601f19603f3d011682016040523d82523d6000602084013e612af0565b606091505b508051612b0f5760405162461bcd60e51b815260040161093090612fab565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061215a565b506001949350505050565b828054612b48906131a1565b90600052602060002090601f016020900481019282612b6a5760008555612bb0565b82601f10612b8357805160ff1916838001178555612bb0565b82800160010185558215612bb0579182015b82811115612bb0578251825591602001919060010190612b95565b50612bbc929150612bc0565b5090565b5b80821115612bbc5760008155600101612bc1565b600067ffffffffffffffff80841115612bf057612bf0613237565b604051601f8501601f19908116603f01168101908282118183101715612c1857612c18613237565b81604052809350858152868686011115612c3157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612c6257600080fd5b919050565b80358015158114612c6257600080fd5b600060208284031215612c88578081fd5b6124ae82612c4b565b60008060408385031215612ca3578081fd5b612cac83612c4b565b9150612cba60208401612c4b565b90509250929050565b600080600060608486031215612cd7578081fd5b612ce084612c4b565b9250612cee60208501612c4b565b9150604084013590509250925092565b60008060008060808587031215612d13578081fd5b612d1c85612c4b565b9350612d2a60208601612c4b565b925060408501359150606085013567ffffffffffffffff811115612d4c578182fd5b8501601f81018713612d5c578182fd5b612d6b87823560208401612bd5565b91505092959194509250565b60008060408385031215612d89578182fd5b612d9283612c4b565b9150612cba60208401612c67565b60008060408385031215612db2578182fd5b612dbb83612c4b565b946020939093013593505050565b600060208284031215612dda578081fd5b6124ae82612c67565b600060208284031215612df4578081fd5b5035919050565b60008060408385031215612e0d578182fd5b82359150612cba60208401612c4b565b600060208284031215612e2e578081fd5b81356124ae8161324d565b600060208284031215612e4a578081fd5b81516124ae8161324d565b600060208284031215612e66578081fd5b813567ffffffffffffffff811115612e7c578182fd5b8201601f81018413612e8c578182fd5b61215a84823560208401612bd5565b60008060408385031215612ead578182fd5b50508035926020909101359150565b60008151808452612ed4816020860160208601613175565b601f01601f19169290920160200192915050565b60008351612efa818460208801613175565b835190830190612f0e818360208801613175565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4a90830184612ebc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015612f8c57835183529284019291840191600101612f70565b50909695505050505050565b6020815260006124ae6020830184612ebc565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f596f75206d7573742068617665206d696e74657220726f6c6520746f2063686160408201526a6e6765206261736555524960a81b606082015260800190565b60208082526023908201527f5468652073656c6c6572206973206e6f74206f776e6572206f7220617070726f6040820152621d995960ea1b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600082198211156131265761312661320b565b500190565b60008261313a5761313a613221565b500490565b60008160001904831182151516156131595761315961320b565b500290565b6000828210156131705761317061320b565b500390565b60005b83811015613190578181015183820152602001613178565b838111156116775750506000910152565b600181811c908216806131b557607f821691505b602082108114156131d657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156131f0576131f061320b565b5060010190565b60008261320657613206613221565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461326357600080fd5b5056fe9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6a2646970667358221220ca5539928883c20377811d02461061aade6362756c71febb43e89df71272259664736f6c63430008040033

Deployed Bytecode Sourcemap

17369:5967:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18097:161;;;;;;;;;;-1:-1:-1;18097:161:0;;;;;:::i;:::-;;:::i;:::-;;;7899:14:1;;7892:22;7874:41;;7862:2;7847:18;18097:161:0;;;;;;;;9179:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10276:221::-;;;;;;;;;;-1:-1:-1;10276:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6557:32:1;;;6539:51;;6527:2;6512:18;10276:221:0;6494:102:1;9871:397:0;;;;;;;;;;-1:-1:-1;9871:397:0;;;;;:::i;:::-;;:::i;:::-;;9401:89;;;;;;;;;;-1:-1:-1;9472:10:0;;9401:89;;;8335:25:1;;;8323:2;8308:18;9401:89:0;8290:76:1;10980:252:0;;;;;;;;;;-1:-1:-1;10980:252:0;;;;;:::i;:::-;;:::i;5287:123::-;;;;;;;;;;-1:-1:-1;5287:123:0;;;;;:::i;:::-;5353:7;5380:12;;;;;;;;;;:22;;;;5287:123;7459:22;;;;;;;;;;-1:-1:-1;7459:22:0;;;;;;;-1:-1:-1;;;;;7459:22:0;;;14888:387;;;;;;;;;;-1:-1:-1;14888:387:0;;;;;:::i;:::-;;:::i;22758:394::-;;;;;;;;;;-1:-1:-1;22758:394:0;;;;;:::i;:::-;;:::i;5418:232::-;;;;;;;;;;-1:-1:-1;5418:232:0;;;;;:::i;:::-;;:::i;5901:218::-;;;;;;;;;;-1:-1:-1;5901:218:0;;;;;:::i;:::-;;:::i;18958:124::-;;;;;;;;;;-1:-1:-1;18958:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11240:151::-;;;;;;;;;;-1:-1:-1;11240:151:0;;;;;:::i;:::-;;:::i;18469:224::-;;;;;;;;;;-1:-1:-1;18469:224:0;;;;;:::i;:::-;;:::i;8932:239::-;;;;;;;;;;-1:-1:-1;8932:239:0;;;;;:::i;:::-;;:::i;8716:208::-;;;;;;;;;;-1:-1:-1;8716:208:0;;;;;:::i;:::-;;:::i;7144:60::-;;;;;;;;;;;;7181:23;7144:60;;19434:280;;;;;;;;;;-1:-1:-1;19434:280:0;;;;;:::i;:::-;;:::i;19724:1016::-;;;;;;:::i;:::-;;:::i;17472:26::-;;;;;;;;;;-1:-1:-1;17472:26:0;;;;;;;;;;;19090:336;;;;;;;;;;-1:-1:-1;19090:336:0;;;;;:::i;:::-;;:::i;7492:43::-;;;;;;;;;;-1:-1:-1;7492:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7492:43:0;;;;;;;;;;;;;;;22280:25:1;;;-1:-1:-1;;;;;22379:15:1;;;22374:2;22359:18;;22352:43;22431:15;;;;22411:18;;;22404:43;;;;22478:2;22463:18;;22456:34;22521:3;22506:19;;22499:35;22267:3;22252:19;7492:43:0;22234:306:1;5140:139:0;;;;;;;;;;-1:-1:-1;5140:139:0;;;;;:::i;:::-;;:::i;9287:104::-;;;;;;;;;;;;;:::i;4549:49::-;;;;;;;;;;-1:-1:-1;4549:49:0;4594:4;4549:49;;10505:295;;;;;;;;;;-1:-1:-1;10505:295:0;;;;;:::i;:::-;;:::i;7378:30::-;;;;;;;;;;-1:-1:-1;7378:30:0;;;;;;;;21984:229;;;;;;;;;;;;;:::i;11399:285::-;;;;;;;;;;-1:-1:-1;11399:285:0;;;;;:::i;:::-;;:::i;22225:525::-;;;:::i;:::-;;;;8119:14:1;;8112:22;8094:41;;8166:2;8151:18;;8144:34;;;;8067:18;22225:525:0;8049:135:1;9498:256:0;;;;;;;;;;-1:-1:-1;9498:256:0;;;;;:::i;:::-;;:::i;23160:169::-;;;:::i;7075:62::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;7075:62:0;;5658:235;;;;;;;;;;-1:-1:-1;5658:235:0;;;;;:::i;:::-;;:::i;17584:46::-;;;;;;;;;;-1:-1:-1;17584:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;18266:195;;;;;;;;;;-1:-1:-1;18266:195:0;;;;;:::i;:::-;;:::i;10808:164::-;;;;;;;;;;-1:-1:-1;10808:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;10929:25:0;;;10905:4;10929:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10808:164;7838:52;;;;;;;;;;-1:-1:-1;7838:52:0;;;;;:::i;:::-;;:::i;20748:1228::-;;;;;;;;;;-1:-1:-1;20748:1228:0;;;;;:::i;:::-;;:::i;18701:247::-;;;;;;;;;;-1:-1:-1;18701:247:0;;;;;:::i;:::-;;:::i;18097:161::-;18190:4;18214:36;18238:11;18214:23;:36::i;:::-;18207:43;18097:161;-1:-1:-1;;18097:161:0:o;9179:100::-;9233:13;9266:5;9259:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9179:100;:::o;10276:221::-;10352:7;10380:16;10388:7;10380;:16::i;:::-;10372:73;;;;-1:-1:-1;;;10372:73:0;;16207:2:1;10372:73:0;;;16189:21:1;16246:2;16226:18;;;16219:30;16285:34;16265:18;;;16258:62;-1:-1:-1;;;16336:18:1;;;16329:42;16388:19;;10372:73:0;;;;;;;;;-1:-1:-1;10465:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;10465:24:0;;10276:221::o;9871:397::-;9952:13;9968:23;9983:7;9968:14;:23::i;:::-;9952:39;;10016:5;-1:-1:-1;;;;;10010:11:0;:2;-1:-1:-1;;;;;10010:11:0;;;10002:57;;;;-1:-1:-1;;;10002:57:0;;20087:2:1;10002:57:0;;;20069:21:1;20126:2;20106:18;;;20099:30;20165:34;20145:18;;;20138:62;-1:-1:-1;;;20216:18:1;;;20209:31;20257:19;;10002:57:0;20059:223:1;10002:57:0;4083:10;-1:-1:-1;;;;;10080:21:0;;;;:62;;-1:-1:-1;10105:37:0;10122:5;4083:10;10808:164;:::i;10105:37::-;10072:154;;;;-1:-1:-1;;;10072:154:0;;14247:2:1;10072:154:0;;;14229:21:1;14286:2;14266:18;;;14259:30;14325:34;14305:18;;;14298:62;14396:26;14376:18;;;14369:54;14440:19;;10072:154:0;14219:246:1;10072:154:0;10239:21;10248:2;10252:7;10239:8;:21::i;:::-;9871:397;;;:::o;10980:252::-;11088:41;4083:10;11121:7;11088:18;:41::i;:::-;11080:103;;;;-1:-1:-1;;;11080:103:0;;;;;;;:::i;:::-;11196:28;11206:4;11212:2;11216:7;11196:9;:28::i;14888:387::-;14964:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;14964:34::-;14956:90;;;;-1:-1:-1;;;14956:90:0;;;;;;;:::i;:::-;15084:5;15076;15065:10;;:16;;;;:::i;:::-;:24;;15057:66;;;;-1:-1:-1;;;15057:66:0;;20907:2:1;15057:66:0;;;20889:21:1;20946:2;20926:18;;;20919:30;20985:31;20965:18;;;20958:59;21034:18;;15057:66:0;20879:179:1;15057:66:0;15139:6;15134:134;15155:5;15151:1;:9;15134:134;;;15182:16;15201:10;;15214:1;15201:14;;;;:::i;:::-;15182:33;;15230:26;15236:9;15247:8;15230:5;:26::i;:::-;-1:-1:-1;15162:3:0;;;;:::i;:::-;;;;15134:134;;22758:394;17986:4;;;;17985:5;17977:49;;;;-1:-1:-1;;;17977:49:0;;;;;;;:::i;:::-;18037:4;:11;;-1:-1:-1;;18037:11:0;18044:4;18037:11;;;;;;22831:14;::::1;18037:11:::0;22831:14:::1;22830:15;22822:24;;;::::0;::::1;;4083:10:::0;22875:24:::1;::::0;;;:10:::1;:24;::::0;;;;;22865:34;::::1;;22857:77;;;::::0;-1:-1:-1;;;22857:77:0;;17389:2:1;22857:77:0::1;::::0;::::1;17371:21:1::0;17428:2;17408:18;;;17401:30;17467:33;17447:18;;;17440:61;17518:18;;22857:77:0::1;17361:181:1::0;22857:77:0::1;22972:36;23001:6:::0;22972:10:::1;:24;4083:10:::0;22983:12:::1;-1:-1:-1::0;;;;;22972:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22972:24:0;;;:28:::1;:36::i;:::-;4083:10:::0;22945:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:63;;;;23038:33;;23060:6;;22945:24;23038:33;22945:24;23038:33;23060:6;4083:10;23038:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23019:52;;;23090:7;23082:16;;;::::0;::::1;;23114:30;::::0;23137:6;;4083:10;;23114:30:::1;::::0;;;::::1;-1:-1:-1::0;;18071:4:0;:12;;-1:-1:-1;;18071:12:0;;;22758:394::o;5418:232::-;5353:7;5380:12;;;;;;;;;;:22;;;5511:41;;5519:18;4083:10;5140:139;:::i;5511:41::-;5503:101;;;;-1:-1:-1;;;5503:101:0;;8797:2:1;5503:101:0;;;8779:21:1;8836:2;8816:18;;;8809:30;8875:34;8855:18;;;8848:62;-1:-1:-1;;;8926:18:1;;;8919:45;8981:19;;5503:101:0;8769:237:1;5503:101:0;5617:25;5628:4;5634:7;5617:10;:25::i;:::-;5418:232;;:::o;5901:218::-;-1:-1:-1;;;;;5997:23:0;;4083:10;5997:23;5989:83;;;;-1:-1:-1;;;5989:83:0;;21625:2:1;5989:83:0;;;21607:21:1;21664:2;21644:18;;;21637:30;21703:34;21683:18;;;21676:62;-1:-1:-1;;;21754:18:1;;;21747:45;21809:19;;5989:83:0;21597:237:1;5989:83:0;6085:26;6097:4;6103:7;6085:11;:26::i;18958:124::-;-1:-1:-1;;;;;19056:18:0;;;;;;:10;:18;;;;;;;;;19049:25;;;;;;;;;;;;;;;;;19021:16;;19049:25;;;19056:18;19049:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18958:124;;;:::o;11240:151::-;11344:39;11361:4;11367:2;11371:7;11344:39;;;;;;;;;;;;:16;:39::i;18469:224::-;18527:4;18552:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;18552:34::-;18544:90;;;;-1:-1:-1;;;18544:90:0;;;;;;;:::i;:::-;18645:16;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;18679:4:0;;18469:224;-1:-1:-1;;18469:224:0:o;8932:239::-;9004:7;9040:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9040:16:0;9075:19;9067:73;;;;-1:-1:-1;;;9067:73:0;;15083:2:1;9067:73:0;;;15065:21:1;15122:2;15102:18;;;15095:30;15161:34;15141:18;;;15134:62;-1:-1:-1;;;15212:18:1;;;15205:39;15261:19;;9067:73:0;15055:231:1;8716:208:0;8788:7;-1:-1:-1;;;;;8816:19:0;;8808:74;;;;-1:-1:-1;;;8808:74:0;;14672:2:1;8808:74:0;;;14654:21:1;14711:2;14691:18;;;14684:30;14750:34;14730:18;;;14723:62;-1:-1:-1;;;14801:18:1;;;14794:40;14851:19;;8808:74:0;14644:232:1;8808:74:0;-1:-1:-1;;;;;;8900:16:0;;;;;:9;:16;;;;;;;8716:208::o;19434:280::-;19491:4;19515:41;4083:10;19534:12;19548:7;19515:18;:41::i;:::-;19507:89;;;;-1:-1:-1;;;19507:89:0;;;;;;;:::i;:::-;19614:19;;;;:10;:19;;;;;;19607:26;;;;;;;;-1:-1:-1;;;;;;19607:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;19649:35;19614:19;;4083:10;;19649:35;;19614:19;19649:35;-1:-1:-1;19702:4:0;;19434:280;-1:-1:-1;19434:280:0:o;19724:1016::-;17986:4;;19793;;17986;;17985:5;17977:49;;;;-1:-1:-1;;;17977:49:0;;;;;;;:::i;:::-;18037:4;:11;;-1:-1:-1;;18037:11:0;18044:4;18037:11;;;19817:16:::1;19825:7:::0;19817::::1;:16::i;:::-;19809:53;;;::::0;-1:-1:-1;;;19809:53:0;;13477:2:1;19809:53:0::1;::::0;::::1;13459:21:1::0;13516:2;13496:18;;;13489:30;-1:-1:-1;;;13535:18:1;;;13528:54;13599:18;;19809:53:0::1;13449:174:1::0;19809:53:0::1;19873:20;19896:19:::0;;;:10:::1;:19;::::0;;;;;;;;19873:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;19873:42:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;19926:62:::1;;;::::0;-1:-1:-1;;;19926:62:0;;18984:2:1;19926:62:0::1;::::0;::::1;18966:21:1::0;19023:2;19003:18;;;18996:30;-1:-1:-1;;;19042:18:1;;;19035:55;19107:18;;19926:62:0::1;18956:175:1::0;19926:62:0::1;20008:41;4083:10:::0;20027:12:::1;20041:7;20008:18;:41::i;:::-;20007:42;19999:79;;;::::0;-1:-1:-1;;;19999:79:0;;15493:2:1;19999:79:0::1;::::0;::::1;15475:21:1::0;15532:2;15512:18;;;15505:30;15571:26;15551:18;;;15544:54;15615:18;;19999:79:0::1;15465:174:1::0;19999:79:0::1;20093:12;::::0;::::1;::::0;-1:-1:-1;;;;;20093:28:0::1;4083:10:::0;20093:28:::1;20089:399;;;20157:1;20145:9;:13;20137:55;;;::::0;-1:-1:-1;;;20137:55:0;;16620:2:1;20137:55:0::1;::::0;::::1;16602:21:1::0;16659:2;16639:18;;;16632:30;16698:32;16678:18;;;16671:60;16748:18;;20137:55:0::1;16592:180:1::0;20137:55:0::1;20226:16;::::0;::::1;::::0;:31:::1;::::0;20247:9:::1;20226:20;:31::i;:::-;20207:16;::::0;::::1;:50:::0;20089:399:::1;;;20310:5;:14;;;20297:9;:27;;:59;;;;;20340:5;:16;;;20328:9;:28;20297:59;20289:102;;;::::0;-1:-1:-1;;;20289:102:0;;16620:2:1;20289:102:0::1;::::0;::::1;16602:21:1::0;16659:2;16639:18;;;16632:30;16698:32;16678:18;;;16671:60;16748:18;;20289:102:0::1;16592:180:1::0;20289:102:0::1;20425:9;20406:16;::::0;::::1;:28:::0;4083:10;20449:12:::1;::::0;::::1;:27:::0;20089:399:::1;20525:39;20554:9;20525:10;:24;4083:10:::0;20536:12:::1;-1:-1:-1::0;;;;;20525:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;20525:24:0;;;:28:::1;:39::i;:::-;4083:10:::0;20498:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;;:66;;;;20575:19;;;:10:::1;:19:::0;;;;;:27;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;20575:27:0;;::::1;-1:-1:-1::0;;;;;;20575:27:0;;::::1;;::::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;20618:31;;20639:9:::1;::::0;20618:31:::1;::::0;::::1;20702:7;20685:5;:16;;;20672:12;4083:10:::0;;4003:98;20672:12:::1;-1:-1:-1::0;;;;;20665:45:0::1;;;;;;;;;;;-1:-1:-1::0;;18071:4:0;:12;;-1:-1:-1;;18071:12:0;;;-1:-1:-1;20728:4:0::1;::::0;19724:1016::o;19090:336::-;19154:4;19178:41;4083:10;19197:12;4003:98;19178:41;19170:89;;;;-1:-1:-1;;;19170:89:0;;;;;;;:::i;:::-;19291:51;;;;;;;;19299:7;19291:51;;;;19307:12;4083:10;;4003:98;19307:12;-1:-1:-1;;;;;19291:51:0;;;;;19328:1;19291:51;;;;;;;;;;;;;;;;;;;;;19270:19;;;:10;:19;;;;;;:72;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19270:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19331:8;19281:7;19366:12;4083:10;;4003:98;19366:12;-1:-1:-1;;;;;19358:38:0;;;;;;;;;;;-1:-1:-1;19414:4:0;19090:336;;;;:::o;5140:139::-;5218:4;5242:12;;;;;;;;;;;-1:-1:-1;;;;;5242:29:0;;;;;;;;;;;;;;;5140:139::o;9287:104::-;9343:13;9376:7;9369:14;;;;;:::i;10505:295::-;-1:-1:-1;;;;;10608:24:0;;4083:10;10608:24;;10600:62;;;;-1:-1:-1;;;10600:62:0;;11579:2:1;10600:62:0;;;11561:21:1;11618:2;11598:18;;;11591:30;11657:27;11637:18;;;11630:55;11702:18;;10600:62:0;11551:175:1;10600:62:0;4083:10;10675:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;10675:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;10675:53:0;;;;;;;;;;10744:48;;7874:41:1;;;10675:42:0;;4083:10;10744:48;;7847:18:1;10744:48:0;;;;;;;10505:295;;:::o;21984:229::-;22033:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;22033:34::-;22025:90;;;;-1:-1:-1;;;22025:90:0;;;;;;;:::i;:::-;22135:10;;;;22134:11;22126:20;;;;;;22157:10;:17;;-1:-1:-1;;22157:17:0;22170:4;22157:17;;;22190:15;;;;22157:10;;22190:15;21984:229::o;11399:285::-;11531:41;4083:10;11550:12;4003:98;11531:41;11523:103;;;;-1:-1:-1;;;11523:103:0;;;;;;;:::i;:::-;11637:39;11651:4;11657:2;11661:7;11670:5;11637:13;:39::i;:::-;11399:285;;;;:::o;22225:525::-;17986:4;;22280;;;;17986;;17985:5;17977:49;;;;-1:-1:-1;;;17977:49:0;;;;;;;:::i;:::-;18037:4;:11;;-1:-1:-1;;18037:11:0;18044:4;18037:11;;;;;;22311:14;::::1;18037:11:::0;22311:14:::1;22310:15;22302:24;;;::::0;::::1;;22345:10;::::0;::::1;;22337:47;;;::::0;-1:-1:-1;;;22337:47:0;;10409:2:1;22337:47:0::1;::::0;::::1;10391:21:1::0;10448:2;10428:18;;;10421:30;10487:26;10467:18;;;10460:54;10531:18;;22337:47:0::1;10381:174:1::0;22337:47:0::1;22418:5;22403:10;;22414:1;22403:12;;;;:::i;:::-;:20;;22395:62;;;::::0;-1:-1:-1;;;22395:62:0;;20907:2:1;22395:62:0::1;::::0;::::1;20889:21:1::0;20946:2;20926:18;;;20919:30;20985:31;20965:18;;;20958:59;21034:18;;22395:62:0::1;20879:179:1::0;22395:62:0::1;22489:5;;22476:9;:18;;22468:62;;;::::0;-1:-1:-1;;;22468:62:0;;12288:2:1;22468:62:0::1;::::0;::::1;12270:21:1::0;12327:2;12307:18;;;12300:30;12366:33;12346:18;;;12339:61;12417:18;;22468:62:0::1;12260:181:1::0;22468:62:0::1;22560:7;::::0;:33:::1;::::0;22542:12:::1;::::0;22560:7:::1;::::0;::::1;-1:-1:-1::0;;;;;22560:7:0::1;::::0;22579:9:::1;::::0;22542:12;22560:33;22542:12;22560:33;22579:9;22560:7;:33:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22541:52;;;22612:7;22604:16;;;::::0;::::1;;22631:13;22647:10;;22660:1;22647:14;;;;:::i;:::-;22631:30:::0;-1:-1:-1;22672:29:0::1;4083:10:::0;22692:8:::1;22672:5;:29::i;:::-;22728:4;::::0;-1:-1:-1;22733:8:0;-1:-1:-1;;18071:4:0;:12;;-1:-1:-1;;18071:12:0;;;22225:525;;:::o;9498:256::-;9571:13;9605:16;9613:7;9605;:16::i;:::-;9597:76;;;;-1:-1:-1;;;9597:76:0;;17749:2:1;9597:76:0;;;17731:21:1;17788:2;17768:18;;;17761:30;17827:34;17807:18;;;17800:62;-1:-1:-1;;;17878:18:1;;;17871:45;17933:19;;9597:76:0;17721:237:1;9597:76:0;9715:10;:8;:10::i;:::-;9727:17;9736:7;9727:8;:17::i;:::-;9698:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9684:62;;9498:256;;;:::o;23160:169::-;23234:39;23263:9;23234:10;:24;4083:10;23245:12;4003:98;23234:39;4083:10;23207:24;;;;:10;:24;;;;;;:66;;;;23289:32;;23311:9;;23289:32;;;23160:169::o;5658:235::-;5353:7;5380:12;;;;;;;;;;:22;;;5752:41;;5760:18;5287:123;5752:41;5744:102;;;;-1:-1:-1;;;5744:102:0;;13830:2:1;5744:102:0;;;13812:21:1;13869:2;13849:18;;;13842:30;13908:34;13888:18;;;13881:62;-1:-1:-1;;;13959:18:1;;;13952:46;14015:19;;5744:102:0;13802:238:1;18266:195:0;18332:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;18332:34::-;18324:94;;;;-1:-1:-1;;;18324:94:0;;13061:2:1;18324:94:0;;;13043:21:1;13100:2;13080:18;;;13073:30;13139:34;13119:18;;;13112:62;-1:-1:-1;;;13190:18:1;;;13183:45;13245:19;;18324:94:0;13033:237:1;18324:94:0;18429:14;:24;;;;;;;-1:-1:-1;;18429:24:0;;;;;;;;;18266:195::o;7838:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20748:1228::-;17986:4;;20811;;17986;;17985:5;17977:49;;;;-1:-1:-1;;;17977:49:0;;;;;;;:::i;:::-;18037:4;:11;;-1:-1:-1;;18037:11:0;18044:4;18037:11;;;;;;20836:14;::::1;18037:11:::0;20836:14:::1;20835:15;20827:24;;;::::0;::::1;;20870:16;20878:7;20870;:16::i;:::-;20862:53;;;::::0;-1:-1:-1;;;20862:53:0;;13477:2:1;20862:53:0::1;::::0;::::1;13459:21:1::0;13516:2;13496:18;;;13489:30;-1:-1:-1;;;13535:18:1;;;13528:54;13599:18;;20862:53:0::1;13449:174:1::0;20862:53:0::1;20926:20;20949:19:::0;;;:10:::1;:19;::::0;;;;;;;;20926:42;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;20926:42:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;;::::0;;;;;20979:62:::1;;;::::0;-1:-1:-1;;;20979:62:0;;18984:2:1;20979:62:0::1;::::0;::::1;18966:21:1::0;19023:2;19003:18;;;18996:30;-1:-1:-1;;;19042:18:1;;;19035:55;19107:18;;20979:62:0::1;18956:175:1::0;20979:62:0::1;21060:41;4083:10:::0;21079:12:::1;4003:98:::0;21060:41:::1;21052:95;;;::::0;-1:-1:-1;;;21052:95:0;;18165:2:1;21052:95:0::1;::::0;::::1;18147:21:1::0;18204:2;18184:18;;;18177:30;18243:34;18223:18;;;18216:62;-1:-1:-1;;;18294:18:1;;;18287:39;18343:19;;21052:95:0::1;18137:231:1::0;21052:95:0::1;21194:16;::::0;::::1;::::0;21177:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;21166:24:0::1;;::::0;;;:10:::1;:24;::::0;;;:44:::1;;21158:96;;;::::0;-1:-1:-1;;;21158:96:0;;18575:2:1;21158:96:0::1;::::0;::::1;18557:21:1::0;18614:2;18594:18;;;18587:30;18653:34;18633:18;;;18626:62;-1:-1:-1;;;18704:18:1;;;18697:38;18752:19;;21158:96:0::1;18547:230:1::0;21158:96:0::1;21272:19;::::0;;;:10:::1;:19;::::0;;;;21265:26;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;21265:26:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;21326:16:::1;::::0;::::1;::::0;:22:::1;::::0;21345:3:::1;::::0;21326:22:::1;:::i;:::-;:41;;;;:::i;:::-;21434:16;::::0;::::1;::::0;21416:12:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;21405:24:0::1;;::::0;;;:10:::1;:24;::::0;;;21302:65;;-1:-1:-1;21405:46:0::1;::::0;:24;:28:::1;:46::i;:::-;21389:12;::::0;;::::1;::::0;-1:-1:-1;;;;;21378:24:0::1;;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;21518:16:::1;::::0;::::1;::::0;21489:46:::1;::::0;21518:16;;21378:10;4083;21500:12:::1;4003:98:::0;21489:46:::1;4083:10:::0;21462:24:::1;::::0;;;:10:::1;:24;::::0;;;;;;:73;;;;21573:43:::1;::::0;21602:13;;21462:10;;:24;21584:12:::1;4003:98:::0;21573:43:::1;4083:10:::0;21546:24:::1;::::0;;;:10:::1;:24;::::0;;;;;:70;;;;21646:7:::1;::::0;:37;;21546:24;;21646:7:::1;::::0;::::1;-1:-1:-1::0;;;;;21646:7:0::1;::::0;21665:13;;21546:24;21646:37;21546:24;21646:37;21665:13;21646:7;:37:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21627:56;;;21702:7;21694:16;;;::::0;::::1;;21721:43;21731:5;:11;;;21743:5;:12;;;21756:7;21721:9;:43::i;:::-;21780:35;::::0;21807:7;;4083:10;;21780:35:::1;::::0;;;::::1;21863:16;::::0;::::1;::::0;21850:12:::1;::::0;::::1;::::0;-1:-1:-1;;;;;21831:57:0::1;4083:10:::0;-1:-1:-1;;;;;21831:57:0::1;;21880:7;21831:57;;;;8335:25:1::0;;8323:2;8308:18;;8290:76;21831:57:0::1;;;;;;;;21938:7;21925:5;:12;;;-1:-1:-1::0;;;;;21904:42:0::1;21913:5;:11;;;-1:-1:-1::0;;;;;21904:42:0::1;;;;;;;;;;;-1:-1:-1::0;;18071:4:0;:12;;-1:-1:-1;;18071:12:0;;;-1:-1:-1;21964:4:0::1;::::0;20748:1228;-1:-1:-1;;20748:1228:0:o;18701:247::-;18768:4;18792:34;-1:-1:-1;;;;;;;;;;;4083:10:0;5140:139;:::i;18792:34::-;18784:98;;;;-1:-1:-1;;;18784:98:0;;9989:2:1;18784:98:0;;;9971:21:1;10028:2;10008:18;;;10001:30;10067:34;10047:18;;;10040:62;-1:-1:-1;;;10118:18:1;;;10111:49;10177:19;;18784:98:0;9961:241:1;18784:98:0;-1:-1:-1;18893:7:0;:25;;-1:-1:-1;;;;;18893:25:0;;;;;-1:-1:-1;;;;;;18893:25:0;;;;;;;;;:7;;18701:247::o;8401:307::-;8518:4;-1:-1:-1;;;;;;8542:40:0;;-1:-1:-1;;;8542:40:0;;:105;;-1:-1:-1;;;;;;;8599:48:0;;-1:-1:-1;;;8599:48:0;8542:105;:158;;;;8664:36;8688:11;8664:23;:36::i;11972:127::-;12037:4;12061:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12061:16:0;:30;;;11972:127::o;16236:174::-;16311:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;16311:29:0;-1:-1:-1;;;;;16311:29:0;;;;;;;;:24;;16365:23;16311:24;16365:14;:23::i;:::-;-1:-1:-1;;;;;16356:46:0;;;;;;;;;;;16236:174;;:::o;12107:348::-;12200:4;12225:16;12233:7;12225;:16::i;:::-;12217:73;;;;-1:-1:-1;;;12217:73:0;;12648:2:1;12217:73:0;;;12630:21:1;12687:2;12667:18;;;12660:30;12726:34;12706:18;;;12699:62;-1:-1:-1;;;12777:18:1;;;12770:42;12829:19;;12217:73:0;12620:234:1;12217:73:0;12301:13;12317:23;12332:7;12317:14;:23::i;:::-;12301:39;;12370:5;-1:-1:-1;;;;;12359:16:0;:7;-1:-1:-1;;;;;12359:16:0;;:51;;;;12403:7;-1:-1:-1;;;;;12379:31:0;:20;12391:7;12379:11;:20::i;:::-;-1:-1:-1;;;;;12379:31:0;;12359:51;:87;;;-1:-1:-1;;;;;;10929:25:0;;;10905:4;10929:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;12414:32;12351:96;12107:348;-1:-1:-1;;;;12107:348:0:o;15675:553::-;15800:4;-1:-1:-1;;;;;15773:31:0;:23;15788:7;15773:14;:23::i;:::-;-1:-1:-1;;;;;15773:31:0;;15765:85;;;;-1:-1:-1;;;15765:85:0;;16979:2:1;15765:85:0;;;16961:21:1;17018:2;16998:18;;;16991:30;17057:34;17037:18;;;17030:62;-1:-1:-1;;;17108:18:1;;;17101:39;17157:19;;15765:85:0;16951:231:1;15765:85:0;-1:-1:-1;;;;;15869:16:0;;15861:65;;;;-1:-1:-1;;;15861:65:0;;11174:2:1;15861:65:0;;;11156:21:1;11213:2;11193:18;;;11186:30;11252:34;11232:18;;;11225:62;-1:-1:-1;;;11303:18:1;;;11296:34;11347:19;;15861:65:0;11146:226:1;15861:65:0;15991:29;16008:1;16012:7;15991:8;:29::i;:::-;16041;16056:4;16062:7;16041:14;:29::i;:::-;16081:24;16093:2;16097:7;16081:11;:24::i;:::-;-1:-1:-1;;;;;16118:15:0;;;;;;:9;:15;;;;;:20;;16137:1;;16118:15;:20;;16137:1;;16118:20;:::i;:::-;;;;-1:-1:-1;;;;;;;16149:13:0;;;;;;:9;:13;;;;;:18;;16166:1;;16149:13;:18;;16166:1;;16149:18;:::i;:::-;;;;-1:-1:-1;;16193:27:0;;16212:7;;-1:-1:-1;;;;;16193:27:0;;;;;;;;;;;;;15675:553;;;:::o;14395:485::-;-1:-1:-1;;;;;14475:16:0;;14467:61;;;;-1:-1:-1;;;14467:61:0;;15846:2:1;14467:61:0;;;15828:21:1;;;15865:18;;;15858:30;15924:34;15904:18;;;15897:62;15976:18;;14467:61:0;15818:182:1;14467:61:0;14548:16;14556:7;14548;:16::i;:::-;14547:17;14539:58;;;;-1:-1:-1;;;14539:58:0;;9632:2:1;14539:58:0;;;9614:21:1;9671:2;9651:18;;;9644:30;9710;9690:18;;;9683:58;9758:18;;14539:58:0;9604:178:1;14539:58:0;-1:-1:-1;;;;;14668:13:0;;;;;;:9;:13;;;;;:18;;14685:1;;14668:13;:18;;14685:1;;14668:18;:::i;:::-;;;;;;;;14711:1;14697:10;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;14723:18:0;;;;;;:14;:18;;;;;;;:32;;;;;;;;;;;;;;;;14766:24;14738:2;14747:7;14766:11;:24::i;:::-;14806:17;;-1:-1:-1;;;;;14806:17:0;;;14811:7;;14806:17;;;;;14839:33;;14864:7;;-1:-1:-1;;;;;14839:33:0;;;14856:1;;14839:33;;14856:1;;14839:33;14395:485;;:::o;1096:124::-;1154:7;1187:1;1182;:6;;1174:15;;;;;;1207:5;1211:1;1207;:5;:::i;:::-;1200:12;1096:124;-1:-1:-1;;;1096:124:0:o;6450:229::-;6525:22;6533:4;6539:7;6525;:22::i;:::-;6520:152;;6564:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6564:29:0;;;;;;;;;:36;;-1:-1:-1;;6564:36:0;6596:4;6564:36;;;6647:12;4083:10;;4003:98;6647:12;-1:-1:-1;;;;;6620:40:0;6638:7;-1:-1:-1;;;;;6620:40:0;6632:4;6620:40;;;;;;;;;;6450:229;;:::o;6687:230::-;6762:22;6770:4;6776:7;6762;:22::i;:::-;6758:152;;;6833:5;6801:12;;;;;;;;;;;-1:-1:-1;;;;;6801:29:0;;;;;;;;;;:37;;-1:-1:-1;;6801:37:0;;;6858:40;4083:10;;6801:12;;6858:40;;6833:5;6858:40;6687:230;;:::o;1295:142::-;1353:9;1379:5;1383:1;1379;:5;:::i;:::-;1375:9;;1408:1;1403;:6;;1395:15;;;;;11692:272;11806:28;11816:4;11822:2;11826:7;11806:9;:28::i;:::-;11853:48;11876:4;11882:2;11886:7;11895:5;11853:22;:48::i;:::-;11845:111;;;;-1:-1:-1;;;11845:111:0;;;;;;;:::i;9762:99::-;9813:13;9846:7;9839:14;;;;;:::i;12839:545::-;12895:13;12938:10;12934:53;;-1:-1:-1;;12965:10:0;;;;;;;;;;;;-1:-1:-1;;;12965:10:0;;;;;12839:545::o;12934:53::-;13012:5;12997:12;13053:78;13060:9;;13053:78;;13086:8;;;;:::i;:::-;;-1:-1:-1;13109:10:0;;-1:-1:-1;13117:2:0;13109:10;;:::i;:::-;;;13053:78;;;13141:19;13173:6;13163:17;;;;;;-1:-1:-1;;;13163:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13163:17:0;;13141:39;;13191:154;13198:10;;13191:154;;13225:11;13235:1;13225:11;;:::i;:::-;;-1:-1:-1;13294:10:0;13302:2;13294:5;:10;:::i;:::-;13281:24;;:2;:24;:::i;:::-;13268:39;;13251:6;13258;13251:14;;;;;;-1:-1:-1;;;13251:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;13251:56:0;;;;;;;;-1:-1:-1;13322:11:0;13331:2;13322:11;;:::i;:::-;;;13191:154;;4915:217;5000:4;-1:-1:-1;;;;;;5024:47:0;;-1:-1:-1;;;5024:47:0;;:100;;-1:-1:-1;;;;;;;;;;4265:40:0;;;5088:36;4156:157;13696:691;13781:17;;;;:7;:17;;;;;;-1:-1:-1;;;;;13781:26:0;;;:17;;:26;13773:55;;;;-1:-1:-1;;;13773:55:0;;19338:2:1;13773:55:0;;;19320:21:1;19377:2;19357:18;;;19350:30;-1:-1:-1;;;19396:18:1;;;19389:46;19452:18;;13773:55:0;19310:166:1;13773:55:0;13846:17;;;;:7;:17;;;;;;;;13839:24;;-1:-1:-1;;;;;;13839:24:0;;;;;;13881:10;:20;;;;;13874:27;;;13839:24;13874:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13941:14;:24;;;;;;-1:-1:-1;;;;;14001:17:0;;;;:10;:17;;;;;;:24;13941;;13846:17;14001:31;;:28;:31::i;:::-;13976:56;;14067:18;14049:14;:36;14045:247;;-1:-1:-1;;;;;14122:17:0;;14102;14122;;;:10;:17;;;;;:33;;14140:14;;14122:33;;;;-1:-1:-1;;;14122:33:0;;;;;;;;;;;;;;;;;14102:53;;14210:9;14170:10;:17;14181:5;-1:-1:-1;;;;;14170:17:0;-1:-1:-1;;;;;14170:17:0;;;;;;;;;;;;14188:18;14170:37;;;;;;-1:-1:-1;;;14170:37:0;;;;;;;;;;;;;;;;;;;;:49;;;;14234:25;;;:14;:25;;;;;:46;;;14045:247;-1:-1:-1;;;;;14304:17:0;;;;;;:10;:17;;;;;:23;;;;;-1:-1:-1;;;14304:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;14370:8;14357:12;4083:10;;4003:98;14357:12;-1:-1:-1;;;;;14343:36:0;;;;;;;;;;;13696:691;;;;:::o;13394:294::-;13503:1;13474:17;;;:7;:17;;;;;;-1:-1:-1;;;;;13474:17:0;:31;13466:70;;;;-1:-1:-1;;;13466:70:0;;11933:2:1;13466:70:0;;;11915:21:1;11972:2;11952:18;;;11945:30;12011:28;11991:18;;;11984:56;12057:18;;13466:70:0;11905:176:1;13466:70:0;13547:17;;;;:7;:17;;;;;;;;:23;;-1:-1:-1;;;;;;13547:23:0;-1:-1:-1;;;;;13547:23:0;;;;;;;;13583:15;;;:10;:15;;;;;:30;;-1:-1:-1;13583:30:0;;;;;;;;;;;;;;;13651:15;;:22;;:29;;:26;:29::i;:::-;13624:24;;;;:14;:24;;;;;;:56;-1:-1:-1;13394:294:0:o;16418:843::-;16539:4;-1:-1:-1;;;;;16565:13:0;;217:20;256:8;16561:693;;16601:72;;-1:-1:-1;;;16601:72:0;;-1:-1:-1;;;;;16601:36:0;;;;;:72;;4083:10;;16652:4;;16658:7;;16667:5;;16601:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16601:72:0;;;;;;;;-1:-1:-1;;16601:72:0;;;;;;;;;;;;:::i;:::-;;;16597:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16847:13:0;;16843:341;;16890:60;;-1:-1:-1;;;16890:60:0;;;;;;;:::i;16843:341::-;17134:6;17128:13;17119:6;17115:2;17111:15;17104:38;16597:602;-1:-1:-1;;;;;;16724:55:0;-1:-1:-1;;;16724:55:0;;-1:-1:-1;16717:62:0;;16561:693;-1:-1:-1;17238:4:0;16418:843;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:2;;978:1;975;968:12;993:196;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:2;;;1126:6;1118;1111:22;1073:2;1154:29;1173:9;1154:29;:::i;1194:270::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:29;1391:9;1372:29;:::i;:::-;1362:39;;1420:38;1454:2;1443:9;1439:18;1420:38;:::i;:::-;1410:48;;1281:183;;;;;:::o;1469:338::-;1546:6;1554;1562;1615:2;1603:9;1594:7;1590:23;1586:32;1583:2;;;1636:6;1628;1621:22;1583:2;1664:29;1683:9;1664:29;:::i;:::-;1654:39;;1712:38;1746:2;1735:9;1731:18;1712:38;:::i;:::-;1702:48;;1797:2;1786:9;1782:18;1769:32;1759:42;;1573:234;;;;;:::o;1812:696::-;1907:6;1915;1923;1931;1984:3;1972:9;1963:7;1959:23;1955:33;1952:2;;;2006:6;1998;1991:22;1952:2;2034:29;2053:9;2034:29;:::i;:::-;2024:39;;2082:38;2116:2;2105:9;2101:18;2082:38;:::i;:::-;2072:48;;2167:2;2156:9;2152:18;2139:32;2129:42;;2222:2;2211:9;2207:18;2194:32;2249:18;2241:6;2238:30;2235:2;;;2286:6;2278;2271:22;2235:2;2314:22;;2367:4;2359:13;;2355:27;-1:-1:-1;2345:2:1;;2401:6;2393;2386:22;2345:2;2429:73;2494:7;2489:2;2476:16;2471:2;2467;2463:11;2429:73;:::i;:::-;2419:83;;;1942:566;;;;;;;:::o;2513:264::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2660:6;2652;2645:22;2607:2;2688:29;2707:9;2688:29;:::i;:::-;2678:39;;2736:35;2767:2;2756:9;2752:18;2736:35;:::i;2782:264::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:29;2979:9;2960:29;:::i;:::-;2950:39;3036:2;3021:18;;;;3008:32;;-1:-1:-1;;;2869:177:1:o;3051:190::-;3107:6;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;3181:6;3173;3166:22;3128:2;3209:26;3225:9;3209:26;:::i;3246:190::-;3305:6;3358:2;3346:9;3337:7;3333:23;3329:32;3326:2;;;3379:6;3371;3364:22;3326:2;-1:-1:-1;3407:23:1;;3316:120;-1:-1:-1;3316:120:1:o;3441:264::-;3509:6;3517;3570:2;3558:9;3549:7;3545:23;3541:32;3538:2;;;3591:6;3583;3576:22;3538:2;3632:9;3619:23;3609:33;;3661:38;3695:2;3684:9;3680:18;3661:38;:::i;3710:255::-;3768:6;3821:2;3809:9;3800:7;3796:23;3792:32;3789:2;;;3842:6;3834;3827:22;3789:2;3886:9;3873:23;3905:30;3929:5;3905:30;:::i;3970:259::-;4039:6;4092:2;4080:9;4071:7;4067:23;4063:32;4060:2;;;4113:6;4105;4098:22;4060:2;4150:9;4144:16;4169:30;4193:5;4169:30;:::i;4234:480::-;4303:6;4356:2;4344:9;4335:7;4331:23;4327:32;4324:2;;;4377:6;4369;4362:22;4324:2;4422:9;4409:23;4455:18;4447:6;4444:30;4441:2;;;4492:6;4484;4477:22;4441:2;4520:22;;4573:4;4565:13;;4561:27;-1:-1:-1;4551:2:1;;4607:6;4599;4592:22;4551:2;4635:73;4700:7;4695:2;4682:16;4677:2;4673;4669:11;4635:73;:::i;5183:258::-;5251:6;5259;5312:2;5300:9;5291:7;5287:23;5283:32;5280:2;;;5333:6;5325;5318:22;5280:2;-1:-1:-1;;5361:23:1;;;5431:2;5416:18;;;5403:32;;-1:-1:-1;5270:171:1:o;5446:257::-;5487:3;5525:5;5519:12;5552:6;5547:3;5540:19;5568:63;5624:6;5617:4;5612:3;5608:14;5601:4;5594:5;5590:16;5568:63;:::i;:::-;5685:2;5664:15;-1:-1:-1;;5660:29:1;5651:39;;;;5692:4;5647:50;;5495:208;-1:-1:-1;;5495:208:1:o;5708:470::-;5887:3;5925:6;5919:13;5941:53;5987:6;5982:3;5975:4;5967:6;5963:17;5941:53;:::i;:::-;6057:13;;6016:16;;;;6079:57;6057:13;6016:16;6113:4;6101:17;;6079:57;:::i;:::-;6152:20;;5895:283;-1:-1:-1;;;;5895:283:1:o;6601:488::-;-1:-1:-1;;;;;6870:15:1;;;6852:34;;6922:15;;6917:2;6902:18;;6895:43;6969:2;6954:18;;6947:34;;;7017:3;7012:2;6997:18;;6990:31;;;6795:4;;7038:45;;7063:19;;7055:6;7038:45;:::i;:::-;7030:53;6804:285;-1:-1:-1;;;;;;6804:285:1:o;7094:635::-;7265:2;7317:21;;;7387:13;;7290:18;;;7409:22;;;7236:4;;7265:2;7488:15;;;;7462:2;7447:18;;;7236:4;7534:169;7548:6;7545:1;7542:13;7534:169;;;7609:13;;7597:26;;7678:15;;;;7643:12;;;;7570:1;7563:9;7534:169;;;-1:-1:-1;7720:3:1;;7245:484;-1:-1:-1;;;;;;7245:484:1:o;8371:219::-;8520:2;8509:9;8502:21;8483:4;8540:44;8580:2;8569:9;8565:18;8557:6;8540:44;:::i;9011:414::-;9213:2;9195:21;;;9252:2;9232:18;;;9225:30;9291:34;9286:2;9271:18;;9264:62;-1:-1:-1;;;9357:2:1;9342:18;;9335:48;9415:3;9400:19;;9185:240::o;10560:407::-;10762:2;10744:21;;;10801:2;10781:18;;;10774:30;10840:34;10835:2;10820:18;;10813:62;-1:-1:-1;;;10906:2:1;10891:18;;10884:41;10957:3;10942:19;;10734:233::o;19481:399::-;19683:2;19665:21;;;19722:2;19702:18;;;19695:30;19761:34;19756:2;19741:18;;19734:62;-1:-1:-1;;;19827:2:1;19812:18;;19805:33;19870:3;19855:19;;19655:225::o;20287:413::-;20489:2;20471:21;;;20528:2;20508:18;;;20501:30;20567:34;20562:2;20547:18;;20540:62;-1:-1:-1;;;20633:2:1;20618:18;;20611:47;20690:3;20675:19;;20461:239::o;21063:355::-;21265:2;21247:21;;;21304:2;21284:18;;;21277:30;21343:33;21338:2;21323:18;;21316:61;21409:2;21394:18;;21237:181::o;22545:128::-;22585:3;22616:1;22612:6;22609:1;22606:13;22603:2;;;22622:18;;:::i;:::-;-1:-1:-1;22658:9:1;;22593:80::o;22678:120::-;22718:1;22744;22734:2;;22749:18;;:::i;:::-;-1:-1:-1;22783:9:1;;22724:74::o;22803:168::-;22843:7;22909:1;22905;22901:6;22897:14;22894:1;22891:21;22886:1;22879:9;22872:17;22868:45;22865:2;;;22916:18;;:::i;:::-;-1:-1:-1;22956:9:1;;22855:116::o;22976:125::-;23016:4;23044:1;23041;23038:8;23035:2;;;23049:18;;:::i;:::-;-1:-1:-1;23086:9:1;;23025:76::o;23106:258::-;23178:1;23188:113;23202:6;23199:1;23196:13;23188:113;;;23278:11;;;23272:18;23259:11;;;23252:39;23224:2;23217:10;23188:113;;;23319:6;23316:1;23313:13;23310:2;;;-1:-1:-1;;23354:1:1;23336:16;;23329:27;23159:205::o;23369:380::-;23448:1;23444:12;;;;23491;;;23512:2;;23566:4;23558:6;23554:17;23544:27;;23512:2;23619;23611:6;23608:14;23588:18;23585:38;23582:2;;;23665:10;23660:3;23656:20;23653:1;23646:31;23700:4;23697:1;23690:15;23728:4;23725:1;23718:15;23582:2;;23424:325;;;:::o;23754:135::-;23793:3;-1:-1:-1;;23814:17:1;;23811:2;;;23834:18;;:::i;:::-;-1:-1:-1;23881:1:1;23870:13;;23801:88::o;23894:112::-;23926:1;23952;23942:2;;23957:18;;:::i;:::-;-1:-1:-1;23991:9:1;;23932:74::o;24011:127::-;24072:10;24067:3;24063:20;24060:1;24053:31;24103:4;24100:1;24093:15;24127:4;24124:1;24117:15;24143:127;24204:10;24199:3;24195:20;24192:1;24185:31;24235:4;24232:1;24225:15;24259:4;24256:1;24249:15;24275:127;24336:10;24331:3;24327:20;24324:1;24317:31;24367:4;24364:1;24357:15;24391:4;24388:1;24381:15;24407:131;-1:-1:-1;;;;;;24481:32:1;;24471:43;;24461:2;;24528:1;24525;24518:12;24461:2;24451:87;:::o

Swarm Source

ipfs://ca5539928883c20377811d02461061aade6362756c71febb43e89df712722596

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  ]
[ 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.