Contract Overview
Balance: 0.071455233518518504 Ether
Ether Value: $8.35 (@ $116.85/ETH)
Transactions: 32193 txns
Token Tracker: CryptoBots (CBT)
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x77e42674e1cc459dd116bcab3d3be01409481f9dat txn 0x083e89a37eee38cf1c5e539809c2e7e6574ef91294046ae1b986f73bc8887be7
Token Balance:
 Latest 25 transactions from a total of 32193 transactions

TxHash Age From To Value [TxFee]
0x030adae08ad27c979f209bcfbcb9b120a637c69097c6e023aec870f05e9acfb517 hrs 52 mins ago0xb188ee1daca51ce6b58ccf8a81ce4025a714bc73  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000250328
0xf44988f88b19485faaa4ce7893643e2ec8a8cc4bef9a5a7f0c66536b769d11b117 hrs 52 mins ago0xb188ee1daca51ce6b58ccf8a81ce4025a714bc73  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000231455
0xd032de0e08eec251f05bd0b041fd2bd3625b58f7d3ffd1f7de133869557f65e317 hrs 53 mins ago0xb188ee1daca51ce6b58ccf8a81ce4025a714bc73  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000250328
0x1b4bdd62f755b9b8788040988960e098933433160b90f249ccadd0a65e3776ca17 hrs 54 mins ago0xb188ee1daca51ce6b58ccf8a81ce4025a714bc73  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000231455
0x7060b3d420f428719b71478a2f783cdf81ff5730f4c579072959c1673c45397518 hrs 3 mins ago0xb188ee1daca51ce6b58ccf8a81ce4025a714bc73  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000370328
0x131793e7e77cf9640c5478b1d33f724bcb1cbd01df23c2c7d46cbf400608f4aa1 day 3 hrs ago0x1b8e15229f052b42c1bdff4a7d131fa600447972  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.0000657111
0x4aeeb8f676268f65e56ed437c109af6904b74886e8d7fa83a1017ae853f8d2761 day 3 hrs ago0x1b8e15229f052b42c1bdff4a7d131fa600447972  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.0000657111
0xd772cf8de646d1e24c0e21c35e0b76faf53ce89c67132fb267eeec5792cf50d72 days 23 hrs ago0x9a4e05f09b5c4a2db686fb868b45561fefec8f0a  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000428232
0x896b5d27a38200fb35e52b3d3ab2ec3c67764457d99d96a38f200d80c6d9beab3 days 17 hrs ago0xbb572a96db2e4a2ce92cc150afa105f14dc61ea5  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000374967
0xf2b0a24f216f2be6f829357bcdb6a6e5689a51453b4fb197ba887e9608dfc9535 days 5 hrs ago0x5dc4561125fcac2030d07301c50153cfe624391b  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000280106
0x649cf8a3b2da84789e18c0b767d3d044cc38e8e13151884cfeb506ab14a154eb5 days 5 hrs ago0x5dc4561125fcac2030d07301c50153cfe624391b  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000280362
0xa8e914df0489789e542efb7da274c0eaf1ec5e733c597f4909ef88d99ebbf2b46 days 14 hrs ago0x1b82e2de62c1d8087d34b6ae979b4558d63601f0  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.0016113455
0x03fdfeaae06217b4fbf1d83bb81538c3d1462cef5154246ea407d116d17d16fd6 days 15 hrs ago0x63ef7186879c5b4bf8c5b2a8a0385c255f037e0e  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000428232
0x7b4d4c142527742d48f6e71ae1d2337cac6813dac5968222c88d6144bc2d5cbb8 days 8 hrs ago0x1b82e2de62c1d8087d34b6ae979b4558d63601f0  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000841086
0xd7ec785e66438e1ab09bcc9d25b48b21833f471fe26b25f828842a03752dde238 days 8 hrs ago0x1b82e2de62c1d8087d34b6ae979b4558d63601f0  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.0016120815
0xc9ce7aa7adceb3fb683c79ee202b2ea5a64cdb08f19669dc7ea93300c68d24e79 days 12 hrs ago0x1b82e2de62c1d8087d34b6ae979b4558d63601f0  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.0016120815
0x5575d23846ee24368df3e616e97d3beb6c2533b3332bdf24bf353f5bd95efec611 days 7 hrs ago0xb6409054cffbd590f7bde83fa7bde994298e6ca6  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000125245
0x8a06f6fd5f4a53a87e932b56a9c9aab9129c24ccec78fe2f80078e94d21db04c12 days 16 hrs ago0xbb572a96db2e4a2ce92cc150afa105f14dc61ea5  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000699945
0x73c0fe8b88262c980106ea4f744d7c13d1011a4f195c7613c6d92aee38c7499412 days 16 hrs ago0xbb572a96db2e4a2ce92cc150afa105f14dc61ea5  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430.0087 Ether0.00068172
0xaef47ec625b674bc98ca8f389082e2ce758b8146b75bfbc5d5041a92b64feb1713 days 2 hrs ago0x692306857d17a8f31bb5feb17cfe765773487e66  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000280234
0x15f44f1ea7b96539c8f93acfc81834c72f2205e6f087297a91d035164809ecbc13 days 2 hrs ago0x692306857d17a8f31bb5feb17cfe765773487e66  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000280362
0x4c6ead5b65e7162c7f0e33d86b3cb8d2cb1750200456b647e7a5016e7b6a392413 days 2 hrs ago0x692306857d17a8f31bb5feb17cfe765773487e66  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000280234
0x56bc5a87d21547f52f0816e22659021cd15c0de2e20e3dd33da50de0fd577bd713 days 22 hrs ago0x4d642c1dd3c51070421ab367e62d1119047a8b36  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000062582
0x38862ea9a578352a5cdf805da2b08806e5a193681ff77091b3fedc2986c4c22413 days 22 hrs ago0x4d642c1dd3c51070421ab367e62d1119047a8b36  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000062582
0x26e8b6de38bea543047fa3b0e8a3a3310d699e8c8cff102d98adef95410953c113 days 23 hrs ago0x4d642c1dd3c51070421ab367e62d1119047a8b36  IN   0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430 Ether0.000092582
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x1f9d08974aa84762b143facf68e09bb4958db21f5d7197a2f9fabf15d81e8375704730712 days 16 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x73c0fe8b88262c980106ea4f744d7c13d1011a4f195c7613c6d92aee38c74994704729612 days 16 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x79a198b2355ca2aef695d8a4987582e093911ebb0.0007 Ether
0x1fd8ec28c79d53f394e33e723000046ec6f12a31d4debfb08fb25e7054a40f81702969515 days 20 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x61a558e06306d93b613f73c1a3f0ffb50aaa5be6d2e51a556282d9e48b001ae9702966215 days 20 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xe3024369ec8f69ee48cb7c2b4932d4971f2f6ec8638d44a53a8f43751d0874ab700608120 days 1 hr ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xb18e503eb8027453bf356a3c6697bf68ebf11811f9254fc7924291cebfe3c4ec700274220 days 15 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x7d34f7fae0fea5f67db38c5354ea536dabea380db2bd8252efc0732154d221a5700269620 days 16 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x79a198b2355ca2aef695d8a4987582e093911ebb0.01 Ether
0xb0a56e9db3b09e8f9445b20f29e29dd83ae99f66f6db75ffa5c73a55caecfe14700058021 days 1 hr ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xcc1026bd40b9605c77c745bcf7b127dbfce518233ee5a1fb26d41e2ecd578740696748326 days 15 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xffc491b4a2c70de5ad5d081ece40fa6ab6d1680de2e7238373cdcefd5ffbf847696741226 days 15 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xb608cdb74366199dbacba9a838b23aca15618fde842b65f95c73555740a3b334696723726 days 16 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x312545f16c0565267c396caf84d040a974ebe5f0e597fa9f281fe4410f7e7e7f695230529 days 5 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x81c3c9c7561de7b5890749cd87cbd076979b065681e7050d106eb0eb432f1b66693301232 days 11 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x492b39e4551679ab915607260df8ddb5899ab1f2f7d527b6e6fe6888988019a0691046436 days 7 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x12e610b4da956c8f6be684e5937ecf8e3f01885adcea4a59d86ff65862a50268690860436 days 15 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x87ec7b8114305d3f476a71fb6b17aaa86c0d2a68caf99394b8b37ab25e1d50f5689896538 days 6 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x309d17beddd820d41048778da2cb0613f36614319b08025981d8eb5a759536d6689710838 days 13 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x329dbcee35adedfc9ac5324f7c9b63fccf476f25c6d76fae500a5eae39c636c5689576538 days 19 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x0532065bbcfff9585d164a80a8c28e2833aa8ebe2e407499c73d8c1b3f1223a2688894639 days 22 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xe99978978064b857d60089d93717f0499eea2f0cd92cffc4502a37f513a6d863688849140 days 3 mins ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x4b89635705898b3b8896667d62977d5265da19df2f7feba36b1031654b8eb7f0688763840 days 3 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x40c456d3e50160e12463db75d8e62a8517f88e8e61bc8b20fcc17403b2aee19f688205141 days 1 hr ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x6228f256e18abc758db48b3cb9e0d633028be6ebbfe69e0edc1875b252240da5687735541 days 20 hrs ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0xad2fe2827d143101ee6c419c46074fcfb7e56729411f2ece7ec9198cd4cbe1b7687600542 days 1 hr ago0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430x1ce9f61999539918f7bed453fd27cf715b08712a0.008 Ether
0x9a18406ee543e4920fc579626f23beead6814dc2aa1cf190201b6f83432de1cf687201342 days 17 hrs ago0x79a198b2355ca2aef695d8a4987582e093911ebb0xf7a6e15dfd5cdd9ef12711bd757a9b6021abf6430.000105 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: BotCore
Compiler Text: v0.4.20-nightly.2017.12.20+commit.efc198d5
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.11;


