ETH Price: $2,487.93 (+2.97%)

Token

RendarToken (RDR)
 

Overview

Max Total Supply

235 RDR

Holders

110

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
stina.eth
Balance
1 RDR
0x92baffdd6cfb11a4e57a58ffec4833b4d1abd25d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
RendarToken

Compiler Version
v0.5.0+commit.1d4f565a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-08-02
*/

// File: openzeppelin-solidity/contracts/introspection/IERC165.sol

pragma solidity ^0.5.0;

/**
 * @title IERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {
    /**
     * @notice Query if a contract implements an interface
     * @param interfaceId The interface identifier, as specified in ERC-165
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol

pragma solidity ^0.5.0;


/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

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

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

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

    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;

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

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol

pragma solidity ^0.5.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract IERC721Receiver {
    /**
     * @notice Handle the receipt of an NFT
     * @dev The ERC721 smart contract calls this function on the recipient
     * after a `safeTransfer`. This function MUST return the function selector,
     * otherwise the caller will revert the transaction. The selector to be
     * returned can be obtained as `this.onERC721Received.selector`. This
     * function MAY throw to revert and reject the transfer.
     * Note: the ERC721 contract address is always the message sender.
     * @param operator The address which called `safeTransferFrom` function
     * @param from The address which previously owned the token
     * @param tokenId The NFT identifier which is being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {
    /**
    * @dev Multiplies two unsigned integers, reverts on overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

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

        return c;
    }

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

        return c;
    }

    /**
    * @dev Adds two unsigned integers, reverts on overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
    * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
    * reverts when dividing by zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

// File: openzeppelin-solidity/contracts/utils/Address.sol

pragma solidity ^0.5.0;

/**
 * Utility library of inline functions on addresses
 */
library Address {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

// File: openzeppelin-solidity/contracts/introspection/ERC165.sol

pragma solidity ^0.5.0;


/**
 * @title ERC165
 * @author Matt Condon (@shrugs)
 * @dev Implements ERC165 using a lookup table.
 */
contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    /**
     * 0x01ffc9a7 ===
     *     bytes4(keccak256('supportsInterface(bytes4)'))
     */

    /**
     * @dev a mapping of interface id to whether or not it's supported
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    /**
     * @dev A contract implementing SupportsInterfaceWithLookup
     * implement ERC165 itself
     */
    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev implement supportsInterface(bytes4) using a lookup table
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev internal method for registering an interface
     */
    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff);
        _supportedInterfaces[interfaceId] = true;
    }
}

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol

pragma solidity ^0.5.0;






/**
 * @title ERC721 Non-Fungible Token Standard basic implementation
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721 is ERC165, IERC721 {
    using SafeMath for uint256;
    using Address for address;

    // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

    // Mapping from token ID to owner
    mapping (uint256 => address) private _tokenOwner;

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

    // Mapping from owner to number of owned token
    mapping (address => uint256) private _ownedTokensCount;

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

    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
    /*
     * 0x80ac58cd ===
     *     bytes4(keccak256('balanceOf(address)')) ^
     *     bytes4(keccak256('ownerOf(uint256)')) ^
     *     bytes4(keccak256('approve(address,uint256)')) ^
     *     bytes4(keccak256('getApproved(uint256)')) ^
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) ^
     *     bytes4(keccak256('isApprovedForAll(address,address)')) ^
     *     bytes4(keccak256('transferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
     */

    constructor () public {
        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721);
    }

    /**
     * @dev Gets the balance of the specified address
     * @param owner address to query the balance of
     * @return uint256 representing the amount owned by the passed address
     */
    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0));
        return _ownedTokensCount[owner];
    }

    /**
     * @dev Gets the owner of the specified token ID
     * @param tokenId uint256 ID of the token to query the owner of
     * @return owner address currently marked as the owner of the given token ID
     */
    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0));
        return owner;
    }

    /**
     * @dev Approves another address to transfer the given token ID
     * The zero address indicates there is no approved address.
     * There can only be one approved address per token at a given time.
     * Can only be called by the token owner or an approved operator.
     * @param to address to be approved for the given token ID
     * @param tokenId uint256 ID of the token to be approved
     */
    function approve(address to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

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

    /**
     * @dev Gets the approved address for a token ID, or zero if no address set
     * Reverts if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query the approval of
     * @return address currently approved for the given token ID
     */
    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId));
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev Sets or unsets the approval of a given operator
     * An operator is allowed to transfer all tokens of the sender on their behalf
     * @param to operator address to set the approval
     * @param approved representing the status of the approval to be set
     */
    function setApprovalForAll(address to, bool approved) public {
        require(to != msg.sender);
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    /**
     * @dev Tells whether an operator is approved by a given owner
     * @param owner owner address which you want to query the approval of
     * @param operator operator address which you want to query the approval of
     * @return bool whether the given operator is approved by the given owner
     */
    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev Transfers the ownership of a given token ID to another address
     * Usage of this method is discouraged, use `safeTransferFrom` whenever possible
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function transferFrom(address from, address to, uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId));

        _transferFrom(from, to, tokenId);
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     *
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes data to send along with a safe transfer check
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

    /**
     * @dev Returns whether the specified token exists
     * @param tokenId uint256 ID of the token to query the existence of
     * @return whether the token exists
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    /**
     * @dev Returns whether the given spender can transfer a given token ID
     * @param spender address of the spender to query
     * @param tokenId uint256 ID of the token to be transferred
     * @return bool whether the msg.sender is approved for the given token ID,
     *    is an operator of the owner, or is the owner of the token
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Internal function to mint a new token
     * Reverts if the given token ID already exists
     * @param to The address that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     */
    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0));
        require(!_exists(tokenId));

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);

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

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * Deprecated, use _burn(uint256) instead.
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(address owner, uint256 tokenId) internal {
        require(ownerOf(tokenId) == owner);

        _clearApproval(tokenId);

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

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

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(uint256 tokenId) internal {
        _burn(ownerOf(tokenId), tokenId);
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from);
        require(to != address(0));

        _clearApproval(tokenId);

        _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);

        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Internal function to invoke `onERC721Received` on a target address
     * The call is not executed if the target address is not a contract
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        internal returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }

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

    /**
     * @dev Private function to clear current approval of a given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }
}

// File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol

pragma solidity ^0.5.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract IERC721Enumerable is IERC721 {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);

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

// File: openzeppelin-solidity/contracts/token/ERC721/ERC721Enumerable.sol

pragma solidity ^0.5.0;




/**
 * @title ERC-721 Non-Fungible Token with optional enumeration extension logic
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => uint256[]) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;
    /**
     * 0x780e9d63 ===
     *     bytes4(keccak256('totalSupply()')) ^
     *     bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^
     *     bytes4(keccak256('tokenByIndex(uint256)'))
     */

    /**
     * @dev Constructor function
     */
    constructor () public {
        // register the supported interface to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    /**
     * @dev Gets the token ID at a given index of the tokens list of the requested owner
     * @param owner address owning the tokens list to be accessed
     * @param index uint256 representing the index to be accessed of the requested tokens list
     * @return uint256 token ID at the given index of the tokens list owned by the requested address
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner));
        return _ownedTokens[owner][index];
    }

    /**
     * @dev Gets the total amount of tokens stored by the contract
     * @return uint256 representing the total amount of tokens
     */
    function totalSupply() public view returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev Gets the token ID at a given index of all the tokens in this contract
     * Reverts if the index is greater or equal to the total number of tokens
     * @param index uint256 representing the index to be accessed of the tokens list
     * @return uint256 token ID at the given index of the tokens list
     */
    function tokenByIndex(uint256 index) public view returns (uint256) {
        require(index < totalSupply());
        return _allTokens[index];
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
    */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        super._transferFrom(from, to, tokenId);

        _removeTokenFromOwnerEnumeration(from, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);
    }

    /**
     * @dev Internal function to mint a new token
     * Reverts if the given token ID already exists
     * @param to address the beneficiary that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     */
    function _mint(address to, uint256 tokenId) internal {
        super._mint(to, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);

        _addTokenToAllTokensEnumeration(tokenId);
    }

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * Deprecated, use _burn(uint256) instead
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(address owner, uint256 tokenId) internal {
        super._burn(owner, tokenId);

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

        _removeTokenFromAllTokensEnumeration(tokenId);
    }

    /**
     * @dev Gets the list of token IDs of the requested owner
     * @param owner address owning the tokens
     * @return uint256[] List of token IDs owned by the requested address
     */
    function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
        return _ownedTokens[owner];
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length;
        _ownedTokens[to].push(tokenId);
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the _ownedTokensIndex mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

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

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

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

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

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

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

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

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

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

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

// File: openzeppelin-solidity/contracts/access/Roles.sol

pragma solidity ^0.5.0;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}

// File: openzeppelin-solidity/contracts/access/roles/WhitelistAdminRole.sol

pragma solidity ^0.5.0;


/**
 * @title WhitelistAdminRole
 * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts.
 */
contract WhitelistAdminRole {
    using Roles for Roles.Role;

    event WhitelistAdminAdded(address indexed account);
    event WhitelistAdminRemoved(address indexed account);

    Roles.Role private _whitelistAdmins;

    constructor () internal {
        _addWhitelistAdmin(msg.sender);
    }

    modifier onlyWhitelistAdmin() {
        require(isWhitelistAdmin(msg.sender));
        _;
    }

    function isWhitelistAdmin(address account) public view returns (bool) {
        return _whitelistAdmins.has(account);
    }

    function addWhitelistAdmin(address account) public onlyWhitelistAdmin {
        _addWhitelistAdmin(account);
    }

    function renounceWhitelistAdmin() public {
        _removeWhitelistAdmin(msg.sender);
    }

    function _addWhitelistAdmin(address account) internal {
        _whitelistAdmins.add(account);
        emit WhitelistAdminAdded(account);
    }

    function _removeWhitelistAdmin(address account) internal {
        _whitelistAdmins.remove(account);
        emit WhitelistAdminRemoved(account);
    }
}

// File: openzeppelin-solidity/contracts/access/roles/WhitelistedRole.sol

pragma solidity ^0.5.0;



/**
 * @title WhitelistedRole
 * @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a
 * crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove
 * it), and not Whitelisteds themselves.
 */
contract WhitelistedRole is WhitelistAdminRole {
    using Roles for Roles.Role;

    event WhitelistedAdded(address indexed account);
    event WhitelistedRemoved(address indexed account);

    Roles.Role private _whitelisteds;

    modifier onlyWhitelisted() {
        require(isWhitelisted(msg.sender));
        _;
    }

    function isWhitelisted(address account) public view returns (bool) {
        return _whitelisteds.has(account);
    }

    function addWhitelisted(address account) public onlyWhitelistAdmin {
        _addWhitelisted(account);
    }

    function removeWhitelisted(address account) public onlyWhitelistAdmin {
        _removeWhitelisted(account);
    }

    function renounceWhitelisted() public {
        _removeWhitelisted(msg.sender);
    }

    function _addWhitelisted(address account) internal {
        _whitelisteds.add(account);
        emit WhitelistedAdded(account);
    }

    function _removeWhitelisted(address account) internal {
        _whitelisteds.remove(account);
        emit WhitelistedRemoved(account);
    }
}

// File: contracts/Strings.sol

pragma solidity ^0.5.0;

//https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
library Strings {

    function strConcat(string memory _a, string memory _b) internal pure returns (string memory _concatenatedString) {
        return strConcat(_a, _b, "", "", "");
    }

    function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory _concatenatedString) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory _concatenatedString) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory _concatenatedString) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
        bytes memory babcde = bytes(abcde);
        uint k = 0;
        uint i = 0;
        for (i = 0; i < _ba.length; i++) {
            babcde[k++] = _ba[i];
        }
        for (i = 0; i < _bb.length; i++) {
            babcde[k++] = _bb[i];
        }
        for (i = 0; i < _bc.length; i++) {
            babcde[k++] = _bc[i];
        }
        for (i = 0; i < _bd.length; i++) {
            babcde[k++] = _bd[i];
        }
        for (i = 0; i < _be.length; i++) {
            babcde[k++] = _be[i];
        }
        return string(babcde);
    }
}

// File: contracts/CustomERC721Metadata.sol

pragma solidity ^0.5.0;



/**
 * ERC721 base contract without the concept of tokenUri as this is managed by the parent
 */

