ETH Price: $2,391.43 (-3.48%)

Contract

0xe62cdC9539E67DD9296f6a40920D8A051F461BD9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Domain206343982024-08-29 12:59:5934 days ago1724936399IN
0xe62cdC95...51F461BD9
0 ETH0.000586932.9958666
Set Domain180320462023-08-31 4:03:59399 days ago1693454639IN
0xe62cdC95...51F461BD9
0 ETH0.0033723217.20067521
Set Domain171273962023-04-26 2:21:11526 days ago1682475671IN
0xe62cdC95...51F461BD9
0 ETH0.0079975740.78190099
Set Domain170301982023-04-12 6:36:35539 days ago1681281395IN
0xe62cdC95...51F461BD9
0 ETH0.0035071420.47635476
Set Domain169737002023-04-04 6:13:11547 days ago1680588791IN
0xe62cdC95...51F461BD9
0 ETH0.003452917.62244556
Set Domain168368702023-03-16 0:32:11567 days ago1678926731IN
0xe62cdC95...51F461BD9
0 ETH0.0043916722.40675892
Set Domain167143392023-02-26 18:58:47584 days ago1677437927IN
0xe62cdC95...51F461BD9
0 ETH0.0048946124.97890664
Set Domain166066572023-02-11 16:17:23599 days ago1676132243IN
0xe62cdC95...51F461BD9
0 ETH0.0063730432.5218407
Set Domain166052972023-02-11 11:43:47599 days ago1676115827IN
0xe62cdC95...51F461BD9
0 ETH0.0031326215.98687769
Set Domain165667782023-02-06 2:31:59605 days ago1675650719IN
0xe62cdC95...51F461BD9
0 ETH0.0031274615.95859376
Set Domain161998932022-12-16 21:18:59656 days ago1671225539IN
0xe62cdC95...51F461BD9
0 ETH0.0037779419.27896164
Set Domain160428092022-11-24 22:25:11678 days ago1669328711IN
0xe62cdC95...51F461BD9
0 ETH0.0023146611.81398716
Set Domain160362532022-11-24 0:27:47679 days ago1669249667IN
0xe62cdC95...51F461BD9
0 ETH0.002151610.98376413
Reset Domain For...160329962022-11-23 13:28:59679 days ago1669210139IN
0xe62cdC95...51F461BD9
0 ETH0.0006095211.85387352
Set Domain160328832022-11-23 13:06:23679 days ago1669208783IN
0xe62cdC95...51F461BD9
0 ETH0.0022420911.43870046
Set Domain159046862022-11-05 15:23:47697 days ago1667661827IN
0xe62cdC95...51F461BD9
0 ETH0.002557213.05269706
Set Domain158989652022-11-04 20:13:11698 days ago1667592791IN
0xe62cdC95...51F461BD9
0 ETH0.003459117.64326941
Reset Domain For...158913152022-11-03 18:35:47699 days ago1667500547IN
0xe62cdC95...51F461BD9
0 ETH0.0008375420.00257842
Set Domain158477032022-10-28 16:17:23705 days ago1666973843IN
0xe62cdC95...51F461BD9
0 ETH0.0046846423.90442347
Set Domain158136442022-10-23 21:57:59710 days ago1666562279IN
0xe62cdC95...51F461BD9
0 ETH0.0024974912.74714914
Set Domain158135002022-10-23 21:28:59710 days ago1666560539IN
0xe62cdC95...51F461BD9
0 ETH0.0021929511.19207454
Set Domain155821852022-09-21 13:55:59742 days ago1663768559IN
0xe62cdC95...51F461BD9
0 ETH0.001604688.19124502
Set Domain155814112022-09-21 11:19:23742 days ago1663759163IN
0xe62cdC95...51F461BD9
0 ETH0.000822434.19641675
Set Domain155706862022-09-19 23:00:47744 days ago1663628447IN
0xe62cdC95...51F461BD9
0 ETH0.001371767.00187871
Set Domain155306972022-09-14 3:22:07750 days ago1663125727IN
0xe62cdC95...51F461BD9
0 ETH0.001357746.93031353
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ENS721Mapper

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
File 1 of 8 : ENS721Mapper.sol
//SPDX-License-Identifier: MIT
//Tweaks ENS Mapper

pragma solidity ^0.8.2;

import "@ensdomains/ens-contracts/contracts/registry/ENS.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

interface IERC20 {
	function balanceOf(address account) external view returns (uint256);
	function transfer(address recipient, uint256 amount) external returns (bool);
}

contract ENS721Mapper is Ownable {

    using Strings for uint256;

    ENS private ens;    
    IERC721Enumerable public nft;
    bytes32 public domainHash;
    mapping(bytes32 => mapping(string => string)) public texts;
   
    mapping(address => mapping(uint256 => uint256)) public nextRegisterTimestamp;

    string public domainLabel = "tweak";
    string public nftImageBaseUri = "ipfs://QmdC8TQsPgmBK419dDD7Xov62DLTsCWX87zZPD2WdDPZLx/";
    bool public useEIP155 = true;
    
    mapping(bytes32 => uint256) public hashToIdMap;
    mapping(uint256 => bytes32) public tokenHashmap;
    mapping(bytes32 => string) public hashToDomainMap;

    uint256 public reset_period = 7257600; //12 weeks
    uint256 public claimFee = 2; //test claim fee, changable

    bool public publicClaimOpen = true; //true initally,no waste gas
    mapping(address => bool) public address_whitelist;

    event TextChanged(bytes32 indexed node, string indexed indexedKey, string key);
    event RegisterSubdomain(address indexed registrar, uint256 indexed token_id, string indexed label);

    constructor(){
        ens = ENS(0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e);
        nft = IERC721Enumerable(0x2589382740f0FCCA04945792688BdC210B524825);
        domainHash = getDomainHash();
    }

    //<interface-functions>
    function supportsInterface(bytes4 interfaceID) public pure returns (bool) {
        return interfaceID == 0x3b3b57de //addr
        || interfaceID == 0x59d1d43c //text
        || interfaceID == 0x691f3431 //name
        || interfaceID == 0x01ffc9a7; //supportsInterface << [inception]
    }

    function text(bytes32 node, string calldata key) external view returns (string memory) {
        uint256 token_id = hashToIdMap[node];
        require(token_id > 0 && tokenHashmap[token_id] != 0x0, "Invalid address");
        if(keccak256(abi.encodePacked(key)) == keccak256("avatar")){
            //eip155 string did not seem to work in any supported dapps during testing despite the returned string being properly
            //formatted. So the toggle was added so that we can direct link the image using http:// if this still does not work on 
            //mainnet
            return useEIP155 ? string(abi.encodePacked("eip155:1/erc721:", addressToString(address(nft)), "/", token_id.toString()))
                             : string(abi.encodePacked(nftImageBaseUri, token_id.toString(),".png"));            
        }
        else{
            return texts[node][key];
        }
    }

    function addr(bytes32 nodeID) public view returns (address) {
        uint256 token_id = hashToIdMap[nodeID];
        require(token_id > 0 && tokenHashmap[token_id] != 0x0, "Invalid address");
        return nft.ownerOf(token_id);
    }  

    function name(bytes32 node) view public returns (string memory){
        return (hashToIdMap[node] == 0) 
        ? "" 
        : string(abi.encodePacked(hashToDomainMap[node], ".", domainLabel, ".eth"));
    }
    //</interface-functions>  

    //--------------------------------------------------------------------------------------------//

    //<read-functions>
    function domainMap(string calldata label) public view returns(bytes32){
        bytes32 encoded_label = keccak256(abi.encodePacked(label));
        bytes32 big_hash = keccak256(abi.encodePacked(domainHash, encoded_label));
        return hashToIdMap[big_hash] > 0 ? big_hash : bytes32(0x0);
    }

    function getClaimableIdsForAddress(address addy) public view returns(uint256[] memory){
        if(((address_whitelist[addy] || publicClaimOpen)) 
        || owner() == addy){
            return getAllIds(addy);
        }
        else{
            return new uint256[](0);
        }
    }

    function getAllIds(address addy) private view returns(uint256[] memory){
        uint256 balance = nft.balanceOf(addy);
        uint256[] memory ids = new uint256[](balance);
        uint256 count;
        for(uint256 i; i < balance; i++){
            uint256 id = nft.tokenOfOwnerByIndex(addy, i);
            if(tokenHashmap[id] == 0x0){
                ids[count++] = id;
            }
        }

        uint256[] memory trim_ids = new uint256[](count);
        for(uint256 i; i < count; i++){
            trim_ids[i] = ids[i];
        }

        return trim_ids;
    }

   function getTokenDomain(uint256 token_id) private view returns(string memory uri){
        require(tokenHashmap[token_id] != 0x0, "Token does not have an ENS register");
        uri = string(abi.encodePacked(hashToDomainMap[tokenHashmap[token_id]] ,"." ,domainLabel, ".eth"));
    }

    function getTokensDomains(uint256[] memory token_ids) public view returns(string[] memory){
        string[] memory uris = new string[](token_ids.length);
        for(uint256 i; i < token_ids.length; i++){
           uris[i] = getTokenDomain(token_ids[i]);
        }
        return uris;
    }

    function getTweaksWithDomains(address addy) public view returns(uint256[] memory){
        uint256 balance = nft.balanceOf(addy);
        uint256[] memory ids = new uint256[](balance);
        uint256 count;
        for(uint256 i; i < balance; i++){
            uint256 id = nft.tokenOfOwnerByIndex(addy, i);
            if(tokenHashmap[id] != 0x0){
                ids[count++] = id;
            }
        }

        uint256[] memory trim_ids = new uint256[](count);
        for(uint256 i; i < count; i++){
            trim_ids[i] = ids[i];
        }

        return trim_ids;
    }

    //</read-functions>

    //--------------------------------------------------------------------------------------------//

    //<helper-functions>
    function addressToString(address _addr) private pure returns(string memory) {
    bytes32 value = bytes32(uint256(uint160(_addr)));
    bytes memory alphabet = "0123456789abcdef";

    bytes memory str = new bytes(51);
    str[0] = "0";
    str[1] = "x";
    for (uint i = 0; i < 20; i++) {
        str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))];
        str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))];
        }
    return string(str);
    }

    //this is the correct method for creating a 2 level ENS namehash
    function getDomainHash() private view returns (bytes32 namehash) {
            namehash = 0x0;
            namehash = keccak256(abi.encodePacked(namehash, keccak256(abi.encodePacked('eth'))));
            namehash = keccak256(abi.encodePacked(namehash, keccak256(abi.encodePacked(domainLabel))));
    }
    //</helper-functions>

    //--------------------------------------------------------------------------------------------//

    //<authorised-functions>
    function setDomain(string calldata label, uint256 token_id) public isAuthorised(token_id) {     
        require(tokenHashmap[token_id] == 0x0, "Token has already been set");
        require(address_whitelist[msg.sender] || publicClaimOpen || owner() == msg.sender, "Not authorised");
        require(block.timestamp > nextRegisterTimestamp[msg.sender][token_id], "Wallet must wait more time to register");
           
        bytes32 encoded_label = keccak256(abi.encodePacked(label));
        bytes32 big_hash = keccak256(abi.encodePacked(domainHash, encoded_label));

        //contract owner can update / overwrite records. << this may be changed in the future with an updated method but as this is still 
        //an experiment we'd like to retain some level of control over the sub-domains
        //
        //ens.recordExists seems to not be reliable (tested removing records through ENS control panel and this still returns true)
        require(!ens.recordExists(big_hash) || msg.sender == owner(), "sub-domain already exists");
        
        ens.setSubnodeRecord(domainHash, encoded_label, owner(), address(this), 0);

        hashToIdMap[big_hash] = token_id;        
        tokenHashmap[token_id] = big_hash;
        hashToDomainMap[big_hash] = label;

        if (owner() != msg.sender){                 
            nextRegisterTimestamp[msg.sender][token_id] = block.timestamp + reset_period;

            //if user is on whitelist then remove
            if (address_whitelist[msg.sender]){
                address_whitelist[msg.sender] = false;
            }
        }

        emit RegisterSubdomain(nft.ownerOf(token_id), token_id, label);     
    }

    function feeSetDomain(string calldata label, uint256 token_id) public isAuthorised(token_id) payable {     
        require(msg.value > claimFee, "not enough Eth sent to claim");   
        setDomain(label, token_id);
    }

    function setText(bytes32 node, string calldata key, string calldata value) external isAuthorised(hashToIdMap[node]) {
        uint256 token_id = hashToIdMap[node];
        require(token_id > 0 && tokenHashmap[token_id] != 0x0, "Invalid address");
        require(keccak256(abi.encodePacked(key)) != keccak256("avatar"), "cannot set avatar");

        texts[node][key] = value;
        emit TextChanged(node, key, key);
    }
        
    function resetDomainForToken(uint256 token_id) public isAuthorised(token_id) {
        
        bytes32 domain = tokenHashmap[token_id];
        require(ens.recordExists(domain), "Sub-domain does not exist");
        
        //reset domain mappings
        hashToDomainMap[domain] = "";      
        hashToIdMap[domain] = 0;
        tokenHashmap[token_id] = 0x0;

        //allow sender to reclaim (if public == true)
        if(nextRegisterTimestamp[msg.sender][token_id] > block.timestamp && msg.sender != owner()){
            nextRegisterTimestamp[msg.sender][token_id] = block.timestamp + (60 * 30); //30 minute cooldown
        }
        
    }
    //</authorised-functions>

    //--------------------------------------------------------------------------------------------//

    // <owner-functions>
    function addAddressWhitelist(address[] calldata addresses) public onlyOwner {
        for(uint256 i; i < addresses.length; i++){
           address_whitelist[addresses[i]] = true;     
        }
    }

    function setDomainLabel(string calldata label) public onlyOwner {
        domainLabel = label;
        domainHash = getDomainHash();
    }

    function setClaimFee(uint256 fee) public onlyOwner{
        claimFee = fee;
    }

    function setNftAddress(address addy) public onlyOwner{
        nft = IERC721Enumerable(addy);
    }

    function toggleNftImageLink() public onlyOwner{
        useEIP155 = !useEIP155;
    }

    function setNftImageBaseUri(string memory _uri) public onlyOwner{
        nftImageBaseUri = _uri;
    }

    function setEnsAddress(address addy) public onlyOwner {
        ens = ENS(addy);
    }

    function resetAddressForClaim(address addy,uint256 token_id) public onlyOwner {
        nextRegisterTimestamp[addy][token_id] = 0;
    }

    function togglePublicClaim() public onlyOwner {
        publicClaimOpen = !publicClaimOpen;
    }

    function updateResetPeriod(uint256 time) public onlyOwner {
        reset_period = time;
    }

    function renounceOwnership() public override onlyOwner {
        require(false, "Sorry - you cannot renounce ownership.");
        super.renounceOwnership();
    }

    //want to be able to withdraw if people send eth to this contract
	function withdraw() public onlyOwner {
		uint256 balance = address(this).balance;
		payable(msg.sender).transfer(balance);
	}

	function withdrawTokens(IERC20 token) public onlyOwner {
		require(address(token) != address(0));
		uint256 balance = token.balanceOf(address(this));
		token.transfer(msg.sender, balance);
	}
    //</owner-functions>

    modifier isAuthorised(uint256 tokenId) {
        require(owner() == msg.sender || nft.ownerOf(tokenId) == msg.sender, "Not authorised");
        _;
    }
}

File 2 of 8 : ENS.sol
pragma solidity >=0.8.4;

interface ENS {

    // Logged when the owner of a node assigns a new owner to a subnode.
    event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);

    // Logged when the owner of a node transfers ownership to a new account.
    event Transfer(bytes32 indexed node, address owner);

    // Logged when the resolver for a node changes.
    event NewResolver(bytes32 indexed node, address resolver);

    // Logged when the TTL of a node changes
    event NewTTL(bytes32 indexed node, uint64 ttl);

    // Logged when an operator is added or removed.
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external virtual;
    function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external virtual;
    function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external virtual returns(bytes32);
    function setResolver(bytes32 node, address resolver) external virtual;
    function setOwner(bytes32 node, address owner) external virtual;
    function setTTL(bytes32 node, uint64 ttl) external virtual;
    function setApprovalForAll(address operator, bool approved) external virtual;
    function owner(bytes32 node) external virtual view returns (address);
    function resolver(bytes32 node) external virtual view returns (address);
    function ttl(bytes32 node) external virtual view returns (uint64);
    function recordExists(bytes32 node) external virtual view returns (bool);
    function isApprovedForAll(address owner, address operator) external virtual view returns (bool);
}

File 3 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 8 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

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

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

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

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

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

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

File 5 of 8 : IERC721Enumerable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

