Sponsored Link:   PAVOCOIN - IoT blockchain for the AgTech ecosystem. Bringing together IoT, blockchain, and agriculture. Join now!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 1430 txns
 Latest 25 txns from a total Of 1430 transactions
View All

TxHash Age From To Value [TxFee]
0xbc497405572bd610723d07e36ee5952c120d5e9074d93c20a1c9e2834b75f6b11 day 7 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000724525
0xdcd705e241aeb8db84a6775ec422c68345b3d3aef887a231586389d7f42f35f41 day 7 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000724525
0xc07506a8ce85d0ec6fe0bdfae03e8cbbd79a6389711cda99355a95832a2fed7f1 day 8 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000724525
0xb852920305723accac06bebc4c39eccb7c0b95af6d26211dfce81807a33a73e31 day 8 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000724525
0x1e302bd1736ac188b658a7ab7d42b41365e5009297a0b41e45f66cf9714059c11 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0011440755
0xceccecaa85a1780f52c9cfcaaf0fc6cfadfc150eeb27f941b72f03f2d85b17691 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0011440755
0x5cf9dbe1d2270d384856baf5ab01073a24c9c80562f01e60ec96fd55adb5e3581 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0012586075
0x5409b68951207cbf0f0a4f19cb9098fb064d2ef6cb59079f2055eb88cca8c5811 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.002595324
0xa6c9a9570d0518f8e5228582e38384d9adb66c596daa31be7e4d9d19bec441eb1 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.002556412
0x1cc313801eb977076ba830b29d7207cd7bebd8e7461d050b42003e4b6e5a96b71 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0009974335
0x2df3ba002c1b91de67856b44c93c57b6fabdc760d882c6a3e6fee7b4c01baa171 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0018225275
0x41536f85dca64c9b0bc045550b0ffbc60bae398dcfda525d75c6f5121cfe62481 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0012586075
0x417cbcfe54e5824cb99a99fac423b34d450c6ed476c0ba87c23d69e98bedc1771 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0012586075
0x5ca4b808496a98e4770842a85be253017e4d127394b942e09309eaff5dd47bbb1 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0012586075
0xbbf52816d704a4d3e98d545d9a3da352348d1ba07c20a1c6976806fbf02ba1221 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0012579995
0x0dfd29a5123c0c21935cae4c055440420acc39ca744d5332475a58dbe04f921b1 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0011856475
0xd2d413c62072d64a32d622d8c1afcfccffb3f51e9ff5d56cb49af330825cd5601 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0012586075
0xb0e47a748229bef9b869886b5460c148e48c6046f19314d06679b2d4e95f357d1 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.002600188
0xde38b6ebdd4318dc1b5ac1ffff321fbd165873d8f54f5b876a32270ce985a4d81 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0013765975
0xb7d8a1c9e67bcb2b8a5cf16858fc81e2cc2f5467bc88f44d37ab0120f5850f231 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0012160475
0xf996fef62933beabd5c875d202a95a118440f2e70a501aa8eeb04a5d2c8a17fb1 day 19 hrs ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0012586075
0x63e726067f3456c38957ffaa971011daf1b3e8a2fbfe4a166c8f43dc6756e13a1 day 23 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.00052226
0x59be3e9da574749783a4a9f4c2968a338e00461933d373c7c3cf949b76d539ad1 day 23 hrs ago0x3fbaa4462ab2f1a60b69bb9370432bee5e768045  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.000520212
0x593a5444ff5cf0e660c498deef30b9a9fa0b19839ebdca0680d9739e1dba00fb2 days 11 mins ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0013711665
0xd22a2db0f779b119c33a47ebda0d10e7b6da3e6ae23c6d1dcb96e31f674aaba22 days 11 mins ago0x3b60214fb41053862796a52ba6b6ce2dee260358  IN   0x89695d5b003eb6a546c1b6d3b272c36e423e94770 Ether0.0016057855
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 6 Internal Transactions

ParentTxHash Block Age From To Value
0xebbe13b078be5b4a76190a0c33ff12f0e84176c647d1a00612df9f4a0c40a5e056396453 days 20 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.793889999297211878 Ether
0x4b79e8ca99557fd5d52e73205b08040549de7cefc859924cdb7fdf92535f66cf56390773 days 23 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.5 Ether
0xa93f83c42147b122f1b1b52d40ca95239ca4e717a11173567d9a7c1b5b8eef6656360284 days 12 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b3.2 Ether
0xa9b058fdff8ec014ddc45274c0443bb7c917ef7cfbf50adc3b5f01595087577b56150838 days 4 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.5 Ether
0x4e088a6f0becf2e267e9452f51e2694765a937cc25c7f7e95a77dd6de14aace6559954710 days 22 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.15418 Ether
0xd7d8a3e99900b1747cc26403439ad4d559f15c913bb8643b5e6a087ac940d920559660611 days 10 hrs ago0x89695d5b003eb6a546c1b6d3b272c36e423e94770xe67e1f24a637f84be1e68d547022de8883a0d89b0.0805 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact match)
Contract Name: VirtualRealEstate
Compiler Version: v0.4.23+commit.124ca40d
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.2;

// Make setPrivate payout any pending payouts

// ERC20 Token Interface
contract Token {
    uint256 public totalSupply;
    function balanceOf(address _owner) public constant returns (uint256 balance);
    function transfer(address _to, uint256 _value) public returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    function approve(address _spender, uint256 _value) public returns (bool success);
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

// ERC20 Token Implementation
contract StandardToken is Token {
    function transfer(address _to, uint256 _value) public returns (bool success) {
      if (balances[msg.sender] >= _value && _value > 0) {
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Transfer(msg.sender, _to, _value);
        return true;
      } else {
        return false;
      }
    }

    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
      if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) {
        balances[_to] += _value;
        balances[_from] -= _value;
        allowed[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
      } else {
        return false;
      }
    }

    function balanceOf(address _owner) public constant returns (uint256 balance) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) public returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
      return allowed[_owner][_spender];
    }

    mapping (address => uint256) balances;
    mapping (address => mapping (address => uint256)) allowed;
}

