MATIC Price: $0.602259 (-1.10%)
Gas: 30 GWei
 

Overview

MATIC Balance

Polygon PoS Chain LogoPolygon PoS Chain LogoPolygon PoS Chain Logo0 MATIC

MATIC Value

$0.00

Token Holdings

Sponsored

Transaction Hash
Method
Block
From
To
Value
Sell NFT350545162022-11-01 5:01:27592 days ago1667278887IN
0x2634275A...282df75Cb
0.0006 MATIC0.0046883951.08076195
Sell NFT350543742022-11-01 4:56:35592 days ago1667278595IN
0x2634275A...282df75Cb
0 MATIC0.0017527258.24356696
Sell NFT350543742022-11-01 4:56:35592 days ago1667278595IN
0x2634275A...282df75Cb
0.0006 MATIC0.0017950259.24760195
Sell NFT350543742022-11-01 4:56:35592 days ago1667278595IN
0x2634275A...282df75Cb
0.0006 MATIC0.0018122459.81597887
List NFT341490802022-10-10 1:31:08614 days ago1665365468IN
0x2634275A...282df75Cb
0 MATIC0.0008057130.00000001
List NFT341490362022-10-10 1:29:36614 days ago1665365376IN
0x2634275A...282df75Cb
0 MATIC0.0029533230.00000001
List NFT341490142022-10-10 1:28:52614 days ago1665365332IN
0x2634275A...282df75Cb
0 MATIC0.0030973530.00000001
Mint NFT341489612022-10-10 1:27:02614 days ago1665365222IN
0x2634275A...282df75Cb
0 MATIC0.0123685530.00000001
List NFT341229082022-10-09 10:21:13614 days ago1665310873IN
0x2634275A...282df75Cb
0 MATIC0.0033286633.81656944
Mint NFT341228522022-10-09 10:18:19614 days ago1665310699IN
0x2634275A...282df75Cb
0 MATIC0.0140525532.72715967
List NFT341224512022-10-09 10:04:33614 days ago1665309873IN
0x2634275A...282df75Cb
0 MATIC0.0029533530.00000002
Sell NFT339871642022-10-06 3:22:16618 days ago1665026536IN
0x2634275A...282df75Cb
0.00000003 MATIC0.0009235230.55500001
List NFT339869332022-10-06 3:14:18618 days ago1665026058IN
0x2634275A...282df75Cb
0 MATIC0.0030966330.00000001
Mint NFT339867702022-10-06 3:08:34618 days ago1665025714IN
0x2634275A...282df75Cb
0 MATIC0.0123663930.00000001
List NFT339864132022-10-06 2:56:16618 days ago1665024976IN
0x2634275A...282df75Cb
0 MATIC0.0030966330.00000001
Mint NFT339861732022-10-06 2:47:58618 days ago1665024478IN
0x2634275A...282df75Cb
0 MATIC0.0123663930.00000001
List NFT339857402022-10-06 2:33:08618 days ago1665023588IN
0x2634275A...282df75Cb
0 MATIC0.0036932730.00000001
Mint NFT339855112022-10-06 2:25:14618 days ago1665023114IN
0x2634275A...282df75Cb
0 MATIC0.0123663930.00000001
Mint NFT339843822022-10-06 1:46:20618 days ago1665020780IN
0x2634275A...282df75Cb
0 MATIC0.0128793930.00000001
Sell NFT339514982022-10-05 6:37:44619 days ago1664951864IN
0x2634275A...282df75Cb
0.00003 MATIC0.003410130.00000001
List NFT339498472022-10-05 5:37:36619 days ago1664948256IN
0x2634275A...282df75Cb
0 MATIC0.0029595130.07
Mint NFT339498302022-10-05 5:36:28619 days ago1664948188IN
0x2634275A...282df75Cb
0 MATIC0.0128793930.00000001
List NFT339494392022-10-05 5:22:44619 days ago1664947364IN
0x2634275A...282df75Cb
0 MATIC0.0040629930.00000001
Mint NFT339491852022-10-05 5:14:04619 days ago1664946844IN
0x2634275A...282df75Cb
0 MATIC0.0133923930.00000001
Market Setup339487412022-10-05 4:58:48619 days ago1664945928IN
0x2634275A...282df75Cb
0 MATIC0.0013928730.00000001
View all transactions

Latest 4 internal transactions

Parent Transaction Hash Block From To Value
350545162022-11-01 5:01:27592 days ago1667278887
0x2634275A...282df75Cb
0.00006 MATIC
350545162022-11-01 5:01:27592 days ago1667278887
0x2634275A...282df75Cb
0.00054 MATIC
339514982022-10-05 6:37:44619 days ago1664951864
0x2634275A...282df75Cb
0.000003 MATIC
339514982022-10-05 6:37:44619 days ago1664951864
0x2634275A...282df75Cb
0.000027 MATIC
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x1eb2cF60...56637031A
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
NFTMarketplace

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-08-22
*/

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

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

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "OZ:1");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "OZ:2");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "OZ:3");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "OZ:4");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "OZ:5");
        require(isContract(target), "OZ:6");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "OZ:7");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "OZ:8");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "OZ:9");
    }
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "OZ:10");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "OZ:11");
        return string(buffer);
    }
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    string private _name;
    string private _symbol;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) 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), "OZ:12");
        return _balances[owner];
    }
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "OZ:13");
        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 tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "OZ:14");
        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "OZ:15"
        );
        _approve(to, tokenId);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);
        return _tokenApprovals[tokenId];
    }
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "OZ:16");
        _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), "OZ:17");
        _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), "OZ:18");
    }
    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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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),
            "OZ:19"
        );
    }
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "OZ:20");
        require(!_exists(tokenId), "OZ:21");
        _beforeTokenTransfer(address(0), to, tokenId);
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(address(0), to, tokenId);
        _afterTokenTransfer(address(0), to, 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];
        emit Transfer(owner, address(0), tokenId);
        _afterTokenTransfer(owner, address(0), tokenId);
    }
    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "OZ:22");
        require(to != address(0), "OZ:23");
        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(from, to, tokenId);
        _afterTokenTransfer(from, to, tokenId);
    }
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
    function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
        require(owner != operator, "OZ:24");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "OZ:25");
    }
    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.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("OZ:26");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
    function _afterTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
}

