S Price: $0.865666 (+0.95%)

Contract

0xAa63811655645f1d8c00271784CfB048eB0F4C33

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Validator78432802025-02-14 11:51:377 days ago1739533897IN
0xAa638116...8eB0F4C33
0 S0.0719761355
Create Validator78432662025-02-14 11:51:267 days ago1739533886IN
0xAa638116...8eB0F4C33
0 S0.0715326755
Create Validator78432552025-02-14 11:51:197 days ago1739533879IN
0xAa638116...8eB0F4C33
0 S0.071089255
Create Validator78432252025-02-14 11:51:067 days ago1739533866IN
0xAa638116...8eB0F4C33
0 S0.0706457455
Create Validator78432152025-02-14 11:50:597 days ago1739533859IN
0xAa638116...8eB0F4C33
0 S0.0702023355
Create Validator78432082025-02-14 11:50:517 days ago1739533851IN
0xAa638116...8eB0F4C33
0 S0.0697588655
Create Validator78431972025-02-14 11:50:447 days ago1739533844IN
0xAa638116...8eB0F4C33
0 S0.069315455
Create Validator78431902025-02-14 11:50:387 days ago1739533838IN
0xAa638116...8eB0F4C33
0 S0.0688719355
Create Validator78431822025-02-14 11:50:307 days ago1739533830IN
0xAa638116...8eB0F4C33
0 S0.0684285255
Create Validator78431552025-02-14 11:50:137 days ago1739533813IN
0xAa638116...8eB0F4C33
0 S0.0689255655
Set Authorizatio...78424752025-02-14 11:42:327 days ago1739533352IN
0xAa638116...8eB0F4C33
0 S0.002657155
Set Authorizatio...78424152025-02-14 11:41:477 days ago1739533307IN
0xAa638116...8eB0F4C33
0 S0.0026577655
Set Authorizatio...78423192025-02-14 11:40:457 days ago1739533245IN
0xAa638116...8eB0F4C33
0 S0.0026577655

Latest 10 internal transactions

Parent Transaction Hash Block From To
78432802025-02-14 11:51:377 days ago1739533897
0xAa638116...8eB0F4C33
 Contract Creation0 S
78432662025-02-14 11:51:267 days ago1739533886
0xAa638116...8eB0F4C33
 Contract Creation0 S
78432552025-02-14 11:51:197 days ago1739533879
0xAa638116...8eB0F4C33
 Contract Creation0 S
78432252025-02-14 11:51:067 days ago1739533866
0xAa638116...8eB0F4C33
 Contract Creation0 S
78432152025-02-14 11:50:597 days ago1739533859
0xAa638116...8eB0F4C33
 Contract Creation0 S
78432082025-02-14 11:50:517 days ago1739533851
0xAa638116...8eB0F4C33
 Contract Creation0 S
78431972025-02-14 11:50:447 days ago1739533844
0xAa638116...8eB0F4C33
 Contract Creation0 S
78431902025-02-14 11:50:387 days ago1739533838
0xAa638116...8eB0F4C33
 Contract Creation0 S
78431822025-02-14 11:50:307 days ago1739533830
0xAa638116...8eB0F4C33
 Contract Creation0 S
78431552025-02-14 11:50:137 days ago1739533813
0xAa638116...8eB0F4C33
 Contract Creation0 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ValidatorFactory

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

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

import "./sources/OZ/Ownable.sol";
import "./validator.sol";

contract ValidatorFactory is Ownable {

    // Mapping to store the addresses of deployed validators
    mapping(address => bool) public validators;
    // Mapping of authorized Contracts
    mapping(address => bool) public authorizedContracts;
    // List of deployed validators
    address[] public deployedValidators;
    // Maximum number of active validators
    uint256 public constant MAX_ACTIVE_VALIDATORS = 25;

    // Events
    event ValidatorCreated(address indexed validatorAddress);
    event ContractAuthorized(address indexed contractAddress, bool isAuthorized);

    // Modifier
    modifier onlyAuthorized() {
        require(authorizedContracts[msg.sender], "Caller is not authorized");
        _;
    }

    constructor(address _initialOwner) Ownable(_initialOwner) {
    } 

    // Autorize contracts for validator creation
    function setAuthorization(address _contract, bool _isAuthorized) external onlyOwner {
        authorizedContracts[_contract] = _isAuthorized;
        emit ContractAuthorized(_contract, _isAuthorized);
    }

    // Function to create a single Validator and assign ownership to the provided owner
    function createValidator(address _EMLTokenAddress, address _owner) external onlyAuthorized returns (address) {
        // Check the number of active validators
        uint256 activeValidatorCount = 0;
        for (uint256 i = 0; i < deployedValidators.length; i++) {
            if (Validator(deployedValidators[i]).isActive()) {
                activeValidatorCount++;
            }
        }

        require(
            activeValidatorCount < MAX_ACTIVE_VALIDATORS,
            "Maximum number of active validators reached"
        );

        // Create the validator and pass this factory address in the constructor
        Validator newValidator = new Validator(_EMLTokenAddress, _owner, address(this));

        // Register the new validator in the factory
        address validatorAddress = address(newValidator);
        validators[validatorAddress] = true;
        deployedValidators.push(validatorAddress);

        emit ValidatorCreated(validatorAddress);
        return validatorAddress;
    }

    // Create a batch of Validators
    function createInitialValidators(address _EMLTokenAddress, uint256 numberOfValidators) external onlyOwner {
        require(numberOfValidators > 0, "Number of validators must be greater than 0");
        require(numberOfValidators <= MAX_ACTIVE_VALIDATORS, "Cannot create more than the maximum allowed validators");
        
        // Check active Validators number
        uint256 activeValidatorCount = 0;
        for (uint256 i = 0; i < deployedValidators.length; i++) {
            if (Validator(deployedValidators[i]).isActive()) {
                activeValidatorCount++;
            }
        }

        require(
            deployedValidators.length + numberOfValidators <= MAX_ACTIVE_VALIDATORS || activeValidatorCount < MAX_ACTIVE_VALIDATORS,
            "Cannot exceed the maximum number of validators"
        );

        for (uint256 i = 0; i < numberOfValidators; i++) {
            Validator newValidator = new Validator(_EMLTokenAddress, msg.sender, address(this));
            address validatorAddress = address(newValidator);
            
            validators[validatorAddress] = true;
            deployedValidators.push(validatorAddress);

            emit ValidatorCreated(validatorAddress);
        }
    }

    // Check if a validator is active
    function isValidatorActive(address validatorAddress) external view returns (bool) {
        require(validators[validatorAddress], "Validator not found");
        return Validator(validatorAddress).isActive();
    }

    // Get the owner of a validator
    function getValidatorOwner(address validatorAddress) external view returns (address) {
        require(validators[validatorAddress], "Validator not found");
        return Validator(validatorAddress).getValidatorOwner();
    }

    // Get the list of deployed validators
    function getDeployedValidators() external view returns (address[] memory) {
        return deployedValidators;
    }
}