/*
    PXLProperty is the ERC20 Cryptocurrency & Cryptocollectable
    * It is a StandardToken ERC20 token and inherits all of that
    * It has the Property structure and holds the Properties
    * It governs the regulators (moderators, admins, root, Property DApps and PixelProperty)
    * It has getters and setts for all data storage
    * It selectively allows access to PXL and Properties based on caller access
    
    Moderation is handled inside PXLProperty, not by external DApps. It's up to other apps to respect the flags, however
*/
contract PXLProperty is StandardToken {
    /* Access Level Constants */
    uint8 constant LEVEL_1_MODERATOR = 1;    // 1: Level 1 Moderator - nsfw-flagging power
    uint8 constant LEVEL_2_MODERATOR = 2;    // 2: Level 2 Moderator - ban power + [1]
    uint8 constant LEVEL_1_ADMIN = 3;        // 3: Level 1 Admin - Can manage moderator levels + [1,2]
    uint8 constant LEVEL_2_ADMIN = 4;        // 4: Level 2 Admin - Can manage admin level 1 levels + [1-3]
    uint8 constant LEVEL_1_ROOT = 5;         // 5: Level 1 Root - Can set property DApps level [1-4]
    uint8 constant LEVEL_2_ROOT = 6;         // 6: Level 2 Root - Can set pixelPropertyContract level [1-5]
    uint8 constant LEVEL_3_ROOT = 7;         // 7: Level 3 Root - Can demote/remove root, transfer root, [1-6]
    uint8 constant LEVEL_PROPERTY_DAPPS = 8; // 8: Property DApps - Power over manipulating Property data
    uint8 constant LEVEL_PIXEL_PROPERTY = 9; // 9: PixelProperty - Power over PXL generation & Property ownership
    /* Flags Constants */
    uint8 constant FLAG_NSFW = 1;
    uint8 constant FLAG_BAN = 2;
    
    /* Accesser Addresses & Levels */
    address pixelPropertyContract; // Only contract that has control over PXL creation and Property ownership
    mapping (address => uint8) public regulators; // Mapping of users/contracts to their control levels
    
    // Mapping of PropertyID to Property
    mapping (uint16 => Property) public properties;
    // Property Owner's website
    mapping (address => uint256[2]) public ownerWebsite;
    // Property Owner's hover text
    mapping (address => uint256[2]) public ownerHoverText;
    
    /* ### Ownable Property Structure ### */
    struct Property {
        uint8 flag;
        bool isInPrivateMode; //Whether in private mode for owner-only use or free-use mode to be shared
        address owner; //Who owns the Property. If its zero (0), then no owner and known as a "system-Property"
        address lastUpdater; //Who last changed the color of the Property
        uint256[5] colors; //10x10 rgb pixel colors per property. colors[0] is the top row, colors[9] is the bottom row
        uint256 salePrice; //PXL price the owner has the Property on sale for. If zero, then its not for sale.
        uint256 lastUpdate; //Timestamp of when it had its color last updated
        uint256 becomePublic; //Timestamp on when to become public
        uint256 earnUntil; //Timestamp on when Property token generation will stop
    }
    
    /* ### Regulation Access Modifiers ### */
    modifier regulatorAccess(uint8 accessLevel) {
        require(accessLevel <= LEVEL_3_ROOT); // Only request moderator, admin or root levels forr regulatorAccess
        require(regulators[msg.sender] >= accessLevel); // Users must meet requirement
        if (accessLevel >= LEVEL_1_ADMIN) { //
            require(regulators[msg.sender] <= LEVEL_3_ROOT); //DApps can't do Admin/Root stuff, but can set nsfw/ban flags
        }
        _;
    }
    
    modifier propertyDAppAccess() {
        require(regulators[msg.sender] == LEVEL_PROPERTY_DAPPS || regulators[msg.sender] == LEVEL_PIXEL_PROPERTY );
        _;
    }
    
    modifier pixelPropertyAccess() {
        require(regulators[msg.sender] == LEVEL_PIXEL_PROPERTY);
        _;
    }
    
    /* ### Constructor ### */
    function PXLProperty() public {
        regulators[msg.sender] = LEVEL_3_ROOT; // Creator set to Level 3 Root
    }
    
    /* ### Moderator, Admin & Root Functions ### */
    // Moderator Flags
    function setPropertyFlag(uint16 propertyID, uint8 flag) public regulatorAccess(flag == FLAG_NSFW ? LEVEL_1_MODERATOR : LEVEL_2_MODERATOR) {
        properties[propertyID].flag = flag;
        if (flag == FLAG_BAN) {
            require(properties[propertyID].isInPrivateMode); //Can't ban an owner's property if a public user caused the NSFW content
            properties[propertyID].colors = [0, 0, 0, 0, 0];
        }
    }
    
    // Setting moderator/admin/root access
    function setRegulatorAccessLevel(address user, uint8 accessLevel) public regulatorAccess(LEVEL_1_ADMIN) {
        if (msg.sender != user) {
            require(regulators[msg.sender] > regulators[user]); // You have to be a higher rank than the user you are changing
        }
        require(regulators[msg.sender] > accessLevel); // You have to be a higher rank than the role you are setting
        regulators[user] = accessLevel;
    }
    
    function setPixelPropertyContract(address newPixelPropertyContract) public regulatorAccess(LEVEL_2_ROOT) {
        require(newPixelPropertyContract != 0);
        if (pixelPropertyContract != 0) {
            regulators[pixelPropertyContract] = 0; //If we already have a pixelPropertyContract, revoke its ownership
        }
        
        pixelPropertyContract = newPixelPropertyContract;
        regulators[newPixelPropertyContract] = LEVEL_PIXEL_PROPERTY;
    }
    
    function setPropertyDAppContract(address propertyDAppContract, bool giveAccess) public regulatorAccess(LEVEL_1_ROOT) {
        require(propertyDAppContract != 0);
        regulators[propertyDAppContract] = giveAccess ? LEVEL_PROPERTY_DAPPS : 0;
    }
    
    /* ### PropertyDapp Functions ### */
    function setPropertyColors(uint16 propertyID, uint256[5] colors) public propertyDAppAccess() {
        for(uint256 i = 0; i < 5; i++) {
            if (properties[propertyID].colors[i] != colors[i]) {
                properties[propertyID].colors[i] = colors[i];
            }
        }
    }
    
    function setPropertyRowColor(uint16 propertyID, uint8 row, uint256 rowColor) public propertyDAppAccess() {
        if (properties[propertyID].colors[row] != rowColor) {
            properties[propertyID].colors[row] = rowColor;
        }
    }
    
    function setOwnerHoverText(address textOwner, uint256[2] hoverText) public propertyDAppAccess() {
        require (textOwner != 0);
        ownerHoverText[textOwner] = hoverText;
    }
    
    function setOwnerLink(address websiteOwner, uint256[2] website) public propertyDAppAccess() {
        require (websiteOwner != 0);
        ownerWebsite[websiteOwner] = website;
    }
    
    /* ### PixelProperty Property Functions ### */
    function setPropertyPrivateMode(uint16 propertyID, bool isInPrivateMode) public pixelPropertyAccess() {
        if (properties[propertyID].isInPrivateMode != isInPrivateMode) {
            properties[propertyID].isInPrivateMode = isInPrivateMode;
        }
    }
    
    function setPropertyOwner(uint16 propertyID, address propertyOwner) public pixelPropertyAccess() {
        if (properties[propertyID].owner != propertyOwner) {
            properties[propertyID].owner = propertyOwner;
        }
    }
    
    function setPropertyLastUpdater(uint16 propertyID, address lastUpdater) public pixelPropertyAccess() {
        if (properties[propertyID].lastUpdater != lastUpdater) {
            properties[propertyID].lastUpdater = lastUpdater;
        }
    }
    
    function setPropertySalePrice(uint16 propertyID, uint256 salePrice) public pixelPropertyAccess() {
        if (properties[propertyID].salePrice != salePrice) {
            properties[propertyID].salePrice = salePrice;
        }
    }
    
    function setPropertyLastUpdate(uint16 propertyID, uint256 lastUpdate) public pixelPropertyAccess() {
        properties[propertyID].lastUpdate = lastUpdate;
    }
    
    function setPropertyBecomePublic(uint16 propertyID, uint256 becomePublic) public pixelPropertyAccess() {
        properties[propertyID].becomePublic = becomePublic;
    }
    
    function setPropertyEarnUntil(uint16 propertyID, uint256 earnUntil) public pixelPropertyAccess() {
        properties[propertyID].earnUntil = earnUntil;
    }
    
    function setPropertyPrivateModeEarnUntilLastUpdateBecomePublic(uint16 propertyID, bool privateMode, uint256 earnUntil, uint256 lastUpdate, uint256 becomePublic) public pixelPropertyAccess() {
        if (properties[propertyID].isInPrivateMode != privateMode) {
            properties[propertyID].isInPrivateMode = privateMode;
        }
        properties[propertyID].earnUntil = earnUntil;
        properties[propertyID].lastUpdate = lastUpdate;
        properties[propertyID].becomePublic = becomePublic;
    }
    
    function setPropertyLastUpdaterLastUpdate(uint16 propertyID, address lastUpdater, uint256 lastUpdate) public pixelPropertyAccess() {
        if (properties[propertyID].lastUpdater != lastUpdater) {
            properties[propertyID].lastUpdater = lastUpdater;
        }
        properties[propertyID].lastUpdate = lastUpdate;
    }
    
    function setPropertyBecomePublicEarnUntil(uint16 propertyID, uint256 becomePublic, uint256 earnUntil) public pixelPropertyAccess() {
        properties[propertyID].becomePublic = becomePublic;
        properties[propertyID].earnUntil = earnUntil;
    }
    
    function setPropertyOwnerSalePricePrivateModeFlag(uint16 propertyID, address owner, uint256 salePrice, bool privateMode, uint8 flag) public pixelPropertyAccess() {
        if (properties[propertyID].owner != owner) {
            properties[propertyID].owner = owner;
        }
        if (properties[propertyID].salePrice != salePrice) {
            properties[propertyID].salePrice = salePrice;
        }
        if (properties[propertyID].isInPrivateMode != privateMode) {
            properties[propertyID].isInPrivateMode = privateMode;
        }
        if (properties[propertyID].flag != flag) {
            properties[propertyID].flag = flag;
        }
    }
    
    function setPropertyOwnerSalePrice(uint16 propertyID, address owner, uint256 salePrice) public pixelPropertyAccess() {
        if (properties[propertyID].owner != owner) {
            properties[propertyID].owner = owner;
        }
        if (properties[propertyID].salePrice != salePrice) {
            properties[propertyID].salePrice = salePrice;
        }
    }
    
    /* ### PixelProperty PXL Functions ### */
    function rewardPXL(address rewardedUser, uint256 amount) public pixelPropertyAccess() {
        require(rewardedUser != 0);
        balances[rewardedUser] += amount;
        totalSupply += amount;
    }
    
    function burnPXL(address burningUser, uint256 amount) public pixelPropertyAccess() {
        require(burningUser != 0);
        require(balances[burningUser] >= amount);
        balances[burningUser] -= amount;
        totalSupply -= amount;
    }
    
    function burnPXLRewardPXL(address burner, uint256 toBurn, address rewarder, uint256 toReward) public pixelPropertyAccess() {
        require(balances[burner] >= toBurn);
        if (toBurn > 0) {
            balances[burner] -= toBurn;
            totalSupply -= toBurn;
        }
        if (rewarder != 0) {
            balances[rewarder] += toReward;
            totalSupply += toReward;
        }
    } 
    
    function burnPXLRewardPXLx2(address burner, uint256 toBurn, address rewarder1, uint256 toReward1, address rewarder2, uint256 toReward2) public pixelPropertyAccess() {
        require(balances[burner] >= toBurn);
        if (toBurn > 0) {
            balances[burner] -= toBurn;
            totalSupply -= toBurn;
        }
        if (rewarder1 != 0) {
            balances[rewarder1] += toReward1;
            totalSupply += toReward1;
        }
        if (rewarder2 != 0) {
            balances[rewarder2] += toReward2;
            totalSupply += toReward2;
        }
    } 
    
    /* ### All Getters/Views ### */
    function getOwnerHoverText(address user) public view returns(uint256[2]) {
        return ownerHoverText[user];
    }
    
    function getOwnerLink(address user) public view returns(uint256[2]) {
        return ownerWebsite[user];
    }
    
    function getPropertyFlag(uint16 propertyID) public view returns(uint8) {
        return properties[propertyID].flag;
    }
    
    function getPropertyPrivateMode(uint16 propertyID) public view returns(bool) {
        return properties[propertyID].isInPrivateMode;
    }
    
    function getPropertyOwner(uint16 propertyID) public view returns(address) {
        return properties[propertyID].owner;
    }
    
    function getPropertyLastUpdater(uint16 propertyID) public view returns(address) {
        return properties[propertyID].lastUpdater;
    }
    
    function getPropertyColors(uint16 propertyID) public view returns(uint256[5]) {
        return properties[propertyID].colors;
    }

    function getPropertyColorsOfRow(uint16 propertyID, uint8 rowIndex) public view returns(uint256) {
        require(rowIndex <= 9);
        return properties[propertyID].colors[rowIndex];
    }
    
    function getPropertySalePrice(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].salePrice;
    }
    
    function getPropertyLastUpdate(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].lastUpdate;
    }
    
    function getPropertyBecomePublic(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].becomePublic;
    }
    
    function getPropertyEarnUntil(uint16 propertyID) public view returns(uint256) {
        return properties[propertyID].earnUntil;
    }
    
    function getRegulatorLevel(address user) public view returns(uint8) {
        return regulators[user];
    }
    
    // Gets the (owners address, Ethereum sale price, PXL sale price, last update timestamp, whether its in private mode or not, when it becomes public timestamp, flag) for a Property
    function getPropertyData(uint16 propertyID, uint256 systemSalePriceETH, uint256 systemSalePricePXL) public view returns(address, uint256, uint256, uint256, bool, uint256, uint8) {
        Property memory property = properties[propertyID];
        bool isInPrivateMode = property.isInPrivateMode;
        //If it's in private, but it has expired and should be public, set our bool to be public
        if (isInPrivateMode && property.becomePublic <= now) { 
            isInPrivateMode = false;
        }
        if (properties[propertyID].owner == 0) {
            return (0, systemSalePriceETH, systemSalePricePXL, property.lastUpdate, isInPrivateMode, property.becomePublic, property.flag);
        } else {
            return (property.owner, 0, property.salePrice, property.lastUpdate, isInPrivateMode, property.becomePublic, property.flag);
        }
    }
    
    function getPropertyPrivateModeBecomePublic(uint16 propertyID) public view returns (bool, uint256) {
        return (properties[propertyID].isInPrivateMode, properties[propertyID].becomePublic);
    }
    
    function getPropertyLastUpdaterBecomePublic(uint16 propertyID) public view returns (address, uint256) {
        return (properties[propertyID].lastUpdater, properties[propertyID].becomePublic);
    }
    
    function getPropertyOwnerSalePrice(uint16 propertyID) public view returns (address, uint256) {
        return (properties[propertyID].owner, properties[propertyID].salePrice);
    }
    
    function getPropertyPrivateModeLastUpdateEarnUntil(uint16 propertyID) public view returns (bool, uint256, uint256) {
        return (properties[propertyID].isInPrivateMode, properties[propertyID].lastUpdate, properties[propertyID].earnUntil);
    }
}

