Contract Overview
Balance: 0 Ether
Transactions: 98960 txns
 Latest 25 txns From a total of 98960 Transactions
(+1 PendingTxn)

TxHash Age From To Value [TxFee]
0x48adeda578f340cc74c3c0995a46da65868d87b124a51b76b5ea4caae67cf1f1(pending)0xb3683b4de1fc502807464b55d151e8e2d2c19cb5  IN  0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether(Pending)
0x265820aca5da9c59e190e5bd3aa178db2f6b19e25101e1480365989526e3e97e 35 secs ago0xc1918ed3bce03ca0fca63c959ab58379eadd0099  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000165094
0xf20913b8993f8f00ced9cf6901e73b97c7f018d2a6ff339d0746ebf32f9a42f8 55 secs ago0xb3683b4de1fc502807464b55d151e8e2d2c19cb5  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000053344
0x19a267ed0e38496fa14f3747cbfaefc650feae72d95e3c52a778e5bead10b4281 min ago0xc6ec42e1f0e971864d7236945d91664ec17f5b9f  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000050272
0x0041c64abf3a17e08083173260765b9646683d00c470405b836538c861d97b251 min ago0xb3683b4de1fc502807464b55d151e8e2d2c19cb5  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.0001237
0x881512183dfe2fce4895368ccde787e02d39a0dd1f035623335a216bb9f0c4352 mins ago0xb3683b4de1fc502807464b55d151e8e2d2c19cb5  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000095506
0xf2ba6b49ddbad4cd9d3c4e6d9773c36279e70c194fc7f9509c1121cc525cc4543 mins ago0xb3683b4de1fc502807464b55d151e8e2d2c19cb5  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000116734
0xa34c965d7abc7d01ba371c480fd30848057f5f0f23b1aa009e173e3e9517bb9d3 mins ago0x5ca488c638187003b8376d40dd9c6805605964ed  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000049888
0x1bdc59bbf893ff5ae120352f218bca1fa2575e4fdf4370e1dd7e582f85313b8b4 mins ago0x39c39eed7bda0d6f1ac9d212e001ee704c3fe794  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000052192
0xd53f4bcc04246c99ea6d5fe1bf05908cda6fc73ce7c92834f408b84b1f0557cb4 mins ago0x5ca488c638187003b8376d40dd9c6805605964ed  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000162406
0x2c3c0e4c781086e8db16be373b784c127c960a11c226a7c090d24cd3f2bc8d9c5 mins ago0xb3683b4de1fc502807464b55d151e8e2d2c19cb5  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000123572
0x7878865bc0f02ce2078a925c24a9888b8998e7bba26d0f5b2f00bdb946fd74305 mins ago0xc6ec42e1f0e971864d7236945d91664ec17f5b9f  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000113662
0xa363baa45c9d348cdc4e6562670d51e6d15f4ecbfb425d9378a428652d80e5ae6 mins ago0x5ca488c638187003b8376d40dd9c6805605964ed  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.00009205
0x180b297ffd17effcf08cf789792d639381f06bdfbdadf9e41c1240d9e4f73a446 mins ago0x37d9838dd0fc3a2f882c02e9c843e00cff69dae8  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000185554
0xb69d0dc95bd27b81f00d34c14bac6575f2978525452462deb174f4e6715453d87 mins ago0xe76f3870c9057ffd71cda37ec798d5f516412873  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000051296
0xd840078961ea8b412eb7c4bd4e42523041b2d076b4777846127f039b653c82397 mins ago0xe51ddaa1b650c26b62fca2520cdc2c60ce205f75  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000050656
0x9748e243da329324fddc71a459780d95520bae553e2e879e7fe3d8c29d8a1a398 mins ago0xc1918ed3bce03ca0fca63c959ab58379eadd0099  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000123316
0x4196e5a1ef5a3c26575adf45da57abbb0b97b863172aa6ed84647d0bdf3e71cb9 mins ago0x2875341c89503eee111e5b43f392cbabff7a382c  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000213027
0x76651d5f7e69ac4fece21e15a7da84b069014c22098da92f32b9b063bc5891709 mins ago0x39c39eed7bda0d6f1ac9d212e001ee704c3fe794  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000115582
0x5f461b5f068610af52b19114741c2954c9d113b8be67d5910f6bb166197e400410 mins ago0x4b2a652240ff0d9ef40457e6ea495fdc88fea4ca  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000053344
0xf94abcca391f214900aa42d1bc3cd98b22202b883a540954d3b40e6451e19dd710 mins ago0x39c39eed7bda0d6f1ac9d212e001ee704c3fe794  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000214243
0x916b7ff85a8bd0573a8df15f6d492754b62f1a1c253a462df3562a167a5b15a511 mins ago0xe76f3870c9057ffd71cda37ec798d5f516412873  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000213539
0x0f10eed007c2b3ee77cf921ad7a0261561a39a776ecf6c2a2864a8e71f1efdc912 mins ago0x5ca488c638187003b8376d40dd9c6805605964ed  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000282211
0x218fd90103c2b07be95a21c5b11cc967509f9851a0acf54053b4e62c5058f7c012 mins ago0xe51ddaa1b650c26b62fca2520cdc2c60ce205f75  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000142624
0x681600acb74f2a276c99580a1382212fd024eeef6d62d6ba92bc7aa135ed518713 mins ago0x5ca488c638187003b8376d40dd9c6805605964ed  IN   0x8b4e57b06edda63093a2dbe8eb29ea6a2090b73d0 Ether0.000113278
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
View All
ParentTxHash Block Age From To Value
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: FairGame3
Compiler Text: v0.4.19+commit.c4cbbb05
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.19;