File 2 of 5 : validator.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "./sources/OZ/IERC20.sol";
import "./sources/OZ/Ownable.sol";

contract Validator is Ownable {
    address public EMLTokenAddress;
    address public validatorFactory;
    uint256 public validatorPrice;
    address public admin;
    bool public active = false;

    // Validator Current Owner
    mapping(address => address) public validatorOwners;

    // Mapping to associate the contract address with the validator address
    mapping(address => address) public validatorContracts;
    // Events
    event EMLBalanceChecked(uint256 balance);
    event ValidatorCount(uint256 activeCount, uint256 maxCount);
    event ValidatorClosed(address indexed owner, uint256 amount);
    event ValidatorOpened();
    event ValidatorClosedEvent();

    constructor(address _EMLTokenAddress, address _initialOwner, address _validatorFactory) Ownable(_initialOwner) {
        EMLTokenAddress = _EMLTokenAddress;
        admin = _initialOwner;
        validatorFactory = _validatorFactory; // Set the validatorFactory by default
        validatorContracts[address(this)] = address(this);
        validatorOwners[address(this)] = _initialOwner;
    }
    
    // Keccak hash function for an array of strings
    function calculateKeccak256(string[] calldata inputs) external view returns (bytes32) {
        require(active, "Validator is not active"); // Check if the validator is active

        // Concatenate all strings in the array
        bytes memory concatenatedString;
        for (uint256 i = 0; i < inputs.length; i++) {
            concatenatedString = abi.encodePacked(concatenatedString, inputs[i]);
        }

        // Calculate the Keccak256 hash of the concatenated string
        bytes32 hash = keccak256(concatenatedString);
        return hash;
    }

    // Set a new validator factory
    function setValidatorFactory(address _validatorFactory) external onlyOwner {
        require(_validatorFactory != address(0), "Invalid validator factory address");
        validatorFactory = _validatorFactory;
    }

    // Return the validator contract address
    function getValidatorContractAddress() external view returns (address) {
        return validatorContracts[address(this)];
    }

    // Return the current validator owner
    function getValidatorOwner() external view returns (address) {
        return validatorOwners[address(this)];
    }

    // Return the amount of EML available in the contract
    function getEMLBalance() external view returns (uint256) {
        return IERC20(EMLTokenAddress).balanceOf(address(this));
    }

    // Function to close the validator and send the EML balance to the owner
    function closeValidator() external onlyOwner {
        uint256 balance = IERC20(EMLTokenAddress).balanceOf(address(this));
        require(balance > 0, "No EML tokens to transfer");

        IERC20(EMLTokenAddress).transfer(owner(), balance);
        active = false;

        emit ValidatorClosed(owner(), balance);
        emit ValidatorClosedEvent();
    }

    // Open the validator if it holds at least 20,000 EML
    function openValidator() external onlyOwner {
        uint256 emlBalance = IERC20(EMLTokenAddress).balanceOf(address(this));
        emit EMLBalanceChecked(emlBalance); // Log la balance

        require(emlBalance >= 20000 * 10**18, "Validator must hold at least 20,000 EML");
        active = true;
        emit ValidatorOpened();
    }

    // Function to check if the validator is active
    function isActive() external view returns (bool) {
        return active;
    }

    // Function to get the admin address
    function getAdmin() external view returns (address) {
        return admin;
    }
}

File 3 of 5 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;

import  "./Context.sol";

