ETH Price: $3,399.61 (+2.96%)

Contract

0xf626967fA13d841fd74D49dEe9bDd0D0dD6C4394
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add Game60864482018-08-04 11:10:152333 days ago1533381015IN
0xf626967f...0dD6C4394
0 ETH0.001090022

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
60965812018-08-06 4:19:242332 days ago1533529164
0xf626967f...0dD6C4394
0.00900021 ETH
60965812018-08-06 4:19:242332 days ago1533529164
0xf626967f...0dD6C4394
0.00900021 ETH
60874362018-08-04 15:07:362333 days ago1533395256
0xf626967f...0dD6C4394
0.00032992 ETH
60874362018-08-04 15:07:362333 days ago1533395256
0xf626967f...0dD6C4394
0.00032992 ETH
60873712018-08-04 14:52:542333 days ago1533394374
0xf626967f...0dD6C4394
0.0046948 ETH
60873712018-08-04 14:52:542333 days ago1533394374
0xf626967f...0dD6C4394
0.0046948 ETH
60867142018-08-04 12:14:142333 days ago1533384854
0xf626967f...0dD6C4394
0.00075162 ETH
60867142018-08-04 12:14:142333 days ago1533384854
0xf626967f...0dD6C4394
0.00075162 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PlayerBook

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

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

pragma solidity ^0.4.24;
/*
 * -PlayerBook - v0.3.14
 * ┌┬┐┌─┐┌─┐┌┬┐   ╦╦ ╦╔═╗╔╦╗  ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐
 *  │ ├┤ ├─┤│││   ║║ ║╚═╗ ║   ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐
 *  ┴ └─┘┴ ┴┴ ┴  ╚╝╚═╝╚═╝ ╩   ┴  ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘
 *                                  _____                      _____
 *                                 (, /     /)       /) /)    (, /      /)          /)
 *          ┌─┐                      /   _ (/_      // //       /  _   // _   __  _(/
 *          ├─┤                  ___/___(/_/(__(_/_(/_(/_   ___/__/_)_(/_(_(_/ (_(_(_
 *          ┴ ┴                /   /          .-/ _____   (__ /
 *                            (__ /          (_/ (, /                                      /)™
 *                                                 /  __  __ __ __  _   __ __  _  _/_ _  _(/
 * ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐                          /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_
 * ├─┘├┬┘│ │ │││ ││   │                      (__ /              .-/  © Jekyll Island Inc. 2018
 * ┴  ┴└─└─┘─┴┘└─┘└─┘ ┴                                        (_/
 *     ______   _                                 ______                 _
 *====(_____ \=| |===============================(____  \===============| |=============*
 *     _____) )| |  _____  _   _  _____   ____    ____)  )  ___    ___  | |  _
 *    |  ____/ | | (____ || | | || ___ | / ___)  |  __  (  / _ \  / _ \ | |_/ )
 *    | |      | | / ___ || |_| || ____|| |      | |__)  )| |_| || |_| ||  _ (
 *====|_|=======\_)\_____|=\__  ||_____)|_|======|______/==\___/==\___/=|_|=\_)=========*
 *                        (____/
 * ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐  ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐
 * ║  │ ││││ │ ├┬┘├─┤│   │   ║  │ │ ││├┤  │ Inventor │
 * ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴   ╚═╝└─┘─┴┘└─┘ └──────────┘
 */


interface PlayerBookReceiverInterface {
    function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external;
    function receivePlayerNameList(uint256 _pID, bytes32 _name) external;
}


