ETH Price: $3,104.39 (+1.04%)
Gas: 5 Gwei

Contract

0x4F7eBf67B662beE6A764A2b79a3291F93D4Be2Df
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
0x60806040136952142021-11-27 9:11:07956 days ago1638004267IN
 Create: TokenSVG
0 ETH0.2058341385

Advanced mode:
Parent Transaction Hash Block From To Value
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenSVG

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 4 : TokenSVG.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "base64-sol/base64.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "./interfaces/ITokenSVG.sol";

contract TokenSVG is ITokenSVG {
  string public constant DESC =
    "For the PEOPLE of ConstitutionDAO who made history.Imagine there's no heaven,It's easy if you try,No hell below us,Above us,only sky.Imagine all the people,Living for today.Imagine there's no countries,It isn't hard to do,Nothing to kill or die for,And no religion too.Imagine All the people,Living life in peace...You may say I'm a dreamer,But I'm not the only one,I hope someday you'll join us.And the world will be as one,Imagine no possessions,I wonder if you can,No need for greed or hunger,A brotherhood of man.Imagine all the people,Sharing all the world...You may say I'm a dreamer,But I'm not the only one,I hope someday you'll join us,And the world will live as one.";

  function getCoordinatesStrings(int128 x, int128 y)
    public
    pure
    override
    returns (string memory sx, string memory sy)
  {
    string memory xPrefix = "";
    if (x > 0) {
      xPrefix = "E";
    }
    if (x < 0) {
      xPrefix = "W";
    }

    string memory xStr;
    if (x >= 0) {
      xStr = Strings.toString(uint256(int256(x)));
    } else {
      unchecked {
        xStr = Strings.toString(uint256(-int256(x)));
      }
    }

    string memory yPrefix = "";
    if (y > 0) {
      yPrefix = "N";
    }
    if (y < 0) {
      yPrefix = "S";
    }

    string memory yStr;
    if (y >= 0) {
      yStr = Strings.toString(uint256(int256(y)));
    } else {
      unchecked {
        yStr = Strings.toString(uint256(-int256(y)));
      }
    }

    sx = string(abi.encodePacked(xPrefix, xStr));
    sy = string(abi.encodePacked(yPrefix, yStr));
  }

  function tokenMeta(Meta memory meta)
    external
    pure
    override
    returns (string memory result)
  {
    (string memory sx, string memory sy) = getCoordinatesStrings(
      meta.x,
      meta.y
    );

    string[14] memory parts;
    parts[
      0
    ] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 360 360"><rect width="100%" height="100%" fill="#353535" /><foreignObject width="360" height="360" x="0" y="0"><body xmlns="http://www.w3.org/1999/xhtml"><style>.a{font-family:sans-serif;margin:10px;color:#fdf9f3;text-align:center;}.g{font-size:16px;font-weight:500;height:25px;margin-top:0px;}.b{font-size:12px;line-height:35px;margin-top:20px;}.c{margin:5px 0 auto auto;font-weight:800;font-size:0;height:45px;line-height:40px;}.c > span {vertical-align:middle;}.d{font-size:2rem;}.e{background-repeat: no-repeat;background-image: url("data:image/png;base64,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");background-size:100% 100%;display:inline-block;font-size:1.2rem;line-height:40px;}.f{padding:0px 10px;display:inline-block;color:#a4752a;}.h{font-size:12px;margin:50px 0 0 50px;text-align:left;-webkit-transform-origin-x:0;-webkit-transform :scale(0.8,0.8);}ul{list-style-type:disc;margin:0 0 0 -20px;}.i{margin:5px;justify-content: center;display:grid;grid-template-columns:repeat(3,max-content);grid-template-row:repeat(3,auto);grid-column-gap:5px;justify-items:start;}</style><div class="a"><div class="b">PEOPLELAND</div><div class="c"><span class="d">(</span><span class="e"><span class="f">';

    parts[1] = sx;
    parts[
      2
    ] = '</span></span><span class="d">,</span><span class="e"><span class="f">';
    parts[3] = sy;
    parts[4] = '</span></span><span class="d">)</span></div><div class="g">';
    parts[5] = _getSlogan(meta.slogan);
    parts[6] = '</div><div class="h"><ul>';
    parts[7] = _getInviteString(meta.isPeople, meta.isBuidler, meta.invite);
    parts[8] = _getMintAndGiveToStr(meta.mintedAndInvitedList);
    parts[9] = '<li>Neighbors:</li></ul><div class="i">';
    parts[10] = _getNeighborsStr(meta.neighbors);
    parts[11] = "</div><ul><li>";
    parts[12] = _getEndTip(meta.mintedAndInvitedList.length);
    parts[13] = "</li></ul></div></div></body></foreignObject></svg>";

    string memory svgStr = string(
      abi.encodePacked(
        parts[0],
        parts[1],
        parts[2],
        parts[3],
        parts[4],
        parts[5],
        parts[6],
        parts[7],
        parts[8]
      )
    );

    svgStr = string(
      abi.encodePacked(
        svgStr,
        parts[9],
        parts[10],
        parts[11],
        parts[12],
        parts[13]
      )
    );

    string memory json = Base64.encode(
      bytes(
        string(
          abi.encodePacked(
            '{"name": "Land #',
            Strings.toString(meta.tokenId),
            '", "description": "',
            DESC,
            '", "image": "data:image/svg+xml;base64,',
            Base64.encode(bytes(svgStr)),
            '"}'
          )
        )
      )
    );
    result = string(abi.encodePacked("data:application/json;base64,", json));
  }

  function _getSlogan(string memory _slogan)
    private
    pure
    returns (string memory)
  {
    return
      bytes(_slogan).length > 0
        ? _slogan
        : "<br/>For the PEOPLE of<br/>ConstitutionDAO who made history";
  }

  function _getInviteString(
    bool isPeople,
    bool isBuilder,
    TokenInfo memory info
  ) private pure returns (string memory result) {
    if (isPeople) {
      result = "I'm this PEOPLE ^_^";
    } else if (isBuilder) {
      result = "I'm the BUILDER ^_^";
    } else {
      result = string(
        abi.encodePacked(
          "Thanks to ",
          _getTokenIdAndCoordinatesString(info.tokenId, info.x, info.y),
          " for the invite"
        )
      );
    }

    result = string(abi.encodePacked("<li>", result, "</li>"));
  }

  function _getMintAndGiveToStr(TokenInfo[] memory infos)
    private
    pure
    returns (string memory _str)
  {
    string memory _mintStr = "";
    string memory _giveToStr = "";
    if (infos.length != 0) {
      for (uint8 i = 0; i < infos.length; i++) {
        TokenInfo memory info = infos[i];
        if (info.hasTokenId) {
          _giveToStr = string(
            abi.encodePacked(
              _giveToStr,
              " ",
              _getTokenIdAndCoordinatesString(info.tokenId, info.x, info.y)
            )
          );
        } else {
          _mintStr = string(
            abi.encodePacked(
              _mintStr,
              " ",
              _getCoordinatesString(info.x, info.y)
            )
          );
        }
      }
      _str = string(
        abi.encodePacked(
          bytes(_mintStr).length == 0
            ? ""
            : string(abi.encodePacked("<li>Minted", _mintStr, "</li>")),
          bytes(_giveToStr).length == 0
            ? ""
            : string(abi.encodePacked("<li>Invited", _giveToStr, "</li>"))
        )
      );
    }
  }

  function _getNeighborsStr(string[] memory tokenIds)
    private
    pure
    returns (string memory _str)
  {
    string[8] memory _arr;
    for (uint8 i = 0; i < 8; i++) {
      _arr[i] = string(abi.encodePacked("<div>#", tokenIds[i], "</div>"));
    }
    _str = string(
      abi.encodePacked(
        _arr[0],
        _arr[1],
        _arr[2],
        _arr[3],
        "<div>Me</div>",
        _arr[4],
        _arr[5],
        _arr[6],
        _arr[7]
      )
    );
  }

  function _getEndTip(uint256 count) private pure returns (string memory) {
    if (count >= 2) {
      return "Imagine and build!";
    }
    return "I'm carefully selecting our neighbors!";
  }

  function _getTokenIdAndCoordinatesString(
    uint256 tokenId,
    int128 x,
    int128 y
  ) private pure returns (string memory _str) {
    _str = string(
      abi.encodePacked(
        "#",
        Strings.toString(tokenId),
        _getCoordinatesString(x, y)
      )
    );
  }

  function _getCoordinatesString(int128 x, int128 y)
    private
    pure
    returns (string memory _str)
  {
    (string memory sx, string memory sy) = getCoordinatesStrings(x, y);
    _str = string(abi.encodePacked("(", sx, ",", sy, ")"));
  }
}

