false
false
0

Contract Address Details

0x266fd1FF80E3CecF04077b9F81BfCDF04b781fE2

Contract Name
Mint
Creator
0xf5e52d–ce59da at 0x54a82f–bfb90f
Balance
0 EOS
Tokens
Fetching tokens...
Transactions
47,862 Transactions
Transfers
14,390 Transfers
Gas Used
7,387,274,533
Last Balance Update
46789622
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
Mint




Optimization enabled
false
Compiler version
v0.8.17+commit.8df45f5f




EVM Version
byzantium




Verified at
2023-10-08T13:08:42.643740Z

Constructor Arguments

0x000000000000000000000000c3ab0d3a47051e871285b73a461a5462e0d40db300000000000000000000000000000000000000000000010f0cf064dd59200000

Arg [0] (address) : 0xc3ab0d3a47051e871285b73a461a5462e0d40db3
Arg [1] (uint256) : 5000000000000000000000

              

Contract source code

Sol2uml
new
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

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);
}


pragma solidity ^0.8.0;


abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


pragma solidity ^0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

pragma solidity ^0.8.0;

contract Mint is Ownable{
    using SafeMath for uint256;

    address public _token;

    uint256 public _currentAmount;

    uint256 public _totalCount;

    uint256 public _rate;

    bool public _poolEnabled;

    struct Person {
        bool initial;
        uint256 mintTime;
        uint256 startTime;
        uint256 inviteCount;
        uint256 twitterCount;
        uint256 telegramCount;
        uint256 claim;
        uint256 unclaim;

    }
    struct Invite {
        address addr;
        uint256 datetime;
    }

    mapping (address => Person) public _users;
    mapping (address => Invite[]) public _invites;
    mapping (address => address) public  _exitsCheck;

    constructor(address token,uint256 rate){
        _token = token; // Mint token address
        _rate = rate;
        _poolEnabled = false;
    }

    //* 1e18
    function startMint(address refer) public {
        require(_poolEnabled, "Not yet started");
        require(block.timestamp >= 1696903200,"Not yet started");        
        require(msg.sender == tx.origin, "Only external accounts can call this function");
        require(!isContract(msg.sender), "Only external accounts can call this function");
        require(!_users[msg.sender].initial,"repeat start");
        Person memory newPerson;
        newPerson.initial = true;
        newPerson.mintTime = block.timestamp;
        newPerson.startTime = block.timestamp;
        newPerson.inviteCount = 0;
        newPerson.twitterCount = 0;
        newPerson.telegramCount = 0;
        newPerson.claim = 0;
        newPerson.unclaim = 0;
        _users[msg.sender] = newPerson;
        _totalCount += 1;
        
        if(refer == address(0) || refer == msg.sender){
            return;
        }

        if(_exitsCheck[msg.sender] == address(0)){
            
            if(_users[refer].initial){

                uint256 unclaim = _getClaim2(refer);
                _users[refer].unclaim = unclaim;
                _users[refer].startTime = block.timestamp;
            }
             
            _users[refer].inviteCount += 1;
            Invite memory invite = Invite(msg.sender,block.timestamp);
            _invites[refer].push(invite);
            
            _exitsCheck[msg.sender] = refer;
        }


    }


    function withdraw() public  {
        require(_poolEnabled, "Not yet started");     
        require(block.timestamp >= 1696903200,"Not yet started");                
        require(msg.sender == tx.origin, "Only external accounts can call this function");
        require(!isContract(msg.sender), "Only external accounts can call this function");
        require(_users[msg.sender].initial,"initial error");
        require((block.timestamp - _users[msg.sender].startTime) > 0, "too fast");
        
        uint256 unclaim = _getClaim2(msg.sender);
        
        IERC20(_token).transfer(msg.sender,unclaim);
        
        _users[msg.sender].unclaim = 0;
        _users[msg.sender].claim += unclaim;
        _users[msg.sender].startTime = block.timestamp;

        _currentAmount += unclaim;

    }

    function getRewards(address addr) public view returns(uint256) {
        if(!_users[addr].initial){
            return 0;
        }

        uint256 unclaim = _getClaim2(addr);
        
        return unclaim;
    }


    function withdrawToken(address token, address recipient,uint amount) onlyOwner external {
        IERC20(token).transfer(recipient, amount);
    }

    function withdrawETH() onlyOwner external {
        payable(msg.sender).transfer(address(this).balance);
    }

    function isContract(address addr) internal view returns (bool) {
        uint32 size;
        assembly {
            size := extcodesize(addr)
        }
        return (size > 0);
    }

    function _getClaim1(address addr) internal view returns (uint256) {

        uint256 claim1_ = _users[addr].inviteCount * 6 + _users[addr].twitterCount + _users[addr].telegramCount + 2 ;
        if(claim1_ > 124 ){
             claim1_ = 124;
        }
        claim1_ = claim1_ * _rate * (block.timestamp - _users[addr].startTime);
        return claim1_;
    }

    function _getClaim2(address addr) internal view returns (uint256){
        uint256 claim2_ =  _getClaim1(addr);
        claim2_  += _users[addr].unclaim;
        return claim2_;
    }

    function updatePoolEnabled(bool enabled) external onlyOwner {
        _poolEnabled = enabled;
    }

    function twitter() public  {
        require(_poolEnabled, "Not yet started");      
        require(block.timestamp >= 1696903200,"Not yet started");        
        require(msg.sender == tx.origin, "Only external accounts can call this function");
        require(!isContract(msg.sender), "Only external accounts can call this function");
        if(_users[msg.sender].initial&&_users[msg.sender].twitterCount == 0)
        {
            uint256 unclaim = _getClaim2(msg.sender);
            _users[msg.sender].unclaim = unclaim;
            _users[msg.sender].startTime = block.timestamp;
            _users[msg.sender].twitterCount = 1;                            
        }      
    }    

    function telegram() public  {
        require(_poolEnabled, "Not yet started");  
        require(block.timestamp >= 1696903200,"Not yet started");            
        require(msg.sender == tx.origin, "Only external accounts can call this function");
        require(!isContract(msg.sender), "Only external accounts can call this function");
        if(_users[msg.sender].initial&&_users[msg.sender].telegramCount == 0)
        {
            uint256 unclaim = _getClaim2(msg.sender);
            _users[msg.sender].unclaim = unclaim;
            _users[msg.sender].startTime = block.timestamp;       
            _users[msg.sender].telegramCount = 1;
        }           
    }    
}        
        