contract PlayerBook {
    using NameFilter for string;
    using SafeMath for uint256;

    address private admin = msg.sender;
//==============================================================================
//     _| _ _|_ _    _ _ _|_    _   .
//    (_|(_| | (_|  _\(/_ | |_||_)  .
//=============================|================================================
    uint256 public registrationFee_ = 0;                    // price to register a name
    mapping(uint256 => PlayerBookReceiverInterface) public games_;  // mapping of our game interfaces for sending your account info to games
    mapping(address => bytes32) public gameNames_;          // lookup a games name
    mapping(address => uint256) public gameIDs_;            // lokup a games ID
    uint256 public gID_;        // total number of games
    uint256 public pID_;        // total number of players
    mapping (address => uint256) public pIDxAddr_;          // (addr => pID) returns player id by address
    mapping (bytes32 => uint256) public pIDxName_;          // (name => pID) returns player id by name
    mapping (uint256 => Player) public plyr_;               // (pID => data) player data
    mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns.  (used so you can change your display name amoungst any name you own)
    mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; // (pID => nameNum => name) list of names a player owns
    struct Player {
        address addr;
        bytes32 name;
        uint256 laff;
        uint256 names;
    }
//==============================================================================
//     _ _  _  __|_ _    __|_ _  _  .
//    (_(_)| |_\ | | |_|(_ | (_)|   .  (initial data setup upon contract deploy)
//==============================================================================
    constructor()
        public
    {
        // premine the dev names (sorry not sorry)
            // No keys are purchased with this method, it's simply locking our addresses,
            // PID's and names for referral codes.
        plyr_[1].addr = 0x8e0d985f3Ec1857BEc39B76aAabDEa6B31B67d53;
        plyr_[1].name = "justo";
        plyr_[1].names = 1;
        pIDxAddr_[0x8e0d985f3Ec1857BEc39B76aAabDEa6B31B67d53] = 1;
        pIDxName_["justo"] = 1;
        plyrNames_[1]["justo"] = true;
        plyrNameList_[1][1] = "justo";

        plyr_[2].addr = 0x8b4DA1827932D71759687f925D17F81Fc94e3A9D;
        plyr_[2].name = "mantso";
        plyr_[2].names = 1;
        pIDxAddr_[0x8b4DA1827932D71759687f925D17F81Fc94e3A9D] = 2;
        pIDxName_["mantso"] = 2;
        plyrNames_[2]["mantso"] = true;
        plyrNameList_[2][1] = "mantso";

        plyr_[3].addr = 0x7ac74Fcc1a71b106F12c55ee8F802C9F672Ce40C;
        plyr_[3].name = "sumpunk";
        plyr_[3].names = 1;
        pIDxAddr_[0x7ac74Fcc1a71b106F12c55ee8F802C9F672Ce40C] = 3;
        pIDxName_["sumpunk"] = 3;
        plyrNames_[3]["sumpunk"] = true;
        plyrNameList_[3][1] = "sumpunk";

        plyr_[4].addr = 0x18E90Fc6F70344f53EBd4f6070bf6Aa23e2D748C;
        plyr_[4].name = "inventor";
        plyr_[4].names = 1;
        pIDxAddr_[0x18E90Fc6F70344f53EBd4f6070bf6Aa23e2D748C] = 4;
        pIDxName_["inventor"] = 4;
        plyrNames_[4]["inventor"] = true;
        plyrNameList_[4][1] = "inventor";

        pID_ = 4;
    }
//==============================================================================
//     _ _  _  _|. |`. _  _ _  .
//    | | |(_)(_||~|~|(/_| _\  .  (these are safety checks)
//==============================================================================
    /**
     * @dev prevents contracts from interacting with fomo3d
     */
    modifier isHuman() {
        address _addr = msg.sender;
        uint256 _codeLength;

        assembly {_codeLength := extcodesize(_addr)}
        require(_codeLength == 0, "sorry humans only");
        _;
    }

    modifier onlyDevs()
    {
        require(admin == msg.sender, "msg sender is not a dev");
        _;
    }

    modifier isRegisteredGame()
    {
        require(gameIDs_[msg.sender] != 0);
        _;
    }
//==============================================================================
//     _    _  _ _|_ _  .
//    (/_\/(/_| | | _\  .
//==============================================================================
    // fired whenever a player registers a name
    event onNewName
    (
        uint256 indexed playerID,
        address indexed playerAddress,
        bytes32 indexed playerName,
        bool isNewPlayer,
        uint256 affiliateID,
        address affiliateAddress,
        bytes32 affiliateName,
        uint256 amountPaid,
        uint256 timeStamp
    );
//==============================================================================
//     _  _ _|__|_ _  _ _  .
//    (_|(/_ |  | (/_| _\  . (for UI & viewing things on etherscan)
//=====_|=======================================================================
    function checkIfNameValid(string _nameStr)
        public
        view
        returns(bool)
    {
        bytes32 _name = _nameStr.nameFilter();
        if (pIDxName_[_name] == 0)
            return (true);
        else
            return (false);
    }
//==============================================================================
//     _    |_ |. _   |`    _  __|_. _  _  _  .
//    |_)|_||_)||(_  ~|~|_|| |(_ | |(_)| |_\  .  (use these to interact with contract)
//====|=========================================================================
    /**
     * @dev registers a name.  UI will always display the last name you registered.
     * but you will still own all previously registered names to use as affiliate
     * links.
     * - must pay a registration fee.
     * - name must be unique
     * - names will be converted to lowercase
     * - name cannot start or end with a space
     * - cannot have more than 1 space in a row
     * - cannot be only numbers
     * - cannot start with 0x
     * - name must be at least 1 char
     * - max length of 32 characters long
     * - allowed characters: a-z, 0-9, and space
     * -functionhash- 0x921dec21 (using ID for affiliate)
     * -functionhash- 0x3ddd4698 (using address for affiliate)
     * -functionhash- 0x685ffd83 (using name for affiliate)
     * @param _nameString players desired name
     * @param _affCode affiliate ID, address, or name of who refered you
     * @param _all set to true if you want this to push your info to all games
     * (this might cost a lot of gas)
     */
    function registerNameXID(string _nameString, uint256 _affCode, bool _all)
        isHuman()
        public
        payable
    {
        // make sure name fees paid
        require (msg.value >= registrationFee_, "umm.....  you have to pay the name fee");

        // filter name + condition checks
        bytes32 _name = NameFilter.nameFilter(_nameString);

        // set up address
        address _addr = msg.sender;

        // set up our tx event data and determine if player is new or not
        bool _isNewPlayer = determinePID(_addr);

        // fetch player id
        uint256 _pID = pIDxAddr_[_addr];

        // manage affiliate residuals
        // if no affiliate code was given, no new affiliate code was given, or the
        // player tried to use their own pID as an affiliate code, lolz
        if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID)
        {
            // update last affiliate
            plyr_[_pID].laff = _affCode;
        } else if (_affCode == _pID) {
            _affCode = 0;
        }

        // register name
        registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all);
    }

    function registerNameXaddr(string _nameString, address _affCode, bool _all)
        isHuman()
        public
        payable
    {
        // make sure name fees paid
        require (msg.value >= registrationFee_, "umm.....  you have to pay the name fee");

        // filter name + condition checks
        bytes32 _name = NameFilter.nameFilter(_nameString);

        // set up address
        address _addr = msg.sender;

        // set up our tx event data and determine if player is new or not
        bool _isNewPlayer = determinePID(_addr);

        // fetch player id
        uint256 _pID = pIDxAddr_[_addr];

        // manage affiliate residuals
        // if no affiliate code was given or player tried to use their own, lolz
        uint256 _affID;
        if (_affCode != address(0) && _affCode != _addr)
        {
            // get affiliate ID from aff Code
            _affID = pIDxAddr_[_affCode];

            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }

        // register name
        registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all);
    }

    function registerNameXname(string _nameString, bytes32 _affCode, bool _all)
        isHuman()
        public
        payable
    {
        // make sure name fees paid
        require (msg.value >= registrationFee_, "umm.....  you have to pay the name fee");

        // filter name + condition checks
        bytes32 _name = NameFilter.nameFilter(_nameString);

        // set up address
        address _addr = msg.sender;

        // set up our tx event data and determine if player is new or not
        bool _isNewPlayer = determinePID(_addr);

        // fetch player id
        uint256 _pID = pIDxAddr_[_addr];

        // manage affiliate residuals
        // if no affiliate code was given or player tried to use their own, lolz
        uint256 _affID;
        if (_affCode != "" && _affCode != _name)
        {
            // get affiliate ID from aff Code
            _affID = pIDxName_[_affCode];

            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }

        // register name
        registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all);
    }

    /**
     * @dev players, if you registered a profile, before a game was released, or
     * set the all bool to false when you registered, use this function to push
     * your profile to a single game.  also, if you've  updated your name, you
     * can use this to push your name to games of your choosing.
     * -functionhash- 0x81c5b206
     * @param _gameID game id
     */
    function addMeToGame(uint256 _gameID)
        isHuman()
        public
    {
        require(_gameID <= gID_, "silly player, that game doesn't exist yet");
        address _addr = msg.sender;
        uint256 _pID = pIDxAddr_[_addr];
        require(_pID != 0, "hey there buddy, you dont even have an account");
        uint256 _totalNames = plyr_[_pID].names;

        // add players profile and most recent name
        games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff);

        // add list of all names
        if (_totalNames > 1)
            for (uint256 ii = 1; ii <= _totalNames; ii++)
                games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]);
    }

    /**
     * @dev players, use this to push your player profile to all registered games.
     * -functionhash- 0x0c6940ea
     */
    function addMeToAllGames()
        isHuman()
        public
    {
        address _addr = msg.sender;
        uint256 _pID = pIDxAddr_[_addr];
        require(_pID != 0, "hey there buddy, you dont even have an account");
        uint256 _laff = plyr_[_pID].laff;
        uint256 _totalNames = plyr_[_pID].names;
        bytes32 _name = plyr_[_pID].name;

        for (uint256 i = 1; i <= gID_; i++)
        {
            games_[i].receivePlayerInfo(_pID, _addr, _name, _laff);
            if (_totalNames > 1)
                for (uint256 ii = 1; ii <= _totalNames; ii++)
                    games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]);
        }

    }

    /**
     * @dev players use this to change back to one of your old names.  tip, you'll
     * still need to push that info to existing games.
     * -functionhash- 0xb9291296
     * @param _nameString the name you want to use
     */
    function useMyOldName(string _nameString)
        isHuman()
        public
    {
        // filter name, and get pID
        bytes32 _name = _nameString.nameFilter();
        uint256 _pID = pIDxAddr_[msg.sender];

        // make sure they own the name
        require(plyrNames_[_pID][_name] == true, "umm... thats not a name you own");

        // update their current name
        plyr_[_pID].name = _name;
    }

//==============================================================================
//     _ _  _ _   | _  _ . _  .
//    (_(_)| (/_  |(_)(_||(_  .
//=====================_|=======================================================
    function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all)
        private
    {
        // if names already has been used, require that current msg sender owns the name
        if (pIDxName_[_name] != 0)
            require(plyrNames_[_pID][_name] == true, "sorry that names already taken");

        // add name to player profile, registry, and name book
        plyr_[_pID].name = _name;
        pIDxName_[_name] = _pID;
        if (plyrNames_[_pID][_name] == false)
        {
            plyrNames_[_pID][_name] = true;
            plyr_[_pID].names++;
            plyrNameList_[_pID][plyr_[_pID].names] = _name;
        }

        // registration fee goes directly to community rewards
        admin.transfer(address(this).balance);

        // push player info to games
        if (_all == true)
            for (uint256 i = 1; i <= gID_; i++)
                games_[i].receivePlayerInfo(_pID, _addr, _name, _affID);

        // fire event
        emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now);
    }