contract CustomERC721Metadata is ERC165, ERC721, ERC721Enumerable {

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
    /**
     * 0x5b5e139f ===
     *     bytes4(keccak256('name()')) ^
     *     bytes4(keccak256('symbol()')) ^
     *     bytes4(keccak256('tokenURI(uint256)'))
     */

    /**
     * @dev Constructor function
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;

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

    /**
     * @dev Gets the token name
     * @return string representing the token name
     */
    function name() external view returns (string memory) {
        return _name;
    }

    /**
     * @dev Gets the token symbol
     * @return string representing the token symbol
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

}

// File: contracts/RendarToken.sol

pragma solidity ^0.5.0;







contract RendarToken is CustomERC721Metadata, WhitelistedRole {
    using SafeMath for uint256;

    ////////////
    // Events //
    ////////////

    // Emitted on every edition created
    event EditionCreated(
        uint256 indexed _editionId
    );

    ///////////////
    // Variables //
    ///////////////

    string public tokenBaseURI = "https://ipfs.infura.io/ipfs/";

    // Edition construct
    struct EditionDetails {
        uint256 editionId;              // top level edition identifier
        uint256 editionSize;            // max size of the edition
        uint256 editionSupply;          // number of tokens purchased from the edition
        uint256 priceInWei;             // price per token for this edition
        uint256 artistCommission;       // commission the artist wants for this editions
        address payable artistAccount;  // the account the send the commission to
        bool active;                    // Edition is active or not
        string tokenURI;                // NFT token metadata URL
    }

    // Edition step
    uint256 public editionStep = 10000;

    // A count of the total number of token minted
    uint256 public totalTokensMinted;

    // A pointer to the last/highest edition number created
    uint256 public highestEditionNumber;

    // A list of all created editions
    uint256[] public createdEditions;

    // Rendar commission account
    address payable public rendarAddress;

    // tokenId : editionId
    mapping(uint256 => uint256) internal tokenIdToEditionId;

    // editionId : EditionDetails
    mapping(uint256 => EditionDetails) internal editionIdToEditionDetails;

    // artistAccount : [editionId, editionId]
    mapping(address => uint256[]) internal artistToEditionIds;
    // editionId => editionId
    mapping(uint256 => uint256) internal editionIdToArtistIndex;

    ///////////////
    // Modifiers //
    ///////////////

    modifier onlyActiveEdition(uint256 _editionId) {
        require(editionIdToEditionDetails[_editionId].active, "Edition disabled");
        _;
    }

    modifier onlyValidEdition(uint256 _editionId) {
        require(editionIdToEditionDetails[_editionId].editionId > 0, "Edition ID invalid");
        _;
    }

    modifier onlyAvailableEdition(uint256 _editionId) {
        require(editionIdToEditionDetails[_editionId].editionSupply < editionIdToEditionDetails[_editionId].editionSize, "Edition sold out");
        _;
    }

    modifier onlyValidTokenId(uint256 _tokenId) {
        require(_exists(_tokenId), "Token ID does not exist");
        _;
    }

    /////////////////
    // Constructor //
    /////////////////

    constructor(address payable _rendarAddress) CustomERC721Metadata("RendarToken", "RDR") public {
        super.addWhitelisted(msg.sender);
        rendarAddress = _rendarAddress;
    }

    //////////////////////////////
    // Token Creation Functions //
    //////////////////////////////

    function purchase(uint256 _editionId) public payable returns (uint256 _tokenId) {
        return purchaseTo(msg.sender, _editionId);
    }

    function purchaseTo(address _to, uint256 _editionId)
    onlyActiveEdition(_editionId)
    onlyAvailableEdition(_editionId)
    public payable returns (uint256 _tokenId) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        require(msg.value >= _editionDetails.priceInWei, "Not enough ETH");

        // Generate token
        uint256 tokenId = _internalMint(_to, _editionId);

        // Split funds between Rendar and Artist
        _splitFunds(_editionDetails.priceInWei, _editionDetails.artistAccount, _editionDetails.artistCommission);

        return tokenId;
    }

    function _splitFunds(uint256 _priceInWei, address payable _artistsAccount, uint256 _artistsCommission) internal {
        if (_priceInWei > 0) {

            if (_artistsCommission > 0) {

                uint256 artistPayment = _priceInWei.div(100).mul(_artistsCommission);
                _artistsAccount.transfer(artistPayment);

                uint256 remainingCommission = msg.value.sub(artistPayment);
                rendarAddress.transfer(remainingCommission);
            } else {

                rendarAddress.transfer(msg.value);
            }
        }
    }

    /*
     * Whitelist only function for minting tokens from an edition to the callers address, does not require payment
     */
    function mint(uint256 _editionId) public returns (uint256 _tokenId) {
        return mintTo(msg.sender, _editionId);
    }

    /*
     * Whitelist only function for minting tokens from an edition to a specific address, does not require payment
     */
    function mintTo(address _to, uint256 _editionId)
    onlyWhitelisted
    onlyValidEdition(_editionId)
    onlyAvailableEdition(_editionId)
    public returns (uint256 _tokenId) {
        return _internalMint(_to, _editionId);
    }

    /*
     * Whitelist only function for minting multiple tokens from an edition to a specific address, does not require payment
     */
    function mintMultipleTo(address _to, uint256 _editionId, uint256 _total)
    onlyWhitelisted
    onlyValidEdition(_editionId)
    public returns (uint256[] memory _tokenIds) {

        uint256 remainingInEdition = editionIdToEditionDetails[_editionId].editionSize - editionIdToEditionDetails[_editionId].editionSupply;
        require(remainingInEdition >= _total, "Not enough left in edition");

        uint256[] memory tokens = new uint256[](_total);
        for (uint i = 0; i < _total; i++) {
            tokens[i] = _internalMint(_to, _editionId);
        }
        return tokens;
    }

    function _internalMint(address _to, uint256 _editionId) internal returns (uint256 _tokenId) {
        uint256 tokenId = _nextTokenId(_editionId);

        _mint(_to, tokenId);

        tokenIdToEditionId[tokenId] = _editionId;

        return tokenId;
    }

    /*
     * Function for burning tokens if you are the owner
     */
    function burn(uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId), "Caller is not owner nor approved");
        _burn(tokenId);
        delete tokenIdToEditionId[tokenId];
    }

    /*
     * Admin only function for burning tokens
     */
    function adminBurn(uint256 tokenId) onlyWhitelisted public {
        _burn(tokenId);
        delete tokenIdToEditionId[tokenId];
    }

    //////////////////////////////////
    // Edition Management Functions //
    //////////////////////////////////

    function createEdition(
        uint256 _editionSize,
        uint256 _priceInWei,
        uint256 _artistCommission,
        address payable _artistAccount,
        string memory _tokenURI
    ) public onlyWhitelisted returns (bool _created) {
        return _createEdition(_editionSize, _priceInWei, _artistCommission, _artistAccount, _tokenURI, true);
    }

    function createEditionInactive(
        uint256 _editionSize,
        uint256 _priceInWei,
        uint256 _artistCommission,
        address payable _artistAccount,
        string memory _tokenURI
    ) public onlyWhitelisted returns (bool _created) {
        return _createEdition(_editionSize, _priceInWei, _artistCommission, _artistAccount, _tokenURI, false);
    }

    function _createEdition(
        uint256 _editionSize,
        uint256 _priceInWei,
        uint256 _artistCommission,
        address payable _artistAccount,
        string memory _tokenURI,
        bool active
    ) internal returns (bool _created){

        // Guards for edition creation logic
        require(_editionSize > 0 && _editionSize <= editionStep, "Edition size invalid");
        require(_artistCommission >= 0 && _artistCommission <= 100, "Artist commission invalid");
        require(_artistAccount != address(0), "Artist account missing");
        require(bytes(_tokenURI).length != 0, "Token URI invalid");

        // Generate new edition number based on step
        uint256 _editionId = highestEditionNumber.add(editionStep);

        // Create edition
        editionIdToEditionDetails[_editionId] = EditionDetails(
            _editionId,
            _editionSize,
            0, // default zero purchased
            _priceInWei,
            _artistCommission,
            _artistAccount,
            active,
            _tokenURI
        );

        highestEditionNumber = _editionId;

        createdEditions.push(_editionId);

        updateArtistLookupData(_artistAccount, _editionId);

        // Emit event
        emit EditionCreated(_editionId);

        return true;
    }

    function _nextTokenId(uint256 _editionId) internal returns (uint256) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];

        // get next tokenID = max size + current supply
        uint256 tokenId = _editionDetails.editionId.add(_editionDetails.editionSupply);

        // Bump number totalSupply
        _editionDetails.editionSupply = _editionDetails.editionSupply.add(1);

        // Record another mint
        totalTokensMinted = totalTokensMinted.add(1);

        // Construct next token ID e.g. 100000 + 1 = ID of 100001 (this first in the edition set)
        return tokenId;
    }

    function disableEdition(uint256 _editionId)
    external
    onlyWhitelisted
    onlyValidEdition(_editionId) {
        editionIdToEditionDetails[_editionId].active = false;
    }

    function enableEdition(uint256 _editionId)
    external
    onlyWhitelisted
    onlyValidEdition(_editionId) {
        editionIdToEditionDetails[_editionId].active = true;
    }

    function updateArtistAccount(uint256 _editionId, address payable _artistAccount)
    external
    onlyWhitelisted
    onlyValidEdition(_editionId) {

        EditionDetails storage _originalEditionDetails = editionIdToEditionDetails[_editionId];

        uint256 editionArtistIndex = editionIdToArtistIndex[_editionId];

        // Get list of editions old artist works with
        uint256[] storage editionIdsForArtist = artistToEditionIds[_originalEditionDetails.artistAccount];

        // Remove edition from artists lists
        delete editionIdsForArtist[editionArtistIndex];

        // Add new artists to the list
        uint256 newArtistsEditionIndex = artistToEditionIds[_artistAccount].length;
        artistToEditionIds[_artistAccount].push(_editionId);
        editionIdToArtistIndex[_editionId] = newArtistsEditionIndex;

        // Update the edition
        _originalEditionDetails.artistAccount = _artistAccount;
    }

    function updateArtistCommission(uint256 _editionId, uint256 _artistCommission)
    external
    onlyWhitelisted
    onlyValidEdition(_editionId) {
        editionIdToEditionDetails[_editionId].artistCommission = _artistCommission;
    }

    function updateEditionTokenUri(uint256 _editionId, string calldata _tokenURI)
    external
    onlyWhitelisted
    onlyValidEdition(_editionId) {
        editionIdToEditionDetails[_editionId].tokenURI = _tokenURI;
    }

    function updatePrice(uint256 _editionId, uint256 _priceInWei)
    external
    onlyWhitelisted
    onlyValidEdition(_editionId) {
        editionIdToEditionDetails[_editionId].priceInWei = _priceInWei;
    }

    function updateArtistLookupData(address artistAccount, uint256 editionId) internal {
        uint256 artistEditionIndex = artistToEditionIds[artistAccount].length;
        artistToEditionIds[artistAccount].push(editionId);
        editionIdToArtistIndex[editionId] = artistEditionIndex;
    }

    //////////////////////////
    // Management functions //
    //////////////////////////

    function updateTokenBaseURI(string calldata _newBaseURI)
    external
    onlyWhitelisted {
        require(bytes(_newBaseURI).length != 0, "Base URI invalid");
        tokenBaseURI = _newBaseURI;
    }

    function updateRendarAddress(address payable _rendarAddress)
    external
    onlyWhitelisted {
        rendarAddress = _rendarAddress;
    }

    ////////////////////////
    // Accessor functions //
    ////////////////////////

    function tokensOfOwner(address owner) external view returns (uint256[] memory) {
        return _tokensOfOwner(owner);
    }

    function tokenURI(uint256 _tokenId)
    external view
    onlyValidTokenId(_tokenId)
    returns (string memory) {
        uint256 editionId = tokenIdToEditionId[_tokenId];
        return Strings.strConcat(tokenBaseURI, editionIdToEditionDetails[editionId].tokenURI);
    }

    function editionTokenUri(uint256 _editionId)
    public view
    returns (string memory _tokenUri) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return Strings.strConcat(tokenBaseURI, _editionDetails.tokenURI);
    }

    function editionSize(uint256 _editionId)
    public view
    returns (uint256 _totalRemaining) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return _editionDetails.editionSize;
    }

    function editionSupply(uint256 _editionId)
    public view
    returns (uint256 _editionSupply) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return _editionDetails.editionSupply;
    }

    function editionPrice(uint256 _editionId)
    public view
    returns (uint256 _priceInWei) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return _editionDetails.priceInWei;
    }

    function artistInfo(uint256 _editionId)
    public view
    returns (address _artistAccount, uint256 _artistCommission) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return (_editionDetails.artistAccount, _editionDetails.artistCommission);
    }

    function artistCommission(uint256 _editionId)
    public view
    returns (uint256 _artistCommission) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return _editionDetails.artistCommission;
    }

    function artistAccount(uint256 _editionId)
    public view
    returns (address _artistAccount) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return _editionDetails.artistAccount;
    }

    function active(uint256 _editionId)
    public view
    returns (bool _active) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return _editionDetails.active;
    }

    function allEditions() public view returns (uint256[] memory _editionIds) {
        return createdEditions;
    }

    function artistsEditions(address _artistsAccount) public view returns (uint256[] memory _editionIds) {
        return artistToEditionIds[_artistsAccount];
    }

    function editionDetails(uint256 _editionId) public view onlyValidEdition(_editionId)
    returns (
        uint256 _editionSize,
        uint256 _editionSupply,
        uint256 _priceInWei,
        uint256 _artistCommission,
        address _artistAccount,
        bool _active,
        string memory _tokenURI
    ) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return (
        _editionDetails.editionSize,
        _editionDetails.editionSupply,
        _editionDetails.priceInWei,
        _editionDetails.artistCommission,
        _editionDetails.artistAccount,
        _editionDetails.active,
        Strings.strConcat(tokenBaseURI, _editionDetails.tokenURI)
        );
    }

    function totalRemaining(uint256 _editionId) public view returns (uint256) {
        EditionDetails storage _editionDetails = editionIdToEditionDetails[_editionId];
        return _editionDetails.editionSize.sub(_editionDetails.editionSupply);
    }

    function tokenDetails(uint256 _tokenId) public view onlyValidTokenId(_tokenId)
    returns (
        uint256 _editionId,
        uint256 _editionSize,
        uint256 _editionSupply,
        address _artistAccount,
        address _owner,
        string memory _tokenURI
    ) {
        uint256 editionId = tokenIdToEditionId[_tokenId];
        EditionDetails storage _editionDetails = editionIdToEditionDetails[editionId];
        return (
        editionId,
        _editionDetails.editionSize,
        _editionDetails.editionSupply,
        _editionDetails.artistAccount,
        ownerOf(_tokenId),
        Strings.strConcat(tokenBaseURI, _editionDetails.tokenURI)
        );
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionSize","type":"uint256"},{"name":"_priceInWei","type":"uint256"},{"name":"_artistCommission","type":"uint256"},{"name":"_artistAccount","type":"address"},{"name":"_tokenURI","type":"string"}],"name":"createEditionInactive","outputs":[{"name":"_created","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"allEditions","outputs":[{"name":"_editionIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newBaseURI","type":"string"}],"name":"updateTokenBaseURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"artistCommission","outputs":[{"name":"_artistCommission","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionPrice","outputs":[{"name":"_priceInWei","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_editionId","type":"uint256"},{"name":"_total","type":"uint256"}],"name":"mintMultipleTo","outputs":[{"name":"_tokenIds","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_editionId","type":"uint256"}],"name":"mintTo","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenBaseURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"},{"name":"_artistCommission","type":"uint256"}],"name":"updateArtistCommission","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"},{"name":"_tokenURI","type":"string"}],"name":"updateEditionTokenUri","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"editionStep","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_artistsAccount","type":"address"}],"name":"artistsEditions","outputs":[{"name":"_editionIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"disableEdition","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalTokensMinted","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"active","outputs":[{"name":"_active","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"artistInfo","outputs":[{"name":"_artistAccount","type":"address"},{"name":"_artistCommission","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionSize","outputs":[{"name":"_totalRemaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"},{"name":"_priceInWei","type":"uint256"}],"name":"updatePrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_editionId","type":"uint256"}],"name":"purchaseTo","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"mint","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"highestEditionNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionSize","type":"uint256"},{"name":"_priceInWei","type":"uint256"},{"name":"_artistCommission","type":"uint256"},{"name":"_artistAccount","type":"address"},{"name":"_tokenURI","type":"string"}],"name":"createEdition","outputs":[{"name":"_created","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"adminBurn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"createdEditions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"totalRemaining","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rendarAddress","type":"address"}],"name":"updateRendarAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionTokenUri","outputs":[{"name":"_tokenUri","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionDetails","outputs":[{"name":"_editionSize","type":"uint256"},{"name":"_editionSupply","type":"uint256"},{"name":"_priceInWei","type":"uint256"},{"name":"_artistCommission","type":"uint256"},{"name":"_artistAccount","type":"address"},{"name":"_active","type":"bool"},{"name":"_tokenURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"artistAccount","outputs":[{"name":"_artistAccount","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"},{"name":"_artistAccount","type":"address"}],"name":"updateArtistAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"enableEdition","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rendarAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"purchase","outputs":[{"name":"_tokenId","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_editionId","type":"uint256"}],"name":"editionSupply","outputs":[{"name":"_editionSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenDetails","outputs":[{"name":"_editionId","type":"uint256"},{"name":"_editionSize","type":"uint256"},{"name":"_editionSupply","type":"uint256"},{"name":"_artistAccount","type":"address"},{"name":"_owner","type":"address"},{"name":"_tokenURI","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_rendarAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_editionId","type":"uint256"}],"name":"EditionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

60c0604052601c60808190527f68747470733a2f2f697066732e696e667572612e696f2f697066732f0000000060a09081526200004091600d919062000436565b50612710600e553480156200005457600080fd5b5060405160208062004096833981018060405260208110156200007657600080fd5b5051604080518082018252600b81527f52656e646172546f6b656e0000000000000000000000000000000000000000006020828101919091528251808401909352600383527f52445200000000000000000000000000000000000000000000000000000000009083015290620001157f01ffc9a70000000000000000000000000000000000000000000000000000000064010000000062000238810204565b620001497f80ac58cd0000000000000000000000000000000000000000000000000000000064010000000062000238810204565b6200017d7f780e9d630000000000000000000000000000000000000000000000000000000064010000000062000238810204565b81516200019290600990602085019062000436565b508051620001a890600a90602084019062000436565b50620001dd7f5b5e139f0000000000000000000000000000000000000000000000000000000064010000000062000238810204565b5050620001f933620002a5640100000000026401000000009004565b62000212336401000000006200144e620002f782021704565b60128054600160a060020a031916600160a060020a0392909216919091179055620004db565b7fffffffff0000000000000000000000000000000000000000000000000000000080821614156200026857600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b620002c0600b82640100000000620031766200032e82021704565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b6200030b3364010000000062000389810204565b15156200031757600080fd5b6200032b81640100000000620003ac810204565b50565b600160a060020a03811615156200034457600080fd5b620003598282640100000000620003fe810204565b156200036457600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b6000620003a6600b8364010000000062002d42620003fe82021704565b92915050565b620003c7600c82640100000000620031766200032e82021704565b604051600160a060020a038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b6000600160a060020a03821615156200041657600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200047957805160ff1916838001178555620004a9565b82800160010185558215620004a9579182015b82811115620004a95782518255916020019190600101906200048c565b50620004b7929150620004bb565b5090565b620004d891905b80821115620004b75760008155600101620004c2565b90565b613bab80620004eb6000396000f3fe6080604052600436106102c95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146102ce57806306fdde031461032b578063081812fc146103b5578063095ea7b3146103fb5780630c318c61146104365780630fe45dd51461050a57806310154bad1461056f57806318160ddd146105a25780632295ee5b146105c957806323b872dd14610646578063291d9549146106895780632f745c59146106bc57806332fd8478146106f557806338d37b9b1461071f5780633af32abf1461074957806342842e0e1461077c57806342966c68146107bf57806343480e5d146107e9578063449a52f8146108285780634c5a628c146108615780634e99b800146108765780634f6ccce71461088b5780635091f881146108b55780635150ce6b146108e557806362538bbd146109695780636352211e1461097e5780636641179e146109a857806370a08231146109db5780637362d9c814610a0e57806374b799af14610a415780637d549e9914610a6b5780638033d58114610a8057806380d297bd14610aaa5780638195014414610af757806382367b2d14610b215780638462151c14610b51578063891407c014610b8457806395d89b4114610bb0578063a0712d6814610bc5578063a22cb46514610bef578063abf3260f14610c2a578063b77a27af14610c3f578063b88d4fde14610d13578063badb97ff14610de6578063bb5f747b14610e10578063bb706ff314610e43578063bc02844c14610e6d578063c87b56dd14610e97578063c8e21d7714610ec1578063cb89a27314610ef4578063d2d02d0914610f1e578063d6067a5d14611000578063d6cd94731461102a578063dc4150a21461103f578063e4ae2e8814611078578063e7144aa4146110a2578063e985e9c5146110b7578063efef39a1146110f2578063f83e6ed81461110f578063fc314e3114611139575b600080fd5b3480156102da57600080fd5b50610317600480360360208110156102f157600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611222565b604080519115158252519081900360200190f35b34801561033757600080fd5b50610340611256565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037a578181015183820152602001610362565b50505050905090810190601f1680156103a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c157600080fd5b506103df600480360360208110156103d857600080fd5b50356112ed565b60408051600160a060020a039092168252519081900360200190f35b34801561040757600080fd5b506104346004803603604081101561041e57600080fd5b50600160a060020a03813516906020013561131f565b005b34801561044257600080fd5b50610317600480360360a081101561045957600080fd5b813591602081013591604082013591600160a060020a036060820135169181019060a08101608082013564010000000081111561049557600080fd5b8201836020820111156104a757600080fd5b803590602001918460018302840111640100000000831117156104c957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113c8945050505050565b34801561051657600080fd5b5061051f6113f7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055b578181015183820152602001610543565b505050509050019250505060405180910390f35b34801561057b57600080fd5b506104346004803603602081101561059257600080fd5b5035600160a060020a031661144e565b3480156105ae57600080fd5b506105b761146e565b60408051918252519081900360200190f35b3480156105d557600080fd5b50610434600480360360208110156105ec57600080fd5b81019060208101813564010000000081111561060757600080fd5b82018360208201111561061957600080fd5b8035906020019184600183028401116401000000008311171561063b57600080fd5b509092509050611474565b34801561065257600080fd5b506104346004803603606081101561066957600080fd5b50600160a060020a038135811691602081013590911690604001356114f0565b34801561069557600080fd5b50610434600480360360208110156106ac57600080fd5b5035600160a060020a0316611510565b3480156106c857600080fd5b506105b7600480360360408110156106df57600080fd5b50600160a060020a03813516906020013561152d565b34801561070157600080fd5b506105b76004803603602081101561071857600080fd5b503561157b565b34801561072b57600080fd5b506105b76004803603602081101561074257600080fd5b5035611590565b34801561075557600080fd5b506103176004803603602081101561076c57600080fd5b5035600160a060020a03166115a5565b34801561078857600080fd5b506104346004803603606081101561079f57600080fd5b50600160a060020a038135811691602081013590911690604001356115b8565b3480156107cb57600080fd5b50610434600480360360208110156107e257600080fd5b50356115d4565b3480156107f557600080fd5b5061051f6004803603606081101561080c57600080fd5b50600160a060020a03813516906020810135906040013561164e565b34801561083457600080fd5b506105b76004803603604081101561084b57600080fd5b50600160a060020a038135169060200135611799565b34801561086d57600080fd5b50610434611886565b34801561088257600080fd5b50610340611891565b34801561089757600080fd5b506105b7600480360360208110156108ae57600080fd5b503561191f565b3480156108c157600080fd5b50610434600480360360408110156108d857600080fd5b5080359060200135611954565b3480156108f157600080fd5b506104346004803603604081101561090857600080fd5b8135919081019060408101602082013564010000000081111561092a57600080fd5b82018360208201111561093c57600080fd5b8035906020019184600183028401116401000000008311171561095e57600080fd5b5090925090506119d2565b34801561097557600080fd5b506105b7611a5d565b34801561098a57600080fd5b506103df600480360360208110156109a157600080fd5b5035611a63565b3480156109b457600080fd5b5061051f600480360360208110156109cb57600080fd5b5035600160a060020a0316611a87565b3480156109e757600080fd5b506105b7600480360360208110156109fe57600080fd5b5035600160a060020a0316611af3565b348015610a1a57600080fd5b5061043460048036036020811015610a3157600080fd5b5035600160a060020a0316611b26565b348015610a4d57600080fd5b5061043460048036036020811015610a6457600080fd5b5035611b43565b348015610a7757600080fd5b506105b7611bdb565b348015610a8c57600080fd5b5061031760048036036020811015610aa357600080fd5b5035611be1565b348015610ab657600080fd5b50610ad460048036036020811015610acd57600080fd5b5035611c11565b60408051600160a060020a03909316835260208301919091528051918290030190f35b348015610b0357600080fd5b506105b760048036036020811015610b1a57600080fd5b5035611c38565b348015610b2d57600080fd5b5061043460048036036040811015610b4457600080fd5b5080359060200135611c4d565b348015610b5d57600080fd5b5061051f60048036036020811015610b7457600080fd5b5035600160a060020a0316611ccb565b6105b760048036036040811015610b9a57600080fd5b50600160a060020a038135169060200135611d2a565b348015610bbc57600080fd5b50610340611ebc565b348015610bd157600080fd5b506105b760048036036020811015610be857600080fd5b5035611f1d565b348015610bfb57600080fd5b5061043460048036036040811015610c1257600080fd5b50600160a060020a0381351690602001351515611f29565b348015610c3657600080fd5b506105b7611fad565b348015610c4b57600080fd5b50610317600480360360a0811015610c6257600080fd5b813591602081013591604082013591600160a060020a036060820135169181019060a081016080820135640100000000811115610c9e57600080fd5b820183602082011115610cb057600080fd5b80359060200191846001830284011164010000000083111715610cd257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fb3945050505050565b348015610d1f57600080fd5b5061043460048036036080811015610d3657600080fd5b600160a060020a03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610d7157600080fd5b820183602082011115610d8357600080fd5b80359060200191846001830284011164010000000083111715610da557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fd8945050505050565b348015610df257600080fd5b5061043460048036036020811015610e0957600080fd5b5035612000565b348015610e1c57600080fd5b5061031760048036036020811015610e3357600080fd5b5035600160a060020a0316612014565b348015610e4f57600080fd5b506105b760048036036020811015610e6657600080fd5b5035612027565b348015610e7957600080fd5b506105b760048036036020811015610e9057600080fd5b5035612046565b348015610ea357600080fd5b5061034060048036036020811015610eba57600080fd5b5035612074565b348015610ecd57600080fd5b5061043460048036036020811015610ee457600080fd5b5035600160a060020a031661221b565b348015610f0057600080fd5b5061034060048036036020811015610f1757600080fd5b5035612251565b348015610f2a57600080fd5b50610f4860048036036020811015610f4157600080fd5b5035612352565b6040518088815260200187815260200186815260200185815260200184600160a060020a0316600160a060020a031681526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610fbf578181015183820152602001610fa7565b50505050905090810190601f168015610fec5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b34801561100c57600080fd5b506103df6004803603602081101561102357600080fd5b5035612517565b34801561103657600080fd5b50610434612535565b34801561104b57600080fd5b506104346004803603604081101561106257600080fd5b5080359060200135600160a060020a031661253e565b34801561108457600080fd5b506104346004803603602081101561109b57600080fd5b5035612647565b3480156110ae57600080fd5b506103df6126f6565b3480156110c357600080fd5b50610317600480360360408110156110da57600080fd5b50600160a060020a0381358116916020013516612705565b6105b76004803603602081101561110857600080fd5b5035612733565b34801561111b57600080fd5b506105b76004803603602081101561113257600080fd5b503561273f565b34801561114557600080fd5b506111636004803603602081101561115c57600080fd5b5035612754565b6040518087815260200186815260200185815260200184600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111e25781810151838201526020016111ca565b50505050905090810190601f16801561120f5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112e25780601f106112b7576101008083540402835291602001916112e2565b820191906000526020600020905b8154815290600101906020018083116112c557829003601f168201915b505050505090505b90565b60006112f882612906565b151561130357600080fd5b50600090815260026020526040902054600160a060020a031690565b600061132a82611a63565b9050600160a060020a03838116908216141561134557600080fd5b33600160a060020a038216148061136157506113618133612705565b151561136c57600080fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006113d3336115a5565b15156113de57600080fd5b6113ed86868686866000612923565b9695505050505050565b606060118054806020026020016040519081016040528092919081815260200182805480156112e257602002820191906000526020600020905b815481526020019060010190808311611431575050505050905090565b61145733612014565b151561146257600080fd5b61146b81612c3c565b50565b60075490565b61147d336115a5565b151561148857600080fd5b8015156114df576040805160e560020a62461bcd02815260206004820152601060248201527f426173652055524920696e76616c696400000000000000000000000000000000604482015290519081900360640190fd5b6114eb600d8383613a39565b505050565b6114fa3382612c84565b151561150557600080fd5b6114eb838383612cdb565b61151933612014565b151561152457600080fd5b61146b81612cfa565b600061153883611af3565b821061154357600080fd5b600160a060020a038316600090815260056020526040902080548390811061156757fe5b906000526020600020015490505b92915050565b60009081526014602052604090206004015490565b60009081526014602052604090206003015490565b6000611575600c8363ffffffff612d4216565b6114eb8383836020604051908101604052806000815250611fd8565b6115de3382612c84565b1515611634576040805160e560020a62461bcd02815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604482015290519081900360640190fd5b61163d81612d79565b600090815260136020526040812055565b6060611659336115a5565b151561166457600080fd5b6000838152601460205260408120548491106116b8576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b60008481526014602052604090206002810154600190910154038381101561172a576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6f7420656e6f756768206c65667420696e2065646974696f6e000000000000604482015290519081900360640190fd5b606084604051908082528060200260200182016040528015611756578160200160208202803883390190505b50905060005b8581101561178e5761176e8888612d8b565b828281518110151561177c57fe5b6020908102909101015260010161175c565b509695505050505050565b60006117a4336115a5565b15156117af57600080fd5b600082815260146020526040812054839110611803576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b60008381526014602052604090206001810154600290910154849111611873576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e20736f6c64206f757400000000000000000000000000000000604482015290519081900360640190fd5b61187d8585612d8b565b95945050505050565b61188f33612dbb565b565b600d805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119175780601f106118ec57610100808354040283529160200191611917565b820191906000526020600020905b8154815290600101906020018083116118fa57829003601f168201915b505050505081565b600061192961146e565b821061193457600080fd5b600780548390811061194257fe5b90600052602060002001549050919050565b61195d336115a5565b151561196857600080fd5b6000828152601460205260408120548391106119bc576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b5060009182526014602052604090912060040155565b6119db336115a5565b15156119e657600080fd5b600083815260146020526040812054849110611a3a576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b6000848152601460205260409020611a56906006018484613a39565b5050505050565b600e5481565b600081815260016020526040812054600160a060020a031680151561157557600080fd5b600160a060020a038116600090815260156020908152604091829020805483518184028101840190945280845260609392830182828015611ae757602002820191906000526020600020905b815481526020019060010190808311611ad3575b50505050509050919050565b6000600160a060020a0382161515611b0a57600080fd5b50600160a060020a031660009081526003602052604090205490565b611b2f33612014565b1515611b3a57600080fd5b61146b81612e03565b611b4c336115a5565b1515611b5757600080fd5b600081815260146020526040812054829110611bab576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b506000908152601460205260409020600501805474ff000000000000000000000000000000000000000019169055565b600f5481565b60009081526014602052604090206005015474010000000000000000000000000000000000000000900460ff1690565b60009081526014602052604090206005810154600490910154600160a060020a0390911691565b60009081526014602052604090206001015490565b611c56336115a5565b1515611c6157600080fd5b600082815260146020526040812054839110611cb5576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b5060009182526014602052604090912060030155565b6060611cd682612e4b565b805480602002602001604051908101604052809291908181526020018280548015611ae75760200282019190600052602060002090815481526020019060010190808311611ad35750505050509050919050565b600081815260146020526040812060050154829074010000000000000000000000000000000000000000900460ff161515611daf576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e2064697361626c656400000000000000000000000000000000604482015290519081900360640190fd5b60008381526014602052604090206001810154600290910154849111611e1f576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e20736f6c64206f757400000000000000000000000000000000604482015290519081900360640190fd5b60008481526014602052604090206003810154341015611e89576040805160e560020a62461bcd02815260206004820152600e60248201527f4e6f7420656e6f75676820455448000000000000000000000000000000000000604482015290519081900360640190fd5b6000611e958787612d8b565b6003830154600584015460048501549293506113ed92600160a060020a0390911690612e65565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112e25780601f106112b7576101008083540402835291602001916112e2565b60006115753383611799565b600160a060020a038216331415611f3f57600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60105481565b6000611fbe336115a5565b1515611fc957600080fd5b6113ed86868686866001612923565b611fe38484846114f0565b611fef84848484612f62565b1515611ffa57600080fd5b50505050565b612009336115a5565b151561163457600080fd5b6000611575600b8363ffffffff612d4216565b601180548290811061203557fe5b600091825260209091200154905081565b60008181526014602052604081206002810154600182015461206d9163ffffffff6130de16565b9392505050565b60608161208081612906565b15156120d6576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b60008381526013602090815260409182902054600d8054845160026001831615610100026000190190921691909104601f810185900485028201850190955284815291936122139383018282801561216f5780601f106121445761010080835404028352916020019161216f565b820191906000526020600020905b81548152906001019060200180831161215257829003601f168201915b5050506000858152601460209081526040918290206006018054835160026001831615610100026000190190921691909104601f8101849004840282018401909452838152945092508301828280156122095780601f106121de57610100808354040283529160200191612209565b820191906000526020600020905b8154815290600101906020018083116121ec57829003601f168201915b50505050506130f3565b949350505050565b612224336115a5565b151561222f57600080fd5b60128054600160a060020a031916600160a060020a0392909216919091179055565b600081815260146020908152604091829020600d80548451601f60026000196101006001861615020190931692909204918201859004850281018501909552808552606094929361206d939291908301828280156122f05780601f106122c5576101008083540402835291602001916122f0565b820191906000526020600020905b8154815290600101906020018083116122d357829003601f168201915b5050505060068401805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b60008181526014602052604081205481908190819081908190606090889083106123b4576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b600089815260146020908152604091829020600180820154600280840154600385015460048601546005870154600d80548b516101009982161599909902600019011695909504601f81018a90048a0288018a01909a5289875296989497929691959094600160a060020a038316947401000000000000000000000000000000000000000090930460ff16936124f99391908301828280156124975780601f1061246c57610100808354040283529160200191612497565b820191906000526020600020905b81548152906001019060200180831161247a57829003601f168201915b5050505060068a01805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b82925098509850985098509850985098505050919395979092949650565b600090815260146020526040902060050154600160a060020a031690565b61188f33612cfa565b612547336115a5565b151561255257600080fd5b6000828152601460205260408120548391106125a6576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b600083815260146020908152604080832060168352818420546005820154600160a060020a031685526015909352922080548190839081106125e457fe5b60009182526020808320909101829055600160a060020a03909616808252601587526040808320805460018101825590845288842081018a9055988352601690975295902095909555506005018054600160a060020a0319169092179091555050565b612650336115a5565b151561265b57600080fd5b6000818152601460205260408120548291106126af576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b506000908152601460205260409020600501805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b601254600160a060020a031681565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60006115753383611d2a565b60009081526014602052604090206002015490565b600080600080600060608661276881612906565b15156127be576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b600088815260136020908152604080832054808452601490925290912060018101546002820154600583015484929190600160a060020a03166128008e611a63565b600d8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526128ef939092909183018282801561288d5780601f106128625761010080835404028352916020019161288d565b820191906000526020600020905b81548152906001019060200180831161287057829003601f168201915b5050505060068901805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b949f939e50919c509a509850909650945050505050565b600090815260016020526040902054600160a060020a0316151590565b600080871180156129365750600e548711155b151561298c576040805160e560020a62461bcd02815260206004820152601460248201527f45646974696f6e2073697a6520696e76616c6964000000000000000000000000604482015290519081900360640190fd5b6000851015801561299e575060648511155b15156129f4576040805160e560020a62461bcd02815260206004820152601960248201527f41727469737420636f6d6d697373696f6e20696e76616c696400000000000000604482015290519081900360640190fd5b600160a060020a0384161515612a54576040805160e560020a62461bcd02815260206004820152601660248201527f417274697374206163636f756e74206d697373696e6700000000000000000000604482015290519081900360640190fd5b82511515612aac576040805160e560020a62461bcd02815260206004820152601160248201527f546f6b656e2055524920696e76616c6964000000000000000000000000000000604482015290519081900360640190fd5b6000612ac5600e5460105461312890919063ffffffff16565b9050610100604051908101604052808281526020018981526020016000815260200188815260200187815260200186600160a060020a0316815260200184151581526020018581525060146000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060c08201518160050160146101000a81548160ff02191690831515021790555060e0820151816006019080519060200190612bbc929190613ab7565b5050506010819055601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6801819055612c03858261313a565b60405181907f962bb64b059ad60d491bef43125921210925c52b11ff1cc093409113c8c5fe3790600090a2506001979650505050505050565b612c4d600c8263ffffffff61317616565b604051600160a060020a038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b600080612c9083611a63565b905080600160a060020a031684600160a060020a03161480612ccb575083600160a060020a0316612cc0846112ed565b600160a060020a0316145b8061221357506122138185612705565b612ce68383836131c4565b612cf083826132d3565b6114eb82826133c3565b612d0b600c8263ffffffff61340116565b604051600160a060020a038216907f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b690600090a250565b6000600160a060020a0382161515612d5957600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61146b612d8582611a63565b8261344d565b600080612d978361347d565b9050612da384826134e0565b60008181526013602052604090209290925550919050565b612dcc600b8263ffffffff61340116565b604051600160a060020a038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b612e14600b8263ffffffff61317616565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b600160a060020a0316600090815260056020526040902090565b60008311156114eb576000811115612f29576000612e9a82612e8e86606463ffffffff6134fd16565b9063ffffffff61352116565b604051909150600160a060020a0384169082156108fc029083906000818181858888f19350505050158015612ed3573d6000803e3d6000fd5b506000612ee6348363ffffffff6130de16565b601254604051919250600160a060020a03169082156108fc029083906000818181858888f19350505050158015612f21573d6000803e3d6000fd5b5050506114eb565b601254604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015611ffa573d6000803e3d6000fd5b6000612f7684600160a060020a031661354c565b1515612f8457506001612213565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015613017578181015183820152602001612fff565b50505050905090810190601f1680156130445780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561306657600080fd5b505af115801561307a573d6000803e3d6000fd5b505050506040513d602081101561309057600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b6000828211156130ed57600080fd5b50900390565b60408051602081810183526000808352835180830185528181528451928301909452815260609261206d928692869290613554565b60008282018381101561206d57600080fd5b600160a060020a039091166000908152601560209081526040808320805460018101825590845282842081018590559383526016909152902055565b600160a060020a038116151561318b57600080fd5b6131958282612d42565b1561319f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b82600160a060020a03166131d782611a63565b600160a060020a0316146131ea57600080fd5b600160a060020a03821615156131ff57600080fd5b613208816137a9565b600160a060020a03831660009081526003602052604090205461323290600163ffffffff6130de16565b600160a060020a03808516600090815260036020526040808220939093559084168152205461326890600163ffffffff61312816565b600160a060020a03808416600081815260036020908152604080832095909555858252600190528381208054600160a060020a031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600160a060020a0382166000908152600560205260408120546132fd90600163ffffffff6130de16565b60008381526006602052604090205490915080821461339a57600160a060020a038416600090815260056020526040812080548490811061333a57fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a031681526020019081526020016000208381548110151561337a57fe5b600091825260208083209091019290925591825260069052604090208190555b600160a060020a0384166000908152600560205260409020805490611a56906000198301613b25565b600160a060020a0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b600160a060020a038116151561341657600080fd5b6134208282612d42565b151561342b57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b61345782826137e4565b61346182826132d3565b600081815260066020526040812055613479816138a3565b5050565b60008181526014602052604081206002810154815483916134a4919063ffffffff61312816565b60028301549091506134bd90600163ffffffff61312816565b6002830155600f546134d690600163ffffffff61312816565b600f559392505050565b6134ea8282613941565b6134f482826133c3565b613479816139f5565b600080821161350b57600080fd5b6000828481151561351857fe5b04949350505050565b600082151561353257506000611575565b82820282848281151561354157fe5b041461206d57600080fd5b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156135a8576020820181803883390190505b509050806000805b885181101561360e5788818151811015156135c757fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156135ee57fe5b906020010190600160f860020a031916908160001a9053506001016135b0565b5060005b875181101561367057878181518110151561362957fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561365057fe5b906020010190600160f860020a031916908160001a905350600101613612565b5060005b86518110156136d257868181518110151561368b57fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156136b257fe5b906020010190600160f860020a031916908160001a905350600101613674565b5060005b85518110156137345785818151811015156136ed57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561371457fe5b906020010190600160f860020a031916908160001a9053506001016136d6565b5060005b845181101561379657848181518110151561374f57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561377657fe5b906020010190600160f860020a031916908160001a905350600101613738565b50909d9c50505050505050505050505050565b600081815260026020526040902054600160a060020a03161561146b5760009081526002602052604090208054600160a060020a0319169055565b81600160a060020a03166137f782611a63565b600160a060020a03161461380a57600080fd5b613813816137a9565b600160a060020a03821660009081526003602052604090205461383d90600163ffffffff6130de16565b600160a060020a038316600081815260036020908152604080832094909455848252600190528281208054600160a060020a03191690559151839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6007546000906138ba90600163ffffffff6130de16565b600083815260086020526040812054600780549394509092849081106138dc57fe5b90600052602060002001549050806007838154811015156138f957fe5b6000918252602080832090910192909255828152600890915260409020829055600780549061392c906000198301613b25565b50505060009182525060086020526040812055565b600160a060020a038216151561395657600080fd5b61395f81612906565b1561396957600080fd5b60008181526001602081815260408084208054600160a060020a031916600160a060020a03881690811790915584526003909152909120546139aa91613128565b600160a060020a0383166000818152600360205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a7a5782800160ff19823516178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578235825591602001919060010190613a8c565b50613ab3929150613b45565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613af857805160ff1916838001178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578251825591602001919060010190613b0a565b8154818355818111156114eb576000838152602090206114eb9181019083015b6112ea91905b80821115613ab35760008155600101613b4b56fe45646974696f6e20494420696e76616c69640000000000000000000000000000a165627a7a72305820043294eb099e7add67a3b18f14bbe8aa5fa9301f2eed3d172999a87f5381967d00290000000000000000000000004ff3eb0a7f68d6eb80fcf5039032ec927131ef2e

Deployed Bytecode

0x6080604052600436106102c95763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166301ffc9a781146102ce57806306fdde031461032b578063081812fc146103b5578063095ea7b3146103fb5780630c318c61146104365780630fe45dd51461050a57806310154bad1461056f57806318160ddd146105a25780632295ee5b146105c957806323b872dd14610646578063291d9549146106895780632f745c59146106bc57806332fd8478146106f557806338d37b9b1461071f5780633af32abf1461074957806342842e0e1461077c57806342966c68146107bf57806343480e5d146107e9578063449a52f8146108285780634c5a628c146108615780634e99b800146108765780634f6ccce71461088b5780635091f881146108b55780635150ce6b146108e557806362538bbd146109695780636352211e1461097e5780636641179e146109a857806370a08231146109db5780637362d9c814610a0e57806374b799af14610a415780637d549e9914610a6b5780638033d58114610a8057806380d297bd14610aaa5780638195014414610af757806382367b2d14610b215780638462151c14610b51578063891407c014610b8457806395d89b4114610bb0578063a0712d6814610bc5578063a22cb46514610bef578063abf3260f14610c2a578063b77a27af14610c3f578063b88d4fde14610d13578063badb97ff14610de6578063bb5f747b14610e10578063bb706ff314610e43578063bc02844c14610e6d578063c87b56dd14610e97578063c8e21d7714610ec1578063cb89a27314610ef4578063d2d02d0914610f1e578063d6067a5d14611000578063d6cd94731461102a578063dc4150a21461103f578063e4ae2e8814611078578063e7144aa4146110a2578063e985e9c5146110b7578063efef39a1146110f2578063f83e6ed81461110f578063fc314e3114611139575b600080fd5b3480156102da57600080fd5b50610317600480360360208110156102f157600080fd5b50357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916611222565b604080519115158252519081900360200190f35b34801561033757600080fd5b50610340611256565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561037a578181015183820152602001610362565b50505050905090810190601f1680156103a75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103c157600080fd5b506103df600480360360208110156103d857600080fd5b50356112ed565b60408051600160a060020a039092168252519081900360200190f35b34801561040757600080fd5b506104346004803603604081101561041e57600080fd5b50600160a060020a03813516906020013561131f565b005b34801561044257600080fd5b50610317600480360360a081101561045957600080fd5b813591602081013591604082013591600160a060020a036060820135169181019060a08101608082013564010000000081111561049557600080fd5b8201836020820111156104a757600080fd5b803590602001918460018302840111640100000000831117156104c957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506113c8945050505050565b34801561051657600080fd5b5061051f6113f7565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561055b578181015183820152602001610543565b505050509050019250505060405180910390f35b34801561057b57600080fd5b506104346004803603602081101561059257600080fd5b5035600160a060020a031661144e565b3480156105ae57600080fd5b506105b761146e565b60408051918252519081900360200190f35b3480156105d557600080fd5b50610434600480360360208110156105ec57600080fd5b81019060208101813564010000000081111561060757600080fd5b82018360208201111561061957600080fd5b8035906020019184600183028401116401000000008311171561063b57600080fd5b509092509050611474565b34801561065257600080fd5b506104346004803603606081101561066957600080fd5b50600160a060020a038135811691602081013590911690604001356114f0565b34801561069557600080fd5b50610434600480360360208110156106ac57600080fd5b5035600160a060020a0316611510565b3480156106c857600080fd5b506105b7600480360360408110156106df57600080fd5b50600160a060020a03813516906020013561152d565b34801561070157600080fd5b506105b76004803603602081101561071857600080fd5b503561157b565b34801561072b57600080fd5b506105b76004803603602081101561074257600080fd5b5035611590565b34801561075557600080fd5b506103176004803603602081101561076c57600080fd5b5035600160a060020a03166115a5565b34801561078857600080fd5b506104346004803603606081101561079f57600080fd5b50600160a060020a038135811691602081013590911690604001356115b8565b3480156107cb57600080fd5b50610434600480360360208110156107e257600080fd5b50356115d4565b3480156107f557600080fd5b5061051f6004803603606081101561080c57600080fd5b50600160a060020a03813516906020810135906040013561164e565b34801561083457600080fd5b506105b76004803603604081101561084b57600080fd5b50600160a060020a038135169060200135611799565b34801561086d57600080fd5b50610434611886565b34801561088257600080fd5b50610340611891565b34801561089757600080fd5b506105b7600480360360208110156108ae57600080fd5b503561191f565b3480156108c157600080fd5b50610434600480360360408110156108d857600080fd5b5080359060200135611954565b3480156108f157600080fd5b506104346004803603604081101561090857600080fd5b8135919081019060408101602082013564010000000081111561092a57600080fd5b82018360208201111561093c57600080fd5b8035906020019184600183028401116401000000008311171561095e57600080fd5b5090925090506119d2565b34801561097557600080fd5b506105b7611a5d565b34801561098a57600080fd5b506103df600480360360208110156109a157600080fd5b5035611a63565b3480156109b457600080fd5b5061051f600480360360208110156109cb57600080fd5b5035600160a060020a0316611a87565b3480156109e757600080fd5b506105b7600480360360208110156109fe57600080fd5b5035600160a060020a0316611af3565b348015610a1a57600080fd5b5061043460048036036020811015610a3157600080fd5b5035600160a060020a0316611b26565b348015610a4d57600080fd5b5061043460048036036020811015610a6457600080fd5b5035611b43565b348015610a7757600080fd5b506105b7611bdb565b348015610a8c57600080fd5b5061031760048036036020811015610aa357600080fd5b5035611be1565b348015610ab657600080fd5b50610ad460048036036020811015610acd57600080fd5b5035611c11565b60408051600160a060020a03909316835260208301919091528051918290030190f35b348015610b0357600080fd5b506105b760048036036020811015610b1a57600080fd5b5035611c38565b348015610b2d57600080fd5b5061043460048036036040811015610b4457600080fd5b5080359060200135611c4d565b348015610b5d57600080fd5b5061051f60048036036020811015610b7457600080fd5b5035600160a060020a0316611ccb565b6105b760048036036040811015610b9a57600080fd5b50600160a060020a038135169060200135611d2a565b348015610bbc57600080fd5b50610340611ebc565b348015610bd157600080fd5b506105b760048036036020811015610be857600080fd5b5035611f1d565b348015610bfb57600080fd5b5061043460048036036040811015610c1257600080fd5b50600160a060020a0381351690602001351515611f29565b348015610c3657600080fd5b506105b7611fad565b348015610c4b57600080fd5b50610317600480360360a0811015610c6257600080fd5b813591602081013591604082013591600160a060020a036060820135169181019060a081016080820135640100000000811115610c9e57600080fd5b820183602082011115610cb057600080fd5b80359060200191846001830284011164010000000083111715610cd257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fb3945050505050565b348015610d1f57600080fd5b5061043460048036036080811015610d3657600080fd5b600160a060020a03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610d7157600080fd5b820183602082011115610d8357600080fd5b80359060200191846001830284011164010000000083111715610da557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611fd8945050505050565b348015610df257600080fd5b5061043460048036036020811015610e0957600080fd5b5035612000565b348015610e1c57600080fd5b5061031760048036036020811015610e3357600080fd5b5035600160a060020a0316612014565b348015610e4f57600080fd5b506105b760048036036020811015610e6657600080fd5b5035612027565b348015610e7957600080fd5b506105b760048036036020811015610e9057600080fd5b5035612046565b348015610ea357600080fd5b5061034060048036036020811015610eba57600080fd5b5035612074565b348015610ecd57600080fd5b5061043460048036036020811015610ee457600080fd5b5035600160a060020a031661221b565b348015610f0057600080fd5b5061034060048036036020811015610f1757600080fd5b5035612251565b348015610f2a57600080fd5b50610f4860048036036020811015610f4157600080fd5b5035612352565b6040518088815260200187815260200186815260200185815260200184600160a060020a0316600160a060020a031681526020018315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610fbf578181015183820152602001610fa7565b50505050905090810190601f168015610fec5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b34801561100c57600080fd5b506103df6004803603602081101561102357600080fd5b5035612517565b34801561103657600080fd5b50610434612535565b34801561104b57600080fd5b506104346004803603604081101561106257600080fd5b5080359060200135600160a060020a031661253e565b34801561108457600080fd5b506104346004803603602081101561109b57600080fd5b5035612647565b3480156110ae57600080fd5b506103df6126f6565b3480156110c357600080fd5b50610317600480360360408110156110da57600080fd5b50600160a060020a0381358116916020013516612705565b6105b76004803603602081101561110857600080fd5b5035612733565b34801561111b57600080fd5b506105b76004803603602081101561113257600080fd5b503561273f565b34801561114557600080fd5b506111636004803603602081101561115c57600080fd5b5035612754565b6040518087815260200186815260200185815260200184600160a060020a0316600160a060020a0316815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111e25781810151838201526020016111ca565b50505050905090810190601f16801561120f5780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191660009081526020819052604090205460ff1690565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112e25780601f106112b7576101008083540402835291602001916112e2565b820191906000526020600020905b8154815290600101906020018083116112c557829003601f168201915b505050505090505b90565b60006112f882612906565b151561130357600080fd5b50600090815260026020526040902054600160a060020a031690565b600061132a82611a63565b9050600160a060020a03838116908216141561134557600080fd5b33600160a060020a038216148061136157506113618133612705565b151561136c57600080fd5b6000828152600260205260408082208054600160a060020a031916600160a060020a0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006113d3336115a5565b15156113de57600080fd5b6113ed86868686866000612923565b9695505050505050565b606060118054806020026020016040519081016040528092919081815260200182805480156112e257602002820191906000526020600020905b815481526020019060010190808311611431575050505050905090565b61145733612014565b151561146257600080fd5b61146b81612c3c565b50565b60075490565b61147d336115a5565b151561148857600080fd5b8015156114df576040805160e560020a62461bcd02815260206004820152601060248201527f426173652055524920696e76616c696400000000000000000000000000000000604482015290519081900360640190fd5b6114eb600d8383613a39565b505050565b6114fa3382612c84565b151561150557600080fd5b6114eb838383612cdb565b61151933612014565b151561152457600080fd5b61146b81612cfa565b600061153883611af3565b821061154357600080fd5b600160a060020a038316600090815260056020526040902080548390811061156757fe5b906000526020600020015490505b92915050565b60009081526014602052604090206004015490565b60009081526014602052604090206003015490565b6000611575600c8363ffffffff612d4216565b6114eb8383836020604051908101604052806000815250611fd8565b6115de3382612c84565b1515611634576040805160e560020a62461bcd02815260206004820181905260248201527f43616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564604482015290519081900360640190fd5b61163d81612d79565b600090815260136020526040812055565b6060611659336115a5565b151561166457600080fd5b6000838152601460205260408120548491106116b8576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b60008481526014602052604090206002810154600190910154038381101561172a576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6f7420656e6f756768206c65667420696e2065646974696f6e000000000000604482015290519081900360640190fd5b606084604051908082528060200260200182016040528015611756578160200160208202803883390190505b50905060005b8581101561178e5761176e8888612d8b565b828281518110151561177c57fe5b6020908102909101015260010161175c565b509695505050505050565b60006117a4336115a5565b15156117af57600080fd5b600082815260146020526040812054839110611803576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b60008381526014602052604090206001810154600290910154849111611873576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e20736f6c64206f757400000000000000000000000000000000604482015290519081900360640190fd5b61187d8585612d8b565b95945050505050565b61188f33612dbb565b565b600d805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119175780601f106118ec57610100808354040283529160200191611917565b820191906000526020600020905b8154815290600101906020018083116118fa57829003601f168201915b505050505081565b600061192961146e565b821061193457600080fd5b600780548390811061194257fe5b90600052602060002001549050919050565b61195d336115a5565b151561196857600080fd5b6000828152601460205260408120548391106119bc576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b5060009182526014602052604090912060040155565b6119db336115a5565b15156119e657600080fd5b600083815260146020526040812054849110611a3a576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b6000848152601460205260409020611a56906006018484613a39565b5050505050565b600e5481565b600081815260016020526040812054600160a060020a031680151561157557600080fd5b600160a060020a038116600090815260156020908152604091829020805483518184028101840190945280845260609392830182828015611ae757602002820191906000526020600020905b815481526020019060010190808311611ad3575b50505050509050919050565b6000600160a060020a0382161515611b0a57600080fd5b50600160a060020a031660009081526003602052604090205490565b611b2f33612014565b1515611b3a57600080fd5b61146b81612e03565b611b4c336115a5565b1515611b5757600080fd5b600081815260146020526040812054829110611bab576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b506000908152601460205260409020600501805474ff000000000000000000000000000000000000000019169055565b600f5481565b60009081526014602052604090206005015474010000000000000000000000000000000000000000900460ff1690565b60009081526014602052604090206005810154600490910154600160a060020a0390911691565b60009081526014602052604090206001015490565b611c56336115a5565b1515611c6157600080fd5b600082815260146020526040812054839110611cb5576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b5060009182526014602052604090912060030155565b6060611cd682612e4b565b805480602002602001604051908101604052809291908181526020018280548015611ae75760200282019190600052602060002090815481526020019060010190808311611ad35750505050509050919050565b600081815260146020526040812060050154829074010000000000000000000000000000000000000000900460ff161515611daf576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e2064697361626c656400000000000000000000000000000000604482015290519081900360640190fd5b60008381526014602052604090206001810154600290910154849111611e1f576040805160e560020a62461bcd02815260206004820152601060248201527f45646974696f6e20736f6c64206f757400000000000000000000000000000000604482015290519081900360640190fd5b60008481526014602052604090206003810154341015611e89576040805160e560020a62461bcd02815260206004820152600e60248201527f4e6f7420656e6f75676820455448000000000000000000000000000000000000604482015290519081900360640190fd5b6000611e958787612d8b565b6003830154600584015460048501549293506113ed92600160a060020a0390911690612e65565b600a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156112e25780601f106112b7576101008083540402835291602001916112e2565b60006115753383611799565b600160a060020a038216331415611f3f57600080fd5b336000818152600460209081526040808320600160a060020a03871680855290835292819020805460ff1916861515908117909155815190815290519293927f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31929181900390910190a35050565b60105481565b6000611fbe336115a5565b1515611fc957600080fd5b6113ed86868686866001612923565b611fe38484846114f0565b611fef84848484612f62565b1515611ffa57600080fd5b50505050565b612009336115a5565b151561163457600080fd5b6000611575600b8363ffffffff612d4216565b601180548290811061203557fe5b600091825260209091200154905081565b60008181526014602052604081206002810154600182015461206d9163ffffffff6130de16565b9392505050565b60608161208081612906565b15156120d6576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b60008381526013602090815260409182902054600d8054845160026001831615610100026000190190921691909104601f810185900485028201850190955284815291936122139383018282801561216f5780601f106121445761010080835404028352916020019161216f565b820191906000526020600020905b81548152906001019060200180831161215257829003601f168201915b5050506000858152601460209081526040918290206006018054835160026001831615610100026000190190921691909104601f8101849004840282018401909452838152945092508301828280156122095780601f106121de57610100808354040283529160200191612209565b820191906000526020600020905b8154815290600101906020018083116121ec57829003601f168201915b50505050506130f3565b949350505050565b612224336115a5565b151561222f57600080fd5b60128054600160a060020a031916600160a060020a0392909216919091179055565b600081815260146020908152604091829020600d80548451601f60026000196101006001861615020190931692909204918201859004850281018501909552808552606094929361206d939291908301828280156122f05780601f106122c5576101008083540402835291602001916122f0565b820191906000526020600020905b8154815290600101906020018083116122d357829003601f168201915b5050505060068401805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b60008181526014602052604081205481908190819081908190606090889083106123b4576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b600089815260146020908152604091829020600180820154600280840154600385015460048601546005870154600d80548b516101009982161599909902600019011695909504601f81018a90048a0288018a01909a5289875296989497929691959094600160a060020a038316947401000000000000000000000000000000000000000090930460ff16936124f99391908301828280156124975780601f1061246c57610100808354040283529160200191612497565b820191906000526020600020905b81548152906001019060200180831161247a57829003601f168201915b5050505060068a01805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b82925098509850985098509850985098505050919395979092949650565b600090815260146020526040902060050154600160a060020a031690565b61188f33612cfa565b612547336115a5565b151561255257600080fd5b6000828152601460205260408120548391106125a6576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b600083815260146020908152604080832060168352818420546005820154600160a060020a031685526015909352922080548190839081106125e457fe5b60009182526020808320909101829055600160a060020a03909616808252601587526040808320805460018101825590845288842081018a9055988352601690975295902095909555506005018054600160a060020a0319169092179091555050565b612650336115a5565b151561265b57600080fd5b6000818152601460205260408120548291106126af576040805160e560020a62461bcd0281526020600482015260126024820152600080516020613b60833981519152604482015290519081900360640190fd5b506000908152601460205260409020600501805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000179055565b601254600160a060020a031681565b600160a060020a03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60006115753383611d2a565b60009081526014602052604090206002015490565b600080600080600060608661276881612906565b15156127be576040805160e560020a62461bcd02815260206004820152601760248201527f546f6b656e20494420646f6573206e6f74206578697374000000000000000000604482015290519081900360640190fd5b600088815260136020908152604080832054808452601490925290912060018101546002820154600583015484929190600160a060020a03166128008e611a63565b600d8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526128ef939092909183018282801561288d5780601f106128625761010080835404028352916020019161288d565b820191906000526020600020905b81548152906001019060200180831161287057829003601f168201915b5050505060068901805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529350908301828280156122095780601f106121de57610100808354040283529160200191612209565b949f939e50919c509a509850909650945050505050565b600090815260016020526040902054600160a060020a0316151590565b600080871180156129365750600e548711155b151561298c576040805160e560020a62461bcd02815260206004820152601460248201527f45646974696f6e2073697a6520696e76616c6964000000000000000000000000604482015290519081900360640190fd5b6000851015801561299e575060648511155b15156129f4576040805160e560020a62461bcd02815260206004820152601960248201527f41727469737420636f6d6d697373696f6e20696e76616c696400000000000000604482015290519081900360640190fd5b600160a060020a0384161515612a54576040805160e560020a62461bcd02815260206004820152601660248201527f417274697374206163636f756e74206d697373696e6700000000000000000000604482015290519081900360640190fd5b82511515612aac576040805160e560020a62461bcd02815260206004820152601160248201527f546f6b656e2055524920696e76616c6964000000000000000000000000000000604482015290519081900360640190fd5b6000612ac5600e5460105461312890919063ffffffff16565b9050610100604051908101604052808281526020018981526020016000815260200188815260200187815260200186600160a060020a0316815260200184151581526020018581525060146000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a815481600160a060020a030219169083600160a060020a0316021790555060c08201518160050160146101000a81548160ff02191690831515021790555060e0820151816006019080519060200190612bbc929190613ab7565b5050506010819055601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6801819055612c03858261313a565b60405181907f962bb64b059ad60d491bef43125921210925c52b11ff1cc093409113c8c5fe3790600090a2506001979650505050505050565b612c4d600c8263ffffffff61317616565b604051600160a060020a038216907fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f90600090a250565b600080612c9083611a63565b905080600160a060020a031684600160a060020a03161480612ccb575083600160a060020a0316612cc0846112ed565b600160a060020a0316145b8061221357506122138185612705565b612ce68383836131c4565b612cf083826132d3565b6114eb82826133c3565b612d0b600c8263ffffffff61340116565b604051600160a060020a038216907f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b690600090a250565b6000600160a060020a0382161515612d5957600080fd5b50600160a060020a03166000908152602091909152604090205460ff1690565b61146b612d8582611a63565b8261344d565b600080612d978361347d565b9050612da384826134e0565b60008181526013602052604090209290925550919050565b612dcc600b8263ffffffff61340116565b604051600160a060020a038216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b612e14600b8263ffffffff61317616565b604051600160a060020a038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b600160a060020a0316600090815260056020526040902090565b60008311156114eb576000811115612f29576000612e9a82612e8e86606463ffffffff6134fd16565b9063ffffffff61352116565b604051909150600160a060020a0384169082156108fc029083906000818181858888f19350505050158015612ed3573d6000803e3d6000fd5b506000612ee6348363ffffffff6130de16565b601254604051919250600160a060020a03169082156108fc029083906000818181858888f19350505050158015612f21573d6000803e3d6000fd5b5050506114eb565b601254604051600160a060020a03909116903480156108fc02916000818181858888f19350505050158015611ffa573d6000803e3d6000fd5b6000612f7684600160a060020a031661354c565b1515612f8457506001612213565b6040517f150b7a020000000000000000000000000000000000000000000000000000000081523360048201818152600160a060020a03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015613017578181015183820152602001612fff565b50505050905090810190601f1680156130445780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561306657600080fd5b505af115801561307a573d6000803e3d6000fd5b505050506040513d602081101561309057600080fd5b50517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f150b7a020000000000000000000000000000000000000000000000000000000014915050949350505050565b6000828211156130ed57600080fd5b50900390565b60408051602081810183526000808352835180830185528181528451928301909452815260609261206d928692869290613554565b60008282018381101561206d57600080fd5b600160a060020a039091166000908152601560209081526040808320805460018101825590845282842081018590559383526016909152902055565b600160a060020a038116151561318b57600080fd5b6131958282612d42565b1561319f57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19166001179055565b82600160a060020a03166131d782611a63565b600160a060020a0316146131ea57600080fd5b600160a060020a03821615156131ff57600080fd5b613208816137a9565b600160a060020a03831660009081526003602052604090205461323290600163ffffffff6130de16565b600160a060020a03808516600090815260036020526040808220939093559084168152205461326890600163ffffffff61312816565b600160a060020a03808416600081815260036020908152604080832095909555858252600190528381208054600160a060020a031916831790559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600160a060020a0382166000908152600560205260408120546132fd90600163ffffffff6130de16565b60008381526006602052604090205490915080821461339a57600160a060020a038416600090815260056020526040812080548490811061333a57fe5b90600052602060002001549050806005600087600160a060020a0316600160a060020a031681526020019081526020016000208381548110151561337a57fe5b600091825260208083209091019290925591825260069052604090208190555b600160a060020a0384166000908152600560205260409020805490611a56906000198301613b25565b600160a060020a0390911660009081526005602081815260408084208054868652600684529185208290559282526001810183559183529091200155565b600160a060020a038116151561341657600080fd5b6134208282612d42565b151561342b57600080fd5b600160a060020a0316600090815260209190915260409020805460ff19169055565b61345782826137e4565b61346182826132d3565b600081815260066020526040812055613479816138a3565b5050565b60008181526014602052604081206002810154815483916134a4919063ffffffff61312816565b60028301549091506134bd90600163ffffffff61312816565b6002830155600f546134d690600163ffffffff61312816565b600f559392505050565b6134ea8282613941565b6134f482826133c3565b613479816139f5565b600080821161350b57600080fd5b6000828481151561351857fe5b04949350505050565b600082151561353257506000611575565b82820282848281151561354157fe5b041461206d57600080fd5b6000903b1190565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156135a8576020820181803883390190505b509050806000805b885181101561360e5788818151811015156135c757fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156135ee57fe5b906020010190600160f860020a031916908160001a9053506001016135b0565b5060005b875181101561367057878181518110151561362957fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561365057fe5b906020010190600160f860020a031916908160001a905350600101613612565b5060005b86518110156136d257868181518110151561368b57fe5b90602001015160f860020a900460f860020a0283838060010194508151811015156136b257fe5b906020010190600160f860020a031916908160001a905350600101613674565b5060005b85518110156137345785818151811015156136ed57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561371457fe5b906020010190600160f860020a031916908160001a9053506001016136d6565b5060005b845181101561379657848181518110151561374f57fe5b90602001015160f860020a900460f860020a02838380600101945081518110151561377657fe5b906020010190600160f860020a031916908160001a905350600101613738565b50909d9c50505050505050505050505050565b600081815260026020526040902054600160a060020a03161561146b5760009081526002602052604090208054600160a060020a0319169055565b81600160a060020a03166137f782611a63565b600160a060020a03161461380a57600080fd5b613813816137a9565b600160a060020a03821660009081526003602052604090205461383d90600163ffffffff6130de16565b600160a060020a038316600081815260036020908152604080832094909455848252600190528281208054600160a060020a03191690559151839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6007546000906138ba90600163ffffffff6130de16565b600083815260086020526040812054600780549394509092849081106138dc57fe5b90600052602060002001549050806007838154811015156138f957fe5b6000918252602080832090910192909255828152600890915260409020829055600780549061392c906000198301613b25565b50505060009182525060086020526040812055565b600160a060020a038216151561395657600080fd5b61395f81612906565b1561396957600080fd5b60008181526001602081815260408084208054600160a060020a031916600160a060020a03881690811790915584526003909152909120546139aa91613128565b600160a060020a0383166000818152600360205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600780546000838152600860205260408120829055600182018355919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880155565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613a7a5782800160ff19823516178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578235825591602001919060010190613a8c565b50613ab3929150613b45565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613af857805160ff1916838001178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578251825591602001919060010190613b0a565b8154818355818111156114eb576000838152602090206114eb9181019083015b6112ea91905b80821115613ab35760008155600101613b4b56fe45646974696f6e20494420696e76616c69640000000000000000000000000000a165627a7a72305820043294eb099e7add67a3b18f14bbe8aa5fa9301f2eed3d172999a87f5381967d0029

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000004ff3eb0a7f68d6eb80fcf5039032ec927131ef2e

-----Decoded View---------------
Arg [0] : _rendarAddress (address): 0x4FF3Eb0a7f68D6eB80fCf5039032ec927131eF2e

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004ff3eb0a7f68d6eb80fcf5039032ec927131ef2e


Deployed Bytecode Sourcemap

35553:16907:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7154:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7154:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7154:135:0;-1:-1:-1;;7154:135:0;;;;;;;;;;;;;;;;;;;;;35179:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35179:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;35179:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11247:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11247:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11247:154:0;;;;;;;-1:-1:-1;;;;;11247:154:0;;;;;;;;;;;;;;10655:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10655:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10655:299:0;;;;;;;;;;;42647:377;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42647:377:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;42647:377:0;;;;;;;;;;;;;-1:-1:-1;;;;;42647:377:0;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;42647:377:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42647:377:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;42647:377:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42647:377:0;;-1:-1:-1;42647:377:0;;-1:-1:-1;;;;;42647:377:0;50441:115;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50441:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;50441:115:0;;;;;;;;;;;;;;;;;31718:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31718:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31718:110:0;-1:-1:-1;;;;;31718:110:0;;;21754:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21754:96:0;;;;;;;;;;;;;;;;;;;;47494:207;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47494:207:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47494:207:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;47494:207:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;47494:207:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;47494:207:0;;-1:-1:-1;47494:207:0;-1:-1:-1;47494:207:0;;12837:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12837:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12837:184:0;;;;;;;;;;;;;;;;;;31836:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31836:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31836:116:0;-1:-1:-1;;;;;31836:116:0;;;21411:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21411:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;21411:185:0;;;;;;;;;49706:251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49706:251:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49706:251:0;;;49153:235;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49153:235:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49153:235:0;;;31591:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31591:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31591:119:0;-1:-1:-1;;;;;31591:119:0;;;13674:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13674:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13674:134:0;;;;;;;;;;;;;;;;;;41721:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41721:211:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41721:211:0;;;40761:605;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40761:605:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40761:605:0;;;;;;;;;;;;;;40375:237;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40375:237:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40375:237:0;;;;;;;;;30407:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30407:93:0;;;;35892:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35892:59:0;;;;22195:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22195:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22195:151:0;;;46391:241;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46391:241:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46391:241:0;;;;;;;;46640:224;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46640:224:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46640:224:0;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;46640:224:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46640:224:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;46640:224:0;;-1:-1:-1;46640:224:0;-1:-1:-1;46640:224:0;;36660:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36660:34:0;;;;10043:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10043:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10043:181:0;;;50564:162;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50564:162:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50564:162:0;-1:-1:-1;;;;;50564:162:0;;;9659:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9659:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9659:153:0;-1:-1:-1;;;;;9659:153:0;;;30283:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30283:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30283:116:0;-1:-1:-1;;;;;30283:116:0;;;45041:184;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45041:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45041:184:0;;;36755:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36755:32:0;;;;50215:218;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50215:218:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50215:218:0;;;49396:302;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49396:302:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49396:302:0;;;;;;;-1:-1:-1;;;;;49396:302:0;;;;;;;;;;;;;;;;;;;;;48656:239;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48656:239:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48656:239:0;;;46872:212;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46872:212:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46872:212:0;;;;;;;;47954:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47954:126:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47954:126:0;-1:-1:-1;;;;;47954:126:0;;;38746:629;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;38746:629:0;;;;;;;;;35378:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35378:89:0;;;;40111:124;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40111:124:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40111:124:0;;;11701:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11701:217:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;11701:217:0;;;;;;;;;;;36857:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36857:35:0;;;;42271:368;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42271:368:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;42271:368:0;;;;;;;;;;;;;-1:-1:-1;;;;;42271:368:0;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;42271:368:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;42271:368:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;42271:368:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;42271:368:0;;-1:-1:-1;42271:368:0;;-1:-1:-1;;;;;42271:368:0;14527:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14527:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;14527:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;14527:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14527:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;14527:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14527:214:0;;-1:-1:-1;14527:214:0;;-1:-1:-1;;;;;14527:214:0;42004:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42004:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42004:137:0;;;30150:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30150:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30150:125:0;-1:-1:-1;;;;;30150:125:0;;;36940:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36940:32:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36940:32:0;;;51493:251;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51493:251:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51493:251:0;;;48088:279;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48088:279:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48088:279:0;;;47709:145;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47709:145:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47709:145:0;-1:-1:-1;;;;;47709:145:0;;;48375:273;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48375:273:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48375:273:0;;;50734:751;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50734:751:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50734:751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50734:751:0;-1:-1:-1;;;;;50734:751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;50734:751:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49965:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49965:242:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49965:242:0;;;31960:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31960:87:0;;;;45423:960;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45423:960:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45423:960:0;;;;;;-1:-1:-1;;;;;45423:960:0;;;45233:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45233:182:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45233:182:0;;;37015:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37015:36:0;;;;12247:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12247:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12247:147:0;;;;;;;;;;;38598:140;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38598:140:0;;;48903:242;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48903:242:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48903:242:0;;;51752:703;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51752:703:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;51752:703:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;51752:703:0;-1:-1:-1;;;;;51752:703:0;;;;;;-1:-1:-1;;;;;51752:703:0;-1:-1:-1;;;;;51752:703:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;51752:703:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7154:135;-1:-1:-1;;7248:33:0;7224:4;7248:33;;;;;;;;;;;;;;7154:135::o;35179:85::-;35251:5;35244:12;;;;;;;;-1:-1:-1;;35244:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35218:13;;35244:12;;35251:5;;35244:12;;35251:5;35244:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35179:85;;:::o;11247:154::-;11306:7;11334:16;11342:7;11334;:16::i;:::-;11326:25;;;;;;;;-1:-1:-1;11369:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11369:24:0;;11247:154::o;10655:299::-;10719:13;10735:16;10743:7;10735;:16::i;:::-;10719:32;-1:-1:-1;;;;;;10770:11:0;;;;;;;;10762:20;;;;;;10801:10;-1:-1:-1;;;;;10801:19:0;;;;:58;;;10824:35;10841:5;10848:10;10824:16;:35::i;:::-;10793:67;;;;;;;;10873:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;10873:29:0;-1:-1:-1;;;;;10873:29:0;;;;;;;;;10918:28;;10873:24;;10918:28;;;;;;;10655:299;;;:::o;42647:377::-;42889:13;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;42922:94;42937:12;42951:11;42964:17;42983:14;42999:9;43010:5;42922:14;:94::i;:::-;42915:101;42647:377;-1:-1:-1;;;;;;42647:377:0:o;50441:115::-;50485:28;50533:15;50526:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50441:115;:::o;31718:110::-;30093:28;30110:10;30093:16;:28::i;:::-;30085:37;;;;;;;;31796:24;31812:7;31796:15;:24::i;:::-;31718:110;:::o;21754:96::-;21825:10;:17;21754:96;:::o;47494:207::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;47605:30;;;47597:59;;;;;-1:-1:-1;;;;;47597:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;47667:26;:12;47682:11;;47667:26;:::i;:::-;;47494:207;;:::o;12837:184::-;12928:39;12947:10;12959:7;12928:18;:39::i;:::-;12920:48;;;;;;;;12981:32;12995:4;13001:2;13005:7;12981:13;:32::i;31836:116::-;30093:28;30110:10;30093:16;:28::i;:::-;30085:37;;;;;;;;31917:27;31936:7;31917:18;:27::i;21411:185::-;21491:7;21527:16;21537:5;21527:9;:16::i;:::-;21519:24;;21511:33;;;;;;-1:-1:-1;;;;;21562:19:0;;;;;;:12;:19;;;;;:26;;21582:5;;21562:26;;;;;;;;;;;;;;21555:33;;21411:185;;;;;:::o;49706:251::-;49783:25;49862:37;;;:25;:37;;;;;49917:32;;;;49706:251::o;49153:235::-;49226:19;49299:37;;;:25;:37;;;;;49354:26;;;;49153:235::o;31591:119::-;31652:4;31676:26;:13;31694:7;31676:26;:17;:26;:::i;13674:134::-;13761:39;13778:4;13784:2;13788:7;13761:39;;;;;;;;;;;;;:16;:39::i;41721:211::-;41778:39;41797:10;41809:7;41778:18;:39::i;:::-;41770:84;;;;;;;-1:-1:-1;;;;;41770:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41865:14;41871:7;41865:5;:14::i;:::-;41897:27;;;;:18;:27;;;;;41890:34;41721:211::o;40761:605::-;40910:26;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;40877:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;40951:26;41032:37;;;:25;:37;;;;;:51;;;;40980:49;;;;;:103;41102:28;;;;41094:67;;;;;-1:-1:-1;;;;;41094:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;41174:23;41214:6;41200:21;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;41200:21:0;-1:-1:-1;41174:47:0;-1:-1:-1;41237:6:0;41232:103;41253:6;41249:1;:10;41232:103;;;41293:30;41307:3;41312:10;41293:13;:30::i;:::-;41281:6;41288:1;41281:9;;;;;;;;;;;;;;;;;;:42;41261:3;;41232:103;;;-1:-1:-1;41352:6:0;40761:605;-1:-1:-1;;;;;;40761:605:0:o;40375:237::-;40538:16;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;40467:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;37989:37;;;;:25;:37;;;;;:49;;;;37935:51;;;;;40505:10;;-1:-1:-1;37927:132:0;;;;;-1:-1:-1;;;;;37927:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40574:30;40588:3;40593:10;40574:13;:30::i;:::-;40567:37;40375:237;-1:-1:-1;;;;;40375:237:0:o;30407:93::-;30459:33;30481:10;30459:21;:33::i;:::-;30407:93::o;35892:59::-;;;;;;;;;;;;;;;-1:-1:-1;;35892:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22195:151::-;22253:7;22289:13;:11;:13::i;:::-;22281:21;;22273:30;;;;;;22321:10;:17;;22332:5;;22321:17;;;;;;;;;;;;;;22314:24;;22195:151;;;:::o;46391:241::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;46527:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;-1:-1:-1;46550:37:0;;;;:25;:37;;;;;;:54;;:74;46391:241::o;46640:224::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;46775:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;46798:37;;;;:25;:37;;;;;:58;;:46;;46847:9;;46798:58;:::i;:::-;;31574:1;46640:224;;;:::o;36660:34::-;;;;:::o;10043:181::-;10098:7;10134:20;;;:11;:20;;;;;;-1:-1:-1;;;;;10134:20:0;10173:19;;;10165:28;;;;;50564:162;-1:-1:-1;;;;;50683:35:0;;;;;;:18;:35;;;;;;;;;50676:42;;;;;;;;;;;;;;;;;50635:28;;50676:42;;;50683:35;50676:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50564:162;;;:::o;9659:153::-;9714:7;-1:-1:-1;;;;;9742:19:0;;;;9734:28;;;;;;-1:-1:-1;;;;;;9780:24:0;;;;;:17;:24;;;;;;;9659:153::o;30283:116::-;30093:28;30110:10;30093:16;:28::i;:::-;30085:37;;;;;;;;30364:27;30383:7;30364:18;:27::i;45041:184::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;45142:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;-1:-1:-1;45212:5:0;45165:37;;;:25;:37;;;;;:44;;:52;;-1:-1:-1;;45165:52:0;;;45041:184::o;36755:32::-;;;;:::o;50215:218::-;50282:12;50348:37;;;:25;:37;;;;;50403:22;;;;;;;;;50215:218::o;49396:302::-;49467:22;49570:37;;;:25;:37;;;;;49626:29;;;;49657:32;;;;;-1:-1:-1;;;;;49626:29:0;;;;49396:302::o;48656:239::-;48728:23;48805:37;;;:25;:37;;;;;48860:27;;;;48656:239::o;46872:212::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;46991:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;-1:-1:-1;47014:37:0;;;;:25;:37;;;;;;:48;;:62;46872:212::o;47954:126::-;48015:16;48051:21;48066:5;48051:14;:21::i;:::-;48044:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47954:126;;;:::o;38746:629::-;38901:16;37606:37;;;:25;:37;;;;;:44;;;:37;;:44;;;;;37598:73;;;;;;;-1:-1:-1;;;;;37598:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37989:37;;;;:25;:37;;;;;:49;;;;37935:51;;;;;38860:10;;-1:-1:-1;37927:132:0;;;;;-1:-1:-1;;;;;37927:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38930:38;38971:37;;;:25;:37;;;;;39040:26;;;;39027:9;:39;;39019:66;;;;;-1:-1:-1;;;;;39019:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39125:15;39143:30;39157:3;39162:10;39143:13;:30::i;:::-;39248:26;;;;39276:29;;;;39307:32;;;;39125:48;;-1:-1:-1;39236:104:0;;-1:-1:-1;;;;;39276:29:0;;;;39236:11;:104::i;35378:89::-;35452:7;35445:14;;;;;;;;-1:-1:-1;;35445:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35419:13;;35445:14;;35452:7;;35445:14;;35452:7;35445:14;;;;;;;;;;;;;;;;;;;;;;;;40111:124;40161:16;40197:30;40204:10;40216;40197:6;:30::i;11701:217::-;-1:-1:-1;;;;;11781:16:0;;11787:10;11781:16;;11773:25;;;;;;11828:10;11809:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;11809:34:0;;;;;;;;;;;;:45;;-1:-1:-1;;11809:45:0;;;;;;;;;;11870:40;;;;;;;11809:34;;11828:10;11870:40;;;;;;;;;;;11701:217;;:::o;36857:35::-;;;;:::o;42271:368::-;42505:13;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;42538:93;42553:12;42567:11;42580:17;42599:14;42615:9;42626:4;42538:14;:93::i;14527:214::-;14634:31;14647:4;14653:2;14657:7;14634:12;:31::i;:::-;14684:48;14707:4;14713:2;14717:7;14726:5;14684:22;:48::i;:::-;14676:57;;;;;;;;14527:214;;;;:::o;42004:137::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;30150:125;30214:4;30238:29;:16;30259:7;30238:29;:20;:29;:::i;36940:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36940:32:0;:::o;51493:251::-;51558:7;51619:37;;;:25;:37;;;;;51706:29;;;;51674:27;;;;:62;;;:31;:62;:::i;:::-;51667:69;51493:251;-1:-1:-1;;;51493:251:0:o;48088:279::-;48189:13;48165:8;38150:17;38158:8;38150:7;:17::i;:::-;38142:53;;;;;;;-1:-1:-1;;;;;38142:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;48215:17;48235:28;;;:18;:28;;;;;;;;;;48299:12;48281:78;;;;;;;;;;;-1:-1:-1;;48281:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;48235:28;;48281:78;;;;48299:12;48281:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;48313:36:0;;;;:25;:36;;;;;;;;;:45;;48281:78;;;;;;;;;;;-1:-1:-1;;48281:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48313:45:0;-1:-1:-1;48281:78:0;;48313:45;48281:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:17;:78::i;:::-;48274:85;48088:279;-1:-1:-1;;;;48088:279:0:o;47709:145::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;47816:13;:30;;-1:-1:-1;;;;;;47816:30:0;-1:-1:-1;;;;;47816:30:0;;;;;;;;;;47709:145::o;48375:273::-;48487:38;48528:37;;;:25;:37;;;;;;;;;48601:12;48583:57;;;;;;-1:-1:-1;;48583:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48451:23;;48528:37;;48583:57;;;48601:12;48583:57;;;48601:12;48583:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;48615:24:0;;;48583:57;;;;;;;;;;;;;-1:-1:-1;;48583:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48583:57:0;;;48615:24;48583:57;;;;;;;;;;;;;;;;;;;;;;;;50734:751;50843:20;37764:37;;;:25;:37;;;;;:47;50843:20;;;;;;;;;;51029:23;;50807:10;;37764:51;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;51071:38;51112:37;;;:25;:37;;;;;;;;;51178:27;;;;;51216:29;;;;;51256:26;;;;51293:32;;;;51336:29;;;;51427:12;51409:57;;;;51336:29;51409:57;;;;;;;;-1:-1:-1;;51409:57:0;;;;;;;;;;;;;;;;;;;;;;;;51112:37;;51178:27;;51216:29;;51256:26;;51293:32;;-1:-1:-1;;;;;51336:29:0;;;51376:22;;;;;;;51409:57;;51427:12;51409:57;;;51427:12;51409:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;51441:24:0;;;51409:57;;;;;;;;;;;;;-1:-1:-1;;51409:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51409:57:0;;;51441:24;51409:57;;;;;;;;;;;;;;;;;;;;;;;;;51160:317;;;;;;;;;;;;;;;;;;50734:751;;;;;;;;;;:::o;49965:242::-;50039:22;50115:37;;;:25;:37;;;;;50170:29;;;-1:-1:-1;;;;;50170:29:0;;49965:242::o;31960:87::-;32009:30;32028:10;32009:18;:30::i;45423:960::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;45561:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;45586:46;45635:37;;;:25;:37;;;;;;;;45714:22;:34;;;;;;45875:37;;;;-1:-1:-1;;;;;45875:37:0;45856:57;;:18;:57;;;;;45979:39;;45856:57;;45714:34;;45979:39;;;;;;;;;;;;;;;;;45972:46;;;-1:-1:-1;;;;;46104:34:0;;;;;;:18;:34;;;;;;:41;;39:1:-1;23:18;;45:23;;46156:51:0;;;;;;;;;;;46218:34;;;:22;:34;;;;;;:59;;;;-1:-1:-1;46321:37:0;;:54;;-1:-1:-1;;;;;;46321:54:0;;;;;;;-1:-1:-1;;45423:960:0:o;45233:182::-;31537:25;31551:10;31537:13;:25::i;:::-;31529:34;;;;;;;;37814:1;37764:37;;;:25;:37;;;;;:47;45333:10;;-1:-1:-1;37756:82:0;;;;;-1:-1:-1;;;;;37756:82:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;37756:82:0;;;;;;;;;;;;;;;-1:-1:-1;45356:37:0;;;;:25;:37;;;;;:44;;:51;;-1:-1:-1;;45356:51:0;;;;;45233:182::o;37015:36::-;;;-1:-1:-1;;;;;37015:36:0;;:::o;12247:147::-;-1:-1:-1;;;;;12351:25:0;;;12327:4;12351:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12247:147::o;38598:140::-;38660:16;38696:34;38707:10;38719;38696;:34::i;48903:242::-;48977:22;49053:37;;;:25;:37;;;;;49108:29;;;;48903:242::o;51752:703::-;51855:18;51884:20;51915:22;51948;51981:14;52006:23;51821:8;38150:17;38158:8;38150:7;:17::i;:::-;38142:53;;;;;;;-1:-1:-1;;;;;38142:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;52048:17;52068:28;;;:18;:28;;;;;;;;;52148:36;;;:25;:36;;;;;;52233:27;;;;52271:29;;;;52311;;;;52068:28;;52233:27;52271:29;-1:-1:-1;;;;;52311:29:0;52351:17;52087:8;52351:7;:17::i;:::-;52397:12;52379:57;;;;;;;;-1:-1:-1;;52379:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52397:12;;52379:57;;52397:12;52379:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;52411:24:0;;;52379:57;;;;;;;;;;;;;-1:-1:-1;;52379:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52379:57:0;;;52411:24;52379:57;;;;;;;;;;;;;;;;;;;;;;;;;52195:252;;;;-1:-1:-1;52195:252:0;;-1:-1:-1;52195:252:0;-1:-1:-1;52195:252:0;-1:-1:-1;52195:252:0;;-1:-1:-1;51752:703:0;-1:-1:-1;;;;;51752:703:0:o;14937:155::-;14994:4;15027:20;;;:11;:20;;;;;;-1:-1:-1;;;;;15027:20:0;15065:19;;;14937:155::o;43032:1347::-;43275:13;43371:1;43356:12;:16;:47;;;;;43392:11;;43376:12;:27;;43356:47;43348:80;;;;;;;-1:-1:-1;;;;;43348:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43468:1;43447:17;:22;;:50;;;;;43494:3;43473:17;:24;;43447:50;43439:88;;;;;;;-1:-1:-1;;;;;43439:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43546:28:0;;;;43538:63;;;;;-1:-1:-1;;;;;43538:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43620:23;;:28;;43612:58;;;;;-1:-1:-1;;;;;43612:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43737:18;43758:37;43783:11;;43758:20;;:24;;:37;;;;:::i;:::-;43737:58;;43875:251;;;;;;;;;43904:10;43875:251;;;;43929:12;43875:251;;;;43956:1;43875:251;;;;43998:11;43875:251;;;;44024:17;43875:251;;;;44056:14;-1:-1:-1;;;;;43875:251:0;;;;;44085:6;43875:251;;;;;;44106:9;43875:251;;;43835:25;:37;43861:10;43835:37;;;;;;;;;;;:291;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43835:291:0;;;;;-1:-1:-1;;;;;43835:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;44139:20:0;:33;;;44185:15;27:10:-1;;39:1;23:18;;45:23;;-1:-1;44185:32:0;;;;;;;;;44230:50;44253:14;44162:10;44230:22;:50::i;:::-;44321:26;;44336:10;;44321:26;;;;;-1:-1:-1;44367:4:0;;43032:1347;-1:-1:-1;;;;;;;43032:1347:0:o;32055:137::-;32117:26;:13;32135:7;32117:26;:17;:26;:::i;:::-;32159:25;;-1:-1:-1;;;;;32159:25:0;;;;;;;;32055:137;:::o;15464:249::-;15549:4;15566:13;15582:16;15590:7;15582;:16::i;:::-;15566:32;;15628:5;-1:-1:-1;;;;;15617:16:0;:7;-1:-1:-1;;;;;15617:16:0;;:51;;;;15661:7;-1:-1:-1;;;;;15637:31:0;:20;15649:7;15637:11;:20::i;:::-;-1:-1:-1;;;;;15637:31:0;;15617:51;:87;;;;15672:32;15689:5;15696:7;15672:16;:32::i;22729:245::-;22815:38;22835:4;22841:2;22845:7;22815:19;:38::i;:::-;22866:47;22899:4;22905:7;22866:32;:47::i;:::-;22926:40;22954:2;22958:7;22926:27;:40::i;32200:145::-;32265:29;:13;32286:7;32265:29;:20;:29;:::i;:::-;32310:27;;-1:-1:-1;;;;;32310:27:0;;;;;;;;32200:145;:::o;29320:165::-;29392:4;-1:-1:-1;;;;;29417:21:0;;;;29409:30;;;;;;-1:-1:-1;;;;;;29457:20:0;:11;:20;;;;;;;;;;;;;;;29320:165::o;17032:92::-;17084:32;17090:16;17098:7;17090;:16::i;:::-;17108:7;17084:5;:32::i;41374:265::-;41448:16;41477:15;41495:24;41508:10;41495:12;:24::i;:::-;41477:42;;41532:19;41538:3;41543:7;41532:5;:19::i;:::-;41564:27;;;;:18;:27;;;;;:40;;;;-1:-1:-1;41564:27:0;41374:265;-1:-1:-1;41374:265:0:o;30662:154::-;30730:32;:16;30754:7;30730:32;:23;:32;:::i;:::-;30778:30;;-1:-1:-1;;;;;30778:30:0;;;;;;;;30662:154;:::o;30508:146::-;30573:29;:16;30594:7;30573:29;:20;:29;:::i;:::-;30618:28;;-1:-1:-1;;;;;30618:28:0;;;;;;;;30508:146;:::o;24303:126::-;-1:-1:-1;;;;;24402:19:0;24365:17;24402:19;;;:12;:19;;;;;;24303:126::o;39383:587::-;39524:1;39510:11;:15;39506:457;;;39569:1;39548:18;:22;39544:408;;;39593:21;39617:44;39642:18;39617:20;:11;39633:3;39617:20;:15;:20;:::i;:::-;:24;:44;:24;:44;:::i;:::-;39680:39;;39593:68;;-1:-1:-1;;;;;;39680:24:0;;;:39;;;;;39593:68;;39680:39;;;;39593:68;39680:24;:39;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;39740:27:0;39770:28;:9;39784:13;39770:28;:13;:28;:::i;:::-;39817:13;;:43;;39740:58;;-1:-1:-1;;;;;;39817:13:0;;:43;;;;;39740:58;;39817:13;:43;:13;:43;39740:58;39817:13;:43;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39817:43:0;39544:408;;;;;39903:13;;:33;;-1:-1:-1;;;;;39903:13:0;;;;39926:9;39903:33;;;;;:13;:33;:13;:33;39926:9;39903:13;:33;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;18455:356:0;18577:4;18604:15;:2;-1:-1:-1;;;;;18604:13:0;;:15::i;:::-;18603:16;18599:60;;;-1:-1:-1;18643:4:0;18636:11;;18599:60;18687:70;;;;;18724:10;18687:70;;;;;;-1:-1:-1;;;;;18687:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18671:13;;18687:36;;;;;;18724:10;;18736:4;;18742:7;;18751:5;;18687:70;;;;;;;;;;;18671:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;18687:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18687:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18687:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18687:70:0;-1:-1:-1;;18776:26:0;18786:16;18776:26;;-1:-1:-1;;18455:356:0;;;;;;:::o;4453:150::-;4511:7;4539:6;;;;4531:15;;;;;;-1:-1:-1;4569:5:0;;;4453:150::o;32514:168::-;32645:29;;;;;;;;;-1:-1:-1;32645:29:0;;;;;;;;;;;;;;;;;;;;;;;32592:33;;32645:29;;32655:2;;32659;;32645:29;:9;:29::i;4689:150::-;4747:7;4779:5;;;4803:6;;;;4795:15;;;;;47092:296;-1:-1:-1;;;;;47215:33:0;;;47186:26;47215:33;;;:18;:33;;;;;;;;:40;;39:1:-1;23:18;;45:23;;47266:49:0;;;;;;;;;;;47326:33;;;:22;:33;;;;;:54;47092:296::o;28772:186::-;-1:-1:-1;;;;;28849:21:0;;;;28841:30;;;;;;28891:18;28895:4;28901:7;28891:3;:18::i;:::-;28890:19;28882:28;;;;;;-1:-1:-1;;;;;28923:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;28923:27:0;28946:4;28923:27;;;28772:186::o;17507:414::-;17621:4;-1:-1:-1;;;;;17601:24:0;:16;17609:7;17601;:16::i;:::-;-1:-1:-1;;;;;17601:24:0;;17593:33;;;;;;-1:-1:-1;;;;;17645:16:0;;;;17637:25;;;;;;17675:23;17690:7;17675:14;:23::i;:::-;-1:-1:-1;;;;;17737:23:0;;;;;;:17;:23;;;;;;:30;;17765:1;17737:30;:27;:30;:::i;:::-;-1:-1:-1;;;;;17711:23:0;;;;;;;:17;:23;;;;;;:56;;;;17802:21;;;;;;;:28;;17828:1;17802:28;:25;:28;:::i;:::-;-1:-1:-1;;;;;17778:21:0;;;;;;;:17;:21;;;;;;;;:52;;;;17843:20;;;:11;:20;;;;;:25;;-1:-1:-1;;;;;;17843:25:0;;;;;17886:27;;17855:7;;17778:21;;17886:27;;;;;;17507:414;;;:::o;25906:1148::-;-1:-1:-1;;;;;26197:18:0;;26172:22;26197:18;;;:12;:18;;;;;:25;:32;;26227:1;26197:32;:29;:32;:::i;:::-;26240:18;26261:26;;;:17;:26;;;;;;26172:57;;-1:-1:-1;26394:28:0;;;26390:328;;-1:-1:-1;;;;;26461:18:0;;26439:19;26461:18;;;:12;:18;;;;;:34;;26480:14;;26461:34;;;;;;;;;;;;;;26439:56;;26545:11;26512:12;:18;26525:4;-1:-1:-1;;;;;26512:18:0;-1:-1:-1;;;;;26512:18:0;;;;;;;;;;;;26531:10;26512:30;;;;;;;;;;;;;;;;;;;;;:44;;;;26629:30;;;:17;:30;;;;;:43;;;26390:328;-1:-1:-1;;;;;26807:18:0;;;;;;:12;:18;;;;;:27;;;;;-1:-1:-1;;26807:27:0;;;:::i;24730:186::-;-1:-1:-1;;;;;24844:16:0;;;;;;;:12;:16;;;;;;;;:23;;24815:26;;;:17;:26;;;;;:52;;;24878:16;;;39:1:-1;23:18;;45:23;;24878:30:0;;;;;;;;24730:186::o;29037:189::-;-1:-1:-1;;;;;29117:21:0;;;;29109:30;;;;;;29158:18;29162:4;29168:7;29158:3;:18::i;:::-;29150:27;;;;;;;;-1:-1:-1;;;;;29190:20:0;29213:5;29190:20;;;;;;;;;;;:28;;-1:-1:-1;;29190:28:0;;;29037:189::o;23720:372::-;23787:27;23799:5;23806:7;23787:11;:27::i;:::-;23827:48;23860:5;23867:7;23827:32;:48::i;:::-;24025:1;23996:26;;;:17;:26;;;;;:30;24039:45;24014:7;24039:36;:45::i;:::-;23720:372;;:::o;44387:646::-;44447:7;44508:37;;;:25;:37;;;;;44663:29;;;;44633:25;;44447:7;;44633:60;;:25;:60;:29;:60;:::i;:::-;44774:29;;;;44615:78;;-1:-1:-1;44774:36:0;;44808:1;44774:36;:33;:36;:::i;:::-;44742:29;;;:68;44875:17;;:24;;44897:1;44875:24;:21;:24;:::i;:::-;44855:17;:44;45018:7;44387:646;-1:-1:-1;;;44387:646:0:o;23237:202::-;23301:24;23313:2;23317:7;23301:11;:24::i;:::-;23338:40;23366:2;23370:7;23338:27;:40::i;:::-;23391;23423:7;23391:31;:40::i;4014:303::-;4072:7;4167:5;;;4159:14;;;;;;4184:9;4200:1;4196;:5;;;;;;;;;4014:303;-1:-1:-1;;;;4014:303:0:o;3448:433::-;3506:7;3750:6;;3746:47;;;-1:-1:-1;3780:1:0;3773:8;;3746:47;3817:5;;;3821:1;3817;:5;3841;;;;;;;;:10;3833:19;;;;;5666:627;5726:4;6238:20;;6277:8;;5666:627::o;33096:1046::-;33228:33;33274:16;33299:2;33274:28;;33313:16;33338:2;33313:28;;33352:16;33377:2;33352:28;;33391:16;33416:2;33391:28;;33430:16;33455:2;33430:28;;33469:19;33554:3;:10;33541:3;:10;33528:3;:10;33515:3;:10;33502:3;:10;:23;:36;:49;:62;33491:74;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;33491:74:0;87:34:-1;135:17;;-1:-1;33491:74:0;-1:-1:-1;33469:96:0;-1:-1:-1;33469:96:0;33621:6;;33663:80;33679:3;:10;33675:1;:14;33663:80;;;33725:3;33729:1;33725:6;;;;;;;;;;;;;;;-1:-1:-1;;;33725:6:0;;-1:-1:-1;;;33725:6:0;33711;33718:3;;;;;;33711:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;33711:20:0;;;;;;;;-1:-1:-1;33691:3:0;;33663:80;;;-1:-1:-1;33762:1:0;33753:80;33769:3;:10;33765:1;:14;33753:80;;;33815:3;33819:1;33815:6;;;;;;;;;;;;;;;-1:-1:-1;;;33815:6:0;;-1:-1:-1;;;33815:6:0;33801;33808:3;;;;;;33801:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;33801:20:0;;;;;;;;-1:-1:-1;33781:3:0;;33753:80;;;-1:-1:-1;33852:1:0;33843:80;33859:3;:10;33855:1;:14;33843:80;;;33905:3;33909:1;33905:6;;;;;;;;;;;;;;;-1:-1:-1;;;33905:6:0;;-1:-1:-1;;;33905:6:0;33891;33898:3;;;;;;33891:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;33891:20:0;;;;;;;;-1:-1:-1;33871:3:0;;33843:80;;;-1:-1:-1;33942:1:0;33933:80;33949:3;:10;33945:1;:14;33933:80;;;33995:3;33999:1;33995:6;;;;;;;;;;;;;;;-1:-1:-1;;;33995:6:0;;-1:-1:-1;;;33995:6:0;33981;33988:3;;;;;;33981:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;33981:20:0;;;;;;;;-1:-1:-1;33961:3:0;;33933:80;;;-1:-1:-1;34032:1:0;34023:80;34039:3;:10;34035:1;:14;34023:80;;;34085:3;34089:1;34085:6;;;;;;;;;;;;;;;-1:-1:-1;;;34085:6:0;;-1:-1:-1;;;34085:6:0;34071;34078:3;;;;;;34071:11;;;;;;;;;;;;;;:20;-1:-1:-1;;;;;34071:20:0;;;;;;;;-1:-1:-1;34051:3:0;;34023:80;;;-1:-1:-1;34127:6:0;;33096:1046;-1:-1:-1;;;;;;;;;;;;;33096:1046:0:o;18978:175::-;19078:1;19042:24;;;:15;:24;;;;;;-1:-1:-1;;;;;19042:24:0;:38;19038:108;;19132:1;19097:24;;;:15;:24;;;;;:37;;-1:-1:-1;;;;;;19097:37:0;;;18978:175::o;16532:314::-;16627:5;-1:-1:-1;;;;;16607:25:0;:16;16615:7;16607;:16::i;:::-;-1:-1:-1;;;;;16607:25:0;;16599:34;;;;;;16646:23;16661:7;16646:14;:23::i;:::-;-1:-1:-1;;;;;16709:24:0;;;;;;:17;:24;;;;;;:31;;16738:1;16709:31;:28;:31;:::i;:::-;-1:-1:-1;;;;;16682:24:0;;;;;;:17;:24;;;;;;;;:58;;;;16751:20;;;:11;:20;;;;;:33;;-1:-1:-1;;;;;;16751:33:0;;;16802:36;;16763:7;;16682:24;;16802:36;;16682:24;;16802:36;16532:314;;:::o;27349:1082::-;27627:10;:17;27602:22;;27627:24;;27649:1;27627:24;:21;:24;:::i;:::-;27662:18;27683:24;;;:15;:24;;;;;;28056:10;:26;;27602:49;;-1:-1:-1;27683:24:0;;27602:49;;28056:26;;;;;;;;;;;;;;28034:48;;28120:11;28095:10;28106;28095:22;;;;;;;;;;;;;;;;;;;;;:36;;;;28200:28;;;:15;:28;;;;;;:41;;;28365:10;:19;;;;;-1:-1:-1;;28365:19:0;;;:::i;:::-;-1:-1:-1;;;28422:1:0;28395:24;;;-1:-1:-1;28395:15:0;:24;;;;;:28;27349:1082::o;15964:286::-;-1:-1:-1;;;;;16036:16:0;;;;16028:25;;;;;;16073:16;16081:7;16073;:16::i;:::-;16072:17;16064:26;;;;;;16103:20;;;;:11;:20;;;;;;;;:25;;-1:-1:-1;;;;;;16103:25:0;-1:-1:-1;;;;;16103:25:0;;;;;;;;16163:21;;:17;:21;;;;;;;:28;;:25;:28::i;:::-;-1:-1:-1;;;;;16139:21:0;;;;;;:17;:21;;;;;;:52;;;;16209:33;;16234:7;;16139:21;16209:33;;16139:21;;16209:33;15964:286;;:::o;25117:164::-;25221:10;:17;;25194:24;;;;:15;:24;;;;;:44;;;39:1:-1;23:18;;45:23;;25249:24:0;;;;;;;25117:164::o;35553:16907::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35553:16907:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35553:16907:0;;;-1:-1:-1;35553:16907:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://043294eb099e7add67a3b18f14bbe8aa5fa9301f2eed3d172999a87f5381967d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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