Contract ABI

[{"type":"constructor","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"uint256","name":"rate","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_currentAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_exitsCheck","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"addr","internalType":"address"},{"type":"uint256","name":"datetime","internalType":"uint256"}],"name":"_invites","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"_poolEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_rate","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"_token","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalCount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"initial","internalType":"bool"},{"type":"uint256","name":"mintTime","internalType":"uint256"},{"type":"uint256","name":"startTime","internalType":"uint256"},{"type":"uint256","name":"inviteCount","internalType":"uint256"},{"type":"uint256","name":"twitterCount","internalType":"uint256"},{"type":"uint256","name":"telegramCount","internalType":"uint256"},{"type":"uint256","name":"claim","internalType":"uint256"},{"type":"uint256","name":"unclaim","internalType":"uint256"}],"name":"_users","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getRewards","inputs":[{"type":"address","name":"addr","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"startMint","inputs":[{"type":"address","name":"refer","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"telegram","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"twitter","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updatePoolEnabled","inputs":[{"type":"bool","name":"enabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdraw","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawETH","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawToken","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","indexed":true},{"type":"address","name":"newOwner","indexed":true}],"anonymous":false}]
              

Contract Creation Code

0x60806040523480156200001157600080fd5b506040516200274738038062002747833981810160405281019062000037919062000245565b6200006962000054620000d4640100000000026401000000009004565b620000dc640100000000026401000000009004565b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806004819055506000600560006101000a81548160ff02191690831515021790555050506200028c565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001d282620001a5565b9050919050565b620001e481620001c5565b8114620001f057600080fd5b50565b6000815190506200020481620001d9565b92915050565b6000819050919050565b6200021f816200020a565b81146200022b57600080fd5b50565b6000815190506200023f8162000214565b92915050565b600080604083850312156200025f576200025e620001a0565b5b60006200026f85828601620001f3565b925050602062000282858286016200022e565b9150509250929050565b6124ab806200029c6000396000f3fe608060405234801561001057600080fd5b5060043610610133576000357c01000000000000000000000000000000000000000000000000000000009004806383bebced116100bf578063e086e5ec1161008e578063e086e5ec146102a5578063eab26b91146102af578063ecd0c0c3146102cd578063f2fde38b146102eb578063ff4870c41461030757610133565b806383bebced14610245578063abfaeee014610263578063bb54ffe51461026d578063ca1bed751461028957610133565b80633ccfd60b116101065780633ccfd60b146101d957806347ecb665146101e35780634bb80ce6146101ed578063715018a61461020b57806379ee54f71461021557610133565b806301e336671461013857806308889e8d146101545780631b9e3fe9146101725780633cacd7d6146101a2575b600080fd5b610152600480360381019061014d9190611dbf565b610338565b005b61015c61046d565b6040516101699190611e2d565b60405180910390f35b61018c60048036038101906101879190611e48565b610480565b6040516101999190611e84565b60405180910390f35b6101bc60048036038101906101b79190611e48565b6104b3565b6040516101d0989796959493929190611eae565b60405180910390f35b6101e1610508565b005b6101eb610942565b005b6101f5610c19565b6040516102029190611f2c565b60405180910390f35b610213610c1f565b005b61022f600480360381019061022a9190611e48565b610cc0565b60405161023c9190611f2c565b60405180910390f35b61024d610d36565b60405161025a9190611f2c565b60405180910390f35b61026b610d3c565b005b61028760048036038101906102829190611f73565b611013565b005b6102a3600480360381019061029e9190611e48565b6110c5565b005b6102ad611789565b005b6102b761187e565b6040516102c49190611f2c565b60405180910390f35b6102d5611884565b6040516102e29190611e84565b60405180910390f35b61030560048036038101906103009190611e48565b6118aa565b005b610321600480360381019061031c9190611fa0565b6119ba565b60405161032f929190611fe0565b60405180910390f35b610340611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c490612066565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610424929190611fe0565b6020604051808303816000875af1158015610443573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610467919061209b565b50505050565b600560009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b600560009054906101000a900460ff16610557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054e90612114565b60405180910390fd5b636524b02042101561059e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059590612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906121a6565b60405180910390fd5b61061533611a23565b15610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db90612212565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154426107349190612261565b11610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076b906122e1565b60405180910390fd5b600061077f33611a3c565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016107fa929190611fe0565b6020604051808303816000875af1158015610819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083d919061209b565b506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160008282546108d89190612301565b9250508190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555080600260008282546109389190612301565b9250508190555050565b600560009054906101000a900460ff16610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890612114565b60405180910390fd5b636524b0204210156109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d906121a6565b60405180910390fd5b610a4f33611a23565b15610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a86906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff168015610b2d57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154145b15610c17576000610b3d33611a3c565b905080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550505b565b60025481565b610c27611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab90612066565b60405180910390fd5b610cbe6000611aa3565b565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16610d1f5760009050610d31565b6000610d2a83611a3c565b9050809150505b919050565b60045481565b600560009054906101000a900460ff16610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290612114565b60405180910390fd5b636524b020421015610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906121a6565b60405180910390fd5b610e4933611a23565b15610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff168015610f2757506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154145b15611011576000610f3733611a3c565b905080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550505b565b61101b611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90612066565b60405180910390fd5b80600560006101000a81548160ff02191690831515021790555050565b600560009054906101000a900460ff16611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b90612114565b60405180910390fd5b636524b02042101561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c0906121a6565b60405180910390fd5b6111d233611a23565b15611212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611209906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990612381565b60405180910390fd5b6112aa611cdf565b600181600001901515908115158152505042816020018181525050428160400181815250506000816060018181525050600081608001818152505060008160a001818152505060008160c001818152505060008160e001818152505080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506001600360008282546113c29190612301565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061142f57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561143a5750611786565b600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361178457600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156115bf57600061152d83611a3c565b905080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282546116129190612301565b92505081905550600060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152509050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b50565b611791611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590612066565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561187b573d6000803e3d6000fd5b50565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118b2611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690612066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590612413565b60405180910390fd5b6119b781611aa3565b50565b600760205281600052604060002081815481106119d657600080fd5b9060005260206000209060020201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b600033905090565b600080823b905060008163ffffffff1611915050919050565b600080611a4883611b67565b9050600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015481611a989190612301565b905080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806002600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015460068060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611c409190612433565b611c4a9190612301565b611c549190612301565b611c5e9190612301565b9050607c811115611c6e57607c90505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015442611cbc9190612261565b60045482611cca9190612433565b611cd49190612433565b905080915050919050565b604051806101000160405280600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d5682611d2b565b9050919050565b611d6681611d4b565b8114611d7157600080fd5b50565b600081359050611d8381611d5d565b92915050565b6000819050919050565b611d9c81611d89565b8114611da757600080fd5b50565b600081359050611db981611d93565b92915050565b600080600060608486031215611dd857611dd7611d26565b5b6000611de686828701611d74565b9350506020611df786828701611d74565b9250506040611e0886828701611daa565b9150509250925092565b60008115159050919050565b611e2781611e12565b82525050565b6000602082019050611e426000830184611e1e565b92915050565b600060208284031215611e5e57611e5d611d26565b5b6000611e6c84828501611d74565b91505092915050565b611e7e81611d4b565b82525050565b6000602082019050611e996000830184611e75565b92915050565b611ea881611d89565b82525050565b600061010082019050611ec4600083018b611e1e565b611ed1602083018a611e9f565b611ede6040830189611e9f565b611eeb6060830188611e9f565b611ef86080830187611e9f565b611f0560a0830186611e9f565b611f1260c0830185611e9f565b611f1f60e0830184611e9f565b9998505050505050505050565b6000602082019050611f416000830184611e9f565b92915050565b611f5081611e12565b8114611f5b57600080fd5b50565b600081359050611f6d81611f47565b92915050565b600060208284031215611f8957611f88611d26565b5b6000611f9784828501611f5e565b91505092915050565b60008060408385031215611fb757611fb6611d26565b5b6000611fc585828601611d74565b9250506020611fd685828601611daa565b9150509250929050565b6000604082019050611ff56000830185611e75565b6120026020830184611e9f565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612050602083612009565b915061205b8261201a565b602082019050919050565b6000602082019050818103600083015261207f81612043565b9050919050565b60008151905061209581611f47565b92915050565b6000602082840312156120b1576120b0611d26565b5b60006120bf84828501612086565b91505092915050565b7f4e6f742079657420737461727465640000000000000000000000000000000000600082015250565b60006120fe600f83612009565b9150612109826120c8565b602082019050919050565b6000602082019050818103600083015261212d816120f1565b9050919050565b7f4f6e6c792065787465726e616c206163636f756e74732063616e2063616c6c2060008201527f746869732066756e6374696f6e00000000000000000000000000000000000000602082015250565b6000612190602d83612009565b915061219b82612134565b604082019050919050565b600060208201905081810360008301526121bf81612183565b9050919050565b7f696e697469616c206572726f7200000000000000000000000000000000000000600082015250565b60006121fc600d83612009565b9150612207826121c6565b602082019050919050565b6000602082019050818103600083015261222b816121ef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061226c82611d89565b915061227783611d89565b925082820390508181111561228f5761228e612232565b5b92915050565b7f746f6f2066617374000000000000000000000000000000000000000000000000600082015250565b60006122cb600883612009565b91506122d682612295565b602082019050919050565b600060208201905081810360008301526122fa816122be565b9050919050565b600061230c82611d89565b915061231783611d89565b925082820190508082111561232f5761232e612232565b5b92915050565b7f7265706561742073746172740000000000000000000000000000000000000000600082015250565b600061236b600c83612009565b915061237682612335565b602082019050919050565b6000602082019050818103600083015261239a8161235e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123fd602683612009565b9150612408826123a1565b604082019050919050565b6000602082019050818103600083015261242c816123f0565b9050919050565b600061243e82611d89565b915061244983611d89565b925082820261245781611d89565b9150828204841483151761246e5761246d612232565b5b509291505056fea26469706673582212201714c6e98ca7e5e9ba6cabd3f32cf6dc8ca25965d1f72bb2b35460aa8661db6d64736f6c63430008110033000000000000000000000000c3ab0d3a47051e871285b73a461a5462e0d40db300000000000000000000000000000000000000000000010f0cf064dd59200000