contract Ownable {
    address public owner;

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

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

    function transferOwnership(address newOwner) public onlyOwner {
        if (newOwner != address(0)) {
            owner = newOwner;
        }
    }
}


contract ERC721 {
    function totalSupply() public view returns (uint256 total);
    function balanceOf(address _owner) public view returns (uint256 balance);
    function ownerOf(uint256 _tokenId) external view 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;
    event Transfer(address from, address to, uint256 tokenId);
    event Approval(address owner, address approved, uint256 tokenId);
}

contract GeneScienceInterface {
    function isGeneScience() public pure returns (bool);
    function mixGenes(uint256 genes1, uint256 genes2, uint256 targetBlock) public returns (uint256);
}

contract BotAccessControl {
    event ContractUpgrade(address newContract);
    address public ceoAddress;
    address public cfoAddress;
    address public cooAddress;
    bool public paused = false;

    modifier onlyCEO() {
        require(msg.sender == ceoAddress);
        _;
    }

    modifier onlyCFO() {
        require(msg.sender == cfoAddress);
        _;
    }

    modifier onlyCOO() {
        require(msg.sender == cooAddress);
        _;
    }

    modifier onlyCLevel() {
        require(
            msg.sender == cooAddress ||
            msg.sender == ceoAddress ||
            msg.sender == cfoAddress
        );
        _;
    }

    function setCEO(address _newCEO) external onlyCEO {
        require(_newCEO != address(0));

        ceoAddress = _newCEO;
    }

    function setCFO(address _newCFO) external onlyCEO {
        require(_newCFO != address(0));

        cfoAddress = _newCFO;
    }

    function setCOO(address _newCOO) external onlyCEO {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() external onlyCLevel whenNotPaused {
        paused = true;
    }

    function unpause() public onlyCEO whenPaused {
        paused = false;
    }
}


contract BotBase is BotAccessControl {
    event Birth(
      address owner,
      uint256 botId,
      uint256 matronId,
      uint256 sireId,
      uint256 genes,
      uint256 birthTime
    );

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

    struct Bot {
        uint256 genes;
        uint64 birthTime;
        uint64 cooldownEndBlock;
        uint32 matronId;
        uint32 sireId;
        uint32 siringWithId;
        uint16 cooldownIndex;
        uint16 generation;
    }

    uint32[14] public cooldowns = [
        uint32(1 minutes),
        uint32(2 minutes),
        uint32(5 minutes),
        uint32(10 minutes),
        uint32(30 minutes),
        uint32(1 hours),
        uint32(2 hours),
        uint32(4 hours),
        uint32(8 hours),
        uint32(16 hours),
        uint32(1 days),
        uint32(2 days),
        uint32(4 days),
        uint32(7 days)
    ];

    uint256 public secondsPerBlock = 15;

    Bot[] bots;

    mapping (uint256 => address) public botIndexToOwner;
    mapping (address => uint256) ownershipTokenCount;
    mapping (uint256 => address) public botIndexToApproved;
    mapping (uint256 => address) public sireAllowedToAddress;
    uint32 public destroyedBots;
    SaleClockAuction public saleAuction;
    SiringClockAuction public siringAuction;

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        if (_to == address(0)) {
            delete botIndexToOwner[_tokenId];
        } else {
            ownershipTokenCount[_to]++;
            botIndexToOwner[_tokenId] = _to;
        }
        if (_from != address(0)) {
            ownershipTokenCount[_from]--;
            delete sireAllowedToAddress[_tokenId];
            delete botIndexToApproved[_tokenId];
        }
        Transfer(_from, _to, _tokenId);
    }

    function _createBot(
        uint256 _matronId,
        uint256 _sireId,
        uint256 _generation,
        uint256 _genes,
        address _owner
    )
        internal
        returns (uint)
    {
        require(_matronId == uint256(uint32(_matronId)));
        require(_sireId == uint256(uint32(_sireId)));
        require(_generation == uint256(uint16(_generation)));

        uint16 cooldownIndex = uint16(_generation / 2);
        if (cooldownIndex > 13) {
            cooldownIndex = 13;
        }

        Bot memory _bot = Bot({
            genes: _genes,
            birthTime: uint64(now),
            cooldownEndBlock: 0,
            matronId: uint32(_matronId),
            sireId: uint32(_sireId),
            siringWithId: 0,
            cooldownIndex: cooldownIndex,
            generation: uint16(_generation)
        });
        uint256 newBotId = bots.push(_bot) - 1;

        require(newBotId == uint256(uint32(newBotId)));

        Birth(
            _owner,
            newBotId,
            uint256(_bot.matronId),
            uint256(_bot.sireId),
            _bot.genes,
            uint256(_bot.birthTime)
       );

        _transfer(0, _owner, newBotId);

        return newBotId;
    }

    function _destroyBot(uint256 _botId) internal {
        require(_botId > 0);
        address from = botIndexToOwner[_botId];
        require(from != address(0));
        destroyedBots++;
        _transfer(from, 0, _botId);
    }

    function setSecondsPerBlock(uint256 secs) external onlyCLevel {
        require(secs < cooldowns[0]);
        secondsPerBlock = secs;
    }
}


contract BotExtension is BotBase {
    event Lock(uint256 botId, uint16 mask);
    mapping (address => bool) extensions;
    mapping (uint256 => uint16) locks;
    uint16 constant LOCK_BREEDING = 1;
    uint16 constant LOCK_TRANSFER = 2;
    uint16 constant LOCK_ALL = LOCK_BREEDING | LOCK_TRANSFER;

    function addExtension(address _contract) external onlyCEO {
        extensions[_contract] = true;
    }

    function removeExtension(address _contract) external onlyCEO {
        delete extensions[_contract];
    }

    modifier onlyExtension() {
        require(extensions[msg.sender] == true);
        _;
    }

    function extCreateBot(
        uint256 _matronId,
        uint256 _sireId,
        uint256 _generation,
        uint256 _genes,
        address _owner
    )
        public
        onlyExtension
        returns (uint)
    {
        return _createBot(_matronId, _sireId, _generation, _genes, _owner);
    }

    function extDestroyBot(uint256 _botId)
        public
        onlyExtension
    {
        require(locks[_botId] == 0);

        _destroyBot(_botId);
    }

    function extLockBot(uint256 _botId, uint16 _mask)
        public
        onlyExtension
    {
        _lockBot(_botId, _mask);
    }

    function _lockBot(uint256 _botId, uint16 _mask)
        internal
    {
        require(_mask > 0);

        uint16 mask = locks[_botId];
        require(mask & _mask == 0);

        if (_mask & LOCK_BREEDING > 0) {
            Bot storage bot = bots[_botId];
            require(bot.siringWithId == 0);
        }

        if (_mask & LOCK_TRANSFER > 0) {
            address owner = botIndexToOwner[_botId];
            require(owner != address(saleAuction));
            require(owner != address(siringAuction));
        }

        mask |= _mask;

        locks[_botId] = mask;

        Lock(_botId, mask);
    }

    function extUnlockBot(uint256 _botId, uint16 _mask)
        public
        onlyExtension
        returns (uint16)
    {
        _unlockBot(_botId, _mask);
    }

    function _unlockBot(uint256 _botId, uint16 _mask)
        internal
    {
        require(_mask > 0);

        uint16 mask = locks[_botId];
        require(mask & _mask == _mask);
        mask ^= _mask;

        locks[_botId] = mask;

        Lock(_botId, mask);
    }

    function extGetLock(uint256 _botId)
        public
        view
        onlyExtension
        returns (uint16)
    {
        return locks[_botId];
    }
}