File 6 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 7 of 8 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 8 of 8 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "london",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"registrar","type":"address"},{"indexed":true,"internalType":"uint256","name":"token_id","type":"uint256"},{"indexed":true,"internalType":"string","name":"label","type":"string"}],"name":"RegisterSubdomain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addAddressWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"nodeID","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"address_whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"domainHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"domainLabel","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"}],"name":"domainMap","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"},{"internalType":"uint256","name":"token_id","type":"uint256"}],"name":"feeSetDomain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"getClaimableIdsForAddress","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"token_ids","type":"uint256[]"}],"name":"getTokensDomains","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"getTweaksWithDomains","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"hashToDomainMap","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"hashToIdMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nextRegisterTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft","outputs":[{"internalType":"contract IERC721Enumerable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftImageBaseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicClaimOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"uint256","name":"token_id","type":"uint256"}],"name":"resetAddressForClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"token_id","type":"uint256"}],"name":"resetDomainForToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reset_period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setClaimFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"},{"internalType":"uint256","name":"token_id","type":"uint256"}],"name":"setDomain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"label","type":"string"}],"name":"setDomainLabel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setEnsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"}],"name":"setNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setNftImageBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"string","name":"","type":"string"}],"name":"texts","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleNftImageLink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenHashmap","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"updateResetPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useEIP155","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f747765616b000000000000000000000000000000000000000000000000000000815250600690805190602001906200005192919062000335565b5060405180606001604052806036815260200162005dd360369139600790805190602001906200008392919062000335565b506001600860006101000a81548160ff021916908315150217905550626ebe00600c556002600d556001600e60006101000a81548160ff021916908315150217905550348015620000d357600080fd5b50620000f4620000e8620001b560201b60201c565b620001bd60201b60201c565b6e0c2e074ec69a0dfb2997ba6c7d2e1e600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732589382740f0fcca04945792688bdc210b524825600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001a96200028160201b60201c565b600381905550620005d4565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060001b9050806040516020016200029b90620004fb565b60405160208183030381529060405280519060200120604051602001620002c4929190620004b2565b604051602081830303815290604052805190602001209050806006604051602001620002f19190620004e2565b604051602081830303815290604052805190602001206040516020016200031a929190620004b2565b60405160208183030381529060405280519060200120905090565b82805462000343906200053c565b90600052602060002090601f016020900481019282620003675760008555620003b3565b82601f106200038257805160ff1916838001178555620003b3565b82800160010185558215620003b3579182015b82811115620003b257825182559160200191906001019062000395565b5b509050620003c29190620003c6565b5090565b5b80821115620003e1576000816000905550600101620003c7565b5090565b620003fa620003f48262000532565b62000572565b82525050565b600081546200040f816200053c565b6200041b818662000527565b945060018216600081146200043957600181146200044b5762000482565b60ff1983168652818601935062000482565b620004568562000512565b60005b838110156200047a5781548189015260018201915060208101905062000459565b838801955050505b50505092915050565b60006200049a60038362000527565b9150620004a782620005ab565b600382019050919050565b6000620004c08285620003e5565b602082019150620004d28284620003e5565b6020820191508190509392505050565b6000620004f0828462000400565b915081905092915050565b600062000508826200048b565b9150819050919050565b60008190508160005260206000209050919050565b600081905092915050565b6000819050919050565b600060028204905060018216806200055557607f821691505b602082108114156200056c576200056b6200057c565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f6574680000000000000000000000000000000000000000000000000000000000600082015250565b6157ef80620005e46000396000f3fe6080604052600436106102465760003560e01c80638da5cb5b11610139578063c074c3da116100b6578063ea5822c61161007a578063ea5822c6146108a3578063f2fde38b146108e0578063f4ffa31c14610909578063f5958ee814610920578063f7569f9c1461095d578063fd6f73641461098857610246565b8063c074c3da146107c0578063c230af74146107fd578063d890582f14610826578063df46d7a61461084f578063dfe86ac51461087857610246565b8063a9e18272116100fd578063a9e18272146106d9578063abcec0a2146106f0578063b63bcfc61461072d578063b97a305914610758578063bcbe0e3c1461079557610246565b80638da5cb5b146105de578063957b069f146106095780639741cbff1461064657806399d32fc414610683578063a449329c146106ae57610246565b80634f1050d3116101c7578063691f34311161018b578063691f3431146104fb578063715018a61461053857806371a93fb51461054f578063731fa5c2146105785780638082995c146105a157610246565b80634f1050d3146104115780635287ea5e1461042d57806358b79b621461045657806359d1d43c1461048157806362b683a0146104be57610246565b80633ccfd60b1161020e5780633ccfd60b14610340578063428cfb201461035757806347329f611461039457806347ccca02146103bd57806349df728c146103e857610246565b806301ffc9a71461024b5780630b102d1a1461028857806310f13a8c146102b15780632e75ab50146102da5780633b3b57de14610303575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906142fc565b6109b1565b60405161027f9190614bab565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190614021565b610a73565b005b3480156102bd57600080fd5b506102d860048036038101906102d3919061420b565b610b33565b005b3480156102e657600080fd5b5061030160048036038101906102fc919061444c565b610e40565b005b34801561030f57600080fd5b5061032a6004803603810190610325919061417e565b610ec6565b6040516103379190614b23565b60405180910390f35b34801561034c57600080fd5b50610355610ff7565b005b34801561036357600080fd5b5061037e6004803603810190610379919061417e565b6110c2565b60405161038b9190614c73565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190614356565b611162565b005b3480156103c957600080fd5b506103d2611202565b6040516103df9190614c34565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190614329565b611228565b005b61042b600480360381019061042691906143a3565b6113fd565b005b34801561043957600080fd5b50610454600480360381019061044f9190614021565b6115a8565b005b34801561046257600080fd5b5061046b611668565b6040516104789190614bab565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906141ab565b61167b565b6040516104b59190614c73565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190614021565b6118b0565b6040516104f29190614b89565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d919061417e565b611b7c565b60405161052f9190614c73565b60405180910390f35b34801561054457600080fd5b5061054d611beb565b005b34801561055b57600080fd5b50610576600480360381019061057191906140bb565b611cb2565b005b34801561058457600080fd5b5061059f600480360381019061059a9190614403565b611dd3565b005b3480156105ad57600080fd5b506105c860048036038101906105c3919061407b565b611e69565b6040516105d59190614e15565b60405180910390f35b3480156105ea57600080fd5b506105f3611e8e565b6040516106009190614b23565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190614021565b611eb7565b60405161063d9190614b89565b60405180910390f35b34801561065257600080fd5b5061066d6004803603810190610668919061417e565b611fc1565b60405161067a9190614e15565b60405180910390f35b34801561068f57600080fd5b50610698611fd9565b6040516106a59190614e15565b60405180910390f35b3480156106ba57600080fd5b506106c3611fdf565b6040516106d09190614e15565b60405180910390f35b3480156106e557600080fd5b506106ee611fe5565b005b3480156106fc57600080fd5b506107176004803603810190610712919061444c565b61208d565b6040516107249190614bc6565b60405180910390f35b34801561073957600080fd5b506107426120a5565b60405161074f9190614bab565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614021565b6120b8565b60405161078c9190614bab565b60405180910390f35b3480156107a157600080fd5b506107aa6120d8565b6040516107b79190614c73565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190614356565b612166565b6040516107f49190614bc6565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061444c565b6121f3565b005b34801561083257600080fd5b5061084d600480360381019061084891906143a3565b6125b5565b005b34801561085b57600080fd5b506108766004803603810190610871919061444c565b612da1565b005b34801561088457600080fd5b5061088d612e27565b60405161089a9190614bc6565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c591906142a0565b612e2d565b6040516108d79190614c73565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190614021565b612ef0565b005b34801561091557600080fd5b5061091e612fe8565b005b34801561092c57600080fd5b5061094760048036038101906109429190614108565b613090565b6040516109549190614b67565b60405180910390f35b34801561096957600080fd5b5061097261314f565b60405161097f9190614c73565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa919061407b565b6131dd565b005b6000633b3b57de60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0c57506359d1d43c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3c575063691f343160e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6c57506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610a7b6132b3565b73ffffffffffffffffffffffffffffffffffffffff16610a99611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690614db5565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096000868152602001908152602001600020543373ffffffffffffffffffffffffffffffffffffffff16610b66611e8e565b73ffffffffffffffffffffffffffffffffffffffff161480610c5d57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610bf59190614e15565b60206040518083038186803b158015610c0d57600080fd5b505afa158015610c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c45919061404e565b73ffffffffffffffffffffffffffffffffffffffff16145b610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9390614d15565b60405180910390fd5b600060096000888152602001908152602001600020549050600081118015610cda57506000801b600a60008381526020019081526020016000205414155b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090614c95565b60405180910390fd5b7fd1f86c93d831119ad98fe983e643a7431e4ac992e3ead6e3007f4dd1adf663438686604051602001610d4d929190614a3b565b604051602081830303815290604052805190602001201415610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614d55565b60405180910390fd5b8383600460008a81526020019081526020016000208888604051610dc9929190614a3b565b90815260200160405180910390209190610de4929190613c96565b508585604051610df5929190614a3b565b6040518091039020877fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508888604051610e2f929190614c4f565b60405180910390a350505050505050565b610e486132b3565b73ffffffffffffffffffffffffffffffffffffffff16610e66611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390614db5565b60405180910390fd5b80600d8190555050565b60008060096000848152602001908152602001600020549050600081118015610f0557506000801b600a60008381526020019081526020016000205414155b610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90614c95565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b8152600401610f9f9190614e15565b60206040518083038186803b158015610fb757600080fd5b505afa158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fef919061404e565b915050919050565b610fff6132b3565b73ffffffffffffffffffffffffffffffffffffffff1661101d611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90614db5565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110be573d6000803e3d6000fd5b5050565b600b60205280600052604060002060009150905080546110e1906151b4565b80601f016020809104026020016040519081016040528092919081815260200182805461110d906151b4565b801561115a5780601f1061112f5761010080835404028352916020019161115a565b820191906000526020600020905b81548152906001019060200180831161113d57829003601f168201915b505050505081565b61116a6132b3565b73ffffffffffffffffffffffffffffffffffffffff16611188611e8e565b73ffffffffffffffffffffffffffffffffffffffff16146111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590614db5565b60405180910390fd5b8181600691906111ef929190613c96565b506111f86132bb565b6003819055505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112306132b3565b73ffffffffffffffffffffffffffffffffffffffff1661124e611e8e565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90614db5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112de57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113199190614b23565b60206040518083038186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113699190614479565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016113a6929190614b3e565b602060405180830381600087803b1580156113c057600080fd5b505af11580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f89190614151565b505050565b803373ffffffffffffffffffffffffffffffffffffffff1661141d611e8e565b73ffffffffffffffffffffffffffffffffffffffff16148061151457503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016114ac9190614e15565b60206040518083038186803b1580156114c457600080fd5b505afa1580156114d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fc919061404e565b73ffffffffffffffffffffffffffffffffffffffff16145b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90614d15565b60405180910390fd5b600d543411611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90614d35565b60405180910390fd5b6115a28484846125b5565b50505050565b6115b06132b3565b73ffffffffffffffffffffffffffffffffffffffff166115ce611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90614db5565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900460ff1681565b60606000600960008681526020019081526020016000205490506000811180156116bb57506000801b600a60008381526020019081526020016000205414155b6116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190614c95565b60405180910390fd5b7fd1f86c93d831119ad98fe983e643a7431e4ac992e3ead6e3007f4dd1adf66343848460405160200161172e929190614a3b565b6040516020818303038152906040528051906020012014156117eb57600860009054906101000a900460ff1661178e57600761176982613367565b60405160200161177a929190614a6b565b6040516020818303038152906040526117e3565b6117b9600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166134c8565b6117c282613367565b6040516020016117d3929190614ae9565b6040516020818303038152906040525b9150506118a9565b60046000868152602001908152602001600020848460405161180e929190614a3b565b90815260200160405180910390208054611827906151b4565b80601f0160208091040260200160405190810160405280929190818152602001828054611853906151b4565b80156118a05780601f10611875576101008083540402835291602001916118a0565b820191906000526020600020905b81548152906001019060200180831161188357829003601f168201915b50505050509150505b9392505050565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161190f9190614b23565b60206040518083038186803b15801561192757600080fd5b505afa15801561193b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195f9190614479565b905060008167ffffffffffffffff81111561197d5761197c615357565b5b6040519080825280602002602001820160405280156119ab5781602001602082028036833780820191505090505b5090506000805b83811015611ac9576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5988846040518363ffffffff1660e01b8152600401611a19929190614b3e565b60206040518083038186803b158015611a3157600080fd5b505afa158015611a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a699190614479565b90506000801b600a60008381526020019081526020016000205414611ab55780848480611a9590615217565b955081518110611aa857611aa7615328565b5b6020026020010181815250505b508080611ac190615217565b9150506119b2565b5060008167ffffffffffffffff811115611ae657611ae5615357565b5b604051908082528060200260200182016040528015611b145781602001602082028036833780820191505090505b50905060005b82811015611b6f57838181518110611b3557611b34615328565b5b6020026020010151828281518110611b5057611b4f615328565b5b6020026020010181815250508080611b6790615217565b915050611b1a565b5080945050505050919050565b60606000600960008481526020019081526020016000205414611bd357600b60008381526020019081526020016000206006604051602001611bbf929190614a9a565b604051602081830303815290604052611be4565b604051806020016040528060008152505b9050919050565b611bf36132b3565b73ffffffffffffffffffffffffffffffffffffffff16611c11611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614db5565b60405180910390fd5b6000611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90614cf5565b60405180910390fd5b611cb06137d3565b565b611cba6132b3565b73ffffffffffffffffffffffffffffffffffffffff16611cd8611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614db5565b60405180910390fd5b60005b82829050811015611dce576001600f6000858585818110611d5557611d54615328565b5b9050602002016020810190611d6a9190614021565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611dc690615217565b915050611d31565b505050565b611ddb6132b3565b73ffffffffffffffffffffffffffffffffffffffff16611df9611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690614db5565b60405180910390fd5b8060079080519060200190611e65929190613d1c565b5050565b6005602052816000526040600020602052806000526040600020600091509150505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f1d5750600e60009054906101000a900460ff165b80611f5a57508173ffffffffffffffffffffffffffffffffffffffff16611f42611e8e565b73ffffffffffffffffffffffffffffffffffffffff16145b15611f6f57611f688261385b565b9050611fbc565b600067ffffffffffffffff811115611f8a57611f89615357565b5b604051908082528060200260200182016040528015611fb85781602001602082028036833780820191505090505b5090505b919050565b60096020528060005260406000206000915090505481565b600d5481565b600c5481565b611fed6132b3565b73ffffffffffffffffffffffffffffffffffffffff1661200b611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890614db5565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915090505481565b600e60009054906101000a900460ff1681565b600f6020528060005260406000206000915054906101000a900460ff1681565b600680546120e5906151b4565b80601f0160208091040260200160405190810160405280929190818152602001828054612111906151b4565b801561215e5780601f106121335761010080835404028352916020019161215e565b820191906000526020600020905b81548152906001019060200180831161214157829003601f168201915b505050505081565b600080838360405160200161217c929190614a3b565b6040516020818303038152906040528051906020012090506000600354826040516020016121ab929190614a0f565b60405160208183030381529060405280519060200120905060006009600083815260200190815260200160002054116121e7576000801b6121e9565b805b9250505092915050565b803373ffffffffffffffffffffffffffffffffffffffff16612213611e8e565b73ffffffffffffffffffffffffffffffffffffffff16148061230a57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016122a29190614e15565b60206040518083038186803b1580156122ba57600080fd5b505afa1580156122ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f2919061404e565b73ffffffffffffffffffffffffffffffffffffffff16145b612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614d15565b60405180910390fd5b6000600a6000848152602001908152602001600020549050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f79fe538826040518263ffffffff1660e01b81526004016123bc9190614bc6565b60206040518083038186803b1580156123d457600080fd5b505afa1580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c9190614151565b61244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614d95565b60405180910390fd5b60405180602001604052806000815250600b60008381526020019081526020016000209080519060200190612481929190613d1c565b50600060096000838152602001908152602001600020819055506000801b600a60008581526020019081526020016000208190555042600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020541180156125485750612518611e8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156125b0576107084261255b9190614f71565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020819055505b505050565b803373ffffffffffffffffffffffffffffffffffffffff166125d5611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614806126cc57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016126649190614e15565b60206040518083038186803b15801561267c57600080fd5b505afa158015612690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b4919061404e565b73ffffffffffffffffffffffffffffffffffffffff16145b61270b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270290614d15565b60405180910390fd5b6000801b600a60008481526020019081526020016000205414612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275a90614df5565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c75750600e60009054906101000a900460ff165b8061280457503373ffffffffffffffffffffffffffffffffffffffff166127ec611e8e565b73ffffffffffffffffffffffffffffffffffffffff16145b612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614d15565b60405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000205442116128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc90614dd5565b60405180910390fd5b600084846040516020016128ea929190614a3b565b604051602081830303815290604052805190602001209050600060035482604051602001612919929190614a0f565b604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f79fe538826040518263ffffffff1660e01b815260040161298c9190614bc6565b60206040518083038186803b1580156129a457600080fd5b505afa1580156129b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129dc9190614151565b1580612a1a57506129eb611e8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5090614cd5565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ef2c7f060035484612aa3611e8e565b3060006040518663ffffffff1660e01b8152600401612ac6959493929190614be1565b600060405180830381600087803b158015612ae057600080fd5b505af1158015612af4573d6000803e3d6000fd5b5050505083600960008381526020019081526020016000208190555080600a6000868152602001908152602001600020819055508585600b60008481526020019081526020016000209190612b4a929190613c96565b503373ffffffffffffffffffffffffffffffffffffffff16612b6a611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614612c9357600c5442612b939190614f71565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002081905550600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c92576000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b8585604051612ca3929190614a3b565b604051809103902084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b8152600401612d079190614e15565b60206040518083038186803b158015612d1f57600080fd5b505afa158015612d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d57919061404e565b73ffffffffffffffffffffffffffffffffffffffff167fa16b10a6d8a8b7e20fab669fb2b5acd39c210216e639cdd3190a0c1fe2b7cc7b60405160405180910390a4505050505050565b612da96132b3565b73ffffffffffffffffffffffffffffffffffffffff16612dc7611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1490614db5565b60405180910390fd5b80600c8190555050565b60035481565b600460205281600052604060002081805160208101820180518482526020830160208501208183528095505050505050600091509150508054612e6f906151b4565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9b906151b4565b8015612ee85780601f10612ebd57610100808354040283529160200191612ee8565b820191906000526020600020905b815481529060010190602001808311612ecb57829003601f168201915b505050505081565b612ef86132b3565b73ffffffffffffffffffffffffffffffffffffffff16612f16611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614612f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6390614db5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd390614cb5565b60405180910390fd5b612fe581613b28565b50565b612ff06132b3565b73ffffffffffffffffffffffffffffffffffffffff1661300e611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614613064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305b90614db5565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60606000825167ffffffffffffffff8111156130af576130ae615357565b5b6040519080825280602002602001820160405280156130e257816020015b60608152602001906001900390816130cd5790505b50905060005b83518110156131455761311484828151811061310757613106615328565b5b6020026020010151613bec565b82828151811061312757613126615328565b5b6020026020010181905250808061313d90615217565b9150506130e8565b5080915050919050565b6007805461315c906151b4565b80601f0160208091040260200160405190810160405280929190818152602001828054613188906151b4565b80156131d55780601f106131aa576101008083540402835291602001916131d5565b820191906000526020600020905b8154815290600101906020018083116131b857829003601f168201915b505050505081565b6131e56132b3565b73ffffffffffffffffffffffffffffffffffffffff16613203611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614613259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325090614db5565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055505050565b600033905090565b60008060001b9050806040516020016132d390614ad4565b604051602081830303815290604052805190602001206040516020016132fa929190614a0f565b6040516020818303038152906040528051906020012090508060066040516020016133259190614a54565b6040516020818303038152906040528051906020012060405160200161334c929190614a0f565b60405160208183030381529060405280519060200120905090565b606060008214156133af576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134c3565b600082905060005b600082146133e15780806133ca90615217565b915050600a826133da9190614fc7565b91506133b7565b60008167ffffffffffffffff8111156133fd576133fc615357565b5b6040519080825280601f01601f19166020018201604052801561342f5781602001600182028036833780820191505090505b5090505b600085146134bc576001826134489190615052565b9150600a85613457919061526a565b60306134639190614f71565b60f81b81838151811061347957613478615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134b59190614fc7565b9450613433565b8093505050505b919050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b905060006040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506000603367ffffffffffffffff81111561353f5761353e615357565b5b6040519080825280601f01601f1916602001820160405280156135715781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106135a9576135a8615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061360d5761360c615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156137c75782600485600c846136599190614f71565b6020811061366a57613669615328565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff16815181106136a9576136a8615328565b5b602001015160f81c60f81b826002836136c29190614ff8565b60026136ce9190614f71565b815181106136df576136de615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f60f81b85600c846137229190614f71565b6020811061373357613732615328565b5b1a60f81b1660f81c60ff168151811061374f5761374e615328565b5b602001015160f81c60f81b826002836137689190614ff8565b60036137749190614f71565b8151811061378557613784615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806137bf90615217565b91505061363f565b50809350505050919050565b6137db6132b3565b73ffffffffffffffffffffffffffffffffffffffff166137f9611e8e565b73ffffffffffffffffffffffffffffffffffffffff161461384f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384690614db5565b60405180910390fd5b6138596000613b28565b565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016138ba9190614b23565b60206040518083038186803b1580156138d257600080fd5b505afa1580156138e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390a9190614479565b905060008167ffffffffffffffff81111561392857613927615357565b5b6040519080825280602002602001820160405280156139565781602001602082028036833780820191505090505b5090506000805b83811015613a75576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5988846040518363ffffffff1660e01b81526004016139c4929190614b3e565b60206040518083038186803b1580156139dc57600080fd5b505afa1580156139f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a149190614479565b90506000801b600a6000838152602001908152602001600020541415613a615780848480613a4190615217565b955081518110613a5457613a53615328565b5b6020026020010181815250505b508080613a6d90615217565b91505061395d565b5060008167ffffffffffffffff811115613a9257613a91615357565b5b604051908082528060200260200182016040528015613ac05781602001602082028036833780820191505090505b50905060005b82811015613b1b57838181518110613ae157613ae0615328565b5b6020026020010151828281518110613afc57613afb615328565b5b6020026020010181815250508080613b1390615217565b915050613ac6565b5080945050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000801b600a6000848152602001908152602001600020541415613c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3e90614d75565b60405180910390fd5b600b6000600a60008581526020019081526020016000205481526020019081526020016000206006604051602001613c80929190614a9a565b6040516020818303038152906040529050919050565b828054613ca2906151b4565b90600052602060002090601f016020900481019282613cc45760008555613d0b565b82601f10613cdd57803560ff1916838001178555613d0b565b82800160010185558215613d0b579182015b82811115613d0a578235825591602001919060010190613cef565b5b509050613d189190613da2565b5090565b828054613d28906151b4565b90600052602060002090601f016020900481019282613d4a5760008555613d91565b82601f10613d6357805160ff1916838001178555613d91565b82800160010185558215613d91579182015b82811115613d90578251825591602001919060010190613d75565b5b509050613d9e9190613da2565b5090565b5b80821115613dbb576000816000905550600101613da3565b5090565b6000613dd2613dcd84614e55565b614e30565b90508083825260208201905082856020860282011115613df557613df4615390565b5b60005b85811015613e255781613e0b8882613ff7565b845260208401935060208301925050600181019050613df8565b5050509392505050565b6000613e42613e3d84614e81565b614e30565b905082815260208101848484011115613e5e57613e5d615395565b5b613e69848285615172565b509392505050565b600081359050613e808161572f565b92915050565b600081519050613e958161572f565b92915050565b60008083601f840112613eb157613eb061538b565b5b8235905067ffffffffffffffff811115613ece57613ecd615386565b5b602083019150836020820283011115613eea57613ee9615390565b5b9250929050565b600082601f830112613f0657613f0561538b565b5b8135613f16848260208601613dbf565b91505092915050565b600081519050613f2e81615746565b92915050565b600081359050613f438161575d565b92915050565b600081359050613f5881615774565b92915050565b600081359050613f6d8161578b565b92915050565b60008083601f840112613f8957613f8861538b565b5b8235905067ffffffffffffffff811115613fa657613fa5615386565b5b602083019150836001820283011115613fc257613fc1615390565b5b9250929050565b600082601f830112613fde57613fdd61538b565b5b8135613fee848260208601613e2f565b91505092915050565b600081359050614006816157a2565b92915050565b60008151905061401b816157a2565b92915050565b6000602082840312156140375761403661539f565b5b600061404584828501613e71565b91505092915050565b6000602082840312156140645761406361539f565b5b600061407284828501613e86565b91505092915050565b600080604083850312156140925761409161539f565b5b60006140a085828601613e71565b92505060206140b185828601613ff7565b9150509250929050565b600080602083850312156140d2576140d161539f565b5b600083013567ffffffffffffffff8111156140f0576140ef61539a565b5b6140fc85828601613e9b565b92509250509250929050565b60006020828403121561411e5761411d61539f565b5b600082013567ffffffffffffffff81111561413c5761413b61539a565b5b61414884828501613ef1565b91505092915050565b6000602082840312156141675761416661539f565b5b600061417584828501613f1f565b91505092915050565b6000602082840312156141945761419361539f565b5b60006141a284828501613f34565b91505092915050565b6000806000604084860312156141c4576141c361539f565b5b60006141d286828701613f34565b935050602084013567ffffffffffffffff8111156141f3576141f261539a565b5b6141ff86828701613f73565b92509250509250925092565b6000806000806000606086880312156142275761422661539f565b5b600061423588828901613f34565b955050602086013567ffffffffffffffff8111156142565761425561539a565b5b61426288828901613f73565b9450945050604086013567ffffffffffffffff8111156142855761428461539a565b5b61429188828901613f73565b92509250509295509295909350565b600080604083850312156142b7576142b661539f565b5b60006142c585828601613f34565b925050602083013567ffffffffffffffff8111156142e6576142e561539a565b5b6142f285828601613fc9565b9150509250929050565b6000602082840312156143125761431161539f565b5b600061432084828501613f49565b91505092915050565b60006020828403121561433f5761433e61539f565b5b600061434d84828501613f5e565b91505092915050565b6000806020838503121561436d5761436c61539f565b5b600083013567ffffffffffffffff81111561438b5761438a61539a565b5b61439785828601613f73565b92509250509250929050565b6000806000604084860312156143bc576143bb61539f565b5b600084013567ffffffffffffffff8111156143da576143d961539a565b5b6143e686828701613f73565b935093505060206143f986828701613ff7565b9150509250925092565b6000602082840312156144195761441861539f565b5b600082013567ffffffffffffffff8111156144375761443661539a565b5b61444384828501613fc9565b91505092915050565b6000602082840312156144625761446161539f565b5b600061447084828501613ff7565b91505092915050565b60006020828403121561448f5761448e61539f565b5b600061449d8482850161400c565b91505092915050565b60006144b28383614659565b905092915050565b60006144c683836149f1565b60208301905092915050565b6144db81615086565b82525050565b60006144ec82614ee7565b6144f68185614f22565b93508360208202850161450885614eb2565b8060005b85811015614544578484038952815161452585826144a6565b945061453083614f08565b925060208a0199505060018101905061450c565b50829750879550505050505092915050565b600061456182614ef2565b61456b8185614f33565b935061457683614ec2565b8060005b838110156145a757815161458e88826144ba565b975061459983614f15565b92505060018101905061457a565b5085935050505092915050565b6145bd81615098565b82525050565b6145cc816150a4565b82525050565b6145e36145de826150a4565b615260565b82525050565b6145f28161512a565b82525050565b6146018161513c565b82525050565b60006146138385614f55565b9350614620838584615172565b614629836153a4565b840190509392505050565b60006146408385614f66565b935061464d838584615172565b82840190509392505050565b600061466482614efd565b61466e8185614f44565b935061467e818560208601615181565b614687816153a4565b840191505092915050565b600061469d82614efd565b6146a78185614f55565b93506146b7818560208601615181565b6146c0816153a4565b840191505092915050565b60006146d682614efd565b6146e08185614f66565b93506146f0818560208601615181565b80840191505092915050565b60008154614709816151b4565b6147138186614f66565b9450600182166000811461472e576001811461473f57614772565b60ff19831686528186019350614772565b61474885614ed2565b60005b8381101561476a5781548189015260018201915060208101905061474b565b838801955050505b50505092915050565b6000614788600f83614f55565b9150614793826153b5565b602082019050919050565b60006147ab602683614f55565b91506147b6826153de565b604082019050919050565b60006147ce601983614f55565b91506147d98261542d565b602082019050919050565b60006147f1602683614f55565b91506147fc82615456565b604082019050919050565b6000614814600483614f66565b915061481f826154a5565b600482019050919050565b6000614837600e83614f55565b9150614842826154ce565b602082019050919050565b600061485a600483614f66565b9150614865826154f7565b600482019050919050565b600061487d600383614f66565b915061488882615520565b600382019050919050565b60006148a0601c83614f55565b91506148ab82615549565b602082019050919050565b60006148c3601083614f66565b91506148ce82615572565b601082019050919050565b60006148e6600183614f66565b91506148f18261559b565b600182019050919050565b6000614909601183614f55565b9150614914826155c4565b602082019050919050565b600061492c602383614f55565b9150614937826155ed565b604082019050919050565b600061494f601983614f55565b915061495a8261563c565b602082019050919050565b6000614972602083614f55565b915061497d82615665565b602082019050919050565b6000614995602683614f55565b91506149a08261568e565b604082019050919050565b60006149b8601a83614f55565b91506149c3826156dd565b602082019050919050565b60006149db600183614f66565b91506149e682615706565b600182019050919050565b6149fa8161510c565b82525050565b614a098161510c565b82525050565b6000614a1b82856145d2565b602082019150614a2b82846145d2565b6020820191508190509392505050565b6000614a48828486614634565b91508190509392505050565b6000614a6082846146fc565b915081905092915050565b6000614a7782856146fc565b9150614a8382846146cb565b9150614a8e82614807565b91508190509392505050565b6000614aa682856146fc565b9150614ab1826148d9565b9150614abd82846146fc565b9150614ac88261484d565b91508190509392505050565b6000614adf82614870565b9150819050919050565b6000614af4826148b6565b9150614b0082856146cb565b9150614b0b826149ce565b9150614b1782846146cb565b91508190509392505050565b6000602082019050614b3860008301846144d2565b92915050565b6000604082019050614b5360008301856144d2565b614b606020830184614a00565b9392505050565b60006020820190508181036000830152614b8181846144e1565b905092915050565b60006020820190508181036000830152614ba38184614556565b905092915050565b6000602082019050614bc060008301846145b4565b92915050565b6000602082019050614bdb60008301846145c3565b92915050565b600060a082019050614bf660008301886145c3565b614c0360208301876145c3565b614c1060408301866144d2565b614c1d60608301856144d2565b614c2a60808301846145f8565b9695505050505050565b6000602082019050614c4960008301846145e9565b92915050565b60006020820190508181036000830152614c6a818486614607565b90509392505050565b60006020820190508181036000830152614c8d8184614692565b905092915050565b60006020820190508181036000830152614cae8161477b565b9050919050565b60006020820190508181036000830152614cce8161479e565b9050919050565b60006020820190508181036000830152614cee816147c1565b9050919050565b60006020820190508181036000830152614d0e816147e4565b9050919050565b60006020820190508181036000830152614d2e8161482a565b9050919050565b60006020820190508181036000830152614d4e81614893565b9050919050565b60006020820190508181036000830152614d6e816148fc565b9050919050565b60006020820190508181036000830152614d8e8161491f565b9050919050565b60006020820190508181036000830152614dae81614942565b9050919050565b60006020820190508181036000830152614dce81614965565b9050919050565b60006020820190508181036000830152614dee81614988565b9050919050565b60006020820190508181036000830152614e0e816149ab565b9050919050565b6000602082019050614e2a6000830184614a00565b92915050565b6000614e3a614e4b565b9050614e4682826151e6565b919050565b6000604051905090565b600067ffffffffffffffff821115614e7057614e6f615357565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e9c57614e9b615357565b5b614ea5826153a4565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f7c8261510c565b9150614f878361510c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fbc57614fbb61529b565b5b828201905092915050565b6000614fd28261510c565b9150614fdd8361510c565b925082614fed57614fec6152ca565b5b828204905092915050565b60006150038261510c565b915061500e8361510c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150475761504661529b565b5b828202905092915050565b600061505d8261510c565b91506150688361510c565b92508282101561507b5761507a61529b565b5b828203905092915050565b6000615091826150ec565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006150e582615086565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60006151358261514e565b9050919050565b600061514782615116565b9050919050565b600061515982615160565b9050919050565b600061516b826150ec565b9050919050565b82818337600083830152505050565b60005b8381101561519f578082015181840152602081019050615184565b838111156151ae576000848401525b50505050565b600060028204905060018216806151cc57607f821691505b602082108114156151e0576151df6152f9565b5b50919050565b6151ef826153a4565b810181811067ffffffffffffffff8211171561520e5761520d615357565b5b80604052505050565b60006152228261510c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152555761525461529b565b5b600182019050919050565b6000819050919050565b60006152758261510c565b91506152808361510c565b9250826152905761528f6152ca565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f7375622d646f6d61696e20616c72656164792065786973747300000000000000600082015250565b7f536f727279202d20796f752063616e6e6f742072656e6f756e6365206f776e6560008201527f72736869702e0000000000000000000000000000000000000000000000000000602082015250565b7f2e706e6700000000000000000000000000000000000000000000000000000000600082015250565b7f4e6f7420617574686f7269736564000000000000000000000000000000000000600082015250565b7f2e65746800000000000000000000000000000000000000000000000000000000600082015250565b7f6574680000000000000000000000000000000000000000000000000000000000600082015250565b7f6e6f7420656e6f756768204574682073656e7420746f20636c61696d00000000600082015250565b7f6569703135353a312f6572633732313a00000000000000000000000000000000600082015250565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b7f63616e6e6f742073657420617661746172000000000000000000000000000000600082015250565b7f546f6b656e20646f6573206e6f74206861766520616e20454e5320726567697360008201527f7465720000000000000000000000000000000000000000000000000000000000602082015250565b7f5375622d646f6d61696e20646f6573206e6f7420657869737400000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f57616c6c6574206d7573742077616974206d6f72652074696d6520746f20726560008201527f6769737465720000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e2068617320616c7265616479206265656e20736574000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61573881615086565b811461574357600080fd5b50565b61574f81615098565b811461575a57600080fd5b50565b615766816150a4565b811461577157600080fd5b50565b61577d816150ae565b811461578857600080fd5b50565b615794816150da565b811461579f57600080fd5b50565b6157ab8161510c565b81146157b657600080fd5b5056fea26469706673582212204eea2760da7fb3dd241e4d357ebb61fdf71f88678c0b8db3b424d30d01d2b9c964736f6c63430008070033697066733a2f2f516d64433854517350676d424b34313964444437586f763632444c547343575838377a5a504432576444505a4c782f