//==============================================================================
//    _|_ _  _ | _  .
//     | (_)(_)|_\  .
//==============================================================================
    function determinePID(address _addr)
        private
        returns (bool)
    {
        if (pIDxAddr_[_addr] == 0)
        {
            pID_++;
            pIDxAddr_[_addr] = pID_;
            plyr_[pID_].addr = _addr;

            // set the new player bool to true
            return (true);
        } else {
            return (false);
        }
    }
//==============================================================================
//   _   _|_ _  _ _  _ |   _ _ || _  .
//  (/_>< | (/_| | |(_||  (_(_|||_\  .
//==============================================================================
    function getPlayerID(address _addr)
        isRegisteredGame()
        external
        returns (uint256)
    {
        determinePID(_addr);
        return (pIDxAddr_[_addr]);
    }
    function getPlayerName(uint256 _pID)
        external
        view
        returns (bytes32)
    {
        return (plyr_[_pID].name);
    }
    function getPlayerLAff(uint256 _pID)
        external
        view
        returns (uint256)
    {
        return (plyr_[_pID].laff);
    }
    function getPlayerAddr(uint256 _pID)
        external
        view
        returns (address)
    {
        return (plyr_[_pID].addr);
    }
    function getNameFee()
        external
        view
        returns (uint256)
    {
        return(registrationFee_);
    }
    function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all)
        isRegisteredGame()
        external
        payable
        returns(bool, uint256)
    {
        // make sure name fees paid
        require (msg.value >= registrationFee_, "umm.....  you have to pay the name fee");

        // set up our tx event data and determine if player is new or not
        bool _isNewPlayer = determinePID(_addr);

        // fetch player id
        uint256 _pID = pIDxAddr_[_addr];

        // manage affiliate residuals
        // if no affiliate code was given, no new affiliate code was given, or the
        // player tried to use their own pID as an affiliate code, lolz
        uint256 _affID = _affCode;
        if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID)
        {
            // update last affiliate
            plyr_[_pID].laff = _affID;
        } else if (_affID == _pID) {
            _affID = 0;
        }

        // register name
        registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all);

        return(_isNewPlayer, _affID);
    }
    function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all)
        isRegisteredGame()
        external
        payable
        returns(bool, uint256)
    {
        // make sure name fees paid
        require (msg.value >= registrationFee_, "umm.....  you have to pay the name fee");

        // set up our tx event data and determine if player is new or not
        bool _isNewPlayer = determinePID(_addr);

        // fetch player id
        uint256 _pID = pIDxAddr_[_addr];

        // manage affiliate residuals
        // if no affiliate code was given or player tried to use their own, lolz
        uint256 _affID;
        if (_affCode != address(0) && _affCode != _addr)
        {
            // get affiliate ID from aff Code
            _affID = pIDxAddr_[_affCode];

            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }

        // register name
        registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all);

        return(_isNewPlayer, _affID);
    }
    function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all)
        isRegisteredGame()
        external
        payable
        returns(bool, uint256)
    {
        // make sure name fees paid
        require (msg.value >= registrationFee_, "umm.....  you have to pay the name fee");

        // set up our tx event data and determine if player is new or not
        bool _isNewPlayer = determinePID(_addr);

        // fetch player id
        uint256 _pID = pIDxAddr_[_addr];

        // manage affiliate residuals
        // if no affiliate code was given or player tried to use their own, lolz
        uint256 _affID;
        if (_affCode != "" && _affCode != _name)
        {
            // get affiliate ID from aff Code
            _affID = pIDxName_[_affCode];

            // if affID is not the same as previously stored
            if (_affID != plyr_[_pID].laff)
            {
                // update last affiliate
                plyr_[_pID].laff = _affID;
            }
        }

        // register name
        registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all);

        return(_isNewPlayer, _affID);
    }

//==============================================================================
//   _ _ _|_    _   .
//  _\(/_ | |_||_)  .
//=============|================================================================
    function addGame(address _gameAddress, string _gameNameStr)
        onlyDevs()
        public
    {
        require(gameIDs_[_gameAddress] == 0, "derp, that games already been registered");
        gID_++;
        bytes32 _name = _gameNameStr.nameFilter();
        gameIDs_[_gameAddress] = gID_;
        gameNames_[_gameAddress] = _name;
        games_[gID_] = PlayerBookReceiverInterface(_gameAddress);

        games_[gID_].receivePlayerInfo(1, plyr_[1].addr, plyr_[1].name, 0);
        games_[gID_].receivePlayerInfo(2, plyr_[2].addr, plyr_[2].name, 0);
        games_[gID_].receivePlayerInfo(3, plyr_[3].addr, plyr_[3].name, 0);
        games_[gID_].receivePlayerInfo(4, plyr_[4].addr, plyr_[4].name, 0);
    }

    function setRegistrationFee(uint256 _fee)
        onlyDevs()
        public
    {
        registrationFee_ = _fee;
    }

}

/**
* @title -Name Filter- v0.1.9
* ┌┬┐┌─┐┌─┐┌┬┐   ╦╦ ╦╔═╗╔╦╗  ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐
*  │ ├┤ ├─┤│││   ║║ ║╚═╗ ║   ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐
*  ┴ └─┘┴ ┴┴ ┴  ╚╝╚═╝╚═╝ ╩   ┴  ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘
*                                  _____                      _____
*                                 (, /     /)       /) /)    (, /      /)          /)
*          ┌─┐                      /   _ (/_      // //       /  _   // _   __  _(/
*          ├─┤                  ___/___(/_/(__(_/_(/_(/_   ___/__/_)_(/_(_(_/ (_(_(_
*          ┴ ┴                /   /          .-/ _____   (__ /
*                            (__ /          (_/ (, /                                      /)™
*                                                 /  __  __ __ __  _   __ __  _  _/_ _  _(/
* ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐                          /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_
* ├─┘├┬┘│ │ │││ ││   │                      (__ /              .-/  © Jekyll Island Inc. 2018
* ┴  ┴└─└─┘─┴┘└─┘└─┘ ┴                                        (_/
*              _       __    _      ____      ____  _   _    _____  ____  ___
*=============| |\ |  / /\  | |\/| | |_ =====| |_  | | | |    | |  | |_  | |_)==============*
*=============|_| \| /_/--\ |_|  | |_|__=====|_|   |_| |_|__  |_|  |_|__ |_| \==============*
*
* ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐  ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐
* ║  │ ││││ │ ├┬┘├─┤│   │   ║  │ │ ││├┤  │ Inventor │
* ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴   ╚═╝└─┘─┴┘└─┘ └──────────┘
*/
library NameFilter {

    /**
     * @dev filters name strings
     * -converts uppercase to lower case.
     * -makes sure it does not start/end with a space
     * -makes sure it does not contain multiple spaces in a row
     * -cannot be only numbers
     * -cannot start with 0x
     * -restricts characters to A-Z, a-z, 0-9, and space.
     * @return reprocessed string in bytes32 format
     */
    function nameFilter(string _input)
        internal
        pure
        returns(bytes32)
    {
        bytes memory _temp = bytes(_input);
        uint256 _length = _temp.length;

        //sorry limited to 32 characters
        require (_length <= 32 && _length > 0, "string must be between 1 and 32 characters");
        // make sure it doesnt start with or end with space
        require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, "string cannot start or end with space");
        // make sure first two characters are not 0x
        if (_temp[0] == 0x30)
        {
            require(_temp[1] != 0x78, "string cannot start with 0x");
            require(_temp[1] != 0x58, "string cannot start with 0X");
        }

        // create a bool to track if we have a non number character
        bool _hasNonNumber;

        // convert & check
        for (uint256 i = 0; i < _length; i++)
        {
            // if its uppercase A-Z
            if (_temp[i] > 0x40 && _temp[i] < 0x5b)
            {
                // convert to lower case a-z
                _temp[i] = byte(uint(_temp[i]) + 32);

                // we have a non number
                if (_hasNonNumber == false)
                    _hasNonNumber = true;
            } else {
                require
                (
                    // require character is a space
                    _temp[i] == 0x20 ||
                    // OR lowercase a-z
                    (_temp[i] > 0x60 && _temp[i] < 0x7b) ||
                    // or 0-9
                    (_temp[i] > 0x2f && _temp[i] < 0x3a),
                    "string contains invalid characters"
                );
                // make sure theres not 2x spaces in a row
                if (_temp[i] == 0x20)
                    require( _temp[i+1] != 0x20, "string cannot contain consecutive spaces");

                // see if we have a character other than a number
                if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39))
                    _hasNonNumber = true;
            }
        }

        require(_hasNonNumber == true, "string cannot be only numbers");

        bytes32 _ret;
        assembly {
            _ret := mload(add(_temp, 32))
        }
        return (_ret);
    }
}

