ETH Price: $3,164.97 (-1.15%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Release59165192018-07-06 15:40:512754 days ago1530891651IN
Fake_Phishing297713
0 ETH0.0469440982
Release59117562018-07-05 20:04:182755 days ago1530821058IN
Fake_Phishing297713
0 ETH0.0286180550
Release58994512018-07-03 17:22:372757 days ago1530638557IN
Fake_Phishing297713
0 ETH0.0228816440
Release58938302018-07-02 18:15:172758 days ago1530555317IN
Fake_Phishing297713
0 ETH0.0314833755
Pay Commission58753792018-06-29 14:52:132761 days ago1530283933IN
Fake_Phishing297713
0.001 ETH0.0005392815
Release58753672018-06-29 14:49:232761 days ago1530283763IN
Fake_Phishing297713
0 ETH0.001718043
Release58753642018-06-29 14:48:472761 days ago1530283727IN
Fake_Phishing297713
0 ETH0.001909573
Release58753522018-06-29 14:45:572761 days ago1530283557IN
Fake_Phishing297713
0 ETH0.001841853
Release58695992018-06-28 14:46:572762 days ago1530197217IN
Fake_Phishing297713
0 ETH0.001715163
Transfer Ownersh...58691522018-06-28 12:50:582762 days ago1530190258IN
Fake_Phishing297713
0 ETH0.000587220
Set Bitpainting ...58682572018-06-28 9:06:172762 days ago1530176777IN
Fake_Phishing297713
0 ETH0.000087752

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer58753792018-06-29 14:52:132761 days ago1530283933
Fake_Phishing297713
0.001 ETH
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BitpaintingPaintings

Compiler Version
v0.4.15+commit.bbb8e64f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2018-06-28
*/

pragma solidity ^0.4.15;

// File: contracts/interfaces/IAuctions.sol

contract IAuctions {

    function currentPrice(uint _tokenId) public constant returns (uint256);
    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration) public;
    function createReleaseAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _startedAt,
        uint _duration) public;
    function cancelAuction(uint256 _tokenId) external;
    function cancelAuctionWhenPaused(uint256 _tokenId) external;
    function bid(uint256 _tokenId, address _owner) external payable;
    function market() public constant returns (
        uint[] tokens,
        address[] sellers,
        uint8[] generations,
        uint8[] speeds,
        uint[] prices
    );
    function auctionsOf(address _of) public constant returns (
        uint[] tokens,
        uint[] prices
    );
    function signature() external constant returns (uint _signature);
}

// File: contracts/interfaces/IPaintings.sol

contract IPaintings {
    function createPainting(uint _tokenId) external;
    function sendAsGift(address _to, uint _tokenId) external;
    function collectionOf(address _of) public constant returns (
        uint[] tokens,
        bool[] pending,
        bool[] forSale,
        bool[] locked,
        uint8[] generations,
        uint8[] speeds
    );
    function collectionCountsOf(address _of)
        public constant returns (uint total, uint pending, uint forSale);
    function signature() external constant returns (uint _signature);
}

// File: contracts/interfaces/IStorage.sol

contract IStorage {
    function isOwner(address _address) public constant returns (bool);

    function isAllowed(address _address) external constant returns (bool);
    function developer() public constant returns (address);
    function setDeveloper(address _address) public;
    function addAdmin(address _address) public;
    function isAdmin(address _address) public constant returns (bool);
    function removeAdmin(address _address) public;
    function contracts(uint _signature) public returns (address _address);

    function exists(uint _tokenId) external constant returns (bool);
    function paintingsCount() public constant returns (uint);
    function increaseOwnershipTokenCount(address _address) public;
    function decreaseOwnershipTokenCount(address _address) public;
    function setOwnership(uint _tokenId, address _address) public;
    function getPainting(uint _tokenId)
        external constant returns (address, uint, uint, uint, uint8, uint8);
    function createPainting(
        address _owner,
        uint _tokenId,
        uint _parentId,
        uint8 _generation,
        uint8 _speed,
        uint _artistId,
        uint _releasedAt) public;
    function approve(uint _tokenId, address _claimant) external;
    function isApprovedFor(uint _tokenId, address _claimant)
        external constant returns (bool);
    function createEditionMeta(uint _tokenId) public;
    function getPaintingOwner(uint _tokenId)
        external constant returns (address);
    function getPaintingGeneration(uint _tokenId)
        public constant returns (uint8);
    function getPaintingSpeed(uint _tokenId)
        external constant returns (uint8);
    function getPaintingArtistId(uint _tokenId)
        public constant returns (uint artistId);
    function getOwnershipTokenCount(address _address)
        external constant returns (uint);
    function isReady(uint _tokenId) public constant returns (bool);
    function getPaintingIdAtIndex(uint _index) public constant returns (uint);
    function lastEditionOf(uint _index) public constant returns (uint);
    function getPaintingOriginal(uint _tokenId)
        external constant returns (uint);
    function canBeBidden(uint _tokenId) public constant returns (bool _can);

    function addAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _duration,
        address _seller) public;
    function addReleaseAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _startedAt,
        uint _duration) public;
    function initAuction(
        uint _tokenId,
        uint _startingPrice,
        uint _endingPrice,
        uint _startedAt,
        uint _duration,
        address _seller,
        bool _byTeam) public;
    function _isOnAuction(uint _tokenId) internal constant returns (bool);
    function isOnAuction(uint _tokenId) external constant returns (bool);
    function removeAuction(uint _tokenId) public;
    function getAuction(uint256 _tokenId)
        external constant returns (
        address seller,
        uint256 startingPrice,
        uint256 endingPrice,
        uint256 duration,
        uint256 startedAt);
    function getAuctionSeller(uint256 _tokenId)
        public constant returns (address);
    function getAuctionEnd(uint _tokenId)
        public constant returns (uint);
    function canBeCanceled(uint _tokenId) external constant returns (bool);
    function getAuctionsCount() public constant returns (uint);
    function getTokensOnAuction() public constant returns (uint[]);
    function getTokenIdAtIndex(uint _index) public constant returns (uint);
    function getAuctionStartedAt(uint256 _tokenId) public constant returns (uint);

    function getOffsetIndex() public constant returns (uint);
    function nextOffsetIndex() public returns (uint);
    function canCreateEdition(uint _tokenId, uint8 _generation)
        public constant returns (bool);
    function isValidGeneration(uint8 _generation)
        public constant returns (bool);
    function increaseGenerationCount(uint _tokenId, uint8 _generation) public;
    function getEditionsCount(uint _tokenId) external constant returns (uint8[3]);
    function setLastEditionOf(uint _tokenId, uint _editionId) public;
    function setEditionLimits(uint _tokenId, uint8 _gen1, uint8 _gen2, uint8 _gen3) public;
    function getEditionLimits(uint _tokenId) external constant returns (uint8[3]);

    function hasEditionInProgress(uint _tokenId) external constant returns (bool);
    function hasEmptyEditionSlots(uint _tokenId) external constant returns (bool);

    function setPaintingName(uint _tokenId, string _name) public;
    function setPaintingArtist(uint _tokenId, string _name) public;
    function purgeInformation(uint _tokenId) public;
    function resetEditionLimits(uint _tokenId) public;
    function resetPainting(uint _tokenId) public;
    function decreaseSpeed(uint _tokenId) public;
    function isCanceled(uint _tokenId) public constant returns (bool _is);
    function totalPaintingsCount() public constant returns (uint _total);
    function isSecondary(uint _tokenId) public constant returns (bool _is);
    function secondarySaleCut() public constant returns (uint8 _cut);
    function sealForChanges(uint _tokenId) public;
    function canBeChanged(uint _tokenId) public constant returns (bool _can);

    function getPaintingName(uint _tokenId) public constant returns (string);
    function getPaintingArtist(uint _tokenId) public constant returns (string);

    function signature() external constant returns (bytes4);
}

// File: contracts/libs/Ownable.sol

/**
* @title Ownable
* @dev Manages ownership of the contracts
*/
contract Ownable {

    address public owner;

    function Ownable() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function isOwner(address _address) public constant returns (bool) {
        return _address == owner;
    }

    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0));
        owner = newOwner;
    }

}

// File: contracts/libs/Pausable.sol

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused = false;

    /**
    * @dev modifier to allow actions only when the contract IS paused
    */
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /**
    * @dev modifier to allow actions only when the contract IS NOT paused
    */
    modifier whenPaused {
        require(paused);
        _;
    }

    /**
    * @dev called by the owner to pause, triggers stopped state
    */
    function _pause() internal whenNotPaused {
        paused = true;
        Pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function _unpause() internal whenPaused {
        paused = false;
        Unpause();
    }
}

// File: contracts/libs/BitpaintingBase.sol