File 2 of 4 : base64.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.0;

/// @title Base64
/// @author Brecht Devos - <[email protected]>
/// @notice Provides functions for encoding/decoding base64
library Base64 {
    string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    bytes  internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000"
                                            hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000"
                                            hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000"
                                            hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000";

    function encode(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return '';

        // load the table into memory
        string memory table = TABLE_ENCODE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for {} lt(dataPtr, endPtr) {}
            {
                // read 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // write 4 characters
                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(        input,  0x3F))))
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }
            case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }
        }

        return result;
    }

    function decode(string memory _data) internal pure returns (bytes memory) {
        bytes memory data = bytes(_data);

        if (data.length == 0) return new bytes(0);
        require(data.length % 4 == 0, "invalid base64 decoder input");

        // load the table into memory
        bytes memory table = TABLE_DECODE;

        // every 4 characters represent 3 bytes
        uint256 decodedLen = (data.length / 4) * 3;

        // add some extra buffer at the end required for the writing
        bytes memory result = new bytes(decodedLen + 32);

        assembly {
            // padding with '='
            let lastBytes := mload(add(data, mload(data)))
            if eq(and(lastBytes, 0xFF), 0x3d) {
                decodedLen := sub(decodedLen, 1)
                if eq(and(lastBytes, 0xFFFF), 0x3d3d) {
                    decodedLen := sub(decodedLen, 1)
                }
            }

            // set the actual output length
            mstore(result, decodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 4 characters at a time
            for {} lt(dataPtr, endPtr) {}
            {
               // read 4 characters
               dataPtr := add(dataPtr, 4)
               let input := mload(dataPtr)

               // write 3 bytes
               let output := add(
                   add(
                       shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)),
                       shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))),
                   add(
                       shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)),
                               and(mload(add(tablePtr, and(        input , 0xFF))), 0xFF)
                    )
                )
                mstore(resultPtr, shl(232, output))
                resultPtr := add(resultPtr, 3)
            }
        }

        return result;
    }
}

File 3 of 4 : Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 4 of 4 : ITokenSVG.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface ITokenSVG {
  struct TokenInfo {
    int128 x;
    int128 y;
    uint256 tokenId;
    bool hasTokenId;
  }

  struct Meta {
    int128 x;
    int128 y;
    uint256 tokenId;
    string slogan;
    bool isPeople;
    bool isBuidler;
    TokenInfo invite;
    TokenInfo[] mintedAndInvitedList;
    string[] neighbors;
  }

  function getCoordinatesStrings(int128 x, int128 y)
    external
    pure
    returns (string memory sx, string memory sy);

  function tokenMeta(Meta memory meta)
    external
    pure
    returns (string memory result);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"name":"DESC","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int128","name":"x","type":"int128"},{"internalType":"int128","name":"y","type":"int128"}],"name":"getCoordinatesStrings","outputs":[{"internalType":"string","name":"sx","type":"string"},{"internalType":"string","name":"sy","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"int128","name":"x","type":"int128"},{"internalType":"int128","name":"y","type":"int128"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"slogan","type":"string"},{"internalType":"bool","name":"isPeople","type":"bool"},{"internalType":"bool","name":"isBuidler","type":"bool"},{"components":[{"internalType":"int128","name":"x","type":"int128"},{"internalType":"int128","name":"y","type":"int128"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"hasTokenId","type":"bool"}],"internalType":"struct ITokenSVG.TokenInfo","name":"invite","type":"tuple"},{"components":[{"internalType":"int128","name":"x","type":"int128"},{"internalType":"int128","name":"y","type":"int128"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bool","name":"hasTokenId","type":"bool"}],"internalType":"struct ITokenSVG.TokenInfo[]","name":"mintedAndInvitedList","type":"tuple[]"},{"internalType":"string[]","name":"neighbors","type":"string[]"}],"internalType":"struct ITokenSVG.Meta","name":"meta","type":"tuple"}],"name":"tokenMeta","outputs":[{"internalType":"string","name":"result","type":"string"}],"stateMutability":"pure","type":"function"}]