/**
 * @title SafeMath v0.1.9
 * @dev Math operations with safety checks that throw on error
 * change notes:  original SafeMath library from OpenZeppelin modified by Inventor
 * - added sqrt
 * - added sq
 * - added pwr
 * - changed asserts to requires with error log outputs
 * - removed div, its useless
 */
library SafeMath {

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */
    function mul(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c)
    {
        if (a == 0) {
            return 0;
        }
        c = a * b;
        require(c / a == b, "SafeMath mul failed");
        return c;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */
    function sub(uint256 a, uint256 b)
        internal
        pure
        returns (uint256)
    {
        require(b <= a, "SafeMath sub failed");
        return a - b;
    }

    /**
    * @dev Adds two numbers, throws on overflow.
    */
    function add(uint256 a, uint256 b)
        internal
        pure
        returns (uint256 c)
    {
        c = a + b;
        require(c >= a, "SafeMath add failed");
        return c;
    }

    /**
     * @dev gives square root of given x.
     */
    function sqrt(uint256 x)
        internal
        pure
        returns (uint256 y)
    {
        uint256 z = ((add(x,1)) / 2);
        y = x;
        while (z < y)
        {
            y = z;
            z = ((add((x / z),z)) / 2);
        }
    }

    /**
     * @dev gives square. multiplies x by x
     */
    function sq(uint256 x)
        internal
        pure
        returns (uint256)
    {
        return (mul(x,x));
    }

    /**
     * @dev x to the power of y
     */
    function pwr(uint256 x, uint256 y)
        internal
        pure
        returns (uint256)
    {
        if (x==0)
            return (0);
        else if (y==0)
            return (1);
        else
        {
            uint256 z = x;
            for (uint256 i=1; i < y; i++)
                z = mul(z,x);
            return (z);
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[],"name":"addMeToAllGames","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"pIDxAddr_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registrationFee_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getNameFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes32"}],"name":"plyrNames_","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"gameNames_","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"pIDxName_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"address"},{"name":"_all","type":"bool"}],"name":"registerNameXaddr","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_gameAddress","type":"address"},{"name":"_gameNameStr","type":"string"}],"name":"addGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"bytes32"},{"name":"_all","type":"bool"}],"name":"registerNameXname","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"_nameStr","type":"string"}],"name":"checkIfNameValid","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_affCode","type":"bytes32"},{"name":"_all","type":"bool"}],"name":"registerNameXnameFromDapp","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_gameID","type":"uint256"}],"name":"addMeToGame","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerName","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXID","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"plyrNameList_","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_affCode","type":"address"},{"name":"_all","type":"bool"}],"name":"registerNameXaddrFromDapp","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_nameString","type":"string"}],"name":"useMyOldName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gID_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_name","type":"bytes32"},{"name":"_affCode","type":"uint256"},{"name":"_all","type":"bool"}],"name":"registerNameXIDFromDapp","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_fee","type":"uint256"}],"name":"setRegistrationFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"games_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"gameIDs_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"plyr_","outputs":[{"name":"addr","type":"address"},{"name":"name","type":"bytes32"},{"name":"laff","type":"uint256"},{"name":"names","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_pID","type":"uint256"}],"name":"getPlayerLAff","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"getPlayerID","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerID","type":"uint256"},{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":true,"name":"playerName","type":"bytes32"},{"indexed":false,"name":"isNewPlayer","type":"bool"},{"indexed":false,"name":"affiliateID","type":"uint256"},{"indexed":false,"name":"affiliateAddress","type":"address"},{"indexed":false,"name":"affiliateName","type":"bytes32"},{"indexed":false,"name":"amountPaid","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onNewName","type":"event"}]