contract BotOwnership is BotExtension, ERC721 {
    string public constant name = "CryptoBots";
    string public constant symbol = "CBT";

    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return botIndexToOwner[_tokenId] == _claimant;
    }

    function _approvedFor(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return botIndexToApproved[_tokenId] == _claimant;
    }

    function _approve(uint256 _tokenId, address _approved) internal {
        botIndexToApproved[_tokenId] = _approved;
    }

    function balanceOf(address _owner) public view returns (uint256 count) {
        return ownershipTokenCount[_owner];
    }

    function transfer(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_to != address(saleAuction));
        require(_to != address(siringAuction));
        require(_owns(msg.sender, _tokenId));
        require(locks[_tokenId] & LOCK_TRANSFER == 0);
        _transfer(msg.sender, _to, _tokenId);
    }

    function approve(
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _tokenId));
        require(locks[_tokenId] & LOCK_TRANSFER == 0);
        _approve(_tokenId, _to);
        Approval(msg.sender, _to, _tokenId);
    }

    function transferFrom(
        address _from,
        address _to,
        uint256 _tokenId
    )
        external
        whenNotPaused
    {
        require(_to != address(0));
        require(_to != address(this));
        require(_approvedFor(msg.sender, _tokenId));
        require(_owns(_from, _tokenId));
        require(locks[_tokenId] & LOCK_TRANSFER == 0);
        _transfer(_from, _to, _tokenId);
    }

    function totalSupply() public view returns (uint) {
        return bots.length - destroyedBots;
    }

    function ownerOf(uint256 _tokenId)
        external
        view
        returns (address owner)
    {
        owner = botIndexToOwner[_tokenId];
        require(owner != address(0));
    }

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

        if (tokenCount == 0) {
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 totalBots = bots.length - 1;
            uint256 resultIndex = 0;
            uint256 botId;
            for (botId = 0; botId <= totalBots; botId++) {
                if (botIndexToOwner[botId] == _owner) {
                    result[resultIndex] = botId;
                    resultIndex++;
                }
            }

            return result;
        }
    }
}


contract BotBreeding is BotOwnership {
    event Pregnant(address owner, uint256 matronId, uint256 sireId, uint256 cooldownEndBlock);
    uint256 public autoBirthFee = 2 finney;
    uint256 public pregnantBots;
    GeneScienceInterface public geneScience;

    function setGeneScienceAddress(address _address) external onlyCEO {
        GeneScienceInterface candidateContract = GeneScienceInterface(_address);
        require(candidateContract.isGeneScience());
        geneScience = candidateContract;
    }

    function _isReadyToBreed(uint256 _botId, Bot _bot) internal view returns (bool) {
        return
            (_bot.siringWithId == 0) &&
            (_bot.cooldownEndBlock <= uint64(block.number)) &&
            (locks[_botId] & LOCK_BREEDING == 0);
    }

    function _isSiringPermitted(uint256 _sireId, uint256 _matronId) internal view returns (bool) {
        address matronOwner = botIndexToOwner[_matronId];
        address sireOwner = botIndexToOwner[_sireId];
        return (matronOwner == sireOwner || sireAllowedToAddress[_sireId] == matronOwner);
    }

    function _triggerCooldown(Bot storage _bot) internal {
        _bot.cooldownEndBlock = uint64((cooldowns[_bot.cooldownIndex]/secondsPerBlock) + block.number);
        if (_bot.cooldownIndex < 13) {
            _bot.cooldownIndex += 1;
        }
    }

    function approveSiring(address _addr, uint256 _sireId)
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _sireId));
        sireAllowedToAddress[_sireId] = _addr;
    }

    function setAutoBirthFee(uint256 val) external onlyCOO {
        autoBirthFee = val;
    }

    function _isReadyToGiveBirth(Bot _matron) private view returns (bool) {
        return (_matron.siringWithId != 0) && (_matron.cooldownEndBlock <= uint64(block.number));
    }

    function isReadyToBreed(uint256 _botId)
        public
        view
        returns (bool)
    {
        Bot storage bot = bots[_botId];
        return _botId > 0 && _isReadyToBreed(_botId, bot);
    }

    function isPregnant(uint256 _botId)
        public
        view
        returns (bool)
    {
        return _botId > 0 && bots[_botId].siringWithId != 0;
    }

    function _isValidMatingPair(
        Bot storage _matron,
        uint256 _matronId,
        Bot storage _sire,
        uint256 _sireId
    )
        private
        view
        returns(bool)
    {
        if (_matronId == _sireId) {
            return false;
        }
        if (_matron.matronId == _sireId || _matron.sireId == _sireId) {
            return false;
        }
        if (_sire.matronId == _matronId || _sire.sireId == _matronId) {
            return false;
        }
        if (_sire.matronId == 0 || _matron.matronId == 0) {
            return true;
        }
        if (_sire.matronId == _matron.matronId || _sire.matronId == _matron.sireId) {
            return false;
        }
        if (_sire.sireId == _matron.matronId || _sire.sireId == _matron.sireId) {
            return false;
        }
        return true;
    }

    function _canBreedWithViaAuction(uint256 _matronId, uint256 _sireId)
        internal
        view
        returns (bool)
    {
        Bot storage matron = bots[_matronId];
        Bot storage sire = bots[_sireId];
        return _isValidMatingPair(matron, _matronId, sire, _sireId);
    }

    function canBreedWith(uint256 _matronId, uint256 _sireId)
        external
        view
        returns(bool)
    {
        require(_matronId > 0);
        require(_sireId > 0);
        Bot storage matron = bots[_matronId];
        Bot storage sire = bots[_sireId];
        return _isValidMatingPair(matron, _matronId, sire, _sireId) &&
            _isSiringPermitted(_sireId, _matronId);
    }

    function _breedWith(uint256 _matronId, uint256 _sireId) internal {
        Bot storage sire = bots[_sireId];
        Bot storage matron = bots[_matronId];
        matron.siringWithId = uint32(_sireId);
        _triggerCooldown(sire);
        _triggerCooldown(matron);
        delete sireAllowedToAddress[_matronId];
        delete sireAllowedToAddress[_sireId];
        pregnantBots++;
        Pregnant(botIndexToOwner[_matronId], _matronId, _sireId, matron.cooldownEndBlock);
    }

    function breedWithAuto(uint256 _matronId, uint256 _sireId)
        external
        payable
        whenNotPaused
    {
        require(msg.value >= autoBirthFee);
        require(_owns(msg.sender, _matronId));
        require(_isSiringPermitted(_sireId, _matronId));
        Bot storage matron = bots[_matronId];
        require(_isReadyToBreed(_matronId, matron));
        Bot storage sire = bots[_sireId];
        require(_isReadyToBreed(_sireId, sire));
        require(_isValidMatingPair(
            matron,
            _matronId,
            sire,
            _sireId
        ));
        _breedWith(_matronId, _sireId);
    }

    function giveBirth(uint256 _matronId)
        external
        whenNotPaused
        returns(uint256)
    {
        Bot storage matron = bots[_matronId];
        require(matron.birthTime != 0);
        require(_isReadyToGiveBirth(matron));
        uint256 sireId = matron.siringWithId;
        Bot storage sire = bots[sireId];
        uint16 parentGen = matron.generation;
        if (sire.generation > matron.generation) {
            parentGen = sire.generation;
        }
        uint256 childGenes = geneScience.mixGenes(matron.genes, sire.genes, matron.cooldownEndBlock - 1);
        address owner = botIndexToOwner[_matronId];
        uint256 botId = _createBot(_matronId, matron.siringWithId, parentGen + 1, childGenes, owner);
        delete matron.siringWithId;
        pregnantBots--;
        msg.sender.send(autoBirthFee);
        return botId;
    }
}