contract BitpaintingBase is Pausable {
    /*** EVENTS ***/
    event Create(uint _tokenId,
        address _owner,
        uint _parentId,
        uint8 _generation,
        uint _createdAt,
        uint _completedAt);

    event Transfer(address from, address to, uint256 tokenId);

    IStorage public bitpaintingStorage;

    modifier canPauseUnpause() {
        require(msg.sender == owner || msg.sender == bitpaintingStorage.developer());
        _;
    }

    function setBitpaintingStorage(address _address) public onlyOwner {
        require(_address != address(0));
        bitpaintingStorage = IStorage(_address);
    }

    /**
    * @dev called by the owner to pause, triggers stopped state
    */
    function pause() public canPauseUnpause whenNotPaused {
        super._pause();
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() external canPauseUnpause whenPaused {
        super._unpause();
    }

    function canUserReleaseArtwork(address _address)
        public constant returns (bool _can) {
        return (bitpaintingStorage.isOwner(_address)
            || bitpaintingStorage.isAdmin(_address)
            || bitpaintingStorage.isAllowed(_address));
    }

    function canUserCancelArtwork(address _address)
        public constant returns (bool _can) {
        return (bitpaintingStorage.isOwner(_address)
            || bitpaintingStorage.isAdmin(_address));
    }

    modifier canReleaseArtwork() {
        require(canUserReleaseArtwork(msg.sender));
        _;
    }

    modifier canCancelArtwork() {
        require(canUserCancelArtwork(msg.sender));
        _;
    }

    /// @dev Assigns ownership of a specific Painting to an address.
    function _transfer(address _from, address _to, uint256 _tokenId)
        internal {
        bitpaintingStorage.setOwnership(_tokenId, _to);
        Transfer(_from, _to, _tokenId);
    }

    function _createOriginalPainting(uint _tokenId, uint _artistId, uint _releasedAt) internal {
        address _owner = owner;
        uint _parentId = 0;
        uint8 _generation = 0;
        uint8 _speed = 10;
        _createPainting(_owner, _tokenId, _parentId, _generation, _speed, _artistId, _releasedAt);
    }

    function _createPainting(
        address _owner,
        uint _tokenId,
        uint _parentId,
        uint8 _generation,
        uint8 _speed,
        uint _artistId,
        uint _releasedAt
    )
        internal
    {
        require(_tokenId == uint256(uint32(_tokenId)));
        require(_parentId == uint256(uint32(_parentId)));
        require(_generation == uint256(uint8(_generation)));

        bitpaintingStorage.createPainting(
            _owner, _tokenId, _parentId, _generation, _speed, _artistId, _releasedAt);

        uint _createdAt;
        uint _completedAt;
        (,,_createdAt, _completedAt,,) = bitpaintingStorage.getPainting(_tokenId);

        // emit the create event
        Create(
            _tokenId,
            _owner,
            _parentId,
            _generation,
            _createdAt,
            _completedAt
        );

        // This will assign ownership, and also emit the Transfer event as
        // per ERC721 draft
        _transfer(0, _owner, _tokenId);
    }

}

// File: contracts/libs/ERC721.sol

/// @title Interface for contracts conforming to ERC-721: Non-Fungible Tokens
/// @author Dieter Shirley <[email protected]> (https://github.com/dete)
contract ERC721 {
    // Required methods
    function totalSupply() public constant returns (uint256 total);
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external constant returns (address owner);
    function approve(address _to, uint256 _tokenId) external;
    function transfer(address _to, uint256 _tokenId) external;
    function transferFrom(address _from, address _to, uint256 _tokenId) external;

    // Events
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);

    // Optional
    // function name() public view returns (string name);
    // function symbol() public view returns (string symbol);
    // function tokensOfOwner(address _owner) external view returns (uint256[] tokenIds);
    // function tokenMetadata(uint256 _tokenId, string _preferredTransport) public view returns (string infoUrl);

    // ERC-165 Compatibility (https://github.com/ethereum/EIPs/issues/165)
    function supportsInterface(bytes4 _interfaceID) external constant returns (bool);
}

// File: contracts/libs/ERC721Metadata.sol

/// @title The external contract that is responsible for generating metadata for the kitties,
///  it has one function that will return the data as bytes.
contract ERC721Metadata {
    /// @dev Given a token Id, returns a byte array that is supposed to be converted into string.
    function getMetadata(uint256 _tokenId, string) public constant returns (bytes32[4] buffer, uint256 count) {
        if (_tokenId == 1) {
            buffer[0] = "Hello World! :D";
            count = 15;
        } else if (_tokenId == 2) {
            buffer[0] = "I would definitely choose a medi";
            buffer[1] = "um length string.";
            count = 49;
        } else if (_tokenId == 3) {
            buffer[0] = "Lorem ipsum dolor sit amet, mi e";
            buffer[1] = "st accumsan dapibus augue lorem,";
            buffer[2] = " tristique vestibulum id, libero";
            buffer[3] = " suscipit varius sapien aliquam.";
            count = 128;
        }
    }
}

// File: contracts/libs/PaintingOwnership.sol

contract PaintingOwnership is BitpaintingBase, ERC721 {

    /// @notice Name and symbol of the non fungible token, as defined in ERC721.
    string public constant name = "BitPaintings";
    string public constant symbol = "BP";

    ERC721Metadata public erc721Metadata;

    bytes4 constant InterfaceSignature_ERC165 =
        bytes4(keccak256('supportsInterface(bytes4)'));

    bytes4 constant InterfaceSignature_ERC721 =
        bytes4(keccak256('name()')) ^
        bytes4(keccak256('symbol()')) ^
        bytes4(keccak256('totalSupply()')) ^
        bytes4(keccak256('balanceOf(address)')) ^
        bytes4(keccak256('ownerOf(uint256)')) ^
        bytes4(keccak256('approve(address,uint256)')) ^
        bytes4(keccak256('transfer(address,uint256)')) ^
        bytes4(keccak256('transferFrom(address,address,uint256)')) ^
        bytes4(keccak256('tokensOfOwner(address)')) ^
        bytes4(keccak256('tokenMetadata(uint256,string)'));

    /// @notice Introspection interface as per ERC-165 (https://github.com/ethereum/EIPs/issues/165).
    ///  Returns true for any standardized interfaces implemented by this contract. We implement
    ///  ERC-165 (obviously!) and ERC-721.
    function supportsInterface(bytes4 _interfaceID) external constant returns (bool)
    {
        // DEBUG ONLY
        //require((InterfaceSignature_ERC165 == 0x01ffc9a7) && (InterfaceSignature_ERC721 == 0x9a20483d));

        return ((_interfaceID == InterfaceSignature_ERC165) || (_interfaceID == InterfaceSignature_ERC721));
    }

    /// @dev Set the address of the sibling contract that tracks metadata.
    ///  CEO only.
    function setMetadataAddress(address _contractAddress) public onlyOwner {
        erc721Metadata = ERC721Metadata(_contractAddress);
    }

    function _owns(address _claimant, uint256 _tokenId) internal constant returns (bool) {
        return bitpaintingStorage.getPaintingOwner(_tokenId) == _claimant;
    }

    function balanceOf(address _owner) public constant returns (uint256 count) {
        return bitpaintingStorage.getOwnershipTokenCount(_owner);
    }

    function _approve(uint256 _tokenId, address _approved) internal {
        bitpaintingStorage.approve(_tokenId, _approved);
    }

    function _approvedFor(address _claimant, uint256 _tokenId)
        internal constant returns (bool) {
        return bitpaintingStorage.isApprovedFor(_tokenId, _claimant);
    }

    function transfer(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_owns(msg.sender, _tokenId));

        _transfer(msg.sender, _to, _tokenId);
    }

    function approve(
      address _to,
      uint256 _tokenId
    )
      external
      whenNotPaused
    {
      require(_owns(msg.sender, _tokenId));
      _approve(_tokenId, _to);

      Approval(msg.sender, _to, _tokenId);
    }

    function transferFrom(
      address _from,
      address _to,
      uint256 _tokenId
    )
        external whenNotPaused {
        _transferFrom(_from, _to, _tokenId);
    }

    function _transferFrom(
      address _from,
      address _to,
      uint256 _tokenId
    )
        internal
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));

        _transfer(_from, _to, _tokenId);
    }

    function totalSupply() public constant returns (uint) {
      return bitpaintingStorage.paintingsCount();
    }

    function ownerOf(uint256 _tokenId)
        external constant returns (address) {
        return _ownerOf(_tokenId);
    }

    function _ownerOf(uint256 _tokenId)
        internal constant returns (address) {
        return bitpaintingStorage.getPaintingOwner(_tokenId);
    }

    function tokensOfOwner(address _owner)
        external constant returns(uint256[]) {
        uint256 tokenCount = balanceOf(_owner);

        if (tokenCount == 0) {
          return new uint256[](0);
        }

        uint256[] memory result = new uint256[](tokenCount);
        uint256 totalCats = totalSupply();
        uint256 resultIndex = 0;

        uint256 paintingId;

        for (paintingId = 1; paintingId <= totalCats; paintingId++) {
            if (bitpaintingStorage.getPaintingOwner(paintingId) == _owner) {
                result[resultIndex] = paintingId;
                resultIndex++;
            }
        }

        return result;
    }

    /// @dev Adapted from memcpy() by @arachnid (Nick Johnson <[email protected]>)
    ///  This method is licenced under the Apache License.
    ///  Ref: https://github.com/Arachnid/solidity-stringutils/blob/2f6ca9accb48ae14c66f1437ec50ed19a0616f78/strings.sol
    function _memcpy(uint _dest, uint _src, uint _len) private constant {
      // Copy word-length chunks while possible
      for(; _len >= 32; _len -= 32) {
          assembly {
              mstore(_dest, mload(_src))
          }
          _dest += 32;
          _src += 32;
      }

      // Copy remaining bytes
      uint256 mask = 256 ** (32 - _len) - 1;
      assembly {
          let srcpart := and(mload(_src), not(mask))
          let destpart := and(mload(_dest), mask)
          mstore(_dest, or(destpart, srcpart))
      }
    }

    /// @dev Adapted from toString(slice) by @arachnid (Nick Johnson <[email protected]>)
    ///  This method is licenced under the Apache License.
    ///  Ref: https://github.com/Arachnid/solidity-stringutils/blob/2f6ca9accb48ae14c66f1437ec50ed19a0616f78/strings.sol
    function _toString(bytes32[4] _rawBytes, uint256 _stringLength) private constant returns (string) {
      var outputString = new string(_stringLength);
      uint256 outputPtr;
      uint256 bytesPtr;

      assembly {
          outputPtr := add(outputString, 32)
          bytesPtr := _rawBytes
      }

      _memcpy(outputPtr, bytesPtr, _stringLength);

      return outputString;
    }

    /// @notice Returns a URI pointing to a metadata package for this token conforming to
    ///  ERC-721 (https://github.com/ethereum/EIPs/issues/721)
    /// @param _tokenId The ID number of the Kitty whose metadata should be returned.
    function tokenMetadata(uint256 _tokenId, string _preferredTransport) external constant returns (string infoUrl) {
      require(erc721Metadata != address(0));
      bytes32[4] memory buffer;
      uint256 count;
      (buffer, count) = erc721Metadata.getMetadata(_tokenId, _preferredTransport);

      return _toString(buffer, count);
    }

    function withdraw() external onlyOwner {
        owner.transfer(this.balance);
    }
}