608060405260008054600160a060020a0319163317815560015534801561002557600080fd5b507f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a368054600160a060020a0319908116738e0d985f3ec1857bec39b76aaabdea6b31b67d53179091557f6a7573746f0000000000000000000000000000000000000000000000000000007f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3781905560017f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a398190557f7945588bb2738ba9b8b221747234545c54f0e4c7ac3784d43094467f615b51678190557f762d6d82485f8ba728a5500d760dfdb7168471b2894400e1df49c93b495b4f888190557f16d8e9bd91f15d01a7566839f41a231f80f11c69224644ab0930ac26636557c7805460ff1990811683179091557f6bd9ce7c7c44b510ee825857e9b7d0dbc77ffc0dcbb487d9763a092e420c9a18929092557f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c380548416738b4da1827932d71759687f925d17f81fc94e3a9d1790557f6d616e74736f00000000000000000000000000000000000000000000000000007f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c48190557f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c682905560027fb879adb6fe669e16d6aeb7a19aad65badbb92fd7b2b1f1f5ba729495b236748f8190557f6580451f8c1533c98975a12cfa65f28f7e3151f60699355b6b7674c57d81c21a557fe8fcf9acd692d87e1f7051e6b260929b78ae5d958b2e3fdea5b77a29f79fd95080548416831790557f5ec873723cdc64ab6619ea2fcbca33beef9a820510f97aa9ecb9e3ff0f638853557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e780548416737ac74fcc1a71b106f12c55ee8f802c9f672ce40c1790557f73756d70756e6b000000000000000000000000000000000000000000000000007fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e88190557fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61ea82905560037f1c974634a525cc45258a231bf2a0c4c330809704175b5c917fc36ea991564a328190557f26bda8dc9fb5cccb812d17f150de8a6180eab480db7f39d0f264318349138645557f41d6a92976668d608e8cb8d112aced96732d01f6081942e52ea08ab8277f341880548416831790557f960add1d2a4af75b2cd16bfb54d92ee5d4c29427a1bf605fa9b667906b27d701557f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cb80549093167318e90fc6f70344f53ebd4f6070bf6aa23e2d748c179092557f696e76656e746f720000000000000000000000000000000000000000000000007f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cc8190557f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9ce83905560047f0997b017d9262bcd076672939714e360066ae7d695d955ecc1821a61f36f7b818190557f3b067eeadfc88d599c85e61eaac8075a0e270e6830b20fa50e1f309ebbfe9c468190557fa766fb1d802397cd20bbb5606a44354e813d310108e6e51ed92a4ae966722d53805490931684179092556000929092527f12d0c11577e2f0950f57c455c117796550b79f444811db8ba2f69c57b646c7846020527f2c4ff72984b96d6e24887abcd47b1c2fb2b1bd600b7f7d037d1a2ac35568baab9190915560065561260f806105646000396000f3006080604052600436106101695763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630c6940ea811461016e57806310f01eba14610185578063180603eb146101b85780632614195f146101cd5780632660316e146101e257806327249e61146102115780632e19ebdc146102325780633ddd46981461024a5780633fda926e146102a65780634b2271761461030d5780634d0d35ff14610322578063685ffd83146103565780636c52660d146103a9578063745ea0c11461040257806381c5b2061461043c57806382e37b2c14610454578063921dec211461046c578063a448ed4b146104bf578063aa4d490b146104da578063b9291296146104fd578063b9eca0c814610556578063c0942dfd1461056b578063c320c7271461058a578063d5241279146105a2578063dbbcaa97146105ba578063de7874f3146105db578063e3c08adf14610623578063e56556a91461063b575b600080fd5b34801561017a57600080fd5b5061018361065c565b005b34801561019157600080fd5b506101a6600160a060020a03600435166108ca565b60408051918252519081900360200190f35b3480156101c457600080fd5b506101a66108dc565b3480156101d957600080fd5b506101a66108e2565b3480156101ee57600080fd5b506101fd6004356024356108e8565b604080519115158252519081900360200190f35b34801561021d57600080fd5b506101a6600160a060020a0360043516610908565b34801561023e57600080fd5b506101a660043561091a565b6040805160206004803580820135601f810184900484028501840190955284845261018394369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561092c565b3480156102b257600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610183958335600160a060020a0316953695604494919390910191908190840183828082843750949750610a969650505050505050565b34801561031957600080fd5b506101a6610f3c565b34801561032e57600080fd5b5061033a600435610f42565b60408051600160a060020a039092168252519081900360200190f35b6040805160206004803580820135601f8101849004840285018401909552848452610183943694929360249392840191908190840183828082843750949750508435955050505050602001351515610f60565b3480156103b557600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101fd94369492936024939284019190819084018382808284375094975061109e9650505050505050565b610421600160a060020a036004351660243560443560643515156110d6565b60408051921515835260208301919091528051918290030190f35b34801561044857600080fd5b506101836004356111ea565b34801561046057600080fd5b506101a66004356114b7565b6040805160206004803580820135601f81018490048402850184019095528484526101839436949293602493928401919081908401838280828437509497505084359550505050506020013515156114cc565b3480156104cb57600080fd5b506101a660043560243561160e565b610421600160a060020a036004358116906024359060443516606435151561162b565b34801561050957600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018394369492936024939284019190819084018382808284375094975061174e9650505050505050565b34801561056257600080fd5b506101a6611840565b610421600160a060020a03600435166024356044356064351515611846565b34801561059657600080fd5b50610183600435611952565b3480156105ae57600080fd5b5061033a6004356119b9565b3480156105c657600080fd5b506101a6600160a060020a03600435166119d4565b3480156105e757600080fd5b506105f36004356119e6565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b34801561062f57600080fd5b506101a6600435611a17565b34801561064757600080fd5b506101a6600160a060020a0360043516611a2c565b600080808080808033803b80156106ab576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b33600081815260076020526040902054909950975087151561073d576040805160e560020a62461bcd02815260206004820152602e60248201527f6865792074686572652062756464792c20796f7520646f6e74206576656e206860448201527f61766520616e206163636f756e74000000000000000000000000000000000000606482015290519081900360840190fd5b6000888152600960205260409020600281015460038201546001928301549199509750955093505b60055484116108bf5760008481526002602052604080822054815160e060020a6349cc635d028152600481018c9052600160a060020a038d81166024830152604482018a9052606482018c9052925192909116926349cc635d9260848084019382900301818387803b1580156107da57600080fd5b505af11580156107ee573d6000803e3d6000fd5b5050505060018611156108b457600192505b8583116108b4576000848152600260209081526040808320548b8452600b83528184208785529092528083205481517f8f7140ea000000000000000000000000000000000000000000000000000000008152600481018d905260248101919091529051600160a060020a0390921692638f7140ea9260448084019382900301818387803b15801561089057600080fd5b505af11580156108a4573d6000803e3d6000fd5b5050600190940193506108009050565b600190930192610765565b505050505050505050565b60076020526000908152604090205481565b60015481565b60015490565b600a60209081526000928352604080842090915290825290205460ff1681565b60036020526000908152604090205481565b60086020526000908152604090205481565b60008080808033803b8015610979576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b6001543410156109d5576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b6109de8a611a6d565b96503395506109ec86612280565b600160a060020a03808816600090815260076020526040902054919650909450891615801590610a2e575085600160a060020a031689600160a060020a031614155b15610a7c57600160a060020a0389166000908152600760209081526040808320548784526009909252909120600201549093508314610a7c5760008481526009602052604090206002018390555b610a8a8487858a898d612302565b50505050505050505050565b60008054600160a060020a03163314610af9576040805160e560020a62461bcd02815260206004820152601760248201527f6d73672073656e646572206973206e6f74206120646576000000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526004602052604090205415610b8d576040805160e560020a62461bcd02815260206004820152602860248201527f646572702c20746861742067616d657320616c7265616479206265656e20726560448201527f6769737465726564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600580546001019055610b9f82611a6d565b60058054600160a060020a03808716600081815260046020818152604080842096909655600381528583208890558654835260028152858320805473ffffffffffffffffffffffffffffffffffffffff19169094179093559454815283812054600180835260099093527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36547f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3754865160e060020a6349cc635d0281529788019490945284166024870152604486019290925260648501819052925194955016926349cc635d92608480820193929182900301818387803b158015610ca357600080fd5b505af1158015610cb7573d6000803e3d6000fd5b505060055460009081526002602081815260408084205483855260099092527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c3547f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c454825160e060020a6349cc635d0281526004810195909552600160a060020a0391821660248601526044850152606484018590529051911694506349cc635d93506084808301939282900301818387803b158015610d7657600080fd5b505af1158015610d8a573d6000803e3d6000fd5b5050600554600090815260026020908152604080832054600380855260099093527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e7547fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e854835160e060020a6349cc635d0281526004810195909552600160a060020a0391821660248601526044850152606484018590529151911694506349cc635d93506084808301939282900301818387803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b5050600554600090815260026020908152604080832054600480855260099093527f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cb547f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cc54835160e060020a6349cc635d02815280860195909552600160a060020a0391821660248601526044850152606484018590529151911694506349cc635d93506084808301939282900301818387803b158015610f1f57600080fd5b505af1158015610f33573d6000803e3d6000fd5b50505050505050565b60065481565b600081815260096020526040902054600160a060020a03165b919050565b60008080808033803b8015610fad576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b600154341015611009576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b6110128a611a6d565b965033955061102086612280565b600160a060020a0387166000908152600760205260409020549095509350881580159061104d5750888714155b15610a7c576000898152600860209081526040808320548784526009909252909120600201549093508314610a7c576000848152600960205260409020600201839055610a8a8487858a898d612302565b6000806110aa83611a6d565b60008181526008602052604090205490915015156110cb57600191506110d0565b600091505b50919050565b33600090815260046020526040812054819081908190819015156110f957600080fd5b600154341015611155576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b61115e89612280565b600160a060020a038a166000908152600760205260409020549093509150861580159061118b5750868814155b156111cd575060008681526008602090815260408083205484845260099092529091206002015481146111cd5760008281526009602052604090206002018190555b6111db828a838b878b612302565b91989197509095505050505050565b600080808033803b8015611236576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b6005548711156112b6576040805160e560020a62461bcd02815260206004820152602960248201527f73696c6c7920706c617965722c20746861742067616d6520646f65736e27742060448201527f6578697374207965740000000000000000000000000000000000000000000000606482015290519081900360840190fd5b336000818152600760205260409020549096509450841515611348576040805160e560020a62461bcd02815260206004820152602e60248201527f6865792074686572652062756464792c20796f7520646f6e74206576656e206860448201527f61766520616e206163636f756e74000000000000000000000000000000000000606482015290519081900360840190fd5b600085815260096020818152604080842060038101548c86526002808552838720548c88529590945260018201549390910154825160e060020a6349cc635d028152600481018c9052600160a060020a038d8116602483015260448201959095526064810191909152915190985091909216926349cc635d926084808201939182900301818387803b1580156113dd57600080fd5b505af11580156113f1573d6000803e3d6000fd5b505050506001841115610f3357600192505b838311610f3357600087815260026020908152604080832054888452600b83528184208785529092528083205481517f8f7140ea000000000000000000000000000000000000000000000000000000008152600481018a905260248101919091529051600160a060020a0390921692638f7140ea9260448084019382900301818387803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b5050600190940193506114039050565b60009081526009602052604090206001015490565b600080808033803b8015611518576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b600154341015611574576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b61157d89611a6d565b955033945061158b85612280565b600160a060020a038616600090815260076020526040902054909450925087158015906115c957506000838152600960205260409020600201548814155b80156115d55750828814155b156115f3576000838152600960205260409020600201889055611600565b8288141561160057600097505b6108bf83868a89888c612302565b600b60209081526000928352604080842090915290825290205481565b336000908152600460205260408120548190819081908190151561164e57600080fd5b6001543410156116aa576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b6116b389612280565b600160a060020a03808b166000908152600760205260409020549194509092508716158015906116f5575088600160a060020a031687600160a060020a031614155b156111cd5750600160a060020a03861660009081526007602090815260408083205484845260099092529091206002015481146111cd5760008281526009602052604090206002018190556111db828a838b878b612302565b60008033803b8015611798576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b6117a185611a6d565b33600090815260076020908152604080832054808452600a835281842085855290925290912054919550935060ff161515600114611829576040805160e560020a62461bcd02815260206004820152601f60248201527f756d6d2e2e2e207468617473206e6f742061206e616d6520796f75206f776e00604482015290519081900360640190fd5b505060009081526009602052604090206001015550565b60055481565b336000908152600460205260408120548190819081908190151561186957600080fd5b6001543410156118c5576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b6118ce89612280565b600160a060020a038a166000908152600760205260409020549093509150869050801580159061190f57506000828152600960205260409020600201548114155b801561191b5750818114155b156119395760008281526009602052604090206002018190556111cd565b818114156111cd575060006111db828a838b878b612302565b600054600160a060020a031633146119b4576040805160e560020a62461bcd02815260206004820152601760248201527f6d73672073656e646572206973206e6f74206120646576000000000000000000604482015290519081900360640190fd5b600155565b600260205260009081526040902054600160a060020a031681565b60046020526000908152604090205481565b6009602052600090815260409020805460018201546002830154600390930154600160a060020a0390921692909184565b60009081526009602052604090206002015490565b336000908152600460205260408120541515611a4757600080fd5b611a5082612280565b5050600160a060020a031660009081526007602052604090205490565b8051600090829082808060208411801590611a885750600084115b1515611b04576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515611b1357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015611b7a57508460018503815181101515611b5257fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515611bf6576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515611c0557fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415611d4857846001815181101515611c3f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515611cbc576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515611ccb57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515611d48576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b838210156122185784517f400000000000000000000000000000000000000000000000000000000000000090869084908110611d8557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015611df9575084517f5b0000000000000000000000000000000000000000000000000000000000000090869084908110611dda57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15611e66578482815181101515611e0c57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a028583815181101515611e3d57fe5b906020010190600160f860020a031916908160001a905350821515611e6157600192505b61220d565b8482815181101515611e7457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480611f44575084517f600000000000000000000000000000000000000000000000000000000000000090869084908110611ed057fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015611f44575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110611f2557fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80611fee575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110611f7a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015611fee575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110611fcf57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b151561206a576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b848281518110151561207857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156121575784826001018151811015156120b457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515612157576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015612203575084517f30000000000000000000000000000000000000000000000000000000000000009086908490811061219057fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080612203575084517f3900000000000000000000000000000000000000000000000000000000000000908690849081106121e457fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561220d57600192505b600190910190611d4d565b600183151514612272576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b600160a060020a03811660009081526007602052604081205415156122fa575060068054600190810191829055600160a060020a03831660008181526007602090815260408083208690559482526009905292909220805473ffffffffffffffffffffffffffffffffffffffff1916909217909155610f5b565b506000610f5b565b6000838152600860205260408120541561238c576000878152600a6020908152604080832087845290915290205460ff16151560011461238c576040805160e560020a62461bcd02815260206004820152601e60248201527f736f7272792074686174206e616d657320616c72656164792074616b656e0000604482015290519081900360640190fd5b6000878152600960209081526040808320600101879055868352600882528083208a9055898352600a825280832087845290915290205460ff16151561241c576000878152600a602090815260408083208784528252808320805460ff191660019081179091558a845260098352818420600301805490910190819055600b835281842090845290915290208490555b60008054604051600160a060020a0390911691303180156108fc02929091818181858888f19350505050158015612457573d6000803e3d6000fd5b5060018215151415612500575060015b60055481116125005760008181526002602052604080822054815160e060020a6349cc635d028152600481018b9052600160a060020a038a8116602483015260448201899052606482018a9052925192909116926349cc635d9260848084019382900301818387803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b5050600190920191506124679050565b600085815260096020908152604091829020805460019091015483518715158152928301899052600160a060020a039182168385015260608301523460808301524260a0830152915186928916918a917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e644429181900360c00190a4505050505050505600756d6d2e2e2e2e2e2020796f75206861766520746f2070617920746865206e616d65206665650000000000000000000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820cc6a4661ceefc902dc797b1f3b2e784be1bca0ebeb02cfc42c06b59923a73eef0029