contract ClockAuctionBase {
    struct Auction {
        address seller;
        uint128 startingPrice;
        uint128 endingPrice;
        uint64 duration;
        uint64 startedAt;
    }
    ERC721 public nonFungibleContract;
    uint256 public ownerCut;
    mapping (uint256 => Auction) tokenIdToAuction;
    event AuctionCreated(
      address seller,
      uint256 tokenId,
      uint256 startingPrice,
      uint256 endingPrice,
      uint256 creationTime,
      uint256 duration
    );
    event AuctionSuccessful(uint256 tokenId, uint256 totalPrice, address seller, address winner, uint256 time);
    event AuctionCancelled(uint256 tokenId, address seller, uint256 time);

    function _owns(address _claimant, uint256 _tokenId) internal view returns (bool) {
        return (nonFungibleContract.ownerOf(_tokenId) == _claimant);
    }

    function _escrow(address _owner, uint256 _tokenId) internal {
        nonFungibleContract.transferFrom(_owner, this, _tokenId);
    }

    function _transfer(address _receiver, uint256 _tokenId) internal {
        nonFungibleContract.transfer(_receiver, _tokenId);
    }

    function _addAuction(uint256 _tokenId, Auction _auction) internal {
        require(_auction.duration >= 1 minutes);
        tokenIdToAuction[_tokenId] = _auction;
        AuctionCreated(
            _auction.seller,
            uint256(_tokenId),
            uint256(_auction.startingPrice),
            uint256(_auction.endingPrice),
            uint256(_auction.startedAt),
            uint256(_auction.duration)
        );
    }

    function _cancelAuction(uint256 _tokenId, address _seller) internal {
        _removeAuction(_tokenId);
        _transfer(_seller, _tokenId);
        AuctionCancelled(_tokenId, _seller, uint256(now));
    }

    function _bid(uint256 _tokenId, uint256 _bidAmount)
        internal
        returns (uint256)
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        uint256 price = _currentPrice(auction);
        require(_bidAmount >= price);
        address seller = auction.seller;
        _removeAuction(_tokenId);
        if (price > 0) {
            uint256 auctioneerCut = _computeCut(price);
            uint256 sellerProceeds = price - auctioneerCut;
            seller.transfer(sellerProceeds);
        }
        uint256 bidExcess = _bidAmount - price;
        msg.sender.transfer(bidExcess);
        AuctionSuccessful(_tokenId, price, seller, msg.sender, uint256(now));
        return price;
    }

    function _removeAuction(uint256 _tokenId) internal {
        delete tokenIdToAuction[_tokenId];
    }

    function _isOnAuction(Auction storage _auction) internal view returns (bool) {
        return (_auction.startedAt > 0);
    }

    function _currentPrice(Auction storage _auction)
        internal
        view
        returns (uint256)
    {
        uint256 secondsPassed = 0;
        if (now > _auction.startedAt) {
            secondsPassed = now - _auction.startedAt;
        }
        return _computeCurrentPrice(
            _auction.startingPrice,
            _auction.endingPrice,
            _auction.duration,
            secondsPassed
        );
    }

    function _computeCurrentPrice(
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        uint256 _secondsPassed
    )
        internal
        pure
        returns (uint256)
    {
        if (_secondsPassed >= _duration) {
            return _endingPrice;
        } else {
            int256 totalPriceChange = int256(_endingPrice) - int256(_startingPrice);
            int256 currentPriceChange = totalPriceChange * int256(_secondsPassed) / int256(_duration);
            int256 currentPrice = int256(_startingPrice) + currentPriceChange;
            return uint256(currentPrice);
        }
    }

    function _computeCut(uint256 _price) internal view returns (uint256) {
        return _price * ownerCut / 10000;
    }
}


contract Pausable is Ownable {
    event Pause();
    event Unpause();
    bool public paused = false;

    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    modifier whenPaused {
        require(paused);
        _;
    }

    function pause() public onlyOwner whenNotPaused returns (bool) {
        paused = true;
        Pause();
        return true;
    }

    function unpause() public onlyOwner whenPaused returns (bool) {
        paused = false;
        Unpause();
        return true;
    }
}


contract ClockAuction is Pausable, ClockAuctionBase {
    function ClockAuction(address _nftAddress, uint256 _cut) public {
        require(_cut <= 10000);
        ownerCut = _cut;

        ERC721 candidateContract = ERC721(_nftAddress);
        nonFungibleContract = candidateContract;
    }

    function withdrawBalance() external {
        address nftAddress = address(nonFungibleContract);
        require(
            msg.sender == owner ||
            msg.sender == nftAddress
        );
        bool res = nftAddress.send(this.balance);
    }

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
        whenNotPaused
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));
        require(_owns(msg.sender, _tokenId));
        _escrow(msg.sender, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId)
        external
        payable
        whenNotPaused
    {
        _bid(_tokenId, msg.value);
        _transfer(msg.sender, _tokenId);
    }

    function cancelAuction(uint256 _tokenId)
        external
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        address seller = auction.seller;
        require(msg.sender == seller);
        _cancelAuction(_tokenId, seller);
    }

    function cancelAuctionWhenPaused(uint256 _tokenId)
        external
        whenPaused
        onlyOwner
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        _cancelAuction(_tokenId, auction.seller);
    }

    function getAuction(uint256 _tokenId)
        external
        view
        returns
    (
        address seller,
        uint256 startingPrice,
        uint256 endingPrice,
        uint256 duration,
        uint256 startedAt
    )
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        return (
            auction.seller,
            auction.startingPrice,
            auction.endingPrice,
            auction.duration,
            auction.startedAt
        );
    }

    function getCurrentPrice(uint256 _tokenId)
        external
        view
        returns (uint256)
    {
        Auction storage auction = tokenIdToAuction[_tokenId];
        require(_isOnAuction(auction));
        return _currentPrice(auction);
    }

}


contract SiringClockAuction is ClockAuction {
    bool public isSiringClockAuction = true;

    function SiringClockAuction(address _nftAddr, uint256 _cut) public
        ClockAuction(_nftAddr, _cut) {}

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));
        require(msg.sender == address(nonFungibleContract));
        _escrow(_seller, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId)
        external
        payable
    {
        require(msg.sender == address(nonFungibleContract));
        address seller = tokenIdToAuction[_tokenId].seller;
        _bid(_tokenId, msg.value);
        _transfer(seller, _tokenId);
    }

}


contract SaleClockAuction is ClockAuction {
    bool public isSaleClockAuction = true;
    uint256 public gen0SaleCount;
    uint256[5] public lastGen0SalePrices;

    function SaleClockAuction(address _nftAddr, uint256 _cut) public
        ClockAuction(_nftAddr, _cut) {}

    function createAuction(
        uint256 _tokenId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration,
        address _seller
    )
        external
    {
        require(_startingPrice == uint256(uint128(_startingPrice)));
        require(_endingPrice == uint256(uint128(_endingPrice)));
        require(_duration == uint256(uint64(_duration)));
        require(msg.sender == address(nonFungibleContract));
        _escrow(_seller, _tokenId);
        Auction memory auction = Auction(
            _seller,
            uint128(_startingPrice),
            uint128(_endingPrice),
            uint64(_duration),
            uint64(now)
        );
        _addAuction(_tokenId, auction);
    }

    function bid(uint256 _tokenId)
        external
        payable
    {
        address seller = tokenIdToAuction[_tokenId].seller;
        uint256 price = _bid(_tokenId, msg.value);
        _transfer(msg.sender, _tokenId);
        if (seller == address(nonFungibleContract)) {
            lastGen0SalePrices[gen0SaleCount % 5] = price;
            gen0SaleCount++;
        }
    }

    function averageGen0SalePrice() external view returns (uint256) {
        uint256 sum = 0;
        for (uint256 i = 0; i < 5; i++) {
            sum += lastGen0SalePrices[i];
        }
        return sum / 5;
    }

}