abstract contract Ownable is Context {
    address private _owner;

    error OwnableUnauthorizedAccount(address account);
    error OwnableInvalidOwner(address owner);

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

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 5 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

interface IERC20 {

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

File 5 of 5 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)

pragma solidity ^0.8.20;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

    function _contextSuffixLength() internal view virtual returns (uint256) {
        return 0;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorized","type":"bool"}],"name":"ContractAuthorized","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":true,"internalType":"address","name":"validatorAddress","type":"address"}],"name":"ValidatorCreated","type":"event"},{"inputs":[],"name":"MAX_ACTIVE_VALIDATORS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorizedContracts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_EMLTokenAddress","type":"address"},{"internalType":"uint256","name":"numberOfValidators","type":"uint256"}],"name":"createInitialValidators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_EMLTokenAddress","type":"address"},{"internalType":"address","name":"_owner","type":"address"}],"name":"createValidator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"deployedValidators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDeployedValidators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"name":"getValidatorOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"validatorAddress","type":"address"}],"name":"isValidatorActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bool","name":"_isAuthorized","type":"bool"}],"name":"setAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"validators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405234801561000f575f80fd5b50604051613021380380613021833981810160405281019061003191906101d7565b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100a2575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100999190610211565b60405180910390fd5b6100b1816100b860201b60201c565b505061022a565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101a68261017d565b9050919050565b6101b68161019c565b81146101c0575f80fd5b50565b5f815190506101d1816101ad565b92915050565b5f602082840312156101ec576101eb610179565b5b5f6101f9848285016101c3565b91505092915050565b61020b8161019c565b82525050565b5f6020820190506102245f830184610202565b92915050565b612dea806102375f395ff3fe608060405234801561000f575f80fd5b50600436106100cd575f3560e01c8063830e4eef1161008a578063d5b9221b11610064578063d5b9221b14610211578063eecea00014610241578063f2fde38b1461025d578063fa52c7d814610279576100cd565b8063830e4eef146101935780638da5cb5b146101c3578063bf5c0875146101e1576100cd565b80633278869a146100d15780633f97dd86146100ed57806342ad55ac1461010b5780635d8874621461013b578063715018a6146101595780638265377e14610163575b5f80fd5b6100eb60048036038101906100e69190610f02565b6102a9565b005b6100f56105c2565b6040516101029190610ff7565b60405180910390f35b61012560048036038101906101209190611017565b61064d565b604051610132919061105c565b60405180910390f35b61014361074b565b6040516101509190611084565b60405180910390f35b610161610750565b005b61017d6004803603810190610178919061109d565b610763565b60405161018a91906110d7565b60405180910390f35b6101ad60048036038101906101a891906110f0565b61079e565b6040516101ba91906110d7565b60405180910390f35b6101cb610a84565b6040516101d891906110d7565b60405180910390f35b6101fb60048036038101906101f69190611017565b610aab565b60405161020891906110d7565b60405180910390f35b61022b60048036038101906102269190611017565b610ba9565b604051610238919061105c565b60405180910390f35b61025b60048036038101906102569190611158565b610bc6565b005b61027760048036038101906102729190611017565b610c74565b005b610293600480360381019061028e9190611017565b610cf8565b6040516102a0919061105c565b60405180910390f35b6102b1610d15565b5f81116102f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ea90611216565b60405180910390fd5b6019811115610337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032e906112a4565b60405180910390fd5b5f805b600380549050811015610410576003818154811061035b5761035a6112c2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ef9190611303565b156104035781806103ff9061135b565b9250505b808060010191505061033a565b5060198260038054905061042491906113a2565b1115806104315750601981105b610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046790611445565b60405180910390fd5b5f5b828110156105bc575f84333060405161048a90610e64565b61049693929190611463565b604051809103905ff0801580156104af573d5f803e3d5ffd5b5090505f8190506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600381908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f02db26aafd16e8ecd93c4fa202917d50b1693f30b1594e57f7a432ede944eefc60405160405180910390a250508080600101915050610472565b50505050565b6060600380548060200260200160405190810160405280929190818152602001828054801561064357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105fa575b5050505050905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce906114e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611303565b9050919050565b601981565b610758610d15565b6107615f610d9c565b565b60038181548110610772575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f9061154a565b60405180910390fd5b5f805b600380549050811015610901576003818154811061084c5761084b6112c2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190611303565b156108f45781806108f09061135b565b9250505b808060010191505061082b565b5060198110610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093c906115d8565b60405180910390fd5b5f84843060405161095590610e64565b61096193929190611463565b604051809103905ff08015801561097a573d5f803e3d5ffd5b5090505f8190506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600381908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f02db26aafd16e8ecd93c4fa202917d50b1693f30b1594e57f7a432ede944eefc60405160405180910390a280935050505092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c906114e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16633741b3516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba2919061160a565b9050919050565b6002602052805f5260405f205f915054906101000a900460ff1681565b610bce610d15565b8060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3213ab8ec2ed122402f038736b41878b69ae9f61f49a7edd0666bce891d29fc982604051610c68919061105c565b60405180910390a25050565b610c7c610d15565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cec575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610ce391906110d7565b60405180910390fd5b610cf581610d9c565b50565b6001602052805f5260405f205f915054906101000a900460ff1681565b610d1d610e5d565b73ffffffffffffffffffffffffffffffffffffffff16610d3b610a84565b73ffffffffffffffffffffffffffffffffffffffff1614610d9a57610d5e610e5d565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610d9191906110d7565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b61177f8061163683390190565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e9e82610e75565b9050919050565b610eae81610e94565b8114610eb8575f80fd5b50565b5f81359050610ec981610ea5565b92915050565b5f819050919050565b610ee181610ecf565b8114610eeb575f80fd5b50565b5f81359050610efc81610ed8565b92915050565b5f8060408385031215610f1857610f17610e71565b5b5f610f2585828601610ebb565b9250506020610f3685828601610eee565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610f7281610e94565b82525050565b5f610f838383610f69565b60208301905092915050565b5f602082019050919050565b5f610fa582610f40565b610faf8185610f4a565b9350610fba83610f5a565b805f5b83811015610fea578151610fd18882610f78565b9750610fdc83610f8f565b925050600181019050610fbd565b5085935050505092915050565b5f6020820190508181035f83015261100f8184610f9b565b905092915050565b5f6020828403121561102c5761102b610e71565b5b5f61103984828501610ebb565b91505092915050565b5f8115159050919050565b61105681611042565b82525050565b5f60208201905061106f5f83018461104d565b92915050565b61107e81610ecf565b82525050565b5f6020820190506110975f830184611075565b92915050565b5f602082840312156110b2576110b1610e71565b5b5f6110bf84828501610eee565b91505092915050565b6110d181610e94565b82525050565b5f6020820190506110ea5f8301846110c8565b92915050565b5f806040838503121561110657611105610e71565b5b5f61111385828601610ebb565b925050602061112485828601610ebb565b9150509250929050565b61113781611042565b8114611141575f80fd5b50565b5f813590506111528161112e565b92915050565b5f806040838503121561116e5761116d610e71565b5b5f61117b85828601610ebb565b925050602061118c85828601611144565b9150509250929050565b5f82825260208201905092915050565b7f4e756d626572206f662076616c696461746f7273206d757374206265206772655f8201527f61746572207468616e2030000000000000000000000000000000000000000000602082015250565b5f611200602b83611196565b915061120b826111a6565b604082019050919050565b5f6020820190508181035f83015261122d816111f4565b9050919050565b7f43616e6e6f7420637265617465206d6f7265207468616e20746865206d6178695f8201527f6d756d20616c6c6f7765642076616c696461746f727300000000000000000000602082015250565b5f61128e603683611196565b915061129982611234565b604082019050919050565b5f6020820190508181035f8301526112bb81611282565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506112fd8161112e565b92915050565b5f6020828403121561131857611317610e71565b5b5f611325848285016112ef565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61136582610ecf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113975761139661132e565b5b600182019050919050565b5f6113ac82610ecf565b91506113b783610ecf565b92508282019050808211156113cf576113ce61132e565b5b92915050565b7f43616e6e6f742065786365656420746865206d6178696d756d206e756d6265725f8201527f206f662076616c696461746f7273000000000000000000000000000000000000602082015250565b5f61142f602e83611196565b915061143a826113d5565b604082019050919050565b5f6020820190508181035f83015261145c81611423565b9050919050565b5f6060820190506114765f8301866110c8565b61148360208301856110c8565b61149060408301846110c8565b949350505050565b7f56616c696461746f72206e6f7420666f756e64000000000000000000000000005f82015250565b5f6114cc601383611196565b91506114d782611498565b602082019050919050565b5f6020820190508181035f8301526114f9816114c0565b9050919050565b7f43616c6c6572206973206e6f7420617574686f72697a656400000000000000005f82015250565b5f611534601883611196565b915061153f82611500565b602082019050919050565b5f6020820190508181035f83015261156181611528565b9050919050565b7f4d6178696d756d206e756d626572206f66206163746976652076616c696461745f8201527f6f72732072656163686564000000000000000000000000000000000000000000602082015250565b5f6115c2602b83611196565b91506115cd82611568565b604082019050919050565b5f6020820190508181035f8301526115ef816115b6565b9050919050565b5f8151905061160481610ea5565b92915050565b5f6020828403121561161f5761161e610e71565b5b5f61162c848285016115f6565b9150509291505056fe60806040525f600460146101000a81548160ff021916908315150217905550348015610029575f80fd5b5060405161177f38038061177f833981810160405281019061004b91906103a9565b815f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100bc575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100b39190610408565b60405180910390fd5b6100cb8161028a60201b60201c565b508260015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503060065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050610421565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103788261034f565b9050919050565b6103888161036e565b8114610392575f80fd5b50565b5f815190506103a38161037f565b92915050565b5f805f606084860312156103c0576103bf61034b565b5b5f6103cd86828701610395565b93505060206103de86828701610395565b92505060406103ef86828701610395565b9150509250925092565b6104028161036e565b82525050565b5f60208201905061041b5f8301846103f9565b92915050565b6113518061042e5f395ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c8063725eecf1116100ab578063c10f74611161006f578063c10f7461146102bf578063d7368fd6146102dd578063e727530d146102fb578063f2fde38b14610319578063f851a440146103355761011f565b8063725eecf1146102195780638da5cb5b146102375780638e0a98f51461025557806393d26c1a14610285578063bddb92de146102b55761011f565b806322227e50116100f257806322227e50146101ab57806322f3e2d4146101b55780633741b351146101d35780636e9960c3146101f1578063715018a61461020f5761011f565b806302fb0c5e1461012357806308975904146101415780630c45192f1461015f5780631a521d831461018f575b5f80fd5b61012b610353565b6040516101389190610d24565b60405180910390f35b610149610366565b6040516101569190610d55565b60405180910390f35b61017960048036038101906101749190610dd7565b61036c565b6040516101869190610e3a565b60405180910390f35b6101a960048036038101906101a49190610ead565b610438565b005b6101b36104f1565b005b6101bd610663565b6040516101ca9190610d24565b60405180910390f35b6101db610679565b6040516101e89190610ee7565b60405180910390f35b6101f96106dc565b6040516102069190610ee7565b60405180910390f35b610217610704565b005b610221610717565b60405161022e9190610ee7565b60405180910390f35b61023f61077a565b60405161024c9190610ee7565b60405180910390f35b61026f600480360381019061026a9190610ead565b6107a1565b60405161027c9190610ee7565b60405180910390f35b61029f600480360381019061029a9190610ead565b6107d1565b6040516102ac9190610ee7565b60405180910390f35b6102bd610801565b005b6102c7610a29565b6040516102d49190610d55565b60405180910390f35b6102e5610ac8565b6040516102f29190610ee7565b60405180910390f35b610303610aed565b6040516103109190610ee7565b60405180910390f35b610333600480360381019061032e9190610ead565b610b12565b005b61033d610b96565b60405161034a9190610ee7565b60405180910390f35b600460149054906101000a900460ff1681565b60035481565b5f600460149054906101000a900460ff166103bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b390610f5a565b60405180910390fd5b60605f5b8484905081101561042157818585838181106103df576103de610f78565b5b90506020028101906103f19190610fb1565b604051602001610403939291906110a1565b604051602081830303815290604052915080806001019150506103c0565b505f81805190602001209050809250505092915050565b610440610bbb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036104ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a590611136565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6104f9610bbb565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105549190610ee7565b602060405180830381865afa15801561056f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610593919061117e565b90507f64f92430a863b716cb543f76c5e5261d58e00def4da37fc65d94e7973f85be5d816040516105c49190610d55565b60405180910390a169043c33c1937564800000811015610619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061090611219565b60405180910390fd5b6001600460146101000a81548160ff0219169083151502179055507feecaf0fad5fdd007a30b9e010c1e85793a74fea4c863836e1c17d073890b129660405160405180910390a150565b5f600460149054906101000a900460ff16905090565b5f60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61070c610bbb565b6107155f610c42565b565b5f60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6005602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610809610bbb565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108649190610ee7565b602060405180830381865afa15801561087f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a3919061117e565b90505f81116108e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108de90611281565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61092c61077a565b836040518363ffffffff1660e01b815260040161094a92919061129f565b6020604051808303815f875af1158015610966573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098a91906112f0565b505f600460146101000a81548160ff0219169083151502179055506109ad61077a565b73ffffffffffffffffffffffffffffffffffffffff167f9d03f7af1f34c5005e27fe2af80d574ce35cd499379a90d0e40290cf3b95fc7c826040516109f29190610d55565b60405180910390a27fac7c9a336f6590ba5c617c188a74b09fcbb0924ef0f93f03d9d47ab69c10070a60405160405180910390a150565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a849190610ee7565b602060405180830381865afa158015610a9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac3919061117e565b905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b1a610bbb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b8a575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b819190610ee7565b60405180910390fd5b610b9381610c42565b50565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bc3610d03565b73ffffffffffffffffffffffffffffffffffffffff16610be161077a565b73ffffffffffffffffffffffffffffffffffffffff1614610c4057610c04610d03565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c379190610ee7565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f8115159050919050565b610d1e81610d0a565b82525050565b5f602082019050610d375f830184610d15565b92915050565b5f819050919050565b610d4f81610d3d565b82525050565b5f602082019050610d685f830184610d46565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610d9757610d96610d76565b5b8235905067ffffffffffffffff811115610db457610db3610d7a565b5b602083019150836020820283011115610dd057610dcf610d7e565b5b9250929050565b5f8060208385031215610ded57610dec610d6e565b5b5f83013567ffffffffffffffff811115610e0a57610e09610d72565b5b610e1685828601610d82565b92509250509250929050565b5f819050919050565b610e3481610e22565b82525050565b5f602082019050610e4d5f830184610e2b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e7c82610e53565b9050919050565b610e8c81610e72565b8114610e96575f80fd5b50565b5f81359050610ea781610e83565b92915050565b5f60208284031215610ec257610ec1610d6e565b5b5f610ecf84828501610e99565b91505092915050565b610ee181610e72565b82525050565b5f602082019050610efa5f830184610ed8565b92915050565b5f82825260208201905092915050565b7f56616c696461746f72206973206e6f74206163746976650000000000000000005f82015250565b5f610f44601783610f00565b9150610f4f82610f10565b602082019050919050565b5f6020820190508181035f830152610f7181610f38565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112610fcd57610fcc610fa5565b5b80840192508235915067ffffffffffffffff821115610fef57610fee610fa9565b5b60208301925060018202360383131561100b5761100a610fad565b5b509250929050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f61103f82611013565b611049818561101d565b9350611059818560208601611027565b80840191505092915050565b5f81905092915050565b828183375f83830152505050565b5f6110888385611065565b935061109583858461106f565b82840190509392505050565b5f6110ac8286611035565b91506110b982848661107d565b9150819050949350505050565b7f496e76616c69642076616c696461746f7220666163746f7279206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f611120602183610f00565b915061112b826110c6565b604082019050919050565b5f6020820190508181035f83015261114d81611114565b9050919050565b61115d81610d3d565b8114611167575f80fd5b50565b5f8151905061117881611154565b92915050565b5f6020828403121561119357611192610d6e565b5b5f6111a08482850161116a565b91505092915050565b7f56616c696461746f72206d75737420686f6c64206174206c656173742032302c5f8201527f30303020454d4c00000000000000000000000000000000000000000000000000602082015250565b5f611203602783610f00565b915061120e826111a9565b604082019050919050565b5f6020820190508181035f830152611230816111f7565b9050919050565b7f4e6f20454d4c20746f6b656e7320746f207472616e73666572000000000000005f82015250565b5f61126b601983610f00565b915061127682611237565b602082019050919050565b5f6020820190508181035f8301526112988161125f565b9050919050565b5f6040820190506112b25f830185610ed8565b6112bf6020830184610d46565b9392505050565b6112cf81610d0a565b81146112d9575f80fd5b50565b5f815190506112ea816112c6565b92915050565b5f6020828403121561130557611304610d6e565b5b5f611312848285016112dc565b9150509291505056fea264697066735822122058f1e0bdd875ebb21ab69f8a11083c02fc1e5e24de36b548f89a8c3ae3e87da764736f6c634300081a0033a264697066735822122068b9513dafd6e88977ab1e5ce463f659e11d2281879b0694ba4983e8afb2a86a64736f6c634300081a003300000000000000000000000092eed0282c6665c9bcc81605a13a5c3b1e4dc7f2

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106100cd575f3560e01c8063830e4eef1161008a578063d5b9221b11610064578063d5b9221b14610211578063eecea00014610241578063f2fde38b1461025d578063fa52c7d814610279576100cd565b8063830e4eef146101935780638da5cb5b146101c3578063bf5c0875146101e1576100cd565b80633278869a146100d15780633f97dd86146100ed57806342ad55ac1461010b5780635d8874621461013b578063715018a6146101595780638265377e14610163575b5f80fd5b6100eb60048036038101906100e69190610f02565b6102a9565b005b6100f56105c2565b6040516101029190610ff7565b60405180910390f35b61012560048036038101906101209190611017565b61064d565b604051610132919061105c565b60405180910390f35b61014361074b565b6040516101509190611084565b60405180910390f35b610161610750565b005b61017d6004803603810190610178919061109d565b610763565b60405161018a91906110d7565b60405180910390f35b6101ad60048036038101906101a891906110f0565b61079e565b6040516101ba91906110d7565b60405180910390f35b6101cb610a84565b6040516101d891906110d7565b60405180910390f35b6101fb60048036038101906101f69190611017565b610aab565b60405161020891906110d7565b60405180910390f35b61022b60048036038101906102269190611017565b610ba9565b604051610238919061105c565b60405180910390f35b61025b60048036038101906102569190611158565b610bc6565b005b61027760048036038101906102729190611017565b610c74565b005b610293600480360381019061028e9190611017565b610cf8565b6040516102a0919061105c565b60405180910390f35b6102b1610d15565b5f81116102f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ea90611216565b60405180910390fd5b6019811115610337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032e906112a4565b60405180910390fd5b5f805b600380549050811015610410576003818154811061035b5761035a6112c2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ef9190611303565b156104035781806103ff9061135b565b9250505b808060010191505061033a565b5060198260038054905061042491906113a2565b1115806104315750601981105b610470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046790611445565b60405180910390fd5b5f5b828110156105bc575f84333060405161048a90610e64565b61049693929190611463565b604051809103905ff0801580156104af573d5f803e3d5ffd5b5090505f8190506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600381908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f02db26aafd16e8ecd93c4fa202917d50b1693f30b1594e57f7a432ede944eefc60405160405180910390a250508080600101915050610472565b50505050565b6060600380548060200260200160405190810160405280929190818152602001828054801561064357602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116105fa575b5050505050905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce906114e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107449190611303565b9050919050565b601981565b610758610d15565b6107615f610d9c565b565b60038181548110610772575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60025f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081f9061154a565b60405180910390fd5b5f805b600380549050811015610901576003818154811061084c5761084b6112c2565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166322f3e2d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190611303565b156108f45781806108f09061135b565b9250505b808060010191505061082b565b5060198110610945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093c906115d8565b60405180910390fd5b5f84843060405161095590610e64565b61096193929190611463565b604051809103905ff08015801561097a573d5f803e3d5ffd5b5090505f8190506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600381908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167f02db26aafd16e8ecd93c4fa202917d50b1693f30b1594e57f7a432ede944eefc60405160405180910390a280935050505092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2c906114e2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16633741b3516040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba2919061160a565b9050919050565b6002602052805f5260405f205f915054906101000a900460ff1681565b610bce610d15565b8060025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f3213ab8ec2ed122402f038736b41878b69ae9f61f49a7edd0666bce891d29fc982604051610c68919061105c565b60405180910390a25050565b610c7c610d15565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cec575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610ce391906110d7565b60405180910390fd5b610cf581610d9c565b50565b6001602052805f5260405f205f915054906101000a900460ff1681565b610d1d610e5d565b73ffffffffffffffffffffffffffffffffffffffff16610d3b610a84565b73ffffffffffffffffffffffffffffffffffffffff1614610d9a57610d5e610e5d565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610d9191906110d7565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b61177f8061163683390190565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e9e82610e75565b9050919050565b610eae81610e94565b8114610eb8575f80fd5b50565b5f81359050610ec981610ea5565b92915050565b5f819050919050565b610ee181610ecf565b8114610eeb575f80fd5b50565b5f81359050610efc81610ed8565b92915050565b5f8060408385031215610f1857610f17610e71565b5b5f610f2585828601610ebb565b9250506020610f3685828601610eee565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b610f7281610e94565b82525050565b5f610f838383610f69565b60208301905092915050565b5f602082019050919050565b5f610fa582610f40565b610faf8185610f4a565b9350610fba83610f5a565b805f5b83811015610fea578151610fd18882610f78565b9750610fdc83610f8f565b925050600181019050610fbd565b5085935050505092915050565b5f6020820190508181035f83015261100f8184610f9b565b905092915050565b5f6020828403121561102c5761102b610e71565b5b5f61103984828501610ebb565b91505092915050565b5f8115159050919050565b61105681611042565b82525050565b5f60208201905061106f5f83018461104d565b92915050565b61107e81610ecf565b82525050565b5f6020820190506110975f830184611075565b92915050565b5f602082840312156110b2576110b1610e71565b5b5f6110bf84828501610eee565b91505092915050565b6110d181610e94565b82525050565b5f6020820190506110ea5f8301846110c8565b92915050565b5f806040838503121561110657611105610e71565b5b5f61111385828601610ebb565b925050602061112485828601610ebb565b9150509250929050565b61113781611042565b8114611141575f80fd5b50565b5f813590506111528161112e565b92915050565b5f806040838503121561116e5761116d610e71565b5b5f61117b85828601610ebb565b925050602061118c85828601611144565b9150509250929050565b5f82825260208201905092915050565b7f4e756d626572206f662076616c696461746f7273206d757374206265206772655f8201527f61746572207468616e2030000000000000000000000000000000000000000000602082015250565b5f611200602b83611196565b915061120b826111a6565b604082019050919050565b5f6020820190508181035f83015261122d816111f4565b9050919050565b7f43616e6e6f7420637265617465206d6f7265207468616e20746865206d6178695f8201527f6d756d20616c6c6f7765642076616c696461746f727300000000000000000000602082015250565b5f61128e603683611196565b915061129982611234565b604082019050919050565b5f6020820190508181035f8301526112bb81611282565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506112fd8161112e565b92915050565b5f6020828403121561131857611317610e71565b5b5f611325848285016112ef565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61136582610ecf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113975761139661132e565b5b600182019050919050565b5f6113ac82610ecf565b91506113b783610ecf565b92508282019050808211156113cf576113ce61132e565b5b92915050565b7f43616e6e6f742065786365656420746865206d6178696d756d206e756d6265725f8201527f206f662076616c696461746f7273000000000000000000000000000000000000602082015250565b5f61142f602e83611196565b915061143a826113d5565b604082019050919050565b5f6020820190508181035f83015261145c81611423565b9050919050565b5f6060820190506114765f8301866110c8565b61148360208301856110c8565b61149060408301846110c8565b949350505050565b7f56616c696461746f72206e6f7420666f756e64000000000000000000000000005f82015250565b5f6114cc601383611196565b91506114d782611498565b602082019050919050565b5f6020820190508181035f8301526114f9816114c0565b9050919050565b7f43616c6c6572206973206e6f7420617574686f72697a656400000000000000005f82015250565b5f611534601883611196565b915061153f82611500565b602082019050919050565b5f6020820190508181035f83015261156181611528565b9050919050565b7f4d6178696d756d206e756d626572206f66206163746976652076616c696461745f8201527f6f72732072656163686564000000000000000000000000000000000000000000602082015250565b5f6115c2602b83611196565b91506115cd82611568565b604082019050919050565b5f6020820190508181035f8301526115ef816115b6565b9050919050565b5f8151905061160481610ea5565b92915050565b5f6020828403121561161f5761161e610e71565b5b5f61162c848285016115f6565b9150509291505056fe60806040525f600460146101000a81548160ff021916908315150217905550348015610029575f80fd5b5060405161177f38038061177f833981810160405281019061004b91906103a9565b815f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100bc575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100b39190610408565b60405180910390fd5b6100cb8161028a60201b60201c565b508260015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503060065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050610421565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103788261034f565b9050919050565b6103888161036e565b8114610392575f80fd5b50565b5f815190506103a38161037f565b92915050565b5f805f606084860312156103c0576103bf61034b565b5b5f6103cd86828701610395565b93505060206103de86828701610395565b92505060406103ef86828701610395565b9150509250925092565b6104028161036e565b82525050565b5f60208201905061041b5f8301846103f9565b92915050565b6113518061042e5f395ff3fe608060405234801561000f575f80fd5b506004361061011f575f3560e01c8063725eecf1116100ab578063c10f74611161006f578063c10f7461146102bf578063d7368fd6146102dd578063e727530d146102fb578063f2fde38b14610319578063f851a440146103355761011f565b8063725eecf1146102195780638da5cb5b146102375780638e0a98f51461025557806393d26c1a14610285578063bddb92de146102b55761011f565b806322227e50116100f257806322227e50146101ab57806322f3e2d4146101b55780633741b351146101d35780636e9960c3146101f1578063715018a61461020f5761011f565b806302fb0c5e1461012357806308975904146101415780630c45192f1461015f5780631a521d831461018f575b5f80fd5b61012b610353565b6040516101389190610d24565b60405180910390f35b610149610366565b6040516101569190610d55565b60405180910390f35b61017960048036038101906101749190610dd7565b61036c565b6040516101869190610e3a565b60405180910390f35b6101a960048036038101906101a49190610ead565b610438565b005b6101b36104f1565b005b6101bd610663565b6040516101ca9190610d24565b60405180910390f35b6101db610679565b6040516101e89190610ee7565b60405180910390f35b6101f96106dc565b6040516102069190610ee7565b60405180910390f35b610217610704565b005b610221610717565b60405161022e9190610ee7565b60405180910390f35b61023f61077a565b60405161024c9190610ee7565b60405180910390f35b61026f600480360381019061026a9190610ead565b6107a1565b60405161027c9190610ee7565b60405180910390f35b61029f600480360381019061029a9190610ead565b6107d1565b6040516102ac9190610ee7565b60405180910390f35b6102bd610801565b005b6102c7610a29565b6040516102d49190610d55565b60405180910390f35b6102e5610ac8565b6040516102f29190610ee7565b60405180910390f35b610303610aed565b6040516103109190610ee7565b60405180910390f35b610333600480360381019061032e9190610ead565b610b12565b005b61033d610b96565b60405161034a9190610ee7565b60405180910390f35b600460149054906101000a900460ff1681565b60035481565b5f600460149054906101000a900460ff166103bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b390610f5a565b60405180910390fd5b60605f5b8484905081101561042157818585838181106103df576103de610f78565b5b90506020028101906103f19190610fb1565b604051602001610403939291906110a1565b604051602081830303815290604052915080806001019150506103c0565b505f81805190602001209050809250505092915050565b610440610bbb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036104ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a590611136565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6104f9610bbb565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105549190610ee7565b602060405180830381865afa15801561056f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610593919061117e565b90507f64f92430a863b716cb543f76c5e5261d58e00def4da37fc65d94e7973f85be5d816040516105c49190610d55565b60405180910390a169043c33c1937564800000811015610619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061090611219565b60405180910390fd5b6001600460146101000a81548160ff0219169083151502179055507feecaf0fad5fdd007a30b9e010c1e85793a74fea4c863836e1c17d073890b129660405160405180910390a150565b5f600460149054906101000a900460ff16905090565b5f60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61070c610bbb565b6107155f610c42565b565b5f60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6005602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6006602052805f5260405f205f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610809610bbb565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108649190610ee7565b602060405180830381865afa15801561087f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a3919061117e565b90505f81116108e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108de90611281565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61092c61077a565b836040518363ffffffff1660e01b815260040161094a92919061129f565b6020604051808303815f875af1158015610966573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098a91906112f0565b505f600460146101000a81548160ff0219169083151502179055506109ad61077a565b73ffffffffffffffffffffffffffffffffffffffff167f9d03f7af1f34c5005e27fe2af80d574ce35cd499379a90d0e40290cf3b95fc7c826040516109f29190610d55565b60405180910390a27fac7c9a336f6590ba5c617c188a74b09fcbb0924ef0f93f03d9d47ab69c10070a60405160405180910390a150565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a849190610ee7565b602060405180830381865afa158015610a9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac3919061117e565b905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b1a610bbb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b8a575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610b819190610ee7565b60405180910390fd5b610b9381610c42565b50565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bc3610d03565b73ffffffffffffffffffffffffffffffffffffffff16610be161077a565b73ffffffffffffffffffffffffffffffffffffffff1614610c4057610c04610d03565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610c379190610ee7565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f33905090565b5f8115159050919050565b610d1e81610d0a565b82525050565b5f602082019050610d375f830184610d15565b92915050565b5f819050919050565b610d4f81610d3d565b82525050565b5f602082019050610d685f830184610d46565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112610d9757610d96610d76565b5b8235905067ffffffffffffffff811115610db457610db3610d7a565b5b602083019150836020820283011115610dd057610dcf610d7e565b5b9250929050565b5f8060208385031215610ded57610dec610d6e565b5b5f83013567ffffffffffffffff811115610e0a57610e09610d72565b5b610e1685828601610d82565b92509250509250929050565b5f819050919050565b610e3481610e22565b82525050565b5f602082019050610e4d5f830184610e2b565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e7c82610e53565b9050919050565b610e8c81610e72565b8114610e96575f80fd5b50565b5f81359050610ea781610e83565b92915050565b5f60208284031215610ec257610ec1610d6e565b5b5f610ecf84828501610e99565b91505092915050565b610ee181610e72565b82525050565b5f602082019050610efa5f830184610ed8565b92915050565b5f82825260208201905092915050565b7f56616c696461746f72206973206e6f74206163746976650000000000000000005f82015250565b5f610f44601783610f00565b9150610f4f82610f10565b602082019050919050565b5f6020820190508181035f830152610f7181610f38565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112610fcd57610fcc610fa5565b5b80840192508235915067ffffffffffffffff821115610fef57610fee610fa9565b5b60208301925060018202360383131561100b5761100a610fad565b5b509250929050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f61103f82611013565b611049818561101d565b9350611059818560208601611027565b80840191505092915050565b5f81905092915050565b828183375f83830152505050565b5f6110888385611065565b935061109583858461106f565b82840190509392505050565b5f6110ac8286611035565b91506110b982848661107d565b9150819050949350505050565b7f496e76616c69642076616c696461746f7220666163746f7279206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f611120602183610f00565b915061112b826110c6565b604082019050919050565b5f6020820190508181035f83015261114d81611114565b9050919050565b61115d81610d3d565b8114611167575f80fd5b50565b5f8151905061117881611154565b92915050565b5f6020828403121561119357611192610d6e565b5b5f6111a08482850161116a565b91505092915050565b7f56616c696461746f72206d75737420686f6c64206174206c656173742032302c5f8201527f30303020454d4c00000000000000000000000000000000000000000000000000602082015250565b5f611203602783610f00565b915061120e826111a9565b604082019050919050565b5f6020820190508181035f830152611230816111f7565b9050919050565b7f4e6f20454d4c20746f6b656e7320746f207472616e73666572000000000000005f82015250565b5f61126b601983610f00565b915061127682611237565b602082019050919050565b5f6020820190508181035f8301526112988161125f565b9050919050565b5f6040820190506112b25f830185610ed8565b6112bf6020830184610d46565b9392505050565b6112cf81610d0a565b81146112d9575f80fd5b50565b5f815190506112ea816112c6565b92915050565b5f6020828403121561130557611304610d6e565b5b5f611312848285016112dc565b9150509291505056fea264697066735822122058f1e0bdd875ebb21ab69f8a11083c02fc1e5e24de36b548f89a8c3ae3e87da764736f6c634300081a0033a264697066735822122068b9513dafd6e88977ab1e5ce463f659e11d2281879b0694ba4983e8afb2a86a64736f6c634300081a0033

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

00000000000000000000000092eed0282c6665c9bcc81605a13a5c3b1e4dc7f2

-----Decoded View---------------
Arg [0] : _initialOwner (address): 0x92eED0282c6665c9bcc81605A13a5C3b1E4Dc7F2

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000092eed0282c6665c9bcc81605a13a5c3b1e4dc7f2


Block Transaction 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
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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