// PixelProperty
contract VirtualRealEstate {
    /* ### Variables ### */
    // Contract owner
    address owner;
    PXLProperty pxlProperty;
    
    bool initialPropertiesReserved;
    
    mapping (uint16 => bool) hasBeenSet;
    
    // The amount in % for which a user is paid
    uint8 constant USER_BUY_CUT_PERCENT = 98;
    // Maximum amount of generated PXL a property can give away per minute
    uint8 constant PROPERTY_GENERATES_PER_MINUTE = 1;
    // The point in time when the initial grace period is over, and users get the default values based on coins burned
    uint256 GRACE_PERIOD_END_TIMESTAMP;
    // The amount of time required for a Property to generate tokens for payouts
    uint256 constant PROPERTY_GENERATION_PAYOUT_INTERVAL = (1 minutes); //Generation amount
    
    uint256 ownerEth = 0; // Amount of ETH the contract owner is entitled to withdraw (only Root account can do withdraws)
    
    // The current system prices of ETH and PXL, for which unsold Properties are listed for sale at
    uint256 systemSalePriceETH;
    uint256 systemSalePricePXL;
    uint8 systemPixelIncreasePercent;
    uint8 systemPriceIncreaseStep;
    uint16 systemETHStepTally;
    uint16 systemPXLStepTally;
    uint16 systemETHStepCount;
    uint16 systemPXLStepCount;

    /* ### Events ### */
    event PropertyColorUpdate(uint16 indexed property, uint256[5] colors, uint256 lastUpdate, address indexed lastUpdaterPayee, uint256 becomePublic, uint256 indexed rewardedCoins);
    event PropertyBought(uint16 indexed property, address indexed newOwner, uint256 ethAmount, uint256 PXLAmount, uint256 timestamp, address indexed oldOwner);
    event SetUserHoverText(address indexed user, uint256[2] newHoverText);
    event SetUserSetLink(address indexed user, uint256[2] newLink);
    event PropertySetForSale(uint16 indexed property, uint256 forSalePrice);
    event DelistProperty(uint16 indexed property);
    event SetPropertyPublic(uint16 indexed property);
    event SetPropertyPrivate(uint16 indexed property, uint32 numMinutesPrivate, address indexed rewardedUser, uint256 indexed rewardedCoins);
    event Bid(uint16 indexed property, uint256 bid, uint256 timestamp);
    
    /* ### MODIFIERS ### */

    // Only the contract owner can call these methods
    modifier ownerOnly() {
        require(owner == msg.sender);
        _;
    }
    
    // Can only be called on Properties referecing a valid PropertyID
    modifier validPropertyID(uint16 propertyID) {
        if (propertyID < 10000) {
            _;
        }
    }
    
    /* ### PUBLICALLY INVOKABLE FUNCTIONS ### */
    
    /* CONSTRUCTOR */
    function VirtualRealEstate() public {
        owner = msg.sender; // Default the owner to be whichever Ethereum account created the contract
        systemSalePricePXL = 1000; //Initial PXL system price
        systemSalePriceETH = 19500000000000000; //Initial ETH system price
        systemPriceIncreaseStep = 10;
        systemPixelIncreasePercent = 5;
        systemETHStepTally = 0;
        systemPXLStepTally = 0;
        systemETHStepCount = 1;
        systemPXLStepCount = 1;
        initialPropertiesReserved = false;
    }
    
    function setPXLPropertyContract(address pxlPropertyContract) public ownerOnly() {
        pxlProperty = PXLProperty(pxlPropertyContract);
        if (!initialPropertiesReserved) {
            uint16 xReserved = 45;
            uint16 yReserved = 0;
            for(uint16 x = 0; x < 10; ++x) {
                uint16 propertyID = (yReserved) * 100 + (xReserved + x);
                _transferProperty(propertyID, owner, 0, 0, 0, 0);
            }
            initialPropertiesReserved = true;
            GRACE_PERIOD_END_TIMESTAMP = now + 3 days; // Extends the three 
        }
    }

    function getSaleInformation() public view ownerOnly() returns(uint8, uint8, uint16, uint16, uint16, uint16) {
        return (systemPixelIncreasePercent, systemPriceIncreaseStep, systemETHStepTally, systemPXLStepTally, systemETHStepCount, systemPXLStepCount);
    }
    
    /* USER FUNCTIONS */
    
    // Property owners can change their hoverText for when a user mouses over their Properties
    function setHoverText(uint256[2] text) public {
        pxlProperty.setOwnerHoverText(msg.sender, text);
        SetUserHoverText(msg.sender, text);
    }
    
    // Property owners can change the clickable link for when a user clicks on their Properties
    function setLink(uint256[2] website) public {
        pxlProperty.setOwnerLink(msg.sender, website);
        SetUserSetLink(msg.sender, website);
    }
    
    // If a Property is private which has expired, make it public
    function tryForcePublic(uint16 propertyID) public validPropertyID(propertyID) { 
        var (isInPrivateMode, becomePublic) = pxlProperty.getPropertyPrivateModeBecomePublic(propertyID);
        if (isInPrivateMode && becomePublic < now) {
            pxlProperty.setPropertyPrivateMode(propertyID, false);
        }
    }
    
    // Update the 10x10 image data for a Property, triggering potential payouts if it succeeds
    function setColors(uint16 propertyID, uint256[5] newColors, uint256 PXLToSpend) public validPropertyID(propertyID) returns(bool) {
        uint256 projectedPayout = getProjectedPayout(propertyID);
        if (_tryTriggerPayout(propertyID, PXLToSpend)) {
            pxlProperty.setPropertyColors(propertyID, newColors);
            var (lastUpdater, becomePublic) = pxlProperty.getPropertyLastUpdaterBecomePublic(propertyID);
            PropertyColorUpdate(propertyID, newColors, now, lastUpdater, becomePublic, projectedPayout);
            // The first user to set a Properties color ever is awarded extra PXL due to eating the extra GAS cost of creating the uint256[5]
            if (!hasBeenSet[propertyID]) {
                pxlProperty.rewardPXL(msg.sender, 25);
                hasBeenSet[propertyID] = true;
            }
            return true;
        }
        return false;
    }

    //Wrapper to call setColors 4 times in one call. Reduces overhead, however still duplicate work everywhere to ensure
    function setColorsX4(uint16[4] propertyIDs, uint256[20] newColors, uint256 PXLToSpendEach) public returns(bool[4]) {
        bool[4] results;
        for(uint256 i = 0; i < 4; i++) {
            require(propertyIDs[i] < 10000);
            results[i] = setColors(propertyIDs[i], [newColors[i * 5], newColors[i * 5 + 1], newColors[i * 5 + 2], newColors[i * 5 + 3], newColors[i * 5 + 4]], PXLToSpendEach);
        }
        return results;
    }

    //Wrapper to call setColors 8 times in one call. Reduces overhead, however still duplicate work everywhere to ensure
    function setColorsX8(uint16[8] propertyIDs, uint256[40] newColors, uint256 PXLToSpendEach) public returns(bool[8]) {
        bool[8] results;
        for(uint256 i = 0; i < 8; i++) {
            require(propertyIDs[i] < 10000);
            results[i] = setColors(propertyIDs[i], [newColors[i * 5], newColors[i * 5 + 1], newColors[i * 5 + 2], newColors[i * 5 + 3], newColors[i * 5 + 4]], PXLToSpendEach);
        }
        return results;
    }
    
    // Update a row of image data for a Property, triggering potential payouts if it succeeds
    function setRowColors(uint16 propertyID, uint8 row, uint256 newColorData, uint256 PXLToSpend) public validPropertyID(propertyID) returns(bool) {
        require(row < 10);
        uint256 projectedPayout = getProjectedPayout(propertyID);
        if (_tryTriggerPayout(propertyID, PXLToSpend)) {
            pxlProperty.setPropertyRowColor(propertyID, row, newColorData);
            var (lastUpdater, becomePublic) = pxlProperty.getPropertyLastUpdaterBecomePublic(propertyID);
            PropertyColorUpdate(propertyID, pxlProperty.getPropertyColors(propertyID), now, lastUpdater, becomePublic, projectedPayout);
            return true;
        }
        return false;
    }
    // Property owners can toggle their Properties between private mode and free-use mode
    function setPropertyMode(uint16 propertyID, bool setPrivateMode, uint32 numMinutesPrivate) public validPropertyID(propertyID) {
        var (propertyFlag, propertyIsInPrivateMode, propertyOwner, propertyLastUpdater, propertySalePrice, propertyLastUpdate, propertyBecomePublic, propertyEarnUntil) = pxlProperty.properties(propertyID);
        
        require(msg.sender == propertyOwner);
        uint256 whenToBecomePublic = 0;
        uint256 rewardedAmount = 0;
        
        if (setPrivateMode) {
            //If inprivate, we can extend the duration, otherwise if becomePublic > now it means a free-use user locked it
            require(propertyIsInPrivateMode || propertyBecomePublic <= now || propertyLastUpdater == msg.sender ); 
            require(numMinutesPrivate > 0);
            require(pxlProperty.balanceOf(msg.sender) >= numMinutesPrivate);
            // Determines when the Property becomes public, one payout interval per coin burned
            whenToBecomePublic = (now < propertyBecomePublic ? propertyBecomePublic : now) + PROPERTY_GENERATION_PAYOUT_INTERVAL * numMinutesPrivate;

            rewardedAmount = getProjectedPayout(propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil);
            if (rewardedAmount > 0 && propertyLastUpdater != 0) {
                pxlProperty.burnPXLRewardPXLx2(msg.sender, numMinutesPrivate, propertyLastUpdater, rewardedAmount, msg.sender, rewardedAmount);
            } else {
                pxlProperty.burnPXL(msg.sender, numMinutesPrivate);
            }

        } else {
            // If its in private mode and still has time left, reimburse them for N-1 minutes tokens back
            if (propertyIsInPrivateMode && propertyBecomePublic > now) {
                pxlProperty.rewardPXL(msg.sender, ((propertyBecomePublic - now) / PROPERTY_GENERATION_PAYOUT_INTERVAL) - 1);
            }
        }
        
        pxlProperty.setPropertyPrivateModeEarnUntilLastUpdateBecomePublic(propertyID, setPrivateMode, 0, 0, whenToBecomePublic);
        
        if (setPrivateMode) {
            SetPropertyPrivate(propertyID, numMinutesPrivate, propertyLastUpdater, rewardedAmount);
        } else {
            SetPropertyPublic(propertyID);
        }
    }
    // Transfer Property ownership between accounts. This has no cost, no cut and does not change flag status
    function transferProperty(uint16 propertyID, address newOwner) public validPropertyID(propertyID) returns(bool) {
        require(pxlProperty.getPropertyOwner(propertyID) == msg.sender);
        _transferProperty(propertyID, newOwner, 0, 0, pxlProperty.getPropertyFlag(propertyID), msg.sender);
        return true;
    }
    // Purchase a unowned system-Property in a combination of PXL and ETH
    function buyProperty(uint16 propertyID, uint256 pxlValue) public validPropertyID(propertyID) payable returns(bool) {
        //Must be the first purchase, otherwise do it with PXL from another user
        require(pxlProperty.getPropertyOwner(propertyID) == 0);
        // Must be able to afford the given PXL
        require(pxlProperty.balanceOf(msg.sender) >= pxlValue);
        require(pxlValue != 0);
        
        // Protect against underflow
        require(pxlValue <= systemSalePricePXL);
        uint256 pxlLeft = systemSalePricePXL - pxlValue;
        uint256 ethLeft = systemSalePriceETH / systemSalePricePXL * pxlLeft;
        
        // Must have spent enough ETH to cover the ETH left after PXL price was subtracted
        require(msg.value >= ethLeft);
        
        pxlProperty.burnPXLRewardPXL(msg.sender, pxlValue, owner, pxlValue);
        
        systemPXLStepTally += uint16(100 * pxlValue / systemSalePricePXL);
        if (systemPXLStepTally >= 1000) {
             systemPXLStepCount++;
            systemSalePricePXL += systemSalePricePXL * 9 / systemPXLStepCount / 10;
            systemPXLStepTally -= 1000;
        }
        
        ownerEth += msg.value;

        systemETHStepTally += uint16(100 * pxlLeft / systemSalePricePXL);
        if (systemETHStepTally >= 1000) {
            systemETHStepCount++;
            systemSalePriceETH += systemSalePriceETH * 9 / systemETHStepCount / 10;
            systemETHStepTally -= 1000;
        }

        _transferProperty(propertyID, msg.sender, msg.value, pxlValue, 0, 0);
        
        return true;
    }
    // Purchase a listed user-owner Property in PXL
    function buyPropertyInPXL(uint16 propertyID, uint256 PXLValue) public validPropertyID(propertyID) {
        // If Property is system-owned
        var (propertyOwner, propertySalePrice) = pxlProperty.getPropertyOwnerSalePrice(propertyID);
        address originalOwner = propertyOwner;
        if (propertyOwner == 0) {
            // Turn it into a user-owned at system price with contract owner as owner
            pxlProperty.setPropertyOwnerSalePrice(propertyID, owner, systemSalePricePXL);
            propertyOwner = owner;
            propertySalePrice = systemSalePricePXL;
            // Increase system PXL price
            systemPXLStepTally += 100;
            if (systemPXLStepTally >= 1000) {
                systemPXLStepCount++;
                systemSalePricePXL += systemSalePricePXL * 9 / systemPXLStepCount / 10;
                systemPXLStepTally -= 1000;
            }
        }
        require(propertySalePrice <= PXLValue);
        uint256 amountTransfered = propertySalePrice * USER_BUY_CUT_PERCENT / 100;
        pxlProperty.burnPXLRewardPXLx2(msg.sender, propertySalePrice, propertyOwner, amountTransfered, owner, (propertySalePrice - amountTransfered));        
        _transferProperty(propertyID, msg.sender, 0, propertySalePrice, 0, originalOwner);
    }

    // Purchase a system-Property in pure ETH
    function buyPropertyInETH(uint16 propertyID) public validPropertyID(propertyID) payable returns(bool) {
        require(pxlProperty.getPropertyOwner(propertyID) == 0);
        require(msg.value >= systemSalePriceETH);
        
        ownerEth += msg.value;
        systemETHStepTally += 100;
        if (systemETHStepTally >= 1000) {
            systemETHStepCount++;
            systemSalePriceETH += systemSalePriceETH * 9 / systemETHStepCount / 10;
            systemETHStepTally -= 1000;
        }
        _transferProperty(propertyID, msg.sender, msg.value, 0, 0, 0);
        return true;
    }
    
    // Property owner lists their Property for sale at their preferred price
    function listForSale(uint16 propertyID, uint256 price) public validPropertyID(propertyID) returns(bool) {
        require(price != 0);
        require(msg.sender == pxlProperty.getPropertyOwner(propertyID));
        pxlProperty.setPropertySalePrice(propertyID, price);
        PropertySetForSale(propertyID, price);
        return true;
    }
    
    // Property owner delists their Property from being for sale
    function delist(uint16 propertyID) public validPropertyID(propertyID) returns(bool) {
        require(msg.sender == pxlProperty.getPropertyOwner(propertyID));
        pxlProperty.setPropertySalePrice(propertyID, 0);
        DelistProperty(propertyID);
        return true;
    }

    // Make a public bid and notify a Property owner of your bid. Burn 1 coin
    function makeBid(uint16 propertyID, uint256 bidAmount) public validPropertyID(propertyID) {
        require(bidAmount > 0);
        require(pxlProperty.balanceOf(msg.sender) >= 1 + bidAmount);
        Bid(propertyID, bidAmount, now);
        pxlProperty.burnPXL(msg.sender, 1);
    }
    
    /* CONTRACT OWNER FUNCTIONS */
    
    // Contract owner can withdraw up to ownerEth amount
    function withdraw(uint256 amount) public ownerOnly() {
        if (amount <= ownerEth) {
            owner.transfer(amount);
            ownerEth -= amount;
        }
    }
    
    // Contract owner can withdraw ownerEth amount
    function withdrawAll() public ownerOnly() {
        owner.transfer(ownerEth);
        ownerEth = 0;
    }
    
    // Contract owner can change who is the contract owner
    function changeOwners(address newOwner) public ownerOnly() {
        owner = newOwner;
    }
    
    /* ## PRIVATE FUNCTIONS ## */
    
    // Function which wraps payouts for setColors
    function _tryTriggerPayout(uint16 propertyID, uint256 pxlToSpend) private returns(bool) {
        var (propertyFlag, propertyIsInPrivateMode, propertyOwner, propertyLastUpdater, propertySalePrice, propertyLastUpdate, propertyBecomePublic, propertyEarnUntil) = pxlProperty.properties(propertyID);
        //If the Property is in private mode and expired, make it public
        if (propertyIsInPrivateMode && propertyBecomePublic <= now) {
            pxlProperty.setPropertyPrivateMode(propertyID, false);
            propertyIsInPrivateMode = false;
        }
        //If its in private mode, only the owner can interact with it
        if (propertyIsInPrivateMode) {
            require(msg.sender == propertyOwner);
            require(propertyFlag != 2);
        //If if its in free-use mode
        } else if (propertyBecomePublic <= now || propertyLastUpdater == msg.sender) {
            uint256 pxlSpent = pxlToSpend + 1; //All pxlSpent math uses N+1, so built in for convenience
            if (isInGracePeriod() && pxlToSpend < 2) { //If first 3 days and we spent <2 coins, treat it as if we spent 2
                pxlSpent = 3; //We're treating it like 2, but it's N+1 in the math using this
            }
            
            uint256 projectedAmount = getProjectedPayout(propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil);
            pxlProperty.burnPXLRewardPXLx2(msg.sender, pxlToSpend, propertyLastUpdater, projectedAmount, propertyOwner, projectedAmount);
            
            //BecomePublic = (N+1)/2 minutes of user-private mode
            //EarnUntil = (N+1)*5 coins earned max/minutes we can earn from
            pxlProperty.setPropertyBecomePublicEarnUntil(propertyID, now + (pxlSpent * PROPERTY_GENERATION_PAYOUT_INTERVAL / 2), now + (pxlSpent * 5 * PROPERTY_GENERATION_PAYOUT_INTERVAL));
        } else {
            return false;
        }
        pxlProperty.setPropertyLastUpdaterLastUpdate(propertyID, msg.sender, now);
        return true;
    }
    // Transfer ownership of a Property and reset their info
    function _transferProperty(uint16 propertyID, address newOwner, uint256 ethAmount, uint256 PXLAmount, uint8 flag, address oldOwner) private {
        require(newOwner != 0);
        pxlProperty.setPropertyOwnerSalePricePrivateModeFlag(propertyID, newOwner, 0, false, flag);
        PropertyBought(propertyID, newOwner, ethAmount, PXLAmount, now, oldOwner);
    }
    
    // Gets the (owners address, Ethereum sale price, PXL sale price, last update timestamp, whether its in private mode or not, when it becomes public timestamp, flag) for a Property
    function getPropertyData(uint16 propertyID) public validPropertyID(propertyID) view returns(address, uint256, uint256, uint256, bool, uint256, uint32) {
        return pxlProperty.getPropertyData(propertyID, systemSalePriceETH, systemSalePricePXL);
    }
    
    // Gets the system ETH and PXL prices
    function getSystemSalePrices() public view returns(uint256, uint256) {
        return (systemSalePriceETH, systemSalePricePXL);
    }
    
    // Gets the sale prices of any Property in ETH and PXL
    function getForSalePrices(uint16 propertyID) public validPropertyID(propertyID) view returns(uint256, uint256) {
        if (pxlProperty.getPropertyOwner(propertyID) == 0) {
            return getSystemSalePrices();
        } else {
            return (0, pxlProperty.getPropertySalePrice(propertyID));
        }
    }
    
    // Gets the projected sale price for a property should it be triggered at this very moment
    function getProjectedPayout(uint16 propertyID) public view returns(uint256) {
        var (propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil) = pxlProperty.getPropertyPrivateModeLastUpdateEarnUntil(propertyID);
        return getProjectedPayout(propertyIsInPrivateMode, propertyLastUpdate, propertyEarnUntil);
    }
    
    function getProjectedPayout(bool propertyIsInPrivateMode, uint256 propertyLastUpdate, uint256 propertyEarnUntil) public view returns(uint256) {
        if (!propertyIsInPrivateMode && propertyLastUpdate != 0) {
            uint256 earnedUntil = (now < propertyEarnUntil) ? now : propertyEarnUntil;
            uint256 minutesSinceLastColourChange = (earnedUntil - propertyLastUpdate) / PROPERTY_GENERATION_PAYOUT_INTERVAL;
            return minutesSinceLastColourChange * PROPERTY_GENERATES_PER_MINUTE;
            //return (((now < propertyEarnUntil) ? now : propertyEarnUntil - propertyLastUpdate) / PROPERTY_GENERATION_PAYOUT_INTERVAL) * PROPERTY_GENERATES_PER_MINUTE; //Gave too high number wtf?
        }
        return 0;
    }
    
    // Gets whether the contract is still in the intial grace period where we give extra features to color setters
    function isInGracePeriod() public view returns(bool) {
        return now <= GRACE_PERIOD_END_TIMESTAMP;
    }
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"getPropertyData","outputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"},{"name":"","type":"uint256"},{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"buyPropertyInETH","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"row","type":"uint8"},{"name":"newColorData","type":"uint256"},{"name":"PXLToSpend","type":"uint256"}],"name":"setRowColors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"getProjectedPayout","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"newOwner","type":"address"}],"name":"transferProperty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"tryForcePublic","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"PXLValue","type":"uint256"}],"name":"buyPropertyInPXL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"newColors","type":"uint256[5]"},{"name":"PXLToSpend","type":"uint256"}],"name":"setColors","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyIDs","type":"uint16[8]"},{"name":"newColors","type":"uint256[40]"},{"name":"PXLToSpendEach","type":"uint256"}],"name":"setColorsX8","outputs":[{"name":"","type":"bool[8]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pxlPropertyContract","type":"address"}],"name":"setPXLPropertyContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"propertyIsInPrivateMode","type":"bool"},{"name":"propertyLastUpdate","type":"uint256"},{"name":"propertyEarnUntil","type":"uint256"}],"name":"getProjectedPayout","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyIDs","type":"uint16[4]"},{"name":"newColors","type":"uint256[20]"},{"name":"PXLToSpendEach","type":"uint256"}],"name":"setColorsX4","outputs":[{"name":"","type":"bool[4]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"setPrivateMode","type":"bool"},{"name":"numMinutesPrivate","type":"uint32"}],"name":"setPropertyMode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getSystemSalePrices","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"text","type":"uint256[2]"}],"name":"setHoverText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"bidAmount","type":"uint256"}],"name":"makeBid","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"price","type":"uint256"}],"name":"listForSale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"getForSalePrices","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"}],"name":"delist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isInGracePeriod","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"website","type":"uint256[2]"}],"name":"setLink","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwners","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"propertyID","type":"uint16"},{"name":"pxlValue","type":"uint256"}],"name":"buyProperty","outputs":[{"name":"","type":"bool"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"getSaleInformation","outputs":[{"name":"","type":"uint8"},{"name":"","type":"uint8"},{"name":"","type":"uint16"},{"name":"","type":"uint16"},{"name":"","type":"uint16"},{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"colors","type":"uint256[5]"},{"indexed":false,"name":"lastUpdate","type":"uint256"},{"indexed":true,"name":"lastUpdaterPayee","type":"address"},{"indexed":false,"name":"becomePublic","type":"uint256"},{"indexed":true,"name":"rewardedCoins","type":"uint256"}],"name":"PropertyColorUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":true,"name":"newOwner","type":"address"},{"indexed":false,"name":"ethAmount","type":"uint256"},{"indexed":false,"name":"PXLAmount","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":true,"name":"oldOwner","type":"address"}],"name":"PropertyBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"newHoverText","type":"uint256[2]"}],"name":"SetUserHoverText","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"user","type":"address"},{"indexed":false,"name":"newLink","type":"uint256[2]"}],"name":"SetUserSetLink","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"forSalePrice","type":"uint256"}],"name":"PropertySetForSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"}],"name":"DelistProperty","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"}],"name":"SetPropertyPublic","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"numMinutesPrivate","type":"uint32"},{"indexed":true,"name":"rewardedUser","type":"address"},{"indexed":true,"name":"rewardedCoins","type":"uint256"}],"name":"SetPropertyPrivate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"property","type":"uint16"},{"indexed":false,"name":"bid","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"Bid","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6080604052600060045534801561001557600080fd5b5060008054600160a060020a03191633600160a060020a03161781556103e8600655664547258d1ec00060059081556007805468010000000000000000660100000000000061ff0019909216610a001760ff191690931767ffffffffffff0000191617604060020a61ffff0219169190911790556001805460a060020a60ff02191690556131f49081906100a990396000f30060806040526004361061013a5763ffffffff60e060020a60003504166309ddc583811461013f5780630ad50c02146101a55780631286d9e8146101c85780631bb2921b146101f05780631db939681461021e5780631e7769de146102465780632e1a7d4d1461026457806332a428821461027c57806335b11b721461029b57806351846028146102e75780636b1ac9001461038e578063728516c2146103af578063853828b6146103cf5780639cfda697146103e4578063a72aa16314610464578063ab4c44871461048e578063acd9930b146104bc578063ae813029146104fc578063b047f2451461051b578063b4f6aa561461053a578063ba08651814610556578063cf27d01614610572578063d56a455514610587578063d7963f94146105c7578063e829945a146105e8578063f1ab36b4146105fa575b600080fd5b34801561014b57600080fd5b5061015b61ffff6004351661064e565b60408051600160a060020a03909816885260208801969096528686019490945260608601929092521515608085015260a084015263ffffffff1660c0830152519081900360e00190f35b6101b461ffff60043516610755565b604080519115158252519081900360200190f35b3480156101d457600080fd5b506101b461ffff6004351660ff602435166044356064356108e9565b3480156101fc57600080fd5b5061020c61ffff60043516610b87565b60408051918252519081900360200190f35b34801561022a57600080fd5b506101b461ffff60043516600160a060020a0360243516610c4a565b34801561025257600080fd5b5061026261ffff60043516610da3565b005b34801561027057600080fd5b50610262600435610ef3565b34801561028857600080fd5b5061026261ffff60043516602435610f5e565b3480156102a757600080fd5b506040805160a08082019092526101b4916004803561ffff1692369260c49190602490600590839083908082843750939650509235935061126f92505050565b3480156102f357600080fd5b506040805161010081810190925261035591369160049161010491908390600890839083908082843750506040805161050081810190925294979695818101959450925060289150839083908082843750939650509235935061154092505050565b604051808261010080838360005b8381101561037b578181015183820152602001610363565b5050505090500191505060405180910390f35b34801561039a57600080fd5b50610262600160a060020a03600435166116bc565b3480156103bb57600080fd5b5061020c60043515156024356044356117bc565b3480156103db57600080fd5b50610262611800565b3480156103f057600080fd5b5060408051608081810190925261044f9136916004916084919083908190839082908082843750506040805161028081810190925294979695818101959450925060149150839083908082843750939650509235935061185e92505050565b60405181518152808260808083836020610363565b34801561047057600080fd5b5061026261ffff60043516602435151563ffffffff604435166119ae565b34801561049a57600080fd5b506104a3611f89565b6040805192835260208301919091528051918290030190f35b3480156104c857600080fd5b50604080518082018252610262913691600491604491908390600290839083908082843750939650611f9395505050505050565b34801561050857600080fd5b5061026261ffff600435166024356120a9565b34801561052757600080fd5b506101b461ffff60043516602435612230565b34801561054657600080fd5b506104a361ffff600435166123b1565b34801561056257600080fd5b506101b461ffff60043516612504565b34801561057e57600080fd5b506101b461266c565b34801561059357600080fd5b5060408051808201825261026291369160049160449190839060029083908390808284375093965061267595505050505050565b3480156105d357600080fd5b50610262600160a060020a0360043516612767565b6101b461ffff600435166024356127b1565b34801561060657600080fd5b5061060f612ba2565b6040805160ff978816815295909616602086015261ffff938416858701529183166060850152821660808401521660a082015290519081900360c00190f35b6000806000806000806000876127108161ffff16101561074957600154600554600654604080517fb7b1e3cc00000000000000000000000000000000000000000000000000000000815261ffff8e1660048201526024810193909352604483019190915251600160a060020a039092169163b7b1e3cc9160648082019260e0929091908290030181600087803b1580156106e757600080fd5b505af11580156106fb573d6000803e3d6000fd5b505050506040513d60e081101561071157600080fd5b508051602082015160408301516060840151608085015160a086015160c090960151949d50929b509099509750955090935060ff1691505b50919395979092949650565b6000816127108161ffff1610156108e3576001546040805160e060020a632ccaa3e902815261ffff861660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b1580156107ba57600080fd5b505af11580156107ce573d6000803e3d6000fd5b505050506040513d60208110156107e457600080fd5b5051600160a060020a0316156107f957600080fd5b60055434101561080857600080fd5b60048054340190556007805461ffff6201000080830482166064018216810263ffff00001990931692909217928390556103e891909204909116106108ce576007805467ffff00000000000019811666010000000000009182900461ffff908116600101811683029190911792839055600554600a9392909204169060090281151561089057fe5b0481151561089a57fe5b600580549290910490910190556007805463ffff0000198116620100009182900461ffff9081166103e71901169091021790555b6108de8333346000806000612c17565b600191505b50919050565b600080600080876127108161ffff161015610b7b57600a60ff89161061090e57600080fd5b61091789610b87565b93506109238987612d27565b15610b7657600154604080517f3953ca8b00000000000000000000000000000000000000000000000000000000815261ffff8c16600482015260ff8b166024820152604481018a90529051600160a060020a0390921691633953ca8b9160648082019260009290919082900301818387803b1580156109a157600080fd5b505af11580156109b5573d6000803e3d6000fd5b5050600154604080517f63a6568f00000000000000000000000000000000000000000000000000000000815261ffff8e1660048201528151600160a060020a0390931694506363a6568f9350602480820193918290030181600087803b158015610a1e57600080fd5b505af1158015610a32573d6000803e3d6000fd5b505050506040513d6040811015610a4857600080fd5b508051602090910151600154604080517fe86994ea00000000000000000000000000000000000000000000000000000000815261ffff8e166004820181905291519497509295508793600160a060020a038089169492937fdf630a0a8e935495f00b4eb29dc220bc326d500d01e41767674b995bc1833b519391169163e86994ea9160248082019260a0929091908290030181600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060a0811015610b2557600080fd5b5060405142908890808460a080838360005b83811015610b4f578181015183820152602001610b37565b5050505091909101938452505060208201526040805191829003019150a460019450610b7b565b600094505b50505050949350505050565b600154604080517f1f12da0600000000000000000000000000000000000000000000000000000000815261ffff841660048201529051600092839283928392600160a060020a031691631f12da0691602480830192606092919082900301818787803b158015610bf657600080fd5b505af1158015610c0a573d6000803e3d6000fd5b505050506040513d6060811015610c2057600080fd5b50805160208201516040909201519094509092509050610c418383836117bc565b95945050505050565b6000826127108161ffff161015610d9c576001546040805160e060020a632ccaa3e902815261ffff871660048201529051600160a060020a03338116931691632ccaa3e99160248083019260209291908290030181600087803b158015610cb057600080fd5b505af1158015610cc4573d6000803e3d6000fd5b505050506040513d6020811015610cda57600080fd5b5051600160a060020a031614610cef57600080fd5b600154604080517f98864aaf00000000000000000000000000000000000000000000000000000000815261ffff871660048201529051610d9792879287926000928392600160a060020a03909116916398864aaf9160248082019260209290919082900301818787803b158015610d6557600080fd5b505af1158015610d79573d6000803e3d6000fd5b505050506040513d6020811015610d8f57600080fd5b505133612c17565b600191505b5092915050565b600080826127108161ffff161015610eed57600154604080517fab383a6b00000000000000000000000000000000000000000000000000000000815261ffff871660048201528151600160a060020a039093169263ab383a6b926024808401939192918290030181600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b505050506040513d6040811015610e4657600080fd5b5080516020909101519093509150828015610e6057504282105b15610eed57600154604080517f4b1ec20c00000000000000000000000000000000000000000000000000000000815261ffff871660048201526000602482018190529151600160a060020a0390931692634b1ec20c9260448084019391929182900301818387803b158015610ed457600080fd5b505af1158015610ee8573d6000803e3d6000fd5b505050505b50505050565b60005433600160a060020a03908116911614610f0e57600080fd5b6004548111610f5b5760008054604051600160a060020a039091169183156108fc02918491818181858888f19350505050158015610f50573d6000803e3d6000fd5b506004805482900390555b50565b600080600080856127108161ffff16101561126657600154604080517fcf09e82000000000000000000000000000000000000000000000000000000000815261ffff8a1660048201528151600160a060020a039093169263cf09e820926024808401939192918290030181600087803b158015610fda57600080fd5b505af1158015610fee573d6000803e3d6000fd5b505050506040513d604081101561100457600080fd5b5080516020909101519095509350849250600160a060020a038316151561119a5760015460008054600654604080517f45ede90000000000000000000000000000000000000000000000000000000000815261ffff8d166004820152600160a060020a03938416602482015260448101929092525191909316926345ede90092606480830193919282900301818387803b1580156110a157600080fd5b505af11580156110b5573d6000803e3d6000fd5b50506000546006546007805461ffff64010000000080830482166064018216810265ffff00000000199093169290921792839055600160a060020a039094169a509198506103e891900490911610915061119a9050576007805469ffff0000000000000000198116680100000000000000009182900461ffff908116600101811683029190911792839055600654600a9392909204169060090281151561115857fe5b0481151561116257fe5b600680549290910490910190556007805465ffff000000001981166401000000009182900461ffff9081166103e71901169091021790555b858411156111a757600080fd5b60015460008054604080517f121c2b35000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018a90528a81166044830152606460628b028190049083018190529381166084830152838a0360a4830152915192965093169263121c2b359260c480830193919282900301818387803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b505050506112668733600087600088612c17565b50505050505050565b600080600080866127108161ffff1610156115355761128d88610b87565b93506112998887612d27565b15611530576001546040517feb39bc9000000000000000000000000000000000000000000000000000000000815261ffff8a1660048201908152600160a060020a039092169163eb39bc90918b918b916024018260a080838360005b8381101561130d5781810151838201526020016112f5565b5050505090500192505050600060405180830381600087803b15801561133257600080fd5b505af1158015611346573d6000803e3d6000fd5b5050600154604080517f63a6568f00000000000000000000000000000000000000000000000000000000815261ffff8d1660048201528151600160a060020a0390931694506363a6568f9350602480820193918290030181600087803b1580156113af57600080fd5b505af11580156113c3573d6000803e3d6000fd5b505050506040513d60408110156113d957600080fd5b50805160209091015160405191945092508490600160a060020a0385169061ffff8b16907fdf630a0a8e935495f00b4eb29dc220bc326d500d01e41767674b995bc1833b51908b9042908890808460a080838360005b8381101561144757818101518382015260200161142f565b5050505091909101938452505060208201526040805191829003019150a461ffff881660009081526002602052604090205460ff16151561152757600154604080517f26728b14000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015260196024830152915191909216916326728b1491604480830192600092919082900301818387803b1580156114f057600080fd5b505af1158015611504573d6000803e3d6000fd5b50505061ffff89166000908152600260205260409020805460ff19166001179055505b60019450611535565b600094505b505050509392505050565b611548613189565b6000805b60088110156116635761271086826008811061156457fe5b602002015161ffff161061157757600080fd5b61162b86826008811061158657fe5b60200201516040805160a08101909152808860058602602881106115a657fe5b6020020151815260200188856005026001016028811015156115c457fe5b6020020151815260200188856005026002016028811015156115e257fe5b60200201518152602001888560050260030160288110151561160057fe5b60200201518152602001888560050260040160288110151561161e57fe5b602002015190528661126f565b82826008811061163757fe5b602081049091018054921515601f9092166101000a91820260ff9092021990921617905560010161154c565b60408051610100810191829052908390600890826000855b825461010083900a900460ff16151581526020600192830181810494850194909303909202910180841161167b579050505050505092505b50509392505050565b6000805481908190819033600160a060020a039081169116146116de57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038716179081905574010000000000000000000000000000000000000000900460ff1615156117b557602d935060009250600091505b600a8261ffff16101561177657506000805460648402858401019161176b918391600160a060020a0390911690808080612c17565b816001019150611736565b6001805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790556203f48042016003555b5050505050565b6000806000851580156117ce57508415155b156117f4578342106117e057836117e2565b425b9150603c8583030492508290506116b3565b50600095945050505050565b60005433600160a060020a0390811691161461181b57600080fd5b60008054600454604051600160a060020a039092169281156108fc029290818181858888f19350505050158015611856573d6000803e3d6000fd5b506000600455565b6118666131a9565b6000805b60048110156119745761271086826004811061188257fe5b602002015161ffff161061189557600080fd5b61193c8682600481106118a457fe5b60200201516040805160a08101909152808860058602601481106118c457fe5b6020020151815260200188856005026001016014811015156118e257fe5b60200201518152602001888560050260020160148110151561190057fe5b60200201518152602001888560050260030160148110151561191e57fe5b60200201518152602001888560050260040160148110151561161e57fe5b82826004811061194857fe5b602081049091018054921515601f9092166101000a91820260ff9092021990921617905560010161186a565b604080516080810191829052835460ff16151581529083906004908260016020860180841161167b5750949b9a5050505050505050505050565b6000806000806000806000806000808c6127108161ffff161015611f7957600160009054906101000a9004600160a060020a0316600160a060020a03166369a4c4e78f6040518263ffffffff1660e060020a028152600401808261ffff1661ffff16815260200191505061010060405180830381600087803b158015611a3357600080fd5b505af1158015611a47573d6000803e3d6000fd5b505050506040513d610100811015611a5e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050509a509a509a509a509a509a509a509a5088600160a060020a031633600160a060020a0316141515611ae557600080fd5b60009250600091508c15611da8578980611aff5750428511155b80611b1b575033600160a060020a031688600160a060020a0316145b1515611b2657600080fd5b600063ffffffff8d1611611b3957600080fd5b8b63ffffffff16600160009054906101000a9004600160a060020a0316600160a060020a03166370a08231336040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015611bb057600080fd5b505af1158015611bc4573d6000803e3d6000fd5b505050506040513d6020811015611bda57600080fd5b50511015611be757600080fd5b8b63ffffffff16603c02854210611bfe5742611c00565b855b019250611c0e8a87866117bc565b9150600082118015611c285750600160a060020a03881615155b15611d0c57600160009054906101000a9004600160a060020a0316600160a060020a031663121c2b35338e8b8633886040518763ffffffff1660e060020a0281526004018087600160a060020a0316600160a060020a031681526020018663ffffffff16815260200185600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a031681526020018281526020019650505050505050600060405180830381600087803b158015611cef57600080fd5b505af1158015611d03573d6000803e3d6000fd5b50505050611da3565b600160009054906101000a9004600160a060020a0316600160a060020a031663f6f8ca07338e6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a031681526020018263ffffffff16815260200192505050600060405180830381600087803b158015611d8a57600080fd5b505af1158015611d9e573d6000803e3d6000fd5b505050505b611e48565b898015611db457504285115b15611e4857600154604080517f26728b14000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152603c428a0304600019016024830152915191909216916326728b1491604480830192600092919082900301818387803b158015611e2f57600080fd5b505af1158015611e43573d6000803e3d6000fd5b505050505b600160009054906101000a9004600160a060020a0316600160a060020a031663886b148d8f8f600080886040518663ffffffff1660e060020a028152600401808661ffff1661ffff1681526020018515151515815260200184815260200183815260200182815260200195505050505050600060405180830381600087803b158015611ed357600080fd5b505af1158015611ee7573d6000803e3d6000fd5b505050508c15611f49578188600160a060020a03168f61ffff167fa21d884986f2c87cfb81054448f66071c9363735665db28d236c882a5c0917968f604051808263ffffffff1663ffffffff16815260200191505060405180910390a4611f79565b60405161ffff8f16907f3f7bf071636ed8429b752f79e5cd881beb27062a4d0092050a0fc633850d387d90600090a25b5050505050505050505050505050565b6005546006549091565b600154604080517f606bc9a500000000000000000000000000000000000000000000000000000000815233600160a060020a038181166004840190815294169363606bc9a59391928692602490910190839080838360005b83811015612003578181015183820152602001611feb565b5050505090500192505050600060405180830381600087803b15801561202857600080fd5b505af115801561203c573d6000803e3d6000fd5b5050505033600160a060020a03167fb05ccb51f2408b99be7026712c574396fced9c3e0480bf7b8f8874d8c830b7cc826040518082600260200280838360005b8381101561209457818101518382015260200161207c565b5050505090500191505060405180910390a250565b816127108161ffff16101561222b57600082116120c557600080fd5b60018054604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015291519386019391909216916370a082319160248083019260209291908290030181600087803b15801561213257600080fd5b505af1158015612146573d6000803e3d6000fd5b505050506040513d602081101561215c57600080fd5b5051101561216957600080fd5b60408051838152426020820152815161ffff8616927f606e2d57e3221093069398002086bf333ae29b8033fc68ddf70c7a4516b530f8928290030190a260018054604080517ff6f8ca07000000000000000000000000000000000000000000000000000000008152600160a060020a03338116600483015260248201949094529051929091169163f6f8ca079160448082019260009290919082900301818387803b15801561221757600080fd5b505af1158015611266573d6000803e3d6000fd5b505050565b6000826127108161ffff161015610d9c5782151561224d57600080fd5b6001546040805160e060020a632ccaa3e902815261ffff871660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b1580156122a157600080fd5b505af11580156122b5573d6000803e3d6000fd5b505050506040513d60208110156122cb57600080fd5b505133600160a060020a039081169116146122e557600080fd5b600154604080517f6d87b65c00000000000000000000000000000000000000000000000000000000815261ffff87166004820152602481018690529051600160a060020a0390921691636d87b65c9160448082019260009290919082900301818387803b15801561235557600080fd5b505af1158015612369573d6000803e3d6000fd5b505060408051868152905161ffff881693507ffbf70f26ac04d08c24acb352205513f53182e26fe61c050a6dd445a584cd145192509081900360200190a25060019392505050565b600080826127108161ffff1610156124fe576001546040805160e060020a632ccaa3e902815261ffff871660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b15801561241757600080fd5b505af115801561242b573d6000803e3d6000fd5b505050506040513d602081101561244157600080fd5b5051600160a060020a031615156124635761245a611f89565b925092506124fe565b600154604080517f1bbc795200000000000000000000000000000000000000000000000000000000815261ffff871660048201529051600092600160a060020a031691631bbc795291602480830192602092919082900301818787803b1580156124cc57600080fd5b505af11580156124e0573d6000803e3d6000fd5b505050506040513d60208110156124f657600080fd5b505190935091505b50915091565b6000816127108161ffff1610156108e3576001546040805160e060020a632ccaa3e902815261ffff861660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b505050506040513d602081101561259357600080fd5b505133600160a060020a039081169116146125ad57600080fd5b600154604080517f6d87b65c00000000000000000000000000000000000000000000000000000000815261ffff861660048201526000602482018190529151600160a060020a0390931692636d87b65c9260448084019391929182900301818387803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505060405161ffff861692507f01a14d3ac14361bc1087c805becdb2946b166a265e22798f7011f3a9e8b5fc6c9150600090a250600192915050565b60035442111590565b600154604080517f6fcdcb3e00000000000000000000000000000000000000000000000000000000815233600160a060020a0381811660048401908152941693636fcdcb3e9391928692602490910190839080838360005b838110156126e55781810151838201526020016126cd565b5050505090500192505050600060405180830381600087803b15801561270a57600080fd5b505af115801561271e573d6000803e3d6000fd5b5050604080518451815233600160a060020a031693507f4d267d545ed24f4a32ae8dafe3dd6b7015cf92b46e36306b74986fc9288964a79250849181908390808383602061207c565b60005433600160a060020a0390811691161461278257600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000806000846127108161ffff161015612b99576001546040805160e060020a632ccaa3e902815261ffff891660048201529051600160a060020a0390921691632ccaa3e9916024808201926020929091908290030181600087803b15801561281957600080fd5b505af115801561282d573d6000803e3d6000fd5b505050506040513d602081101561284357600080fd5b5051600160a060020a03161561285857600080fd5b600154604080517f70a08231000000000000000000000000000000000000000000000000000000008152600160a060020a0333811660048301529151889392909216916370a08231916024808201926020929091908290030181600087803b1580156128c357600080fd5b505af11580156128d7573d6000803e3d6000fd5b505050506040513d60208110156128ed57600080fd5b505110156128fa57600080fd5b84151561290657600080fd5b60065485111561291557600080fd5b846006540392508260065460055481151561292c57fe5b040291503482111561293d57600080fd5b60015460008054604080517f2a396734000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152602482018b90529283166044820152606481018a905290519190931692632a39673492608480830193919282900301818387803b1580156129bb57600080fd5b505af11580156129cf573d6000803e3d6000fd5b50505050600654856064028115156129e357fe5b6007805461ffff640100000000808304821695909404949094018416830265ffff000000001990911617908190556103e891900490911610612aae576007805469ffff0000000000000000198116680100000000000000009182900461ffff908116600101811683029190911792839055600654600a93929092041690600902811515612a6c57fe5b04811515612a7657fe5b600680549290910490910190556007805465ffff000000001981166401000000009182900461ffff9081166103e71901169091021790555b600480543401905560065460648402811515612ac657fe5b6007805461ffff62010000808304821695909404949094018416830263ffff00001990911617908190556103e891900490911610612b85576007805467ffff00000000000019811666010000000000009182900461ffff908116600101811683029190911792839055600554600a93929092041690600902811515612b4757fe5b04811515612b5157fe5b600580549290910490910190556007805463ffff0000198116620100009182900461ffff9081166103e71901169091021790555b612b9486333488600080612c17565b600193505b50505092915050565b600080548190819081908190819033600160a060020a03908116911614612bc857600080fd5b505060075460ff8082169550610100820416935061ffff620100008204811693506401000000008204811692506601000000000000820481169168010000000000000000900416909192939495565b600160a060020a0385161515612c2c57600080fd5b600154604080517fb9e58ab000000000000000000000000000000000000000000000000000000000815261ffff89166004820152600160a060020a0388811660248301526000604483018190526064830181905260ff87166084840152925193169263b9e58ab09260a48084019391929182900301818387803b158015612cb257600080fd5b505af1158015612cc6573d6000803e3d6000fd5b5050604080518781526020810187905242818301529051600160a060020a0380861694508916925061ffff8a16917f75d46023a8160c0896514b1afdbbaf5d7b2175bb0ef87ee9c94df9e7455f9627919081900360600190a4505050505050565b6000806000806000806000806000806000600160009054906101000a9004600160a060020a0316600160a060020a03166369a4c4e78e6040518263ffffffff1660e060020a028152600401808261ffff1661ffff16815260200191505061010060405180830381600087803b158015612d9f57600080fd5b505af1158015612db3573d6000803e3d6000fd5b505050506040513d610100811015612dca57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505099509950995099509950995099509950888015612e3e5750428411155b15612ed357600160009054906101000a9004600160a060020a0316600160a060020a0316634b1ec20c8e60006040518363ffffffff1660e060020a028152600401808361ffff1661ffff1681526020018215151515815260200192505050600060405180830381600087803b158015612eb657600080fd5b505af1158015612eca573d6000803e3d6000fd5b50505050600098505b8815612f0f5787600160a060020a031633600160a060020a0316141515612ef957600080fd5b600260ff8b161415612f0a57600080fd5b6130d4565b4284111580612f2f575033600160a060020a031687600160a060020a0316145b156130cb578b6001019150612f4261266c565b8015612f4e575060028c105b15612f5857600391505b612f638986856117bc565b9050600160009054906101000a9004600160a060020a0316600160a060020a031663121c2b35338e8a858d876040518763ffffffff1660e060020a0281526004018087600160a060020a0316600160a060020a0316815260200186815260200185600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a031681526020018281526020019650505050505050600060405180830381600087803b15801561302157600080fd5b505af1158015613035573d6000803e3d6000fd5b5050600154600160a060020a0316915063c575200d90508e6002603c8602044201603c866005020242016040518463ffffffff1660e060020a028152600401808461ffff1661ffff1681526020018381526020018281526020019350505050600060405180830381600087803b1580156130ae57600080fd5b505af11580156130c2573d6000803e3d6000fd5b505050506130d4565b60009a50613179565b600160009054906101000a9004600160a060020a0316600160a060020a03166315f590338e33426040518463ffffffff1660e060020a028152600401808461ffff1661ffff16815260200183600160a060020a0316600160a060020a031681526020018281526020019350505050600060405180830381600087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b5050505060019a505b5050505050505050505092915050565b610100604051908101604052806008906020820280388339509192915050565b60806040519081016040528060049060208202803883395091929150505600a165627a7a7230582051780a0fec2be618ff8d179637064c67aeb511d23c4110dad02503ce7673387c0029

   Swarm Source:
bzzr://51780a0fec2be618ff8d179637064c67aeb511d23c4110dad02503ce7673387c

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.