// File: contracts/BitpaintingPaintings.sol

contract BitpaintingPaintings is PaintingOwnership, IPaintings {

    event CommissionPaidSuccessfully(
        address _to,
        uint _fromBlock,
        uint _toBlock);

    uint version = 3;

    modifier canPayCommission() {
        require(bitpaintingStorage.isOwner(msg.sender)
            || bitpaintingStorage.isAdmin(msg.sender));
        _;
    }

    function release(
        uint _tokenId,
        uint _artistId,
        uint _releasedAt,
        uint8[] _gens,
        uint _auctionStartingPrice,
        uint _auctionEndingPrice,
        uint _auctionDuration,
        string _artist,
        string _name
    ) external canReleaseArtwork whenNotPaused {
        _createOriginalPainting(_tokenId, _artistId, _releasedAt);
        _approve(_tokenId, owner);
        bitpaintingStorage.setEditionLimits(_tokenId, _gens[0], _gens[1],_gens[2]);
        auctionsContract().createReleaseAuction(
            _tokenId,
            _auctionStartingPrice,
            _auctionEndingPrice,
            _releasedAt,
            _auctionDuration);
        bitpaintingStorage.setPaintingArtist(_tokenId, _artist);
        bitpaintingStorage.setPaintingName(_tokenId, _name);
    }

    function releaseNow(
        uint _tokenId,
        uint _artistId,
        uint8[] _gens,
        uint _auctionStartingPrice,
        uint _auctionEndingPrice,
        uint _auctionDuration,
        string _artist,
        string _name
    ) external canReleaseArtwork whenNotPaused {
        uint _releasedAt = now;
        _createOriginalPainting(_tokenId, _artistId, _releasedAt);
        _approve(_tokenId, owner);
        bitpaintingStorage.setEditionLimits(_tokenId, _gens[0], _gens[1],_gens[2]);
        auctionsContract().createReleaseAuction(
            _tokenId,
            _auctionStartingPrice,
            _auctionEndingPrice,
            now, // _releasedAt
            _auctionDuration);
        bitpaintingStorage.setPaintingArtist(_tokenId, _artist);
        bitpaintingStorage.setPaintingName(_tokenId, _name);
    }

    function cancel(uint _tokenId) external canCancelArtwork whenNotPaused {
        require(bitpaintingStorage.isOnAuction(_tokenId));
        require(bitpaintingStorage.canBeChanged(_tokenId));

        bitpaintingStorage.resetPainting(_tokenId);
        bitpaintingStorage.removeAuction(_tokenId);
        bitpaintingStorage.resetEditionLimits(_tokenId);
        bitpaintingStorage.purgeInformation(_tokenId);
    }

    function auctionsContract() internal returns (IAuctions auctions){
        uint _signature = uint(keccak256("auctions"));
        return IAuctions(bitpaintingStorage.contracts(_signature));
    }

    function createPainting(uint _tokenId)
        external canReleaseArtwork whenNotPaused {
        _createOriginalPainting(_tokenId, 1, now);
        _approve(_tokenId, owner);
    }

    function sendAsGift(address _to, uint _tokenId) external whenNotPaused {
        require(_to != address(0));
        require(_to != address(this));
        require(_owns(msg.sender, _tokenId));
        require(bitpaintingStorage.isReady(_tokenId));
        require(!bitpaintingStorage.hasEditionInProgress(_tokenId));

        if (bitpaintingStorage.isOnAuction(_tokenId)) {
            bitpaintingStorage.removeAuction(_tokenId);
        }

        bitpaintingStorage.sealForChanges(_tokenId);
        _transfer(msg.sender, _to, _tokenId);
        bitpaintingStorage.increaseOwnershipTokenCount(_to);
        bitpaintingStorage.decreaseOwnershipTokenCount(msg.sender);
    }

    function allTokenIds() public constant returns (uint[] tokenIds) {
        uint len = bitpaintingStorage.totalPaintingsCount();
        uint resultLen = bitpaintingStorage.paintingsCount();
        tokenIds = new uint[](resultLen);
        uint pointer = 0;
        for (uint index = 0; index < len; index++) {
            uint token = bitpaintingStorage.getPaintingIdAtIndex(index);
            if (bitpaintingStorage.isCanceled(token)) {
                continue;
            }
            tokenIds[pointer] = token;
            pointer++;
        }
    }

    function collectionOf(address _of) public constant returns (
            uint[] tokens,
            bool[] pending,
            bool[] forSale,
            bool[] locked,
            uint8[] generations,
            uint8[] speeds
        ) {

        uint tokenCount = bitpaintingStorage.totalPaintingsCount();
        uint length = balanceOf(_of);
        uint pointer;

        tokens = new uint[](length);
        pending = new bool[](length);
        forSale = new bool[](length);
        locked = new bool[](length);
        generations = new uint8[](length);
        speeds = new uint8[](length);

        for(uint index = 0; index < tokenCount; index++) {
            uint tokenId = bitpaintingStorage.getPaintingIdAtIndex(index);

            if (_ownerOf(tokenId) != _of) {
                continue;
            }

            uint _createdAt;
            (,,_createdAt,,,) = bitpaintingStorage.getPainting(tokenId);
            if (_createdAt == 0) {
                continue;
            }

            tokens[pointer] = tokenId;
            pending[pointer] = !bitpaintingStorage.isReady(tokenId);
            forSale[pointer] = (bitpaintingStorage.getAuctionStartedAt(tokenId) > 0);
            uint edition = bitpaintingStorage.lastEditionOf(tokenId);
            if (edition == 0) {
                locked[pointer] = false;
            } else {
                locked[pointer] = !bitpaintingStorage.isReady(edition);
            }
            generations[pointer] = bitpaintingStorage.getPaintingGeneration(tokenId);
            speeds[pointer] = bitpaintingStorage.getPaintingSpeed(tokenId);

            pointer++;
        }

    }

    function collectionCountsOf(address _of) public constant
        returns (uint total, uint pending, uint forSale) {
        uint tokenCount = totalSupply();

        for(uint index = 0; index < tokenCount; index++) {
            uint tokenId = bitpaintingStorage.getPaintingIdAtIndex(index);

            if (_ownerOf(tokenId) != _of) {
                continue;
            }

            total++;

            if (bitpaintingStorage.isReady(tokenId)) {
                if (bitpaintingStorage.getAuctionStartedAt(tokenId) > 0) {
                    forSale++;
                }

                continue;
            }

            if (!bitpaintingStorage.isReady(tokenId)) {
                pending++;
                continue;
            }

        }

    }

    function payCommission(address _to, uint _fromBlock, uint _toBlock)
        public payable canPayCommission {
        require(_toBlock < block.number);
        require(_fromBlock <= _toBlock);

        _to.transfer(msg.value);
        CommissionPaidSuccessfully(_to, _fromBlock, _toBlock);
    }


    function signature() external constant returns (uint _signature) {
        return uint(keccak256("paintings"));
    }

}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_preferredTransport","type":"string"}],"name":"tokenMetadata","outputs":[{"name":"infoUrl","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_fromBlock","type":"uint256"},{"name":"_toBlock","type":"uint256"}],"name":"payCommission","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"bitpaintingStorage","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"canUserCancelArtwork","outputs":[{"name":"_can","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setBitpaintingStorage","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_artistId","type":"uint256"},{"name":"_releasedAt","type":"uint256"},{"name":"_gens","type":"uint8[]"},{"name":"_auctionStartingPrice","type":"uint256"},{"name":"_auctionEndingPrice","type":"uint256"},{"name":"_auctionDuration","type":"uint256"},{"name":"_artist","type":"string"},{"name":"_name","type":"string"}],"name":"release","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_of","type":"address"}],"name":"collectionOf","outputs":[{"name":"tokens","type":"uint256[]"},{"name":"pending","type":"bool[]"},{"name":"forSale","type":"bool[]"},{"name":"locked","type":"bool[]"},{"name":"generations","type":"uint8[]"},{"name":"speeds","type":"uint8[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"cancel","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"signature","outputs":[{"name":"_signature","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_artistId","type":"uint256"},{"name":"_gens","type":"uint8[]"},{"name":"_auctionStartingPrice","type":"uint256"},{"name":"_auctionEndingPrice","type":"uint256"},{"name":"_auctionDuration","type":"uint256"},{"name":"_artist","type":"string"},{"name":"_name","type":"string"}],"name":"releaseNow","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_of","type":"address"}],"name":"collectionCountsOf","outputs":[{"name":"total","type":"uint256"},{"name":"pending","type":"uint256"},{"name":"forSale","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"canUserReleaseArtwork","outputs":[{"name":"_can","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"erc721Metadata","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"sendAsGift","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_contractAddress","type":"address"}],"name":"setMetadataAddress","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"allTokenIds","outputs":[{"name":"tokenIds","type":"uint256[]"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"createPainting","outputs":[],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_to","type":"address"},{"indexed":false,"name":"_fromBlock","type":"uint256"},{"indexed":false,"name":"_toBlock","type":"uint256"}],"name":"CommissionPaidSuccessfully","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"approved","type":"address"},{"indexed":false,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokenId","type":"uint256"},{"indexed":false,"name":"_owner","type":"address"},{"indexed":false,"name":"_parentId","type":"uint256"},{"indexed":false,"name":"_generation","type":"uint8"},{"indexed":false,"name":"_createdAt","type":"uint256"},{"indexed":false,"name":"_completedAt","type":"uint256"}],"name":"Create","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]