library Counters {
    struct Counter {
        uint256 _value;
    }
    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }
    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }
    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "OZ:27");
        unchecked {
            counter._value = value - 1;
        }
    }
    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "OZ:28");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;
    mapping(uint256 => string) private _tokenURIs;
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return super.tokenURI(tokenId);
    }
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "OZ:29");
        _tokenURIs[tokenId] = _tokenURI;
    }
    function _burn(uint256 tokenId) internal virtual override {
        super._burn(tokenId);
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _transferOwnership(_msgSender());
    }
    modifier onlyOwner() {
        _checkOwner();
        _;
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "OZ:30");
    }
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "OZ:31");
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract NFTMarketplace is ReentrancyGuard, ERC721URIStorage, Ownable{
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    Counters.Counter public _bidIds;
    address _scAddress;
    string public _tokenName;
    string public _tokenSymbol;
    uint256 private _maxTokenSupply;
    address payable marketOwner;
    mapping (uint256 => string) _tokenIDURI;
    uint256 totalUserMPWalletFunds;
    mapping(address => uint256) private mpWallets;
    struct MarketItem {
        uint256 tokenId;
        address nftContract;
        string uri;
        address payable nftCreator;
        address payable nftOwner;
        uint256 price;
        bool forSale;
    }
    mapping(uint256 => MarketItem) private MarketItemDatabase;
    event MarketItemCreated(
        uint256 indexed tokenId,
        address indexed nftContract,
        string uri,
        address creator,
        address owner,
        uint256 price,
        bool forSale
    );
    constructor(string memory tokenName, string memory tokenSymbol, uint256 gotMaxTokenSupply) ERC721(tokenName, tokenSymbol){
        marketOwner = payable(msg.sender);
        require(gotMaxTokenSupply > 0, "ERR:1");
        _maxTokenSupply = gotMaxTokenSupply;
        _tokenName = tokenName;
        _tokenSymbol = tokenSymbol;
    }
    function marketSetup(address scAddress) public onlyOwner{
        _scAddress = scAddress;
    }
    function totalSupply() public view returns (uint256){
        return (_maxTokenSupply);
    }
    function getNewTokenID() public view returns (uint256){
        return _tokenIds.current();
    }
    function addTokens(uint256 gotNewMaxTokenSupply) public onlyOwner{
        require(msg.sender == marketOwner, "ERR:2");
        require(gotNewMaxTokenSupply > _maxTokenSupply, "ERR:3");
        _maxTokenSupply = gotNewMaxTokenSupply;
    }
    function fetchTokenIDURI(uint256 tokenID) public view returns (string memory){
        bytes memory tempTokenURI = bytes(_tokenIDURI[tokenID]);
        require(tempTokenURI.length > 0, "ERR:4");
        return _tokenIDURI[tokenID];
    }
    function mintNFT(string memory uri) public payable nonReentrant{
        require(_tokenIds.current() != _maxTokenSupply, "ERR:5");
        _tokenIds.increment();
        uint256 newTokenId = _tokenIds.current();
        _mint(msg.sender, newTokenId);
        _setTokenURI(newTokenId, uri);
        _tokenIDURI[newTokenId] = uri;
        MarketItemDatabase[newTokenId] = MarketItem(newTokenId, _scAddress, uri, payable(msg.sender), payable(address(0)), 0, false);
        emit MarketItemCreated(newTokenId, _scAddress, uri, msg.sender, address(0), 0, false);
    }
    function listNFT(uint256 tokenId, uint256 price) public {
        require((msg.sender == MarketItemDatabase[tokenId].nftCreator && MarketItemDatabase[tokenId].nftOwner == address(0)) || msg.sender == MarketItemDatabase[tokenId].nftOwner, "ERR:6");
        setApprovalForAll(_scAddress, true);
        MarketItemDatabase[tokenId].forSale = true;
        MarketItemDatabase[tokenId].price = price;
        IERC721(_scAddress).transferFrom(msg.sender, address(this), tokenId);
    }
    function unlistNFT(uint256 tokenId) public {
        require((msg.sender == MarketItemDatabase[tokenId].nftCreator && MarketItemDatabase[tokenId].nftOwner == address(0)) || msg.sender == MarketItemDatabase[tokenId].nftOwner || msg.sender == marketOwner, "ERR:7");
        require(MarketItemDatabase[tokenId].forSale == true, "ERR:8");
        setApprovalForAll(_scAddress, true);
        MarketItemDatabase[tokenId].forSale = false;
        MarketItemDatabase[tokenId].price = 0;
        if(MarketItemDatabase[tokenId].nftOwner == address(0)){
            IERC721(_scAddress).transferFrom(address(this), MarketItemDatabase[tokenId].nftCreator, tokenId);
        } else{
            IERC721(_scAddress).transferFrom(address(this), MarketItemDatabase[tokenId].nftOwner, tokenId);
        }
    }
    function sellNFT(uint256 tokenId, uint256 marketItemPrice, uint256 sellerGets, uint256 marketOwnerGets) public payable nonReentrant{
        require(msg.sender != marketOwner, "ERR:9");
        require(MarketItemDatabase[tokenId].forSale == true, "ERR:10");
        require(msg.value == marketItemPrice, "ERR:11");
        if(MarketItemDatabase[tokenId].nftOwner == address(0)){
            MarketItemDatabase[tokenId].nftCreator.transfer(sellerGets);
        } else{
            MarketItemDatabase[tokenId].nftOwner.transfer(sellerGets);
        }
        IERC721(_scAddress).transferFrom(address(this), msg.sender, tokenId);
        MarketItemDatabase[tokenId].nftOwner = payable(msg.sender);
        MarketItemDatabase[tokenId].forSale = false;
        MarketItemDatabase[tokenId].price = 0;
        payable(marketOwner).transfer(marketOwnerGets);
    }
    function transferNFT(address recieverAddress, uint256 tokenId, uint256 gotTransferFee) public payable nonReentrant{
        require((msg.sender == MarketItemDatabase[tokenId].nftCreator && MarketItemDatabase[tokenId].nftOwner == address(0)) || msg.sender == MarketItemDatabase[tokenId].nftOwner, "ERR:12");
        require(MarketItemDatabase[tokenId].forSale == false, "ERR:13");
        require(msg.value == gotTransferFee, "ERR:14");
        setApprovalForAll(_scAddress, true);
        MarketItemDatabase[tokenId].nftOwner = payable(recieverAddress);
        payable(marketOwner).transfer(gotTransferFee);
        IERC721(_scAddress).transferFrom(msg.sender, recieverAddress, tokenId);
    }
    function bidWalletIN() public payable nonReentrant returns(bool){
        require(msg.sender != marketOwner, "ERR:15");
        mpWallets[msg.sender] = mpWallets[msg.sender] + msg.value;
        payable(marketOwner).transfer(msg.value);
        totalUserMPWalletFunds = totalUserMPWalletFunds + msg.value;
        return true;
    }
    function bidWalletOUT(address sendTo, uint256 withdrawAmount) public payable nonReentrant onlyOwner{
        require(msg.value == withdrawAmount, "ERR:18");
        require(mpWallets[sendTo] >= withdrawAmount, "ERR:19");
        mpWallets[sendTo] = mpWallets[sendTo] - withdrawAmount;
        totalUserMPWalletFunds = totalUserMPWalletFunds - withdrawAmount;
        payable(sendTo).transfer(withdrawAmount);
    }
    function bidPassCheck(address userWallet, uint256 currBid, uint256 tokenID) public view returns(bool){
        require(mpWallets[userWallet] > 0, "ERR:20");
        require((userWallet == MarketItemDatabase[tokenID].nftCreator && MarketItemDatabase[tokenID].nftOwner != address(0)) || userWallet != MarketItemDatabase[tokenID].nftOwner, "ERR:21");
        if(mpWallets[userWallet] >= currBid){
            return true;
        } else{
            return false;
        }
    }
    function soldBidNFT(address winner, uint256 bidAmount, uint256 nftOwnerGets, uint256 ownerGets, uint256 tokenId) public payable nonReentrant{
        require(MarketItemDatabase[tokenId].forSale == true, "ERR:22");
        require(msg.value == bidAmount, "ERR:23");
        setApprovalForAll(_scAddress, true);
        if(MarketItemDatabase[tokenId].nftOwner == address(0)){
            payable(MarketItemDatabase[tokenId].nftCreator).transfer(nftOwnerGets);
        }
        else {
            payable(MarketItemDatabase[tokenId].nftOwner).transfer(nftOwnerGets);
        }
        IERC721(_scAddress).transferFrom(address(this), winner, tokenId);
        payable(marketOwner).transfer(ownerGets);
        MarketItemDatabase[tokenId].nftOwner = payable(winner);
        MarketItemDatabase[tokenId].forSale == false;
        MarketItemDatabase[tokenId].price = 0;
        totalUserMPWalletFunds-=msg.value;
        mpWallets[winner] = mpWallets[winner] - msg.value;
    }
    function actualOwnerWallet(uint256 altOwnerFund) public view returns (uint256){
        return altOwnerFund-totalUserMPWalletFunds;
    }
    function bidderWallet(address bidderAddress) public view returns (uint256){
            return mpWallets[bidderAddress];
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"tokenName","type":"string"},{"internalType":"string","name":"tokenSymbol","type":"string"},{"internalType":"uint256","name":"gotMaxTokenSupply","type":"uint256"}],"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":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"nftContract","type":"address"},{"indexed":false,"internalType":"string","name":"uri","type":"string"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"bool","name":"forSale","type":"bool"}],"name":"MarketItemCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_bidIds","outputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"altOwnerFund","type":"uint256"}],"name":"actualOwnerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gotNewMaxTokenSupply","type":"uint256"}],"name":"addTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userWallet","type":"address"},{"internalType":"uint256","name":"currBid","type":"uint256"},{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"bidPassCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bidWalletIN","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"sendTo","type":"address"},{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"name":"bidWalletOUT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"bidderAddress","type":"address"}],"name":"bidderWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"fetchTokenIDURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewTokenID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"listNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"scAddress","type":"address"}],"name":"marketSetup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"marketItemPrice","type":"uint256"},{"internalType":"uint256","name":"sellerGets","type":"uint256"},{"internalType":"uint256","name":"marketOwnerGets","type":"uint256"}],"name":"sellNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"winner","type":"address"},{"internalType":"uint256","name":"bidAmount","type":"uint256"},{"internalType":"uint256","name":"nftOwnerGets","type":"uint256"},{"internalType":"uint256","name":"ownerGets","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"soldBidNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recieverAddress","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"gotTransferFee","type":"uint256"}],"name":"transferNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unlistNFT","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x6080604052600436106102045760003560e01c80638da5cb5b11610118578063c18d827c116100a0578063e985e9c51161006f578063e985e9c514610755578063ecf35cca14610792578063f2fde38b146107bd578063f598b707146107e6578063fb37e8831461080257610204565b8063c18d827c146106aa578063c6ed8990146106c6578063c87b56dd146106ef578063d2659a771461072c57610204565b80639d25d9a8116100e75780639d25d9a8146105d45780639f0c812514610611578063a22cb4651461063c578063b2e7640614610665578063b88d4fde1461068157610204565b80638da5cb5b1461052c57806394383f141461055757806395d89b4114610580578063961f0944146105ab57610204565b80632b1e092e1161019b5780636352211e1161016a5780636352211e1461043357806370a0823114610470578063715018a6146104ad578063835e43cd146104c4578063874efc241461050157610204565b80632b1e092e1461039357806342842e0e146103b15780634e8a5153146103da5780635beb0a72146103f657610204565b8063095ea7b3116101d7578063095ea7b3146102d95780631096a1371461030257806318160ddd1461033f57806323b872dd1461036a57610204565b806301ffc9a71461020957806305a027d61461024657806306fdde0314610271578063081812fc1461029c575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b91906145b6565b61081e565b60405161023d9190614e2a565b60405180910390f35b34801561025257600080fd5b5061025b610900565b6040516102689190615381565b60405180910390f35b34801561027d57600080fd5b50610286610911565b6040516102939190614e45565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190614649565b6109a3565b6040516102d09190614d55565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb91906144b4565b6109e9565b005b34801561030e57600080fd5b50610329600480360381019061032491906144f0565b610b01565b6040516103369190614e2a565b60405180910390f35b34801561034b57600080fd5b50610354610d5f565b6040516103619190615381565b60405180910390f35b34801561037657600080fd5b50610391600480360381019061038c91906143ae565b610d69565b005b61039b610dc9565b6040516103a89190614e2a565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d391906143ae565b610fc4565b005b6103f460048036038101906103ef91906144b4565b610fe4565b005b34801561040257600080fd5b5061041d60048036038101906104189190614349565b6111f3565b60405161042a9190615381565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190614649565b61123c565b6040516104679190614d55565b60405180910390f35b34801561047c57600080fd5b5061049760048036038101906104929190614349565b6112ee565b6040516104a49190615381565b60405180910390f35b3480156104b957600080fd5b506104c26113a6565b005b3480156104d057600080fd5b506104eb60048036038101906104e69190614649565b6113ba565b6040516104f89190615381565b60405180910390f35b34801561050d57600080fd5b506105166113d1565b6040516105239190615381565b60405180910390f35b34801561053857600080fd5b506105416113dd565b60405161054e9190614d55565b60405180910390f35b34801561056357600080fd5b5061057e60048036038101906105799190614672565b611407565b005b34801561058c57600080fd5b50610595611691565b6040516105a29190614e45565b60405180910390f35b3480156105b757600080fd5b506105d260048036038101906105cd9190614649565b611723565b005b3480156105e057600080fd5b506105fb60048036038101906105f69190614649565b611bdd565b6040516106089190614e45565b60405180910390f35b34801561061d57600080fd5b50610626611d67565b6040516106339190614e45565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190614478565b611df5565b005b61067f600480360381019061067a91906144f0565b611e0b565b005b34801561068d57600080fd5b506106a860048036038101906106a391906143fd565b61220c565b005b6106c460048036038101906106bf919061453f565b61226e565b005b3480156106d257600080fd5b506106ed60048036038101906106e89190614649565b612748565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614649565b61282e565b6040516107239190614e45565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190614349565b612941565b005b34801561076157600080fd5b5061077c60048036038101906107779190614372565b61298d565b6040516107899190614e2a565b60405180910390f35b34801561079e57600080fd5b506107a7612a21565b6040516107b49190614e45565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190614349565b612aaf565b005b61080060048036038101906107fb91906146ae565b612b33565b005b61081c60048036038101906108179190614608565b612fd1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108f957506108f882613320565b5b9050919050565b600061090c600961338a565b905090565b6060600180546109209061561f565b80601f016020809104026020016040519081016040528092919081815260200182805461094c9061561f565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b5050505050905090565b60006109ae82613398565b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f48261123c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c90614f61565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a846133e3565b73ffffffffffffffffffffffffffffffffffffffff161480610ab35750610ab281610aad6133e3565b61298d565b5b610af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae990615041565b60405180910390fd5b610afc83836133eb565b505050565b600080601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411610b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7b90614f41565b60405180910390fd5b6013600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015610c585750600073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80610cc557506013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90615061565b60405180910390fd5b82601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410610d535760019050610d58565b600090505b9392505050565b6000600e54905090565b610d7a610d746133e3565b826134a4565b610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090615101565b60405180910390fd5b610dc4838383613539565b505050565b600060026000541415610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890614f21565b60405180910390fd5b6002600081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190615161565b60405180910390fd5b34601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ef59190615466565b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610fa0573d6000803e3d6000fd5b5034601154610faf9190615466565b60118190555060019050600160008190555090565b610fdf8383836040518060200160405280600081525061220c565b505050565b6002600054141561102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190614f21565b60405180910390fd5b600260008190555061103a6137a0565b80341461107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107390614fc1565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156110fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f590615341565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461114991906154ed565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060115461119a91906154ed565b6011819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111e6573d6000803e3d6000fd5b5060016000819055505050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc90615201565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561135f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611356906152e1565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ae6137a0565b6113b8600061381e565b565b6000601154826113ca91906154ed565b9050919050565b600a8060000154905081565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6013600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156114da5750600073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b8061154657506013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c906152c1565b60405180910390fd5b6115b2600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611df5565b60016013600084815260200190815260200160002060060160006101000a81548160ff021916908315150217905550806013600084815260200190815260200160002060050181905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161165b93929190614da7565b600060405180830381600087803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b505050505050565b6060600280546116a09061561f565b80601f01602080910402602001604051908101604052809291908181526020018280546116cc9061561f565b80156117195780601f106116ee57610100808354040283529160200191611719565b820191906000526020600020905b8154815290600101906020018083116116fc57829003601f168201915b5050505050905090565b6013600082815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156117f65750600073ffffffffffffffffffffffffffffffffffffffff166013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b8061186257506013600082815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806118ba5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090615141565b60405180910390fd5b600115156013600083815260200190815260200160002060060160009054906101000a900460ff16151514611963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195a906150e1565b60405180910390fd5b611990600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611df5565b60006013600083815260200190815260200160002060060160006101000a81548160ff02191690831515021790555060006013600083815260200190815260200160002060050181905550600073ffffffffffffffffffffffffffffffffffffffff166013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b1257600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd306013600085815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611adb93929190614d70565b600060405180830381600087803b158015611af557600080fd5b505af1158015611b09573d6000803e3d6000fd5b50505050611bda565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd306013600085815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401611ba793929190614d70565b600060405180830381600087803b158015611bc157600080fd5b505af1158015611bd5573d6000803e3d6000fd5b505050505b50565b60606000601060008481526020019081526020016000208054611bff9061561f565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2b9061561f565b8015611c785780601f10611c4d57610100808354040283529160200191611c78565b820191906000526020600020905b815481529060010190602001808311611c5b57829003601f168201915b505050505090506000815111611cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cba90615241565b60405180910390fd5b601060008481526020019081526020016000208054611ce19061561f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0d9061561f565b8015611d5a5780601f10611d2f57610100808354040283529160200191611d5a565b820191906000526020600020905b815481529060010190602001808311611d3d57829003601f168201915b5050505050915050919050565b600c8054611d749061561f565b80601f0160208091040260200160405190810160405280929190818152602001828054611da09061561f565b8015611ded5780601f10611dc257610100808354040283529160200191611ded565b820191906000526020600020905b815481529060010190602001808311611dd057829003601f168201915b505050505081565b611e07611e006133e3565b83836138e4565b5050565b60026000541415611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890614f21565b60405180910390fd5b60026000819055506013600083815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148015611f2c5750600073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b80611f9857506013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce906150c1565b60405180910390fd5b600015156013600084815260200190815260200160002060060160009054906101000a900460ff16151514612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890615361565b60405180910390fd5b803414612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a906152a1565b60405180910390fd5b6120b0600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611df5565b826013600084815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561216d573d6000803e3d6000fd5b50600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3385856040518463ffffffff1660e01b81526004016121cd93929190614da7565b600060405180830381600087803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b505050506001600081905550505050565b61221d6122176133e3565b836134a4565b61225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225390615001565b60405180910390fd5b61226884848484613a51565b50505050565b600260005414156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab90614f21565b60405180910390fd5b6002600081905550600115156013600083815260200190815260200160002060060160009054906101000a900460ff16151514612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d906151a1565b60405180910390fd5b833414612368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235f90615121565b60405180910390fd5b612395600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611df5565b600073ffffffffffffffffffffffffffffffffffffffff166013600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612482576013600082815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f1935050505015801561247c573d6000803e3d6000fd5b50612500565b6013600082815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156124fe573d6000803e3d6000fd5b505b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3087846040518463ffffffff1660e01b815260040161255f93929190614da7565b600060405180830381600087803b15801561257957600080fd5b505af115801561258d573d6000803e3d6000fd5b50505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156125f9573d6000803e3d6000fd5b50846013600083815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600015156013600083815260200190815260200160002060060160009054906101000a905050506000601360008381526020019081526020016000206005018190555034601160008282546126a491906154ed565b9250508190555034601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f691906154ed565b601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016000819055505050505050565b6127506137a0565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d790615301565b60405180910390fd5b600e548111612824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281b906150a1565b60405180910390fd5b80600e8190555050565b606061283982613398565b60006007600084815260200190815260200160002080546128599061561f565b80601f01602080910402602001604051908101604052809291908181526020018280546128859061561f565b80156128d25780601f106128a7576101008083540402835291602001916128d2565b820191906000526020600020905b8154815290600101906020018083116128b557829003601f168201915b5050505050905060006128e3613aad565b90506000815114156128f957819250505061293c565b60008251111561292e578082604051602001612916929190614d31565b6040516020818303038152906040529250505061293c565b61293784613ac4565b925050505b919050565b6129496137a0565b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d8054612a2e9061561f565b80601f0160208091040260200160405190810160405280929190818152602001828054612a5a9061561f565b8015612aa75780601f10612a7c57610100808354040283529160200191612aa7565b820191906000526020600020905b815481529060010190602001808311612a8a57829003601f168201915b505050505081565b612ab76137a0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1e90615081565b60405180910390fd5b612b308161381e565b50565b60026000541415612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090614f21565b60405180910390fd5b6002600081905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415612c12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0990614fa1565b60405180910390fd5b600115156013600086815260200190815260200160002060060160009054906101000a900460ff16151514612c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7390615281565b60405180910390fd5b823414612cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb590614f01565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166013600086815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612dab576013600085815260200190815260200160002060030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612da5573d6000803e3d6000fd5b50612e29565b6013600085815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612e27573d6000803e3d6000fd5b505b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033876040518463ffffffff1660e01b8152600401612e8893929190614da7565b600060405180830381600087803b158015612ea257600080fd5b505af1158015612eb6573d6000803e3d6000fd5b50505050336013600086815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006013600086815260200190815260200160002060060160006101000a81548160ff02191690831515021790555060006013600086815260200190815260200160002060050181905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612fc2573d6000803e3d6000fd5b50600160008190555050505050565b60026000541415613017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300e90614f21565b60405180910390fd5b6002600081905550600e5461302c600961338a565b141561306d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306490615021565b60405180910390fd5b6130776009613b2c565b6000613083600961338a565b905061308f3382613b42565b6130998183613d1c565b816010600083815260200190815260200160002090805190602001906130c092919061416d565b506040518060e00160405280828152602001600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020013373ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160001515815250601360008381526020019081526020016000206000820151816000015560208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190805190602001906131dd92919061416d565b5060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816005015560c08201518160060160006101000a81548160ff021916908315150217905550905050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16817f075fb7fd1ecd2e51f3b8d1dc8bfbd3c77c6547ddbd967e194636fcd46d91f9258433600080600060405161330c959493929190614e67565b60405180910390a350600160008190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081600001549050919050565b6133a181613d90565b6133e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d790614ec1565b60405180910390fd5b50565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661345e8361123c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806134b08361123c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806134f257506134f1818561298d565b5b8061353057508373ffffffffffffffffffffffffffffffffffffffff16613518846109a3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166135598261123c565b73ffffffffffffffffffffffffffffffffffffffff16146135af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a690615181565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561361f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361690615321565b60405180910390fd5b61362a838383613dfc565b6136356000826133eb565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461368591906154ed565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136dc9190615466565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461379b838383613e01565b505050565b6137a86133e3565b73ffffffffffffffffffffffffffffffffffffffff166137c66113dd565b73ffffffffffffffffffffffffffffffffffffffff161461381c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613813906151c1565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394a90615221565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613a449190614e2a565b60405180910390a3505050565b613a5c848484613539565b613a6884848484613e06565b613aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9e90614fe1565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060613acf82613398565b6000613ad9613aad565b90506000815111613af95760405180602001604052806000815250613b24565b80613b0384613f9d565b604051602001613b14929190614d31565b6040516020818303038152906040525b915050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba990614f81565b60405180910390fd5b613bbb81613d90565b15613bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bf290615261565b60405180910390fd5b613c0760008383613dfc565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c579190615466565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613d1860008383613e01565b5050565b613d2582613d90565b613d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d5b906151e1565b60405180910390fd5b80600760008481526020019081526020016000209080519060200190613d8b92919061416d565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000613e278473ffffffffffffffffffffffffffffffffffffffff1661414a565b15613f90578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613e506133e3565b8786866040518563ffffffff1660e01b8152600401613e729493929190614dde565b602060405180830381600087803b158015613e8c57600080fd5b505af1925050508015613ebd57506040513d601f19601f82011682018060405250810190613eba91906145df565b60015b613f40573d8060008114613eed576040519150601f19603f3d011682016040523d82523d6000602084013e613ef2565b606091505b50600081511415613f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f2f90614ee1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613f95565b600190505b949350505050565b60606000821415613fe5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050614145565b600082905060005b6000821461401757808061400090615682565b915050600a8261401091906154bc565b9150613fed565b60008167ffffffffffffffff811115614059577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561408b5781602001600182028036833780820191505090505b5090505b6000851461413e576001826140a491906154ed565b9150600a856140b391906156cb565b60306140bf9190615466565b60f81b8183815181106140fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561413791906154bc565b945061408f565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546141799061561f565b90600052602060002090601f01602090048101928261419b57600085556141e2565b82601f106141b457805160ff19168380011785556141e2565b828001600101855582156141e2579182015b828111156141e15782518255916020019190600101906141c6565b5b5090506141ef91906141f3565b5090565b5b8082111561420c5760008160009055506001016141f4565b5090565b600061422361421e846153c1565b61539c565b90508281526020810184848401111561423b57600080fd5b6142468482856155dd565b509392505050565b600061426161425c846153f2565b61539c565b90508281526020810184848401111561427957600080fd5b6142848482856155dd565b509392505050565b60008135905061429b81615ddf565b92915050565b6000813590506142b081615df6565b92915050565b6000813590506142c581615e0d565b92915050565b6000815190506142da81615e0d565b92915050565b600082601f8301126142f157600080fd5b8135614301848260208601614210565b91505092915050565b600082601f83011261431b57600080fd5b813561432b84826020860161424e565b91505092915050565b60008135905061434381615e24565b92915050565b60006020828403121561435b57600080fd5b60006143698482850161428c565b91505092915050565b6000806040838503121561438557600080fd5b60006143938582860161428c565b92505060206143a48582860161428c565b9150509250929050565b6000806000606084860312156143c357600080fd5b60006143d18682870161428c565b93505060206143e28682870161428c565b92505060406143f386828701614334565b9150509250925092565b6000806000806080858703121561441357600080fd5b60006144218782880161428c565b94505060206144328782880161428c565b935050604061444387828801614334565b925050606085013567ffffffffffffffff81111561446057600080fd5b61446c878288016142e0565b91505092959194509250565b6000806040838503121561448b57600080fd5b60006144998582860161428c565b92505060206144aa858286016142a1565b9150509250929050565b600080604083850312156144c757600080fd5b60006144d58582860161428c565b92505060206144e685828601614334565b9150509250929050565b60008060006060848603121561450557600080fd5b60006145138682870161428c565b935050602061452486828701614334565b925050604061453586828701614334565b9150509250925092565b600080600080600060a0868803121561455757600080fd5b60006145658882890161428c565b955050602061457688828901614334565b945050604061458788828901614334565b935050606061459888828901614334565b92505060806145a988828901614334565b9150509295509295909350565b6000602082840312156145c857600080fd5b60006145d6848285016142b6565b91505092915050565b6000602082840312156145f157600080fd5b60006145ff848285016142cb565b91505092915050565b60006020828403121561461a57600080fd5b600082013567ffffffffffffffff81111561463457600080fd5b6146408482850161430a565b91505092915050565b60006020828403121561465b57600080fd5b600061466984828501614334565b91505092915050565b6000806040838503121561468557600080fd5b600061469385828601614334565b92505060206146a485828601614334565b9150509250929050565b600080600080608085870312156146c457600080fd5b60006146d287828801614334565b94505060206146e387828801614334565b93505060406146f487828801614334565b925050606061470587828801614334565b91505092959194509250565b61471a81615595565b82525050565b61472981615521565b82525050565b61473881615533565b82525050565b600061474982615423565b6147538185615439565b93506147638185602086016155ec565b61476c816157b8565b840191505092915050565b614780816155a7565b82525050565b60006147918261542e565b61479b818561544a565b93506147ab8185602086016155ec565b6147b4816157b8565b840191505092915050565b60006147ca8261542e565b6147d4818561545b565b93506147e48185602086016155ec565b80840191505092915050565b60006147fd60058361544a565b9150614808826157c9565b602082019050919050565b600061482060058361544a565b915061482b826157f2565b602082019050919050565b600061484360068361544a565b915061484e8261581b565b602082019050919050565b600061486660058361544a565b915061487182615844565b602082019050919050565b600061488960068361544a565b91506148948261586d565b602082019050919050565b60006148ac60058361544a565b91506148b782615896565b602082019050919050565b60006148cf60058361544a565b91506148da826158bf565b602082019050919050565b60006148f260058361544a565b91506148fd826158e8565b602082019050919050565b600061491560068361544a565b915061492082615911565b602082019050919050565b600061493860058361544a565b91506149438261593a565b602082019050919050565b600061495b60058361544a565b915061496682615963565b602082019050919050565b600061497e60058361544a565b91506149898261598c565b602082019050919050565b60006149a160058361544a565b91506149ac826159b5565b602082019050919050565b60006149c460068361544a565b91506149cf826159de565b602082019050919050565b60006149e760058361544a565b91506149f282615a07565b602082019050919050565b6000614a0a60058361544a565b9150614a1582615a30565b602082019050919050565b6000614a2d60068361544a565b9150614a3882615a59565b602082019050919050565b6000614a5060058361544a565b9150614a5b82615a82565b602082019050919050565b6000614a7360058361544a565b9150614a7e82615aab565b602082019050919050565b6000614a9660068361544a565b9150614aa182615ad4565b602082019050919050565b6000614ab960058361544a565b9150614ac482615afd565b602082019050919050565b6000614adc60068361544a565b9150614ae782615b26565b602082019050919050565b6000614aff60058361544a565b9150614b0a82615b4f565b602082019050919050565b6000614b2260068361544a565b9150614b2d82615b78565b602082019050919050565b6000614b4560058361544a565b9150614b5082615ba1565b602082019050919050565b6000614b6860058361544a565b9150614b7382615bca565b602082019050919050565b6000614b8b60058361544a565b9150614b9682615bf3565b602082019050919050565b6000614bae60058361544a565b9150614bb982615c1c565b602082019050919050565b6000614bd160058361544a565b9150614bdc82615c45565b602082019050919050565b6000614bf460058361544a565b9150614bff82615c6e565b602082019050919050565b6000614c1760068361544a565b9150614c2282615c97565b602082019050919050565b6000614c3a60068361544a565b9150614c4582615cc0565b602082019050919050565b6000614c5d60058361544a565b9150614c6882615ce9565b602082019050919050565b6000614c8060058361544a565b9150614c8b82615d12565b602082019050919050565b6000614ca360058361544a565b9150614cae82615d3b565b602082019050919050565b6000614cc660058361544a565b9150614cd182615d64565b602082019050919050565b6000614ce960068361544a565b9150614cf482615d8d565b602082019050919050565b6000614d0c60068361544a565b9150614d1782615db6565b602082019050919050565b614d2b8161558b565b82525050565b6000614d3d82856147bf565b9150614d4982846147bf565b91508190509392505050565b6000602082019050614d6a6000830184614720565b92915050565b6000606082019050614d856000830186614720565b614d926020830185614711565b614d9f6040830184614d22565b949350505050565b6000606082019050614dbc6000830186614720565b614dc96020830185614720565b614dd66040830184614d22565b949350505050565b6000608082019050614df36000830187614720565b614e006020830186614720565b614e0d6040830185614d22565b8181036060830152614e1f818461473e565b905095945050505050565b6000602082019050614e3f600083018461472f565b92915050565b60006020820190508181036000830152614e5f8184614786565b905092915050565b600060a0820190508181036000830152614e818188614786565b9050614e906020830187614720565b614e9d6040830186614720565b614eaa6060830185614777565b614eb7608083018461472f565b9695505050505050565b60006020820190508181036000830152614eda816147f0565b9050919050565b60006020820190508181036000830152614efa81614813565b9050919050565b60006020820190508181036000830152614f1a81614836565b9050919050565b60006020820190508181036000830152614f3a81614859565b9050919050565b60006020820190508181036000830152614f5a8161487c565b9050919050565b60006020820190508181036000830152614f7a8161489f565b9050919050565b60006020820190508181036000830152614f9a816148c2565b9050919050565b60006020820190508181036000830152614fba816148e5565b9050919050565b60006020820190508181036000830152614fda81614908565b9050919050565b60006020820190508181036000830152614ffa8161492b565b9050919050565b6000602082019050818103600083015261501a8161494e565b9050919050565b6000602082019050818103600083015261503a81614971565b9050919050565b6000602082019050818103600083015261505a81614994565b9050919050565b6000602082019050818103600083015261507a816149b7565b9050919050565b6000602082019050818103600083015261509a816149da565b9050919050565b600060208201905081810360008301526150ba816149fd565b9050919050565b600060208201905081810360008301526150da81614a20565b9050919050565b600060208201905081810360008301526150fa81614a43565b9050919050565b6000602082019050818103600083015261511a81614a66565b9050919050565b6000602082019050818103600083015261513a81614a89565b9050919050565b6000602082019050818103600083015261515a81614aac565b9050919050565b6000602082019050818103600083015261517a81614acf565b9050919050565b6000602082019050818103600083015261519a81614af2565b9050919050565b600060208201905081810360008301526151ba81614b15565b9050919050565b600060208201905081810360008301526151da81614b38565b9050919050565b600060208201905081810360008301526151fa81614b5b565b9050919050565b6000602082019050818103600083015261521a81614b7e565b9050919050565b6000602082019050818103600083015261523a81614ba1565b9050919050565b6000602082019050818103600083015261525a81614bc4565b9050919050565b6000602082019050818103600083015261527a81614be7565b9050919050565b6000602082019050818103600083015261529a81614c0a565b9050919050565b600060208201905081810360008301526152ba81614c2d565b9050919050565b600060208201905081810360008301526152da81614c50565b9050919050565b600060208201905081810360008301526152fa81614c73565b9050919050565b6000602082019050818103600083015261531a81614c96565b9050919050565b6000602082019050818103600083015261533a81614cb9565b9050919050565b6000602082019050818103600083015261535a81614cdc565b9050919050565b6000602082019050818103600083015261537a81614cff565b9050919050565b60006020820190506153966000830184614d22565b92915050565b60006153a66153b7565b90506153b28282615651565b919050565b6000604051905090565b600067ffffffffffffffff8211156153dc576153db615789565b5b6153e5826157b8565b9050602081019050919050565b600067ffffffffffffffff82111561540d5761540c615789565b5b615416826157b8565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006154718261558b565b915061547c8361558b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154b1576154b06156fc565b5b828201905092915050565b60006154c78261558b565b91506154d28361558b565b9250826154e2576154e161572b565b5b828204905092915050565b60006154f88261558b565b91506155038361558b565b925082821015615516576155156156fc565b5b828203905092915050565b600061552c8261556b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006155a0826155b9565b9050919050565b60006155b28261558b565b9050919050565b60006155c4826155cb565b9050919050565b60006155d68261556b565b9050919050565b82818337600083830152505050565b60005b8381101561560a5780820151818401526020810190506155ef565b83811115615619576000848401525b50505050565b6000600282049050600182168061563757607f821691505b6020821081141561564b5761564a61575a565b5b50919050565b61565a826157b8565b810181811067ffffffffffffffff8211171561567957615678615789565b5b80604052505050565b600061568d8261558b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156c0576156bf6156fc565b5b600182019050919050565b60006156d68261558b565b91506156e18361558b565b9250826156f1576156f061572b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f5a3a3235000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3236000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31310000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3238000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32300000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3134000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3230000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a39000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31380000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3138000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3137000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a35000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3135000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32310000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3331000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a33000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31320000000000000000000000000000000000000000000000000000600082015250565b7f4552523a38000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3136000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32330000000000000000000000000000000000000000000000000000600082015250565b7f4552523a37000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31350000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3232000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32320000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3330000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3239000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3133000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3234000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a34000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3231000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31300000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31340000000000000000000000000000000000000000000000000000600082015250565b7f4552523a36000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3132000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a32000000000000000000000000000000000000000000000000000000600082015250565b7f4f5a3a3233000000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31390000000000000000000000000000000000000000000000000000600082015250565b7f4552523a31330000000000000000000000000000000000000000000000000000600082015250565b615de881615521565b8114615df357600080fd5b50565b615dff81615533565b8114615e0a57600080fd5b50565b615e168161553f565b8114615e2157600080fd5b50565b615e2d8161558b565b8114615e3857600080fd5b5056fea26469706673582212208a08a74c0f6272affa9df6d7917bb9dcd141bde43f60dda4ee88bad8610f7b4864736f6c63430008040033

