Contract 0xd9fff7e9c61648b16c6fb24b0119841221bcfd3e

Contract Overview

Balance:
0 Ether

Latest 25 internal transaction, Click here to view more Internal Transactions as a result of Contract Execution

Parent TxHash Block Age From To Value
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
0xacd826fab58180c5dc89895f7f9c08ac30bab9f9970c0eacbfe9cc82d1d2a3a840641519 mins ago0xf6b0ceb5e3f25b6fbecf8186f8a68b4e42a96a170xd9fff7e9c61648b16c6fb24b0119841221bcfd3e0 Ether
[ Download CSV Export 

Contract Source Code Verified (Exact Match)

Contract Name:
SortedDoublyLL

Compiler Version
v0.4.18+commit.9cf6e910

Optimization Enabled:
Yes

Runs (Optimizer):
200

Contract Source Code

pragma solidity 0.4.18;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        assert(c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // assert(b > 0); // Solidity automatically throws when dividing by 0
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b <= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c >= a);
        return c;
    }
}

/*
 * @title A sorted doubly linked list with nodes sorted in descending order. Optionally accepts insert position hints
 *
 * Given a new node with a `key`, a hint is of the form `(prevId, nextId)` s.t. `prevId` and `nextId` are adjacent in the list.
 * `prevId` is a node with a key >= `key` and `nextId` is a node with a key <= `key`. If the sender provides a hint that is a valid insert position
 * the insert operation is a constant time storage write. However, the provided hint in a given transaction might be a valid insert position, but if other transactions are included first, when
 * the given transaction is executed the provided hint may no longer be a valid insert position. For example, one of the nodes referenced might be removed or their keys may
 * be updated such that the the pair of nodes in the hint no longer represent a valid insert position. If one of the nodes in the hint becomes invalid, we still try to use the other
 * valid node as a starting point for finding the appropriate insert position. If both nodes in the hint become invalid, we use the head of the list as a starting point
 * to find the appropriate insert position.
 */