60606040526000805460a060020a60ff0219169055600380555b60008054600160a060020a03191633600160a060020a03161790555b5b613741806100456000396000f300606060405236156101905763ffffffff60e060020a60003504166301ffc9a781146101955780630560ff44146101e157806306fdde031461027b578063095ea7b3146103065780630a52d1941461032a578063179047431461034657806318160ddd1461037557806323b872dd1461039a578063290b3cb7146103c45780632f54bf6e146103f7578063362f29c91461042a57806338284f361461044b5780633ccfd60b1461049c5780633e94c904146104b15780633f4ba83a1461068357806340e58ee51461069857806351ff4847146106b05780635c975abb146106d55780636352211e146106fc57806370a082311461072e5780637984932e1461075f5780638456cb59146107ab5780638462151c146107c05780638da5cb5b1461083357806395d89b41146108625780639d5c7be8146108ed578063a9059cbb14610930578063aad9973f14610954578063bc4006f514610987578063c7046117146109b6578063e17b25af146109da578063e7619fad146109fb578063f2fde38b14610a62578063fe5709cd14610a83575b600080fd5b34156101a057600080fd5b6101cd7fffffffff0000000000000000000000000000000000000000000000000000000060043516610a9b565b604051901515815260200160405180910390f35b34156101ec57600080fd5b610203600480359060248035908101910135610d22565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102405780820151818401525b602001610227565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561028657600080fd5b610203610e01565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102405780820151818401525b602001610227565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031157600080fd5b610328600160a060020a0360043516602435610e38565b005b610328600160a060020a0360043516602435604435610ec4565b005b341561035157600080fd5b610359611069565b604051600160a060020a03909116815260200160405180910390f35b341561038057600080fd5b610388611078565b60405190815260200160405180910390f35b34156103a557600080fd5b610328600160a060020a03600435811690602435166044356110e2565b005b34156103cf57600080fd5b6101cd600160a060020a036004351661110b565b604051901515815260200160405180910390f35b341561040257600080fd5b6101cd600160a060020a0360043516611204565b604051901515815260200160405180910390f35b341561043557600080fd5b610328600160a060020a036004351661121b565b005b341561045657600080fd5b61032860048035906024803591604435916064358082019290810135916084359160a4359160c4359160e43580830192908201359161010435918201910135611278565b005b34156104a757600080fd5b610328611514565b005b34156104bc57600080fd5b6104d0600160a060020a036004351661156c565b6040518080602001806020018060200180602001806020018060200187810387528d818151815260200191508051906020019060200280838360005b838110156105255780820151818401525b60200161050c565b5050505090500187810386528c818151815260200191508051906020019060200280838360005b838110156105655780820151818401525b60200161054c565b5050505090500187810385528b818151815260200191508051906020019060200280838360005b838110156105a55780820151818401525b60200161058c565b5050505090500187810384528a818151815260200191508051906020019060200280838360005b838110156105e55780820151818401525b6020016105cc565b50505050905001878103835289818151815260200191508051906020019060200280838360005b838110156106255780820151818401525b60200161060c565b50505050905001878103825288818151815260200191508051906020019060200280838360005b838110156106655780820151818401525b60200161064c565b505050509050019c5050505050505050505050505060405180910390f35b341561068e57600080fd5b610328611ba2565b005b34156106a357600080fd5b610328600435611c62565b005b34156106bb57600080fd5b610388611ef4565b60405190815260200160405180910390f35b34156106e057600080fd5b6101cd611f2e565b604051901515815260200160405180910390f35b341561070757600080fd5b610359600435611f3e565b604051600160a060020a03909116815260200160405180910390f35b341561073957600080fd5b610388600160a060020a0360043516611f51565b60405190815260200160405180910390f35b341561076a57600080fd5b61032860048035906024803591604435808301929082013591606435916084359160a4359160c43580820192908101359160e435908101910135611fce565b005b34156107b657600080fd5b61032861226e565b005b34156107cb57600080fd5b6107df600160a060020a036004351661232d565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561081f5780820151818401525b602001610806565b505050509050019250505060405180910390f35b341561083e57600080fd5b61035961246e565b604051600160a060020a03909116815260200160405180910390f35b341561086d57600080fd5b61020361247d565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102405780820151818401525b602001610227565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108f857600080fd5b61090c600160a060020a03600435166124b4565b60405180848152602001838152602001828152602001935050505060405180910390f35b341561093b57600080fd5b610328600160a060020a03600435166024356126ec565b005b341561095f57600080fd5b6101cd600160a060020a036004351661275f565b604051901515815260200160405180910390f35b341561099257600080fd5b6103596128d3565b604051600160a060020a03909116815260200160405180910390f35b34156109c157600080fd5b610328600160a060020a03600435166024356128e2565b005b34156109e557600080fd5b610328600160a060020a0360043516612c35565b005b3415610a0657600080fd5b6107df612c7d565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561081f5780820151818401525b602001610806565b505050509050019250505060405180910390f35b3415610a6d57600080fd5b610328600160a060020a0360043516612ea4565b005b3415610a8e57600080fd5b610328600435612f01565b005b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610d1a57506040517f746f6b656e4d657461646174612875696e743235362c737472696e67290000008152601d0160405180910390206040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b610d2a6136a4565b610d326136b6565b600254600090600160a060020a03161515610d4c57600080fd5b600254600160a060020a031663cb4799f2878787600060405160a0015260405160e060020a63ffffffff861602815260048101848152604060248301908152604483018490529091606401848480828437820191505094505050505060a060405180830381600087803b1515610dc157600080fd5b6102c65a03f11515610dd257600080fd5b50505060405180608001805160209091016040529092509050610df58282612f55565b92505b50509392505050565b60408051908101604052600c81527f4269745061696e74696e67730000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615610e4f57600080fd5b610e593382612faa565b1515610e6457600080fd5b610e6e818361302f565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b5b5050565b600154600160a060020a0316632f54bf6e3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f1d57600080fd5b6102c65a03f11515610f2e57600080fd5b5050506040518051905080610fb35750600154600160a060020a03166324d7806c3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f9757600080fd5b6102c65a03f11515610fa857600080fd5b505050604051805190505b1515610fbe57600080fd5b438110610fca57600080fd5b80821115610fd757600080fd5b600160a060020a0383163480156108fc0290604051600060405180830381858888f19350505050151561100957600080fd5b7f5ce0713bdae07b19c9fe8119bee321b8b425f4981de47ef807bf8e2c340258968383836040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15b5b505050565b600154600160a060020a031681565b600154600090600160a060020a031663197b945482604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110c257600080fd5b6102c65a03f115156110d357600080fd5b50505060405180519150505b90565b60005460a060020a900460ff16156110f957600080fd5b61106383838361309f565b5b5b505050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561116657600080fd5b6102c65a03f1151561117757600080fd5b5050506040518051905080610d1a5750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b505050604051805190505b90505b919050565b600054600160a060020a038281169116145b919050565b60005433600160a060020a0390811691161461123657600080fd5b600160a060020a038116151561124b57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b6112813361275f565b151561128c57600080fd5b60005460a060020a900460ff16156112a357600080fd5b6112ae8c8c8c613128565b6000546112c5908d90600160a060020a031661302f565b600154600160a060020a031663783370b58d8b8b60008181106112e457fe5b9050602002013560ff168c8c600181811015156112fd57fe5b9050602002013560ff168d8d6002818110151561131657fe5b9050602002013560ff1660405160e060020a63ffffffff8716028152600481019490945260ff92831660248501529082166044840152166064820152608401600060405180830381600087803b151561136e57600080fd5b6102c65a03f1151561137f57600080fd5b50505061138a613152565b600160a060020a031663f26539668d89898e8a60405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b15156113ed57600080fd5b6102c65a03f115156113fe57600080fd5b5050600154600160a060020a0316905063d59f4e688d868660405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b151561146e57600080fd5b6102c65a03f1151561147f57600080fd5b5050600154600160a060020a0316905063fabb79528d848460405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156114ef57600080fd5b6102c65a03f1151561150057600080fd5b5050505b5b5b505050505050505050505050565b60005433600160a060020a0390811691161461152f57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561156857600080fd5b5b5b565b6115746136a4565b61157c6136a4565b6115846136a4565b61158c6136a4565b6115946136a4565b61159c6136a4565b600154600090819081908190819081908190600160a060020a0316632efd08df82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115f257600080fd5b6102c65a03f1151561160357600080fd5b5050506040518051905096506116188e611f51565b9550856040518059106116285750595b908082528060200260200182016040525b509c508560405180591061164a5750595b908082528060200260200182016040525b509b508560405180591061166c5750595b908082528060200260200182016040525b509a508560405180591061168e5750595b908082528060200260200182016040525b509950856040518059106116b05750595b908082528060200260200182016040525b509850856040518059106116d25750595b908082528060200260200182016040525b509750600093505b86841015611b9157600154600160a060020a031663a3e7061d8560006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561174457600080fd5b6102c65a03f1151561175557600080fd5b5050506040518051935050600160a060020a038e16611773846131fc565b600160a060020a03161461178657611b86565b600154600160a060020a031663145f8ba284600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156117d757600080fd5b6102c65a03f115156117e857600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296505050841515925061182591505057611b86565b828d868151811061183257fe5b60209081029091010152600154600160a060020a03166350df8f718460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561188d57600080fd5b6102c65a03f1151561189e57600080fd5b50505060405180519050158c86815181106118b557fe5b911515602092830290910190910152600154600090600160a060020a03166337016a5f85836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561191757600080fd5b6102c65a03f1151561192857600080fd5b50505060405180519050118b868151811061193f57fe5b911515602092830290910190910152600154600160a060020a031663f50b769e8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561199f57600080fd5b6102c65a03f115156119b057600080fd5b50505060405180519150508015156119e45760008a86815181106119d057fe5b911515602092830290910190910152611a6d565b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a3557600080fd5b6102c65a03f11515611a4657600080fd5b50505060405180519050158a8681518110611a5d57fe5b9115156020928302909101909101525b600154600160a060020a0316630af9d89c8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611abe57600080fd5b6102c65a03f11515611acf57600080fd5b50505060405180519050898681518110611ae557fe5b60ff909216602092830290910190910152600154600160a060020a0316639ed573608460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611b4757600080fd5b6102c65a03f11515611b5857600080fd5b50505060405180519050888681518110611b6e57fe5b60ff9092166020928302909101909101526001909401935b6001909301926116eb565b5b5050505050505091939550919395565b60005433600160a060020a0390811691161480611c325750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611c0257600080fd5b6102c65a03f11515611c1357600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b1515611c3d57600080fd5b60005460a060020a900460ff161515611c5557600080fd5b611568613271565b5b5b5b565b611c6b3361110b565b1515611c7657600080fd5b60005460a060020a900460ff1615611c8d57600080fd5b600154600160a060020a03166337e246ad8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611cde57600080fd5b6102c65a03f11515611cef57600080fd5b505050604051805190501515611d0457600080fd5b600154600160a060020a0316637d6979e78260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611d5557600080fd5b6102c65a03f11515611d6657600080fd5b505050604051805190501515611d7b57600080fd5b600154600160a060020a0316638635b5278260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611dc357600080fd5b6102c65a03f11515611dd457600080fd5b5050600154600160a060020a03169050632dd7030b8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611e2057600080fd5b6102c65a03f11515611e3157600080fd5b5050600154600160a060020a03169050634a61f3478260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611e7d57600080fd5b6102c65a03f11515611e8e57600080fd5b5050600154600160a060020a0316905063a61bd76d8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611eda57600080fd5b6102c65a03f11515611eeb57600080fd5b5050505b5b5b50565b60006040517f7061696e74696e67730000000000000000000000000000000000000000000000815260090160405190819003902090505b90565b60005460a060020a900460ff1681565b6000610d1a826131fc565b90505b919050565b600154600090600160a060020a031663b4f6eae483836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b50505060405180519150505b919050565b6000611fd93361275f565b1515611fe457600080fd5b60005460a060020a900460ff1615611ffb57600080fd5b50426120088c8c83613128565b60005461201f908d90600160a060020a031661302f565b600154600160a060020a031663783370b58d8c8c600081811061203e57fe5b9050602002013560ff168d8d6001818110151561205757fe5b9050602002013560ff168e8e6002818110151561207057fe5b9050602002013560ff1660405160e060020a63ffffffff8716028152600481019490945260ff92831660248501529082166044840152166064820152608401600060405180830381600087803b15156120c857600080fd5b6102c65a03f115156120d957600080fd5b5050506120e4613152565b600160a060020a031663f26539668d8a8a428b60405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b151561214757600080fd5b6102c65a03f1151561215857600080fd5b5050600154600160a060020a0316905063d59f4e688d878760405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156121c857600080fd5b6102c65a03f115156121d957600080fd5b5050600154600160a060020a0316905063fabb79528d858560405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156114ef57600080fd5b6102c65a03f1151561150057600080fd5b5050505b5b5b505050505050505050505050565b60005433600160a060020a03908116911614806122fe5750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156122ce57600080fd5b6102c65a03f115156122df57600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b151561230957600080fd5b60005460a060020a900460ff161561232057600080fd5b6115686132d7565b5b5b5b565b6123356136a4565b600061233f6136a4565b600080600061234d87611f51565b945084151561237e5760006040518059106123655750595b908082528060200260200182016040525b509550612464565b8460405180591061238c5750595b908082528060200260200182016040525b5093506123a8611078565b925060009150600190505b82811161246057600154600160a060020a038089169116630d66343c8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561240f57600080fd5b6102c65a03f1151561242057600080fd5b50505060405180519050600160a060020a03161415612457578084838151811061244657fe5b602090810290910101526001909101905b5b6001016123b3565b8395505b5050505050919050565b600054600160a060020a031681565b60408051908101604052600281527f4250000000000000000000000000000000000000000000000000000000000000602082015281565b6000806000806000806124c5611078565b9250600091505b828210156126e157600154600160a060020a031663a3e7061d8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561252557600080fd5b6102c65a03f1151561253657600080fd5b5050506040518051915050600160a060020a038716612554826131fc565b600160a060020a031614612567576126d5565b60018054960195600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156125bc57600080fd5b6102c65a03f115156125cd57600080fd5b505050604051805190501561265c57600154600090600160a060020a03166337016a5f83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561262f57600080fd5b6102c65a03f1151561264057600080fd5b505050604051805190501115612657576001909301925b6126d5565b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156126ad57600080fd5b6102c65a03f115156126be57600080fd5b5050506040518051905015156126d5576001909401935b5b6001909101906124cc565b5b5050509193909250565b60005460a060020a900460ff161561270357600080fd5b600160a060020a038216151561271857600080fd5b30600160a060020a031682600160a060020a03161415151561273957600080fd5b6127433382612faa565b151561274e57600080fd5b610ebf338383613342565b5b5b5050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156127ba57600080fd5b6102c65a03f115156127cb57600080fd5b50505060405180519050806128505750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561283457600080fd5b6102c65a03f1151561284557600080fd5b505050604051805190505b80610d1a5750600154600160a060020a031663babcc5398360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b505050604051805190505b90505b919050565b600254600160a060020a031681565b60005460a060020a900460ff16156128f957600080fd5b600160a060020a038216151561290e57600080fd5b30600160a060020a031682600160a060020a03161415151561292f57600080fd5b6129393382612faa565b151561294457600080fd5b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561299557600080fd5b6102c65a03f115156129a657600080fd5b5050506040518051905015156129bb57600080fd5b600154600160a060020a0316635f4eab658260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612a0c57600080fd5b6102c65a03f11515612a1d57600080fd5b5050506040518051159050612a3157600080fd5b600154600160a060020a03166337e246ad8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612a8257600080fd5b6102c65a03f11515612a9357600080fd5b5050506040518051905015612aff57600154600160a060020a0316632dd7030b8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515612aea57600080fd5b6102c65a03f11515612afb57600080fd5b5050505b600154600160a060020a0316631e801c8c8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515612b4757600080fd5b6102c65a03f11515612b5857600080fd5b505050612b66338383613342565b600154600160a060020a0316636bfaa9038360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515612bb657600080fd5b6102c65a03f11515612bc757600080fd5b5050600154600160a060020a03169050631be6ce573360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515612c1b57600080fd5b6102c65a03f11515612c2c57600080fd5b5050505b5b5050565b60005433600160a060020a03908116911614612c5057600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b612c856136a4565b6001546000908190819081908190600160a060020a0316632efd08df82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612cd757600080fd5b6102c65a03f11515612ce857600080fd5b5050506040518051600154909650600160a060020a0316905063197b94546000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612d3d57600080fd5b6102c65a03f11515612d4e57600080fd5b50505060405180519050935083604051805910612d685750595b908082528060200260200182016040525b50955060009250600091505b84821015612e9b57600154600160a060020a031663a3e7061d8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612dde57600080fd5b6102c65a03f11515612def57600080fd5b5050506040518051600154909250600160a060020a031690506339e3af9b8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612e4d57600080fd5b6102c65a03f11515612e5e57600080fd5b5050506040518051905015612e7257612e90565b80868481518110612e7f57fe5b602090810290910101526001909201915b600190910190612d85565b5b505050505090565b60005433600160a060020a03908116911614612ebf57600080fd5b600160a060020a0381161515612ed457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b612f0a3361275f565b1515612f1557600080fd5b60005460a060020a900460ff1615612f2c57600080fd5b612f3881600142613128565b600054611274908290600160a060020a031661302f565b5b5b5b50565b612f5d6136a4565b612f656136a4565b60008084604051805910612f765750595b908082528060200260200182016040525b5092505060208201905084612f9d828287613403565b8293505b50505092915050565b600154600090600160a060020a038085169116630d66343c84846040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561300157600080fd5b6102c65a03f1151561301257600080fd5b50505060405180519050600160a060020a03161490505b92915050565b600154600160a060020a031663febe4909838360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515612c1b57600080fd5b6102c65a03f11515612c2c57600080fd5b5050505b5050565b60005460a060020a900460ff16156130b657600080fd5b600160a060020a03821615156130cb57600080fd5b30600160a060020a031682600160a060020a0316141515156130ec57600080fd5b6130f6338261344a565b151561310157600080fd5b61310b8382612faa565b151561311657600080fd5b611063838383613342565b5b5b505050565b60008054600160a060020a03169080600a61314884888480858b8b6134cf565b5b50505050505050565b6000806040517f61756374696f6e730000000000000000000000000000000000000000000000008152600801604051908190039020600154909150600160a060020a031663474da79a8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156131db57600080fd5b6102c65a03f115156131ec57600080fd5b50505060405180519250505b5090565b600154600090600160a060020a0316630d66343c83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b50505060405180519150505b919050565b60005460a060020a900460ff16151561328957600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a15b5b565b60005460a060020a900460ff16156132ee57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b5b565b600154600160a060020a031663687c4fa7828460405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561339957600080fd5b6102c65a03f115156133aa57600080fd5b5050507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b505050565b60005b6020821061342a57825184526020840193506020830192505b602082039150613406565b6001826020036101000a0390508019835116818551161784525b50505050565b600154600090600160a060020a031663b5b12e758385846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b15156134ac57600080fd5b6102c65a03f115156134bd57600080fd5b50505060405180519150505b92915050565b60008063ffffffff881688146134e457600080fd5b63ffffffff871687146134f657600080fd5b5b600154600160a060020a0316638754b1d18a8a8a8a8a8a8a60405160e060020a63ffffffff8a16028152600160a060020a0390971660048801526024870195909552604486019390935260ff918216606486015216608484015260a483015260c482015260e401600060405180830381600087803b151561357757600080fd5b6102c65a03f1151561358857600080fd5b5050600154600160a060020a0316905063145f8ba289600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156135dd57600080fd5b6102c65a03f115156135ee57600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296509094507f30327159df74d598a666b3800d1708fc84a7a52e5f6fb58cdd4bdffe7ad653c793508b92508c91508a9050898686604051958652600160a060020a03909416602086015260408086019390935260ff9091166060850152608084015260a083019190915260c0909101905180910390a161369860008a8a613342565b5b505050505050505050565b60206040519081016040526000815290565b60806040519081016040526004815b600081526000199190910190602001816136c55790505090565b60206040519081016040526000815290565b60206040519081016040526000815290565b602060405190810160405260008152905600a165627a7a72305820c0ea2fa0388529abf07d63e43f301f8796c232745c5992c476a6b5d28d30a2510029