library strings {
    struct slice {
        uint _len;
        uint _ptr;
    }

    function memcpy(uint dest, uint src, uint len) private pure {
        // Copy word-length chunks while possible
        for(; len >= 32; len -= 32) {
            assembly {
                mstore(dest, mload(src))
            }
            dest += 32;
            src += 32;
        }

        // Copy remaining bytes
        uint mask = 256 ** (32 - len) - 1;
        assembly {
            let srcpart := and(mload(src), not(mask))
            let destpart := and(mload(dest), mask)
            mstore(dest, or(destpart, srcpart))
        }
    }

    /*
     * @dev Returns a slice containing the entire string.
     * @param self The string to make a slice from.
     * @return A newly allocated slice containing the entire string.
     */
    function toSlice(string memory self) internal pure returns (slice memory) {
        uint ptr;
        assembly {
            ptr := add(self, 0x20)
        }
        return slice(bytes(self).length, ptr);
    }

    /*
     * @dev Returns the length of a null-terminated bytes32 string.
     * @param self The value to find the length of.
     * @return The length of the string, from 0 to 32.
     */
    function len(bytes32 self) internal pure returns (uint) {
        uint ret;
        if (self == 0)
            return 0;
        if (self & 0xffffffffffffffffffffffffffffffff == 0) {
            ret += 16;
            self = bytes32(uint(self) / 0x100000000000000000000000000000000);
        }
        if (self & 0xffffffffffffffff == 0) {
            ret += 8;
            self = bytes32(uint(self) / 0x10000000000000000);
        }
        if (self & 0xffffffff == 0) {
            ret += 4;
            self = bytes32(uint(self) / 0x100000000);
        }
        if (self & 0xffff == 0) {
            ret += 2;
            self = bytes32(uint(self) / 0x10000);
        }
        if (self & 0xff == 0) {
            ret += 1;
        }
        return 32 - ret;
    }

    /*
     * @dev Returns a slice containing the entire bytes32, interpreted as a
     *      null-terminated utf-8 string.
     * @param self The bytes32 value to convert to a slice.
     * @return A new slice containing the value of the input argument up to the
     *         first null.
     */
    function toSliceB32(bytes32 self) internal pure returns (slice memory ret) {
        // Allocate space for `self` in memory, copy it there, and point ret at it
        assembly {
            let ptr := mload(0x40)
            mstore(0x40, add(ptr, 0x20))
            mstore(ptr, self)
            mstore(add(ret, 0x20), ptr)
        }
        ret._len = len(self);
    }

    /*
     * @dev Returns a new slice containing the same data as the current slice.
     * @param self The slice to copy.
     * @return A new slice containing the same data as `self`.
     */
    function copy(slice memory self) internal pure returns (slice memory) {
        return slice(self._len, self._ptr);
    }

    /*
     * @dev Copies a slice to a new string.
     * @param self The slice to copy.
     * @return A newly allocated string containing the slice's text.
     */
    function toString(slice memory self) internal pure returns (string memory) {
        string memory ret = new string(self._len);
        uint retptr;
        assembly { retptr := add(ret, 32) }

        memcpy(retptr, self._ptr, self._len);
        return ret;
    }

    /*
     * @dev Returns the length in runes of the slice. Note that this operation
     *      takes time proportional to the length of the slice; avoid using it
     *      in loops, and call `slice.empty()` if you only need to know whether
     *      the slice is empty or not.
     * @param self The slice to operate on.
     * @return The length of the slice in runes.
     */
    function len(slice memory self) internal pure returns (uint l) {
        // Starting at ptr-31 means the LSB will be the byte we care about
        uint ptr = self._ptr - 31;
        uint end = ptr + self._len;
        for (l = 0; ptr < end; l++) {
            uint8 b;
            assembly { b := and(mload(ptr), 0xFF) }
            if (b < 0x80) {
                ptr += 1;
            } else if(b < 0xE0) {
                ptr += 2;
            } else if(b < 0xF0) {
                ptr += 3;
            } else if(b < 0xF8) {
                ptr += 4;
            } else if(b < 0xFC) {
                ptr += 5;
            } else {
                ptr += 6;
            }
        }
    }

    /*
     * @dev Returns true if the slice is empty (has a length of 0).
     * @param self The slice to operate on.
     * @return True if the slice is empty, False otherwise.
     */
    function empty(slice memory self) internal pure returns (bool) {
        return self._len == 0;
    }

    /*
     * @dev Returns a positive number if `other` comes lexicographically after
     *      `self`, a negative number if it comes before, or zero if the
     *      contents of the two slices are equal. Comparison is done per-rune,
     *      on unicode codepoints.
     * @param self The first slice to compare.
     * @param other The second slice to compare.
     * @return The result of the comparison.
     */
    function compare(slice memory self, slice memory other) internal pure returns (int) {
        uint shortest = self._len;
        if (other._len < self._len)
            shortest = other._len;

        uint selfptr = self._ptr;
        uint otherptr = other._ptr;
        for (uint idx = 0; idx < shortest; idx += 32) {
            uint a;
            uint b;
            assembly {
                a := mload(selfptr)
                b := mload(otherptr)
            }
            if (a != b) {
                // Mask out irrelevant bytes and check again
                uint256 mask = uint256(-1); // 0xffff...
                if(shortest < 32) {
                  mask = ~(2 ** (8 * (32 - shortest + idx)) - 1);
                }
                uint256 diff = (a & mask) - (b & mask);
                if (diff != 0)
                    return int(diff);
            }
            selfptr += 32;
            otherptr += 32;
        }
        return int(self._len) - int(other._len);
    }

    /*
     * @dev Returns true if the two slices contain the same text.
     * @param self The first slice to compare.
     * @param self The second slice to compare.
     * @return True if the slices are equal, false otherwise.
     */
    function equals(slice memory self, slice memory other) internal pure returns (bool) {
        return compare(self, other) == 0;
    }

    /*
     * @dev Extracts the first rune in the slice into `rune`, advancing the
     *      slice to point to the next rune and returning `self`.
     * @param self The slice to operate on.
     * @param rune The slice that will contain the first rune.
     * @return `rune`.
     */
    function nextRune(slice memory self, slice memory rune) internal pure returns (slice memory) {
        rune._ptr = self._ptr;

        if (self._len == 0) {
            rune._len = 0;
            return rune;
        }

        uint l;
        uint b;
        // Load the first byte of the rune into the LSBs of b
        assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) }
        if (b < 0x80) {
            l = 1;
        } else if(b < 0xE0) {
            l = 2;
        } else if(b < 0xF0) {
            l = 3;
        } else {
            l = 4;
        }

        // Check for truncated codepoints
        if (l > self._len) {
            rune._len = self._len;
            self._ptr += self._len;
            self._len = 0;
            return rune;
        }

        self._ptr += l;
        self._len -= l;
        rune._len = l;
        return rune;
    }

    /*
     * @dev Returns the first rune in the slice, advancing the slice to point
     *      to the next rune.
     * @param self The slice to operate on.
     * @return A slice containing only the first rune from `self`.
     */
    function nextRune(slice memory self) internal pure returns (slice memory ret) {
        nextRune(self, ret);
    }

    /*
     * @dev Returns the number of the first codepoint in the slice.
     * @param self The slice to operate on.
     * @return The number of the first codepoint in the slice.
     */
    function ord(slice memory self) internal pure returns (uint ret) {
        if (self._len == 0) {
            return 0;
        }

        uint word;
        uint length;
        uint divisor = 2 ** 248;

        // Load the rune into the MSBs of b
        assembly { word:= mload(mload(add(self, 32))) }
        uint b = word / divisor;
        if (b < 0x80) {
            ret = b;
            length = 1;
        } else if(b < 0xE0) {
            ret = b & 0x1F;
            length = 2;
        } else if(b < 0xF0) {
            ret = b & 0x0F;
            length = 3;
        } else {
            ret = b & 0x07;
            length = 4;
        }

        // Check for truncated codepoints
        if (length > self._len) {
            return 0;
        }

        for (uint i = 1; i < length; i++) {
            divisor = divisor / 256;
            b = (word / divisor) & 0xFF;
            if (b & 0xC0 != 0x80) {
                // Invalid UTF-8 sequence
                return 0;
            }
            ret = (ret * 64) | (b & 0x3F);
        }

        return ret;
    }

    /*
     * @dev Returns the keccak-256 hash of the slice.
     * @param self The slice to hash.
     * @return The hash of the slice.
     */
    function keccak(slice memory self) internal pure returns (bytes32 ret) {
        assembly {
            ret := keccak256(mload(add(self, 32)), mload(self))
        }
    }

    /*
     * @dev Returns true if `self` starts with `needle`.
     * @param self The slice to operate on.
     * @param needle The slice to search for.
     * @return True if the slice starts with the provided text, false otherwise.
     */
    function startsWith(slice memory self, slice memory needle) internal pure returns (bool) {
        if (self._len < needle._len) {
            return false;
        }

        if (self._ptr == needle._ptr) {
            return true;
        }

        bool equal;
        assembly {
            let length := mload(needle)
            let selfptr := mload(add(self, 0x20))
            let needleptr := mload(add(needle, 0x20))
            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))
        }
        return equal;
    }

    /*
     * @dev If `self` starts with `needle`, `needle` is removed from the
     *      beginning of `self`. Otherwise, `self` is unmodified.
     * @param self The slice to operate on.
     * @param needle The slice to search for.
     * @return `self`
     */
    function beyond(slice memory self, slice memory needle) internal pure returns (slice memory) {
        if (self._len < needle._len) {
            return self;
        }

        bool equal = true;
        if (self._ptr != needle._ptr) {
            assembly {
                let length := mload(needle)
                let selfptr := mload(add(self, 0x20))
                let needleptr := mload(add(needle, 0x20))
                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))
            }
        }

        if (equal) {
            self._len -= needle._len;
            self._ptr += needle._len;
        }

        return self;
    }

    /*
     * @dev Returns true if the slice ends with `needle`.
     * @param self The slice to operate on.
     * @param needle The slice to search for.
     * @return True if the slice starts with the provided text, false otherwise.
     */
    function endsWith(slice memory self, slice memory needle) internal pure returns (bool) {
        if (self._len < needle._len) {
            return false;
        }

        uint selfptr = self._ptr + self._len - needle._len;

        if (selfptr == needle._ptr) {
            return true;
        }

        bool equal;
        assembly {
            let length := mload(needle)
            let needleptr := mload(add(needle, 0x20))
            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))
        }

        return equal;
    }

    /*
     * @dev If `self` ends with `needle`, `needle` is removed from the
     *      end of `self`. Otherwise, `self` is unmodified.
     * @param self The slice to operate on.
     * @param needle The slice to search for.
     * @return `self`
     */
    function until(slice memory self, slice memory needle) internal pure returns (slice memory) {
        if (self._len < needle._len) {
            return self;
        }

        uint selfptr = self._ptr + self._len - needle._len;
        bool equal = true;
        if (selfptr != needle._ptr) {
            assembly {
                let length := mload(needle)
                let needleptr := mload(add(needle, 0x20))
                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))
            }
        }

        if (equal) {
            self._len -= needle._len;
        }

        return self;
    }

    // Returns the memory address of the first byte of the first occurrence of
    // `needle` in `self`, or the first byte after `self` if not found.
    function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {
        uint ptr = selfptr;
        uint idx;

        if (needlelen <= selflen) {
            if (needlelen <= 32) {
                bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));

                bytes32 needledata;
                assembly { needledata := and(mload(needleptr), mask) }

                uint end = selfptr + selflen - needlelen;
                bytes32 ptrdata;
                assembly { ptrdata := and(mload(ptr), mask) }

                while (ptrdata != needledata) {
                    if (ptr >= end)
                        return selfptr + selflen;
                    ptr++;
                    assembly { ptrdata := and(mload(ptr), mask) }
                }
                return ptr;
            } else {
                // For long needles, use hashing
                bytes32 hash;
                assembly { hash := keccak256(needleptr, needlelen) }

                for (idx = 0; idx <= selflen - needlelen; idx++) {
                    bytes32 testHash;
                    assembly { testHash := keccak256(ptr, needlelen) }
                    if (hash == testHash)
                        return ptr;
                    ptr += 1;
                }
            }
        }
        return selfptr + selflen;
    }

    // Returns the memory address of the first byte after the last occurrence of
    // `needle` in `self`, or the address of `self` if not found.
    function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {
        uint ptr;

        if (needlelen <= selflen) {
            if (needlelen <= 32) {
                bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));

                bytes32 needledata;
                assembly { needledata := and(mload(needleptr), mask) }

                ptr = selfptr + selflen - needlelen;
                bytes32 ptrdata;
                assembly { ptrdata := and(mload(ptr), mask) }

                while (ptrdata != needledata) {
                    if (ptr <= selfptr)
                        return selfptr;
                    ptr--;
                    assembly { ptrdata := and(mload(ptr), mask) }
                }
                return ptr + needlelen;
            } else {
                // For long needles, use hashing
                bytes32 hash;
                assembly { hash := keccak256(needleptr, needlelen) }
                ptr = selfptr + (selflen - needlelen);
                while (ptr >= selfptr) {
                    bytes32 testHash;
                    assembly { testHash := keccak256(ptr, needlelen) }
                    if (hash == testHash)
                        return ptr + needlelen;
                    ptr -= 1;
                }
            }
        }
        return selfptr;
    }

    /*
     * @dev Modifies `self` to contain everything from the first occurrence of
     *      `needle` to the end of the slice. `self` is set to the empty slice
     *      if `needle` is not found.
     * @param self The slice to search and modify.
     * @param needle The text to search for.
     * @return `self`.
     */
    function find(slice memory self, slice memory needle) internal pure returns (slice memory) {
        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);
        self._len -= ptr - self._ptr;
        self._ptr = ptr;
        return self;
    }

    /*
     * @dev Modifies `self` to contain the part of the string from the start of
     *      `self` to the end of the first occurrence of `needle`. If `needle`
     *      is not found, `self` is set to the empty slice.
     * @param self The slice to search and modify.
     * @param needle The text to search for.
     * @return `self`.
     */
    function rfind(slice memory self, slice memory needle) internal pure returns (slice memory) {
        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);
        self._len = ptr - self._ptr;
        return self;
    }

    /*
     * @dev Splits the slice, setting `self` to everything after the first
     *      occurrence of `needle`, and `token` to everything before it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and `token` is set to the entirety of `self`.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @param token An output parameter to which the first token is written.
     * @return `token`.
     */
    function split(slice memory self, slice memory needle, slice memory token) internal pure returns (slice memory) {
        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);
        token._ptr = self._ptr;
        token._len = ptr - self._ptr;
        if (ptr == self._ptr + self._len) {
            // Not found
            self._len = 0;
        } else {
            self._len -= token._len + needle._len;
            self._ptr = ptr + needle._len;
        }
        return token;
    }

    /*
     * @dev Splits the slice, setting `self` to everything after the first
     *      occurrence of `needle`, and returning everything before it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and the entirety of `self` is returned.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @return The part of `self` up to the first occurrence of `delim`.
     */
    function split(slice memory self, slice memory needle) internal pure returns (slice memory token) {
        split(self, needle, token);
    }

    /*
     * @dev Splits the slice, setting `self` to everything before the last
     *      occurrence of `needle`, and `token` to everything after it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and `token` is set to the entirety of `self`.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @param token An output parameter to which the first token is written.
     * @return `token`.
     */
    function rsplit(slice memory self, slice memory needle, slice memory token) internal pure returns (slice memory) {
        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);
        token._ptr = ptr;
        token._len = self._len - (ptr - self._ptr);
        if (ptr == self._ptr) {
            // Not found
            self._len = 0;
        } else {
            self._len -= token._len + needle._len;
        }
        return token;
    }

    /*
     * @dev Splits the slice, setting `self` to everything before the last
     *      occurrence of `needle`, and returning everything after it. If
     *      `needle` does not occur in `self`, `self` is set to the empty slice,
     *      and the entirety of `self` is returned.
     * @param self The slice to split.
     * @param needle The text to search for in `self`.
     * @return The part of `self` after the last occurrence of `delim`.
     */
    function rsplit(slice memory self, slice memory needle) internal pure returns (slice memory token) {
        rsplit(self, needle, token);
    }

    /*
     * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`.
     * @param self The slice to search.
     * @param needle The text to search for in `self`.
     * @return The number of occurrences of `needle` found in `self`.
     */
    function count(slice memory self, slice memory needle) internal pure returns (uint cnt) {
        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len;
        while (ptr <= self._ptr + self._len) {
            cnt++;
            ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len;
        }
    }

    /*
     * @dev Returns True if `self` contains `needle`.
     * @param self The slice to search.
     * @param needle The text to search for in `self`.
     * @return True if `needle` is found in `self`, false otherwise.
     */
    function contains(slice memory self, slice memory needle) internal pure returns (bool) {
        return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr;
    }

    /*
     * @dev Returns a newly allocated string containing the concatenation of
     *      `self` and `other`.
     * @param self The first slice to concatenate.
     * @param other The second slice to concatenate.
     * @return The concatenation of the two strings.
     */
    function concat(slice memory self, slice memory other) internal pure returns (string memory) {
        string memory ret = new string(self._len + other._len);
        uint retptr;
        assembly { retptr := add(ret, 32) }
        memcpy(retptr, self._ptr, self._len);
        memcpy(retptr + self._len, other._ptr, other._len);
        return ret;
    }

    /*
     * @dev Joins an array of slices, using `self` as a delimiter, returning a
     *      newly allocated string.
     * @param self The delimiter to use.
     * @param parts A list of slices to join.
     * @return A newly allocated string containing all the slices in `parts`,
     *         joined with `self`.
     */
    function join(slice memory self, slice[] memory parts) internal pure returns (string memory) {
        if (parts.length == 0)
            return "";

        uint length = self._len * (parts.length - 1);
        for(uint i = 0; i < parts.length; i++)
            length += parts[i]._len;

        string memory ret = new string(length);
        uint retptr;
        assembly { retptr := add(ret, 32) }

        for(i = 0; i < parts.length; i++) {
            memcpy(retptr, parts[i]._ptr, parts[i]._len);
            retptr += parts[i]._len;
            if (i < parts.length - 1) {
                memcpy(retptr, self._ptr, self._len);
                retptr += self._len;
            }
        }

        return ret;
    }
}