Deployed Bytecode

0x6080604052600436106102465760003560e01c80638da5cb5b11610139578063c074c3da116100b6578063ea5822c61161007a578063ea5822c6146108a3578063f2fde38b146108e0578063f4ffa31c14610909578063f5958ee814610920578063f7569f9c1461095d578063fd6f73641461098857610246565b8063c074c3da146107c0578063c230af74146107fd578063d890582f14610826578063df46d7a61461084f578063dfe86ac51461087857610246565b8063a9e18272116100fd578063a9e18272146106d9578063abcec0a2146106f0578063b63bcfc61461072d578063b97a305914610758578063bcbe0e3c1461079557610246565b80638da5cb5b146105de578063957b069f146106095780639741cbff1461064657806399d32fc414610683578063a449329c146106ae57610246565b80634f1050d3116101c7578063691f34311161018b578063691f3431146104fb578063715018a61461053857806371a93fb51461054f578063731fa5c2146105785780638082995c146105a157610246565b80634f1050d3146104115780635287ea5e1461042d57806358b79b621461045657806359d1d43c1461048157806362b683a0146104be57610246565b80633ccfd60b1161020e5780633ccfd60b14610340578063428cfb201461035757806347329f611461039457806347ccca02146103bd57806349df728c146103e857610246565b806301ffc9a71461024b5780630b102d1a1461028857806310f13a8c146102b15780632e75ab50146102da5780633b3b57de14610303575b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906142fc565b6109b1565b60405161027f9190614bab565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190614021565b610a73565b005b3480156102bd57600080fd5b506102d860048036038101906102d3919061420b565b610b33565b005b3480156102e657600080fd5b5061030160048036038101906102fc919061444c565b610e40565b005b34801561030f57600080fd5b5061032a6004803603810190610325919061417e565b610ec6565b6040516103379190614b23565b60405180910390f35b34801561034c57600080fd5b50610355610ff7565b005b34801561036357600080fd5b5061037e6004803603810190610379919061417e565b6110c2565b60405161038b9190614c73565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b69190614356565b611162565b005b3480156103c957600080fd5b506103d2611202565b6040516103df9190614c34565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190614329565b611228565b005b61042b600480360381019061042691906143a3565b6113fd565b005b34801561043957600080fd5b50610454600480360381019061044f9190614021565b6115a8565b005b34801561046257600080fd5b5061046b611668565b6040516104789190614bab565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906141ab565b61167b565b6040516104b59190614c73565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190614021565b6118b0565b6040516104f29190614b89565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d919061417e565b611b7c565b60405161052f9190614c73565b60405180910390f35b34801561054457600080fd5b5061054d611beb565b005b34801561055b57600080fd5b50610576600480360381019061057191906140bb565b611cb2565b005b34801561058457600080fd5b5061059f600480360381019061059a9190614403565b611dd3565b005b3480156105ad57600080fd5b506105c860048036038101906105c3919061407b565b611e69565b6040516105d59190614e15565b60405180910390f35b3480156105ea57600080fd5b506105f3611e8e565b6040516106009190614b23565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190614021565b611eb7565b60405161063d9190614b89565b60405180910390f35b34801561065257600080fd5b5061066d6004803603810190610668919061417e565b611fc1565b60405161067a9190614e15565b60405180910390f35b34801561068f57600080fd5b50610698611fd9565b6040516106a59190614e15565b60405180910390f35b3480156106ba57600080fd5b506106c3611fdf565b6040516106d09190614e15565b60405180910390f35b3480156106e557600080fd5b506106ee611fe5565b005b3480156106fc57600080fd5b506107176004803603810190610712919061444c565b61208d565b6040516107249190614bc6565b60405180910390f35b34801561073957600080fd5b506107426120a5565b60405161074f9190614bab565b60405180910390f35b34801561076457600080fd5b5061077f600480360381019061077a9190614021565b6120b8565b60405161078c9190614bab565b60405180910390f35b3480156107a157600080fd5b506107aa6120d8565b6040516107b79190614c73565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190614356565b612166565b6040516107f49190614bc6565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061444c565b6121f3565b005b34801561083257600080fd5b5061084d600480360381019061084891906143a3565b6125b5565b005b34801561085b57600080fd5b506108766004803603810190610871919061444c565b612da1565b005b34801561088457600080fd5b5061088d612e27565b60405161089a9190614bc6565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c591906142a0565b612e2d565b6040516108d79190614c73565b60405180910390f35b3480156108ec57600080fd5b5061090760048036038101906109029190614021565b612ef0565b005b34801561091557600080fd5b5061091e612fe8565b005b34801561092c57600080fd5b5061094760048036038101906109429190614108565b613090565b6040516109549190614b67565b60405180910390f35b34801561096957600080fd5b5061097261314f565b60405161097f9190614c73565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa919061407b565b6131dd565b005b6000633b3b57de60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a0c57506359d1d43c60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a3c575063691f343160e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6c57506301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610a7b6132b3565b73ffffffffffffffffffffffffffffffffffffffff16610a99611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690614db5565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60096000868152602001908152602001600020543373ffffffffffffffffffffffffffffffffffffffff16610b66611e8e565b73ffffffffffffffffffffffffffffffffffffffff161480610c5d57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610bf59190614e15565b60206040518083038186803b158015610c0d57600080fd5b505afa158015610c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c45919061404e565b73ffffffffffffffffffffffffffffffffffffffff16145b610c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9390614d15565b60405180910390fd5b600060096000888152602001908152602001600020549050600081118015610cda57506000801b600a60008381526020019081526020016000205414155b610d19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1090614c95565b60405180910390fd5b7fd1f86c93d831119ad98fe983e643a7431e4ac992e3ead6e3007f4dd1adf663438686604051602001610d4d929190614a3b565b604051602081830303815290604052805190602001201415610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90614d55565b60405180910390fd5b8383600460008a81526020019081526020016000208888604051610dc9929190614a3b565b90815260200160405180910390209190610de4929190613c96565b508585604051610df5929190614a3b565b6040518091039020877fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a75508888604051610e2f929190614c4f565b60405180910390a350505050505050565b610e486132b3565b73ffffffffffffffffffffffffffffffffffffffff16610e66611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390614db5565b60405180910390fd5b80600d8190555050565b60008060096000848152602001908152602001600020549050600081118015610f0557506000801b600a60008381526020019081526020016000205414155b610f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3b90614c95565b60405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b8152600401610f9f9190614e15565b60206040518083038186803b158015610fb757600080fd5b505afa158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fef919061404e565b915050919050565b610fff6132b3565b73ffffffffffffffffffffffffffffffffffffffff1661101d611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90614db5565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156110be573d6000803e3d6000fd5b5050565b600b60205280600052604060002060009150905080546110e1906151b4565b80601f016020809104026020016040519081016040528092919081815260200182805461110d906151b4565b801561115a5780601f1061112f5761010080835404028352916020019161115a565b820191906000526020600020905b81548152906001019060200180831161113d57829003601f168201915b505050505081565b61116a6132b3565b73ffffffffffffffffffffffffffffffffffffffff16611188611e8e565b73ffffffffffffffffffffffffffffffffffffffff16146111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590614db5565b60405180910390fd5b8181600691906111ef929190613c96565b506111f86132bb565b6003819055505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112306132b3565b73ffffffffffffffffffffffffffffffffffffffff1661124e611e8e565b73ffffffffffffffffffffffffffffffffffffffff16146112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90614db5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112de57600080fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016113199190614b23565b60206040518083038186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113699190614479565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016113a6929190614b3e565b602060405180830381600087803b1580156113c057600080fd5b505af11580156113d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f89190614151565b505050565b803373ffffffffffffffffffffffffffffffffffffffff1661141d611e8e565b73ffffffffffffffffffffffffffffffffffffffff16148061151457503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016114ac9190614e15565b60206040518083038186803b1580156114c457600080fd5b505afa1580156114d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fc919061404e565b73ffffffffffffffffffffffffffffffffffffffff16145b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90614d15565b60405180910390fd5b600d543411611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90614d35565b60405180910390fd5b6115a28484846125b5565b50505050565b6115b06132b3565b73ffffffffffffffffffffffffffffffffffffffff166115ce611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90614db5565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900460ff1681565b60606000600960008681526020019081526020016000205490506000811180156116bb57506000801b600a60008381526020019081526020016000205414155b6116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190614c95565b60405180910390fd5b7fd1f86c93d831119ad98fe983e643a7431e4ac992e3ead6e3007f4dd1adf66343848460405160200161172e929190614a3b565b6040516020818303038152906040528051906020012014156117eb57600860009054906101000a900460ff1661178e57600761176982613367565b60405160200161177a929190614a6b565b6040516020818303038152906040526117e3565b6117b9600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166134c8565b6117c282613367565b6040516020016117d3929190614ae9565b6040516020818303038152906040525b9150506118a9565b60046000868152602001908152602001600020848460405161180e929190614a3b565b90815260200160405180910390208054611827906151b4565b80601f0160208091040260200160405190810160405280929190818152602001828054611853906151b4565b80156118a05780601f10611875576101008083540402835291602001916118a0565b820191906000526020600020905b81548152906001019060200180831161188357829003601f168201915b50505050509150505b9392505050565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161190f9190614b23565b60206040518083038186803b15801561192757600080fd5b505afa15801561193b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195f9190614479565b905060008167ffffffffffffffff81111561197d5761197c615357565b5b6040519080825280602002602001820160405280156119ab5781602001602082028036833780820191505090505b5090506000805b83811015611ac9576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5988846040518363ffffffff1660e01b8152600401611a19929190614b3e565b60206040518083038186803b158015611a3157600080fd5b505afa158015611a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a699190614479565b90506000801b600a60008381526020019081526020016000205414611ab55780848480611a9590615217565b955081518110611aa857611aa7615328565b5b6020026020010181815250505b508080611ac190615217565b9150506119b2565b5060008167ffffffffffffffff811115611ae657611ae5615357565b5b604051908082528060200260200182016040528015611b145781602001602082028036833780820191505090505b50905060005b82811015611b6f57838181518110611b3557611b34615328565b5b6020026020010151828281518110611b5057611b4f615328565b5b6020026020010181815250508080611b6790615217565b915050611b1a565b5080945050505050919050565b60606000600960008481526020019081526020016000205414611bd357600b60008381526020019081526020016000206006604051602001611bbf929190614a9a565b604051602081830303815290604052611be4565b604051806020016040528060008152505b9050919050565b611bf36132b3565b73ffffffffffffffffffffffffffffffffffffffff16611c11611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614db5565b60405180910390fd5b6000611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90614cf5565b60405180910390fd5b611cb06137d3565b565b611cba6132b3565b73ffffffffffffffffffffffffffffffffffffffff16611cd8611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590614db5565b60405180910390fd5b60005b82829050811015611dce576001600f6000858585818110611d5557611d54615328565b5b9050602002016020810190611d6a9190614021565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611dc690615217565b915050611d31565b505050565b611ddb6132b3565b73ffffffffffffffffffffffffffffffffffffffff16611df9611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614611e4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4690614db5565b60405180910390fd5b8060079080519060200190611e65929190613d1c565b5050565b6005602052816000526040600020602052806000526040600020600091509150505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f1d5750600e60009054906101000a900460ff165b80611f5a57508173ffffffffffffffffffffffffffffffffffffffff16611f42611e8e565b73ffffffffffffffffffffffffffffffffffffffff16145b15611f6f57611f688261385b565b9050611fbc565b600067ffffffffffffffff811115611f8a57611f89615357565b5b604051908082528060200260200182016040528015611fb85781602001602082028036833780820191505090505b5090505b919050565b60096020528060005260406000206000915090505481565b600d5481565b600c5481565b611fed6132b3565b73ffffffffffffffffffffffffffffffffffffffff1661200b611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890614db5565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915090505481565b600e60009054906101000a900460ff1681565b600f6020528060005260406000206000915054906101000a900460ff1681565b600680546120e5906151b4565b80601f0160208091040260200160405190810160405280929190818152602001828054612111906151b4565b801561215e5780601f106121335761010080835404028352916020019161215e565b820191906000526020600020905b81548152906001019060200180831161214157829003601f168201915b505050505081565b600080838360405160200161217c929190614a3b565b6040516020818303038152906040528051906020012090506000600354826040516020016121ab929190614a0f565b60405160208183030381529060405280519060200120905060006009600083815260200190815260200160002054116121e7576000801b6121e9565b805b9250505092915050565b803373ffffffffffffffffffffffffffffffffffffffff16612213611e8e565b73ffffffffffffffffffffffffffffffffffffffff16148061230a57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016122a29190614e15565b60206040518083038186803b1580156122ba57600080fd5b505afa1580156122ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122f2919061404e565b73ffffffffffffffffffffffffffffffffffffffff16145b612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614d15565b60405180910390fd5b6000600a6000848152602001908152602001600020549050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f79fe538826040518263ffffffff1660e01b81526004016123bc9190614bc6565b60206040518083038186803b1580156123d457600080fd5b505afa1580156123e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240c9190614151565b61244b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244290614d95565b60405180910390fd5b60405180602001604052806000815250600b60008381526020019081526020016000209080519060200190612481929190613d1c565b50600060096000838152602001908152602001600020819055506000801b600a60008581526020019081526020016000208190555042600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020541180156125485750612518611e8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156125b0576107084261255b9190614f71565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020819055505b505050565b803373ffffffffffffffffffffffffffffffffffffffff166125d5611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614806126cc57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016126649190614e15565b60206040518083038186803b15801561267c57600080fd5b505afa158015612690573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b4919061404e565b73ffffffffffffffffffffffffffffffffffffffff16145b61270b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270290614d15565b60405180910390fd5b6000801b600a60008481526020019081526020016000205414612763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275a90614df5565b60405180910390fd5b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c75750600e60009054906101000a900460ff165b8061280457503373ffffffffffffffffffffffffffffffffffffffff166127ec611e8e565b73ffffffffffffffffffffffffffffffffffffffff16145b612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90614d15565b60405180910390fd5b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000205442116128d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128cc90614dd5565b60405180910390fd5b600084846040516020016128ea929190614a3b565b604051602081830303815290604052805190602001209050600060035482604051602001612919929190614a0f565b604051602081830303815290604052805190602001209050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f79fe538826040518263ffffffff1660e01b815260040161298c9190614bc6565b60206040518083038186803b1580156129a457600080fd5b505afa1580156129b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129dc9190614151565b1580612a1a57506129eb611e8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5090614cd5565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635ef2c7f060035484612aa3611e8e565b3060006040518663ffffffff1660e01b8152600401612ac6959493929190614be1565b600060405180830381600087803b158015612ae057600080fd5b505af1158015612af4573d6000803e3d6000fd5b5050505083600960008381526020019081526020016000208190555080600a6000868152602001908152602001600020819055508585600b60008481526020019081526020016000209190612b4a929190613c96565b503373ffffffffffffffffffffffffffffffffffffffff16612b6a611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614612c9357600c5442612b939190614f71565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086815260200190815260200160002081905550600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c92576000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b8585604051612ca3929190614a3b565b604051809103902084600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b8152600401612d079190614e15565b60206040518083038186803b158015612d1f57600080fd5b505afa158015612d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d57919061404e565b73ffffffffffffffffffffffffffffffffffffffff167fa16b10a6d8a8b7e20fab669fb2b5acd39c210216e639cdd3190a0c1fe2b7cc7b60405160405180910390a4505050505050565b612da96132b3565b73ffffffffffffffffffffffffffffffffffffffff16612dc7611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1490614db5565b60405180910390fd5b80600c8190555050565b60035481565b600460205281600052604060002081805160208101820180518482526020830160208501208183528095505050505050600091509150508054612e6f906151b4565b80601f0160208091040260200160405190810160405280929190818152602001828054612e9b906151b4565b8015612ee85780601f10612ebd57610100808354040283529160200191612ee8565b820191906000526020600020905b815481529060010190602001808311612ecb57829003601f168201915b505050505081565b612ef86132b3565b73ffffffffffffffffffffffffffffffffffffffff16612f16611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614612f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6390614db5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612fdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd390614cb5565b60405180910390fd5b612fe581613b28565b50565b612ff06132b3565b73ffffffffffffffffffffffffffffffffffffffff1661300e611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614613064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305b90614db5565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b60606000825167ffffffffffffffff8111156130af576130ae615357565b5b6040519080825280602002602001820160405280156130e257816020015b60608152602001906001900390816130cd5790505b50905060005b83518110156131455761311484828151811061310757613106615328565b5b6020026020010151613bec565b82828151811061312757613126615328565b5b6020026020010181905250808061313d90615217565b9150506130e8565b5080915050919050565b6007805461315c906151b4565b80601f0160208091040260200160405190810160405280929190818152602001828054613188906151b4565b80156131d55780601f106131aa576101008083540402835291602001916131d5565b820191906000526020600020905b8154815290600101906020018083116131b857829003601f168201915b505050505081565b6131e56132b3565b73ffffffffffffffffffffffffffffffffffffffff16613203611e8e565b73ffffffffffffffffffffffffffffffffffffffff1614613259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325090614db5565b60405180910390fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055505050565b600033905090565b60008060001b9050806040516020016132d390614ad4565b604051602081830303815290604052805190602001206040516020016132fa929190614a0f565b6040516020818303038152906040528051906020012090508060066040516020016133259190614a54565b6040516020818303038152906040528051906020012060405160200161334c929190614a0f565b60405160208183030381529060405280519060200120905090565b606060008214156133af576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134c3565b600082905060005b600082146133e15780806133ca90615217565b915050600a826133da9190614fc7565b91506133b7565b60008167ffffffffffffffff8111156133fd576133fc615357565b5b6040519080825280601f01601f19166020018201604052801561342f5781602001600182028036833780820191505090505b5090505b600085146134bc576001826134489190615052565b9150600a85613457919061526a565b60306134639190614f71565b60f81b81838151811061347957613478615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134b59190614fc7565b9450613433565b8093505050505b919050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b905060006040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506000603367ffffffffffffffff81111561353f5761353e615357565b5b6040519080825280601f01601f1916602001820160405280156135715781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106135a9576135a8615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061360d5761360c615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156137c75782600485600c846136599190614f71565b6020811061366a57613669615328565b5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff16815181106136a9576136a8615328565b5b602001015160f81c60f81b826002836136c29190614ff8565b60026136ce9190614f71565b815181106136df576136de615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f60f81b85600c846137229190614f71565b6020811061373357613732615328565b5b1a60f81b1660f81c60ff168151811061374f5761374e615328565b5b602001015160f81c60f81b826002836137689190614ff8565b60036137749190614f71565b8151811061378557613784615328565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806137bf90615217565b91505061363f565b50809350505050919050565b6137db6132b3565b73ffffffffffffffffffffffffffffffffffffffff166137f9611e8e565b73ffffffffffffffffffffffffffffffffffffffff161461384f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161384690614db5565b60405180910390fd5b6138596000613b28565b565b60606000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016138ba9190614b23565b60206040518083038186803b1580156138d257600080fd5b505afa1580156138e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390a9190614479565b905060008167ffffffffffffffff81111561392857613927615357565b5b6040519080825280602002602001820160405280156139565781602001602082028036833780820191505090505b5090506000805b83811015613a75576000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5988846040518363ffffffff1660e01b81526004016139c4929190614b3e565b60206040518083038186803b1580156139dc57600080fd5b505afa1580156139f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a149190614479565b90506000801b600a6000838152602001908152602001600020541415613a615780848480613a4190615217565b955081518110613a5457613a53615328565b5b6020026020010181815250505b508080613a6d90615217565b91505061395d565b5060008167ffffffffffffffff811115613a9257613a91615357565b5b604051908082528060200260200182016040528015613ac05781602001602082028036833780820191505090505b50905060005b82811015613b1b57838181518110613ae157613ae0615328565b5b6020026020010151828281518110613afc57613afb615328565b5b6020026020010181815250508080613b1390615217565b915050613ac6565b5080945050505050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000801b600a6000848152602001908152602001600020541415613c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3e90614d75565b60405180910390fd5b600b6000600a60008581526020019081526020016000205481526020019081526020016000206006604051602001613c80929190614a9a565b6040516020818303038152906040529050919050565b828054613ca2906151b4565b90600052602060002090601f016020900481019282613cc45760008555613d0b565b82601f10613cdd57803560ff1916838001178555613d0b565b82800160010185558215613d0b579182015b82811115613d0a578235825591602001919060010190613cef565b5b509050613d189190613da2565b5090565b828054613d28906151b4565b90600052602060002090601f016020900481019282613d4a5760008555613d91565b82601f10613d6357805160ff1916838001178555613d91565b82800160010185558215613d91579182015b82811115613d90578251825591602001919060010190613d75565b5b509050613d9e9190613da2565b5090565b5b80821115613dbb576000816000905550600101613da3565b5090565b6000613dd2613dcd84614e55565b614e30565b90508083825260208201905082856020860282011115613df557613df4615390565b5b60005b85811015613e255781613e0b8882613ff7565b845260208401935060208301925050600181019050613df8565b5050509392505050565b6000613e42613e3d84614e81565b614e30565b905082815260208101848484011115613e5e57613e5d615395565b5b613e69848285615172565b509392505050565b600081359050613e808161572f565b92915050565b600081519050613e958161572f565b92915050565b60008083601f840112613eb157613eb061538b565b5b8235905067ffffffffffffffff811115613ece57613ecd615386565b5b602083019150836020820283011115613eea57613ee9615390565b5b9250929050565b600082601f830112613f0657613f0561538b565b5b8135613f16848260208601613dbf565b91505092915050565b600081519050613f2e81615746565b92915050565b600081359050613f438161575d565b92915050565b600081359050613f5881615774565b92915050565b600081359050613f6d8161578b565b92915050565b60008083601f840112613f8957613f8861538b565b5b8235905067ffffffffffffffff811115613fa657613fa5615386565b5b602083019150836001820283011115613fc257613fc1615390565b5b9250929050565b600082601f830112613fde57613fdd61538b565b5b8135613fee848260208601613e2f565b91505092915050565b600081359050614006816157a2565b92915050565b60008151905061401b816157a2565b92915050565b6000602082840312156140375761403661539f565b5b600061404584828501613e71565b91505092915050565b6000602082840312156140645761406361539f565b5b600061407284828501613e86565b91505092915050565b600080604083850312156140925761409161539f565b5b60006140a085828601613e71565b92505060206140b185828601613ff7565b9150509250929050565b600080602083850312156140d2576140d161539f565b5b600083013567ffffffffffffffff8111156140f0576140ef61539a565b5b6140fc85828601613e9b565b92509250509250929050565b60006020828403121561411e5761411d61539f565b5b600082013567ffffffffffffffff81111561413c5761413b61539a565b5b61414884828501613ef1565b91505092915050565b6000602082840312156141675761416661539f565b5b600061417584828501613f1f565b91505092915050565b6000602082840312156141945761419361539f565b5b60006141a284828501613f34565b91505092915050565b6000806000604084860312156141c4576141c361539f565b5b60006141d286828701613f34565b935050602084013567ffffffffffffffff8111156141f3576141f261539a565b5b6141ff86828701613f73565b92509250509250925092565b6000806000806000606086880312156142275761422661539f565b5b600061423588828901613f34565b955050602086013567ffffffffffffffff8111156142565761425561539a565b5b61426288828901613f73565b9450945050604086013567ffffffffffffffff8111156142855761428461539a565b5b61429188828901613f73565b92509250509295509295909350565b600080604083850312156142b7576142b661539f565b5b60006142c585828601613f34565b925050602083013567ffffffffffffffff8111156142e6576142e561539a565b5b6142f285828601613fc9565b9150509250929050565b6000602082840312156143125761431161539f565b5b600061432084828501613f49565b91505092915050565b60006020828403121561433f5761433e61539f565b5b600061434d84828501613f5e565b91505092915050565b6000806020838503121561436d5761436c61539f565b5b600083013567ffffffffffffffff81111561438b5761438a61539a565b5b61439785828601613f73565b92509250509250929050565b6000806000604084860312156143bc576143bb61539f565b5b600084013567ffffffffffffffff8111156143da576143d961539a565b5b6143e686828701613f73565b935093505060206143f986828701613ff7565b9150509250925092565b6000602082840312156144195761441861539f565b5b600082013567ffffffffffffffff8111156144375761443661539a565b5b61444384828501613fc9565b91505092915050565b6000602082840312156144625761446161539f565b5b600061447084828501613ff7565b91505092915050565b60006020828403121561448f5761448e61539f565b5b600061449d8482850161400c565b91505092915050565b60006144b28383614659565b905092915050565b60006144c683836149f1565b60208301905092915050565b6144db81615086565b82525050565b60006144ec82614ee7565b6144f68185614f22565b93508360208202850161450885614eb2565b8060005b85811015614544578484038952815161452585826144a6565b945061453083614f08565b925060208a0199505060018101905061450c565b50829750879550505050505092915050565b600061456182614ef2565b61456b8185614f33565b935061457683614ec2565b8060005b838110156145a757815161458e88826144ba565b975061459983614f15565b92505060018101905061457a565b5085935050505092915050565b6145bd81615098565b82525050565b6145cc816150a4565b82525050565b6145e36145de826150a4565b615260565b82525050565b6145f28161512a565b82525050565b6146018161513c565b82525050565b60006146138385614f55565b9350614620838584615172565b614629836153a4565b840190509392505050565b60006146408385614f66565b935061464d838584615172565b82840190509392505050565b600061466482614efd565b61466e8185614f44565b935061467e818560208601615181565b614687816153a4565b840191505092915050565b600061469d82614efd565b6146a78185614f55565b93506146b7818560208601615181565b6146c0816153a4565b840191505092915050565b60006146d682614efd565b6146e08185614f66565b93506146f0818560208601615181565b80840191505092915050565b60008154614709816151b4565b6147138186614f66565b9450600182166000811461472e576001811461473f57614772565b60ff19831686528186019350614772565b61474885614ed2565b60005b8381101561476a5781548189015260018201915060208101905061474b565b838801955050505b50505092915050565b6000614788600f83614f55565b9150614793826153b5565b602082019050919050565b60006147ab602683614f55565b91506147b6826153de565b604082019050919050565b60006147ce601983614f55565b91506147d98261542d565b602082019050919050565b60006147f1602683614f55565b91506147fc82615456565b604082019050919050565b6000614814600483614f66565b915061481f826154a5565b600482019050919050565b6000614837600e83614f55565b9150614842826154ce565b602082019050919050565b600061485a600483614f66565b9150614865826154f7565b600482019050919050565b600061487d600383614f66565b915061488882615520565b600382019050919050565b60006148a0601c83614f55565b91506148ab82615549565b602082019050919050565b60006148c3601083614f66565b91506148ce82615572565b601082019050919050565b60006148e6600183614f66565b91506148f18261559b565b600182019050919050565b6000614909601183614f55565b9150614914826155c4565b602082019050919050565b600061492c602383614f55565b9150614937826155ed565b604082019050919050565b600061494f601983614f55565b915061495a8261563c565b602082019050919050565b6000614972602083614f55565b915061497d82615665565b602082019050919050565b6000614995602683614f55565b91506149a08261568e565b604082019050919050565b60006149b8601a83614f55565b91506149c3826156dd565b602082019050919050565b60006149db600183614f66565b91506149e682615706565b600182019050919050565b6149fa8161510c565b82525050565b614a098161510c565b82525050565b6000614a1b82856145d2565b602082019150614a2b82846145d2565b6020820191508190509392505050565b6000614a48828486614634565b91508190509392505050565b6000614a6082846146fc565b915081905092915050565b6000614a7782856146fc565b9150614a8382846146cb565b9150614a8e82614807565b91508190509392505050565b6000614aa682856146fc565b9150614ab1826148d9565b9150614abd82846146fc565b9150614ac88261484d565b91508190509392505050565b6000614adf82614870565b9150819050919050565b6000614af4826148b6565b9150614b0082856146cb565b9150614b0b826149ce565b9150614b1782846146cb565b91508190509392505050565b6000602082019050614b3860008301846144d2565b92915050565b6000604082019050614b5360008301856144d2565b614b606020830184614a00565b9392505050565b60006020820190508181036000830152614b8181846144e1565b905092915050565b60006020820190508181036000830152614ba38184614556565b905092915050565b6000602082019050614bc060008301846145b4565b92915050565b6000602082019050614bdb60008301846145c3565b92915050565b600060a082019050614bf660008301886145c3565b614c0360208301876145c3565b614c1060408301866144d2565b614c1d60608301856144d2565b614c2a60808301846145f8565b9695505050505050565b6000602082019050614c4960008301846145e9565b92915050565b60006020820190508181036000830152614c6a818486614607565b90509392505050565b60006020820190508181036000830152614c8d8184614692565b905092915050565b60006020820190508181036000830152614cae8161477b565b9050919050565b60006020820190508181036000830152614cce8161479e565b9050919050565b60006020820190508181036000830152614cee816147c1565b9050919050565b60006020820190508181036000830152614d0e816147e4565b9050919050565b60006020820190508181036000830152614d2e8161482a565b9050919050565b60006020820190508181036000830152614d4e81614893565b9050919050565b60006020820190508181036000830152614d6e816148fc565b9050919050565b60006020820190508181036000830152614d8e8161491f565b9050919050565b60006020820190508181036000830152614dae81614942565b9050919050565b60006020820190508181036000830152614dce81614965565b9050919050565b60006020820190508181036000830152614dee81614988565b9050919050565b60006020820190508181036000830152614e0e816149ab565b9050919050565b6000602082019050614e2a6000830184614a00565b92915050565b6000614e3a614e4b565b9050614e4682826151e6565b919050565b6000604051905090565b600067ffffffffffffffff821115614e7057614e6f615357565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614e9c57614e9b615357565b5b614ea5826153a4565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f7c8261510c565b9150614f878361510c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fbc57614fbb61529b565b5b828201905092915050565b6000614fd28261510c565b9150614fdd8361510c565b925082614fed57614fec6152ca565b5b828204905092915050565b60006150038261510c565b915061500e8361510c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150475761504661529b565b5b828202905092915050565b600061505d8261510c565b91506150688361510c565b92508282101561507b5761507a61529b565b5b828203905092915050565b6000615091826150ec565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006150e582615086565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b60006151358261514e565b9050919050565b600061514782615116565b9050919050565b600061515982615160565b9050919050565b600061516b826150ec565b9050919050565b82818337600083830152505050565b60005b8381101561519f578082015181840152602081019050615184565b838111156151ae576000848401525b50505050565b600060028204905060018216806151cc57607f821691505b602082108114156151e0576151df6152f9565b5b50919050565b6151ef826153a4565b810181811067ffffffffffffffff8211171561520e5761520d615357565b5b80604052505050565b60006152228261510c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156152555761525461529b565b5b600182019050919050565b6000819050919050565b60006152758261510c565b91506152808361510c565b9250826152905761528f6152ca565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f7375622d646f6d61696e20616c72656164792065786973747300000000000000600082015250565b7f536f727279202d20796f752063616e6e6f742072656e6f756e6365206f776e6560008201527f72736869702e0000000000000000000000000000000000000000000000000000602082015250565b7f2e706e6700000000000000000000000000000000000000000000000000000000600082015250565b7f4e6f7420617574686f7269736564000000000000000000000000000000000000600082015250565b7f2e65746800000000000000000000000000000000000000000000000000000000600082015250565b7f6574680000000000000000000000000000000000000000000000000000000000600082015250565b7f6e6f7420656e6f756768204574682073656e7420746f20636c61696d00000000600082015250565b7f6569703135353a312f6572633732313a00000000000000000000000000000000600082015250565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b7f63616e6e6f742073657420617661746172000000000000000000000000000000600082015250565b7f546f6b656e20646f6573206e6f74206861766520616e20454e5320726567697360008201527f7465720000000000000000000000000000000000000000000000000000000000602082015250565b7f5375622d646f6d61696e20646f6573206e6f7420657869737400000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f57616c6c6574206d7573742077616974206d6f72652074696d6520746f20726560008201527f6769737465720000000000000000000000000000000000000000000000000000602082015250565b7f546f6b656e2068617320616c7265616479206265656e20736574000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b61573881615086565b811461574357600080fd5b50565b61574f81615098565b811461575a57600080fd5b50565b615766816150a4565b811461577157600080fd5b50565b61577d816150ae565b811461578857600080fd5b50565b615794816150da565b811461579f57600080fd5b50565b6157ab8161510c565b81146157b657600080fd5b5056fea26469706673582212204eea2760da7fb3dd241e4d357ebb61fdf71f88678c0b8db3b424d30d01d2b9c964736f6c63430008070033