contract BotAuction is BotBreeding {
    function setSaleAuctionAddress(address _address) external onlyCEO {
        SaleClockAuction candidateContract = SaleClockAuction(_address);
        require(candidateContract.isSaleClockAuction());
        saleAuction = candidateContract;
    }

    function setSiringAuctionAddress(address _address) external onlyCEO {
        SiringClockAuction candidateContract = SiringClockAuction(_address);
        require(candidateContract.isSiringClockAuction());
        siringAuction = candidateContract;
    }

    function createSaleAuction(
        uint256 _botId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _botId));
        require(!isPregnant(_botId));
        _approve(_botId, saleAuction);
        saleAuction.createAuction(
            _botId,
            _startingPrice,
            _endingPrice,
            _duration,
            msg.sender
        );
    }

    function createSiringAuction(
        uint256 _botId,
        uint256 _startingPrice,
        uint256 _endingPrice,
        uint256 _duration
    )
        external
        whenNotPaused
    {
        require(_owns(msg.sender, _botId));
        require(isReadyToBreed(_botId));
        _approve(_botId, siringAuction);
        siringAuction.createAuction(
            _botId,
            _startingPrice,
            _endingPrice,
            _duration,
            msg.sender
        );
    }

    function bidOnSiringAuction(
        uint256 _sireId,
        uint256 _matronId
    )
        external
        payable
        whenNotPaused
    {
        require(_owns(msg.sender, _matronId));
        require(isReadyToBreed(_matronId));
        require(_canBreedWithViaAuction(_matronId, _sireId));
        uint256 currentPrice = siringAuction.getCurrentPrice(_sireId);
        require(msg.value >= currentPrice + autoBirthFee);
        siringAuction.bid.value(msg.value - autoBirthFee)(_sireId);
        _breedWith(uint32(_matronId), uint32(_sireId));
    }

    function withdrawAuctionBalances() external onlyCLevel {
        saleAuction.withdrawBalance();
        siringAuction.withdrawBalance();
    }
}


contract BotMinting is BotAuction {
    uint256 public constant PROMO_CREATION_LIMIT = 5000;
    uint256 public constant GEN0_CREATION_LIMIT = 45000;
    uint256 public constant GEN0_STARTING_PRICE = 10 finney;
    uint256 public constant GEN0_AUCTION_DURATION = 1 days;
    uint256 public promoCreatedCount;
    uint256 public gen0CreatedCount;

    function createPromoBot(uint256 _genes, address _owner) external onlyCOO {
        address botOwner = _owner;
        if (botOwner == address(0)) {
            botOwner = cooAddress;
        }
        require(promoCreatedCount < PROMO_CREATION_LIMIT);

        promoCreatedCount++;
        _createBot(0, 0, 0, _genes, botOwner);
    }

    function createGen0Auction(uint256 _genes) external onlyCOO {
        require(gen0CreatedCount < GEN0_CREATION_LIMIT);

        uint256 botId = _createBot(0, 0, 0, _genes, address(this));
        _approve(botId, saleAuction);

        saleAuction.createAuction(
            botId,
            _computeNextGen0Price(),
            0,
            GEN0_AUCTION_DURATION,
            address(this)
        );

        gen0CreatedCount++;
    }

    function _computeNextGen0Price() internal view returns (uint256) {
        uint256 avePrice = saleAuction.averageGen0SalePrice();
        require(avePrice == uint256(uint128(avePrice)));
        uint256 nextPrice = avePrice + (avePrice / 2);
        if (nextPrice < GEN0_STARTING_PRICE) {
            nextPrice = GEN0_STARTING_PRICE;
        }
        return nextPrice;
    }
}