Deployed Bytecode Sourcemap

16671:8155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7121:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18232:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7818:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8753:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8419:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23066:484;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18131:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9259:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22296:338;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9524:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22640:420;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24695:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7609:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7432:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16190:103;;;;;;;;;;;;;:::i;:::-;;24550:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16830:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15986:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19411:485;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7924:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19902:804;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18586:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16893:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8928:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21588:702;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9681:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23556:988;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18337:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14813:469;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18028:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9089:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16924:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16299:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20712:870;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18833:572;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7121:305;7223:4;7275:25;7260:40;;;:11;:40;;;;:105;;;;7332:33;7317:48;;;:11;:48;;;;7260:105;:158;;;;7382:36;7406:11;7382:23;:36::i;:::-;7260:158;7240:178;;7121:305;;;:::o;18232:99::-;18278:7;18304:19;:9;:17;:19::i;:::-;18297:26;;18232:99;:::o;7818:100::-;7872:13;7905:5;7898:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7818:100;:::o;8753:169::-;8829:7;8849:23;8864:7;8849:14;:23::i;:::-;8890:15;:24;8906:7;8890:24;;;;;;;;;;;;;;;;;;;;;8883:31;;8753:169;;;:::o;8419:328::-;8500:13;8516:23;8531:7;8516:14;:23::i;:::-;8500:39;;8564:5;8558:11;;:2;:11;;;;8550:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;8628:5;8612:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;8637:37;8654:5;8661:12;:10;:12::i;:::-;8637:16;:37::i;:::-;8612:62;8590:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;8718:21;8727:2;8731:7;8718:8;:21::i;:::-;8419:328;;;:::o;23066:484::-;23162:4;23210:1;23186:9;:21;23196:10;23186:21;;;;;;;;;;;;;;;;:25;23178:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23256:18;:27;23275:7;23256:27;;;;;;;;;;;:38;;;;;;;;;;;;23242:52;;:10;:52;;;:106;;;;;23346:1;23298:50;;:18;:27;23317:7;23298:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;;23242:106;23241:162;;;;23367:18;:27;23386:7;23367:27;;;;;;;;;;;:36;;;;;;;;;;;;23353:50;;:10;:50;;;;23241:162;23233:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;23453:7;23428:9;:21;23438:10;23428:21;;;;;;;;;;;;;;;;:32;23425:118;;23483:4;23476:11;;;;23425:118;23526:5;23519:12;;23066:484;;;;;;:::o;18131:95::-;18175:7;18202:15;;18194:24;;18131:95;:::o;9259:259::-;9420:41;9439:12;:10;:12::i;:::-;9453:7;9420:18;:41::i;:::-;9412:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;9482:28;9492:4;9498:2;9502:7;9482:9;:28::i;:::-;9259:259;;;:::o;22296:338::-;22355:4;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;22393:11:::1;;;;;;;;;;;22379:25;;:10;:25;;;;22371:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;22474:9;22450;:21;22460:10;22450:21;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;22426:9;:21;22436:10;22426:21;;;;;;;;;;;;;;;:57;;;;22502:11;;;;;;;;;;;22494:29;;:40;22524:9;22494:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22595:9;22570:22;;:34;;;;:::i;:::-;22545:22;:59;;;;22622:4;22615:11;;14373:1:::0;14640:7;:22;;;;22296:338;:::o;9524:151::-;9628:39;9645:4;9651:2;9655:7;9628:39;;;;;;;;;;;;:16;:39::i;:::-;9524:151;;;:::o;22640:420::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;15947:13:::1;:11;:13::i;:::-;22771:14:::2;22758:9;:27;22750:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22836:14;22815:9;:17;22825:6;22815:17;;;;;;;;;;;;;;;;:35;;22807:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22912:14;22892:9;:17;22902:6;22892:17;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;22872:9;:17;22882:6;22872:17;;;;;;;;;;;;;;;:54;;;;22987:14;22962:22;;:39;;;;:::i;:::-;22937:22;:64;;;;23020:6;23012:24;;:40;23037:14;23012:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;14373:1:::0;14640:7;:22;;;;22640:420;;:::o;24695:128::-;24761:7;24791:9;:24;24801:13;24791:24;;;;;;;;;;;;;;;;24784:31;;24695:128;;;:::o;7609:203::-;7681:7;7701:13;7717:7;:16;7725:7;7717:16;;;;;;;;;;;;;;;;;;;;;7701:32;;7769:1;7752:19;;:5;:19;;;;7744:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;7799:5;7792:12;;;7609:203;;;:::o;7432:171::-;7504:7;7549:1;7532:19;;:5;:19;;;;7524:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;7579:9;:16;7589:5;7579:16;;;;;;;;;;;;;;;;7572:23;;7432:171;;;:::o;16190:103::-;15947:13;:11;:13::i;:::-;16255:30:::1;16282:1;16255:18;:30::i;:::-;16190:103::o:0;24550:139::-;24620:7;24659:22;;24646:12;:35;;;;:::i;:::-;24639:42;;24550:139;;;:::o;16830:31::-;;;;;;;;;:::o;15986:87::-;16032:7;16059:6;;;;;;;;;;;16052:13;;15986:87;:::o;19411:485::-;19501:18;:27;19520:7;19501:27;;;;;;;;;;;:38;;;;;;;;;;;;19487:52;;:10;:52;;;:106;;;;;19591:1;19543:50;;:18;:27;19562:7;19543:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;19487:106;19486:162;;;;19612:18;:27;19631:7;19612:27;;;;;;;;;;;:36;;;;;;;;;;;;19598:50;;:10;:50;;;19486:162;19478:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;19669:35;19687:10;;;;;;;;;;;19699:4;19669:17;:35::i;:::-;19753:4;19715:18;:27;19734:7;19715:27;;;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;19804:5;19768:18;:27;19787:7;19768:27;;;;;;;;;;;:33;;:41;;;;19828:10;;;;;;;;;;;19820:32;;;19853:10;19873:4;19880:7;19820:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19411:485;;:::o;7924:104::-;7980:13;8013:7;8006:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7924:104;:::o;19902:804::-;19979:18;:27;19998:7;19979:27;;;;;;;;;;;:38;;;;;;;;;;;;19965:52;;:10;:52;;;:106;;;;;20069:1;20021:50;;:18;:27;20040:7;20021:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;19965:106;19964:162;;;;20090:18;:27;20109:7;20090:27;;;;;;;;;;;:36;;;;;;;;;;;;20076:50;;:10;:50;;;19964:162;:191;;;;20144:11;;;;;;;;;;;20130:25;;:10;:25;;;19964:191;19956:209;;;;;;;;;;;;:::i;:::-;;;;;;;;;20223:4;20184:43;;:18;:27;20203:7;20184:27;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;20176:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;20248:35;20266:10;;;;;;;;;;;20278:4;20248:17;:35::i;:::-;20332:5;20294:18;:27;20313:7;20294:27;;;;;;;;;;;:35;;;:43;;;;;;;;;;;;;;;;;;20384:1;20348:18;:27;20367:7;20348:27;;;;;;;;;;;:33;;:37;;;;20447:1;20399:50;;:18;:27;20418:7;20399:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;20396:303;;;20473:10;;;;;;;;;;;20465:32;;;20506:4;20513:18;:27;20532:7;20513:27;;;;;;;;;;;:38;;;;;;;;;;;;20553:7;20465:96;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20396:303;;;20601:10;;;;;;;;;;;20593:32;;;20634:4;20641:18;:27;20660:7;20641:27;;;;;;;;;;;:36;;;;;;;;;;;;20679:7;20593:94;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20396:303;19902:804;:::o;18586:241::-;18649:13;18674:25;18708:11;:20;18720:7;18708:20;;;;;;;;;;;18674:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18770:1;18748:12;:19;:23;18740:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;18799:11;:20;18811:7;18799:20;;;;;;;;;;;18792:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18586:241;;;:::o;16893:24::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8928:155::-;9023:52;9042:12;:10;:12::i;:::-;9056:8;9066;9023:18;:52::i;:::-;8928:155;;:::o;21588:702::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;21736::::1;:27;21755:7;21736:27;;;;;;;;;;;:38;;;;;;;;;;;;21722:52;;:10;:52;;;:106;;;;;21826:1;21778:50;;:18;:27;21797:7;21778:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;21722:106;21721:162;;;;21847:18;:27;21866:7;21847:27;;;;;;;;;;;:36;;;;;;;;;;;;21833:50;;:10;:50;;;21721:162;21713:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;21952:5;21913:44;;:18;:27;21932:7;21913:27;;;;;;;;;;;:35;;;;;;;;;;;;:44;;;21905:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22000:14;21987:9;:27;21979:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22036:35;22054:10;;;;;;;;;;;22066:4;22036:17;:35::i;:::-;22129:15;22082:18;:27;22101:7;22082:27;;;;;;;;;;;:36;;;:63;;;;;;;;;;;;;;;;;;22164:11;;;;;;;;;;;22156:29;;:45;22186:14;22156:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22220:10;;;;;;;;;;;22212:32;;;22245:10;22257:15;22274:7;22212:70;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14373:1:::0;14640:7;:22;;;;21588:702;;;:::o;9681:239::-;9812:41;9831:12;:10;:12::i;:::-;9845:7;9812:18;:41::i;:::-;9804:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;9874:38;9888:4;9894:2;9898:7;9907:4;9874:13;:38::i;:::-;9681:239;;;;:::o;23556:988::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;23754:4:::1;23715:43;;:18;:27;23734:7;23715:27;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;23707:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23801:9;23788;:22;23780:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;23832:35;23850:10;;;;;;;;;;;23862:4;23832:17;:35::i;:::-;23929:1;23881:50;;:18;:27;23900:7;23881:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;23878:261;;;23955:18;:27;23974:7;23955:27;;;;;;;;;;;:38;;;;;;;;;;;;23947:56;;:70;24004:12;23947:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23878:261;;;24067:18;:27;24086:7;24067:27;;;;;;;;;;;:36;;;;;;;;;;;;24059:54;;:68;24114:12;24059:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;23878:261;24157:10;;;;;;;;;;;24149:32;;;24190:4;24197:6;24205:7;24149:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24232:11;;;;;;;;;;;24224:29;;:40;24254:9;24224:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24322:6;24275:18;:27;24294:7;24275:27;;;;;;;;;;;:36;;;:54;;;;;;;;;;;;;;;;;;24379:5;24340:44;;:18;:27;24359:7;24340:27;;;;;;;;;;;:35;;;;;;;;;::::0;;:44;24431:1:::1;24395:18;:27;24414:7;24395:27;;;;;;;;;;;:33;;:37;;;;24467:9;24443:22;;:33;;;;;;;:::i;:::-;;;;;;;;24527:9;24507;:17;24517:6;24507:17;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;24487:9;:17;24497:6;24487:17;;;;;;;;;;;;;;;:49;;;;14373:1:::0;14640:7;:22;;;;23556:988;;;;;:::o;18337:243::-;15947:13;:11;:13::i;:::-;18435:11:::1;;;;;;;;;;;18421:25;;:10;:25;;;18413:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;18498:15;;18475:20;:38;18467:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18552:20;18534:15;:38;;;;18337:243:::0;:::o;14813:469::-;14886:13;14912:23;14927:7;14912:14;:23::i;:::-;14946;14972:10;:19;14983:7;14972:19;;;;;;;;;;;14946:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15002:18;15023:10;:8;:10::i;:::-;15002:31;;15070:1;15054:4;15048:18;:23;15044:72;;;15095:9;15088:16;;;;;;15044:72;15156:1;15136:9;15130:23;:27;15126:108;;;15205:4;15211:9;15188:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15174:48;;;;;;15126:108;15251:23;15266:7;15251:14;:23::i;:::-;15244:30;;;;14813:469;;;;:::o;18028:97::-;15947:13;:11;:13::i;:::-;18108:9:::1;18095:10;;:22;;;;;;;;;;;;;;;;;;18028:97:::0;:::o;9089:164::-;9186:4;9210:18;:25;9229:5;9210:25;;;;;;;;;;;;;;;:35;9236:8;9210:35;;;;;;;;;;;;;;;;;;;;;;;;;9203:42;;9089:164;;;;:::o;16924:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16299:168::-;15947:13;:11;:13::i;:::-;16408:1:::1;16388:22;;:8;:22;;;;16380:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;16431:28;16450:8;16431:18;:28::i;:::-;16299:168:::0;:::o;20712:870::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;20876:11:::1;;;;;;;;;;;20862:25;;:10;:25;;;;20854:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20955:4;20916:43;;:18;:27;20935:7;20916:27;;;;;;;;;;;:35;;;;;;;;;;;;:43;;;20908:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;21002:15;20989:9;:28;20981:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;21090:1;21042:50;;:18;:27;21061:7;21042:27;;;;;;;;;;;:36;;;;;;;;;;;;:50;;;21039:229;;;21108:18;:27;21127:7;21108:27;;;;;;;;;;;:38;;;;;;;;;;;;:47;;:59;21156:10;21108:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21039:229;;;21199:18;:27;21218:7;21199:27;;;;;;;;;;;:36;;;;;;;;;;;;:45;;:57;21245:10;21199:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21039:229;21286:10;;;;;;;;;;;21278:32;;;21319:4;21326:10;21338:7;21278:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21404:10;21357:18;:27;21376:7;21357:27;;;;;;;;;;;:36;;;:58;;;;;;;;;;;;;;;;;;21464:5;21426:18;:27;21445:7;21426:27;;;;;;;;;;;:35;;;:43;;;;;;;;;;;;;;;;;;21516:1;21480:18;:27;21499:7;21480:27;;;;;;;;;;;:33;;:37;;;;21536:11;;;;;;;;;;;21528:29;;:46;21558:15;21528:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14373:1:::0;14640:7;:22;;;;20712:870;;;;:::o;18833:572::-;14417:1;14559:7;;:19;;14551:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1;14599:7;:18;;;;18938:15:::1;;18915:19;:9;:17;:19::i;:::-;:38;;18907:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18974:21;:9;:19;:21::i;:::-;19006:18;19027:19;:9;:17;:19::i;:::-;19006:40;;19057:29;19063:10;19075;19057:5;:29::i;:::-;19097;19110:10;19122:3;19097:12;:29::i;:::-;19163:3;19137:11;:23;19149:10;19137:23;;;;;;;;;;;:29;;;;;;;;;;;;:::i;:::-;;19210:91;;;;;;;;19221:10;19210:91;;;;19233:10;;;;;;;;;;;19210:91;;;;;;19245:3;19210:91;;;;19258:10;19210:91;;;;;;19287:1;19210:91;;;;;;19292:1;19210:91;;;;19295:5;19210:91;;;;::::0;19177:18:::1;:30;19196:10;19177:30;;;;;;;;;;;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19347:10;;;;;;;;;;;19317:80;;19335:10;19317:80;19359:3;19364:10;19384:1;19388::::0;19391:5:::1;19317:80;;;;;;;;;;:::i;:::-;;;;;;;;14628:1;14373::::0;14640:7;:22;;;;18833:572;:::o;6409:157::-;6494:4;6533:25;6518:40;;;:11;:40;;;;6511:47;;6409:157;;;:::o;13727:114::-;13792:7;13819;:14;;;13812:21;;13727:114;;;:::o;12616:116::-;12698:16;12706:7;12698;:16::i;:::-;12690:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;12616:116;:::o;4544:98::-;4597:7;4624:10;4617:17;;4544:98;:::o;12169:174::-;12271:2;12244:15;:24;12260:7;12244:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12327:7;12323:2;12289:46;;12298:23;12313:7;12298:14;:23::i;:::-;12289:46;;;;;;;;;;;;12169:174;;:::o;10290:264::-;10383:4;10400:13;10416:23;10431:7;10416:14;:23::i;:::-;10400:39;;10469:5;10458:16;;:7;:16;;;:52;;;;10478:32;10495:5;10502:7;10478:16;:32::i;:::-;10458:52;:87;;;;10538:7;10514:31;;:20;10526:7;10514:11;:20::i;:::-;:31;;;10458:87;10450:96;;;10290:264;;;;:::o;11697:466::-;11822:4;11795:31;;:23;11810:7;11795:14;:23::i;:::-;:31;;;11787:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;11869:1;11855:16;;:2;:16;;;;11847:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;11892:39;11913:4;11919:2;11923:7;11892:20;:39::i;:::-;11942:29;11959:1;11963:7;11942:8;:29::i;:::-;12001:1;11982:9;:15;11992:4;11982:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;12030:1;12013:9;:13;12023:2;12013:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;12061:2;12042:7;:16;12050:7;12042:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12098:7;12094:2;12079:27;;12088:4;12079:27;;;;;;;;;;;;12117:38;12137:4;12143:2;12147:7;12117:19;:38::i;:::-;11697:466;;;:::o;16079:105::-;16154:12;:10;:12::i;:::-;16143:23;;:7;:5;:7::i;:::-;:23;;;16135:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;16079:105::o;16473:191::-;16547:16;16566:6;;;;;;;;;;;16547:25;;16592:8;16583:6;;:17;;;;;;;;;;;;;;;;;;16647:8;16616:40;;16637:8;16616:40;;;;;;;;;;;;16473:191;;:::o;12349:261::-;12470:8;12461:17;;:5;:17;;;;12453:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;12537:8;12499:18;:25;12518:5;12499:25;;;;;;;;;;;;;;;:35;12525:8;12499:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12583:8;12561:41;;12576:5;12561:41;;;12593:8;12561:41;;;;;;:::i;:::-;;;;;;;;12349:261;;;:::o;9926:225::-;10039:28;10049:4;10055:2;10059:7;10039:9;:28::i;:::-;10086:47;10109:4;10115:2;10119:7;10128:4;10086:22;:47::i;:::-;10078:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;9926:225;;;;:::o;8319:94::-;8370:13;8396:9;;;;;;;;;;;;;;8319:94;:::o;8034:279::-;8107:13;8133:23;8148:7;8133:14;:23::i;:::-;8167:21;8191:10;:8;:10::i;:::-;8167:34;;8243:1;8225:7;8219:21;:25;:86;;;;;;;;;;;;;;;;;8271:7;8280:18;:7;:16;:18::i;:::-;8254:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8219:86;8212:93;;;8034:279;;;:::o;13847:127::-;13954:1;13936:7;:14;;;:19;;;;;;;;;;;13847:127;:::o;10922:381::-;11016:1;11002:16;;:2;:16;;;;10994:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;11048:16;11056:7;11048;:16::i;:::-;11047:17;11039:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;11085:45;11114:1;11118:2;11122:7;11085:20;:45::i;:::-;11158:1;11141:9;:13;11151:2;11141:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11189:2;11170:7;:16;11178:7;11170:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11232:7;11228:2;11207:33;;11224:1;11207:33;;;;;;;;;;;;11251:44;11279:1;11283:2;11287:7;11251:19;:44::i;:::-;10922:381;;:::o;15288:176::-;15388:16;15396:7;15388;:16::i;:::-;15380:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;15447:9;15425:10;:19;15436:7;15425:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;15288:176;;:::o;10157:127::-;10222:4;10274:1;10246:30;;:7;:16;10254:7;10246:16;;;;;;;;;;;;;;;;;;;;;:30;;;;10239:37;;10157:127;;;:::o;13453:92::-;;;;:::o;13551:91::-;;;;:::o;12738:709::-;12849:4;12870:15;:2;:13;;;:15::i;:::-;12866:574;;;12922:2;12906:36;;;12943:12;:10;:12::i;:::-;12957:4;12963:7;12972:4;12906:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12902:483;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13164:1;13147:6;:13;:18;13143:227;;;13190:15;;;;;;;;;;:::i;:::-;;;;;;;;13143:227;13320:6;13314:13;13305:6;13301:2;13297:15;13290:38;12902:483;13038:41;;;13028:51;;;:6;:51;;;;13021:58;;;;;12866:574;13424:4;13417:11;;12738:709;;;;;;;:::o;4894:532::-;4950:13;4989:1;4980:5;:10;4976:53;;;5007:10;;;;;;;;;;;;;;;;;;;;;4976:53;5039:12;5054:5;5039:20;;5070:14;5095:78;5110:1;5102:4;:9;5095:78;;5128:8;;;;;:::i;:::-;;;;5159:2;5151:10;;;;;:::i;:::-;;;5095:78;;;5183:19;5215:6;5205:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5183:39;;5233:154;5249:1;5240:5;:10;5233:154;;5277:1;5267:11;;;;;:::i;:::-;;;5344:2;5336:5;:10;;;;:::i;:::-;5323:2;:24;;;;:::i;:::-;5310:39;;5293:6;5300;5293:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;5373:2;5364:11;;;;;:::i;:::-;;;5233:154;;;5411:6;5397:21;;;;;4894:532;;;;:::o;1653:115::-;1713:4;1759:1;1737:7;:19;;;:23;1730:30;;1653:115;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:552::-;4960:6;4968;4976;5025:2;5013:9;5004:7;5000:23;4996:32;4993:2;;;5041:1;5038;5031:12;4993:2;5084:1;5109:53;5154:7;5145:6;5134:9;5130:22;5109:53;:::i;:::-;5099:63;;5055:117;5211:2;5237:53;5282:7;5273:6;5262:9;5258:22;5237:53;:::i;:::-;5227:63;;5182:118;5339:2;5365:53;5410:7;5401:6;5390:9;5386:22;5365:53;:::i;:::-;5355:63;;5310:118;4983:452;;;;;:::o;5441:844::-;5536:6;5544;5552;5560;5568;5617:3;5605:9;5596:7;5592:23;5588:33;5585:2;;;5634:1;5631;5624:12;5585:2;5677:1;5702:53;5747:7;5738:6;5727:9;5723:22;5702:53;:::i;:::-;5692:63;;5648:117;5804:2;5830:53;5875:7;5866:6;5855:9;5851:22;5830:53;:::i;:::-;5820:63;;5775:118;5932:2;5958:53;6003:7;5994:6;5983:9;5979:22;5958:53;:::i;:::-;5948:63;;5903:118;6060:2;6086:53;6131:7;6122:6;6111:9;6107:22;6086:53;:::i;:::-;6076:63;;6031:118;6188:3;6215:53;6260:7;6251:6;6240:9;6236:22;6215:53;:::i;:::-;6205:63;;6159:119;5575:710;;;;;;;;:::o;6291:260::-;6349:6;6398:2;6386:9;6377:7;6373:23;6369:32;6366:2;;;6414:1;6411;6404:12;6366:2;6457:1;6482:52;6526:7;6517:6;6506:9;6502:22;6482:52;:::i;:::-;6472:62;;6428:116;6356:195;;;;:::o;6557:282::-;6626:6;6675:2;6663:9;6654:7;6650:23;6646:32;6643:2;;;6691:1;6688;6681:12;6643:2;6734:1;6759:63;6814:7;6805:6;6794:9;6790:22;6759:63;:::i;:::-;6749:73;;6705:127;6633:206;;;;:::o;6845:375::-;6914:6;6963:2;6951:9;6942:7;6938:23;6934:32;6931:2;;;6979:1;6976;6969:12;6931:2;7050:1;7039:9;7035:17;7022:31;7080:18;7072:6;7069:30;7066:2;;;7112:1;7109;7102:12;7066:2;7140:63;7195:7;7186:6;7175:9;7171:22;7140:63;:::i;:::-;7130:73;;6993:220;6921:299;;;;:::o;7226:262::-;7285:6;7334:2;7322:9;7313:7;7309:23;7305:32;7302:2;;;7350:1;7347;7340:12;7302:2;7393:1;7418:53;7463:7;7454:6;7443:9;7439:22;7418:53;:::i;:::-;7408:63;;7364:117;7292:196;;;;:::o;7494:407::-;7562:6;7570;7619:2;7607:9;7598:7;7594:23;7590:32;7587:2;;;7635:1;7632;7625:12;7587:2;7678:1;7703:53;7748:7;7739:6;7728:9;7724:22;7703:53;:::i;:::-;7693:63;;7649:117;7805:2;7831:53;7876:7;7867:6;7856:9;7852:22;7831:53;:::i;:::-;7821:63;;7776:118;7577:324;;;;;:::o;7907:698::-;7993:6;8001;8009;8017;8066:3;8054:9;8045:7;8041:23;8037:33;8034:2;;;8083:1;8080;8073:12;8034:2;8126:1;8151:53;8196:7;8187:6;8176:9;8172:22;8151:53;:::i;:::-;8141:63;;8097:117;8253:2;8279:53;8324:7;8315:6;8304:9;8300:22;8279:53;:::i;:::-;8269:63;;8224:118;8381:2;8407:53;8452:7;8443:6;8432:9;8428:22;8407:53;:::i;:::-;8397:63;;8352:118;8509:2;8535:53;8580:7;8571:6;8560:9;8556:22;8535:53;:::i;:::-;8525:63;;8480:118;8024:581;;;;;;;:::o;8611:147::-;8706:45;8745:5;8706:45;:::i;:::-;8701:3;8694:58;8684:74;;:::o;8764:118::-;8851:24;8869:5;8851:24;:::i;:::-;8846:3;8839:37;8829:53;;:::o;8888:109::-;8969:21;8984:5;8969:21;:::i;:::-;8964:3;8957:34;8947:50;;:::o;9003:360::-;9089:3;9117:38;9149:5;9117:38;:::i;:::-;9171:70;9234:6;9229:3;9171:70;:::i;:::-;9164:77;;9250:52;9295:6;9290:3;9283:4;9276:5;9272:16;9250:52;:::i;:::-;9327:29;9349:6;9327:29;:::i;:::-;9322:3;9318:39;9311:46;;9093:270;;;;;:::o;9369:147::-;9464:45;9503:5;9464:45;:::i;:::-;9459:3;9452:58;9442:74;;:::o;9522:364::-;9610:3;9638:39;9671:5;9638:39;:::i;:::-;9693:71;9757:6;9752:3;9693:71;:::i;:::-;9686:78;;9773:52;9818:6;9813:3;9806:4;9799:5;9795:16;9773:52;:::i;:::-;9850:29;9872:6;9850:29;:::i;:::-;9845:3;9841:39;9834:46;;9614:272;;;;;:::o;9892:377::-;9998:3;10026:39;10059:5;10026:39;:::i;:::-;10081:89;10163:6;10158:3;10081:89;:::i;:::-;10074:96;;10179:52;10224:6;10219:3;10212:4;10205:5;10201:16;10179:52;:::i;:::-;10256:6;10251:3;10247:16;10240:23;;10002:267;;;;;:::o;10275:365::-;10417:3;10438:66;10502:1;10497:3;10438:66;:::i;:::-;10431:73;;10513:93;10602:3;10513:93;:::i;:::-;10631:2;10626:3;10622:12;10615:19;;10421:219;;;:::o;10646:365::-;10788:3;10809:66;10873:1;10868:3;10809:66;:::i;:::-;10802:73;;10884:93;10973:3;10884:93;:::i;:::-;11002:2;10997:3;10993:12;10986:19;;10792:219;;;:::o;11017:365::-;11159:3;11180:66;11244:1;11239:3;11180:66;:::i;:::-;11173:73;;11255:93;11344:3;11255:93;:::i;:::-;11373:2;11368:3;11364:12;11357:19;;11163:219;;;:::o;11388:365::-;11530:3;11551:66;11615:1;11610:3;11551:66;:::i;:::-;11544:73;;11626:93;11715:3;11626:93;:::i;:::-;11744:2;11739:3;11735:12;11728:19;;11534:219;;;:::o;11759:365::-;11901:3;11922:66;11986:1;11981:3;11922:66;:::i;:::-;11915:73;;11997:93;12086:3;11997:93;:::i;:::-;12115:2;12110:3;12106:12;12099:19;;11905:219;;;:::o;12130:365::-;12272:3;12293:66;12357:1;12352:3;12293:66;:::i;:::-;12286:73;;12368:93;12457:3;12368:93;:::i;:::-;12486:2;12481:3;12477:12;12470:19;;12276:219;;;:::o;12501:365::-;12643:3;12664:66;12728:1;12723:3;12664:66;:::i;:::-;12657:73;;12739:93;12828:3;12739:93;:::i;:::-;12857:2;12852:3;12848:12;12841:19;;12647:219;;;:::o;12872:365::-;13014:3;13035:66;13099:1;13094:3;13035:66;:::i;:::-;13028:73;;13110:93;13199:3;13110:93;:::i;:::-;13228:2;13223:3;13219:12;13212:19;;13018:219;;;:::o;13243:365::-;13385:3;13406:66;13470:1;13465:3;13406:66;:::i;:::-;13399:73;;13481:93;13570:3;13481:93;:::i;:::-;13599:2;13594:3;13590:12;13583:19;;13389:219;;;:::o;13614:365::-;13756:3;13777:66;13841:1;13836:3;13777:66;:::i;:::-;13770:73;;13852:93;13941:3;13852:93;:::i;:::-;13970:2;13965:3;13961:12;13954:19;;13760:219;;;:::o;13985:365::-;14127:3;14148:66;14212:1;14207:3;14148:66;:::i;:::-;14141:73;;14223:93;14312:3;14223:93;:::i;:::-;14341:2;14336:3;14332:12;14325:19;;14131:219;;;:::o;14356:365::-;14498:3;14519:66;14583:1;14578:3;14519:66;:::i;:::-;14512:73;;14594:93;14683:3;14594:93;:::i;:::-;14712:2;14707:3;14703:12;14696:19;;14502:219;;;:::o;14727:365::-;14869:3;14890:66;14954:1;14949:3;14890:66;:::i;:::-;14883:73;;14965:93;15054:3;14965:93;:::i;:::-;15083:2;15078:3;15074:12;15067:19;;14873:219;;;:::o;15098:365::-;15240:3;15261:66;15325:1;15320:3;15261:66;:::i;:::-;15254:73;;15336:93;15425:3;15336:93;:::i;:::-;15454:2;15449:3;15445:12;15438:19;;15244:219;;;:::o;15469:365::-;15611:3;15632:66;15696:1;15691:3;15632:66;:::i;:::-;15625:73;;15707:93;15796:3;15707:93;:::i;:::-;15825:2;15820:3;15816:12;15809:19;;15615:219;;;:::o;15840:365::-;15982:3;16003:66;16067:1;16062:3;16003:66;:::i;:::-;15996:73;;16078:93;16167:3;16078:93;:::i;:::-;16196:2;16191:3;16187:12;16180:19;;15986:219;;;:::o;16211:365::-;16353:3;16374:66;16438:1;16433:3;16374:66;:::i;:::-;16367:73;;16449:93;16538:3;16449:93;:::i;:::-;16567:2;16562:3;16558:12;16551:19;;16357:219;;;:::o;16582:365::-;16724:3;16745:66;16809:1;16804:3;16745:66;:::i;:::-;16738:73;;16820:93;16909:3;16820:93;:::i;:::-;16938:2;16933:3;16929:12;16922:19;;16728:219;;;:::o;16953:365::-;17095:3;17116:66;17180:1;17175:3;17116:66;:::i;:::-;17109:73;;17191:93;17280:3;17191:93;:::i;:::-;17309:2;17304:3;17300:12;17293:19;;17099:219;;;:::o;17324:365::-;17466:3;17487:66;17551:1;17546:3;17487:66;:::i;:::-;17480:73;;17562:93;17651:3;17562:93;:::i;:::-;17680:2;17675:3;17671:12;17664:19;;17470:219;;;:::o;17695:365::-;17837:3;17858:66;17922:1;17917:3;17858:66;:::i;:::-;17851:73;;17933:93;18022:3;17933:93;:::i;:::-;18051:2;18046:3;18042:12;18035:19;;17841:219;;;:::o;18066:365::-;18208:3;18229:66;18293:1;18288:3;18229:66;:::i;:::-;18222:73;;18304:93;18393:3;18304:93;:::i;:::-;18422:2;18417:3;18413:12;18406:19;;18212:219;;;:::o;18437:365::-;18579:3;18600:66;18664:1;18659:3;18600:66;:::i;:::-;18593:73;;18675:93;18764:3;18675:93;:::i;:::-;18793:2;18788:3;18784:12;18777:19;;18583:219;;;:::o;18808:365::-;18950:3;18971:66;19035:1;19030:3;18971:66;:::i;:::-;18964:73;;19046:93;19135:3;19046:93;:::i;:::-;19164:2;19159:3;19155:12;19148:19;;18954:219;;;:::o;19179:365::-;19321:3;19342:66;19406:1;19401:3;19342:66;:::i;:::-;19335:73;;19417:93;19506:3;19417:93;:::i;:::-;19535:2;19530:3;19526:12;19519:19;;19325:219;;;:::o;19550:365::-;19692:3;19713:66;19777:1;19772:3;19713:66;:::i;:::-;19706:73;;19788:93;19877:3;19788:93;:::i;:::-;19906:2;19901:3;19897:12;19890:19;;19696:219;;;:::o;19921:365::-;20063:3;20084:66;20148:1;20143:3;20084:66;:::i;:::-;20077:73;;20159:93;20248:3;20159:93;:::i;:::-;20277:2;20272:3;20268:12;20261:19;;20067:219;;;:::o;20292:365::-;20434:3;20455:66;20519:1;20514:3;20455:66;:::i;:::-;20448:73;;20530:93;20619:3;20530:93;:::i;:::-;20648:2;20643:3;20639:12;20632:19;;20438:219;;;:::o;20663:365::-;20805:3;20826:66;20890:1;20885:3;20826:66;:::i;:::-;20819:73;;20901:93;20990:3;20901:93;:::i;:::-;21019:2;21014:3;21010:12;21003:19;;20809:219;;;:::o;21034:365::-;21176:3;21197:66;21261:1;21256:3;21197:66;:::i;:::-;21190:73;;21272:93;21361:3;21272:93;:::i;:::-;21390:2;21385:3;21381:12;21374:19;;21180:219;;;:::o;21405:365::-;21547:3;21568:66;21632:1;21627:3;21568:66;:::i;:::-;21561:73;;21643:93;21732:3;21643:93;:::i;:::-;21761:2;21756:3;21752:12;21745:19;;21551:219;;;:::o;21776:365::-;21918:3;21939:66;22003:1;21998:3;21939:66;:::i;:::-;21932:73;;22014:93;22103:3;22014:93;:::i;:::-;22132:2;22127:3;22123:12;22116:19;;21922:219;;;:::o;22147:365::-;22289:3;22310:66;22374:1;22369:3;22310:66;:::i;:::-;22303:73;;22385:93;22474:3;22385:93;:::i;:::-;22503:2;22498:3;22494:12;22487:19;;22293:219;;;:::o;22518:365::-;22660:3;22681:66;22745:1;22740:3;22681:66;:::i;:::-;22674:73;;22756:93;22845:3;22756:93;:::i;:::-;22874:2;22869:3;22865:12;22858:19;;22664:219;;;:::o;22889:365::-;23031:3;23052:66;23116:1;23111:3;23052:66;:::i;:::-;23045:73;;23127:93;23216:3;23127:93;:::i;:::-;23245:2;23240:3;23236:12;23229:19;;23035:219;;;:::o;23260:365::-;23402:3;23423:66;23487:1;23482:3;23423:66;:::i;:::-;23416:73;;23498:93;23587:3;23498:93;:::i;:::-;23616:2;23611:3;23607:12;23600:19;;23406:219;;;:::o;23631:365::-;23773:3;23794:66;23858:1;23853:3;23794:66;:::i;:::-;23787:73;;23869:93;23958:3;23869:93;:::i;:::-;23987:2;23982:3;23978:12;23971:19;;23777:219;;;:::o;24002:365::-;24144:3;24165:66;24229:1;24224:3;24165:66;:::i;:::-;24158:73;;24240:93;24329:3;24240:93;:::i;:::-;24358:2;24353:3;24349:12;24342:19;;24148:219;;;:::o;24373:118::-;24460:24;24478:5;24460:24;:::i;:::-;24455:3;24448:37;24438:53;;:::o;24497:435::-;24677:3;24699:95;24790:3;24781:6;24699:95;:::i;:::-;24692:102;;24811:95;24902:3;24893:6;24811:95;:::i;:::-;24804:102;;24923:3;24916:10;;24681:251;;;;;:::o;24938:222::-;25031:4;25069:2;25058:9;25054:18;25046:26;;25082:71;25150:1;25139:9;25135:17;25126:6;25082:71;:::i;:::-;25036:124;;;;:::o;25166:458::-;25323:4;25361:2;25350:9;25346:18;25338:26;;25374:71;25442:1;25431:9;25427:17;25418:6;25374:71;:::i;:::-;25455:80;25531:2;25520:9;25516:18;25507:6;25455:80;:::i;:::-;25545:72;25613:2;25602:9;25598:18;25589:6;25545:72;:::i;:::-;25328:296;;;;;;:::o;25630:442::-;25779:4;25817:2;25806:9;25802:18;25794:26;;25830:71;25898:1;25887:9;25883:17;25874:6;25830:71;:::i;:::-;25911:72;25979:2;25968:9;25964:18;25955:6;25911:72;:::i;:::-;25993;26061:2;26050:9;26046:18;26037:6;25993:72;:::i;:::-;25784:288;;;;;;:::o;26078:640::-;26273:4;26311:3;26300:9;26296:19;26288:27;;26325:71;26393:1;26382:9;26378:17;26369:6;26325:71;:::i;:::-;26406:72;26474:2;26463:9;26459:18;26450:6;26406:72;:::i;:::-;26488;26556:2;26545:9;26541:18;26532:6;26488:72;:::i;:::-;26607:9;26601:4;26597:20;26592:2;26581:9;26577:18;26570:48;26635:76;26706:4;26697:6;26635:76;:::i;:::-;26627:84;;26278:440;;;;;;;:::o;26724:210::-;26811:4;26849:2;26838:9;26834:18;26826:26;;26862:65;26924:1;26913:9;26909:17;26900:6;26862:65;:::i;:::-;26816:118;;;;:::o;26940:313::-;27053:4;27091:2;27080:9;27076:18;27068:26;;27140:9;27134:4;27130:20;27126:1;27115:9;27111:17;27104:47;27168:78;27241:4;27232:6;27168:78;:::i;:::-;27160:86;;27058:195;;;;:::o;27259:759::-;27486:4;27524:3;27513:9;27509:19;27501:27;;27574:9;27568:4;27564:20;27560:1;27549:9;27545:17;27538:47;27602:78;27675:4;27666:6;27602:78;:::i;:::-;27594:86;;27690:72;27758:2;27747:9;27743:18;27734:6;27690:72;:::i;:::-;27772;27840:2;27829:9;27825:18;27816:6;27772:72;:::i;:::-;27854:80;27930:2;27919:9;27915:18;27906:6;27854:80;:::i;:::-;27944:67;28006:3;27995:9;27991:19;27982:6;27944:67;:::i;:::-;27491:527;;;;;;;;:::o;28024:419::-;28190:4;28228:2;28217:9;28213:18;28205:26;;28277:9;28271:4;28267:20;28263:1;28252:9;28248:17;28241:47;28305:131;28431:4;28305:131;:::i;:::-;28297:139;;28195:248;;;:::o;28449:419::-;28615:4;28653:2;28642:9;28638:18;28630:26;;28702:9;28696:4;28692:20;28688:1;28677:9;28673:17;28666:47;28730:131;28856:4;28730:131;:::i;:::-;28722:139;;28620:248;;;:::o;28874:419::-;29040:4;29078:2;29067:9;29063:18;29055:26;;29127:9;29121:4;29117:20;29113:1;29102:9;29098:17;29091:47;29155:131;29281:4;29155:131;:::i;:::-;29147:139;;29045:248;;;:::o;29299:419::-;29465:4;29503:2;29492:9;29488:18;29480:26;;29552:9;29546:4;29542:20;29538:1;29527:9;29523:17;29516:47;29580:131;29706:4;29580:131;:::i;:::-;29572:139;;29470:248;;;:::o;29724:419::-;29890:4;29928:2;29917:9;29913:18;29905:26;;29977:9;29971:4;29967:20;29963:1;29952:9;29948:17;29941:47;30005:131;30131:4;30005:131;:::i;:::-;29997:139;;29895:248;;;:::o;30149:419::-;30315:4;30353:2;30342:9;30338:18;30330:26;;30402:9;30396:4;30392:20;30388:1;30377:9;30373:17;30366:47;30430:131;30556:4;30430:131;:::i;:::-;30422:139;;30320:248;;;:::o;30574:419::-;30740:4;30778:2;30767:9;30763:18;30755:26;;30827:9;30821:4;30817:20;30813:1;30802:9;30798:17;30791:47;30855:131;30981:4;30855:131;:::i;:::-;30847:139;;30745:248;;;:::o;30999:419::-;31165:4;31203:2;31192:9;31188:18;31180:26;;31252:9;31246:4;31242:20;31238:1;31227:9;31223:17;31216:47;31280:131;31406:4;31280:131;:::i;:::-;31272:139;;31170:248;;;:::o;31424:419::-;31590:4;31628:2;31617:9;31613:18;31605:26;;31677:9;31671:4;31667:20;31663:1;31652:9;31648:17;31641:47;31705:131;31831:4;31705:131;:::i;:::-;31697:139;;31595:248;;;:::o;31849:419::-;32015:4;32053:2;32042:9;32038:18;32030:26;;32102:9;32096:4;32092:20;32088:1;32077:9;32073:17;32066:47;32130:131;32256:4;32130:131;:::i;:::-;32122:139;;32020:248;;;:::o;32274:419::-;32440:4;32478:2;32467:9;32463:18;32455:26;;32527:9;32521:4;32517:20;32513:1;32502:9;32498:17;32491:47;32555:131;32681:4;32555:131;:::i;:::-;32547:139;;32445:248;;;:::o;32699:419::-;32865:4;32903:2;32892:9;32888:18;32880:26;;32952:9;32946:4;32942:20;32938:1;32927:9;32923:17;32916:47;32980:131;33106:4;32980:131;:::i;:::-;32972:139;;32870:248;;;:::o;33124:419::-;33290:4;33328:2;33317:9;33313:18;33305:26;;33377:9;33371:4;33367:20;33363:1;33352:9;33348:17;33341:47;33405:131;33531:4;33405:131;:::i;:::-;33397:139;;33295:248;;;:::o;33549:419::-;33715:4;33753:2;33742:9;33738:18;33730:26;;33802:9;33796:4;33792:20;33788:1;33777:9;33773:17;33766:47;33830:131;33956:4;33830:131;:::i;:::-;33822:139;;33720:248;;;:::o;33974:419::-;34140:4;34178:2;34167:9;34163:18;34155:26;;34227:9;34221:4;34217:20;34213:1;34202:9;34198:17;34191:47;34255:131;34381:4;34255:131;:::i;:::-;34247:139;;34145:248;;;:::o;34399:419::-;34565:4;34603:2;34592:9;34588:18;34580:26;;34652:9;34646:4;34642:20;34638:1;34627:9;34623:17;34616:47;34680:131;34806:4;34680:131;:::i;:::-;34672:139;;34570:248;;;:::o;34824:419::-;34990:4;35028:2;35017:9;35013:18;35005:26;;35077:9;35071:4;35067:20;35063:1;35052:9;35048:17;35041:47;35105:131;35231:4;35105:131;:::i;:::-;35097:139;;34995:248;;;:::o;35249:419::-;35415:4;35453:2;35442:9;35438:18;35430:26;;35502:9;35496:4;35492:20;35488:1;35477:9;35473:17;35466:47;35530:131;35656:4;35530:131;:::i;:::-;35522:139;;35420:248;;;:::o;35674:419::-;35840:4;35878:2;35867:9;35863:18;35855:26;;35927:9;35921:4;35917:20;35913:1;35902:9;35898:17;35891:47;35955:131;36081:4;35955:131;:::i;:::-;35947:139;;35845:248;;;:::o;36099:419::-;36265:4;36303:2;36292:9;36288:18;36280:26;;36352:9;36346:4;36342:20;36338:1;36327:9;36323:17;36316:47;36380:131;36506:4;36380:131;:::i;:::-;36372:139;;36270:248;;;:::o;36524:419::-;36690:4;36728:2;36717:9;36713:18;36705:26;;36777:9;36771:4;36767:20;36763:1;36752:9;36748:17;36741:47;36805:131;36931:4;36805:131;:::i;:::-;36797:139;;36695:248;;;:::o;36949:419::-;37115:4;37153:2;37142:9;37138:18;37130:26;;37202:9;37196:4;37192:20;37188:1;37177:9;37173:17;37166:47;37230:131;37356:4;37230:131;:::i;:::-;37222:139;;37120:248;;;:::o;37374:419::-;37540:4;37578:2;37567:9;37563:18;37555:26;;37627:9;37621:4;37617:20;37613:1;37602:9;37598:17;37591:47;37655:131;37781:4;37655:131;:::i;:::-;37647:139;;37545:248;;;:::o;37799:419::-;37965:4;38003:2;37992:9;37988:18;37980:26;;38052:9;38046:4;38042:20;38038:1;38027:9;38023:17;38016:47;38080:131;38206:4;38080:131;:::i;:::-;38072:139;;37970:248;;;:::o;38224:419::-;38390:4;38428:2;38417:9;38413:18;38405:26;;38477:9;38471:4;38467:20;38463:1;38452:9;38448:17;38441:47;38505:131;38631:4;38505:131;:::i;:::-;38497:139;;38395:248;;;:::o;38649:419::-;38815:4;38853:2;38842:9;38838:18;38830:26;;38902:9;38896:4;38892:20;38888:1;38877:9;38873:17;38866:47;38930:131;39056:4;38930:131;:::i;:::-;38922:139;;38820:248;;;:::o;39074:419::-;39240:4;39278:2;39267:9;39263:18;39255:26;;39327:9;39321:4;39317:20;39313:1;39302:9;39298:17;39291:47;39355:131;39481:4;39355:131;:::i;:::-;39347:139;;39245:248;;;:::o;39499:419::-;39665:4;39703:2;39692:9;39688:18;39680:26;;39752:9;39746:4;39742:20;39738:1;39727:9;39723:17;39716:47;39780:131;39906:4;39780:131;:::i;:::-;39772:139;;39670:248;;;:::o;39924:419::-;40090:4;40128:2;40117:9;40113:18;40105:26;;40177:9;40171:4;40167:20;40163:1;40152:9;40148:17;40141:47;40205:131;40331:4;40205:131;:::i;:::-;40197:139;;40095:248;;;:::o;40349:419::-;40515:4;40553:2;40542:9;40538:18;40530:26;;40602:9;40596:4;40592:20;40588:1;40577:9;40573:17;40566:47;40630:131;40756:4;40630:131;:::i;:::-;40622:139;;40520:248;;;:::o;40774:419::-;40940:4;40978:2;40967:9;40963:18;40955:26;;41027:9;41021:4;41017:20;41013:1;41002:9;40998:17;40991:47;41055:131;41181:4;41055:131;:::i;:::-;41047:139;;40945:248;;;:::o;41199:419::-;41365:4;41403:2;41392:9;41388:18;41380:26;;41452:9;41446:4;41442:20;41438:1;41427:9;41423:17;41416:47;41480:131;41606:4;41480:131;:::i;:::-;41472:139;;41370:248;;;:::o;41624:419::-;41790:4;41828:2;41817:9;41813:18;41805:26;;41877:9;41871:4;41867:20;41863:1;41852:9;41848:17;41841:47;41905:131;42031:4;41905:131;:::i;:::-;41897:139;;41795:248;;;:::o;42049:419::-;42215:4;42253:2;42242:9;42238:18;42230:26;;42302:9;42296:4;42292:20;42288:1;42277:9;42273:17;42266:47;42330:131;42456:4;42330:131;:::i;:::-;42322:139;;42220:248;;;:::o;42474:419::-;42640:4;42678:2;42667:9;42663:18;42655:26;;42727:9;42721:4;42717:20;42713:1;42702:9;42698:17;42691:47;42755:131;42881:4;42755:131;:::i;:::-;42747:139;;42645:248;;;:::o;42899:419::-;43065:4;43103:2;43092:9;43088:18;43080:26;;43152:9;43146:4;43142:20;43138:1;43127:9;43123:17;43116:47;43180:131;43306:4;43180:131;:::i;:::-;43172:139;;43070:248;;;:::o;43324:419::-;43490:4;43528:2;43517:9;43513:18;43505:26;;43577:9;43571:4;43567:20;43563:1;43552:9;43548:17;43541:47;43605:131;43731:4;43605:131;:::i;:::-;43597:139;;43495:248;;;:::o;43749:419::-;43915:4;43953:2;43942:9;43938:18;43930:26;;44002:9;43996:4;43992:20;43988:1;43977:9;43973:17;43966:47;44030:131;44156:4;44030:131;:::i;:::-;44022:139;;43920:248;;;:::o;44174:222::-;44267:4;44305:2;44294:9;44290:18;44282:26;;44318:71;44386:1;44375:9;44371:17;44362:6;44318:71;:::i;:::-;44272:124;;;;:::o;44402:129::-;44436:6;44463:20;;:::i;:::-;44453:30;;44492:33;44520:4;44512:6;44492:33;:::i;:::-;44443:88;;;:::o;44537:75::-;44570:6;44603:2;44597:9;44587:19;;44577:35;:::o;44618:307::-;44679:4;44769:18;44761:6;44758:30;44755:2;;;44791:18;;:::i;:::-;44755:2;44829:29;44851:6;44829:29;:::i;:::-;44821:37;;44913:4;44907;44903:15;44895:23;;44684:241;;;:::o;44931:308::-;44993:4;45083:18;45075:6;45072:30;45069:2;;;45105:18;;:::i;:::-;45069:2;45143:29;45165:6;45143:29;:::i;:::-;45135:37;;45227:4;45221;45217:15;45209:23;;44998:241;;;:::o;45245:98::-;45296:6;45330:5;45324:12;45314:22;;45303:40;;;:::o;45349:99::-;45401:6;45435:5;45429:12;45419:22;;45408:40;;;:::o;45454:168::-;45537:11;45571:6;45566:3;45559:19;45611:4;45606:3;45602:14;45587:29;;45549:73;;;;:::o;45628:169::-;45712:11;45746:6;45741:3;45734:19;45786:4;45781:3;45777:14;45762:29;;45724:73;;;;:::o;45803:148::-;45905:11;45942:3;45927:18;;45917:34;;;;:::o;45957:305::-;45997:3;46016:20;46034:1;46016:20;:::i;:::-;46011:25;;46050:20;46068:1;46050:20;:::i;:::-;46045:25;;46204:1;46136:66;46132:74;46129:1;46126:81;46123:2;;;46210:18;;:::i;:::-;46123:2;46254:1;46251;46247:9;46240:16;;46001:261;;;;:::o;46268:185::-;46308:1;46325:20;46343:1;46325:20;:::i;:::-;46320:25;;46359:20;46377:1;46359:20;:::i;:::-;46354:25;;46398:1;46388:2;;46403:18;;:::i;:::-;46388:2;46445:1;46442;46438:9;46433:14;;46310:143;;;;:::o;46459:191::-;46499:4;46519:20;46537:1;46519:20;:::i;:::-;46514:25;;46553:20;46571:1;46553:20;:::i;:::-;46548:25;;46592:1;46589;46586:8;46583:2;;;46597:18;;:::i;:::-;46583:2;46642:1;46639;46635:9;46627:17;;46504:146;;;;:::o;46656:96::-;46693:7;46722:24;46740:5;46722:24;:::i;:::-;46711:35;;46701:51;;;:::o;46758:90::-;46792:7;46835:5;46828:13;46821:21;46810:32;;46800:48;;;:::o;46854:149::-;46890:7;46930:66;46923:5;46919:78;46908:89;;46898:105;;;:::o;47009:126::-;47046:7;47086:42;47079:5;47075:54;47064:65;;47054:81;;;:::o;47141:77::-;47178:7;47207:5;47196:16;;47186:32;;;:::o;47224:134::-;47282:9;47315:37;47346:5;47315:37;:::i;:::-;47302:50;;47292:66;;;:::o;47364:121::-;47422:9;47455:24;47473:5;47455:24;:::i;:::-;47442:37;;47432:53;;;:::o;47491:126::-;47541:9;47574:37;47605:5;47574:37;:::i;:::-;47561:50;;47551:66;;;:::o;47623:113::-;47673:9;47706:24;47724:5;47706:24;:::i;:::-;47693:37;;47683:53;;;:::o;47742:154::-;47826:6;47821:3;47816;47803:30;47888:1;47879:6;47874:3;47870:16;47863:27;47793:103;;;:::o;47902:307::-;47970:1;47980:113;47994:6;47991:1;47988:13;47980:113;;;48079:1;48074:3;48070:11;48064:18;48060:1;48055:3;48051:11;48044:39;48016:2;48013:1;48009:10;48004:15;;47980:113;;;48111:6;48108:1;48105:13;48102:2;;;48191:1;48182:6;48177:3;48173:16;48166:27;48102:2;47951:258;;;;:::o;48215:320::-;48259:6;48296:1;48290:4;48286:12;48276:22;;48343:1;48337:4;48333:12;48364:18;48354:2;;48420:4;48412:6;48408:17;48398:27;;48354:2;48482;48474:6;48471:14;48451:18;48448:38;48445:2;;;48501:18;;:::i;:::-;48445:2;48266:269;;;;:::o;48541:281::-;48624:27;48646:4;48624:27;:::i;:::-;48616:6;48612:40;48754:6;48742:10;48739:22;48718:18;48706:10;48703:34;48700:62;48697:2;;;48765:18;;:::i;:::-;48697:2;48805:10;48801:2;48794:22;48584:238;;;:::o;48828:233::-;48867:3;48890:24;48908:5;48890:24;:::i;:::-;48881:33;;48936:66;48929:5;48926:77;48923:2;;;49006:18;;:::i;:::-;48923:2;49053:1;49046:5;49042:13;49035:20;;48871:190;;;:::o;49067:176::-;49099:1;49116:20;49134:1;49116:20;:::i;:::-;49111:25;;49150:20;49168:1;49150:20;:::i;:::-;49145:25;;49189:1;49179:2;;49194:18;;:::i;:::-;49179:2;49235:1;49232;49228:9;49223:14;;49101:142;;;;:::o;49249:180::-;49297:77;49294:1;49287:88;49394:4;49391:1;49384:15;49418:4;49415:1;49408:15;49435:180;49483:77;49480:1;49473:88;49580:4;49577:1;49570:15;49604:4;49601:1;49594:15;49621:180;49669:77;49666:1;49659:88;49766:4;49763:1;49756:15;49790:4;49787:1;49780:15;49807:180;49855:77;49852:1;49845:88;49952:4;49949:1;49942:15;49976:4;49973:1;49966:15;49993:102;50034:6;50085:2;50081:7;50076:2;50069:5;50065:14;50061:28;50051:38;;50041:54;;;:::o;50101:155::-;50241:7;50237:1;50229:6;50225:14;50218:31;50207:49;:::o;50262:155::-;50402:7;50398:1;50390:6;50386:14;50379:31;50368:49;:::o;50423:156::-;50563:8;50559:1;50551:6;50547:14;50540:32;50529:50;:::o;50585:155::-;50725:7;50721:1;50713:6;50709:14;50702:31;50691:49;:::o;50746:156::-;50886:8;50882:1;50874:6;50870:14;50863:32;50852:50;:::o;50908:155::-;51048:7;51044:1;51036:6;51032:14;51025:31;51014:49;:::o;51069:155::-;51209:7;51205:1;51197:6;51193:14;51186:31;51175:49;:::o;51230:155::-;51370:7;51366:1;51358:6;51354:14;51347:31;51336:49;:::o;51391:156::-;51531:8;51527:1;51519:6;51515:14;51508:32;51497:50;:::o;51553:155::-;51693:7;51689:1;51681:6;51677:14;51670:31;51659:49;:::o;51714:155::-;51854:7;51850:1;51842:6;51838:14;51831:31;51820:49;:::o;51875:155::-;52015:7;52011:1;52003:6;51999:14;51992:31;51981:49;:::o;52036:155::-;52176:7;52172:1;52164:6;52160:14;52153:31;52142:49;:::o;52197:156::-;52337:8;52333:1;52325:6;52321:14;52314:32;52303:50;:::o;52359:155::-;52499:7;52495:1;52487:6;52483:14;52476:31;52465:49;:::o;52520:155::-;52660:7;52656:1;52648:6;52644:14;52637:31;52626:49;:::o;52681:156::-;52821:8;52817:1;52809:6;52805:14;52798:32;52787:50;:::o;52843:155::-;52983:7;52979:1;52971:6;52967:14;52960:31;52949:49;:::o;53004:155::-;53144:7;53140:1;53132:6;53128:14;53121:31;53110:49;:::o;53165:156::-;53305:8;53301:1;53293:6;53289:14;53282:32;53271:50;:::o;53327:155::-;53467:7;53463:1;53455:6;53451:14;53444:31;53433:49;:::o;53488:156::-;53628:8;53624:1;53616:6;53612:14;53605:32;53594:50;:::o;53650:155::-;53790:7;53786:1;53778:6;53774:14;53767:31;53756:49;:::o;53811:156::-;53951:8;53947:1;53939:6;53935:14;53928:32;53917:50;:::o;53973:155::-;54113:7;54109:1;54101:6;54097:14;54090:31;54079:49;:::o;54134:155::-;54274:7;54270:1;54262:6;54258:14;54251:31;54240:49;:::o;54295:155::-;54435:7;54431:1;54423:6;54419:14;54412:31;54401:49;:::o;54456:155::-;54596:7;54592:1;54584:6;54580:14;54573:31;54562:49;:::o;54617:155::-;54757:7;54753:1;54745:6;54741:14;54734:31;54723:49;:::o;54778:155::-;54918:7;54914:1;54906:6;54902:14;54895:31;54884:49;:::o;54939:156::-;55079:8;55075:1;55067:6;55063:14;55056:32;55045:50;:::o;55101:156::-;55241:8;55237:1;55229:6;55225:14;55218:32;55207:50;:::o;55263:155::-;55403:7;55399:1;55391:6;55387:14;55380:31;55369:49;:::o;55424:155::-;55564:7;55560:1;55552:6;55548:14;55541:31;55530:49;:::o;55585:155::-;55725:7;55721:1;55713:6;55709:14;55702:31;55691:49;:::o;55746:155::-;55886:7;55882:1;55874:6;55870:14;55863:31;55852:49;:::o;55907:156::-;56047:8;56043:1;56035:6;56031:14;56024:32;56013:50;:::o;56069:156::-;56209:8;56205:1;56197:6;56193:14;56186:32;56175:50;:::o;56231:122::-;56304:24;56322:5;56304:24;:::i;:::-;56297:5;56294:35;56284:2;;56343:1;56340;56333:12;56284:2;56274:79;:::o;56359:116::-;56429:21;56444:5;56429:21;:::i;:::-;56422:5;56419:32;56409:2;;56465:1;56462;56455:12;56409:2;56399:76;:::o;56481:120::-;56553:23;56570:5;56553:23;:::i;:::-;56546:5;56543:34;56533:2;;56591:1;56588;56581:12;56533:2;56523:78;:::o;56607:122::-;56680:24;56698:5;56680:24;:::i;:::-;56673:5;56670:35;56660:2;;56719:1;56716;56709:12;56660:2;56650:79;:::o

Swarm Source

ipfs://8a08a74c0f6272affa9df6d7917bb9dcd141bde43f60dda4ee88bad8610f7b48

Block Transaction Gas Used Reward
view all blocks produced

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

Validator Index Block Amount
View All Withdrawals

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