library SortedDoublyLL {
    using SafeMath for uint256;

    // Information for a node in the list
    struct Node {
        uint256 key;                     // Node's key used for sorting
        address nextId;                  // Id of next node (smaller key) in the list
        address prevId;                  // Id of previous node (larger key) in the list
    }

    // Information for the list
    struct Data {
        address head;                        // Head of the list. Also the node in the list with the largest key
        address tail;                        // Tail of the list. Also the node in the list with the smallest key
        uint256 maxSize;                     // Maximum size of the list
        uint256 size;                        // Current size of the list
        mapping (address => Node) nodes;     // Track the corresponding ids for each node in the list
    }

    /*
     * @dev Set the maximum size of the list
     * @param _size Maximum size
     */
    function setMaxSize(Data storage self, uint256 _size) public {
        // New max size must be greater than old max size
        require(_size > self.maxSize);

        self.maxSize = _size;
    }

    /*
     * @dev Add a node to the list
     * @param _id Node's id
     * @param _key Node's key
     * @param _prevId Id of previous node for the insert position
     * @param _nextId Id of next node for the insert position
     */
    function insert(Data storage self, address _id, uint256 _key, address _prevId, address _nextId) public {
        // List must not be full
        require(!isFull(self));
        // List must not already contain node
        require(!contains(self, _id));
        // Node id must not be null
        require(_id != address(0));
        // Key must be non-zero
        require(_key > 0);

        address prevId = _prevId;
        address nextId = _nextId;

        if (!validInsertPosition(self, _key, prevId, nextId)) {
            // Sender's hint was not a valid insert position
            // Use sender's hint to find a valid insert position
            (prevId, nextId) = findInsertPosition(self, _key, prevId, nextId);
        }

        self.nodes[_id].key = _key;

        if (prevId == address(0) && nextId == address(0)) {
            // Insert as head and tail
            self.head = _id;
            self.tail = _id;
        } else if (prevId == address(0)) {
            // Insert before `prevId` as the head
            self.nodes[_id].nextId = self.head;
            self.nodes[self.head].prevId = _id;
            self.head = _id;
        } else if (nextId == address(0)) {
            // Insert after `nextId` as the tail
            self.nodes[_id].prevId = self.tail;
            self.nodes[self.tail].nextId = _id;
            self.tail = _id;
        } else {
            // Insert at insert position between `prevId` and `nextId`
            self.nodes[_id].nextId = nextId;
            self.nodes[_id].prevId = prevId;
            self.nodes[prevId].nextId = _id;
            self.nodes[nextId].prevId = _id;
        }

        self.size = self.size.add(1);
    }

    /*
     * @dev Remove a node from the list
     * @param _id Node's id
     */
    function remove(Data storage self, address _id) public {
        // List must contain the node
        require(contains(self, _id));

        if (self.size > 1) {
            // List contains more than a single node
            if (_id == self.head) {
                // The removed node is the head
                // Set head to next node
                self.head = self.nodes[_id].nextId;
                // Set prev pointer of new head to null
                self.nodes[self.head].prevId = address(0);
            } else if (_id == self.tail) {
                // The removed node is the tail
                // Set tail to previous node
                self.tail = self.nodes[_id].prevId;
                // Set next pointer of new tail to null
                self.nodes[self.tail].nextId = address(0);
            } else {
                // The removed node is neither the head nor the tail
                // Set next pointer of previous node to the next node
                self.nodes[self.nodes[_id].prevId].nextId = self.nodes[_id].nextId;
                // Set prev pointer of next node to the previous node
                self.nodes[self.nodes[_id].nextId].prevId = self.nodes[_id].prevId;
            }
        } else {
            // List contains a single node
            // Set the head and tail to null
            self.head = address(0);
            self.tail = address(0);
        }

        delete self.nodes[_id];
        self.size = self.size.sub(1);
    }

    /*
     * @dev Update the key of a node in the list
     * @param _id Node's id
     * @param _newKey Node's new key
     * @param _prevId Id of previous node for the new insert position
     * @param _nextId Id of next node for the new insert position
     */
    function updateKey(Data storage self, address _id, uint256 _newKey, address _prevId, address _nextId) public {
        // List must contain the node
        require(contains(self, _id));

        // Remove node from the list
        remove(self, _id);

        if (_newKey > 0) {
            // Insert node if it has a non-zero key
            insert(self, _id, _newKey, _prevId, _nextId);
        }
    }

    /*
     * @dev Checks if the list contains a node
     * @param _transcoder Address of transcoder
     */
    function contains(Data storage self, address _id) public view returns (bool) {
        // List only contains non-zero keys, so if key is non-zero the node exists
        return self.nodes[_id].key > 0;
    }

    /*
     * @dev Checks if the list is full
     */
    function isFull(Data storage self) public view returns (bool) {
        return self.size == self.maxSize;
    }

    /*
     * @dev Checks if the list is empty
     */
    function isEmpty(Data storage self) public view returns (bool) {
        return self.size == 0;
    }

    /*
     * @dev Returns the current size of the list
     */
    function getSize(Data storage self) public view returns (uint256) {
        return self.size;
    }

    /*
     * @dev Returns the maximum size of the list
     */
    function getMaxSize(Data storage self) public view returns (uint256) {
        return self.maxSize;
    }

    /*
     * @dev Returns the key of a node in the list
     * @param _id Node's id
     */
    function getKey(Data storage self, address _id) public view returns (uint256) {
        return self.nodes[_id].key;
    }

    /*
     * @dev Returns the first node in the list (node with the largest key)
     */
    function getFirst(Data storage self) public view returns (address) {
        return self.head;
    }

    /*
     * @dev Returns the last node in the list (node with the smallest key)
     */
    function getLast(Data storage self) public view returns (address) {
        return self.tail;
    }

    /*
     * @dev Returns the next node (with a smaller key) in the list for a given node
     * @param _id Node's id
     */
    function getNext(Data storage self, address _id) public view returns (address) {
        return self.nodes[_id].nextId;
    }

    /*
     * @dev Returns the previous node (with a larger key) in the list for a given node
     * @param _id Node's id
     */
    function getPrev(Data storage self, address _id) public view returns (address) {
        return self.nodes[_id].prevId;
    }

    /*
     * @dev Check if a pair of nodes is a valid insertion point for a new node with the given key
     * @param _key Node's key
     * @param _prevId Id of previous node for the insert position
     * @param _nextId Id of next node for the insert position
     */
    function validInsertPosition(Data storage self, uint256 _key, address _prevId, address _nextId) public view returns (bool) {
        if (_prevId == address(0) && _nextId == address(0)) {
            // `(null, null)` is a valid insert position if the list is empty
            return isEmpty(self);
        } else if (_prevId == address(0)) {
            // `(null, _nextId)` is a valid insert position if `_nextId` is the head of the list
            return self.head == _nextId && _key >= self.nodes[_nextId].key;
        } else if (_nextId == address(0)) {
            // `(_prevId, null)` is a valid insert position if `_prevId` is the tail of the list
            return self.tail == _prevId && _key <= self.nodes[_prevId].key;
        } else {
            // `(_prevId, _nextId)` is a valid insert position if they are adjacent nodes and `_key` falls between the two nodes' keys
            return self.nodes[_prevId].nextId == _nextId && self.nodes[_prevId].key >= _key && _key >= self.nodes[_nextId].key;
        }
    }

    /*
     * @dev Descend the list (larger keys to smaller keys) to find a valid insert position
     * @param _key Node's key
     * @param _startId Id of node to start ascending the list from
     */
    function descendList(Data storage self, uint256 _key, address _startId) private view returns (address, address) {
        // If `_startId` is the head, check if the insert position is before the head
        if (self.head == _startId && _key >= self.nodes[_startId].key) {
            return (address(0), _startId);
        }

        address prevId = _startId;
        address nextId = self.nodes[prevId].nextId;

        // Descend the list until we reach the end or until we find a valid insert position
        while (prevId != address(0) && !validInsertPosition(self, _key, prevId, nextId)) {
            prevId = self.nodes[prevId].nextId;
            nextId = self.nodes[prevId].nextId;
        }

        return (prevId, nextId);
    }

    /*
     * @dev Ascend the list (smaller keys to larger keys) to find a valid insert position
     * @param _key Node's key
     * @param _startId Id of node to start descending the list from
     */
    function ascendList(Data storage self, uint256 _key, address _startId) private view returns (address, address) {
        // If `_startId` is the tail, check if the insert position is after the tail
        if (self.tail == _startId && _key <= self.nodes[_startId].key) {
            return (_startId, address(0));
        }

        address nextId = _startId;
        address prevId = self.nodes[nextId].prevId;

        // Ascend the list until we reach the end or until we find a valid insertion point
        while (nextId != address(0) && !validInsertPosition(self, _key, prevId, nextId)) {
            nextId = self.nodes[nextId].prevId;
            prevId = self.nodes[nextId].prevId;
        }

        return (prevId, nextId);
    }

    /*
     * @dev Find the insert position for a new node with the given key
     * @param _key Node's key
     * @param _prevId Id of previous node for the insert position
     * @param _nextId Id of next node for the insert position
     */
    function findInsertPosition(Data storage self, uint256 _key, address _prevId, address _nextId) private view returns (address, address) {
        address prevId = _prevId;
        address nextId = _nextId;

        if (prevId != address(0)) {
            if (!contains(self, prevId) || _key > self.nodes[prevId].key) {
                // `prevId` does not exist anymore or now has a smaller key than the given key
                prevId = address(0);
            }
        }

        if (nextId != address(0)) {
            if (!contains(self, nextId) || _key < self.nodes[nextId].key) {
                // `nextId` does not exist anymore or now has a larger key than the given key
                nextId = address(0);
            }
        }

        if (prevId == address(0) && nextId == address(0)) {
            // No hint - descend list starting from head
            return descendList(self, _key, self.head);
        } else if (prevId == address(0)) {
            // No `prevId` for hint - ascend list starting from `nextId`
            return ascendList(self, _key, nextId);
        } else if (nextId == address(0)) {
            // No `nextId` for hint - descend list starting from `prevId`
            return descendList(self, _key, prevId);
        } else {
            // Descend list starting from `prevId`
            return descendList(self, _key, prevId);
        }
    }
}