contract BotCore is BotMinting {
    address public newContractAddress;

    function BotCore() public {
        paused = true;
        ceoAddress = msg.sender;
        cooAddress = msg.sender;
        _createBot(0, 0, 0, uint256(-1), msg.sender);
    }

    function setNewAddress(address _v2Address) external onlyCEO whenPaused {
        newContractAddress = _v2Address;
        ContractUpgrade(_v2Address);
    }

    function() external payable {
        require(
            msg.sender == address(saleAuction) ||
            msg.sender == address(siringAuction)
        );
    }

    function getBot(uint256 _id)
        external
        view
        returns (
        bool isGestating,
        bool isReady,
        uint256 cooldownIndex,
        uint256 nextActionAt,
        uint256 siringWithId,
        uint256 birthTime,
        uint256 matronId,
        uint256 sireId,
        uint256 generation,
        uint256 genes
    )
    {
        require(botIndexToOwner[_id] != address(0));
        Bot storage bot = bots[_id];
        isGestating = (bot.siringWithId != 0);
        isReady = (bot.cooldownEndBlock <= block.number);
        cooldownIndex = uint256(bot.cooldownIndex);
        nextActionAt = uint256(bot.cooldownEndBlock);
        siringWithId = uint256(bot.siringWithId);
        birthTime = uint256(bot.birthTime);
        matronId = uint256(bot.matronId);
        sireId = uint256(bot.sireId);
        generation = uint256(bot.generation);
        genes = bot.genes;
    }

    function unpause() public onlyCEO whenPaused {
        require(saleAuction != address(0));
        require(siringAuction != address(0));
        require(geneScience != address(0));
        require(newContractAddress == address(0));
        super.unpause();
    }

    function withdrawBalance() external onlyCFO {
        uint256 balance = this.balance;
        uint256 subtractFees = (pregnantBots + 1) * autoBirthFee;
        if (balance > subtractFees) {
            cfoAddress.send(balance - subtractFees);
        }
    }

    function destroyBot(uint256 _botId) external onlyCEO {
        require(locks[_botId] == 0);
        _destroyBot(_botId);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"promoCreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"}],"name":"destroyBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ceoAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_STARTING_PRICE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setSiringAuctionAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"addExtension","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_botId","type":"uint256"}],"name":"isPregnant","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_AUCTION_DURATION","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"siringAuction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contract","type":"address"}],"name":"removeExtension","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setGeneScienceAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"botIndexToOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newCEO","type":"address"}],"name":"setCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"},{"name":"_mask","type":"uint16"}],"name":"extUnlockBot","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"}],"name":"createSaleAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"sireAllowedToAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_matronId","type":"uint256"},{"name":"_sireId","type":"uint256"}],"name":"canBreedWith","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"},{"name":"_startingPrice","type":"uint256"},{"name":"_endingPrice","type":"uint256"},{"name":"_duration","type":"uint256"}],"name":"createSiringAuction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"val","type":"uint256"}],"name":"setAutoBirthFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_sireId","type":"uint256"}],"name":"approveSiring","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newCFO","type":"address"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pregnantBots","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"secs","type":"uint256"}],"name":"setSecondsPerBlock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_id","type":"uint256"}],"name":"getBot","outputs":[{"name":"isGestating","type":"bool"},{"name":"isReady","type":"bool"},{"name":"cooldownIndex","type":"uint256"},{"name":"nextActionAt","type":"uint256"},{"name":"siringWithId","type":"uint256"},{"name":"birthTime","type":"uint256"},{"name":"matronId","type":"uint256"},{"name":"sireId","type":"uint256"},{"name":"generation","type":"uint256"},{"name":"genes","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"destroyedBots","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"GEN0_CREATION_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"newContractAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setSaleAuctionAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_v2Address","type":"address"}],"name":"setNewAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secondsPerBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"name":"ownerTokens","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_matronId","type":"uint256"}],"name":"giveBirth","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_botId","type":"uint256"}],"name":"extGetLock","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAuctionBalances","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cooldowns","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"botIndexToApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"autoBirthFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"},{"name":"_mask","type":"uint16"}],"name":"extLockBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"uint256"},{"name":"_owner","type":"address"}],"name":"createPromoBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_genes","type":"uint256"}],"name":"createGen0Auction","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_matronId","type":"uint256"},{"name":"_sireId","type":"uint256"},{"name":"_generation","type":"uint256"},{"name":"_genes","type":"uint256"},{"name":"_owner","type":"address"}],"name":"extCreateBot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_botId","type":"uint256"}],"name":"isReadyToBreed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PROMO_CREATION_LIMIT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saleAuction","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_botId","type":"uint256"}],"name":"extDestroyBot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sireId","type":"uint256"},{"name":"_matronId","type":"uint256"}],"name":"bidOnSiringAuction","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"gen0CreatedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"geneScience","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_matronId","type":"uint256"},{"name":"_sireId","type":"uint256"}],"name":"breedWithAuto","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"matronId","type":"uint256"},{"indexed":false,"name":"sireId","type":"uint256"},{"indexed":false,"name":"cooldownEndBlock","type":"uint256"}],"name":"Pregnant","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":"botId","type":"uint256"},{"indexed":false,"name":"mask","type":"uint16"}],"name":"Lock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"botId","type":"uint256"},{"indexed":false,"name":"matronId","type":"uint256"},{"indexed":false,"name":"sireId","type":"uint256"},{"indexed":false,"name":"genes","type":"uint256"},{"indexed":false,"name":"birthTime","type":"uint256"}],"name":"Birth","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newContract","type":"address"}],"name":"ContractUpgrade","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526000600260146101000a81548160ff0219169083151502179055506101c060405190810160405280603c63ffffffff1663ffffffff168152602001607863ffffffff1663ffffffff16815260200161012c63ffffffff1663ffffffff16815260200161025863ffffffff1663ffffffff16815260200161070863ffffffff1663ffffffff168152602001610e1063ffffffff1663ffffffff168152602001611c2063ffffffff1663ffffffff16815260200161384063ffffffff1663ffffffff16815260200161708063ffffffff1663ffffffff16815260200161e10063ffffffff1663ffffffff1681526020016201518063ffffffff1663ffffffff1681526020016202a30063ffffffff1663ffffffff1681526020016205460063ffffffff1663ffffffff16815260200162093a8063ffffffff1663ffffffff16815250600390600e6200015692919062000830565b50600f60055566071afd498d0000600f5534156200017357600080fd5b6001600260146101000a81548160ff021916908315150217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200025460008060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff336200025b6401000000000262004cd1176401000000009004565b5062000a88565b60008062000268620008da565b60008863ffffffff16891415156200027f57600080fd5b8763ffffffff16881415156200029457600080fd5b8661ffff1687141515620002a757600080fd5b600287811515620002b457fe5b049250600d8361ffff161115620002ca57600d92505b610100604051908101604052808781526020014267ffffffffffffffff168152602001600067ffffffffffffffff1681526020018a63ffffffff1681526020018963ffffffff168152602001600063ffffffff1681526020018461ffff1681526020018861ffff1681525091506001600680548060010182816200034f91906200094e565b916000526020600020906002020160008590919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101601c6101000a81548161ffff021916908361ffff16021790555060e082015181600101601e6101000a81548161ffff021916908361ffff16021790555050500390508063ffffffff1681141515620004a257600080fd5b7fa2950fd8c03e7518275ee57e05ca76c671969b5445b12b1aeea4b0b30195e5df8582846060015163ffffffff16856080015163ffffffff168660000151876020015167ffffffffffffffff16604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a16200057560008683620005846401000000000262004563176401000000009004565b80935050505095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005f6576007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905562000698565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415156200078c57600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600a600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b82600e600701600890048101928215620008c75791602002820160005b838211156200089357835183826101000a81548163ffffffff021916908363ffffffff16021790555092602001926004016020816003010492830192600103026200084d565b8015620008c55782816101000a81549063ffffffff021916905560040160208160030104928301926001030262000893565b505b509050620008d6919062000983565b5090565b6101006040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff168152602001600061ffff1681525090565b8154818355818115116200097e576002028160020283600052602060002091820191016200097d9190620009b9565b5b505050565b620009b691905b80821115620009b257600081816101000a81549063ffffffff0219169055506001016200098a565b5090565b90565b62000a8591905b8082111562000a81576000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549063ffffffff02191690556001820160146101000a81549063ffffffff02191690556001820160186101000a81549063ffffffff021916905560018201601c6101000a81549061ffff021916905560018201601e6101000a81549061ffff021916905550600201620009c0565b5090565b90565b6158228062000a986000396000f3006060604052600436106102f6576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630519ce79146103ac57806305e455461461040157806306fdde031461042a578063095ea7b3146104b857806309f6d5b4146104fa5780630a0f81681461051d5780630e583df01461057257806314001f4c1461059b578063170ff3e1146105d457806318160ddd1461060d5780631940a9361461063657806319c2f2011461067157806321717ebf1461069a57806321ee102b146106ef57806323b872dd1461072857806324e7a38a1461078957806327ab9f20146107c257806327d7874c146108255780632ba73c151461085e5780633c4b07de146108975780633d7d3f5a146108e35780633f4ba83a1461092157806346116e6f1461093657806346d22c70146109995780634ad8c938146109dd5780634b85fd5514610a1b5780634dfff04f14610a3e5780634e0a337914610a805780634e4081ef14610ab95780635663896e14610ae25780635c975abb14610b055780635f70d9ac14610b325780635fd8c71014610bb057806361b6683c14610bc55780636352211e14610bfa578063680eba2714610c5d5780636af04a5714610c865780636fbde40d14610cdb57806370a0823114610d145780637158798814610d615780637a7d493714610d9a5780638456cb5914610dc35780638462151c14610dd857806388c2a0bf14610e665780638a653c9314610e9d57806391876e5714610edc57806395d89b4114610ef15780639d6fac6f14610f7f578063a8f8884d14610fc2578063a9059cbb14611025578063b047fb5014611067578063b0c35c05146110bc578063bf4a5485146110e5578063bf86e01314611115578063c3bea9af14611157578063d1b12b4e1461117a578063d3e6f49f146111eb578063defb958414611226578063e6cbe3511461124f578063e9b58225146112a4578063ed60ade6146112c7578063f1ca9410146112e8578063f2b47d5214611311578063f7d8c88314611366575b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039f5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156103aa57600080fd5b005b34156103b757600080fd5b6103bf611387565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561040c57600080fd5b6104146113ad565b6040518082815260200191505060405180910390f35b341561043557600080fd5b61043d6113b3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561047d578082015181840152602081019050610462565b50505050905090810190601f1680156104aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104c357600080fd5b6104f8600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506113ec565b005b341561050557600080fd5b61051b6004808035906020019091905050611501565b005b341561052857600080fd5b61053061159c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561057d57600080fd5b6105856115c1565b6040518082815260200191505060405180910390f35b34156105a657600080fd5b6105d2600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115cc565b005b34156105df57600080fd5b61060b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611703565b005b341561061857600080fd5b6106206117b9565b6040518082815260200191505060405180910390f35b341561064157600080fd5b61065760048080359060200190919050506117e0565b604051808215151515815260200191505060405180910390f35b341561067c57600080fd5b61068461182f565b6040518082815260200191505060405180910390f35b34156106a557600080fd5b6106ad611836565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106fa57600080fd5b610726600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061185c565b005b341561073357600080fd5b610787600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611909565b005b341561079457600080fd5b6107c0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a0d565b005b34156107cd57600080fd5b6107e36004808035906020019091905050611b44565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561083057600080fd5b61085c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b77565b005b341561086957600080fd5b610895600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c51565b005b34156108a257600080fd5b6108c5600480803590602001909190803561ffff16906020019091905050611d2c565b604051808261ffff1661ffff16815260200191505060405180910390f35b34156108ee57600080fd5b61091f6004808035906020019091908035906020019091908035906020019091908035906020019091905050611d9d565b005b341561092c57600080fd5b610934611f05565b005b341561094157600080fd5b61095760048080359060200190919050506120fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109a457600080fd5b6109c3600480803590602001909190803590602001909190505061212f565b604051808215151515815260200191505060405180910390f35b34156109e857600080fd5b610a1960048080359060200190919080359060200190919080359060200190919080359060200190919050506121b7565b005b3415610a2657600080fd5b610a3c600480803590602001909190505061231e565b005b3415610a4957600080fd5b610a7e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612384565b005b3415610a8b57600080fd5b610ab7600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061240b565b005b3415610ac457600080fd5b610acc6124e6565b6040518082815260200191505060405180910390f35b3415610aed57600080fd5b610b0360048080359060200190919050506124ec565b005b3415610b1057600080fd5b610b18612640565b604051808215151515815260200191505060405180910390f35b3415610b3d57600080fd5b610b536004808035906020019091905050612653565b604051808b1515151581526020018a1515151581526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390f35b3415610bbb57600080fd5b610bc3612822565b005b3415610bd057600080fd5b610bd861290e565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3415610c0557600080fd5b610c1b6004808035906020019091905050612924565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610c6857600080fd5b610c7061299d565b6040518082815260200191505060405180910390f35b3415610c9157600080fd5b610c996129a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610ce657600080fd5b610d12600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506129c9565b005b3415610d1f57600080fd5b610d4b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b00565b6040518082815260200191505060405180910390f35b3415610d6c57600080fd5b610d98600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612b49565b005b3415610da557600080fd5b610dad612c66565b6040518082815260200191505060405180910390f35b3415610dce57600080fd5b610dd6612c6c565b005b3415610de357600080fd5b610e0f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612db0565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610e52578082015181840152602081019050610e37565b505050509050019250505060405180910390f35b3415610e7157600080fd5b610e876004808035906020019091905050612ee8565b6040518082815260200191505060405180910390f35b3415610ea857600080fd5b610ebe6004808035906020019091905050613307565b604051808261ffff1661ffff16815260200191505060405180910390f35b3415610ee757600080fd5b610eef613391565b005b3415610efc57600080fd5b610f046135d0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f44578082015181840152602081019050610f29565b50505050905090810190601f168015610f715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610f8a57600080fd5b610fa06004808035906020019091905050613609565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3415610fcd57600080fd5b610fe36004808035906020019091905050613638565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561103057600080fd5b611065600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061366b565b005b341561107257600080fd5b61107a613813565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156110c757600080fd5b6110cf613839565b6040518082815260200191505060405180910390f35b34156110f057600080fd5b611113600480803590602001909190803561ffff1690602001909190505061383f565b005b341561112057600080fd5b611155600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506138ac565b005b341561116257600080fd5b61117860048080359060200190919050506139a1565b005b341561118557600080fd5b6111d5600480803590602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613b5f565b6040518082815260200191505060405180910390f35b34156111f657600080fd5b61120c6004808035906020019091905050613bd8565b604051808215151515815260200191505060405180910390f35b341561123157600080fd5b611239613d45565b6040518082815260200191505060405180910390f35b341561125a57600080fd5b611262613d4b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156112af57600080fd5b6112c56004808035906020019091905050613d71565b005b6112e66004808035906020019091908035906020019091905050613e10565b005b34156112f357600080fd5b6112fb613ff9565b6040518082815260200191505060405180910390f35b341561131c57600080fd5b611324613fff565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6113856004808035906020019091908035906020019091905050614025565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b6040805190810160405280600a81526020017f43727970746f426f74730000000000000000000000000000000000000000000081525081565b600260149054906101000a900460ff1615151561140857600080fd5b6114123382614368565b151561141d57600080fd5b60006002600e600084815260200190815260200160002060009054906101000a900461ffff161661ffff1614151561145457600080fd5b61145e81836143d4565b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925338383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561155c57600080fd5b6000600e600083815260200190815260200160002060009054906101000a900461ffff1661ffff1614151561159057600080fd5b6115998161442a565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b662386f26fc1000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561162957600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166376190f8f6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561169857600080fd5b6102c65a03f115156116a957600080fd5b5050506040518051905015156116be57600080fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561175e57600080fd5b6001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600b60009054906101000a900463ffffffff1663ffffffff1660068054905003905090565b60008082118015611828575060006006838154811015156117fd57fe5b906000526020600020906002020160010160189054906101000a900463ffffffff1663ffffffff1614155b9050919050565b6201518081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118b757600080fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b600260149054906101000a900460ff1615151561192557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561196157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561199c57600080fd5b6119a633826144f7565b15156119b157600080fd5b6119bb8382614368565b15156119c657600080fd5b60006002600e600084815260200190815260200160002060009054906101000a900461ffff161661ffff161415156119fd57600080fd5b611a08838383614563565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a6a57600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166354c15b826000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611ad957600080fd5b6102c65a03f11515611aea57600080fd5b505050604051805190501515611aff57600080fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611bd257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611c0e57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cac57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611ce857600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515611d8d57600080fd5b611d97838361480c565b92915050565b600260149054906101000a900460ff16151515611db957600080fd5b611dc33385614368565b1515611dce57600080fd5b611dd7846117e0565b151515611de357600080fd5b611e0f84600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166143d4565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a85858585336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b1515611eeb57600080fd5b6102c65a03f11515611efc57600080fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f6057600080fd5b600260149054906101000a900460ff161515611f7b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611fd957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561203757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415151561209557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156120f257600080fd5b6120fa6148db565b565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000808511151561214257600080fd5b60008411151561215157600080fd5b60068581548110151561216057fe5b9060005260206000209060020201915060068481548110151561217f57fe5b9060005260206000209060020201905061219b8286838761496e565b80156121ad57506121ac8486614b83565b5b9250505092915050565b600260149054906101000a900460ff161515156121d357600080fd5b6121dd3385614368565b15156121e857600080fd5b6121f184613bd8565b15156121fc57600080fd5b61222884600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166143d4565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a85858585336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b151561230457600080fd5b6102c65a03f1151561231557600080fd5b50505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561237a57600080fd5b80600f8190555050565b600260149054906101000a900460ff161515156123a057600080fd5b6123aa3382614368565b15156123b557600080fd5b81600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561246657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156124a257600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061259457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806125ec5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156125f757600080fd5b60036000600e8110151561260757fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168110151561263657600080fd5b8060058190555050565b600260149054906101000a900460ff1681565b60008060008060008060008060008060008073ffffffffffffffffffffffffffffffffffffffff16600760008e815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156126d257600080fd5b60068c8154811015156126e157fe5b9060005260206000209060020201905060008160010160189054906101000a900463ffffffff1663ffffffff1614159a50438160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff161115995080600101601c9054906101000a900461ffff1661ffff1698508060010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1697508060010160189054906101000a900463ffffffff1663ffffffff1696508060010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1695508060010160109054906101000a900463ffffffff1663ffffffff1694508060010160149054906101000a900463ffffffff1663ffffffff16935080600101601e9054906101000a900461ffff1661ffff16925080600001549150509193959799509193959799565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561288157600080fd5b3073ffffffffffffffffffffffffffffffffffffffff16319150600f546001601054010290508082111561290a57600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8284039081150290604051600060405180830381858888f19350505050505b5050565b600b60009054906101000a900463ffffffff1681565b60006007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561299857600080fd5b919050565b61afc881565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612a2657600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166385b861886000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612a9557600080fd5b6102c65a03f11515612aa657600080fd5b505050604051805190501515612abb57600080fd5b80600b60046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ba457600080fd5b600260149054906101000a900460ff161515612bbf57600080fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60055481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612d1457506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612d6c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515612d7757600080fd5b600260149054906101000a900460ff16151515612d9357600080fd5b6001600260146101000a81548160ff021916908315150217905550565b612db8615670565b6000612dc2615670565b6000806000612dd087612b00565b94506000851415612e02576000604051805910612dea5750595b90808252806020026020018201604052509550612ede565b84604051805910612e105750595b90808252806020026020018201604052509350600160068054905003925060009150600090505b8281111515612eda578673ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ecd57808483815181101515612eb657fe5b906020019060200201818152505081806001019250505b8080600101915050612e37565b8395505b5050505050919050565b600080600080600080600080600260149054906101000a900460ff16151515612f1057600080fd5b600689815481101515612f1f57fe5b9060005260206000209060020201965060008760010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614151515612f6157600080fd5b613097876101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050614c96565b15156130a257600080fd5b8660010160189054906101000a900463ffffffff1663ffffffff1695506006868154811015156130ce57fe5b9060005260206000209060020201945086600101601e9054906101000a900461ffff16935086600101601e9054906101000a900461ffff1661ffff1685600101601e9054906101000a900461ffff1661ffff16111561313d5784600101601e9054906101000a900461ffff1693505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d9f5aed8860000154876000015460018b60010160089054906101000a900467ffffffffffffffff16036000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018267ffffffffffffffff1681526020019350505050602060405180830381600087803b151561321357600080fd5b6102c65a03f1151561322457600080fd5b505050604051805190509250600760008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150613294898860010160189054906101000a900463ffffffff1663ffffffff166001870161ffff168686614cd1565b90508660010160186101000a81549063ffffffff0219169055601060008154809291906001900391905055503373ffffffffffffffffffffffffffffffffffffffff166108fc600f549081150290604051600060405180830381858888f193505050505080975050505050505050919050565b600060011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561336857600080fd5b600e600083815260200190815260200160002060009054906101000a900461ffff169050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061343957506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806134915750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561349c57600080fd5b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635fd8c7106040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b151561352157600080fd5b6102c65a03f1151561353257600080fd5b505050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635fd8c7106040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156135ba57600080fd5b6102c65a03f115156135cb57600080fd5b505050565b6040805190810160405280600381526020017f434254000000000000000000000000000000000000000000000000000000000081525081565b600381600e8110151561361857fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff1615151561368757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156136c357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156136fe57600080fd5b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561375b57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156137b857600080fd5b6137c23382614368565b15156137cd57600080fd5b60006002600e600084815260200190815260200160002060009054906101000a900461ffff161661ffff1614151561380457600080fd5b61380f338383614563565b5050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514151561389e57600080fd5b6138a88282614fda565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561390a57600080fd5b819050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561396857600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b61138860125410151561397a57600080fd5b60126000815480929190600101919050555061399b60008060008685614cd1565b50505050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156139ff57600080fd5b61afc8601354101515613a1157600080fd5b613a2060008060008530614cd1565b9050613a4e81600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff166143d4565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a82613a95615205565b600062015180306040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b1515613b3557600080fd5b6102c65a03f11515613b4657600080fd5b5050506013600081548092919060010191905055505050565b600060011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515613bc057600080fd5b613bcd8686868686614cd1565b905095945050505050565b600080600683815481101515613bea57fe5b90600052602060002090600202019050600083118015613d3d5750613d3c83826101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050615308565b5b915050919050565b61138881565b600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60011515600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141515613dd057600080fd5b6000600e600083815260200190815260200160002060009054906101000a900461ffff1661ffff16141515613e0457600080fd5b613e0d8161442a565b50565b6000600260149054906101000a900460ff16151515613e2e57600080fd5b613e383383614368565b1515613e4357600080fd5b613e4c82613bd8565b1515613e5757600080fd5b613e618284615377565b1515613e6c57600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c55d0f56846000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515613f0557600080fd5b6102c65a03f11515613f1657600080fd5b505050604051805190509050600f5481013410151515613f3557600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663454a2ab3600f543403856040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506000604051808303818588803b1515613fc957600080fd5b6125ee5a03f11515613fda57600080fd5b50505050613ff48263ffffffff168463ffffffff166153d0565b505050565b60135481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600260149054906101000a900460ff1615151561404457600080fd5b600f54341015151561405557600080fd5b61405f3385614368565b151561406a57600080fd5b6140748385614b83565b151561407f57600080fd5b60068481548110151561408e57fe5b906000526020600020906002020191506141d584836101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050615308565b15156141e057600080fd5b6006838154811015156141ef57fe5b9060005260206000209060020201905061433683826101006040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681525050615308565b151561434157600080fd5b61434d8285838661496e565b151561435857600080fd5b61436284846153d0565b50505050565b60008273ffffffffffffffffffffffffffffffffffffffff166007600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b806009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000808211151561443a57600080fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156144ac57600080fd5b600b600081819054906101000a900463ffffffff168092919060010191906101000a81548163ffffffff021916908363ffffffff160217905550506144f381600084614563565b5050565b60008273ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156145d3576007600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055614675565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816007600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151561476857600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600a600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a1505050565b6000808261ffff1611151561482057600080fd5b600e600084815260200190815260200160002060009054906101000a900461ffff1690508161ffff1682821661ffff1614151561485c57600080fd5b818118905080600e600085815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055507f96b828b49c6eb235f60dde08b68959e6baef50b35a662b6db3cade02872d32308382604051808381526020018261ffff1661ffff1681526020019250505060405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561493657600080fd5b600260149054906101000a900460ff16151561495157600080fd5b6000600260146101000a81548160ff021916908315150217905550565b6000818414156149815760009050614b7b565b818560010160109054906101000a900463ffffffff1663ffffffff1614806149c25750818560010160149054906101000a900463ffffffff1663ffffffff16145b156149d05760009050614b7b565b838360010160109054906101000a900463ffffffff1663ffffffff161480614a115750838360010160149054906101000a900463ffffffff1663ffffffff16145b15614a1f5760009050614b7b565b60008360010160109054906101000a900463ffffffff1663ffffffff161480614a62575060008560010160109054906101000a900463ffffffff1663ffffffff16145b15614a705760019050614b7b565b8460010160109054906101000a900463ffffffff1663ffffffff168360010160109054906101000a900463ffffffff1663ffffffff161480614ae557508460010160149054906101000a900463ffffffff1663ffffffff168360010160109054906101000a900463ffffffff1663ffffffff16145b15614af35760009050614b7b565b8460010160109054906101000a900463ffffffff1663ffffffff168360010160149054906101000a900463ffffffff1663ffffffff161480614b6857508460010160149054906101000a900463ffffffff1663ffffffff168360010160149054906101000a900463ffffffff1663ffffffff16145b15614b765760009050614b7b565b600190505b949350505050565b60008060006007600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480614c8c57508173ffffffffffffffffffffffffffffffffffffffff16600a600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b9250505092915050565b6000808260a0015163ffffffff1614158015614cca57504367ffffffffffffffff16826040015167ffffffffffffffff1611155b9050919050565b600080614cdc615684565b60008863ffffffff1689141515614cf257600080fd5b8763ffffffff1688141515614d0657600080fd5b8661ffff1687141515614d1857600080fd5b600287811515614d2457fe5b049250600d8361ffff161115614d3957600d92505b610100604051908101604052808781526020014267ffffffffffffffff168152602001600067ffffffffffffffff1681526020018a63ffffffff1681526020018963ffffffff168152602001600063ffffffff1681526020018461ffff1681526020018861ffff168152509150600160068054806001018281614dbc91906156f8565b916000526020600020906002020160008590919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101601c6101000a81548161ffff021916908361ffff16021790555060e082015181600101601e6101000a81548161ffff021916908361ffff16021790555050500390508063ffffffff1681141515614f0e57600080fd5b7fa2950fd8c03e7518275ee57e05ca76c671969b5445b12b1aeea4b0b30195e5df8582846060015163ffffffff16856080015163ffffffff168660000151876020015167ffffffffffffffff16604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a1614fcb60008683614563565b80935050505095945050505050565b6000806000808461ffff16111515614ff157600080fd5b600e600086815260200190815260200160002060009054906101000a900461ffff169250600084841661ffff1614151561502a57600080fd5b60006001851661ffff1611156150835760068581548110151561504957fe5b9060005260206000209060020201915060008260010160189054906101000a900463ffffffff1663ffffffff1614151561508257600080fd5b5b60006002851661ffff161115615184576007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561512657600080fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561518357600080fd5b5b838317925082600e600087815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055507f96b828b49c6eb235f60dde08b68959e6baef50b35a662b6db3cade02872d32308584604051808381526020018261ffff1661ffff1681526020019250505060405180910390a15050505050565b6000806000600b60049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac9d94c6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561529857600080fd5b6102c65a03f115156152a957600080fd5b505050604051805190509150816fffffffffffffffffffffffffffffffff16821415156152d557600080fd5b6002828115156152e157fe5b0482019050662386f26fc1000081101561530057662386f26fc1000090505b809250505090565b6000808260a0015163ffffffff1614801561533b57504367ffffffffffffffff16826040015167ffffffffffffffff1611155b801561536f575060006001600e600086815260200190815260200160002060009054906101000a900461ffff161661ffff16145b905092915050565b600080600060068581548110151561538b57fe5b906000526020600020906002020191506006848154811015156153aa57fe5b906000526020600020906002020190506153c68286838761496e565b9250505092915050565b6000806006838154811015156153e257fe5b9060005260206000209060020201915060068481548110151561540157fe5b90600052602060002090600202019050828160010160186101000a81548163ffffffff021916908363ffffffff16021790555061543d8261559a565b6154468161559a565b600a600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600a600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556010600081548092919060010191905055507f241ea03ca20251805084d27d4440371c34a0b85ff108f6bb5611248f73818b806007600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685858460010160089054906101000a900467ffffffffffffffff16604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018267ffffffffffffffff16815260200194505050505060405180910390a150505050565b43600554600383600101601c9054906101000a900461ffff1661ffff16600e811015156155c357fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff168115156155ee57fe5b04018160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600d81600101601c9054906101000a900461ffff1661ffff16101561566d57600181600101601c8282829054906101000a900461ffff160192506101000a81548161ffff021916908361ffff1602179055505b50565b602060405190810160405280600081525090565b6101006040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff168152602001600061ffff1681525090565b81548183558181151161572557600202816002028360005260206000209182019101615724919061572a565b5b505050565b6157f391905b808211156157ef576000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549063ffffffff02191690556001820160146101000a81549063ffffffff02191690556001820160186101000a81549063ffffffff021916905560018201601c6101000a81549061ffff021916905560018201601e6101000a81549061ffff021916905550600201615730565b5090565b905600a165627a7a7230582018d63b4358ce375a48b0e3d10e02cef819212a7f1d5bf68fc9b6278dc6643eec0029

   Swarm Source:
bzzr://18d63b4358ce375a48b0e3d10e02cef819212a7f1d5bf68fc9b6278dc6643eec

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.