Deployed Bytecode

0x6080604052600436106101695763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630c6940ea811461016e57806310f01eba14610185578063180603eb146101b85780632614195f146101cd5780632660316e146101e257806327249e61146102115780632e19ebdc146102325780633ddd46981461024a5780633fda926e146102a65780634b2271761461030d5780634d0d35ff14610322578063685ffd83146103565780636c52660d146103a9578063745ea0c11461040257806381c5b2061461043c57806382e37b2c14610454578063921dec211461046c578063a448ed4b146104bf578063aa4d490b146104da578063b9291296146104fd578063b9eca0c814610556578063c0942dfd1461056b578063c320c7271461058a578063d5241279146105a2578063dbbcaa97146105ba578063de7874f3146105db578063e3c08adf14610623578063e56556a91461063b575b600080fd5b34801561017a57600080fd5b5061018361065c565b005b34801561019157600080fd5b506101a6600160a060020a03600435166108ca565b60408051918252519081900360200190f35b3480156101c457600080fd5b506101a66108dc565b3480156101d957600080fd5b506101a66108e2565b3480156101ee57600080fd5b506101fd6004356024356108e8565b604080519115158252519081900360200190f35b34801561021d57600080fd5b506101a6600160a060020a0360043516610908565b34801561023e57600080fd5b506101a660043561091a565b6040805160206004803580820135601f810184900484028501840190955284845261018394369492936024939284019190819084018382808284375094975050600160a060020a0385351695505050505060200135151561092c565b3480156102b257600080fd5b5060408051602060046024803582810135601f8101859004850286018501909652858552610183958335600160a060020a0316953695604494919390910191908190840183828082843750949750610a969650505050505050565b34801561031957600080fd5b506101a6610f3c565b34801561032e57600080fd5b5061033a600435610f42565b60408051600160a060020a039092168252519081900360200190f35b6040805160206004803580820135601f8101849004840285018401909552848452610183943694929360249392840191908190840183828082843750949750508435955050505050602001351515610f60565b3480156103b557600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101fd94369492936024939284019190819084018382808284375094975061109e9650505050505050565b610421600160a060020a036004351660243560443560643515156110d6565b60408051921515835260208301919091528051918290030190f35b34801561044857600080fd5b506101836004356111ea565b34801561046057600080fd5b506101a66004356114b7565b6040805160206004803580820135601f81018490048402850184019095528484526101839436949293602493928401919081908401838280828437509497505084359550505050506020013515156114cc565b3480156104cb57600080fd5b506101a660043560243561160e565b610421600160a060020a036004358116906024359060443516606435151561162b565b34801561050957600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261018394369492936024939284019190819084018382808284375094975061174e9650505050505050565b34801561056257600080fd5b506101a6611840565b610421600160a060020a03600435166024356044356064351515611846565b34801561059657600080fd5b50610183600435611952565b3480156105ae57600080fd5b5061033a6004356119b9565b3480156105c657600080fd5b506101a6600160a060020a03600435166119d4565b3480156105e757600080fd5b506105f36004356119e6565b60408051600160a060020a0390951685526020850193909352838301919091526060830152519081900360800190f35b34801561062f57600080fd5b506101a6600435611a17565b34801561064757600080fd5b506101a6600160a060020a0360043516611a2c565b600080808080808033803b80156106ab576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b33600081815260076020526040902054909950975087151561073d576040805160e560020a62461bcd02815260206004820152602e60248201527f6865792074686572652062756464792c20796f7520646f6e74206576656e206860448201527f61766520616e206163636f756e74000000000000000000000000000000000000606482015290519081900360840190fd5b6000888152600960205260409020600281015460038201546001928301549199509750955093505b60055484116108bf5760008481526002602052604080822054815160e060020a6349cc635d028152600481018c9052600160a060020a038d81166024830152604482018a9052606482018c9052925192909116926349cc635d9260848084019382900301818387803b1580156107da57600080fd5b505af11580156107ee573d6000803e3d6000fd5b5050505060018611156108b457600192505b8583116108b4576000848152600260209081526040808320548b8452600b83528184208785529092528083205481517f8f7140ea000000000000000000000000000000000000000000000000000000008152600481018d905260248101919091529051600160a060020a0390921692638f7140ea9260448084019382900301818387803b15801561089057600080fd5b505af11580156108a4573d6000803e3d6000fd5b5050600190940193506108009050565b600190930192610765565b505050505050505050565b60076020526000908152604090205481565b60015481565b60015490565b600a60209081526000928352604080842090915290825290205460ff1681565b60036020526000908152604090205481565b60086020526000908152604090205481565b60008080808033803b8015610979576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b6001543410156109d5576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b6109de8a611a6d565b96503395506109ec86612280565b600160a060020a03808816600090815260076020526040902054919650909450891615801590610a2e575085600160a060020a031689600160a060020a031614155b15610a7c57600160a060020a0389166000908152600760209081526040808320548784526009909252909120600201549093508314610a7c5760008481526009602052604090206002018390555b610a8a8487858a898d612302565b50505050505050505050565b60008054600160a060020a03163314610af9576040805160e560020a62461bcd02815260206004820152601760248201527f6d73672073656e646572206973206e6f74206120646576000000000000000000604482015290519081900360640190fd5b600160a060020a03831660009081526004602052604090205415610b8d576040805160e560020a62461bcd02815260206004820152602860248201527f646572702c20746861742067616d657320616c7265616479206265656e20726560448201527f6769737465726564000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600580546001019055610b9f82611a6d565b60058054600160a060020a03808716600081815260046020818152604080842096909655600381528583208890558654835260028152858320805473ffffffffffffffffffffffffffffffffffffffff19169094179093559454815283812054600180835260099093527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36547f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3754865160e060020a6349cc635d0281529788019490945284166024870152604486019290925260648501819052925194955016926349cc635d92608480820193929182900301818387803b158015610ca357600080fd5b505af1158015610cb7573d6000803e3d6000fd5b505060055460009081526002602081815260408084205483855260099092527f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c3547f6cde3cea4b3a3fb2488b2808bae7556f4a405e50f65e1794383bc026131b13c454825160e060020a6349cc635d0281526004810195909552600160a060020a0391821660248601526044850152606484018590529051911694506349cc635d93506084808301939282900301818387803b158015610d7657600080fd5b505af1158015610d8a573d6000803e3d6000fd5b5050600554600090815260026020908152604080832054600380855260099093527fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e7547fc575c31fea594a6eb97c8e9d3f9caee4c16218c6ef37e923234c0fe9014a61e854835160e060020a6349cc635d0281526004810195909552600160a060020a0391821660248601526044850152606484018590529151911694506349cc635d93506084808301939282900301818387803b158015610e4b57600080fd5b505af1158015610e5f573d6000803e3d6000fd5b5050600554600090815260026020908152604080832054600480855260099093527f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cb547f8dc18c4ccfd75f5c815b63770fa542fd953e8fef7e0e44bbdd4913470ce7e9cc54835160e060020a6349cc635d02815280860195909552600160a060020a0391821660248601526044850152606484018590529151911694506349cc635d93506084808301939282900301818387803b158015610f1f57600080fd5b505af1158015610f33573d6000803e3d6000fd5b50505050505050565b60065481565b600081815260096020526040902054600160a060020a03165b919050565b60008080808033803b8015610fad576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b600154341015611009576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b6110128a611a6d565b965033955061102086612280565b600160a060020a0387166000908152600760205260409020549095509350881580159061104d5750888714155b15610a7c576000898152600860209081526040808320548784526009909252909120600201549093508314610a7c576000848152600960205260409020600201839055610a8a8487858a898d612302565b6000806110aa83611a6d565b60008181526008602052604090205490915015156110cb57600191506110d0565b600091505b50919050565b33600090815260046020526040812054819081908190819015156110f957600080fd5b600154341015611155576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b61115e89612280565b600160a060020a038a166000908152600760205260409020549093509150861580159061118b5750868814155b156111cd575060008681526008602090815260408083205484845260099092529091206002015481146111cd5760008281526009602052604090206002018190555b6111db828a838b878b612302565b91989197509095505050505050565b600080808033803b8015611236576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b6005548711156112b6576040805160e560020a62461bcd02815260206004820152602960248201527f73696c6c7920706c617965722c20746861742067616d6520646f65736e27742060448201527f6578697374207965740000000000000000000000000000000000000000000000606482015290519081900360840190fd5b336000818152600760205260409020549096509450841515611348576040805160e560020a62461bcd02815260206004820152602e60248201527f6865792074686572652062756464792c20796f7520646f6e74206576656e206860448201527f61766520616e206163636f756e74000000000000000000000000000000000000606482015290519081900360840190fd5b600085815260096020818152604080842060038101548c86526002808552838720548c88529590945260018201549390910154825160e060020a6349cc635d028152600481018c9052600160a060020a038d8116602483015260448201959095526064810191909152915190985091909216926349cc635d926084808201939182900301818387803b1580156113dd57600080fd5b505af11580156113f1573d6000803e3d6000fd5b505050506001841115610f3357600192505b838311610f3357600087815260026020908152604080832054888452600b83528184208785529092528083205481517f8f7140ea000000000000000000000000000000000000000000000000000000008152600481018a905260248101919091529051600160a060020a0390921692638f7140ea9260448084019382900301818387803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b5050600190940193506114039050565b60009081526009602052604090206001015490565b600080808033803b8015611518576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b600154341015611574576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b61157d89611a6d565b955033945061158b85612280565b600160a060020a038616600090815260076020526040902054909450925087158015906115c957506000838152600960205260409020600201548814155b80156115d55750828814155b156115f3576000838152600960205260409020600201889055611600565b8288141561160057600097505b6108bf83868a89888c612302565b600b60209081526000928352604080842090915290825290205481565b336000908152600460205260408120548190819081908190151561164e57600080fd5b6001543410156116aa576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b6116b389612280565b600160a060020a03808b166000908152600760205260409020549194509092508716158015906116f5575088600160a060020a031687600160a060020a031614155b156111cd5750600160a060020a03861660009081526007602090815260408083205484845260099092529091206002015481146111cd5760008281526009602052604090206002018190556111db828a838b878b612302565b60008033803b8015611798576040805160e560020a62461bcd02815260206004820152601160248201526000805160206125c4833981519152604482015290519081900360640190fd5b6117a185611a6d565b33600090815260076020908152604080832054808452600a835281842085855290925290912054919550935060ff161515600114611829576040805160e560020a62461bcd02815260206004820152601f60248201527f756d6d2e2e2e207468617473206e6f742061206e616d6520796f75206f776e00604482015290519081900360640190fd5b505060009081526009602052604090206001015550565b60055481565b336000908152600460205260408120548190819081908190151561186957600080fd5b6001543410156118c5576040805160e560020a62461bcd028152602060048201526026602482015260008051602061258483398151915260448201526000805160206125a4833981519152606482015290519081900360840190fd5b6118ce89612280565b600160a060020a038a166000908152600760205260409020549093509150869050801580159061190f57506000828152600960205260409020600201548114155b801561191b5750818114155b156119395760008281526009602052604090206002018190556111cd565b818114156111cd575060006111db828a838b878b612302565b600054600160a060020a031633146119b4576040805160e560020a62461bcd02815260206004820152601760248201527f6d73672073656e646572206973206e6f74206120646576000000000000000000604482015290519081900360640190fd5b600155565b600260205260009081526040902054600160a060020a031681565b60046020526000908152604090205481565b6009602052600090815260409020805460018201546002830154600390930154600160a060020a0390921692909184565b60009081526009602052604090206002015490565b336000908152600460205260408120541515611a4757600080fd5b611a5082612280565b5050600160a060020a031660009081526007602052604090205490565b8051600090829082808060208411801590611a885750600084115b1515611b04576040805160e560020a62461bcd02815260206004820152602a60248201527f737472696e67206d757374206265206265747765656e203120616e642033322060448201527f6368617261637465727300000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515611b1357fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214158015611b7a57508460018503815181101515611b5257fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214155b1515611bf6576040805160e560020a62461bcd02815260206004820152602560248201527f737472696e672063616e6e6f74207374617274206f7220656e6420776974682060448201527f7370616365000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b846000815181101515611c0557fe5b90602001015160f860020a900460f860020a02600160f860020a031916603060f860020a021415611d4857846001815181101515611c3f57fe5b90602001015160f860020a900460f860020a02600160f860020a031916607860f860020a0214151515611cbc576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030780000000000604482015290519081900360640190fd5b846001815181101515611ccb57fe5b90602001015160f860020a900460f860020a02600160f860020a031916605860f860020a0214151515611d48576040805160e560020a62461bcd02815260206004820152601b60248201527f737472696e672063616e6e6f7420737461727420776974682030580000000000604482015290519081900360640190fd5b600091505b838210156122185784517f400000000000000000000000000000000000000000000000000000000000000090869084908110611d8557fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015611df9575084517f5b0000000000000000000000000000000000000000000000000000000000000090869084908110611dda57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b15611e66578482815181101515611e0c57fe5b90602001015160f860020a900460f860020a0260f860020a900460200160f860020a028583815181101515611e3d57fe5b906020010190600160f860020a031916908160001a905350821515611e6157600192505b61220d565b8482815181101515611e7457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a021480611f44575084517f600000000000000000000000000000000000000000000000000000000000000090869084908110611ed057fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015611f44575084517f7b0000000000000000000000000000000000000000000000000000000000000090869084908110611f2557fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b80611fee575084517f2f0000000000000000000000000000000000000000000000000000000000000090869084908110611f7a57fe5b90602001015160f860020a900460f860020a02600160f860020a031916118015611fee575084517f3a0000000000000000000000000000000000000000000000000000000000000090869084908110611fcf57fe5b90602001015160f860020a900460f860020a02600160f860020a031916105b151561206a576040805160e560020a62461bcd02815260206004820152602260248201527f737472696e6720636f6e7461696e7320696e76616c696420636861726163746560448201527f7273000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b848281518110151561207857fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214156121575784826001018151811015156120b457fe5b90602001015160f860020a900460f860020a02600160f860020a031916602060f860020a0214151515612157576040805160e560020a62461bcd02815260206004820152602860248201527f737472696e672063616e6e6f7420636f6e7461696e20636f6e7365637574697660448201527f6520737061636573000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b82158015612203575084517f30000000000000000000000000000000000000000000000000000000000000009086908490811061219057fe5b90602001015160f860020a900460f860020a02600160f860020a0319161080612203575084517f3900000000000000000000000000000000000000000000000000000000000000908690849081106121e457fe5b90602001015160f860020a900460f860020a02600160f860020a031916115b1561220d57600192505b600190910190611d4d565b600183151514612272576040805160e560020a62461bcd02815260206004820152601d60248201527f737472696e672063616e6e6f74206265206f6e6c79206e756d62657273000000604482015290519081900360640190fd5b505050506020015192915050565b600160a060020a03811660009081526007602052604081205415156122fa575060068054600190810191829055600160a060020a03831660008181526007602090815260408083208690559482526009905292909220805473ffffffffffffffffffffffffffffffffffffffff1916909217909155610f5b565b506000610f5b565b6000838152600860205260408120541561238c576000878152600a6020908152604080832087845290915290205460ff16151560011461238c576040805160e560020a62461bcd02815260206004820152601e60248201527f736f7272792074686174206e616d657320616c72656164792074616b656e0000604482015290519081900360640190fd5b6000878152600960209081526040808320600101879055868352600882528083208a9055898352600a825280832087845290915290205460ff16151561241c576000878152600a602090815260408083208784528252808320805460ff191660019081179091558a845260098352818420600301805490910190819055600b835281842090845290915290208490555b60008054604051600160a060020a0390911691303180156108fc02929091818181858888f19350505050158015612457573d6000803e3d6000fd5b5060018215151415612500575060015b60055481116125005760008181526002602052604080822054815160e060020a6349cc635d028152600481018b9052600160a060020a038a8116602483015260448201899052606482018a9052925192909116926349cc635d9260848084019382900301818387803b1580156124dc57600080fd5b505af11580156124f0573d6000803e3d6000fd5b5050600190920191506124679050565b600085815260096020908152604091829020805460019091015483518715158152928301899052600160a060020a039182168385015260608301523460808301524260a0830152915186928916918a917fdd6176433ff5026bbce96b068584b7bbe3514227e72df9c630b749ae87e644429181900360c00190a4505050505050505600756d6d2e2e2e2e2e2020796f75206861766520746f2070617920746865206e616d65206665650000000000000000000000000000000000000000000000000000736f7272792068756d616e73206f6e6c79000000000000000000000000000000a165627a7a72305820cc6a4661ceefc902dc797b1f3b2e784be1bca0ebeb02cfc42c06b59923a73eef0029

Swarm Source

bzzr://cc6a4661ceefc902dc797b1f3b2e784be1bca0ebeb02cfc42c06b59923a73eef

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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