//fairgame
contract FairGame3 {
    using strings for *;
    
    //game results
    mapping(string => string) results;
    
    //show mapping
    bytes6 constant dice_value = '123456';
    string[6] dice_value_show = ['⚀','⚁','⚂','⚃','⚄','⚅'];
    
    bytes14 constant poker_value = '123456789abcde';
    string [14] poker_value_show = ['A','2','3','4','5','6','7','8','9','10','J','Q','K','joker'];
    
    bytes6 constant poker_type = '012345';
    string[6] poker_type_show = ['♦','♣','♥','♠','black','red'];
    
    address owner = 0xDE1440bbEfD29ce0c71c1f7FF8629fc429c8cADB;
    
    address[12] sendAddr = [
    0x5ca488C638187003B8376D40dd9C6805605964Ed,
    0xC6Ec42E1f0E971864d7236945d91664Ec17F5b9F,
    0xe51dDAa1B650c26B62fCA2520cdC2c60cE205F75,
    0x2875341C89503eee111E5b43f392cbaBff7A382C,
    0xE76f3870C9057Ffd71cDA37ec798D5F516412873,
    0x37d9838dD0FC3a2F882C02E9c843E00cFF69dAE8,
    0x39c39EED7Bda0d6F1Ac9d212e001ee704C3fE794,
    0xC1918Ed3bCe03ca0fca63C959Ab58379EADd0099,
    0x4b2A652240Ff0d9ef40457E6EA495fDc88FeA4ca,
    0xB3683B4DE1fc502807464B55d151e8e2D2c19cb5,
    0x03Ed1DAfF8d68B5Ef21D7Aa5d83536C8041C921F,
    0xDE1440bbEfD29ce0c71c1f7FF8629fc429c8cADB
    ] ;
    

    function AddSeedArray1(string a,string b) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                return;
            }
        }
    }
    function AddSeedArray2(string a,string b,string c,string d) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                results[c] =d;
                return;
            }
        }
    }
    function AddSeedArray3(string a,string b,string c,string d,string e,string f) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                results[c] =d;
                results[e] =f;
                return;
            }
        }
    }
    function AddSeedArray4(string a,string b,string c,string d,string e,string f,string g,string h) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                results[c] =d;
                results[e] =f;
                results[g] =h;
                return;
            }
        }
    }
    function AddSeedArray5(string a,string b,string c,string d,string e,string f,string g,string h,string i,string j) public{
        for(uint x = 0; x < sendAddr.length; x++){
            if(msg.sender == sendAddr[x]){
                results[a] =b;
                results[c] =d;
                results[e] =f;
                results[g] =h;
                results[i] =j;
                return;
            }
        }
    }

    
    //seedToDice⚀⚁⚂⚃⚄⚅
    function Seed2Dice(string seed) internal constant returns(string)
    {
        bytes memory _seedBytes = bytes(seed);
        string[3] memory _stringArray;
        uint i = 0;
        uint j = 0;
        uint k = 0;
        uint a = 0;
        for(i=0;i<_stringArray.length;i++){
            j = 13 + i*2;
            k = j+1;
            if(_seedBytes[j] == '0'){
                for(a=0;a<dice_value.length;a++){
                    if(_seedBytes[k] == dice_value[a]){
                        _stringArray[i] = dice_value_show[a];
                    }
                }
            }
        }
        
        bytes memory _newValue = bytes(new string(_stringArray.length*3));
        
        uint m=0;
        uint n=0;
        uint o=0;
        for(m=0;m<_stringArray.length;m++){
            bytes memory _tmpBytes = bytes(_stringArray[m]);
            for(n=0;n<_tmpBytes.length;n++){
                _newValue[o++] = _tmpBytes[n];
            }
        }
        
        return string(_newValue);
    }
    
    function Seed2Poker(string seed,uint cardnum) internal constant returns(string)
    {
        bytes memory _seedBytes = bytes(seed);
        uint _seedlen = cardnum;
        if(_seedlen == 0){
            _seedlen = _seedBytes.length/2;
        }
        string[54] memory _stringArray;
        string[54] memory _stringArray2;
        uint i = 0;
        uint h = 0;
        uint a = 0;
        for(i=0;i<_stringArray.length && i<_seedlen;i++){
            
            for(a=0;a<poker_type.length;a++){
                if(_seedBytes[13 + i*2] == poker_type[a]){
                    _stringArray[h] = poker_type_show[a];
                }
            }
            
            for(a=0;a<poker_value.length;a++){
                if(_seedBytes[13 + i*2+1] == poker_value[a]){
                    _stringArray2[h] = poker_value_show[a];
                }
            }
            h++;
        }
        
        string memory s;
        uint m=0;
        for(m=0;m<_stringArray.length && m<_seedlen;m++){
            s = s.toSlice().concat(_stringArray[m].toSlice());
            s = s.toSlice().concat(_stringArray2[m].toSlice());
        }
        return s;
        
    }
    
    function parseInt(string _a, uint _b) internal pure returns (uint) {
        bytes memory bresult = bytes(_a);
        uint mint = 0;
        bool decimals = false;
        for (uint i=0; i<bresult.length; i++){
            if ((bresult[i] >= 48)&&(bresult[i] <= 57)){
                if (decimals){
                if (_b == 0) break;
                    else _b--;
                }
                mint *= 10;
                mint += uint(bresult[i]) - 48;
            } else if (bresult[i] == 46) decimals = true;
        }
        if (_b > 0) mint *= 10**_b;
        return mint;
    }

    function splitSeed(string seed)internal pure returns(string[] seeds){
        var delim = ",".toSlice();
        var s = seed.toSlice();
        var _seed = new string[](s.count(delim) + 1);
        for(uint i = 0; i < _seed.length; i++) {
            _seed[i] = s.split(delim).toString();
        }
        return _seed;
    }

    //verify hash value
    function VerifyHash(string hash) public constant returns (string seed,string result,bytes32 hash_calc)
    {
        var _seed = splitSeed(results[hash]);
        var gameid = parseInt(_seed[0],0);
        seed = _seed[1];
        if(gameid == 3){
            result = Seed2Poker(seed,parseInt(_seed[2],0));
        }
        else if(gameid == 4){
            result = Seed2Dice(seed);
        }else{
            result = "none";
        }
        hash_calc =  sha256(sha256(seed));
    }
    
    //self kill contract
    function kill()  public{
        if(msg.sender == owner){
            selfdestruct(owner);
        }
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"},{"name":"c","type":"string"},{"name":"d","type":"string"}],"name":"AddSeedArray2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"}],"name":"AddSeedArray1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"string"}],"name":"VerifyHash","outputs":[{"name":"seed","type":"string"},{"name":"result","type":"string"},{"name":"hash_calc","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"},{"name":"c","type":"string"},{"name":"d","type":"string"},{"name":"e","type":"string"},{"name":"f","type":"string"}],"name":"AddSeedArray3","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"},{"name":"c","type":"string"},{"name":"d","type":"string"},{"name":"e","type":"string"},{"name":"f","type":"string"},{"name":"g","type":"string"},{"name":"h","type":"string"}],"name":"AddSeedArray4","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"string"},{"name":"b","type":"string"},{"name":"c","type":"string"},{"name":"d","type":"string"},{"name":"e","type":"string"},{"name":"f","type":"string"},{"name":"g","type":"string"},{"name":"h","type":"string"},{"name":"i","type":"string"},{"name":"j","type":"string"}],"name":"AddSeedArray5","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

  Contract Creation Code Switch To Opcodes View