Deployed Bytecode

0x606060405236156101905763ffffffff60e060020a60003504166301ffc9a781146101955780630560ff44146101e157806306fdde031461027b578063095ea7b3146103065780630a52d1941461032a578063179047431461034657806318160ddd1461037557806323b872dd1461039a578063290b3cb7146103c45780632f54bf6e146103f7578063362f29c91461042a57806338284f361461044b5780633ccfd60b1461049c5780633e94c904146104b15780633f4ba83a1461068357806340e58ee51461069857806351ff4847146106b05780635c975abb146106d55780636352211e146106fc57806370a082311461072e5780637984932e1461075f5780638456cb59146107ab5780638462151c146107c05780638da5cb5b1461083357806395d89b41146108625780639d5c7be8146108ed578063a9059cbb14610930578063aad9973f14610954578063bc4006f514610987578063c7046117146109b6578063e17b25af146109da578063e7619fad146109fb578063f2fde38b14610a62578063fe5709cd14610a83575b600080fd5b34156101a057600080fd5b6101cd7fffffffff0000000000000000000000000000000000000000000000000000000060043516610a9b565b604051901515815260200160405180910390f35b34156101ec57600080fd5b610203600480359060248035908101910135610d22565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102405780820151818401525b602001610227565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561028657600080fd5b610203610e01565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102405780820151818401525b602001610227565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031157600080fd5b610328600160a060020a0360043516602435610e38565b005b610328600160a060020a0360043516602435604435610ec4565b005b341561035157600080fd5b610359611069565b604051600160a060020a03909116815260200160405180910390f35b341561038057600080fd5b610388611078565b60405190815260200160405180910390f35b34156103a557600080fd5b610328600160a060020a03600435811690602435166044356110e2565b005b34156103cf57600080fd5b6101cd600160a060020a036004351661110b565b604051901515815260200160405180910390f35b341561040257600080fd5b6101cd600160a060020a0360043516611204565b604051901515815260200160405180910390f35b341561043557600080fd5b610328600160a060020a036004351661121b565b005b341561045657600080fd5b61032860048035906024803591604435916064358082019290810135916084359160a4359160c4359160e43580830192908201359161010435918201910135611278565b005b34156104a757600080fd5b610328611514565b005b34156104bc57600080fd5b6104d0600160a060020a036004351661156c565b6040518080602001806020018060200180602001806020018060200187810387528d818151815260200191508051906020019060200280838360005b838110156105255780820151818401525b60200161050c565b5050505090500187810386528c818151815260200191508051906020019060200280838360005b838110156105655780820151818401525b60200161054c565b5050505090500187810385528b818151815260200191508051906020019060200280838360005b838110156105a55780820151818401525b60200161058c565b5050505090500187810384528a818151815260200191508051906020019060200280838360005b838110156105e55780820151818401525b6020016105cc565b50505050905001878103835289818151815260200191508051906020019060200280838360005b838110156106255780820151818401525b60200161060c565b50505050905001878103825288818151815260200191508051906020019060200280838360005b838110156106655780820151818401525b60200161064c565b505050509050019c5050505050505050505050505060405180910390f35b341561068e57600080fd5b610328611ba2565b005b34156106a357600080fd5b610328600435611c62565b005b34156106bb57600080fd5b610388611ef4565b60405190815260200160405180910390f35b34156106e057600080fd5b6101cd611f2e565b604051901515815260200160405180910390f35b341561070757600080fd5b610359600435611f3e565b604051600160a060020a03909116815260200160405180910390f35b341561073957600080fd5b610388600160a060020a0360043516611f51565b60405190815260200160405180910390f35b341561076a57600080fd5b61032860048035906024803591604435808301929082013591606435916084359160a4359160c43580820192908101359160e435908101910135611fce565b005b34156107b657600080fd5b61032861226e565b005b34156107cb57600080fd5b6107df600160a060020a036004351661232d565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561081f5780820151818401525b602001610806565b505050509050019250505060405180910390f35b341561083e57600080fd5b61035961246e565b604051600160a060020a03909116815260200160405180910390f35b341561086d57600080fd5b61020361247d565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102405780820151818401525b602001610227565b50505050905090810190601f16801561026d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156108f857600080fd5b61090c600160a060020a03600435166124b4565b60405180848152602001838152602001828152602001935050505060405180910390f35b341561093b57600080fd5b610328600160a060020a03600435166024356126ec565b005b341561095f57600080fd5b6101cd600160a060020a036004351661275f565b604051901515815260200160405180910390f35b341561099257600080fd5b6103596128d3565b604051600160a060020a03909116815260200160405180910390f35b34156109c157600080fd5b610328600160a060020a03600435166024356128e2565b005b34156109e557600080fd5b610328600160a060020a0360043516612c35565b005b3415610a0657600080fd5b6107df612c7d565b60405160208082528190810183818151815260200191508051906020019060200280838360005b8381101561081f5780820151818401525b602001610806565b505050509050019250505060405180910390f35b3415610a6d57600080fd5b610328600160a060020a0360043516612ea4565b005b3415610a8e57600080fd5b610328600435612f01565b005b60006040517f737570706f727473496e7465726661636528627974657334290000000000000081526019016040518091039020600160e060020a03191682600160e060020a0319161480610d1a57506040517f746f6b656e4d657461646174612875696e743235362c737472696e67290000008152601d0160405180910390206040517f746f6b656e734f664f776e657228616464726573732900000000000000000000815260160160405180910390206040517f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81527f7432353629000000000000000000000000000000000000000000000000000000602082015260250160405180910390206040517f7472616e7366657228616464726573732c75696e743235362900000000000000815260190160405180910390206040517f617070726f766528616464726573732c75696e74323536290000000000000000815260180160405180910390206040517f6f776e65724f662875696e743235362900000000000000000000000000000000815260100160405180910390206040517f62616c616e63654f662861646472657373290000000000000000000000000000815260120160405180910390206040517f746f74616c537570706c792829000000000000000000000000000000000000008152600d0160405180910390206040517f73796d626f6c2829000000000000000000000000000000000000000000000000815260080160405180910390206040517f6e616d652829000000000000000000000000000000000000000000000000000081526006016040518091039020181818181818181818600160e060020a03191682600160e060020a031916145b90505b919050565b610d2a6136a4565b610d326136b6565b600254600090600160a060020a03161515610d4c57600080fd5b600254600160a060020a031663cb4799f2878787600060405160a0015260405160e060020a63ffffffff861602815260048101848152604060248301908152604483018490529091606401848480828437820191505094505050505060a060405180830381600087803b1515610dc157600080fd5b6102c65a03f11515610dd257600080fd5b50505060405180608001805160209091016040529092509050610df58282612f55565b92505b50509392505050565b60408051908101604052600c81527f4269745061696e74696e67730000000000000000000000000000000000000000602082015281565b60005460a060020a900460ff1615610e4f57600080fd5b610e593382612faa565b1515610e6457600080fd5b610e6e818361302f565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b5b5050565b600154600160a060020a0316632f54bf6e3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f1d57600080fd5b6102c65a03f11515610f2e57600080fd5b5050506040518051905080610fb35750600154600160a060020a03166324d7806c3360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610f9757600080fd5b6102c65a03f11515610fa857600080fd5b505050604051805190505b1515610fbe57600080fd5b438110610fca57600080fd5b80821115610fd757600080fd5b600160a060020a0383163480156108fc0290604051600060405180830381858888f19350505050151561100957600080fd5b7f5ce0713bdae07b19c9fe8119bee321b8b425f4981de47ef807bf8e2c340258968383836040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a15b5b505050565b600154600160a060020a031681565b600154600090600160a060020a031663197b945482604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156110c257600080fd5b6102c65a03f115156110d357600080fd5b50505060405180519150505b90565b60005460a060020a900460ff16156110f957600080fd5b61106383838361309f565b5b5b505050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561116657600080fd5b6102c65a03f1151561117757600080fd5b5050506040518051905080610d1a5750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b505050604051805190505b90505b919050565b600054600160a060020a038281169116145b919050565b60005433600160a060020a0390811691161461123657600080fd5b600160a060020a038116151561124b57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b6112813361275f565b151561128c57600080fd5b60005460a060020a900460ff16156112a357600080fd5b6112ae8c8c8c613128565b6000546112c5908d90600160a060020a031661302f565b600154600160a060020a031663783370b58d8b8b60008181106112e457fe5b9050602002013560ff168c8c600181811015156112fd57fe5b9050602002013560ff168d8d6002818110151561131657fe5b9050602002013560ff1660405160e060020a63ffffffff8716028152600481019490945260ff92831660248501529082166044840152166064820152608401600060405180830381600087803b151561136e57600080fd5b6102c65a03f1151561137f57600080fd5b50505061138a613152565b600160a060020a031663f26539668d89898e8a60405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b15156113ed57600080fd5b6102c65a03f115156113fe57600080fd5b5050600154600160a060020a0316905063d59f4e688d868660405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b151561146e57600080fd5b6102c65a03f1151561147f57600080fd5b5050600154600160a060020a0316905063fabb79528d848460405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156114ef57600080fd5b6102c65a03f1151561150057600080fd5b5050505b5b5b505050505050505050505050565b60005433600160a060020a0390811691161461152f57600080fd5b600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561156857600080fd5b5b5b565b6115746136a4565b61157c6136a4565b6115846136a4565b61158c6136a4565b6115946136a4565b61159c6136a4565b600154600090819081908190819081908190600160a060020a0316632efd08df82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156115f257600080fd5b6102c65a03f1151561160357600080fd5b5050506040518051905096506116188e611f51565b9550856040518059106116285750595b908082528060200260200182016040525b509c508560405180591061164a5750595b908082528060200260200182016040525b509b508560405180591061166c5750595b908082528060200260200182016040525b509a508560405180591061168e5750595b908082528060200260200182016040525b509950856040518059106116b05750595b908082528060200260200182016040525b509850856040518059106116d25750595b908082528060200260200182016040525b509750600093505b86841015611b9157600154600160a060020a031663a3e7061d8560006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561174457600080fd5b6102c65a03f1151561175557600080fd5b5050506040518051935050600160a060020a038e16611773846131fc565b600160a060020a03161461178657611b86565b600154600160a060020a031663145f8ba284600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156117d757600080fd5b6102c65a03f115156117e857600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296505050841515925061182591505057611b86565b828d868151811061183257fe5b60209081029091010152600154600160a060020a03166350df8f718460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561188d57600080fd5b6102c65a03f1151561189e57600080fd5b50505060405180519050158c86815181106118b557fe5b911515602092830290910190910152600154600090600160a060020a03166337016a5f85836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561191757600080fd5b6102c65a03f1151561192857600080fd5b50505060405180519050118b868151811061193f57fe5b911515602092830290910190910152600154600160a060020a031663f50b769e8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561199f57600080fd5b6102c65a03f115156119b057600080fd5b50505060405180519150508015156119e45760008a86815181106119d057fe5b911515602092830290910190910152611a6d565b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a3557600080fd5b6102c65a03f11515611a4657600080fd5b50505060405180519050158a8681518110611a5d57fe5b9115156020928302909101909101525b600154600160a060020a0316630af9d89c8460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611abe57600080fd5b6102c65a03f11515611acf57600080fd5b50505060405180519050898681518110611ae557fe5b60ff909216602092830290910190910152600154600160a060020a0316639ed573608460006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611b4757600080fd5b6102c65a03f11515611b5857600080fd5b50505060405180519050888681518110611b6e57fe5b60ff9092166020928302909101909101526001909401935b6001909301926116eb565b5b5050505050505091939550919395565b60005433600160a060020a0390811691161480611c325750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611c0257600080fd5b6102c65a03f11515611c1357600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b1515611c3d57600080fd5b60005460a060020a900460ff161515611c5557600080fd5b611568613271565b5b5b5b565b611c6b3361110b565b1515611c7657600080fd5b60005460a060020a900460ff1615611c8d57600080fd5b600154600160a060020a03166337e246ad8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611cde57600080fd5b6102c65a03f11515611cef57600080fd5b505050604051805190501515611d0457600080fd5b600154600160a060020a0316637d6979e78260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611d5557600080fd5b6102c65a03f11515611d6657600080fd5b505050604051805190501515611d7b57600080fd5b600154600160a060020a0316638635b5278260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611dc357600080fd5b6102c65a03f11515611dd457600080fd5b5050600154600160a060020a03169050632dd7030b8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611e2057600080fd5b6102c65a03f11515611e3157600080fd5b5050600154600160a060020a03169050634a61f3478260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611e7d57600080fd5b6102c65a03f11515611e8e57600080fd5b5050600154600160a060020a0316905063a61bd76d8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611eda57600080fd5b6102c65a03f11515611eeb57600080fd5b5050505b5b5b50565b60006040517f7061696e74696e67730000000000000000000000000000000000000000000000815260090160405190819003902090505b90565b60005460a060020a900460ff1681565b6000610d1a826131fc565b90505b919050565b600154600090600160a060020a031663b4f6eae483836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b50505060405180519150505b919050565b6000611fd93361275f565b1515611fe457600080fd5b60005460a060020a900460ff1615611ffb57600080fd5b50426120088c8c83613128565b60005461201f908d90600160a060020a031661302f565b600154600160a060020a031663783370b58d8c8c600081811061203e57fe5b9050602002013560ff168d8d6001818110151561205757fe5b9050602002013560ff168e8e6002818110151561207057fe5b9050602002013560ff1660405160e060020a63ffffffff8716028152600481019490945260ff92831660248501529082166044840152166064820152608401600060405180830381600087803b15156120c857600080fd5b6102c65a03f115156120d957600080fd5b5050506120e4613152565b600160a060020a031663f26539668d8a8a428b60405160e060020a63ffffffff88160281526004810195909552602485019390935260448401919091526064830152608482015260a401600060405180830381600087803b151561214757600080fd5b6102c65a03f1151561215857600080fd5b5050600154600160a060020a0316905063d59f4e688d878760405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156121c857600080fd5b6102c65a03f115156121d957600080fd5b5050600154600160a060020a0316905063fabb79528d858560405160e060020a63ffffffff8616028152600481018481526040602483019081526044830184905290916064018484808284378201915050945050505050600060405180830381600087803b15156114ef57600080fd5b6102c65a03f1151561150057600080fd5b5050505b5b5b505050505050505050505050565b60005433600160a060020a03908116911614806122fe5750600154600160a060020a031663ca4b208b6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156122ce57600080fd5b6102c65a03f115156122df57600080fd5b50505060405180519050600160a060020a031633600160a060020a0316145b151561230957600080fd5b60005460a060020a900460ff161561232057600080fd5b6115686132d7565b5b5b5b565b6123356136a4565b600061233f6136a4565b600080600061234d87611f51565b945084151561237e5760006040518059106123655750595b908082528060200260200182016040525b509550612464565b8460405180591061238c5750595b908082528060200260200182016040525b5093506123a8611078565b925060009150600190505b82811161246057600154600160a060020a038089169116630d66343c8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561240f57600080fd5b6102c65a03f1151561242057600080fd5b50505060405180519050600160a060020a03161415612457578084838151811061244657fe5b602090810290910101526001909101905b5b6001016123b3565b8395505b5050505050919050565b600054600160a060020a031681565b60408051908101604052600281527f4250000000000000000000000000000000000000000000000000000000000000602082015281565b6000806000806000806124c5611078565b9250600091505b828210156126e157600154600160a060020a031663a3e7061d8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561252557600080fd5b6102c65a03f1151561253657600080fd5b5050506040518051915050600160a060020a038716612554826131fc565b600160a060020a031614612567576126d5565b60018054960195600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156125bc57600080fd5b6102c65a03f115156125cd57600080fd5b505050604051805190501561265c57600154600090600160a060020a03166337016a5f83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561262f57600080fd5b6102c65a03f1151561264057600080fd5b505050604051805190501115612657576001909301925b6126d5565b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156126ad57600080fd5b6102c65a03f115156126be57600080fd5b5050506040518051905015156126d5576001909401935b5b6001909101906124cc565b5b5050509193909250565b60005460a060020a900460ff161561270357600080fd5b600160a060020a038216151561271857600080fd5b30600160a060020a031682600160a060020a03161415151561273957600080fd5b6127433382612faa565b151561274e57600080fd5b610ebf338383613342565b5b5b5050565b600154600090600160a060020a0316632f54bf6e83836040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156127ba57600080fd5b6102c65a03f115156127cb57600080fd5b50505060405180519050806128505750600154600160a060020a03166324d7806c8360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561283457600080fd5b6102c65a03f1151561284557600080fd5b505050604051805190505b80610d1a5750600154600160a060020a031663babcc5398360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b505050604051805190505b90505b919050565b600254600160a060020a031681565b60005460a060020a900460ff16156128f957600080fd5b600160a060020a038216151561290e57600080fd5b30600160a060020a031682600160a060020a03161415151561292f57600080fd5b6129393382612faa565b151561294457600080fd5b600154600160a060020a03166350df8f718260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561299557600080fd5b6102c65a03f115156129a657600080fd5b5050506040518051905015156129bb57600080fd5b600154600160a060020a0316635f4eab658260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612a0c57600080fd5b6102c65a03f11515612a1d57600080fd5b5050506040518051159050612a3157600080fd5b600154600160a060020a03166337e246ad8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612a8257600080fd5b6102c65a03f11515612a9357600080fd5b5050506040518051905015612aff57600154600160a060020a0316632dd7030b8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515612aea57600080fd5b6102c65a03f11515612afb57600080fd5b5050505b600154600160a060020a0316631e801c8c8260405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515612b4757600080fd5b6102c65a03f11515612b5857600080fd5b505050612b66338383613342565b600154600160a060020a0316636bfaa9038360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515612bb657600080fd5b6102c65a03f11515612bc757600080fd5b5050600154600160a060020a03169050631be6ce573360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515612c1b57600080fd5b6102c65a03f11515612c2c57600080fd5b5050505b5b5050565b60005433600160a060020a03908116911614612c5057600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b612c856136a4565b6001546000908190819081908190600160a060020a0316632efd08df82604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612cd757600080fd5b6102c65a03f11515612ce857600080fd5b5050506040518051600154909650600160a060020a0316905063197b94546000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612d3d57600080fd5b6102c65a03f11515612d4e57600080fd5b50505060405180519050935083604051805910612d685750595b908082528060200260200182016040525b50955060009250600091505b84821015612e9b57600154600160a060020a031663a3e7061d8360006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612dde57600080fd5b6102c65a03f11515612def57600080fd5b5050506040518051600154909250600160a060020a031690506339e3af9b8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515612e4d57600080fd5b6102c65a03f11515612e5e57600080fd5b5050506040518051905015612e7257612e90565b80868481518110612e7f57fe5b602090810290910101526001909201915b600190910190612d85565b5b505050505090565b60005433600160a060020a03908116911614612ebf57600080fd5b600160a060020a0381161515612ed457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b612f0a3361275f565b1515612f1557600080fd5b60005460a060020a900460ff1615612f2c57600080fd5b612f3881600142613128565b600054611274908290600160a060020a031661302f565b5b5b5b50565b612f5d6136a4565b612f656136a4565b60008084604051805910612f765750595b908082528060200260200182016040525b5092505060208201905084612f9d828287613403565b8293505b50505092915050565b600154600090600160a060020a038085169116630d66343c84846040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561300157600080fd5b6102c65a03f1151561301257600080fd5b50505060405180519050600160a060020a03161490505b92915050565b600154600160a060020a031663febe4909838360405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b1515612c1b57600080fd5b6102c65a03f11515612c2c57600080fd5b5050505b5050565b60005460a060020a900460ff16156130b657600080fd5b600160a060020a03821615156130cb57600080fd5b30600160a060020a031682600160a060020a0316141515156130ec57600080fd5b6130f6338261344a565b151561310157600080fd5b61310b8382612faa565b151561311657600080fd5b611063838383613342565b5b5b505050565b60008054600160a060020a03169080600a61314884888480858b8b6134cf565b5b50505050505050565b6000806040517f61756374696f6e730000000000000000000000000000000000000000000000008152600801604051908190039020600154909150600160a060020a031663474da79a8260006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156131db57600080fd5b6102c65a03f115156131ec57600080fd5b50505060405180519250505b5090565b600154600090600160a060020a0316630d66343c83836040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156111e057600080fd5b6102c65a03f115156111f157600080fd5b50505060405180519150505b919050565b60005460a060020a900460ff16151561328957600080fd5b6000805474ff0000000000000000000000000000000000000000191690557f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a15b5b565b60005460a060020a900460ff16156132ee57600080fd5b6000805474ff0000000000000000000000000000000000000000191660a060020a1790557f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a15b5b565b600154600160a060020a031663687c4fa7828460405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401600060405180830381600087803b151561339957600080fd5b6102c65a03f115156133aa57600080fd5b5050507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051600160a060020a039384168152919092166020820152604080820192909252606001905180910390a15b505050565b60005b6020821061342a57825184526020840193506020830192505b602082039150613406565b6001826020036101000a0390508019835116818551161784525b50505050565b600154600090600160a060020a031663b5b12e758385846040516020015260405160e060020a63ffffffff85160281526004810192909252600160a060020a03166024820152604401602060405180830381600087803b15156134ac57600080fd5b6102c65a03f115156134bd57600080fd5b50505060405180519150505b92915050565b60008063ffffffff881688146134e457600080fd5b63ffffffff871687146134f657600080fd5b5b600154600160a060020a0316638754b1d18a8a8a8a8a8a8a60405160e060020a63ffffffff8a16028152600160a060020a0390971660048801526024870195909552604486019390935260ff918216606486015216608484015260a483015260c482015260e401600060405180830381600087803b151561357757600080fd5b6102c65a03f1151561358857600080fd5b5050600154600160a060020a0316905063145f8ba289600060405160c0015260405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156135dd57600080fd5b6102c65a03f115156135ee57600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051509296509094507f30327159df74d598a666b3800d1708fc84a7a52e5f6fb58cdd4bdffe7ad653c793508b92508c91508a9050898686604051958652600160a060020a03909416602086015260408086019390935260ff9091166060850152608084015260a083019190915260c0909101905180910390a161369860008a8a613342565b5b505050505050505050565b60206040519081016040526000815290565b60806040519081016040526004815b600081526000199190910190602001816136c55790505090565b60206040519081016040526000815290565b60206040519081016040526000815290565b602060405190810160405260008152905600a165627a7a72305820c0ea2fa0388529abf07d63e43f301f8796c232745c5992c476a6b5d28d30a2510029

Swarm Source

bzzr://c0ea2fa0388529abf07d63e43f301f8796c232745c5992c476a6b5d28d30a251

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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