Deployed Bytecode Sourcemap

556:11707:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1866:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10780:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9090:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10693:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3062:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11758:125;;;;;;;;;;;;;:::i;:::-;;1148:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10549:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;653:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11886:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8861:223;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11085:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1004:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2162:894;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5439:583;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3306:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11522:163;;;;;;;;;;;;;:::i;:::-;;10343:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10976:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;786:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1036:85:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3980:288:7;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1043:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1258:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1204:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10885:85;;;;;;;;;;;;;:::i;:::-;;1095:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1320:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1389:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;869:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3678:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9528:652;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7180:1675;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11422:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;687:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;718:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:198:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11319:97:7;;;;;;;;;;;;;:::i;:::-;;5140:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;910:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11177:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1866:290;1934:4;1972:10;1957:25;;:11;:25;;;;:69;;;;2016:10;2001:25;;:11;:25;;;;1957:69;:113;;;;2060:10;2045:25;;:11;:25;;;;1957:113;:157;;;;2104:10;2089:25;;:11;:25;;;;1957:157;1950:164;;1866:290;;;:::o;10780:99::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10867:4:7::1;10843:3;;:29;;;;;;;;;;;;;;;;;;10780:99:::0;:::o;9090:424::-;9187:11;:17;9199:4;9187:17;;;;;;;;;;;;12176:10;12165:21;;:7;:5;:7::i;:::-;:21;;;:59;;;;12214:10;12190:34;;:3;;;;;;;;;;;:11;;;12202:7;12190:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;12165:59;12157:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;9216:16:::1;9235:11;:17;9247:4;9235:17;;;;;;;;;;;;9216:36;;9281:1;9270:8;:12;:45;;;;;9312:3;9286:29:::0;::::1;:12;:22;9299:8;9286:22;;;;;;;;;;;;:29;;9270:45;9262:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9389:19;9380:3;;9363:21;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9353:32;;;;;;:55;;9345:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;9460:5;;9441;:11;9447:4;9441:11;;;;;;;;;;;9453:3;;9441:16;;;;;;;:::i;:::-;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;9498:3;;9480:27;;;;;;;:::i;:::-;;;;;;;;9492:4;9480:27;9503:3;;9480:27;;;;;;;:::i;:::-;;;;;;;;9206:308;9090:424:::0;;;;;;:::o;10693:81::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10764:3:7::1;10753:8;:14;;;;10693:81:::0;:::o;3062:236::-;3113:7;3132:16;3151:11;:19;3163:6;3151:19;;;;;;;;;;;;3132:38;;3199:1;3188:8;:12;:45;;;;;3230:3;3204:29;;:12;:22;3217:8;3204:22;;;;;;;;;;;;:29;;3188:45;3180:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3270:3;;;;;;;;;;;:11;;;3282:8;3270:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3263:28;;;3062:236;;;:::o;11758:125::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11799:15:7::1;11817:21;11799:39;;11850:10;11842:28;;:37;11871:7;11842:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;11795:88;11758:125::o:0;1148:49::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;10549:138::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10637:5:7::1;;10623:11;:19;;;;;;;:::i;:::-;;10665:15;:13;:15::i;:::-;10652:10;:28;;;;10549:138:::0;;:::o;653:28::-;;;;;;;;;;;;;:::o;11886:191::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11979:1:7::1;11953:28;;11961:5;11953:28;;;;11945:37;;;::::0;::::1;;11986:15;12004:5;:15;;;12028:4;12004:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11986:48;;12038:5;:14;;;12053:10;12065:7;12038:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11941:136;11886:191:::0;:::o;8861:223::-;8944:8;12176:10;12165:21;;:7;:5;:7::i;:::-;:21;;;:59;;;;12214:10;12190:34;;:3;;;;;;;;;;;:11;;;12202:7;12190:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;12165:59;12157:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;8997:8:::1;;8985:9;:20;8977:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9051:26;9061:5;;9068:8;9051:9;:26::i;:::-;8861:223:::0;;;;:::o;11085:86::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11159:4:7::1;11149:3;;:15;;;;;;;;;;;;;;;;;;11085:86:::0;:::o;1004:28::-;;;;;;;;;;;;;:::o;2162:894::-;2234:13;2259:16;2278:11;:17;2290:4;2278:17;;;;;;;;;;;;2259:36;;2324:1;2313:8;:12;:45;;;;;2355:3;2329:29;;:12;:22;2342:8;2329:22;;;;;;;;;;;;:29;;2313:45;2305:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2427:19;2418:3;;2401:21;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2391:32;;;;;;:55;2388:662;;;2752:9;;;;;;;;;;;:214;;2921:15;2938:19;:8;:17;:19::i;:::-;2904:61;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2752:214;;;2808:29;2832:3;;;;;;;;;;;2808:15;:29::i;:::-;2844:19;:8;:17;:19::i;:::-;2771:93;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2752:214;2745:221;;;;;2388:662;3023:5;:11;3029:4;3023:11;;;;;;;;;;;3035:3;;3023:16;;;;;;;:::i;:::-;;;;;;;;;;;;;3016:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2162:894;;;;;;:::o;5439:583::-;5503:16;5530:15;5548:3;;;;;;;;;;;:13;;;5562:4;5548:19;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5530:37;;5577:20;5614:7;5600:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5577:45;;5632:13;5659:9;5655:192;5674:7;5670:1;:11;5655:192;;;5701:10;5714:3;;;;;;;;;;;:23;;;5738:4;5744:1;5714:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5701:45;;5783:3;5763:23;;:12;:16;5776:2;5763:16;;;;;;;;;;;;:23;5760:77;;5820:2;5805:3;5809:7;;;;;:::i;:::-;;;5805:12;;;;;;;;:::i;:::-;;;;;;;:17;;;;;5760:77;5687:160;5683:3;;;;;:::i;:::-;;;;5655:192;;;;5857:25;5899:5;5885:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5857:48;;5919:9;5915:75;5934:5;5930:1;:9;5915:75;;;5973:3;5977:1;5973:6;;;;;;;;:::i;:::-;;;;;;;;5959:8;5968:1;5959:11;;;;;;;;:::i;:::-;;;;;;;:20;;;;;5941:3;;;;;:::i;:::-;;;;5915:75;;;;6007:8;6000:15;;;;;;5439:583;;;:::o;3306:210::-;3355:13;3408:1;3387:11;:17;3399:4;3387:17;;;;;;;;;;;;:22;3386:123;;3460:15;:21;3476:4;3460:21;;;;;;;;;;;3488:11;3443:65;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3386:123;;;;;;;;;;;;;;;;3379:130;;3306:210;;;:::o;11522:163::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11595:5:7::1;11587:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11653:25;:23;:25::i;:::-;11522:163::o:0;10343:200::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10433:9:7::1;10429:108;10448:9;;:16;;10444:1;:20;10429:108;;;10517:4;10483:17;:31;10501:9;;10511:1;10501:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;10483:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;10466:3;;;;;:::i;:::-;;;;10429:108;;;;10343:200:::0;;:::o;10976:103::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11068:4:7::1;11050:15;:22;;;;;;;;;;;;:::i;:::-;;10976:103:::0;:::o;786:76::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1036:85:1:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;3980:288:7:-;4049:16;4081:17;:23;4099:4;4081:23;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;4108:15;;;;;;;;;;;4081:42;4079:74;;;;4149:4;4138:15;;:7;:5;:7::i;:::-;:15;;;4079:74;4076:186;;;4175:15;4185:4;4175:9;:15::i;:::-;4168:22;;;;4076:186;4249:1;4235:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4228:23;;3980:288;;;;:::o;1043:46::-;;;;;;;;;;;;;;;;;:::o;1258:27::-;;;;:::o;1204:37::-;;;;:::o;10885:85::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10954:9:7::1;;;;;;;;;;;10953:10;10941:9;;:22;;;;;;;;;;;;;;;;;;10885:85::o:0;1095:47::-;;;;;;;;;;;;;;;;;:::o;1320:34::-;;;;;;;;;;;;;:::o;1389:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;869:35::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3678:296::-;3740:7;3758:21;3809:5;;3792:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3782:34;;;;;;3758:58;;3826:16;3872:10;;3884:13;3855:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3845:54;;;;;;3826:73;;3940:1;3916:11;:21;3928:8;3916:21;;;;;;;;;;;;:25;:51;;3963:3;3955:12;;3916:51;;;3944:8;3916:51;3909:58;;;;3678:296;;;;:::o;9528:652::-;9595:8;12176:10;12165:21;;:7;:5;:7::i;:::-;:21;;;:59;;;;12214:10;12190:34;;:3;;;;;;;;;;;:11;;;12202:7;12190:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;12165:59;12157:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;9624:14:::1;9641:12;:22;9654:8;9641:22;;;;;;;;;;;;9624:39;;9681:3;;;;;;;;;;;:16;;;9698:6;9681:24;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9673:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9786:28;;;;;;;;;;;::::0;:15:::1;:23;9802:6;9786:23;;;;;;;;;;;:28;;;;;;;;;;;;:::i;:::-;;9852:1;9830:11;:19;9842:6;9830:19;;;;;;;;;;;:23;;;;9888:3;9863:28:::0;::::1;:12;:22;9876:8;9863:22;;;;;;;;;;;:28;;;;10005:15;9959:21;:33;9981:10;9959:33;;;;;;;;;;;;;;;:43;9993:8;9959:43;;;;;;;;;;;;:61;:86;;;;;10038:7;:5;:7::i;:::-;10024:21;;:10;:21;;;;9959:86;9956:209;;;10125:7;10106:15;:27;;;;:::i;:::-;10060:21;:33;10082:10;10060:33;;;;;;;;;;;;;;;:43;10094:8;10060:43;;;;;;;;;;;:73;;;;9956:209;9605:575;9528:652:::0;;:::o;7180:1675::-;7260:8;12176:10;12165:21;;:7;:5;:7::i;:::-;:21;;;:59;;;;12214:10;12190:34;;:3;;;;;;;;;;;:11;;;12202:7;12190:20;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;12165:59;12157:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;7319:3:::1;7293:29:::0;::::1;:12;:22;7306:8;7293:22;;;;;;;;;;;;:29;7285:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7371:17;:29;7389:10;7371:29;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;7404:15;;;;;;;;;;;7371:48;:73;;;;7434:10;7423:21;;:7;:5;:7::i;:::-;:21;;;7371:73;7363:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;7499:21;:33;7521:10;7499:33;;;;;;;;;;;;;;;:43;7533:8;7499:43;;;;;;;;;;;;7481:15;:61;7473:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;7607:21;7658:5;;7641:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7631:34;;;;;;7607:58;;7675:16;7721:10;;7733:13;7704:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7694:54;;;;;;7675:73;;8137:3;;;;;;;;;;;:16;;;8154:8;8137:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8136:27;:52;;;;8181:7;:5;:7::i;:::-;8167:21;;:10;:21;;;8136:52;8128:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;8237:3;;;;;;;;;;;:20;;;8258:10;;8270:13;8285:7;:5;:7::i;:::-;8302:4;8309:1;8237:74;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8346:8;8322:11;:21;8334:8;8322:21;;;;;;;;;;;:32;;;;8397:8;8372:12;:22;8385:8;8372:22;;;;;;;;;;;:33;;;;8443:5;;8415:15;:25;8431:8;8415:25;;;;;;;;;;;:33;;;;;;;:::i;:::-;;8474:10;8463:21;;:7;:5;:7::i;:::-;:21;;;8459:312;;8580:12;;8562:15;:30;;;;:::i;:::-;8516:21;:33;8538:10;8516:33;;;;;;;;;;;;;;;:43;8550:8;8516:43;;;;;;;;;;;:76;;;;8661:17;:29;8679:10;8661:29;;;;;;;;;;;;;;;;;;;;;;;;;8657:104;;;8741:5;8709:17;:29;8727:10;8709:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;8657:104;8459:312;8837:5;;8786:57;;;;;;;:::i;:::-;;;;;;;;8827:8;8804:3;;;;;;;;;;;:11;;;8816:8;8804:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8786:57;;;;;;;;;;;;7270:1585;;7180:1675:::0;;;;:::o;11422:94::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11505:4:7::1;11490:12;:19;;;;11422:94:::0;:::o;687:25::-;;;;:::o;718:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1918:198:1:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;11319:97:7:-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11394:15:7::1;;;;;;;;;;;11393:16;11375:15;;:34;;;;;;;;;;;;;;;;;;11319:97::o:0;5140:293::-;5214:15;5240:20;5276:9;:16;5263:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5240:53;;5307:9;5303:103;5322:9;:16;5318:1;:20;5303:103;;;5367:28;5382:9;5392:1;5382:12;;;;;;;;:::i;:::-;;;;;;;;5367:14;:28::i;:::-;5357:4;5362:1;5357:7;;;;;;;;:::i;:::-;;;;;;;:38;;;;5340:3;;;;;:::i;:::-;;;;5303:103;;;;5422:4;5415:11;;;5140:293;;;:::o;910:88::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11177:136::-;1259:12:1;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11305:1:7::1;11265:21;:27;11287:4;11265:27;;;;;;;;;;;;;;;:37;11293:8;11265:37;;;;;;;;;;;:41;;;;11177:136:::0;;:::o;640:96:4:-;693:7;719:10;712:17;;640:96;:::o;6715:302:7:-;6762:16;6805:3;6794:14;;;;6860:8;6880:23;;;;;;;:::i;:::-;;;;;;;;;;;;;6870:34;;;;;;6843:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6833:73;;;;;;6822:84;;6958:8;6995:11;6978:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;6968:40;;;;;;6941:68;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6931:79;;;;;;6920:90;;6715:302;:::o;328:703:5:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;6180:460:7:-;6241:13;6262;6302:5;6286:23;;6278:32;;6262:48;;6316:21;:42;;;;;;;;;;;;;;;;;;;6365:16;6394:2;6384:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6365:32;;6403:12;:3;6407:1;6403:6;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;6421;:3;6425:1;6421:6;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;6444:6;6439:171;6460:2;6456:1;:6;6439:171;;;6492:8;6529:1;6512:5;6522:2;6518:1;:6;;;;:::i;:::-;6512:13;;;;;;;:::i;:::-;;;;;:18;;;;;6506:25;;6501:31;;6492:41;;;;;;;;:::i;:::-;;;;;;;;;;6479:3;6487:1;6485;:3;;;;:::i;:::-;6483:1;:5;;;;:::i;:::-;6479:10;;;;;;;;:::i;:::-;;;;;:54;;;;;;;;;;;6556:8;6592:4;6576:20;;:5;6586:2;6582:1;:6;;;;:::i;:::-;6576:13;;;;;;;:::i;:::-;;;;;:20;6570:27;;6565:33;;6556:43;;;;;;;;:::i;:::-;;;;;;;;;;6543:3;6551:1;6549;:3;;;;:::i;:::-;6547:1;:5;;;;:::i;:::-;6543:10;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;6464:3;;;;;:::i;:::-;;;;6439:171;;;;6629:3;6615:18;;;;;6180:460;;;:::o;1668:101:1:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;4274:573:7:-;4328:16;4355:15;4373:3;;;;;;;;;;;:13;;;4387:4;4373:19;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4355:37;;4402:20;4439:7;4425:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4402:45;;4457:13;4484:9;4480:192;4499:7;4495:1;:11;4480:192;;;4526:10;4539:3;;;;;;;;;;;:23;;;4563:4;4569:1;4539:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4526:45;;4608:3;4588:23;;:12;:16;4601:2;4588:16;;;;;;;;;;;;:23;4585:77;;;4645:2;4630:3;4634:7;;;;;:::i;:::-;;;4630:12;;;;;;;;:::i;:::-;;;;;;;:17;;;;;4585:77;4512:160;4508:3;;;;;:::i;:::-;;;;4480:192;;;;4682:25;4724:5;4710:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4682:48;;4744:9;4740:75;4759:5;4755:1;:9;4740:75;;;4798:3;4802:1;4798:6;;;;;;;;:::i;:::-;;;;;;;;4784:8;4793:1;4784:11;;;;;;;;:::i;:::-;;;;;;;:20;;;;;4766:3;;;;;:::i;:::-;;;;4740:75;;;;4832:8;4825:15;;;;;;4274:573;;;:::o;2270:187:1:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;4852:282:7:-;4915:17;4977:3;4951:29;;:12;:22;4964:8;4951:22;;;;;;;;;;;;:29;;4943:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;5060:15;:39;5076:12;:22;5089:8;5076:22;;;;;;;;;;;;5060:39;;;;;;;;;;;5106:11;5043:83;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5030:97;;4852:282;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:8:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:412::-;830:5;855:66;871:49;913:6;871:49;:::i;:::-;855:66;:::i;:::-;846:75;;944:6;937:5;930:21;982:4;975:5;971:16;1020:3;1011:6;1006:3;1002:16;999:25;996:112;;;1027:79;;:::i;:::-;996:112;1117:41;1151:6;1146:3;1141;1117:41;:::i;:::-;836:328;752:412;;;;;:::o;1170:139::-;1216:5;1254:6;1241:20;1232:29;;1270:33;1297:5;1270:33;:::i;:::-;1170:139;;;;:::o;1315:143::-;1372:5;1403:6;1397:13;1388:22;;1419:33;1446:5;1419:33;:::i;:::-;1315:143;;;;:::o;1481:568::-;1554:8;1564:6;1614:3;1607:4;1599:6;1595:17;1591:27;1581:122;;1622:79;;:::i;:::-;1581:122;1735:6;1722:20;1712:30;;1765:18;1757:6;1754:30;1751:117;;;1787:79;;:::i;:::-;1751:117;1901:4;1893:6;1889:17;1877:29;;1955:3;1947:4;1939:6;1935:17;1925:8;1921:32;1918:41;1915:128;;;1962:79;;:::i;:::-;1915:128;1481:568;;;;;:::o;2072:370::-;2143:5;2192:3;2185:4;2177:6;2173:17;2169:27;2159:122;;2200:79;;:::i;:::-;2159:122;2317:6;2304:20;2342:94;2432:3;2424:6;2417:4;2409:6;2405:17;2342:94;:::i;:::-;2333:103;;2149:293;2072:370;;;;:::o;2448:137::-;2502:5;2533:6;2527:13;2518:22;;2549:30;2573:5;2549:30;:::i;:::-;2448:137;;;;:::o;2591:139::-;2637:5;2675:6;2662:20;2653:29;;2691:33;2718:5;2691:33;:::i;:::-;2591:139;;;;:::o;2736:137::-;2781:5;2819:6;2806:20;2797:29;;2835:32;2861:5;2835:32;:::i;:::-;2736:137;;;;:::o;2879:167::-;2939:5;2977:6;2964:20;2955:29;;2993:47;3034:5;2993:47;:::i;:::-;2879:167;;;;:::o;3066:553::-;3124:8;3134:6;3184:3;3177:4;3169:6;3165:17;3161:27;3151:122;;3192:79;;:::i;:::-;3151:122;3305:6;3292:20;3282:30;;3335:18;3327:6;3324:30;3321:117;;;3357:79;;:::i;:::-;3321:117;3471:4;3463:6;3459:17;3447:29;;3525:3;3517:4;3509:6;3505:17;3495:8;3491:32;3488:41;3485:128;;;3532:79;;:::i;:::-;3485:128;3066:553;;;;;:::o;3639:340::-;3695:5;3744:3;3737:4;3729:6;3725:17;3721:27;3711:122;;3752:79;;:::i;:::-;3711:122;3869:6;3856:20;3894:79;3969:3;3961:6;3954:4;3946:6;3942:17;3894:79;:::i;:::-;3885:88;;3701:278;3639:340;;;;:::o;3985:139::-;4031:5;4069:6;4056:20;4047:29;;4085:33;4112:5;4085:33;:::i;:::-;3985:139;;;;:::o;4130:143::-;4187:5;4218:6;4212:13;4203:22;;4234:33;4261:5;4234:33;:::i;:::-;4130:143;;;;:::o;4279:329::-;4338:6;4387:2;4375:9;4366:7;4362:23;4358:32;4355:119;;;4393:79;;:::i;:::-;4355:119;4513:1;4538:53;4583:7;4574:6;4563:9;4559:22;4538:53;:::i;:::-;4528:63;;4484:117;4279:329;;;;:::o;4614:351::-;4684:6;4733:2;4721:9;4712:7;4708:23;4704:32;4701:119;;;4739:79;;:::i;:::-;4701:119;4859:1;4884:64;4940:7;4931:6;4920:9;4916:22;4884:64;:::i;:::-;4874:74;;4830:128;4614:351;;;;:::o;4971:474::-;5039:6;5047;5096:2;5084:9;5075:7;5071:23;5067:32;5064:119;;;5102:79;;:::i;:::-;5064:119;5222:1;5247:53;5292:7;5283:6;5272:9;5268:22;5247:53;:::i;:::-;5237:63;;5193:117;5349:2;5375:53;5420:7;5411:6;5400:9;5396:22;5375:53;:::i;:::-;5365:63;;5320:118;4971:474;;;;;:::o;5451:559::-;5537:6;5545;5594:2;5582:9;5573:7;5569:23;5565:32;5562:119;;;5600:79;;:::i;:::-;5562:119;5748:1;5737:9;5733:17;5720:31;5778:18;5770:6;5767:30;5764:117;;;5800:79;;:::i;:::-;5764:117;5913:80;5985:7;5976:6;5965:9;5961:22;5913:80;:::i;:::-;5895:98;;;;5691:312;5451:559;;;;;:::o;6016:539::-;6100:6;6149:2;6137:9;6128:7;6124:23;6120:32;6117:119;;;6155:79;;:::i;:::-;6117:119;6303:1;6292:9;6288:17;6275:31;6333:18;6325:6;6322:30;6319:117;;;6355:79;;:::i;:::-;6319:117;6460:78;6530:7;6521:6;6510:9;6506:22;6460:78;:::i;:::-;6450:88;;6246:302;6016:539;;;;:::o;6561:345::-;6628:6;6677:2;6665:9;6656:7;6652:23;6648:32;6645:119;;;6683:79;;:::i;:::-;6645:119;6803:1;6828:61;6881:7;6872:6;6861:9;6857:22;6828:61;:::i;:::-;6818:71;;6774:125;6561:345;;;;:::o;6912:329::-;6971:6;7020:2;7008:9;6999:7;6995:23;6991:32;6988:119;;;7026:79;;:::i;:::-;6988:119;7146:1;7171:53;7216:7;7207:6;7196:9;7192:22;7171:53;:::i;:::-;7161:63;;7117:117;6912:329;;;;:::o;7247:674::-;7327:6;7335;7343;7392:2;7380:9;7371:7;7367:23;7363:32;7360:119;;;7398:79;;:::i;:::-;7360:119;7518:1;7543:53;7588:7;7579:6;7568:9;7564:22;7543:53;:::i;:::-;7533:63;;7489:117;7673:2;7662:9;7658:18;7645:32;7704:18;7696:6;7693:30;7690:117;;;7726:79;;:::i;:::-;7690:117;7839:65;7896:7;7887:6;7876:9;7872:22;7839:65;:::i;:::-;7821:83;;;;7616:298;7247:674;;;;;:::o;7927:1019::-;8028:6;8036;8044;8052;8060;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8235:1;8260:53;8305:7;8296:6;8285:9;8281:22;8260:53;:::i;:::-;8250:63;;8206:117;8390:2;8379:9;8375:18;8362:32;8421:18;8413:6;8410:30;8407:117;;;8443:79;;:::i;:::-;8407:117;8556:65;8613:7;8604:6;8593:9;8589:22;8556:65;:::i;:::-;8538:83;;;;8333:298;8698:2;8687:9;8683:18;8670:32;8729:18;8721:6;8718:30;8715:117;;;8751:79;;:::i;:::-;8715:117;8864:65;8921:7;8912:6;8901:9;8897:22;8864:65;:::i;:::-;8846:83;;;;8641:298;7927:1019;;;;;;;;:::o;8952:654::-;9030:6;9038;9087:2;9075:9;9066:7;9062:23;9058:32;9055:119;;;9093:79;;:::i;:::-;9055:119;9213:1;9238:53;9283:7;9274:6;9263:9;9259:22;9238:53;:::i;:::-;9228:63;;9184:117;9368:2;9357:9;9353:18;9340:32;9399:18;9391:6;9388:30;9385:117;;;9421:79;;:::i;:::-;9385:117;9526:63;9581:7;9572:6;9561:9;9557:22;9526:63;:::i;:::-;9516:73;;9311:288;8952:654;;;;;:::o;9612:327::-;9670:6;9719:2;9707:9;9698:7;9694:23;9690:32;9687:119;;;9725:79;;:::i;:::-;9687:119;9845:1;9870:52;9914:7;9905:6;9894:9;9890:22;9870:52;:::i;:::-;9860:62;;9816:116;9612:327;;;;:::o;9945:357::-;10018:6;10067:2;10055:9;10046:7;10042:23;10038:32;10035:119;;;10073:79;;:::i;:::-;10035:119;10193:1;10218:67;10277:7;10268:6;10257:9;10253:22;10218:67;:::i;:::-;10208:77;;10164:131;9945:357;;;;:::o;10308:529::-;10379:6;10387;10436:2;10424:9;10415:7;10411:23;10407:32;10404:119;;;10442:79;;:::i;:::-;10404:119;10590:1;10579:9;10575:17;10562:31;10620:18;10612:6;10609:30;10606:117;;;10642:79;;:::i;:::-;10606:117;10755:65;10812:7;10803:6;10792:9;10788:22;10755:65;:::i;:::-;10737:83;;;;10533:297;10308:529;;;;;:::o;10843:674::-;10923:6;10931;10939;10988:2;10976:9;10967:7;10963:23;10959:32;10956:119;;;10994:79;;:::i;:::-;10956:119;11142:1;11131:9;11127:17;11114:31;11172:18;11164:6;11161:30;11158:117;;;11194:79;;:::i;:::-;11158:117;11307:65;11364:7;11355:6;11344:9;11340:22;11307:65;:::i;:::-;11289:83;;;;11085:297;11421:2;11447:53;11492:7;11483:6;11472:9;11468:22;11447:53;:::i;:::-;11437:63;;11392:118;10843:674;;;;;:::o;11523:509::-;11592:6;11641:2;11629:9;11620:7;11616:23;11612:32;11609:119;;;11647:79;;:::i;:::-;11609:119;11795:1;11784:9;11780:17;11767:31;11825:18;11817:6;11814:30;11811:117;;;11847:79;;:::i;:::-;11811:117;11952:63;12007:7;11998:6;11987:9;11983:22;11952:63;:::i;:::-;11942:73;;11738:287;11523:509;;;;:::o;12038:329::-;12097:6;12146:2;12134:9;12125:7;12121:23;12117:32;12114:119;;;12152:79;;:::i;:::-;12114:119;12272:1;12297:53;12342:7;12333:6;12322:9;12318:22;12297:53;:::i;:::-;12287:63;;12243:117;12038:329;;;;:::o;12373:351::-;12443:6;12492:2;12480:9;12471:7;12467:23;12463:32;12460:119;;;12498:79;;:::i;:::-;12460:119;12618:1;12643:64;12699:7;12690:6;12679:9;12675:22;12643:64;:::i;:::-;12633:74;;12589:128;12373:351;;;;:::o;12730:196::-;12819:10;12854:66;12916:3;12908:6;12854:66;:::i;:::-;12840:80;;12730:196;;;;:::o;12932:179::-;13001:10;13022:46;13064:3;13056:6;13022:46;:::i;:::-;13100:4;13095:3;13091:14;13077:28;;12932:179;;;;:::o;13117:118::-;13204:24;13222:5;13204:24;:::i;:::-;13199:3;13192:37;13117:118;;:::o;13269:991::-;13408:3;13437:64;13495:5;13437:64;:::i;:::-;13517:96;13606:6;13601:3;13517:96;:::i;:::-;13510:103;;13639:3;13684:4;13676:6;13672:17;13667:3;13663:27;13714:66;13774:5;13714:66;:::i;:::-;13803:7;13834:1;13819:396;13844:6;13841:1;13838:13;13819:396;;;13915:9;13909:4;13905:20;13900:3;13893:33;13966:6;13960:13;13994:84;14073:4;14058:13;13994:84;:::i;:::-;13986:92;;14101:70;14164:6;14101:70;:::i;:::-;14091:80;;14200:4;14195:3;14191:14;14184:21;;13879:336;13866:1;13863;13859:9;13854:14;;13819:396;;;13823:14;14231:4;14224:11;;14251:3;14244:10;;13413:847;;;;;13269:991;;;;:::o;14296:732::-;14415:3;14444:54;14492:5;14444:54;:::i;:::-;14514:86;14593:6;14588:3;14514:86;:::i;:::-;14507:93;;14624:56;14674:5;14624:56;:::i;:::-;14703:7;14734:1;14719:284;14744:6;14741:1;14738:13;14719:284;;;14820:6;14814:13;14847:63;14906:3;14891:13;14847:63;:::i;:::-;14840:70;;14933:60;14986:6;14933:60;:::i;:::-;14923:70;;14779:224;14766:1;14763;14759:9;14754:14;;14719:284;;;14723:14;15019:3;15012:10;;14420:608;;;14296:732;;;;:::o;15034:109::-;15115:21;15130:5;15115:21;:::i;:::-;15110:3;15103:34;15034:109;;:::o;15149:118::-;15236:24;15254:5;15236:24;:::i;:::-;15231:3;15224:37;15149:118;;:::o;15273:157::-;15378:45;15398:24;15416:5;15398:24;:::i;:::-;15378:45;:::i;:::-;15373:3;15366:58;15273:157;;:::o;15436:181::-;15548:62;15604:5;15548:62;:::i;:::-;15543:3;15536:75;15436:181;;:::o;15623:145::-;15717:44;15755:5;15717:44;:::i;:::-;15712:3;15705:57;15623:145;;:::o;15798:304::-;15896:3;15917:71;15981:6;15976:3;15917:71;:::i;:::-;15910:78;;15998:43;16034:6;16029:3;16022:5;15998:43;:::i;:::-;16066:29;16088:6;16066:29;:::i;:::-;16061:3;16057:39;16050:46;;15798:304;;;;;:::o;16132:317::-;16248:3;16269:89;16351:6;16346:3;16269:89;:::i;:::-;16262:96;;16368:43;16404:6;16399:3;16392:5;16368:43;:::i;:::-;16436:6;16431:3;16427:16;16420:23;;16132:317;;;;;:::o;16455:344::-;16533:3;16561:39;16594:5;16561:39;:::i;:::-;16616:61;16670:6;16665:3;16616:61;:::i;:::-;16609:68;;16686:52;16731:6;16726:3;16719:4;16712:5;16708:16;16686:52;:::i;:::-;16763:29;16785:6;16763:29;:::i;:::-;16758:3;16754:39;16747:46;;16537:262;16455:344;;;;:::o;16805:364::-;16893:3;16921:39;16954:5;16921:39;:::i;:::-;16976:71;17040:6;17035:3;16976:71;:::i;:::-;16969:78;;17056:52;17101:6;17096:3;17089:4;17082:5;17078:16;17056:52;:::i;:::-;17133:29;17155:6;17133:29;:::i;:::-;17128:3;17124:39;17117:46;;16897:272;16805:364;;;;:::o;17175:377::-;17281:3;17309:39;17342:5;17309:39;:::i;:::-;17364:89;17446:6;17441:3;17364:89;:::i;:::-;17357:96;;17462:52;17507:6;17502:3;17495:4;17488:5;17484:16;17462:52;:::i;:::-;17539:6;17534:3;17530:16;17523:23;;17285:267;17175:377;;;;:::o;17582:845::-;17685:3;17722:5;17716:12;17751:36;17777:9;17751:36;:::i;:::-;17803:89;17885:6;17880:3;17803:89;:::i;:::-;17796:96;;17923:1;17912:9;17908:17;17939:1;17934:137;;;;18085:1;18080:341;;;;17901:520;;17934:137;18018:4;18014:9;18003;17999:25;17994:3;17987:38;18054:6;18049:3;18045:16;18038:23;;17934:137;;18080:341;18147:38;18179:5;18147:38;:::i;:::-;18207:1;18221:154;18235:6;18232:1;18229:13;18221:154;;;18309:7;18303:14;18299:1;18294:3;18290:11;18283:35;18359:1;18350:7;18346:15;18335:26;;18257:4;18254:1;18250:12;18245:17;;18221:154;;;18404:6;18399:3;18395:16;18388:23;;18087:334;;17901:520;;17689:738;;17582:845;;;;:::o;18433:366::-;18575:3;18596:67;18660:2;18655:3;18596:67;:::i;:::-;18589:74;;18672:93;18761:3;18672:93;:::i;:::-;18790:2;18785:3;18781:12;18774:19;;18433:366;;;:::o;18805:::-;18947:3;18968:67;19032:2;19027:3;18968:67;:::i;:::-;18961:74;;19044:93;19133:3;19044:93;:::i;:::-;19162:2;19157:3;19153:12;19146:19;;18805:366;;;:::o;19177:::-;19319:3;19340:67;19404:2;19399:3;19340:67;:::i;:::-;19333:74;;19416:93;19505:3;19416:93;:::i;:::-;19534:2;19529:3;19525:12;19518:19;;19177:366;;;:::o;19549:::-;19691:3;19712:67;19776:2;19771:3;19712:67;:::i;:::-;19705:74;;19788:93;19877:3;19788:93;:::i;:::-;19906:2;19901:3;19897:12;19890:19;;19549:366;;;:::o;19921:400::-;20081:3;20102:84;20184:1;20179:3;20102:84;:::i;:::-;20095:91;;20195:93;20284:3;20195:93;:::i;:::-;20313:1;20308:3;20304:11;20297:18;;19921:400;;;:::o;20327:366::-;20469:3;20490:67;20554:2;20549:3;20490:67;:::i;:::-;20483:74;;20566:93;20655:3;20566:93;:::i;:::-;20684:2;20679:3;20675:12;20668:19;;20327:366;;;:::o;20699:400::-;20859:3;20880:84;20962:1;20957:3;20880:84;:::i;:::-;20873:91;;20973:93;21062:3;20973:93;:::i;:::-;21091:1;21086:3;21082:11;21075:18;;20699:400;;;:::o;21105:::-;21265:3;21286:84;21368:1;21363:3;21286:84;:::i;:::-;21279:91;;21379:93;21468:3;21379:93;:::i;:::-;21497:1;21492:3;21488:11;21481:18;;21105:400;;;:::o;21511:366::-;21653:3;21674:67;21738:2;21733:3;21674:67;:::i;:::-;21667:74;;21750:93;21839:3;21750:93;:::i;:::-;21868:2;21863:3;21859:12;21852:19;;21511:366;;;:::o;21883:402::-;22043:3;22064:85;22146:2;22141:3;22064:85;:::i;:::-;22057:92;;22158:93;22247:3;22158:93;:::i;:::-;22276:2;22271:3;22267:12;22260:19;;21883:402;;;:::o;22291:400::-;22451:3;22472:84;22554:1;22549:3;22472:84;:::i;:::-;22465:91;;22565:93;22654:3;22565:93;:::i;:::-;22683:1;22678:3;22674:11;22667:18;;22291:400;;;:::o;22697:366::-;22839:3;22860:67;22924:2;22919:3;22860:67;:::i;:::-;22853:74;;22936:93;23025:3;22936:93;:::i;:::-;23054:2;23049:3;23045:12;23038:19;;22697:366;;;:::o;23069:::-;23211:3;23232:67;23296:2;23291:3;23232:67;:::i;:::-;23225:74;;23308:93;23397:3;23308:93;:::i;:::-;23426:2;23421:3;23417:12;23410:19;;23069:366;;;:::o;23441:::-;23583:3;23604:67;23668:2;23663:3;23604:67;:::i;:::-;23597:74;;23680:93;23769:3;23680:93;:::i;:::-;23798:2;23793:3;23789:12;23782:19;;23441:366;;;:::o;23813:::-;23955:3;23976:67;24040:2;24035:3;23976:67;:::i;:::-;23969:74;;24052:93;24141:3;24052:93;:::i;:::-;24170:2;24165:3;24161:12;24154:19;;23813:366;;;:::o;24185:::-;24327:3;24348:67;24412:2;24407:3;24348:67;:::i;:::-;24341:74;;24424:93;24513:3;24424:93;:::i;:::-;24542:2;24537:3;24533:12;24526:19;;24185:366;;;:::o;24557:::-;24699:3;24720:67;24784:2;24779:3;24720:67;:::i;:::-;24713:74;;24796:93;24885:3;24796:93;:::i;:::-;24914:2;24909:3;24905:12;24898:19;;24557:366;;;:::o;24929:400::-;25089:3;25110:84;25192:1;25187:3;25110:84;:::i;:::-;25103:91;;25203:93;25292:3;25203:93;:::i;:::-;25321:1;25316:3;25312:11;25305:18;;24929:400;;;:::o;25335:108::-;25412:24;25430:5;25412:24;:::i;:::-;25407:3;25400:37;25335:108;;:::o;25449:118::-;25536:24;25554:5;25536:24;:::i;:::-;25531:3;25524:37;25449:118;;:::o;25573:397::-;25713:3;25728:75;25799:3;25790:6;25728:75;:::i;:::-;25828:2;25823:3;25819:12;25812:19;;25841:75;25912:3;25903:6;25841:75;:::i;:::-;25941:2;25936:3;25932:12;25925:19;;25961:3;25954:10;;25573:397;;;;;:::o;25976:295::-;26118:3;26140:105;26241:3;26232:6;26224;26140:105;:::i;:::-;26133:112;;26262:3;26255:10;;25976:295;;;;;:::o;26277:269::-;26406:3;26428:92;26516:3;26507:6;26428:92;:::i;:::-;26421:99;;26537:3;26530:10;;26277:269;;;;:::o;26552:695::-;26830:3;26852:92;26940:3;26931:6;26852:92;:::i;:::-;26845:99;;26961:95;27052:3;27043:6;26961:95;:::i;:::-;26954:102;;27073:148;27217:3;27073:148;:::i;:::-;27066:155;;27238:3;27231:10;;26552:695;;;;;:::o;27253:955::-;27629:3;27651:92;27739:3;27730:6;27651:92;:::i;:::-;27644:99;;27760:148;27904:3;27760:148;:::i;:::-;27753:155;;27925:92;28013:3;28004:6;27925:92;:::i;:::-;27918:99;;28034:148;28178:3;28034:148;:::i;:::-;28027:155;;28199:3;28192:10;;27253:955;;;;;:::o;28214:381::-;28399:3;28421:148;28565:3;28421:148;:::i;:::-;28414:155;;28586:3;28579:10;;28214:381;;;:::o;28601:967::-;28983:3;29005:148;29149:3;29005:148;:::i;:::-;28998:155;;29170:95;29261:3;29252:6;29170:95;:::i;:::-;29163:102;;29282:148;29426:3;29282:148;:::i;:::-;29275:155;;29447:95;29538:3;29529:6;29447:95;:::i;:::-;29440:102;;29559:3;29552:10;;28601:967;;;;;:::o;29574:222::-;29667:4;29705:2;29694:9;29690:18;29682:26;;29718:71;29786:1;29775:9;29771:17;29762:6;29718:71;:::i;:::-;29574:222;;;;:::o;29802:332::-;29923:4;29961:2;29950:9;29946:18;29938:26;;29974:71;30042:1;30031:9;30027:17;30018:6;29974:71;:::i;:::-;30055:72;30123:2;30112:9;30108:18;30099:6;30055:72;:::i;:::-;29802:332;;;;;:::o;30140:413::-;30303:4;30341:2;30330:9;30326:18;30318:26;;30390:9;30384:4;30380:20;30376:1;30365:9;30361:17;30354:47;30418:128;30541:4;30532:6;30418:128;:::i;:::-;30410:136;;30140:413;;;;:::o;30559:373::-;30702:4;30740:2;30729:9;30725:18;30717:26;;30789:9;30783:4;30779:20;30775:1;30764:9;30760:17;30753:47;30817:108;30920:4;30911:6;30817:108;:::i;:::-;30809:116;;30559:373;;;;:::o;30938:210::-;31025:4;31063:2;31052:9;31048:18;31040:26;;31076:65;31138:1;31127:9;31123:17;31114:6;31076:65;:::i;:::-;30938:210;;;;:::o;31154:222::-;31247:4;31285:2;31274:9;31270:18;31262:26;;31298:71;31366:1;31355:9;31351:17;31342:6;31298:71;:::i;:::-;31154:222;;;;:::o;31382:678::-;31594:4;31632:3;31621:9;31617:19;31609:27;;31646:71;31714:1;31703:9;31699:17;31690:6;31646:71;:::i;:::-;31727:72;31795:2;31784:9;31780:18;31771:6;31727:72;:::i;:::-;31809;31877:2;31866:9;31862:18;31853:6;31809:72;:::i;:::-;31891;31959:2;31948:9;31944:18;31935:6;31891:72;:::i;:::-;31973:80;32048:3;32037:9;32033:19;32024:6;31973:80;:::i;:::-;31382:678;;;;;;;;:::o;32066:272::-;32184:4;32222:2;32211:9;32207:18;32199:26;;32235:96;32328:1;32317:9;32313:17;32304:6;32235:96;:::i;:::-;32066:272;;;;:::o;32344:333::-;32467:4;32505:2;32494:9;32490:18;32482:26;;32554:9;32548:4;32544:20;32540:1;32529:9;32525:17;32518:47;32582:88;32665:4;32656:6;32648;32582:88;:::i;:::-;32574:96;;32344:333;;;;;:::o;32683:313::-;32796:4;32834:2;32823:9;32819:18;32811:26;;32883:9;32877:4;32873:20;32869:1;32858:9;32854:17;32847:47;32911:78;32984:4;32975:6;32911:78;:::i;:::-;32903:86;;32683:313;;;;:::o;33002:419::-;33168:4;33206:2;33195:9;33191:18;33183:26;;33255:9;33249:4;33245:20;33241:1;33230:9;33226:17;33219:47;33283:131;33409:4;33283:131;:::i;:::-;33275:139;;33002:419;;;:::o;33427:::-;33593:4;33631:2;33620:9;33616:18;33608:26;;33680:9;33674:4;33670:20;33666:1;33655:9;33651:17;33644:47;33708:131;33834:4;33708:131;:::i;:::-;33700:139;;33427:419;;;:::o;33852:::-;34018:4;34056:2;34045:9;34041:18;34033:26;;34105:9;34099:4;34095:20;34091:1;34080:9;34076:17;34069:47;34133:131;34259:4;34133:131;:::i;:::-;34125:139;;33852:419;;;:::o;34277:::-;34443:4;34481:2;34470:9;34466:18;34458:26;;34530:9;34524:4;34520:20;34516:1;34505:9;34501:17;34494:47;34558:131;34684:4;34558:131;:::i;:::-;34550:139;;34277:419;;;:::o;34702:::-;34868:4;34906:2;34895:9;34891:18;34883:26;;34955:9;34949:4;34945:20;34941:1;34930:9;34926:17;34919:47;34983:131;35109:4;34983:131;:::i;:::-;34975:139;;34702:419;;;:::o;35127:::-;35293:4;35331:2;35320:9;35316:18;35308:26;;35380:9;35374:4;35370:20;35366:1;35355:9;35351:17;35344:47;35408:131;35534:4;35408:131;:::i;:::-;35400:139;;35127:419;;;:::o;35552:::-;35718:4;35756:2;35745:9;35741:18;35733:26;;35805:9;35799:4;35795:20;35791:1;35780:9;35776:17;35769:47;35833:131;35959:4;35833:131;:::i;:::-;35825:139;;35552:419;;;:::o;35977:::-;36143:4;36181:2;36170:9;36166:18;36158:26;;36230:9;36224:4;36220:20;36216:1;36205:9;36201:17;36194:47;36258:131;36384:4;36258:131;:::i;:::-;36250:139;;35977:419;;;:::o;36402:::-;36568:4;36606:2;36595:9;36591:18;36583:26;;36655:9;36649:4;36645:20;36641:1;36630:9;36626:17;36619:47;36683:131;36809:4;36683:131;:::i;:::-;36675:139;;36402:419;;;:::o;36827:::-;36993:4;37031:2;37020:9;37016:18;37008:26;;37080:9;37074:4;37070:20;37066:1;37055:9;37051:17;37044:47;37108:131;37234:4;37108:131;:::i;:::-;37100:139;;36827:419;;;:::o;37252:::-;37418:4;37456:2;37445:9;37441:18;37433:26;;37505:9;37499:4;37495:20;37491:1;37480:9;37476:17;37469:47;37533:131;37659:4;37533:131;:::i;:::-;37525:139;;37252:419;;;:::o;37677:::-;37843:4;37881:2;37870:9;37866:18;37858:26;;37930:9;37924:4;37920:20;37916:1;37905:9;37901:17;37894:47;37958:131;38084:4;37958:131;:::i;:::-;37950:139;;37677:419;;;:::o;38102:222::-;38195:4;38233:2;38222:9;38218:18;38210:26;;38246:71;38314:1;38303:9;38299:17;38290:6;38246:71;:::i;:::-;38102:222;;;;:::o;38330:129::-;38364:6;38391:20;;:::i;:::-;38381:30;;38420:33;38448:4;38440:6;38420:33;:::i;:::-;38330:129;;;:::o;38465:75::-;38498:6;38531:2;38525:9;38515:19;;38465:75;:::o;38546:311::-;38623:4;38713:18;38705:6;38702:30;38699:56;;;38735:18;;:::i;:::-;38699:56;38785:4;38777:6;38773:17;38765:25;;38845:4;38839;38835:15;38827:23;;38546:311;;;:::o;38863:308::-;38925:4;39015:18;39007:6;39004:30;39001:56;;;39037:18;;:::i;:::-;39001:56;39075:29;39097:6;39075:29;:::i;:::-;39067:37;;39159:4;39153;39149:15;39141:23;;38863:308;;;:::o;39177:142::-;39254:4;39277:3;39269:11;;39307:4;39302:3;39298:14;39290:22;;39177:142;;;:::o;39325:132::-;39392:4;39415:3;39407:11;;39445:4;39440:3;39436:14;39428:22;;39325:132;;;:::o;39463:141::-;39512:4;39535:3;39527:11;;39558:3;39555:1;39548:14;39592:4;39589:1;39579:18;39571:26;;39463:141;;;:::o;39610:124::-;39687:6;39721:5;39715:12;39705:22;;39610:124;;;:::o;39740:114::-;39807:6;39841:5;39835:12;39825:22;;39740:114;;;:::o;39860:99::-;39912:6;39946:5;39940:12;39930:22;;39860:99;;;:::o;39965:123::-;40045:4;40077;40072:3;40068:14;40060:22;;39965:123;;;:::o;40094:113::-;40164:4;40196;40191:3;40187:14;40179:22;;40094:113;;;:::o;40213:194::-;40322:11;40356:6;40351:3;40344:19;40396:4;40391:3;40387:14;40372:29;;40213:194;;;;:::o;40413:184::-;40512:11;40546:6;40541:3;40534:19;40586:4;40581:3;40577:14;40562:29;;40413:184;;;;:::o;40603:159::-;40677:11;40711:6;40706:3;40699:19;40751:4;40746:3;40742:14;40727:29;;40603:159;;;;:::o;40768:169::-;40852:11;40886:6;40881:3;40874:19;40926:4;40921:3;40917:14;40902:29;;40768:169;;;;:::o;40943:148::-;41045:11;41082:3;41067:18;;40943:148;;;;:::o;41097:305::-;41137:3;41156:20;41174:1;41156:20;:::i;:::-;41151:25;;41190:20;41208:1;41190:20;:::i;:::-;41185:25;;41344:1;41276:66;41272:74;41269:1;41266:81;41263:107;;;41350:18;;:::i;:::-;41263:107;41394:1;41391;41387:9;41380:16;;41097:305;;;;:::o;41408:185::-;41448:1;41465:20;41483:1;41465:20;:::i;:::-;41460:25;;41499:20;41517:1;41499:20;:::i;:::-;41494:25;;41538:1;41528:35;;41543:18;;:::i;:::-;41528:35;41585:1;41582;41578:9;41573:14;;41408:185;;;;:::o;41599:348::-;41639:7;41662:20;41680:1;41662:20;:::i;:::-;41657:25;;41696:20;41714:1;41696:20;:::i;:::-;41691:25;;41884:1;41816:66;41812:74;41809:1;41806:81;41801:1;41794:9;41787:17;41783:105;41780:131;;;41891:18;;:::i;:::-;41780:131;41939:1;41936;41932:9;41921:20;;41599:348;;;;:::o;41953:191::-;41993:4;42013:20;42031:1;42013:20;:::i;:::-;42008:25;;42047:20;42065:1;42047:20;:::i;:::-;42042:25;;42086:1;42083;42080:8;42077:34;;;42091:18;;:::i;:::-;42077:34;42136:1;42133;42129:9;42121:17;;41953:191;;;;:::o;42150:96::-;42187:7;42216:24;42234:5;42216:24;:::i;:::-;42205:35;;42150:96;;;:::o;42252:90::-;42286:7;42329:5;42322:13;42315:21;42304:32;;42252:90;;;:::o;42348:77::-;42385:7;42414:5;42403:16;;42348:77;;;:::o;42431:149::-;42467:7;42507:66;42500:5;42496:78;42485:89;;42431:149;;;:::o;42586:110::-;42637:7;42666:24;42684:5;42666:24;:::i;:::-;42655:35;;42586:110;;;:::o;42702:126::-;42739:7;42779:42;42772:5;42768:54;42757:65;;42702:126;;;:::o;42834:77::-;42871:7;42900:5;42889:16;;42834:77;;;:::o;42917:101::-;42953:7;42993:18;42986:5;42982:30;42971:41;;42917:101;;;:::o;43024:151::-;43099:9;43132:37;43163:5;43132:37;:::i;:::-;43119:50;;43024:151;;;:::o;43181:119::-;43238:9;43271:23;43288:5;43271:23;:::i;:::-;43258:36;;43181:119;;;:::o;43306:126::-;43356:9;43389:37;43420:5;43389:37;:::i;:::-;43376:50;;43306:126;;;:::o;43438:113::-;43488:9;43521:24;43539:5;43521:24;:::i;:::-;43508:37;;43438:113;;;:::o;43557:154::-;43641:6;43636:3;43631;43618:30;43703:1;43694:6;43689:3;43685:16;43678:27;43557:154;;;:::o;43717:307::-;43785:1;43795:113;43809:6;43806:1;43803:13;43795:113;;;43894:1;43889:3;43885:11;43879:18;43875:1;43870:3;43866:11;43859:39;43831:2;43828:1;43824:10;43819:15;;43795:113;;;43926:6;43923:1;43920:13;43917:101;;;44006:1;43997:6;43992:3;43988:16;43981:27;43917:101;43766:258;43717:307;;;:::o;44030:320::-;44074:6;44111:1;44105:4;44101:12;44091:22;;44158:1;44152:4;44148:12;44179:18;44169:81;;44235:4;44227:6;44223:17;44213:27;;44169:81;44297:2;44289:6;44286:14;44266:18;44263:38;44260:84;;;44316:18;;:::i;:::-;44260:84;44081:269;44030:320;;;:::o;44356:281::-;44439:27;44461:4;44439:27;:::i;:::-;44431:6;44427:40;44569:6;44557:10;44554:22;44533:18;44521:10;44518:34;44515:62;44512:88;;;44580:18;;:::i;:::-;44512:88;44620:10;44616:2;44609:22;44399:238;44356:281;;:::o;44643:233::-;44682:3;44705:24;44723:5;44705:24;:::i;:::-;44696:33;;44751:66;44744:5;44741:77;44738:103;;;44821:18;;:::i;:::-;44738:103;44868:1;44861:5;44857:13;44850:20;;44643:233;;;:::o;44882:79::-;44921:7;44950:5;44939:16;;44882:79;;;:::o;44967:176::-;44999:1;45016:20;45034:1;45016:20;:::i;:::-;45011:25;;45050:20;45068:1;45050:20;:::i;:::-;45045:25;;45089:1;45079:35;;45094:18;;:::i;:::-;45079:35;45135:1;45132;45128:9;45123:14;;44967:176;;;;:::o;45149:180::-;45197:77;45194:1;45187:88;45294:4;45291:1;45284:15;45318:4;45315:1;45308:15;45335:180;45383:77;45380:1;45373:88;45480:4;45477:1;45470:15;45504:4;45501:1;45494:15;45521:180;45569:77;45566:1;45559:88;45666:4;45663:1;45656:15;45690:4;45687:1;45680:15;45707:180;45755:77;45752:1;45745:88;45852:4;45849:1;45842:15;45876:4;45873:1;45866:15;45893:180;45941:77;45938:1;45931:88;46038:4;46035:1;46028:15;46062:4;46059:1;46052:15;46079:117;46188:1;46185;46178:12;46202:117;46311:1;46308;46301:12;46325:117;46434:1;46431;46424:12;46448:117;46557:1;46554;46547:12;46571:117;46680:1;46677;46670:12;46694:117;46803:1;46800;46793:12;46817:102;46858:6;46909:2;46905:7;46900:2;46893:5;46889:14;46885:28;46875:38;;46817:102;;;:::o;46925:165::-;47065:17;47061:1;47053:6;47049:14;47042:41;46925:165;:::o;47096:225::-;47236:34;47232:1;47224:6;47220:14;47213:58;47305:8;47300:2;47292:6;47288:15;47281:33;47096:225;:::o;47327:175::-;47467:27;47463:1;47455:6;47451:14;47444:51;47327:175;:::o;47508:225::-;47648:34;47644:1;47636:6;47632:14;47625:58;47717:8;47712:2;47704:6;47700:15;47693:33;47508:225;:::o;47739:154::-;47879:6;47875:1;47867:6;47863:14;47856:30;47739:154;:::o;47899:164::-;48039:16;48035:1;48027:6;48023:14;48016:40;47899:164;:::o;48069:154::-;48209:6;48205:1;48197:6;48193:14;48186:30;48069:154;:::o;48229:153::-;48369:5;48365:1;48357:6;48353:14;48346:29;48229:153;:::o;48388:178::-;48528:30;48524:1;48516:6;48512:14;48505:54;48388:178;:::o;48572:166::-;48712:18;48708:1;48700:6;48696:14;48689:42;48572:166;:::o;48744:151::-;48884:3;48880:1;48872:6;48868:14;48861:27;48744:151;:::o;48901:167::-;49041:19;49037:1;49029:6;49025:14;49018:43;48901:167;:::o;49074:222::-;49214:34;49210:1;49202:6;49198:14;49191:58;49283:5;49278:2;49270:6;49266:15;49259:30;49074:222;:::o;49302:175::-;49442:27;49438:1;49430:6;49426:14;49419:51;49302:175;:::o;49483:182::-;49623:34;49619:1;49611:6;49607:14;49600:58;49483:182;:::o;49671:225::-;49811:34;49807:1;49799:6;49795:14;49788:58;49880:8;49875:2;49867:6;49863:15;49856:33;49671:225;:::o;49902:176::-;50042:28;50038:1;50030:6;50026:14;50019:52;49902:176;:::o;50084:151::-;50224:3;50220:1;50212:6;50208:14;50201:27;50084:151;:::o;50241:122::-;50314:24;50332:5;50314:24;:::i;:::-;50307:5;50304:35;50294:63;;50353:1;50350;50343:12;50294:63;50241:122;:::o;50369:116::-;50439:21;50454:5;50439:21;:::i;:::-;50432:5;50429:32;50419:60;;50475:1;50472;50465:12;50419:60;50369:116;:::o;50491:122::-;50564:24;50582:5;50564:24;:::i;:::-;50557:5;50554:35;50544:63;;50603:1;50600;50593:12;50544:63;50491:122;:::o;50619:120::-;50691:23;50708:5;50691:23;:::i;:::-;50684:5;50681:34;50671:62;;50729:1;50726;50719:12;50671:62;50619:120;:::o;50745:150::-;50832:38;50864:5;50832:38;:::i;:::-;50825:5;50822:49;50812:77;;50885:1;50882;50875:12;50812:77;50745:150;:::o;50901:122::-;50974:24;50992:5;50974:24;:::i;:::-;50967:5;50964:35;50954:63;;51013:1;51010;51003:12;50954:63;50901:122;:::o

Swarm Source

ipfs://4eea2760da7fb3dd241e4d357ebb61fdf71f88678c0b8db3b424d30d01d2b9c9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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