Contract ABI

[{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"}],"name":"getFirst","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"},{"name":"_id","type":"address"},{"name":"_newKey","type":"uint256"},{"name":"_prevId","type":"address"},{"name":"_nextId","type":"address"}],"name":"updateKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"},{"name":"_key","type":"uint256"},{"name":"_prevId","type":"address"},{"name":"_nextId","type":"address"}],"name":"validInsertPosition","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"}],"name":"isFull","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"},{"name":"_id","type":"address"},{"name":"_key","type":"uint256"},{"name":"_prevId","type":"address"},{"name":"_nextId","type":"address"}],"name":"insert","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"},{"name":"_id","type":"address"}],"name":"remove","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"}],"name":"getLast","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"}],"name":"getMaxSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"},{"name":"_size","type":"uint256"}],"name":"setMaxSize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"},{"name":"_id","type":"address"}],"name":"contains","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"}],"name":"getSize","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"}],"name":"isEmpty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"},{"name":"_id","type":"address"}],"name":"getKey","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"},{"name":"_id","type":"address"}],"name":"getNext","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"self","type":"SortedDoublyLL.Data storage"},{"name":"_id","type":"address"}],"name":"getPrev","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

Contract Creation Code

6060604052341561000f57600080fd5b610c068061001e6000396000f3006060604052600436106100da5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632ebb2fed81146100df57806338237efe146101065780633a5c20441461012f5780634aa12990146101635780634fbaa9a61461016e5780635d35e0071461019557806372e40b26146101ac578063735bc2ca146101b7578063a176adaf146101d4578063b0138c47146101e2578063b32ece58146101f9578063be6f92d414610204578063d86811281461020f578063e189dedb14610226578063fe1ee7191461023d575b600080fd5b6100ea600435610254565b604051600160a060020a03909116815260200160405180910390f35b61012d600435600160a060020a036024358116906044359060643581169060843516610261565b005b61014f600435602435600160a060020a036044358116906064351661029d565b604051901515815260200160405180910390f35b61014f6004356103e6565b61012d600435600160a060020a0360243581169060443590606435811690608435166103f5565b61012d600435600160a060020a0360243516610633565b6100ea600435610800565b6101c2600435610810565b60405190815260200160405180910390f35b61012d600435602435610817565b61014f600435600160a060020a036024351661082f565b6101c260043561084f565b61014f600435610856565b6101c2600435600160a060020a036024351661085e565b6100ea600435600160a060020a036024351661087d565b6100ea600435600160a060020a03602435166108a3565b54600160a060020a031690565b61026b858561082f565b151561027657600080fd5b6102808585610633565b60008311156102965761029685858585856103f5565b5050505050565b6000600160a060020a0383161580156102bd5750600160a060020a038216155b156102d2576102cb85610856565b90506103de565b600160a060020a038316151561031d578454600160a060020a0383811691161480156102cb575050600160a060020a03811660009081526004850160205260409020548310156103de565b600160a060020a038216151561036b576001850154600160a060020a0384811691161480156102cb575050600160a060020a03821660009081526004850160205260409020548311156103de565b600160a060020a03838116600090815260048701602052604090206001015481169083161480156103b75750600160a060020a0383166000908152600486016020526040902054849010155b80156102cb575050600160a060020a03811660009081526004850160205260409020548310155b949350505050565b60028101546003909101541490565b600080610401876103e6565b1561040b57600080fd5b610415878761082f565b1561041f57600080fd5b600160a060020a038616151561043457600080fd5b6000851161044157600080fd5b50829050816104528786848461029d565b151561046a57610464878684846108c9565b90925090505b600160a060020a0380871660009081526004890160205260409020869055821615801561049e5750600160a060020a038116155b156104d0578654600160a060020a038716600160a060020a03199182168117895560018901805490921617905561060c565b600160a060020a0382161515610538578654600160a060020a03878116600081815260048b0160205260408082206001018054958516600160a060020a03199687161790558b549093168152919091206002018054831682179055885490911617875561060c565b600160a060020a03811615156105a55760018781018054600160a060020a03898116600081815260048d0160205260408082206002018054958516600160a060020a031996871617905585549093168152919091209093018054821684179055815416909117905561060c565b600160a060020a03808716600081815260048a01602052604080822060018082018054878916600160a060020a0319918216811790925560029384018054988b16988216891790559685528385209091018054871686179055835291200180549092161790555b600387015461062290600163ffffffff6109ed16565b876003018190555050505050505050565b61063d828261082f565b151561064857600080fd5b600182600301541115610784578154600160a060020a03828116911614156106b557600160a060020a038181166000908152600484016020526040808220600101548554908416600160a060020a031991821617808755909316825290206002018054909116905561077f565b6001820154600160a060020a038281169116141561071e57600160a060020a0381811660009081526004840160205260408082206002015460018087018054928616600160a060020a03199384161790819055909416835291209091018054909116905561077f565b600160a060020a0381811660009081526004840160205260408082206001808201805460029384018054881687528587209093018054918816600160a060020a03199283161790559154905486168552929093200180549190931691161790555b6107a0565b8154600160a060020a0319908116835560018301805490911690555b600160a060020a0381166000908152600483016020526040812090815560018082018054600160a060020a03199081169091556002909201805490921690915560038301546107f49163ffffffff610a0316565b82600301819055505050565b60010154600160a060020a031690565b6002015490565b6002820154811161082757600080fd5b600290910155565b600160a060020a0316600090815260049190910160205260408120541190565b6003015490565b600301541590565b600160a060020a03166000908152600491909101602052604090205490565b600160a060020a0380821660009081526004840160205260409020600101541692915050565b600160a060020a0380821660009081526004840160205260409020600201541692915050565b6000808383600160a060020a03821615610916576108e7888361082f565b158061090c5750600160a060020a038216600090815260048901602052604090205487115b1561091657600091505b600160a060020a0381161561095d5761092f888261082f565b15806109545750600160a060020a038116600090815260048901602052604090205487105b1561095d575060005b600160a060020a03821615801561097b5750600160a060020a038116155b156109a15787546109989089908990600160a060020a0316610a15565b935093506109e2565b600160a060020a03821615156109bc57610998888883610af9565b600160a060020a03811615156109d757610998888884610a15565b610998888884610a15565b505094509492505050565b6000828201838110156109fc57fe5b9392505050565b600082821115610a0f57fe5b50900390565b8254600090819081908190600160a060020a038681169116148015610a545750600160a060020a03851660009081526004880160205260409020548610155b15610a655760008593509350610aef565b5050600160a060020a0380841660009081526004870160205260409020600101548491165b600160a060020a03821615801590610aab5750610aa98787848461029d565b155b15610ae85750600160a060020a03908116600090815260048701602052604080822060019081015484168084529190922090910154909116610a8a565b8181935093505b5050935093915050565b6001830154600090819081908190600160a060020a038681169116148015610b3b5750600160a060020a03851660009081526004880160205260409020548611155b15610b4c5784600093509350610aef565b5050600160a060020a0380841660009081526004870160205260409020600201548491165b600160a060020a03821615801590610b925750610b908787838561029d565b155b15610bcf5750600160a060020a03908116600090815260048701602052604080822060029081015484168084529190922090910154909116610b71565b9690955093505050505600a165627a7a7230582041b3d32de0f76b026c74006885293295dfc5f88b3f1f7411b091d73a9f2662030029

Swarm Source

bzzr://41b3d32de0f76b026c74006885293295dfc5f88b3f1f7411b091d73a9f266203
Block Age Transaction Difficulty GasUsed Reward
Block Age Uncle Number Difficulty GasUsed Reward