ETH Price: $1,600.21 (+0.49%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Vote In Market207783622024-09-18 15:26:11211 days ago1726673171IN
0xF2fb7DE8...9c74A1b01
0 ETH0.0049239315.10058116
Vote In Market207783262024-09-18 15:18:59211 days ago1726672739IN
0xF2fb7DE8...9c74A1b01
0 ETH0.0044999513.20844177
Create Market207782022024-09-18 14:53:59211 days ago1726671239IN
0xF2fb7DE8...9c74A1b01
0 ETH0.0038508413.36063869
Vote In Market207781352024-09-18 14:40:35211 days ago1726670435IN
0xF2fb7DE8...9c74A1b01
0 ETH0.0038134912.07504821
Create Market207781042024-09-18 14:34:11211 days ago1726670051IN
0xF2fb7DE8...9c74A1b01
0 ETH0.00381113.21197057
Vote In Market207722392024-09-17 18:53:23211 days ago1726599203IN
0xF2fb7DE8...9c74A1b01
0 ETH0.007940416.92169741
Create Market207717222024-09-17 17:09:11211 days ago1726592951IN
0xF2fb7DE8...9c74A1b01
0 ETH0.0087264125.82245675
Create Market207713462024-09-17 15:52:47212 days ago1726588367IN
0xF2fb7DE8...9c74A1b01
0 ETH0.0061271817.69478035
Create Market207713172024-09-17 15:46:47212 days ago1726588007IN
0xF2fb7DE8...9c74A1b01
0 ETH0.0051040917.87805508
Change Token207711162024-09-17 15:06:11212 days ago1726585571IN
0xF2fb7DE8...9c74A1b01
0 ETH0.0004505915.46961035

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BlitzSpectraMarkets

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 3 : BlitzSpectraMarkets.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
// Import ownable

import "../lib/openzeppelin-contracts/contracts/access/Ownable.sol";

interface ERC20 {
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

contract BlitzSpectraMarkets is Ownable {
    // Order accounts for byte packing to save gas
    struct Market {
        uint256 id;
        uint256 winningOptionIndex;
        uint256 endTimestamp;
        bool isActive;
        address creator;
        string metadata;
        string[] options;
        uint256[] votes;
    }

    struct Vote {
        uint256 marketId;
        uint256 voteId;
        uint256 optionIndex;
        uint256 voteAmount;
        address voter;
    }

    struct VoterProfile {
        address voter;
        uint256 totalVotes;
        uint256 totalEarnings;
    }

    Market[] public markets;
    Vote[] public votes;

    ERC20 public token;

    // Keep tracking of the voters and their earnings
    address[] public voters;
    mapping(address => uint256) public voterEarnings;
    mapping(address => uint256) public voterTotalEarnings;
    mapping(address => uint256) public voterTotalVotes;

    // Keep track of the unclaimed tokens for each user
    mapping(address => uint256) public unclaimedTokens;

    // Keep track of earning referrals for each user
    mapping(address => uint256) public unclaimedReferralEarnings;
    mapping(address => uint256) public referralEarnings;

    // Keep track of referrals for each user
    mapping(address => address) public referredBy;

    // Keep track of referred users for each referrer
    mapping(address => address[]) public referredUsers;

    // Keep track of the earnings for each user
    mapping(address => uint256) public earnings;

    // Keep track of platform operators
    mapping(address => bool) public isOperator;

    // Keeep track of hasVoted per market
    mapping(uint256 => mapping(address => bool)) public hasVoted;

    // Referral fee percentage
    uint256 public referrerFeePercentage = 1; // 5%
    uint256 public referrerFeeBase = 100;

    uint256 public platformFeePercentage = 3; // 3%
    uint256 public platformFeeBase = 100;

    address public platformFeeCollector = address(5);

    // Allow this contract to receive ETH
    receive() external payable {}

    modifier onlyOperator() {
        require(isOperator[msg.sender], "Only operator can call this function");
        _;
    }

    constructor(address _token) {
        isOperator[msg.sender] = true;
        isOperator[address(5)] = true;
        token = ERC20(_token);
    }

    // Events
    event MarketCreated(uint256 marketId, address creator, string metadata, string[] options);
    event VoteCast(uint256 marketId, uint256 voteId, address voter, uint256 optionIndex, uint256 voteAmount);
    event MarketEnded(uint256 marketId, uint256 winningOptionIndex);
    event TokensClaimed(address claimer, uint256 amount);
    event ReferrerFeeChanged(uint256 newReferrerFeePercentage);
    event ReferrerSet(address user, address referrer);
    event WinningsDistributed(address user, uint256 amount);
    event VoterProfileCreated(address voter, uint256 totalVotes, uint256 totalEarnings);
    event VoterProfileUpdated(address voter, uint256 totalVotes, uint256 totalEarnings);
    event ReferralDistributed(address referrer, uint256 amount);

    /**
     * Getter functions
     */
    function getMarkets() public view returns (Market[] memory) {
        return markets;
    }

    function getReferredUsers(address referrer) public view returns (address[] memory) {
        return referredUsers[referrer];
    }

    function getVoters() public view returns (VoterProfile[] memory) {
        VoterProfile[] memory voterProfiles = new VoterProfile[](voters.length);

        for (uint256 i = 0; i < voters.length; i++) {
            address voter = voters[i];
            voterProfiles[i] = VoterProfile({
                voter: voter,
                totalVotes: voterTotalVotes[voter],
                totalEarnings: voterTotalEarnings[voter]
            });
        }

        return voterProfiles;
    }

    function getVoter(address _voter) public view returns (VoterProfile memory) {
        // Build a VoterProfile object
        VoterProfile memory voterProfile = VoterProfile({
            voter: _voter,
            totalVotes: voterTotalVotes[_voter],
            totalEarnings: voterTotalEarnings[_voter]
        });

        return voterProfile;
    }

    function getVotesForMarket(uint256 marketId) public view returns (Vote[] memory) {
        Market storage market = markets[marketId];
        // Loop through all votes and return the ones that belong to this market
        Vote[] memory marketVotes = new Vote[](market.votes.length);

        for (uint256 i = 0; i < market.votes.length; i++) {
            marketVotes[i] = votes[market.votes[i]];
        }

        return marketVotes;
    }

    function _appendVoterProfileIfNotExists(address voter) private {
        bool exists = false;
        for (uint256 i = 0; i < voters.length; i++) {
            if (voters[i] == voter) {
                exists = true;
                break;
            }
        }

        if (!exists) {
            voters.push(voter);
            emit VoterProfileCreated(voter, 0, 0);
        }
    }

    function _increaseVoterEarnings(address voter, uint256 amount) private {
        _appendVoterProfileIfNotExists(voter);

        voterEarnings[voter] += amount;
        voterTotalEarnings[voter] += amount;

        emit VoterProfileUpdated(voter, voterTotalVotes[voter], voterTotalEarnings[voter]);
    }

    function _increaseVoterVotes(address voter, uint256 amount) private {
        _appendVoterProfileIfNotExists(voter);

        voterTotalVotes[voter] += amount;

        emit VoterProfileUpdated(voter, voterTotalVotes[voter], voterTotalEarnings[voter]);
    }

    function _handlePlatformFeeDistribution(address voter, uint256 amount)
        private
        returns (uint256 _remainingVoteAmount)
    {
        uint256 voteAmount = amount;

        // Calculate the platform fee from the amount
        uint256 platformFee = (voteAmount * platformFeePercentage) / platformFeeBase;
        uint256 referralFee = 0;

        address isReferredBy = referredBy[voter];
        if (isReferredBy != address(0)) {
            referralFee = (voteAmount * referrerFeePercentage) / referrerFeeBase;
        }

        // If referralFee is positive, rdeduct it from the platform fee
        if (referralFee > 0) {
            platformFee -= referralFee;
            unclaimedReferralEarnings[isReferredBy] += referralFee;
            emit ReferralDistributed(isReferredBy, referralFee);
        }

        // Distribute the platform fee to the platform using .transfer
        token.transferFrom(voter, platformFeeCollector, platformFee);

        // Calculate the remaining vote amount after deducting the platform fee
        _remainingVoteAmount = voteAmount - platformFee - referralFee;

        return _remainingVoteAmount;
    }

    /**
     * Referrals
     */
    function setReferredBy(address referrer) public {
        // Only allow once
        require(referredBy[msg.sender] == address(0), "Referrer already set");
        referredBy[msg.sender] = referrer;
        referredUsers[referrer].push(msg.sender);

        // Emit event
        emit ReferrerSet(msg.sender, referrer);
    }

    function changeReferrerFeePercentage(uint256 newReferrerFeePercentage) public onlyOperator {
        referrerFeePercentage = newReferrerFeePercentage;

        // Emit event
        emit ReferrerFeeChanged(newReferrerFeePercentage);
    }

    function changeOperator(address operator, bool status) public onlyOperator {
        isOperator[operator] = status;
    }

    function changeToken(address _token) public onlyOperator {
        token = ERC20(_token);
    }

    function setPlatformFeeCollector(address _platformFeeCollector) public onlyOperator {
        platformFeeCollector = _platformFeeCollector;
    }

    function changePlatformFeePercentage(uint256 newPlatformFeePercentage) public onlyOperator {
        platformFeePercentage = newPlatformFeePercentage;
    }

    /**
     * Market functions
     */
    function createMarket(string memory metadata, string[] memory options, uint256 endTimestamp) public {
        uint256 _newMarketId = markets.length;

        // Require date to be in the future
        require(endTimestamp > block.timestamp, "End date must be in the future");

        Market memory market = Market({
            id: _newMarketId,
            creator: msg.sender,
            endTimestamp: endTimestamp,
            metadata: metadata,
            options: options,
            votes: new uint256[](0),
            winningOptionIndex: 0,
            isActive: true
        });

        markets.push(market);

        // Emit event
        emit MarketCreated(_newMarketId, msg.sender, metadata, options);
    }

    function voteInMarket(uint256 marketId, uint256 optionIndex, address referree, uint256 voteAmount) public payable {
        Market storage market = markets[marketId];

        // Require vote amount to be greater than 0
        require(voteAmount > 0, "Vote amount must be greater than 0");

        if (referree != address(0) && referredBy[msg.sender] == address(0)) {
            setReferredBy(referree);
        }

        _increaseVoterVotes(msg.sender, 1);

        require(market.isActive, "Market is not active");
        require(optionIndex < market.options.length, "Invalid option index");

        // Check if market has not expired
        require(block.timestamp < market.endTimestamp, "Market has expired");

        // Check if the user has voted before in this market or not
        require(!hasVoted[marketId][msg.sender], "User has already voted");
        hasVoted[marketId][msg.sender] = true;

        // Transfer the token to the contract using call
        token.transferFrom(msg.sender, address(this), voteAmount);

        uint256 _newVoteId = votes.length;

        voteAmount = _handlePlatformFeeDistribution(msg.sender, voteAmount);

        Vote memory vote = Vote({
            voteId: _newVoteId,
            marketId: marketId,
            optionIndex: optionIndex,
            voter: msg.sender,
            voteAmount: voteAmount
        });

        votes.push(vote);
        market.votes.push(_newVoteId);

        // Emit event
        emit VoteCast(marketId, _newVoteId, msg.sender, optionIndex, msg.value);
    }

    function endMarket(uint256 marketId, uint256 winningOptionIndex) public onlyOperator {
        Market storage market = markets[marketId];

        require(market.isActive, "Market is not active");

        market.isActive = false;
        market.winningOptionIndex = winningOptionIndex;

        // Ensure there are votes in the market
        require(market.votes.length > 0, "No votes in the market");

        // Calculate the total amount to distribute to the winners by summing up all the votes of the losing options
        uint256 totalLosingVotesAmount = 0;
        uint256 totalWinningVotesAmount = 0;

        for (uint256 i = 0; i < market.votes.length; i++) {
            Vote memory vote = votes[market.votes[i]];

            if (vote.optionIndex != winningOptionIndex) {
                // Vote is on the losing option
                totalLosingVotesAmount += vote.voteAmount;
            } else {
                // Vote is on the winning option
                totalWinningVotesAmount += vote.voteAmount;

                // Refund the original vote amount to the user
                unclaimedTokens[vote.voter] += vote.voteAmount;
            }
        }

        if (totalWinningVotesAmount == 0) {
            // No winning votes
            emit MarketEnded(marketId, winningOptionIndex);

            // Send all the losing votes to the platform fee using transfer

            token.transfer(platformFeeCollector, totalLosingVotesAmount);

            return;
        } else {
            // Need to run for loop again to correctly distribute winnings
            for (uint256 i = 0; i < market.votes.length; i++) {
                Vote memory vote = votes[market.votes[i]];

                if (vote.optionIndex == winningOptionIndex) {
                    // Winner Vote - Calculate the proportional amount to distribute to this winner
                    uint256 amountToDistribute = (vote.voteAmount * totalLosingVotesAmount) / totalWinningVotesAmount;

                    unclaimedTokens[vote.voter] += amountToDistribute;

                    // Update the voter profile
                    _increaseVoterEarnings(vote.voter, amountToDistribute);

                    // Emit event
                    emit WinningsDistributed(vote.voter, amountToDistribute);
                }
            }

            // Emit event
            emit MarketEnded(marketId, winningOptionIndex);
        }
    }

    function claimTokens() public {
        uint256 amount = unclaimedTokens[msg.sender];
        unclaimedTokens[msg.sender] = 0;

        token.transfer(msg.sender, amount);

        // Emit event
        emit TokensClaimed(msg.sender, amount);
    }

    function claimReferralEarnings() public {
        uint256 amount = unclaimedReferralEarnings[msg.sender];
        unclaimedReferralEarnings[msg.sender] = 0;
        referralEarnings[msg.sender] += amount;

        token.transfer(msg.sender, amount);

        // Emit event
        emit TokensClaimed(msg.sender, amount);
    }
}

File 2 of 3 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 3 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

Settings
{
  "remappings": [
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
    "forge-std/=lib/forge-std/src/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/",
    "openzeppelin/=lib/openzeppelin-contracts/contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "paris",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketId","type":"uint256"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"string","name":"metadata","type":"string"},{"indexed":false,"internalType":"string[]","name":"options","type":"string[]"}],"name":"MarketCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"winningOptionIndex","type":"uint256"}],"name":"MarketEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferralDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newReferrerFeePercentage","type":"uint256"}],"name":"ReferrerFeeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"referrer","type":"address"}],"name":"ReferrerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"voteId","type":"uint256"},{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"optionIndex","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"voteAmount","type":"uint256"}],"name":"VoteCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalVotes","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalEarnings","type":"uint256"}],"name":"VoterProfileCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalVotes","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalEarnings","type":"uint256"}],"name":"VoterProfileUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WinningsDistributed","type":"event"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"changeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPlatformFeePercentage","type":"uint256"}],"name":"changePlatformFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReferrerFeePercentage","type":"uint256"}],"name":"changeReferrerFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"changeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReferralEarnings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"metadata","type":"string"},{"internalType":"string[]","name":"options","type":"string[]"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"}],"name":"createMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"earnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketId","type":"uint256"},{"internalType":"uint256","name":"winningOptionIndex","type":"uint256"}],"name":"endMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMarkets","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"winningOptionIndex","type":"uint256"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"string","name":"metadata","type":"string"},{"internalType":"string[]","name":"options","type":"string[]"},{"internalType":"uint256[]","name":"votes","type":"uint256[]"}],"internalType":"struct BlitzSpectraMarkets.Market[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"getReferredUsers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_voter","type":"address"}],"name":"getVoter","outputs":[{"components":[{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"uint256","name":"totalEarnings","type":"uint256"}],"internalType":"struct BlitzSpectraMarkets.VoterProfile","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVoters","outputs":[{"components":[{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"uint256","name":"totalEarnings","type":"uint256"}],"internalType":"struct BlitzSpectraMarkets.VoterProfile[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketId","type":"uint256"}],"name":"getVotesForMarket","outputs":[{"components":[{"internalType":"uint256","name":"marketId","type":"uint256"},{"internalType":"uint256","name":"voteId","type":"uint256"},{"internalType":"uint256","name":"optionIndex","type":"uint256"},{"internalType":"uint256","name":"voteAmount","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"internalType":"struct BlitzSpectraMarkets.Vote[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"hasVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"markets","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"winningOptionIndex","type":"uint256"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"string","name":"metadata","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFeeBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFeeCollector","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referredBy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"referredUsers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrerFeeBase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrerFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_platformFeeCollector","type":"address"}],"name":"setPlatformFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"setReferredBy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unclaimedReferralEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unclaimedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketId","type":"uint256"},{"internalType":"uint256","name":"optionIndex","type":"uint256"},{"internalType":"address","name":"referree","type":"address"},{"internalType":"uint256","name":"voteAmount","type":"uint256"}],"name":"voteInMarket","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voterEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voterTotalEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voterTotalVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"voters","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"votes","outputs":[{"internalType":"uint256","name":"marketId","type":"uint256"},{"internalType":"uint256","name":"voteId","type":"uint256"},{"internalType":"uint256","name":"optionIndex","type":"uint256"},{"internalType":"uint256","name":"voteAmount","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001601055606460118190556003601255601355601480546001600160a01b03191660051790553480156200003857600080fd5b5060405162002e2a38038062002e2a8339810160408190526200005b9162000128565b6200006633620000d8565b336000908152600e602052604081208054600160ff19918216811790925560059092527fb9bec7e2561f624fe753ff070f1599b306cbf59fafd4e8d5a8184a1ea1841bce8054909216179055600380546001600160a01b0319166001600160a01b03929092169190911790556200015a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156200013b57600080fd5b81516001600160a01b03811681146200015357600080fd5b9392505050565b612cc0806200016a6000396000f3fe6080604052600436106102345760003560e01c8063b1283e771161012e578063da58c7d9116100ab578063e92820e61161006f578063e92820e61461076d578063ec2c90161461078d578063f2fde38b146107af578063fbc529cb146107cf578063fc0c546a146107ef57600080fd5b8063da58c7d9146106e4578063da7915b214610704578063dbd89df314610717578063dfc90cf214610737578063e8db675b1461075757600080fd5b8063cdd72253116100f2578063cdd7225314610632578063cdd78cfc14610654578063cfe8f6441461066a578063d4f50f9814610697578063d6e00d3d146106c457600080fd5b8063b1283e7714610563578063b8a3969614610595578063ba761ecc146105ab578063c07b528a146105d8578063c8e6b85d1461060557600080fd5b80636d70f7ae116101bc578063860639ec11610180578063860639ec146104955780638da5cb5b146104b55780639d1ca14a146104d3578063a90f8e9a14610500578063ad98fa451461053657600080fd5b80636d70f7ae146103d6578063715018a61461040657806384ae48b51461041b578063853a65f91461043057806385ad8b851461046857600080fd5b806348c54b9d1161020357806348c54b9d14610303578063543fd3131461031857806354ad29aa146103455780635df813301461036557806366829b16146103b657600080fd5b806311a07c08146102405780631b11dace1461026257806332e5b6d81461028b57806343859632146102b857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b3660046123c1565b61080f565b005b34801561026e57600080fd5b5061027860105481565b6040519081526020015b60405180910390f35b34801561029757600080fd5b506102ab6102a63660046123f6565b610883565b6040516102829190612418565b3480156102c457600080fd5b506102f36102d3366004612465565b600f60209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610282565b34801561030f57600080fd5b506102606108f9565b34801561032457600080fd5b506102786103333660046123f6565b600d6020526000908152604090205481565b34801561035157600080fd5b506102606103603660046123f6565b6109be565b34801561037157600080fd5b506103856103803660046123c1565b610aa4565b6040805195865260208601949094529284019190915260608301526001600160a01b0316608082015260a001610282565b3480156103c257600080fd5b506102606103d13660046123f6565b610aee565b3480156103e257600080fd5b506102f36103f13660046123f6565b600e6020526000908152604090205460ff1681565b34801561041257600080fd5b50610260610b3f565b34801561042757600080fd5b50610260610b53565b34801561043c57600080fd5b50601454610450906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561047457600080fd5b506102786104833660046123f6565b60076020526000908152604090205481565b3480156104a157600080fd5b506102606104b036600461249f565b610bbf565b3480156104c157600080fd5b506000546001600160a01b0316610450565b3480156104df57600080fd5b506102786104ee3660046123f6565b60056020526000908152604090205481565b34801561050c57600080fd5b5061045061051b3660046123f6565b600b602052600090815260409020546001600160a01b031681565b34801561054257600080fd5b506102786105513660046123f6565b60066020526000908152604090205481565b34801561056f57600080fd5b5061058361057e3660046123c1565b610c19565b6040516102829695949392919061251c565b3480156105a157600080fd5b5061027860135481565b3480156105b757600080fd5b506105cb6105c63660046123c1565b610cfa565b6040516102829190612563565b3480156105e457600080fd5b506102786105f33660046123f6565b600a6020526000908152604090205481565b34801561061157600080fd5b506102786106203660046123f6565b60086020526000908152604090205481565b34801561063e57600080fd5b50610647610e76565b60405161028291906125da565b34801561066057600080fd5b5061027860125481565b34801561067657600080fd5b506102786106853660046123f6565b60096020526000908152604090205481565b3480156106a357600080fd5b506106b76106b23660046123f6565b610f94565b6040516102829190612639565b3480156106d057600080fd5b506102606106df3660046123c1565b611001565b3480156106f057600080fd5b506104506106ff3660046123c1565b611035565b610260610712366004612663565b61105f565b34801561072357600080fd5b506102606107323660046126a0565b6114a3565b34801561074357600080fd5b506102606107523660046123f6565b611908565b34801561076357600080fd5b5061027860115481565b34801561077957600080fd5b506104506107883660046126c2565b611959565b34801561079957600080fd5b506107a2611991565b6040516102829190612782565b3480156107bb57600080fd5b506102606107ca3660046123f6565b611bfc565b3480156107db57600080fd5b506102606107ea366004612927565b611c75565b3480156107fb57600080fd5b50600354610450906001600160a01b031681565b336000908152600e602052604090205460ff166108475760405162461bcd60e51b815260040161083e90612a16565b60405180910390fd5b60108190556040518181527f937fc6230427e4b41344af2acf9850247d6b7ce097cc579bdf68180d6c2e4237906020015b60405180910390a150565b6001600160a01b0381166000908152600c60209081526040918290208054835181840281018401909452808452606093928301828280156108ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108cf575b50505050509050919050565b336000818152600860205260408082208054929055600354905163a9059cbb60e01b815260048101939093526024830182905290916001600160a01b039091169063a9059cbb906044015b6020604051808303816000875af1158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190612a5a565b5060408051338152602081018390527f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4309101610878565b336000908152600b60205260409020546001600160a01b031615610a1b5760405162461bcd60e51b8152602060048201526014602482015273149959995c9c995c88185b1c9958591e481cd95d60621b604482015260640161083e565b336000818152600b6020908152604080832080546001600160a01b0387166001600160a01b03199182168117909255818552600c8452828520805460018101825590865294849020909401805490941685179093558051938452908301919091527f5f7165288eef601591cf549e15ff19ef9060b7f71b9c115be946fa1fe7ebf68a9101610878565b60028181548110610ab457600080fd5b600091825260209091206005909102018054600182015460028301546003840154600490940154929450909290916001600160a01b031685565b336000908152600e602052604090205460ff16610b1d5760405162461bcd60e51b815260040161083e90612a16565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610b47611e9e565b610b516000611ef8565b565b336000908152600960209081526040808320805490849055600a9092528220805491928392610b83908490612a8d565b909155505060035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401610944565b336000908152600e602052604090205460ff16610bee5760405162461bcd60e51b815260040161083e90612a16565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b60018181548110610c2957600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850180549496509294919360ff8216936101009092046001600160a01b0316929190610c7790612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca390612aa0565b8015610cf05780601f10610cc557610100808354040283529160200191610cf0565b820191906000526020600020905b815481529060010190602001808311610cd357829003601f168201915b5050505050905086565b6060600060018381548110610d1157610d11612ad4565b906000526020600020906007020190506000816006018054905067ffffffffffffffff811115610d4357610d43612870565b604051908082528060200260200182016040528015610daf57816020015b610d9c6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b815260200190600190039081610d615790505b50905060005b6006830154811015610e6e576002836006018281548110610dd857610dd8612ad4565b906000526020600020015481548110610df357610df3612ad4565b60009182526020918290206040805160a081018252600590930290910180548352600181015493830193909352600283015490820152600382015460608201526004909101546001600160a01b031660808201528251839083908110610e5b57610e5b612ad4565b6020908102919091010152600101610db5565b509392505050565b60045460609060009067ffffffffffffffff811115610e9757610e97612870565b604051908082528060200260200182016040528015610ef557816020015b610ee2604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081610eb55790505b50905060005b600454811015610f8e57600060048281548110610f1a57610f1a612ad4565b6000918252602080832090910154604080516060810182526001600160a01b0390921680835280855260078452818520548385015280855260069093529283902054928101929092528451909250849084908110610f7a57610f7a612ad4565b602090810291909101015250600101610efb565b50919050565b610fc1604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b50604080516060810182526001600160a01b0390921680835260008181526007602090815283822054818601529181526006909152819020549082015290565b336000908152600e602052604090205460ff166110305760405162461bcd60e51b815260040161083e90612a16565b601255565b6004818154811061104557600080fd5b6000918252602090912001546001600160a01b0316905081565b60006001858154811061107457611074612ad4565b90600052602060002090600702019050600082116110df5760405162461bcd60e51b815260206004820152602260248201527f566f746520616d6f756e74206d7573742062652067726561746572207468616e604482015261020360f41b606482015260840161083e565b6001600160a01b0383161580159061110d5750336000908152600b60205260409020546001600160a01b0316155b1561111b5761111b836109be565b611126336001611f48565b600381015460ff166111715760405162461bcd60e51b81526020600482015260146024820152734d61726b6574206973206e6f742061637469766560601b604482015260640161083e565b600581015484106111bb5760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840dee0e8d2dedc40d2dcc8caf60631b604482015260640161083e565b806002015442106112035760405162461bcd60e51b815260206004820152601260248201527113585c9ad95d081a185cc8195e1c1a5c995960721b604482015260640161083e565b6000858152600f6020908152604080832033845290915290205460ff16156112665760405162461bcd60e51b8152602060048201526016602482015275155cd95c881a185cc8185b1c9958591e481d9bdd195960521b604482015260640161083e565b6000858152600f6020908152604080832033808552925291829020805460ff1916600117905560035491516323b872dd60e01b81526004810191909152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190612a5a565b506002546113163384611fe5565b6040805160a0808201835289825260208083018681528385018b81526060808601888152336080808901828152600280546001808201835560009283528c517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60059093029283015598517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015596517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad088015593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1870155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad290950180546001600160a01b0319166001600160a01b039096169590951790945560068c018054958601815582529085902090930189905586518e8152938401899052958301919091529381018a90523493810193909352929550917f58cfe003711e6d7e0f32c93d3eb5617a03925d8863d7bb5dc084666365866022910160405180910390a150505050505050565b336000908152600e602052604090205460ff166114d25760405162461bcd60e51b815260040161083e90612a16565b6000600183815481106114e7576114e7612ad4565b60009182526020909120600790910201600381015490915060ff166115455760405162461bcd60e51b81526020600482015260146024820152734d61726b6574206973206e6f742061637469766560601b604482015260640161083e565b60038101805460ff191690556001810182905560068101546115a25760405162461bcd60e51b8152602060048201526016602482015275139bc81d9bdd195cc81a5b881d1a19481b585c9ad95d60521b604482015260640161083e565b60008060005b60068401548110156116ad57600060028560060183815481106115cd576115cd612ad4565b9060005260206000200154815481106115e8576115e8612ad4565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201819052600383015460608301526004909201546001600160a01b031660808201529150861461165c5760608101516116559085612a8d565b93506116a4565b606081015161166b9084612a8d565b606082015160808301516001600160a01b031660009081526008602052604081208054939650919261169e908490612a8d565b90915550505b506001016115a8565b508060000361176f5760408051868152602081018690527e0b6feae4bec70344a7d0e99f4c0237adaaeee2fbb258266be400bd8612a332910160405180910390a160035460145460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb906044016020604051808303816000875af1158015611743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117679190612a5a565b505050505050565b60005b60068401548110156118c6576000600285600601838154811061179757611797612ad4565b9060005260206000200154815481106117b2576117b2612ad4565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201819052600383015460608301526004909201546001600160a01b0316608082015291508690036118bd576000838583606001516118249190612aea565b61182e9190612b01565b60808301516001600160a01b031660009081526008602052604081208054929350839290919061185f908490612a8d565b909155505060808201516118739082612173565b6080820151604080516001600160a01b039092168252602082018390527f8407530cd30bd60843793c1ccec3f8c6f69c95ffef3e255c2de664d0dd658d61910160405180910390a1505b50600101611772565b5060408051868152602081018690527e0b6feae4bec70344a7d0e99f4c0237adaaeee2fbb258266be400bd8612a33291015b60405180910390a15050505b5050565b336000908152600e602052604090205460ff166119375760405162461bcd60e51b815260040161083e90612a16565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b600c602052816000526040600020818154811061197557600080fd5b6000918252602090912001546001600160a01b03169150829050565b60606001805480602002602001604051908101604052809291908181526020016000905b82821015611bf35760008481526020908190206040805161010080820183526007870290930180548252600181015494820194909452600284015491810191909152600383015460ff811615156060830152919091046001600160a01b0316608082015260048201805491929160a084019190611a3190612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5d90612aa0565b8015611aaa5780601f10611a7f57610100808354040283529160200191611aaa565b820191906000526020600020905b815481529060010190602001808311611a8d57829003601f168201915b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015611b84578382906000526020600020018054611af790612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2390612aa0565b8015611b705780601f10611b4557610100808354040283529160200191611b70565b820191906000526020600020905b815481529060010190602001808311611b5357829003601f168201915b505050505081526020019060010190611ad8565b50505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bdb57602002820191906000526020600020905b815481526020019060010190808311611bc7575b505050505081525050815260200190600101906119b5565b50505050905090565b611c04611e9e565b6001600160a01b038116611c695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161083e565b611c7281611ef8565b50565b600154428211611cc75760405162461bcd60e51b815260206004820152601e60248201527f456e642064617465206d75737420626520696e20746865206675747572650000604482015260640161083e565b60408051610100808201835283825260006020808401828152848601888152600160608701818152336080890190815260a089018e815260c08a018e90528a51888152968701909a5260e0890195909552815480830183559190955286517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6600790920291820190815592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf782015590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf882015592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf98401805493516001600160a81b0319909416911515610100600160a81b031916919091176001600160a01b03909316909402919091179092559251919283927fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa90910190611e2e9082612b70565b5060c08201518051611e4a9160058401916020909101906122b8565b5060e08201518051611e6691600684019160209091019061230e565b5050507f5d000efdc981f3cf96c1b426c290626a81f483b07edcfeb841dba2b62e185b50823387876040516118f89493929190612c30565b6000546001600160a01b03163314610b515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161083e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611f51826121d1565b6001600160a01b03821660009081526007602052604081208054839290611f79908490612a8d565b90915550506001600160a01b038216600081815260076020908152604080832054600683529281902054815194855291840192909252908201527f43ae40d970cd13ea124e3b418e6e134fbd046e9d90a1313f984524aaf1cd55d1906060015b60405180910390a15050565b600080829050600060135460125483611ffe9190612aea565b6120089190612b01565b6001600160a01b038087166000908152600b60205260408120549293509116801561204a5760115460105461203d9086612aea565b6120479190612b01565b91505b81156120cf5761205a8284612c77565b6001600160a01b038216600090815260096020526040812080549295508492909190612087908490612a8d565b9091555050604080516001600160a01b0383168152602081018490527f56aaff25c3db1828aca55c30ba4aac2b5754d6f7d328b7f97d7306d6381844ba910160405180910390a15b6003546014546040516323b872dd60e01b81526001600160a01b038a811660048301529182166024820152604481018690529116906323b872dd906064016020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190612a5a565b508161215c8486612c77565b6121669190612c77565b9450505050505b92915050565b61217c826121d1565b6001600160a01b038216600090815260056020526040812080548392906121a4908490612a8d565b90915550506001600160a01b03821660009081526006602052604081208054839290611f79908490612a8d565b6000805b60045481101561222757826001600160a01b0316600482815481106121fc576121fc612ad4565b6000918252602090912001546001600160a01b03160361221f5760019150612227565b6001016121d5565b5080611904576004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03851690811790915560408051918252602082018390528101919091527f921634871b0696335c4e4a3ae25878836aae219f385a69a6f0eb7c951d3cb74d90606001611fd9565b8280548282559060005260206000209081019282156122fe579160200282015b828111156122fe57825182906122ee9082612b70565b50916020019190600101906122d8565b5061230a929150612355565b5090565b828054828255906000526020600020908101928215612349579160200282015b8281111561234957825182559160200191906001019061232e565b5061230a929150612372565b8082111561230a5760006123698282612387565b50600101612355565b5b8082111561230a5760008155600101612373565b50805461239390612aa0565b6000825580601f106123a3575050565b601f016020900490600052602060002090810190611c729190612372565b6000602082840312156123d357600080fd5b5035919050565b80356001600160a01b03811681146123f157600080fd5b919050565b60006020828403121561240857600080fd5b612411826123da565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156124595783516001600160a01b031683529284019291840191600101612434565b50909695505050505050565b6000806040838503121561247857600080fd5b82359150612488602084016123da565b90509250929050565b8015158114611c7257600080fd5b600080604083850312156124b257600080fd5b6124bb836123da565b915060208301356124cb81612491565b809150509250929050565b6000815180845260005b818110156124fc576020818501810151868301820152016124e0565b506000602082860101526020601f19601f83011685010191505092915050565b868152856020820152846040820152831515606082015260018060a01b038316608082015260c060a0820152600061255760c08301846124d6565b98975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156125cd5781518051855286810151878601528581015186860152606080820151908601526080908101516001600160a01b03169085015260a09093019290850190600101612580565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156124595761262683855180516001600160a01b0316825260208082015190830152604090810151910152565b92840192606092909201916001016125f6565b81516001600160a01b0316815260208083015190820152604080830151908201526060810161216d565b6000806000806080858703121561267957600080fd5b8435935060208501359250612690604086016123da565b9396929550929360600135925050565b600080604083850312156126b357600080fd5b50508035926020909101359150565b600080604083850312156126d557600080fd5b6126de836123da565b946020939093013593505050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561273957601f198684030189526127278383516124d6565b9884019892509083019060010161270b565b5090979650505050505050565b60008151808452602080850194506020840160005b838110156127775781518752958201959082019060010161275b565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561286257603f19898403018552815161010081518552888201518986015287820151888601526060808301516127e88288018215159052565b50506080828101516001600160a01b03169086015260a080830151818701839052612815838801826124d6565b9250505060c0808301518683038288015261283083826126ec565b9250505060e0808301519250858203818701525061284e8183612746565b9689019694505050908601906001016127ab565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128af576128af612870565b604052919050565b600082601f8301126128c857600080fd5b813567ffffffffffffffff8111156128e2576128e2612870565b6128f5601f8201601f1916602001612886565b81815284602083860101111561290a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561293c57600080fd5b833567ffffffffffffffff8082111561295457600080fd5b612960878388016128b7565b945060209150818601358181111561297757600080fd5b8601601f8101881361298857600080fd5b80358281111561299a5761299a612870565b8060051b6129a9858201612886565b918252828101850191858101908b8411156129c357600080fd5b86850192505b838310156129ff578235868111156129e15760008081fd5b6129ef8d89838901016128b7565b83525091860191908601906129c9565b989b989a5050505060409690960135955050505050565b60208082526024908201527f4f6e6c79206f70657261746f722063616e2063616c6c20746869732066756e636040820152633a34b7b760e11b606082015260800190565b600060208284031215612a6c57600080fd5b815161241181612491565b634e487b7160e01b600052601160045260246000fd5b8082018082111561216d5761216d612a77565b600181811c90821680612ab457607f821691505b602082108103610f8e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761216d5761216d612a77565b600082612b1e57634e487b7160e01b600052601260045260246000fd5b500490565b601f821115612b6b576000816000526020600020601f850160051c81016020861015612b4c5750805b601f850160051c820191505b8181101561176757828155600101612b58565b505050565b815167ffffffffffffffff811115612b8a57612b8a612870565b612b9e81612b988454612aa0565b84612b23565b602080601f831160018114612bd35760008415612bbb5750858301515b600019600386901b1c1916600185901b178555611767565b600085815260208120601f198616915b82811015612c0257888601518255948401946001909101908401612be3565b5085821015612c205787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8481526001600160a01b0384166020820152608060408201819052600090612c5a908301856124d6565b8281036060840152612c6c81856126ec565b979650505050505050565b8181038181111561216d5761216d612a7756fea26469706673582212201689ad72e4a1144280ecdf54119b70d09043285d494a7d00589539d0d914286a64736f6c6343000818003300000000000000000000000059017bead84066b3c39359a4d61df7468818120e

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063b1283e771161012e578063da58c7d9116100ab578063e92820e61161006f578063e92820e61461076d578063ec2c90161461078d578063f2fde38b146107af578063fbc529cb146107cf578063fc0c546a146107ef57600080fd5b8063da58c7d9146106e4578063da7915b214610704578063dbd89df314610717578063dfc90cf214610737578063e8db675b1461075757600080fd5b8063cdd72253116100f2578063cdd7225314610632578063cdd78cfc14610654578063cfe8f6441461066a578063d4f50f9814610697578063d6e00d3d146106c457600080fd5b8063b1283e7714610563578063b8a3969614610595578063ba761ecc146105ab578063c07b528a146105d8578063c8e6b85d1461060557600080fd5b80636d70f7ae116101bc578063860639ec11610180578063860639ec146104955780638da5cb5b146104b55780639d1ca14a146104d3578063a90f8e9a14610500578063ad98fa451461053657600080fd5b80636d70f7ae146103d6578063715018a61461040657806384ae48b51461041b578063853a65f91461043057806385ad8b851461046857600080fd5b806348c54b9d1161020357806348c54b9d14610303578063543fd3131461031857806354ad29aa146103455780635df813301461036557806366829b16146103b657600080fd5b806311a07c08146102405780631b11dace1461026257806332e5b6d81461028b57806343859632146102b857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b5061026061025b3660046123c1565b61080f565b005b34801561026e57600080fd5b5061027860105481565b6040519081526020015b60405180910390f35b34801561029757600080fd5b506102ab6102a63660046123f6565b610883565b6040516102829190612418565b3480156102c457600080fd5b506102f36102d3366004612465565b600f60209081526000928352604080842090915290825290205460ff1681565b6040519015158152602001610282565b34801561030f57600080fd5b506102606108f9565b34801561032457600080fd5b506102786103333660046123f6565b600d6020526000908152604090205481565b34801561035157600080fd5b506102606103603660046123f6565b6109be565b34801561037157600080fd5b506103856103803660046123c1565b610aa4565b6040805195865260208601949094529284019190915260608301526001600160a01b0316608082015260a001610282565b3480156103c257600080fd5b506102606103d13660046123f6565b610aee565b3480156103e257600080fd5b506102f36103f13660046123f6565b600e6020526000908152604090205460ff1681565b34801561041257600080fd5b50610260610b3f565b34801561042757600080fd5b50610260610b53565b34801561043c57600080fd5b50601454610450906001600160a01b031681565b6040516001600160a01b039091168152602001610282565b34801561047457600080fd5b506102786104833660046123f6565b60076020526000908152604090205481565b3480156104a157600080fd5b506102606104b036600461249f565b610bbf565b3480156104c157600080fd5b506000546001600160a01b0316610450565b3480156104df57600080fd5b506102786104ee3660046123f6565b60056020526000908152604090205481565b34801561050c57600080fd5b5061045061051b3660046123f6565b600b602052600090815260409020546001600160a01b031681565b34801561054257600080fd5b506102786105513660046123f6565b60066020526000908152604090205481565b34801561056f57600080fd5b5061058361057e3660046123c1565b610c19565b6040516102829695949392919061251c565b3480156105a157600080fd5b5061027860135481565b3480156105b757600080fd5b506105cb6105c63660046123c1565b610cfa565b6040516102829190612563565b3480156105e457600080fd5b506102786105f33660046123f6565b600a6020526000908152604090205481565b34801561061157600080fd5b506102786106203660046123f6565b60086020526000908152604090205481565b34801561063e57600080fd5b50610647610e76565b60405161028291906125da565b34801561066057600080fd5b5061027860125481565b34801561067657600080fd5b506102786106853660046123f6565b60096020526000908152604090205481565b3480156106a357600080fd5b506106b76106b23660046123f6565b610f94565b6040516102829190612639565b3480156106d057600080fd5b506102606106df3660046123c1565b611001565b3480156106f057600080fd5b506104506106ff3660046123c1565b611035565b610260610712366004612663565b61105f565b34801561072357600080fd5b506102606107323660046126a0565b6114a3565b34801561074357600080fd5b506102606107523660046123f6565b611908565b34801561076357600080fd5b5061027860115481565b34801561077957600080fd5b506104506107883660046126c2565b611959565b34801561079957600080fd5b506107a2611991565b6040516102829190612782565b3480156107bb57600080fd5b506102606107ca3660046123f6565b611bfc565b3480156107db57600080fd5b506102606107ea366004612927565b611c75565b3480156107fb57600080fd5b50600354610450906001600160a01b031681565b336000908152600e602052604090205460ff166108475760405162461bcd60e51b815260040161083e90612a16565b60405180910390fd5b60108190556040518181527f937fc6230427e4b41344af2acf9850247d6b7ce097cc579bdf68180d6c2e4237906020015b60405180910390a150565b6001600160a01b0381166000908152600c60209081526040918290208054835181840281018401909452808452606093928301828280156108ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108cf575b50505050509050919050565b336000818152600860205260408082208054929055600354905163a9059cbb60e01b815260048101939093526024830182905290916001600160a01b039091169063a9059cbb906044015b6020604051808303816000875af1158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190612a5a565b5060408051338152602081018390527f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4309101610878565b336000908152600b60205260409020546001600160a01b031615610a1b5760405162461bcd60e51b8152602060048201526014602482015273149959995c9c995c88185b1c9958591e481cd95d60621b604482015260640161083e565b336000818152600b6020908152604080832080546001600160a01b0387166001600160a01b03199182168117909255818552600c8452828520805460018101825590865294849020909401805490941685179093558051938452908301919091527f5f7165288eef601591cf549e15ff19ef9060b7f71b9c115be946fa1fe7ebf68a9101610878565b60028181548110610ab457600080fd5b600091825260209091206005909102018054600182015460028301546003840154600490940154929450909290916001600160a01b031685565b336000908152600e602052604090205460ff16610b1d5760405162461bcd60e51b815260040161083e90612a16565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610b47611e9e565b610b516000611ef8565b565b336000908152600960209081526040808320805490849055600a9092528220805491928392610b83908490612a8d565b909155505060035460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401610944565b336000908152600e602052604090205460ff16610bee5760405162461bcd60e51b815260040161083e90612a16565b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b60018181548110610c2957600080fd5b6000918252602090912060079091020180546001820154600283015460038401546004850180549496509294919360ff8216936101009092046001600160a01b0316929190610c7790612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca390612aa0565b8015610cf05780601f10610cc557610100808354040283529160200191610cf0565b820191906000526020600020905b815481529060010190602001808311610cd357829003601f168201915b5050505050905086565b6060600060018381548110610d1157610d11612ad4565b906000526020600020906007020190506000816006018054905067ffffffffffffffff811115610d4357610d43612870565b604051908082528060200260200182016040528015610daf57816020015b610d9c6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b815260200190600190039081610d615790505b50905060005b6006830154811015610e6e576002836006018281548110610dd857610dd8612ad4565b906000526020600020015481548110610df357610df3612ad4565b60009182526020918290206040805160a081018252600590930290910180548352600181015493830193909352600283015490820152600382015460608201526004909101546001600160a01b031660808201528251839083908110610e5b57610e5b612ad4565b6020908102919091010152600101610db5565b509392505050565b60045460609060009067ffffffffffffffff811115610e9757610e97612870565b604051908082528060200260200182016040528015610ef557816020015b610ee2604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081610eb55790505b50905060005b600454811015610f8e57600060048281548110610f1a57610f1a612ad4565b6000918252602080832090910154604080516060810182526001600160a01b0390921680835280855260078452818520548385015280855260069093529283902054928101929092528451909250849084908110610f7a57610f7a612ad4565b602090810291909101015250600101610efb565b50919050565b610fc1604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b50604080516060810182526001600160a01b0390921680835260008181526007602090815283822054818601529181526006909152819020549082015290565b336000908152600e602052604090205460ff166110305760405162461bcd60e51b815260040161083e90612a16565b601255565b6004818154811061104557600080fd5b6000918252602090912001546001600160a01b0316905081565b60006001858154811061107457611074612ad4565b90600052602060002090600702019050600082116110df5760405162461bcd60e51b815260206004820152602260248201527f566f746520616d6f756e74206d7573742062652067726561746572207468616e604482015261020360f41b606482015260840161083e565b6001600160a01b0383161580159061110d5750336000908152600b60205260409020546001600160a01b0316155b1561111b5761111b836109be565b611126336001611f48565b600381015460ff166111715760405162461bcd60e51b81526020600482015260146024820152734d61726b6574206973206e6f742061637469766560601b604482015260640161083e565b600581015484106111bb5760405162461bcd60e51b8152602060048201526014602482015273092dcecc2d8d2c840dee0e8d2dedc40d2dcc8caf60631b604482015260640161083e565b806002015442106112035760405162461bcd60e51b815260206004820152601260248201527113585c9ad95d081a185cc8195e1c1a5c995960721b604482015260640161083e565b6000858152600f6020908152604080832033845290915290205460ff16156112665760405162461bcd60e51b8152602060048201526016602482015275155cd95c881a185cc8185b1c9958591e481d9bdd195960521b604482015260640161083e565b6000858152600f6020908152604080832033808552925291829020805460ff1916600117905560035491516323b872dd60e01b81526004810191909152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156112e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113089190612a5a565b506002546113163384611fe5565b6040805160a0808201835289825260208083018681528385018b81526060808601888152336080808901828152600280546001808201835560009283528c517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace60059093029283015598517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015596517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad088015593517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad1870155517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad290950180546001600160a01b0319166001600160a01b039096169590951790945560068c018054958601815582529085902090930189905586518e8152938401899052958301919091529381018a90523493810193909352929550917f58cfe003711e6d7e0f32c93d3eb5617a03925d8863d7bb5dc084666365866022910160405180910390a150505050505050565b336000908152600e602052604090205460ff166114d25760405162461bcd60e51b815260040161083e90612a16565b6000600183815481106114e7576114e7612ad4565b60009182526020909120600790910201600381015490915060ff166115455760405162461bcd60e51b81526020600482015260146024820152734d61726b6574206973206e6f742061637469766560601b604482015260640161083e565b60038101805460ff191690556001810182905560068101546115a25760405162461bcd60e51b8152602060048201526016602482015275139bc81d9bdd195cc81a5b881d1a19481b585c9ad95d60521b604482015260640161083e565b60008060005b60068401548110156116ad57600060028560060183815481106115cd576115cd612ad4565b9060005260206000200154815481106115e8576115e8612ad4565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201819052600383015460608301526004909201546001600160a01b031660808201529150861461165c5760608101516116559085612a8d565b93506116a4565b606081015161166b9084612a8d565b606082015160808301516001600160a01b031660009081526008602052604081208054939650919261169e908490612a8d565b90915550505b506001016115a8565b508060000361176f5760408051868152602081018690527e0b6feae4bec70344a7d0e99f4c0237adaaeee2fbb258266be400bd8612a332910160405180910390a160035460145460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb906044016020604051808303816000875af1158015611743573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117679190612a5a565b505050505050565b60005b60068401548110156118c6576000600285600601838154811061179757611797612ad4565b9060005260206000200154815481106117b2576117b2612ad4565b60009182526020918290206040805160a0810182526005909302909101805483526001810154938301939093526002830154908201819052600383015460608301526004909201546001600160a01b0316608082015291508690036118bd576000838583606001516118249190612aea565b61182e9190612b01565b60808301516001600160a01b031660009081526008602052604081208054929350839290919061185f908490612a8d565b909155505060808201516118739082612173565b6080820151604080516001600160a01b039092168252602082018390527f8407530cd30bd60843793c1ccec3f8c6f69c95ffef3e255c2de664d0dd658d61910160405180910390a1505b50600101611772565b5060408051868152602081018690527e0b6feae4bec70344a7d0e99f4c0237adaaeee2fbb258266be400bd8612a33291015b60405180910390a15050505b5050565b336000908152600e602052604090205460ff166119375760405162461bcd60e51b815260040161083e90612a16565b601480546001600160a01b0319166001600160a01b0392909216919091179055565b600c602052816000526040600020818154811061197557600080fd5b6000918252602090912001546001600160a01b03169150829050565b60606001805480602002602001604051908101604052809291908181526020016000905b82821015611bf35760008481526020908190206040805161010080820183526007870290930180548252600181015494820194909452600284015491810191909152600383015460ff811615156060830152919091046001600160a01b0316608082015260048201805491929160a084019190611a3190612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054611a5d90612aa0565b8015611aaa5780601f10611a7f57610100808354040283529160200191611aaa565b820191906000526020600020905b815481529060010190602001808311611a8d57829003601f168201915b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015611b84578382906000526020600020018054611af790612aa0565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2390612aa0565b8015611b705780601f10611b4557610100808354040283529160200191611b70565b820191906000526020600020905b815481529060010190602001808311611b5357829003601f168201915b505050505081526020019060010190611ad8565b50505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bdb57602002820191906000526020600020905b815481526020019060010190808311611bc7575b505050505081525050815260200190600101906119b5565b50505050905090565b611c04611e9e565b6001600160a01b038116611c695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161083e565b611c7281611ef8565b50565b600154428211611cc75760405162461bcd60e51b815260206004820152601e60248201527f456e642064617465206d75737420626520696e20746865206675747572650000604482015260640161083e565b60408051610100808201835283825260006020808401828152848601888152600160608701818152336080890190815260a089018e815260c08a018e90528a51888152968701909a5260e0890195909552815480830183559190955286517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6600790920291820190815592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf782015590517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf882015592517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf98401805493516001600160a81b0319909416911515610100600160a81b031916919091176001600160a01b03909316909402919091179092559251919283927fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa90910190611e2e9082612b70565b5060c08201518051611e4a9160058401916020909101906122b8565b5060e08201518051611e6691600684019160209091019061230e565b5050507f5d000efdc981f3cf96c1b426c290626a81f483b07edcfeb841dba2b62e185b50823387876040516118f89493929190612c30565b6000546001600160a01b03163314610b515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161083e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611f51826121d1565b6001600160a01b03821660009081526007602052604081208054839290611f79908490612a8d565b90915550506001600160a01b038216600081815260076020908152604080832054600683529281902054815194855291840192909252908201527f43ae40d970cd13ea124e3b418e6e134fbd046e9d90a1313f984524aaf1cd55d1906060015b60405180910390a15050565b600080829050600060135460125483611ffe9190612aea565b6120089190612b01565b6001600160a01b038087166000908152600b60205260408120549293509116801561204a5760115460105461203d9086612aea565b6120479190612b01565b91505b81156120cf5761205a8284612c77565b6001600160a01b038216600090815260096020526040812080549295508492909190612087908490612a8d565b9091555050604080516001600160a01b0383168152602081018490527f56aaff25c3db1828aca55c30ba4aac2b5754d6f7d328b7f97d7306d6381844ba910160405180910390a15b6003546014546040516323b872dd60e01b81526001600160a01b038a811660048301529182166024820152604481018690529116906323b872dd906064016020604051808303816000875af115801561212c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121509190612a5a565b508161215c8486612c77565b6121669190612c77565b9450505050505b92915050565b61217c826121d1565b6001600160a01b038216600090815260056020526040812080548392906121a4908490612a8d565b90915550506001600160a01b03821660009081526006602052604081208054839290611f79908490612a8d565b6000805b60045481101561222757826001600160a01b0316600482815481106121fc576121fc612ad4565b6000918252602090912001546001600160a01b03160361221f5760019150612227565b6001016121d5565b5080611904576004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03851690811790915560408051918252602082018390528101919091527f921634871b0696335c4e4a3ae25878836aae219f385a69a6f0eb7c951d3cb74d90606001611fd9565b8280548282559060005260206000209081019282156122fe579160200282015b828111156122fe57825182906122ee9082612b70565b50916020019190600101906122d8565b5061230a929150612355565b5090565b828054828255906000526020600020908101928215612349579160200282015b8281111561234957825182559160200191906001019061232e565b5061230a929150612372565b8082111561230a5760006123698282612387565b50600101612355565b5b8082111561230a5760008155600101612373565b50805461239390612aa0565b6000825580601f106123a3575050565b601f016020900490600052602060002090810190611c729190612372565b6000602082840312156123d357600080fd5b5035919050565b80356001600160a01b03811681146123f157600080fd5b919050565b60006020828403121561240857600080fd5b612411826123da565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156124595783516001600160a01b031683529284019291840191600101612434565b50909695505050505050565b6000806040838503121561247857600080fd5b82359150612488602084016123da565b90509250929050565b8015158114611c7257600080fd5b600080604083850312156124b257600080fd5b6124bb836123da565b915060208301356124cb81612491565b809150509250929050565b6000815180845260005b818110156124fc576020818501810151868301820152016124e0565b506000602082860101526020601f19601f83011685010191505092915050565b868152856020820152846040820152831515606082015260018060a01b038316608082015260c060a0820152600061255760c08301846124d6565b98975050505050505050565b602080825282518282018190526000919060409081850190868401855b828110156125cd5781518051855286810151878601528581015186860152606080820151908601526080908101516001600160a01b03169085015260a09093019290850190600101612580565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156124595761262683855180516001600160a01b0316825260208082015190830152604090810151910152565b92840192606092909201916001016125f6565b81516001600160a01b0316815260208083015190820152604080830151908201526060810161216d565b6000806000806080858703121561267957600080fd5b8435935060208501359250612690604086016123da565b9396929550929360600135925050565b600080604083850312156126b357600080fd5b50508035926020909101359150565b600080604083850312156126d557600080fd5b6126de836123da565b946020939093013593505050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561273957601f198684030189526127278383516124d6565b9884019892509083019060010161270b565b5090979650505050505050565b60008151808452602080850194506020840160005b838110156127775781518752958201959082019060010161275b565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561286257603f19898403018552815161010081518552888201518986015287820151888601526060808301516127e88288018215159052565b50506080828101516001600160a01b03169086015260a080830151818701839052612815838801826124d6565b9250505060c0808301518683038288015261283083826126ec565b9250505060e0808301519250858203818701525061284e8183612746565b9689019694505050908601906001016127ab565b509098975050505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128af576128af612870565b604052919050565b600082601f8301126128c857600080fd5b813567ffffffffffffffff8111156128e2576128e2612870565b6128f5601f8201601f1916602001612886565b81815284602083860101111561290a57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561293c57600080fd5b833567ffffffffffffffff8082111561295457600080fd5b612960878388016128b7565b945060209150818601358181111561297757600080fd5b8601601f8101881361298857600080fd5b80358281111561299a5761299a612870565b8060051b6129a9858201612886565b918252828101850191858101908b8411156129c357600080fd5b86850192505b838310156129ff578235868111156129e15760008081fd5b6129ef8d89838901016128b7565b83525091860191908601906129c9565b989b989a5050505060409690960135955050505050565b60208082526024908201527f4f6e6c79206f70657261746f722063616e2063616c6c20746869732066756e636040820152633a34b7b760e11b606082015260800190565b600060208284031215612a6c57600080fd5b815161241181612491565b634e487b7160e01b600052601160045260246000fd5b8082018082111561216d5761216d612a77565b600181811c90821680612ab457607f821691505b602082108103610f8e57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761216d5761216d612a77565b600082612b1e57634e487b7160e01b600052601260045260246000fd5b500490565b601f821115612b6b576000816000526020600020601f850160051c81016020861015612b4c5750805b601f850160051c820191505b8181101561176757828155600101612b58565b505050565b815167ffffffffffffffff811115612b8a57612b8a612870565b612b9e81612b988454612aa0565b84612b23565b602080601f831160018114612bd35760008415612bbb5750858301515b600019600386901b1c1916600185901b178555611767565b600085815260208120601f198616915b82811015612c0257888601518255948401946001909101908401612be3565b5085821015612c205787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8481526001600160a01b0384166020820152608060408201819052600090612c5a908301856124d6565b8281036060840152612c6c81856126ec565b979650505050505050565b8181038181111561216d5761216d612a7756fea26469706673582212201689ad72e4a1144280ecdf54119b70d09043285d494a7d00589539d0d914286a64736f6c63430008180033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000059017bead84066b3c39359a4d61df7468818120e

-----Decoded View---------------
Arg [0] : _token (address): 0x59017BEAd84066b3C39359A4d61Df7468818120e

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000059017bead84066b3c39359a4d61df7468818120e


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.