608060405234801561001057600080fd5b50612ad2806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80638fe2278414610046578063c76566e714610070578063e1d7652014610085575b600080fd5b610059610054366004610e15565b610098565b6040516100679291906114f1565b60405180910390f35b61007861020d565b60405161006791906114d7565b610078610093366004610e47565b61022c565b6060806000604051806020016040528060008152509050600085600f0b13156100d557506040805180820190915260018152604560f81b60208201525b600085600f0b12156100fb57506040805180820190915260018152605760f81b60208201525b6060600086600f0b1261011b5761011486600f0b6104ec565b905061012d565b61012a86600f0b6000036104ec565b90505b60408051602081019091526000808252600f87900b131561016257506040805180820190915260018152602760f91b60208201525b600086600f0b121561018857506040805180820190915260018152605360f81b60208201525b6060600087600f0b126101a8576101a187600f0b6104ec565b90506101ba565b6101b787600f0b6000036104ec565b90505b83836040516020016101cd929190610f86565b604051602081830303815290604052955081816040516020016101f1929190610f86565b6040516020818303038152906040529450505050509250929050565b604051806102e001604052806102a481526020016127c66102a4913981565b606060008061024384600001518560200151610098565b9150915061024f610bce565b60405180610fe00160405280610fbb815260200161180b610fbb9139815260208082018490526040805160808101909152604680825290916116e89083013960408083019190915260608083018490528151908101909152603b8082526117a96020830139608082015260608501516102c79061060e565b60a082015260408051808201909152601981527f3c2f6469763e3c64697620636c6173733d2268223e3c756c3e000000000000006020820152816006602002018190525061032285608001518660a001518760c0015161063f565b816007602002015260e08501516103389061070f565b610100820152604080516060810190915260278082526117e4602083013961012082015261010085015161036b906108aa565b61014082015260408051808201909152600e81526d1e17b234bb1f1e3ab61f1e36349f60911b602082015261016082015260e0850151516103ab9061099e565b61018082015260408051606081019091526033808252612a6a60208301396101a082015280516020808301516040808501516060860151608087015160a088015160c089015160e08a01516101008b0151965160009a61040f9a9099989101611034565b60408051808303601f19018152908290526101208401516101408501516101608601516101808701516101a088015194965061045095879590602001610fb5565b604051602081830303815290604052905060006104be61047388604001516104ec565b604051806102e001604052806102a481526020016127c66102a49139610498856109f5565b6040516020016104aa9392919061129a565b6040516020818303038152906040526109f5565b9050806040516020016104d19190611413565b60405160208183030381529060405295505050505050919050565b6060816105105750506040805180820190915260018152600360fc1b602082015290565b8160005b811561053a578061052481611630565b91506105339050600a836115b6565b9150610514565b60008167ffffffffffffffff81111561056357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561058d576020820181803683370190505b5090505b8415610606576105a26001836115e9565b91506105af600a8661166b565b6105ba90603061159e565b60f81b8183815181106105dd57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506105ff600a866115b6565b9450610591565b949350505050565b60606000825111610637576040518060600160405280603b815260200161176e603b9139610639565b815b92915050565b6060831561067757506040805180820190915260138152722493b6903a3434b9902822a7a82622902f2faf60691b60208201526106e6565b82156106ad57506040805180820190915260138152722493b6903a343290212aa4a62222a9102f2faf60691b60208201526106e6565b6106c4826040015183600001518460200151610b69565b6040516020016106d4919061124f565b60405160208183030381529060405290505b806040516020016106f79190611396565b60405160208183030381529060405290509392505050565b604080516020808201835260008083528351918201909352918252825160609290156108a35760005b84518160ff161015610805576000858260ff168151811061076957634e487b7160e01b600052603260045260246000fd5b602002602001015190508060600151156107bc5782610795826040015183600001518460200151610b69565b6040516020016107a69291906111bc565b60405160208183030381529060405292506107f2565b836107cf82600001518360200151610b8f565b6040516020016107e09291906111bc565b60405160208183030381529060405293505b50806107fd8161164b565b915050610738565b50815115610832578160405160200161081e9190611458565b604051602081830303815290604052610843565b604051806020016040528060008152505b81511561086f578160405160200161085b91906113d1565b604051602081830303815290604052610880565b604051806020016040528060008152505b604051602001610891929190610f86565b60405160208183030381529060405292505b5050919050565b60606108b4610bf6565b60005b60088160ff16101561094757838160ff16815181106108e657634e487b7160e01b600052603260045260246000fd5b60200260200101516040516020016108fe9190611499565b604051602081830303815290604052828260ff166008811061093057634e487b7160e01b600052603260045260246000fd5b60200201528061093f8161164b565b9150506108b7565b5080516020808301516040808501516060860151608087015160a088015160c089015160e08a0151955161098799989596949593949293919291016110f5565b604051602081830303815290604052915050919050565b6060600282106109d6575050604080518082019091526012815271496d6167696e6520616e64206275696c642160701b602082015290565b6040518060600160405280602681526020016116c26026913992915050565b6060815160001415610a1557505060408051602081019091526000815290565b600060405180606001604052806040815260200161172e6040913990506000600384516002610a44919061159e565b610a4e91906115b6565b610a599060046115ca565b90506000610a6882602061159e565b67ffffffffffffffff811115610a8e57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610ab8576020820181803683370190505b509050818152600183018586518101602084015b81831015610b24576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825350600101610acc565b600389510660018114610b3e5760028114610b4f57610b5b565b613d3d60f01b600119830152610b5b565b603d60f81b6000198301525b509398975050505050505050565b6060610b74846104ec565b610b7e8484610b8f565b6040516020016106f7929190611363565b6060600080610b9e8585610098565b915091508181604051602001610bb59291906111f8565b6040516020818303038152906040529250505092915050565b604051806101c00160405280600e905b6060815260200190600190039081610bde5790505090565b60408051610100810190915260608152600760208201610bde565b600082601f830112610c21578081fd5b81356020610c36610c318361157a565b611549565b80838252828201915082860187848660051b8901011115610c55578586fd5b855b85811015610c9657813567ffffffffffffffff811115610c75578788fd5b610c838a87838c0101610d32565b8552509284019290840190600101610c57565b5090979650505050505050565b600082601f830112610cb3578081fd5b81356020610cc3610c318361157a565b80838252828201915082860187848660071b8901011115610ce2578586fd5b855b85811015610c9657610cf68983610d9d565b84529284019260809190910190600101610ce4565b80358015158114610d1b57600080fd5b919050565b8035600f81900b8114610d1b57600080fd5b600082601f830112610d42578081fd5b813567ffffffffffffffff811115610d5c57610d5c6116ab565b610d6f601f8201601f1916602001611549565b818152846020838601011115610d83578283fd5b816020850160208301379081016020019190915292915050565b600060808284031215610dae578081fd5b6040516080810181811067ffffffffffffffff82111715610dd157610dd16116ab565b604052905080610de083610d20565b8152610dee60208401610d20565b602082015260408301356040820152610e0960608401610d0b565b60608201525092915050565b60008060408385031215610e27578182fd5b610e3083610d20565b9150610e3e60208401610d20565b90509250929050565b600060208284031215610e58578081fd5b813567ffffffffffffffff80821115610e6f578283fd5b908301906101808286031215610e83578283fd5b610e8b61151f565b610e9483610d20565b8152610ea260208401610d20565b602082015260408301356040820152606083013582811115610ec2578485fd5b610ece87828601610d32565b606083015250610ee060808401610d0b565b6080820152610ef160a08401610d0b565b60a0820152610f038660c08501610d9d565b60c082015261014083013582811115610f1a578485fd5b610f2687828601610ca3565b60e08301525061016083013582811115610f3e578485fd5b610f4a87828601610c11565b6101008301525095945050505050565b60008151808452610f72816020860160208601611600565b601f01601f19169290920160200192915050565b60008351610f98818460208801611600565b835190830190610fac818360208801611600565b01949350505050565b600087516020610fc88285838d01611600565b885191840191610fdb8184848d01611600565b8851920191610fed8184848c01611600565b8751920191610fff8184848b01611600565b86519201916110118184848a01611600565b85519201916110238184848901611600565b919091019998505050505050505050565b60008a51611046818460208f01611600565b8a516110588183860160208f01611600565b8a51918401019061106d818360208e01611600565b895161107f8183850160208e01611600565b8951929091010190611095818360208c01611600565b87516110a78183850160208c01611600565b87519290910101906110bd818360208a01611600565b85516110cf8183850160208a01611600565b85519290910101906110e5818360208801611600565b019b9a5050505050505050505050565b6000895160206111088285838f01611600565b8a519184019161111b8184848f01611600565b8a5192019161112d8184848e01611600565b895192019161113f8184848d01611600565b6c1e3234bb1f26b29e17b234bb1f60991b9201918252875161116781600d8501848c01611600565b875192019161117c81600d8501848b01611600565b865192019161119181600d8501848a01611600565b85519201916111a681600d8501848901611600565b91909101600d019b9a5050505050505050505050565b600083516111ce818460208801611600565b600160fd1b90830190815283516111ec816001840160208801611600565b01600101949350505050565b600560fb1b815260008351611214816001850160208801611600565b600b60fa1b6001918401918201528351611235816002840160208801611600565b602960f81b60029290910191820152600301949350505050565b6902a3430b735b9903a37960b51b81526000825161127481600a850160208701611600565b6e20666f722074686520696e7669746560881b600a939091019283015250601901919050565b6f7b226e616d65223a20224c616e64202360801b815283516000906112c6816010850160208901611600565b72111610113232b9b1b934b83a34b7b7111d101160691b60109184019182015284516112f9816023840160208901611600565b7f222c2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b602392909101918201526618985cd94d8d0b60ca1b6043820152835161134781604a840160208801611600565b61227d60f01b604a9290910191820152604c0195945050505050565b602360f81b81526000835161137f816001850160208801611600565b8351908301906111ec816001840160208801611600565b631e36349f60e11b8152600082516113b5816004850160208701611600565b641e17b6349f60d91b6004939091019283015250600901919050565b6a0f1b1a4f925b9d9a5d195960aa1b8152600082516113f781600b850160208701611600565b641e17b6349f60d91b600b939091019283015250601001919050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161144b81601d850160208701611600565b91909101601d0192915050565b690f1b1a4f935a5b9d195960b21b81526000825161147d81600a850160208701611600565b641e17b6349f60d91b600a939091019283015250600f01919050565b653c6469763e2360d01b8152600082516114ba816006850160208701611600565b651e17b234bb1f60d11b6006939091019283015250600c01919050565b6020815260006114ea6020830184610f5a565b9392505050565b6040815260006115046040830185610f5a565b82810360208401526115168185610f5a565b95945050505050565b604051610120810167ffffffffffffffff81118282101715611543576115436116ab565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611572576115726116ab565b604052919050565b600067ffffffffffffffff821115611594576115946116ab565b5060051b60200190565b600082198211156115b1576115b161167f565b500190565b6000826115c5576115c5611695565b500490565b60008160001904831182151516156115e4576115e461167f565b500290565b6000828210156115fb576115fb61167f565b500390565b60005b8381101561161b578181015183820152602001611603565b8381111561162a576000848401525b50505050565b60006000198214156116445761164461167f565b5060010190565b600060ff821660ff8114156116625761166261167f565b60010192915050565b60008261167a5761167a611695565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe49276d206361726566756c6c792073656c656374696e67206f7572206e65696768626f7273213c2f7370616e3e3c2f7370616e3e3c7370616e20636c6173733d2264223e2c3c2f7370616e3e3c7370616e20636c6173733d2265223e3c7370616e20636c6173733d2266223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c62722f3e466f72207468652050454f504c45206f663c62722f3e436f6e737469747574696f6e44414f2077686f206d61646520686973746f72793c2f7370616e3e3c2f7370616e3e3c7370616e20636c6173733d2264223e293c2f7370616e3e3c2f6469763e3c64697620636c6173733d2267223e3c6c693e4e65696768626f72733a3c2f6c693e3c2f756c3e3c64697620636c6173733d2269223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033363020333630223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d222333353335333522202f3e3c666f726569676e4f626a6563742077696474683d2233363022206865696768743d223336302220783d22302220793d2230223e3c626f647920786d6c6e733d22687474703a2f2f7777772e77332e6f72672f313939392f7868746d6c223e3c7374796c653e2e617b666f6e742d66616d696c793a73616e732d73657269663b6d617267696e3a313070783b636f6c6f723a236664663966333b746578742d616c69676e3a63656e7465723b7d2e677b666f6e742d73697a653a313670783b666f6e742d7765696768743a3530303b6865696768743a323570783b6d617267696e2d746f703a3070783b7d2e627b666f6e742d73697a653a313270783b6c696e652d6865696768743a333570783b6d617267696e2d746f703a323070783b7d2e637b6d617267696e3a3570782030206175746f206175746f3b666f6e742d7765696768743a3830303b666f6e742d73697a653a303b6865696768743a343570783b6c696e652d6865696768743a343070783b7d2e63203e207370616e207b766572746963616c2d616c69676e3a6d6964646c653b7d2e647b666f6e742d73697a653a3272656d3b7d2e657b6261636b67726f756e642d7265706561743a206e6f2d7265706561743b6261636b67726f756e642d696d6167653a2075726c2822646174613a696d6167652f706e673b6261736536342c6956424f5277304b47676f414141414e5355684555674141414234414141416f43414d41414144657a626f67414141432f56424d564555414141442f73486261744972476a477a6d7534584b6a6c66757970666a7459546b756f7a4d6b334c70775933546c6c2f71785a6a6f76596265726e377076346a6a7459486e766f2b325a7a5467716e504d6b6c7a6673346e7277342f627133336f777058536e577a6d746e6e566f584c576e6d6d315a5458566f472f45674562506c3254767a5a6d33624557366345544e6d6d334f6d476971545462537058363965303379324b79366532766f75596a6e75344c63716e653061304b3763454c727735484d6946657055793364734950556e4761355a54666e7649693663554441655554566f6e4b2b64304c66733462456855334f6c4744546d6d586b7559664669564f3564464467746f727378592f767a4a7672776f6e516d327970547a50773071664367457674783550727759544c6c47504266556a72775961684d78334468465871763337516e573769763550446846363964457a47686c545170593742643244777949726b7434544f6c4633416545712f646b6d664c524c4566314b7659546570505272597148724a6a5666496a6c6e6171586e7479706134626a72476956544c6b56374166556e4869552f526d6d6e62724943376455624c69564c707659577857537261716f44556e5776546f472b6c51534f685079664c6b324b74556a58757a4a7a4b6b5637536f48507478354c7278593359713450556d5736305a454c4669565471773465684e422f6b77352b7a5945334a6d6d755047416a757970667679356e75795a5875794a50767a4a76757835447378592f767a5a337378704874785933757835507378497675795a54747835627378705473776f6a7177496a727759726d76496e64734954627249486e7558376c764a486a75592f72773437737849336f7634766b75596a6a746f667277354c717770446d7659336c756f7a65736f6a667359485a6d324c7679356a6f77492f73784972707659506873487a727458725a703366596c5676767a702f70777050697434766773346672775962717634626b754958677334547676494b2f646a2f2f324a3339315a766e76355068746f726d74344c63706e5059704848646f3233506c3250556d474c4e6b3244506b31764266455077304b4c7a78493735795966767659667277494c627133336d7348725a6f6d37546e6d7a636e326a51685644446745724466556a436355433763446d3561546d34597a4f35617a43305953717656697272794a7238305a6631794a62777849766673347631785962707533376171486e7173486a66716e666b713354516d6d6643626a5334536943784e685833304a2f377a6f377477597a7276596e6c736f4c6d736f4466736f446772333769706d376c716d6e676f3258576b325048686c584b69314c4668303746686b334c666b3275486a42644141414169485253546c4d4141514d462f76372b2f76734b2f7637392f6633382f5072462f7637392b2f76367866372b2f7637382b38614f65564a4c4f54497148786b512f76372b2f7633382f507a372b504876364e5851304d624275726d77734b7170707147586b34364e67585679636e4a736132566758455a44506a4162467637392f507a382f50763539765831382f4c76372b726733647a5a31632f4e7a4d4b34743636746f7147666c5a434f67344233646e4271596b6b714b43596779333865776741414245354a524546554f4d74316b334f5148454555786a764a3774336c6c4c767759747532626475326253666430364f3137543362646d7a62746c5870323633386d5666644e56587a7664393772373433413871422f3053356c704e486a414367326636475134634f486a786b794d3647652f614f486a31753471474a3430614e6174682f51376348393936415a764e65783262647938374f7973724b50763332394f6c486a7a4a69483579362f2b374c387972466c372b4438613858646f796f376b5037794b75487a764a725736644c53636572632b624f62393970516433754178754238613843596e696a506364674f46653736456637477a6676334f6c30702b3731472b3361585274494a6a6a3838765a5666567a637852636c567a4a76337235393633726d6c53736c565976697444584f37774d567766477578554c6843524b5a6d56642f4361752b754668516b422f383257314e646c6b6e67776f4162497976662b765739643956697935714e656e707670613076446170537055754c365a65387a4b3530637636777149436a554876534179554731556d56695269524b784b6b4c656f4a53675077445268584c413138533748596368786b4746346e7149524c61742b71722f48736f7072507668472b74413052314549526b424b67536d4f35755856547730694d4d6e5930746f76556b3468446b6c7042446b5942546b61535979434d37304a53376f504f784e714d324c4d51587a794a4a5179496b686a696c56574f622b4a6f4b524138375732446a6f57306251554a5543454759716935484a6a794e4f615243616e56632f33516270556a6b4d51516f71444e4b51517a2f763731686c4455464b3861574749325336444552676c6344524e49797969784370426c5a58547663566243474d695a5452454e457049534541556c6a4a694e6c6f58484437414f336d7264526345764138464d636b34435555736a786c6c644854493837356c4e4c6b543674525359685342706169734c6374696b5a6858436d4a72416f384b656e7a5452624f516347564473784c79464b74534b78485a472b752f316e7073776a67437378526d6f78534b4b4a486b7361354e62452f6778527645566a4b4b47516b4457556d554a4f58735759574a6a61346c65446f4d565044492f5449713856694d5757495a6730566e55314a5953616f75354e4b5573736e4a375a735270505242556f7259676b556d525a52436b704a61365877445176366a6a6351774d6331675271455169305338524358347550745952572f767a526e2b50454a4943694f516d494555535447782f745a3677755a6558327165365342486d474b6b4e45567a7943535253457a47534b653775436d525354544938316452554d784949514d526a474a35635852515546714e34696167416f484c723637535769556a6a6c454969326d5455696d586d64566d332b444353563635543379496a6555706d557975596d564b6e63342f55713232574473586a6945794f553057747a586237444b5a7a5761336d34504d416b476977324a4a723346706c346575654844375572585a4847697a4a796171425136314979636e78356e6b7175485a4b506b6341674c7930394c55675a46716879584e346e54713966716b3347524e375a2b39674b64322f684f3331656e514f79315733335233757347516d2b52796165494b53706450422b51766d78536a315351624449626b334f52676c306172315769714a656e7479706d6c6d564d4933724c3373397078577466446839707a32696661632b356378313066544a6154557639794977434f4c4d7557717a2b354e61357131547058382f4d4c4451304c4441797a2b4d6245754f7464336748416f507664517350432f507a305355377273384c772b506a77432f6b58416b7146733674322b624d4e6744376b5266696c384944536b695572566c557569313439756e6574652b5061745a7576686750516f7648596b535048546d67386456714c475a344e67764956577330344f725878676546626d34472f6f57594d3732713573735541414141415355564f524b35435949493d22293b6261636b67726f756e642d73697a653a3130302520313030253b646973706c61793a696e6c696e652d626c6f636b3b666f6e742d73697a653a312e3272656d3b6c696e652d6865696768743a343070783b7d2e667b70616464696e673a30707820313070783b646973706c61793a696e6c696e652d626c6f636b3b636f6c6f723a236134373532613b7d2e687b666f6e742d73697a653a313270783b6d617267696e3a353070782030203020353070783b746578742d616c69676e3a6c6566743b2d7765626b69742d7472616e73666f726d2d6f726967696e2d783a303b2d7765626b69742d7472616e73666f726d203a7363616c6528302e382c302e38293b7d756c7b6c6973742d7374796c652d747970653a646973633b6d617267696e3a3020302030202d323070783b7d2e697b6d617267696e3a3570783b6a7573746966792d636f6e74656e743a2063656e7465723b646973706c61793a677269643b677269642d74656d706c6174652d636f6c756d6e733a72657065617428332c6d61782d636f6e74656e74293b677269642d74656d706c6174652d726f773a72657065617428332c6175746f293b677269642d636f6c756d6e2d6761703a3570783b6a7573746966792d6974656d733a73746172743b7d3c2f7374796c653e3c64697620636c6173733d2261223e3c64697620636c6173733d2262223e50454f504c454c414e443c2f6469763e3c64697620636c6173733d2263223e3c7370616e20636c6173733d2264223e283c2f7370616e3e3c7370616e20636c6173733d2265223e3c7370616e20636c6173733d2266223e466f72207468652050454f504c45206f6620436f6e737469747574696f6e44414f2077686f206d61646520686973746f72792e496d6167696e652074686572652773206e6f2068656176656e2c49742773206561737920696620796f75207472792c4e6f2068656c6c2062656c6f772075732c41626f76652075732c6f6e6c7920736b792e496d6167696e6520616c6c207468652070656f706c652c4c6976696e6720666f7220746f6461792e496d6167696e652074686572652773206e6f20636f756e74726965732c49742069736e2774206861726420746f20646f2c4e6f7468696e6720746f206b696c6c206f722064696520666f722c416e64206e6f2072656c6967696f6e20746f6f2e496d6167696e6520416c6c207468652070656f706c652c4c6976696e67206c69666520696e2070656163652e2e2e596f75206d6179207361792049276d206120647265616d65722c4275742049276d206e6f7420746865206f6e6c79206f6e652c4920686f706520736f6d6564617920796f75276c6c206a6f696e2075732e416e642074686520776f726c642077696c6c206265206173206f6e652c496d6167696e65206e6f20706f7373657373696f6e732c4920776f6e64657220696620796f752063616e2c4e6f206e65656420666f72206772656564206f722068756e6765722c412062726f74686572686f6f64206f66206d616e2e496d6167696e6520616c6c207468652070656f706c652c53686172696e6720616c6c2074686520776f726c642e2e2e596f75206d6179207361792049276d206120647265616d65722c4275742049276d206e6f7420746865206f6e6c79206f6e652c4920686f706520736f6d6564617920796f75276c6c206a6f696e2075732c416e642074686520776f726c642077696c6c206c697665206173206f6e652e3c2f6c693e3c2f756c3e3c2f6469763e3c2f6469763e3c2f626f64793e3c2f666f726569676e4f626a6563743e3c2f7376673ea2646970667358221220b8c574fda7df296c1333c6be0411388aa12919a61623a0f2c1f9a9f6c1258f7764736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100415760003560e01c80638fe2278414610046578063c76566e714610070578063e1d7652014610085575b600080fd5b610059610054366004610e15565b610098565b6040516100679291906114f1565b60405180910390f35b61007861020d565b60405161006791906114d7565b610078610093366004610e47565b61022c565b6060806000604051806020016040528060008152509050600085600f0b13156100d557506040805180820190915260018152604560f81b60208201525b600085600f0b12156100fb57506040805180820190915260018152605760f81b60208201525b6060600086600f0b1261011b5761011486600f0b6104ec565b905061012d565b61012a86600f0b6000036104ec565b90505b60408051602081019091526000808252600f87900b131561016257506040805180820190915260018152602760f91b60208201525b600086600f0b121561018857506040805180820190915260018152605360f81b60208201525b6060600087600f0b126101a8576101a187600f0b6104ec565b90506101ba565b6101b787600f0b6000036104ec565b90505b83836040516020016101cd929190610f86565b604051602081830303815290604052955081816040516020016101f1929190610f86565b6040516020818303038152906040529450505050509250929050565b604051806102e001604052806102a481526020016127c66102a4913981565b606060008061024384600001518560200151610098565b9150915061024f610bce565b60405180610fe00160405280610fbb815260200161180b610fbb9139815260208082018490526040805160808101909152604680825290916116e89083013960408083019190915260608083018490528151908101909152603b8082526117a96020830139608082015260608501516102c79061060e565b60a082015260408051808201909152601981527f3c2f6469763e3c64697620636c6173733d2268223e3c756c3e000000000000006020820152816006602002018190525061032285608001518660a001518760c0015161063f565b816007602002015260e08501516103389061070f565b610100820152604080516060810190915260278082526117e4602083013961012082015261010085015161036b906108aa565b61014082015260408051808201909152600e81526d1e17b234bb1f1e3ab61f1e36349f60911b602082015261016082015260e0850151516103ab9061099e565b61018082015260408051606081019091526033808252612a6a60208301396101a082015280516020808301516040808501516060860151608087015160a088015160c089015160e08a01516101008b0151965160009a61040f9a9099989101611034565b60408051808303601f19018152908290526101208401516101408501516101608601516101808701516101a088015194965061045095879590602001610fb5565b604051602081830303815290604052905060006104be61047388604001516104ec565b604051806102e001604052806102a481526020016127c66102a49139610498856109f5565b6040516020016104aa9392919061129a565b6040516020818303038152906040526109f5565b9050806040516020016104d19190611413565b60405160208183030381529060405295505050505050919050565b6060816105105750506040805180820190915260018152600360fc1b602082015290565b8160005b811561053a578061052481611630565b91506105339050600a836115b6565b9150610514565b60008167ffffffffffffffff81111561056357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561058d576020820181803683370190505b5090505b8415610606576105a26001836115e9565b91506105af600a8661166b565b6105ba90603061159e565b60f81b8183815181106105dd57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506105ff600a866115b6565b9450610591565b949350505050565b60606000825111610637576040518060600160405280603b815260200161176e603b9139610639565b815b92915050565b6060831561067757506040805180820190915260138152722493b6903a3434b9902822a7a82622902f2faf60691b60208201526106e6565b82156106ad57506040805180820190915260138152722493b6903a343290212aa4a62222a9102f2faf60691b60208201526106e6565b6106c4826040015183600001518460200151610b69565b6040516020016106d4919061124f565b60405160208183030381529060405290505b806040516020016106f79190611396565b60405160208183030381529060405290509392505050565b604080516020808201835260008083528351918201909352918252825160609290156108a35760005b84518160ff161015610805576000858260ff168151811061076957634e487b7160e01b600052603260045260246000fd5b602002602001015190508060600151156107bc5782610795826040015183600001518460200151610b69565b6040516020016107a69291906111bc565b60405160208183030381529060405292506107f2565b836107cf82600001518360200151610b8f565b6040516020016107e09291906111bc565b60405160208183030381529060405293505b50806107fd8161164b565b915050610738565b50815115610832578160405160200161081e9190611458565b604051602081830303815290604052610843565b604051806020016040528060008152505b81511561086f578160405160200161085b91906113d1565b604051602081830303815290604052610880565b604051806020016040528060008152505b604051602001610891929190610f86565b60405160208183030381529060405292505b5050919050565b60606108b4610bf6565b60005b60088160ff16101561094757838160ff16815181106108e657634e487b7160e01b600052603260045260246000fd5b60200260200101516040516020016108fe9190611499565b604051602081830303815290604052828260ff166008811061093057634e487b7160e01b600052603260045260246000fd5b60200201528061093f8161164b565b9150506108b7565b5080516020808301516040808501516060860151608087015160a088015160c089015160e08a0151955161098799989596949593949293919291016110f5565b604051602081830303815290604052915050919050565b6060600282106109d6575050604080518082019091526012815271496d6167696e6520616e64206275696c642160701b602082015290565b6040518060600160405280602681526020016116c26026913992915050565b6060815160001415610a1557505060408051602081019091526000815290565b600060405180606001604052806040815260200161172e6040913990506000600384516002610a44919061159e565b610a4e91906115b6565b610a599060046115ca565b90506000610a6882602061159e565b67ffffffffffffffff811115610a8e57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610ab8576020820181803683370190505b509050818152600183018586518101602084015b81831015610b24576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825350600101610acc565b600389510660018114610b3e5760028114610b4f57610b5b565b613d3d60f01b600119830152610b5b565b603d60f81b6000198301525b509398975050505050505050565b6060610b74846104ec565b610b7e8484610b8f565b6040516020016106f7929190611363565b6060600080610b9e8585610098565b915091508181604051602001610bb59291906111f8565b6040516020818303038152906040529250505092915050565b604051806101c00160405280600e905b6060815260200190600190039081610bde5790505090565b60408051610100810190915260608152600760208201610bde565b600082601f830112610c21578081fd5b81356020610c36610c318361157a565b611549565b80838252828201915082860187848660051b8901011115610c55578586fd5b855b85811015610c9657813567ffffffffffffffff811115610c75578788fd5b610c838a87838c0101610d32565b8552509284019290840190600101610c57565b5090979650505050505050565b600082601f830112610cb3578081fd5b81356020610cc3610c318361157a565b80838252828201915082860187848660071b8901011115610ce2578586fd5b855b85811015610c9657610cf68983610d9d565b84529284019260809190910190600101610ce4565b80358015158114610d1b57600080fd5b919050565b8035600f81900b8114610d1b57600080fd5b600082601f830112610d42578081fd5b813567ffffffffffffffff811115610d5c57610d5c6116ab565b610d6f601f8201601f1916602001611549565b818152846020838601011115610d83578283fd5b816020850160208301379081016020019190915292915050565b600060808284031215610dae578081fd5b6040516080810181811067ffffffffffffffff82111715610dd157610dd16116ab565b604052905080610de083610d20565b8152610dee60208401610d20565b602082015260408301356040820152610e0960608401610d0b565b60608201525092915050565b60008060408385031215610e27578182fd5b610e3083610d20565b9150610e3e60208401610d20565b90509250929050565b600060208284031215610e58578081fd5b813567ffffffffffffffff80821115610e6f578283fd5b908301906101808286031215610e83578283fd5b610e8b61151f565b610e9483610d20565b8152610ea260208401610d20565b602082015260408301356040820152606083013582811115610ec2578485fd5b610ece87828601610d32565b606083015250610ee060808401610d0b565b6080820152610ef160a08401610d0b565b60a0820152610f038660c08501610d9d565b60c082015261014083013582811115610f1a578485fd5b610f2687828601610ca3565b60e08301525061016083013582811115610f3e578485fd5b610f4a87828601610c11565b6101008301525095945050505050565b60008151808452610f72816020860160208601611600565b601f01601f19169290920160200192915050565b60008351610f98818460208801611600565b835190830190610fac818360208801611600565b01949350505050565b600087516020610fc88285838d01611600565b885191840191610fdb8184848d01611600565b8851920191610fed8184848c01611600565b8751920191610fff8184848b01611600565b86519201916110118184848a01611600565b85519201916110238184848901611600565b919091019998505050505050505050565b60008a51611046818460208f01611600565b8a516110588183860160208f01611600565b8a51918401019061106d818360208e01611600565b895161107f8183850160208e01611600565b8951929091010190611095818360208c01611600565b87516110a78183850160208c01611600565b87519290910101906110bd818360208a01611600565b85516110cf8183850160208a01611600565b85519290910101906110e5818360208801611600565b019b9a5050505050505050505050565b6000895160206111088285838f01611600565b8a519184019161111b8184848f01611600565b8a5192019161112d8184848e01611600565b895192019161113f8184848d01611600565b6c1e3234bb1f26b29e17b234bb1f60991b9201918252875161116781600d8501848c01611600565b875192019161117c81600d8501848b01611600565b865192019161119181600d8501848a01611600565b85519201916111a681600d8501848901611600565b91909101600d019b9a5050505050505050505050565b600083516111ce818460208801611600565b600160fd1b90830190815283516111ec816001840160208801611600565b01600101949350505050565b600560fb1b815260008351611214816001850160208801611600565b600b60fa1b6001918401918201528351611235816002840160208801611600565b602960f81b60029290910191820152600301949350505050565b6902a3430b735b9903a37960b51b81526000825161127481600a850160208701611600565b6e20666f722074686520696e7669746560881b600a939091019283015250601901919050565b6f7b226e616d65223a20224c616e64202360801b815283516000906112c6816010850160208901611600565b72111610113232b9b1b934b83a34b7b7111d101160691b60109184019182015284516112f9816023840160208901611600565b7f222c2022696d616765223a2022646174613a696d6167652f7376672b786d6c3b602392909101918201526618985cd94d8d0b60ca1b6043820152835161134781604a840160208801611600565b61227d60f01b604a9290910191820152604c0195945050505050565b602360f81b81526000835161137f816001850160208801611600565b8351908301906111ec816001840160208801611600565b631e36349f60e11b8152600082516113b5816004850160208701611600565b641e17b6349f60d91b6004939091019283015250600901919050565b6a0f1b1a4f925b9d9a5d195960aa1b8152600082516113f781600b850160208701611600565b641e17b6349f60d91b600b939091019283015250601001919050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161144b81601d850160208701611600565b91909101601d0192915050565b690f1b1a4f935a5b9d195960b21b81526000825161147d81600a850160208701611600565b641e17b6349f60d91b600a939091019283015250600f01919050565b653c6469763e2360d01b8152600082516114ba816006850160208701611600565b651e17b234bb1f60d11b6006939091019283015250600c01919050565b6020815260006114ea6020830184610f5a565b9392505050565b6040815260006115046040830185610f5a565b82810360208401526115168185610f5a565b95945050505050565b604051610120810167ffffffffffffffff81118282101715611543576115436116ab565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715611572576115726116ab565b604052919050565b600067ffffffffffffffff821115611594576115946116ab565b5060051b60200190565b600082198211156115b1576115b161167f565b500190565b6000826115c5576115c5611695565b500490565b60008160001904831182151516156115e4576115e461167f565b500290565b6000828210156115fb576115fb61167f565b500390565b60005b8381101561161b578181015183820152602001611603565b8381111561162a576000848401525b50505050565b60006000198214156116445761164461167f565b5060010190565b600060ff821660ff8114156116625761166261167f565b60010192915050565b60008261167a5761167a611695565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe49276d206361726566756c6c792073656c656374696e67206f7572206e65696768626f7273213c2f7370616e3e3c2f7370616e3e3c7370616e20636c6173733d2264223e2c3c2f7370616e3e3c7370616e20636c6173733d2265223e3c7370616e20636c6173733d2266223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c62722f3e466f72207468652050454f504c45206f663c62722f3e436f6e737469747574696f6e44414f2077686f206d61646520686973746f72793c2f7370616e3e3c2f7370616e3e3c7370616e20636c6173733d2264223e293c2f7370616e3e3c2f6469763e3c64697620636c6173733d2267223e3c6c693e4e65696768626f72733a3c2f6c693e3c2f756c3e3c64697620636c6173733d2269223e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033363020333630223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d222333353335333522202f3e3c666f726569676e4f626a6563742077696474683d2233363022206865696768743d223336302220783d22302220793d2230223e3c626f647920786d6c6e733d22687474703a2f2f7777772e77332e6f72672f313939392f7868746d6c223e3c7374796c653e2e617b666f6e742d66616d696c793a73616e732d73657269663b6d617267696e3a313070783b636f6c6f723a236664663966333b746578742d616c69676e3a63656e7465723b7d2e677b666f6e742d73697a653a313670783b666f6e742d7765696768743a3530303b6865696768743a323570783b6d617267696e2d746f703a3070783b7d2e627b666f6e742d73697a653a313270783b6c696e652d6865696768743a333570783b6d617267696e2d746f703a323070783b7d2e637b6d617267696e3a3570782030206175746f206175746f3b666f6e742d7765696768743a3830303b666f6e742d73697a653a303b6865696768743a343570783b6c696e652d6865696768743a343070783b7d2e63203e207370616e207b766572746963616c2d616c69676e3a6d6964646c653b7d2e647b666f6e742d73697a653a3272656d3b7d2e657b6261636b67726f756e642d7265706561743a206e6f2d7265706561743b6261636b67726f756e642d696d6167653a2075726c2822646174613a696d6167652f706e673b6261736536342c6956424f5277304b47676f414141414e5355684555674141414234414141416f43414d41414144657a626f67414141432f56424d564555414141442f73486261744972476a477a6d7534584b6a6c66757970666a7459546b756f7a4d6b334c70775933546c6c2f71785a6a6f76596265726e377076346a6a7459486e766f2b325a7a5467716e504d6b6c7a6673346e7277342f627133336f777058536e577a6d746e6e566f584c576e6d6d315a5458566f472f45674562506c3254767a5a6d33624557366345544e6d6d334f6d476971545462537058363965303379324b79366532766f75596a6e75344c63716e653061304b3763454c727735484d6946657055793364734950556e4761355a54666e7649693663554441655554566f6e4b2b64304c66733462456855334f6c4744546d6d586b7559664669564f3564464467746f727378592f767a4a7672776f6e516d327970547a50773071664367457674783550727759544c6c47504266556a72775961684d78334468465871763337516e573769763550446846363964457a47686c545170593742643244777949726b7434544f6c4633416545712f646b6d664c524c4566314b7659546570505272597148724a6a5666496a6c6e6171586e7479706134626a72476956544c6b56374166556e4869552f526d6d6e62724943376455624c69564c707659577857537261716f44556e5776546f472b6c51534f685079664c6b324b74556a58757a4a7a4b6b5637536f48507478354c7278593359713450556d5736305a454c4669565471773465684e422f6b77352b7a5945334a6d6d755047416a757970667679356e75795a5875794a50767a4a76757835447378592f767a5a337378704874785933757835507378497675795a54747835627378705473776f6a7177496a727759726d76496e64734954627249486e7558376c764a486a75592f72773437737849336f7634766b75596a6a746f667277354c717770446d7659336c756f7a65736f6a667359485a6d324c7679356a6f77492f73784972707659506873487a727458725a703366596c5676767a702f70777050697434766773346672775962717634626b754958677334547676494b2f646a2f2f324a3339315a766e76355068746f726d74344c63706e5059704848646f3233506c3250556d474c4e6b3244506b31764266455077304b4c7a78493735795966767659667277494c627133336d7348725a6f6d37546e6d7a636e326a51685644446745724466556a436355433763446d3561546d34597a4f35617a43305953717656697272794a7238305a6631794a62777849766673347631785962707533376171486e7173486a66716e666b713354516d6d6643626a5334536943784e685833304a2f377a6f377477597a7276596e6c736f4c6d736f4466736f446772333769706d376c716d6e676f3258576b325048686c584b69314c4668303746686b334c666b3275486a42644141414169485253546c4d4141514d462f76372b2f76734b2f7637392f6633382f5072462f7637392b2f76367866372b2f7637382b38614f65564a4c4f54497148786b512f76372b2f7633382f507a372b504876364e5851304d624275726d77734b7170707147586b34364e67585679636e4a736132566758455a44506a4162467637392f507a382f50763539765831382f4c76372b726733647a5a31632f4e7a4d4b34743636746f7147666c5a434f67344233646e4271596b6b714b43596779333865776741414245354a524546554f4d74316b334f5148454555786a764a3774336c6c4c767759747532626475326253666430364f3137543362646d7a62746c5870323633386d5666644e56587a7664393772373433413871422f3053356c704e486a414367326636475134634f486a786b794d3647652f614f486a31753471474a3430614e6174682f51376348393936415a764e65783262647938374f7973724b50763332394f6c486a7a4a69483579362f2b374c387972466c372b4438613858646f796f376b5037794b75487a764a725736644c53636572632b624f62393970516433754178754238613843596e696a506364674f46653736456637477a6676334f6c30702b3731472b3361585274494a6a6a3838765a5666567a637852636c567a4a76337235393633726d6c53736c565976697444584f37774d567766477578554c6843524b5a6d56642f4361752b754668516b422f383257314e646c6b6e67776f4162497976662b765739643956697935714e656e707670613076446170537055754c365a65387a4b3530637636777149436a554876534179554731556d56695269524b784b6b4c656f4a53675077445268584c413138533748596368786b4746346e7149524c61742b71722f48736f7072507668472b74413052314549526b424b67536d4f35755856547730694d4d6e5930746f76556b3468446b6c7042446b5942546b61535979434d37304a53376f504f784e714d324c4d51587a794a4a5179496b686a696c56574f622b4a6f4b524138375732446a6f57306251554a5543454759716935484a6a794e4f615243616e56632f33516270556a6b4d51516f71444e4b51517a2f763731686c4455464b3861574749325336444552676c6344524e49797969784370426c5a58547663566243474d695a5452454e457049534541556c6a4a694e6c6f58484437414f336d7264526345764138464d636b34435555736a786c6c644854493837356c4e4c6b543674525359685342706169734c6374696b5a6858436d4a72416f384b656e7a5452624f516347564473784c79464b74534b78485a472b752f316e7073776a67437378526d6f78534b4b4a486b7361354e62452f6778527645566a4b4b47516b4457556d554a4f58735759574a6a61346c65446f4d565044492f5449713856694d5757495a6730566e55314a5953616f75354e4b5573736e4a375a735270505242556f7259676b556d525a52436b704a61365877445176366a6a6351774d6331675271455169305338524358347550745952572f767a526e2b50454a4943694f516d494555535447782f745a3677755a6558327165365342486d474b6b4e45567a7943535253457a47534b653775436d525354544938316452554d784949514d526a474a35635852515546714e34696167416f484c723637535769556a6a6c454969326d5455696d586d64566d332b444353563635543379496a6555706d557975596d564b6e63342f55713232574473586a6945794f553057747a586237444b5a7a5761336d34504d416b476977324a4a723346706c346575654844375572585a4847697a4a796171425136314979636e78356e6b7175485a4b506b6341674c7930394c55675a46716879584e346e54713966716b3347524e375a2b39674b64322f684f3331656e514f79315733335233757347516d2b52796165494b53706450422b51766d78536a315351624449626b334f52676c306172315769714a656e7479706d6c6d564d4933724c3373397078577466446839707a32696661632b356378313066544a6154557639794977434f4c4d7557717a2b354e61357131547058382f4d4c4451304c4441797a2b4d6245754f7464336748416f507664517350432f507a305355377273384c772b506a77432f6b58416b7146733674322b624d4e6744376b5266696c384944536b695572566c557569313439756e6574652b5061745a7576686750516f7648596b535048546d67386456714c475a344e67764956577330344f725878676546626d34472f6f57594d3732713573735541414141415355564f524b35435949493d22293b6261636b67726f756e642d73697a653a3130302520313030253b646973706c61793a696e6c696e652d626c6f636b3b666f6e742d73697a653a312e3272656d3b6c696e652d6865696768743a343070783b7d2e667b70616464696e673a30707820313070783b646973706c61793a696e6c696e652d626c6f636b3b636f6c6f723a236134373532613b7d2e687b666f6e742d73697a653a313270783b6d617267696e3a353070782030203020353070783b746578742d616c69676e3a6c6566743b2d7765626b69742d7472616e73666f726d2d6f726967696e2d783a303b2d7765626b69742d7472616e73666f726d203a7363616c6528302e382c302e38293b7d756c7b6c6973742d7374796c652d747970653a646973633b6d617267696e3a3020302030202d323070783b7d2e697b6d617267696e3a3570783b6a7573746966792d636f6e74656e743a2063656e7465723b646973706c61793a677269643b677269642d74656d706c6174652d636f6c756d6e733a72657065617428332c6d61782d636f6e74656e74293b677269642d74656d706c6174652d726f773a72657065617428332c6175746f293b677269642d636f6c756d6e2d6761703a3570783b6a7573746966792d6974656d733a73746172743b7d3c2f7374796c653e3c64697620636c6173733d2261223e3c64697620636c6173733d2262223e50454f504c454c414e443c2f6469763e3c64697620636c6173733d2263223e3c7370616e20636c6173733d2264223e283c2f7370616e3e3c7370616e20636c6173733d2265223e3c7370616e20636c6173733d2266223e466f72207468652050454f504c45206f6620436f6e737469747574696f6e44414f2077686f206d61646520686973746f72792e496d6167696e652074686572652773206e6f2068656176656e2c49742773206561737920696620796f75207472792c4e6f2068656c6c2062656c6f772075732c41626f76652075732c6f6e6c7920736b792e496d6167696e6520616c6c207468652070656f706c652c4c6976696e6720666f7220746f6461792e496d6167696e652074686572652773206e6f20636f756e74726965732c49742069736e2774206861726420746f20646f2c4e6f7468696e6720746f206b696c6c206f722064696520666f722c416e64206e6f2072656c6967696f6e20746f6f2e496d6167696e6520416c6c207468652070656f706c652c4c6976696e67206c69666520696e2070656163652e2e2e596f75206d6179207361792049276d206120647265616d65722c4275742049276d206e6f7420746865206f6e6c79206f6e652c4920686f706520736f6d6564617920796f75276c6c206a6f696e2075732e416e642074686520776f726c642077696c6c206265206173206f6e652c496d6167696e65206e6f20706f7373657373696f6e732c4920776f6e64657220696620796f752063616e2c4e6f206e65656420666f72206772656564206f722068756e6765722c412062726f74686572686f6f64206f66206d616e2e496d6167696e6520616c6c207468652070656f706c652c53686172696e6720616c6c2074686520776f726c642e2e2e596f75206d6179207361792049276d206120647265616d65722c4275742049276d206e6f7420746865206f6e6c79206f6e652c4920686f706520736f6d6564617920796f75276c6c206a6f696e2075732c416e642074686520776f726c642077696c6c206c697665206173206f6e652e3c2f6c693e3c2f756c3e3c2f6469763e3c2f6469763e3c2f626f64793e3c2f666f726569676e4f626a6563743e3c2f7376673ea2646970667358221220b8c574fda7df296c1333c6be0411388aa12919a61623a0f2c1f9a9f6c1258f7764736f6c63430008040033

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  ]

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.