Deployed ByteCode

0x608060405234801561001057600080fd5b5060043610610133576000357c01000000000000000000000000000000000000000000000000000000009004806383bebced116100bf578063e086e5ec1161008e578063e086e5ec146102a5578063eab26b91146102af578063ecd0c0c3146102cd578063f2fde38b146102eb578063ff4870c41461030757610133565b806383bebced14610245578063abfaeee014610263578063bb54ffe51461026d578063ca1bed751461028957610133565b80633ccfd60b116101065780633ccfd60b146101d957806347ecb665146101e35780634bb80ce6146101ed578063715018a61461020b57806379ee54f71461021557610133565b806301e336671461013857806308889e8d146101545780631b9e3fe9146101725780633cacd7d6146101a2575b600080fd5b610152600480360381019061014d9190611dbf565b610338565b005b61015c61046d565b6040516101699190611e2d565b60405180910390f35b61018c60048036038101906101879190611e48565b610480565b6040516101999190611e84565b60405180910390f35b6101bc60048036038101906101b79190611e48565b6104b3565b6040516101d0989796959493929190611eae565b60405180910390f35b6101e1610508565b005b6101eb610942565b005b6101f5610c19565b6040516102029190611f2c565b60405180910390f35b610213610c1f565b005b61022f600480360381019061022a9190611e48565b610cc0565b60405161023c9190611f2c565b60405180910390f35b61024d610d36565b60405161025a9190611f2c565b60405180910390f35b61026b610d3c565b005b61028760048036038101906102829190611f73565b611013565b005b6102a3600480360381019061029e9190611e48565b6110c5565b005b6102ad611789565b005b6102b761187e565b6040516102c49190611f2c565b60405180910390f35b6102d5611884565b6040516102e29190611e84565b60405180910390f35b61030560048036038101906103009190611e48565b6118aa565b005b610321600480360381019061031c9190611fa0565b6119ba565b60405161032f929190611fe0565b60405180910390f35b610340611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146103cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c490612066565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401610424929190611fe0565b6020604051808303816000875af1158015610443573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610467919061209b565b50505050565b600560009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60066020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b600560009054906101000a900460ff16610557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054e90612114565b60405180910390fd5b636524b02042101561059e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059590612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461060c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610603906121a6565b60405180910390fd5b61061533611a23565b15610655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064c906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff166106e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106db90612212565b60405180910390fd5b6000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154426107349190612261565b11610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076b906122e1565b60405180910390fd5b600061077f33611a3c565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004016107fa929190611fe0565b6020604051808303816000875af1158015610819573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083d919061209b565b506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060160008282546108d89190612301565b9250508190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555080600260008282546109389190612301565b9250508190555050565b600560009054906101000a900460ff16610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890612114565b60405180910390fd5b636524b0204210156109d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d906121a6565b60405180910390fd5b610a4f33611a23565b15610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a86906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff168015610b2d57506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154145b15610c17576000610b3d33611a3c565b905080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550505b565b60025481565b610c27611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab90612066565b60405180910390fd5b610cbe6000611aa3565b565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16610d1f5760009050610d31565b6000610d2a83611a3c565b9050809150505b919050565b60045481565b600560009054906101000a900460ff16610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8290612114565b60405180910390fd5b636524b020421015610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc990612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906121a6565b60405180910390fd5b610e4933611a23565b15610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e80906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff168015610f2757506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154145b15611011576000610f3733611a3c565b905080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550505b565b61101b611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f90612066565b60405180910390fd5b80600560006101000a81548160ff02191690831515021790555050565b600560009054906101000a900460ff16611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b90612114565b60405180910390fd5b636524b02042101561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290612114565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c0906121a6565b60405180910390fd5b6111d233611a23565b15611212576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611209906121a6565b60405180910390fd5b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156112a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129990612381565b60405180910390fd5b6112aa611cdf565b600181600001901515908115158152505042816020018181525050428160400181815250506000816060018181525050600081608001818152505060008160a001818152505060008160c001818152505060008160e001818152505080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701559050506001600360008282546113c29190612301565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148061142f57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561143a5750611786565b600073ffffffffffffffffffffffffffffffffffffffff16600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361178457600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16156115bf57600061152d83611a3c565b905080600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007018190555042600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160008282546116129190612301565b92505081905550600060405180604001604052803373ffffffffffffffffffffffffffffffffffffffff168152602001428152509050600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505082600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505b50565b611791611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181590612066565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015801561187b573d6000803e3d6000fd5b50565b60035481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118b2611a1b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193690612066565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a590612413565b60405180910390fd5b6119b781611aa3565b50565b600760205281600052604060002081815481106119d657600080fd5b9060005260206000209060020201600091509150508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b600033905090565b600080823b905060008163ffffffff1611915050919050565b600080611a4883611b67565b9050600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206007015481611a989190612301565b905080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806002600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015460068060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154611c409190612433565b611c4a9190612301565b611c549190612301565b611c5e9190612301565b9050607c811115611c6e57607c90505b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015442611cbc9190612261565b60045482611cca9190612433565b611cd49190612433565b905080915050919050565b604051806101000160405280600015158152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611d5682611d2b565b9050919050565b611d6681611d4b565b8114611d7157600080fd5b50565b600081359050611d8381611d5d565b92915050565b6000819050919050565b611d9c81611d89565b8114611da757600080fd5b50565b600081359050611db981611d93565b92915050565b600080600060608486031215611dd857611dd7611d26565b5b6000611de686828701611d74565b9350506020611df786828701611d74565b9250506040611e0886828701611daa565b9150509250925092565b60008115159050919050565b611e2781611e12565b82525050565b6000602082019050611e426000830184611e1e565b92915050565b600060208284031215611e5e57611e5d611d26565b5b6000611e6c84828501611d74565b91505092915050565b611e7e81611d4b565b82525050565b6000602082019050611e996000830184611e75565b92915050565b611ea881611d89565b82525050565b600061010082019050611ec4600083018b611e1e565b611ed1602083018a611e9f565b611ede6040830189611e9f565b611eeb6060830188611e9f565b611ef86080830187611e9f565b611f0560a0830186611e9f565b611f1260c0830185611e9f565b611f1f60e0830184611e9f565b9998505050505050505050565b6000602082019050611f416000830184611e9f565b92915050565b611f5081611e12565b8114611f5b57600080fd5b50565b600081359050611f6d81611f47565b92915050565b600060208284031215611f8957611f88611d26565b5b6000611f9784828501611f5e565b91505092915050565b60008060408385031215611fb757611fb6611d26565b5b6000611fc585828601611d74565b9250506020611fd685828601611daa565b9150509250929050565b6000604082019050611ff56000830185611e75565b6120026020830184611e9f565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612050602083612009565b915061205b8261201a565b602082019050919050565b6000602082019050818103600083015261207f81612043565b9050919050565b60008151905061209581611f47565b92915050565b6000602082840312156120b1576120b0611d26565b5b60006120bf84828501612086565b91505092915050565b7f4e6f742079657420737461727465640000000000000000000000000000000000600082015250565b60006120fe600f83612009565b9150612109826120c8565b602082019050919050565b6000602082019050818103600083015261212d816120f1565b9050919050565b7f4f6e6c792065787465726e616c206163636f756e74732063616e2063616c6c2060008201527f746869732066756e6374696f6e00000000000000000000000000000000000000602082015250565b6000612190602d83612009565b915061219b82612134565b604082019050919050565b600060208201905081810360008301526121bf81612183565b9050919050565b7f696e697469616c206572726f7200000000000000000000000000000000000000600082015250565b60006121fc600d83612009565b9150612207826121c6565b602082019050919050565b6000602082019050818103600083015261222b816121ef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061226c82611d89565b915061227783611d89565b925082820390508181111561228f5761228e612232565b5b92915050565b7f746f6f2066617374000000000000000000000000000000000000000000000000600082015250565b60006122cb600883612009565b91506122d682612295565b602082019050919050565b600060208201905081810360008301526122fa816122be565b9050919050565b600061230c82611d89565b915061231783611d89565b925082820190508082111561232f5761232e612232565b5b92915050565b7f7265706561742073746172740000000000000000000000000000000000000000600082015250565b600061236b600c83612009565b915061237682612335565b602082019050919050565b6000602082019050818103600083015261239a8161235e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123fd602683612009565b9150612408826123a1565b604082019050919050565b6000602082019050818103600083015261242c816123f0565b9050919050565b600061243e82611d89565b915061244983611d89565b925082820261245781611d89565b9150828204841483151761246e5761246d612232565b5b509291505056fea26469706673582212201714c6e98ca7e5e9ba6cabd3f32cf6dc8ca25965d1f72bb2b35460aa8661db6d64736f6c63430008110033