606060405260c0604051908101604052806040805190810160405280600381526020017fe29a80000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a81000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a82000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a83000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe29a840000000000000000000000000000000000000000000000000000000000815250815260200160408051908101604052600381527fe29a850000000000000000000000000000000000000000000000000000000000602082015290526200017d906001906006620007da565b506101c0604051908101604052806040805190810160405280600181526020017f410000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f320000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f330000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f340000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f350000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f370000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f380000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f390000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f4a0000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f510000000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600181526020017f4b00000000000000000000000000000000000000000000000000000000000000815250815260200160408051908101604052600581527f6a6f6b657200000000000000000000000000000000000000000000000000000060208201529052620004d090600790600e62000830565b5060c0604051908101604052806040805190810160405280600381526020017fe299a6000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe299a3000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe299a5000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600381526020017fe299a0000000000000000000000000000000000000000000000000000000000081525081526020016040805190810160405280600581526020017f626c61636b000000000000000000000000000000000000000000000000000000815250815260200160408051908101604052600381527f7265640000000000000000000000000000000000000000000000000000000000602082015290526200064a906015906006620007da565b50601b8054600160a060020a03191673de1440bbefd29ce0c71c1f7ff8629fc429c8cadb1790556101806040519081016040908152735ca488c638187003b8376d40dd9c6805605964ed825273c6ec42e1f0e971864d7236945d91664ec17f5b9f602083015273e51ddaa1b650c26b62fca2520cdc2c60ce205f7590820152732875341c89503eee111e5b43f392cbabff7a382c606082015273e76f3870c9057ffd71cda37ec798d5f51641287360808201527337d9838dd0fc3a2f882c02e9c843e00cff69dae860a08201527339c39eed7bda0d6f1ac9d212e001ee704c3fe79460c082015273c1918ed3bce03ca0fca63c959ab58379eadd009960e0820152734b2a652240ff0d9ef40457e6ea495fdc88fea4ca61010082015273b3683b4de1fc502807464b55d151e8e2d2c19cb56101208201527303ed1daff8d68b5ef21d7aa5d83536c8041c921f61014082015273de1440bbefd29ce0c71c1f7ff8629fc429c8cadb610160820152620007c790601c90600c62000874565b503415620007d457600080fd5b62000a0a565b82600681019282156200081e579160200282015b828111156200081e578251829080516200080d929160200190620008cf565b5091602001919060010190620007ee565b506200082c92915062000950565b5090565b82600e81019282156200081e579160200282015b828111156200081e5782518290805162000863929160200190620008cf565b509160200191906001019062000844565b82600c8101928215620008c1579160200282015b82811115620008c15782518254600160a060020a031916600160a060020a03919091161782556020929092019160019091019062000888565b506200082c9291506200097b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200091257805160ff191683800117855562000942565b8280016001018555821562000942579182015b828111156200094257825182559160200191906001019062000925565b506200082c929150620009a2565b6200097891905b808211156200082c5760006200096e8282620009bf565b5060010162000957565b90565b6200097891905b808211156200082c578054600160a060020a031916815560010162000982565b6200097891905b808211156200082c5760008155600101620009a9565b50805460018160011615610100020316600290046000825580601f10620009e7575062000a07565b601f01602090049060005260206000209081019062000a079190620009a2565b50565b6121cd8062000a1a6000396000f3006060604052600436106100825763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630b2cfcd4811461008757806328fbdf0d146101a057806341c0e1b5146102335780634f2ac130146102465780639a7bb47114610380578063c959d3201461051b578063f5120d3d1461073a575b600080fd5b341561009257600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f0160208091040260200160405190810160405281815292919060208401838380828437509496506109dd95505050505050565b005b34156101ab57600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610b1095505050505050565b341561023e57600080fd5b61019e610bc9565b341561025157600080fd5b61029760046024813581810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610bf095505050505050565b60405160408101829052606080825281906020820190820186818151815260200191508051906020019080838360005b838110156102df5780820151838201526020016102c7565b50505050905090810190601f16801561030c5780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b8381101561034257808201518382015260200161032a565b50505050905090810190601f16801561036f5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390f35b341561038b57600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f016020809104026020016040519081016040528181529291906020840183838082843750949650610e8b95505050505050565b341561052657600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061103895505050505050565b341561074557600080fd5b61019e60046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284378201915050505050509190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965061125f95505050505050565b60005b600c811015610b0957601c81600c81106109f657fe5b015433600160a060020a0390811691161415610b0157836000866040518082805190602001908083835b60208310610a3f5780518252601f199092019160209182019101610a20565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610a83929160200190612082565b50816000846040518082805190602001908083835b60208310610ab75780518252601f199092019160209182019101610a98565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610afb929160200190612082565b50610b09565b6001016109e0565b5050505050565b60005b600c811015610bc457601c81600c8110610b2957fe5b015433600160a060020a0390811691161415610bbc57816000846040518082805190602001908083835b60208310610b725780518252601f199092019160209182019101610b53565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610bb6929160200190612082565b50610bc4565b600101610b13565b505050565b601b5433600160a060020a0390811691161415610bee57601b54600160a060020a0316ff5b565b610bf8612100565b610c00612100565b6000610c0a612100565b6000610d126000876040518082805190602001908083835b60208310610c415780518252601f199092019160209182019101610c22565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d085780601f10610cdd57610100808354040283529160200191610d08565b820191906000526020600020905b815481529060010190602001808311610ceb57829003601f168201915b5050505050611500565b9150610d3582600081518110610d2457fe5b906020019060200201516000611611565b905081600181518110610d4457fe5b9060200190602002015194508060031415610d7957610d7285610d6d84600281518110610d2457fe5b61177f565b9350610dc2565b8060041415610d8b57610d7285611aff565b60408051908101604052600481527f6e6f6e6500000000000000000000000000000000000000000000000000000000602082015293505b600280866000604051602001526040518082805190602001908083835b60208310610dfe5780518252601f199092019160209182019101610ddf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060206040518083038160008661646e5a03f11515610e4057600080fd5b5050604051805190506000604051602001526040519081526020908101906040518083038160008661646e5a03f11515610e7957600080fd5b50506040518051959794965050505050565b60005b600c81101561102f57601c81600c8110610ea457fe5b015433600160a060020a039081169116141561102757856000886040518082805190602001908083835b60208310610eed5780518252601f199092019160209182019101610ece565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610f31929160200190612082565b50836000866040518082805190602001908083835b60208310610f655780518252601f199092019160209182019101610f46565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051610fa9929160200190612082565b50816000846040518082805190602001908083835b60208310610fdd5780518252601f199092019160209182019101610fbe565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611021929160200190612082565b5061102f565b600101610e8e565b50505050505050565b60005b600c81101561125457601c81600c811061105157fe5b015433600160a060020a039081169116141561124c578760008a6040518082805190602001908083835b6020831061109a5780518252601f19909201916020918201910161107b565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516110de929160200190612082565b50856000886040518082805190602001908083835b602083106111125780518252601f1990920191602091820191016110f3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611156929160200190612082565b50836000866040518082805190602001908083835b6020831061118a5780518252601f19909201916020918201910161116b565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516111ce929160200190612082565b50816000846040518082805190602001908083835b602083106112025780518252601f1990920191602091820191016111e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611246929160200190612082565b50611254565b60010161103b565b505050505050505050565b60005b600c8110156114f357601c81600c811061127857fe5b015433600160a060020a03908116911614156114eb578960008c6040518082805190602001908083835b602083106112c15780518252601f1990920191602091820191016112a2565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020908051611305929160200190612082565b508760008a6040518082805190602001908083835b602083106113395780518252601f19909201916020918201910161131a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805161137d929160200190612082565b50856000886040518082805190602001908083835b602083106113b15780518252601f199092019160209182019101611392565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516113f5929160200190612082565b50836000866040518082805190602001908083835b602083106114295780518252601f19909201916020918201910161140a565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902090805161146d929160200190612082565b50816000846040518082805190602001908083835b602083106114a15780518252601f199092019160209182019101611482565b6001836020036101000a03801982511681845116808217855250505050505090500191505090815260200160405180910390209080516114e5929160200190612082565b506114f3565b600101611262565b5050505050505050505050565b611508612100565b611510612112565b611518612112565b611520612100565b600061155e60408051908101604052600181527f2c000000000000000000000000000000000000000000000000000000000000006020820152611dbe565b935061156986611dbe565b925061157b838563ffffffff611de616565b60010160405180591061158b5750595b9080825280602002602001820160405280156115c157816020015b6115ae612100565b8152602001906001900390816115a65790505b509150600090505b8151811015611608576115ea6115e5848663ffffffff611e4416565b611e57565b8282815181106115f657fe5b602090810290910101526001016115c9565b50949350505050565b600061161b612100565b5082600080805b8351811015611762577f300000000000000000000000000000000000000000000000000000000000000084828151811061165857fe5b016020015160f860020a900460f860020a02600160f860020a031916101580156116c957507f39000000000000000000000000000000000000000000000000000000000000008482815181106116aa57fe5b016020015160f860020a900460f860020a02600160f860020a03191611155b1561171f5781156116e8578515156116e057611762565b600019909501945b600a8302925060308482815181106116fc57fe5b016020015160f860020a900460f860020a0260f860020a9004038301925061175a565b83818151811061172b57fe5b016020015160f860020a900460f860020a02600160f860020a031916602e60f860020a02141561175a57600191505b600101611622565b60008611156117745785600a0a830292505b509095945050505050565b611787612100565b61178f612100565b6000611799612129565b6117a1612129565b60008060006117ae612100565b8a975089965060008715156117ce57600289518115156117ca57fe5b0497505b600094508493508392505b6036851080156117e857508785105b15611a8957600092505b6006831015611932577f3031323334350000000000000000000000000000000000000000000000000000836006811061182757fe5b1a60f860020a02600160f860020a0319168986600202600d018151811061184a57fe5b016020015160f860020a900460f860020a02600160f860020a0319161415611927576015836006811061187957fe5b018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561190e5780601f106118e35761010080835404028352916020019161190e565b820191906000526020600020905b8154815290600101906020018083116118f157829003601f168201915b5050505050878560368110151561192157fe5b60200201525b6001909201916117f2565b600092505b600e831015611a7a577f313233343536373839616263646500000000000000000000000000000000000083600e811061196c57fe5b1a60f860020a02600160f860020a0319168986600202600d016001018151811061199257fe5b016020015160f860020a900460f860020a02600160f860020a0319161415611a6f57600783600e81106119c157fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a565780601f10611a2b57610100808354040283529160200191611a56565b820191906000526020600020905b815481529060010190602001808311611a3957829003601f168201915b50505050508685603681101515611a6957fe5b60200201525b600190920191611937565b600194850194909301926117d9565b5060005b603681108015611a9c57508781105b15611af057611ad2611abd888360368110611ab357fe5b6020020151611dbe565b611ac684611dbe565b9063ffffffff611ea516565b9150611ae6611abd878360368110611ab357fe5b9150600101611a8d565b509a9950505050505050505050565b611b07612100565b611b0f612100565b611b17612157565b600080600080611b25612100565b6000806000611b32612100565b8c9a50600098508897508796508695505b6003891015611cf45788600202600d0197508760010196508a8881518110611b6757fe5b016020015160f860020a900460f860020a02600160f860020a0319167f30000000000000000000000000000000000000000000000000000000000000001415611ce957600095505b6006861015611ce9577f31323334353600000000000000000000000000000000000000000000000000008660068110611be457fe5b1a60f860020a02600160f860020a0319168b8881518110611c0157fe5b016020015160f860020a900460f860020a02600160f860020a0319161415611cde5760018660068110611c3057fe5b018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611cc55780601f10611c9a57610100808354040283529160200191611cc5565b820191906000526020600020905b815481529060010190602001808311611ca857829003601f168201915b50505050508a8a600381101515611cd857fe5b60200201525b600190950194611baf565b600190980197611b43565b6009604051805910611d035750595b818152601f19601f830116810160200160405290509450600093508392508291505b6003841015611dad57898460038110611d3a57fe5b60200201519050600092505b8051831015611da257808381518110611d5b57fe5b016020015160f860020a900460f860020a02858380600101945081518110611d7f57fe5b906020010190600160f860020a031916908160001a905350600190920191611d46565b600190930192611d25565b50929b9a5050505050505050505050565b611dc6612112565b602082016040805190810160405280845181526020019190915292915050565b6000808251611e018551866020015186518760200151611f11565b0190505b83518460200151018111611e3d576001909101908251611e35856020015183038651038386518760200151611f11565b019050611e05565b5092915050565b611e4c612112565b611e3d838383611fce565b611e5f612100565b611e67612100565b60008351604051805910611e785750595b818152601f19601f830116810160200160405290509150602082019050611e3d818560200151865161203d565b611ead612100565b611eb5612100565b60008351855101604051805910611ec95750595b818152601f19601f830116810160200160405290509150602082019050611ef6818660200151875161203d565b611f09855182018560200151865161203d565b509392505050565b600083818080808080808c8b11611fb85760208b11611f8157600019600860208d90030260020a01199550858a511694508a8d8d010393508588511692505b828514611f7957838810611f68578c8c019850611fbe565b600190970196858851169250611f50565b879850611fbe565b8a8a209150600096505b8a8d038711611fb8575089872081811415611fa857879850611fbe565b6001978801979690960195611f8b565b8c8c0198505b5050505050505050949350505050565b611fd6612112565b6000611fee8551866020015186518760200151611f11565b9050846020015160208085019190915285015181038352845185602001510181141561201d5760008552612034565b835183510185818151039052508351810160208601525b50909392505050565b60005b602082106120635782518452602084019350602083019250602082039150612040565b6001826020036101000a03905080198351168185511617909352505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106120c357805160ff19168380011785556120f0565b828001600101855582156120f0579182015b828111156120f05782518255916020019190600101906120d5565b506120fc929150612184565b5090565b60206040519081016040526000815290565b604080519081016040526000808252602082015290565b6106c06040519081016040526036815b612141612100565b8152602001906001900390816121395790505090565b60606040519081016040526003815b61216e612100565b8152602001906001900390816121665790505090565b61219e91905b808211156120fc576000815560010161218a565b905600a165627a7a723058209502032366b79ca64d0bc94ac6953d64417db5956bfe7dbe482b4c75fb3faf520029

   Swarm Source:
bzzr://9502032366b79ca64d0bc94ac6953d64417db5956bfe7dbe482b4c75fb3faf52

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward