false
false

Contract Address Details

Ubitcoin

Token
UbitCoin (UBIT)
Creator
0xad2c80–108733 at 0xff69a1–cf921f
Balance
0 USC
Tokens
Fetching tokens...
Transactions
13,010,282 Transactions
Transfers
971 Transfers
Gas Used
532,951,743,640
Last Balance Update
4613589
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been partially verified via Sourcify.
Contract name:
Ubitcoin




Optimization enabled
false
Compiler version
v0.8.24+commit.e11b9ed9




EVM Version
paris




Verified at
2024-05-29T11:07:26.082443Z

Contract source code

Sol2uml
new
// SPDX-License-Identifier: UNLICENSE
pragma solidity ^0.8.7;

interface IUBIT20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}

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

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    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) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

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

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

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

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

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract Ubitcoin is Context, IUBIT20, Ownable {
    using SafeMath for uint256;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping(address => bool) public allowedTransfer;
    uint256 public basePercent = 1;
    uint256 private _totalSupply;
   
    uint8 private _decimals;
    string private _symbol;
    string private _name;

    constructor() {
        _name = 'UbitCoin';
        _symbol = 'UBIT';   
        _decimals = 18;
        _totalSupply = 990000000 * 10 ** _decimals;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    function getOwner() external view override returns (address) {
        return owner();
    }

    function decimals() external view override returns (uint8) {
        return _decimals;
    }
  
    function symbol() external view override returns (string memory) {
        return _symbol;
    }

    function name() external view override returns (string memory) {
        return _name;
    }

   

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

    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }

    function viewAntiBotTransferStatus(address account) external view returns (bool) {
        return allowedTransfer[account];
    }

    function updateAllowedTransfer(address account, bool state) external onlyOwner {
        allowedTransfer[account] = state;
    }    

    function bulkupdateAllowedTransfer(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            allowedTransfer[accounts[i]] = state;
        }
    }

    function _burnToken(uint256 amount) private view returns (uint256)  {
        uint256 burnAmount = amount.mul(basePercent).div(1000);
        return burnAmount;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {    
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "UBIT20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "UBIT20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "UBIT20: transfer from the zero address");
        require(recipient != address(0), "UBIT20: transfer to the zero address");   
        require(!allowedTransfer[sender] && !allowedTransfer[recipient], "Transfer not allowed");
      
   
        _balances[sender] = _balances[sender].sub(amount, "UBIT20: transfer amount exceeds balance");
        uint256 transferAmount = amount;
        _balances[recipient] = _balances[recipient].add(transferAmount);
        emit Transfer(sender, recipient, transferAmount);
    }

    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "UBIT20: burn from the zero address");
        _balances[account] = _balances[account].sub(amount, "UBIT20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "UBIT20: approve from the zero address");
        require(spender != address(0), "UBIT20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "UBIT20: burn amount exceeds allowance"));
    }

    // Use this in case USC are sent to the contract by mistake
    function rescueUSC(uint256 weiAmount) external onlyOwner {
        require(address(this).balance >= weiAmount, "insufficient USC balance");
        payable(msg.sender).transfer(weiAmount);
    }

    function rescueAnyUBIT20Tokens(
        address _tokenAddr,
        address _to,
        uint256 _amount
    ) public onlyOwner {
        IUBIT20(_tokenAddr).transfer(_to, _amount);
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"allowedTransfer","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"basePercent","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"bulkupdateAllowedTransfer","inputs":[{"type":"address[]","name":"accounts","internalType":"address[]"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rescueAnyUBIT20Tokens","inputs":[{"type":"address","name":"_tokenAddr","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"rescueUSC","inputs":[{"type":"uint256","name":"weiAmount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateAllowedTransfer","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"bool","name":"state","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"viewAntiBotTransferStatus","inputs":[{"type":"address","name":"account","internalType":"address"}]}]
              

Contract Creation Code

Verify & Publish
0x608060405260016004553480156200001657600080fd5b506000620000296200025c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280600881526020017f55626974436f696e000000000000000000000000000000000000000000000000815250600890816200010d9190620004de565b506040518060400160405280600481526020017f554249540000000000000000000000000000000000000000000000000000000081525060079081620001549190620004de565b506012600660006101000a81548160ff021916908360ff160217905550600660009054906101000a900460ff16600a6200018f919062000755565b633b023380620001a09190620007a6565b600581905550600554600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6005546040516200024e919062000802565b60405180910390a36200081f565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002e657607f821691505b602082108103620002fc57620002fb6200029e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000327565b62000372868362000327565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003bf620003b9620003b3846200038a565b62000394565b6200038a565b9050919050565b6000819050919050565b620003db836200039e565b620003f3620003ea82620003c6565b84845462000334565b825550505050565b600090565b6200040a620003fb565b62000417818484620003d0565b505050565b5b818110156200043f576200043360008262000400565b6001810190506200041d565b5050565b601f8211156200048e57620004588162000302565b620004638462000317565b8101602085101562000473578190505b6200048b620004828562000317565b8301826200041c565b50505b505050565b600082821c905092915050565b6000620004b36000198460080262000493565b1980831691505092915050565b6000620004ce8383620004a0565b9150826002028217905092915050565b620004e98262000264565b67ffffffffffffffff8111156200050557620005046200026f565b5b620005118254620002cd565b6200051e82828562000443565b600060209050601f83116001811462000556576000841562000541578287015190505b6200054d8582620004c0565b865550620005bd565b601f198416620005668662000302565b60005b82811015620005905784890151825560018201915060208501945060208101905062000569565b86831015620005b05784890151620005ac601f891682620004a0565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000653578086048111156200062b576200062a620005c5565b5b60018516156200063b5780820291505b80810290506200064b85620005f4565b94506200060b565b94509492505050565b6000826200066e576001905062000741565b816200067e576000905062000741565b8160018114620006975760028114620006a257620006d8565b600191505062000741565b60ff841115620006b757620006b6620005c5565b5b8360020a915084821115620006d157620006d0620005c5565b5b5062000741565b5060208310610133831016604e8410600b8410161715620007125782820a9050838111156200070c576200070b620005c5565b5b62000741565b62000721848484600162000601565b925090508184048111156200073b576200073a620005c5565b5b81810290505b9392505050565b600060ff82169050919050565b600062000762826200038a565b91506200076f8362000748565b92506200079e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200065c565b905092915050565b6000620007b3826200038a565b9150620007c0836200038a565b9250828202620007d0816200038a565b91508282048414831517620007ea57620007e9620005c5565b5b5092915050565b620007fc816200038a565b82525050565b6000602082019050620008196000830184620007f1565b92915050565b612353806200082f6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d714610379578063a9059cbb146103a9578063b5c57145146103d9578063c5ac0ded146103f5578063dd62ed3e14610413578063f2fde38b1461044357610142565b8063715018a6146102f95780637fa199a814610303578063893d20e81461031f5780638da5cb5b1461033d57806395d89b411461035b57610142565b8063313ce5671161010a578063313ce567146101ff578063395093511461021d57806343528b511461024d5780634fdaf4861461027d57806362695eae1461029957806370a08231146102c957610142565b806306fdde0314610147578063095ea7b31461016557806316abd6d31461019557806318160ddd146101b157806323b872dd146101cf575b600080fd5b61014f61045f565b60405161015c91906117c4565b60405180910390f35b61017f600480360381019061017a919061188e565b6104f1565b60405161018c91906118e9565b60405180910390f35b6101af60048036038101906101aa9190611904565b61050f565b005b6101b9610628565b6040516101c69190611966565b60405180910390f35b6101e960048036038101906101e49190611904565b610632565b6040516101f691906118e9565b60405180910390f35b61020761070b565b604051610214919061199d565b60405180910390f35b6102376004803603810190610232919061188e565b610722565b60405161024491906118e9565b60405180910390f35b610267600480360381019061026291906119b8565b6107d5565b60405161027491906118e9565b60405180910390f35b61029760048036038101906102929190611b59565b61082b565b005b6102b360048036038101906102ae91906119b8565b61094f565b6040516102c091906118e9565b60405180910390f35b6102e360048036038101906102de91906119b8565b61096f565b6040516102f09190611966565b60405180910390f35b6103016109b8565b005b61031d60048036038101906103189190611bb5565b610b0b565b005b610327610c2d565b6040516103349190611bf1565b60405180910390f35b610345610c3c565b6040516103529190611bf1565b60405180910390f35b610363610c65565b60405161037091906117c4565b60405180910390f35b610393600480360381019061038e919061188e565b610cf7565b6040516103a091906118e9565b60405180910390f35b6103c360048036038101906103be919061188e565b610dc4565b6040516103d091906118e9565b60405180910390f35b6103f360048036038101906103ee9190611c0c565b610de2565b005b6103fd610ed2565b60405161040a9190611966565b60405180910390f35b61042d60048036038101906104289190611c4c565b610ed8565b60405161043a9190611966565b60405180910390f35b61045d600480360381019061045891906119b8565b610f5f565b005b60606008805461046e90611cbb565b80601f016020809104026020016040519081016040528092919081815260200182805461049a90611cbb565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b60006105056104fe611000565b8484611008565b6001905092915050565b610517611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059b90611d38565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016105df929190611d58565b6020604051808303816000875af11580156105fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106229190611d96565b50505050565b6000600554905090565b600061063f8484846111d1565b6107008461064b611000565b6106fb856040518060600160405280602981526020016122ce60299139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106b1611000565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115469092919063ffffffff16565b611008565b600190509392505050565b6000600660009054906101000a900460ff16905090565b60006107cb61072f611000565b846107c68560026000610740611000565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115aa90919063ffffffff16565b611008565b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610833611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790611d38565b60405180910390fd5b60005b825181101561094a5781600360008584815181106108e4576108e3611dc3565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506108c3565b505050565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109c0611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490611d38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b13611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790611d38565b60405180910390fd5b80471015610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90611e3e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c29573d6000803e3d6000fd5b5050565b6000610c37610c3c565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610c7490611cbb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca090611cbb565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610dba610d04611000565b84610db5856040518060600160405280602681526020016122a86026913960026000610d2e611000565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115469092919063ffffffff16565b611008565b6001905092915050565b6000610dd8610dd1611000565b84846111d1565b6001905092915050565b610dea611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90611d38565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60045481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f67611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90611d38565b60405180910390fd5b610ffd81611608565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90611ed0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90611f62565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111c49190611966565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790611ff4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690612086565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113535750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611389906120f2565b60405180910390fd5b6113fe816040518060600160405280602781526020016122f760279139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115469092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600081905061149881600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115aa90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115389190611966565b60405180910390a350505050565b600083831115829061158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158591906117c4565b60405180910390fd5b506000838561159d9190612141565b9050809150509392505050565b60008082846115b99190612175565b9050838110156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f5906121f5565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e90612287565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561176e578082015181840152602081019050611753565b60008484015250505050565b6000601f19601f8301169050919050565b600061179682611734565b6117a0818561173f565b93506117b0818560208601611750565b6117b98161177a565b840191505092915050565b600060208201905081810360008301526117de818461178b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611825826117fa565b9050919050565b6118358161181a565b811461184057600080fd5b50565b6000813590506118528161182c565b92915050565b6000819050919050565b61186b81611858565b811461187657600080fd5b50565b60008135905061188881611862565b92915050565b600080604083850312156118a5576118a46117f0565b5b60006118b385828601611843565b92505060206118c485828601611879565b9150509250929050565b60008115159050919050565b6118e3816118ce565b82525050565b60006020820190506118fe60008301846118da565b92915050565b60008060006060848603121561191d5761191c6117f0565b5b600061192b86828701611843565b935050602061193c86828701611843565b925050604061194d86828701611879565b9150509250925092565b61196081611858565b82525050565b600060208201905061197b6000830184611957565b92915050565b600060ff82169050919050565b61199781611981565b82525050565b60006020820190506119b2600083018461198e565b92915050565b6000602082840312156119ce576119cd6117f0565b5b60006119dc84828501611843565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611a228261177a565b810181811067ffffffffffffffff82111715611a4157611a406119ea565b5b80604052505050565b6000611a546117e6565b9050611a608282611a19565b919050565b600067ffffffffffffffff821115611a8057611a7f6119ea565b5b602082029050602081019050919050565b600080fd5b6000611aa9611aa484611a65565b611a4a565b90508083825260208201905060208402830185811115611acc57611acb611a91565b5b835b81811015611af55780611ae18882611843565b845260208401935050602081019050611ace565b5050509392505050565b600082601f830112611b1457611b136119e5565b5b8135611b24848260208601611a96565b91505092915050565b611b36816118ce565b8114611b4157600080fd5b50565b600081359050611b5381611b2d565b92915050565b60008060408385031215611b7057611b6f6117f0565b5b600083013567ffffffffffffffff811115611b8e57611b8d6117f5565b5b611b9a85828601611aff565b9250506020611bab85828601611b44565b9150509250929050565b600060208284031215611bcb57611bca6117f0565b5b6000611bd984828501611879565b91505092915050565b611beb8161181a565b82525050565b6000602082019050611c066000830184611be2565b92915050565b60008060408385031215611c2357611c226117f0565b5b6000611c3185828601611843565b9250506020611c4285828601611b44565b9150509250929050565b60008060408385031215611c6357611c626117f0565b5b6000611c7185828601611843565b9250506020611c8285828601611843565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611cd357607f821691505b602082108103611ce657611ce5611c8c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611d2260208361173f565b9150611d2d82611cec565b602082019050919050565b60006020820190508181036000830152611d5181611d15565b9050919050565b6000604082019050611d6d6000830185611be2565b611d7a6020830184611957565b9392505050565b600081519050611d9081611b2d565b92915050565b600060208284031215611dac57611dab6117f0565b5b6000611dba84828501611d81565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f696e73756666696369656e74205553432062616c616e63650000000000000000600082015250565b6000611e2860188361173f565b9150611e3382611df2565b602082019050919050565b60006020820190508181036000830152611e5781611e1b565b9050919050565b7f5542495432303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611eba60258361173f565b9150611ec582611e5e565b604082019050919050565b60006020820190508181036000830152611ee981611ead565b9050919050565b7f5542495432303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611f4c60238361173f565b9150611f5782611ef0565b604082019050919050565b60006020820190508181036000830152611f7b81611f3f565b9050919050565b7f5542495432303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611fde60268361173f565b9150611fe982611f82565b604082019050919050565b6000602082019050818103600083015261200d81611fd1565b9050919050565b7f5542495432303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061207060248361173f565b915061207b82612014565b604082019050919050565b6000602082019050818103600083015261209f81612063565b9050919050565b7f5472616e73666572206e6f7420616c6c6f776564000000000000000000000000600082015250565b60006120dc60148361173f565b91506120e7826120a6565b602082019050919050565b6000602082019050818103600083015261210b816120cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061214c82611858565b915061215783611858565b925082820390508181111561216f5761216e612112565b5b92915050565b600061218082611858565b915061218b83611858565b92508282019050808211156121a3576121a2612112565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006121df601b8361173f565b91506121ea826121a9565b602082019050919050565b6000602082019050818103600083015261220e816121d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061227160268361173f565b915061227c82612215565b604082019050919050565b600060208201905081810360008301526122a081612264565b905091905056fe5542495432303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f5542495432303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655542495432303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220a56c4d9b856b0a3b9061da003b17c2c77ad88f057a094f0babb8d7c537c8a44a64736f6c63430008180033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c8063715018a6116100b8578063a457c2d71161007c578063a457c2d714610379578063a9059cbb146103a9578063b5c57145146103d9578063c5ac0ded146103f5578063dd62ed3e14610413578063f2fde38b1461044357610142565b8063715018a6146102f95780637fa199a814610303578063893d20e81461031f5780638da5cb5b1461033d57806395d89b411461035b57610142565b8063313ce5671161010a578063313ce567146101ff578063395093511461021d57806343528b511461024d5780634fdaf4861461027d57806362695eae1461029957806370a08231146102c957610142565b806306fdde0314610147578063095ea7b31461016557806316abd6d31461019557806318160ddd146101b157806323b872dd146101cf575b600080fd5b61014f61045f565b60405161015c91906117c4565b60405180910390f35b61017f600480360381019061017a919061188e565b6104f1565b60405161018c91906118e9565b60405180910390f35b6101af60048036038101906101aa9190611904565b61050f565b005b6101b9610628565b6040516101c69190611966565b60405180910390f35b6101e960048036038101906101e49190611904565b610632565b6040516101f691906118e9565b60405180910390f35b61020761070b565b604051610214919061199d565b60405180910390f35b6102376004803603810190610232919061188e565b610722565b60405161024491906118e9565b60405180910390f35b610267600480360381019061026291906119b8565b6107d5565b60405161027491906118e9565b60405180910390f35b61029760048036038101906102929190611b59565b61082b565b005b6102b360048036038101906102ae91906119b8565b61094f565b6040516102c091906118e9565b60405180910390f35b6102e360048036038101906102de91906119b8565b61096f565b6040516102f09190611966565b60405180910390f35b6103016109b8565b005b61031d60048036038101906103189190611bb5565b610b0b565b005b610327610c2d565b6040516103349190611bf1565b60405180910390f35b610345610c3c565b6040516103529190611bf1565b60405180910390f35b610363610c65565b60405161037091906117c4565b60405180910390f35b610393600480360381019061038e919061188e565b610cf7565b6040516103a091906118e9565b60405180910390f35b6103c360048036038101906103be919061188e565b610dc4565b6040516103d091906118e9565b60405180910390f35b6103f360048036038101906103ee9190611c0c565b610de2565b005b6103fd610ed2565b60405161040a9190611966565b60405180910390f35b61042d60048036038101906104289190611c4c565b610ed8565b60405161043a9190611966565b60405180910390f35b61045d600480360381019061045891906119b8565b610f5f565b005b60606008805461046e90611cbb565b80601f016020809104026020016040519081016040528092919081815260200182805461049a90611cbb565b80156104e75780601f106104bc576101008083540402835291602001916104e7565b820191906000526020600020905b8154815290600101906020018083116104ca57829003601f168201915b5050505050905090565b60006105056104fe611000565b8484611008565b6001905092915050565b610517611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146105a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059b90611d38565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016105df929190611d58565b6020604051808303816000875af11580156105fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106229190611d96565b50505050565b6000600554905090565b600061063f8484846111d1565b6107008461064b611000565b6106fb856040518060600160405280602981526020016122ce60299139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006106b1611000565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115469092919063ffffffff16565b611008565b600190509392505050565b6000600660009054906101000a900460ff16905090565b60006107cb61072f611000565b846107c68560026000610740611000565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115aa90919063ffffffff16565b611008565b6001905092915050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610833611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b790611d38565b60405180910390fd5b60005b825181101561094a5781600360008584815181106108e4576108e3611dc3565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806001019150506108c3565b505050565b60036020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109c0611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4490611d38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b13611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790611d38565b60405180910390fd5b80471015610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90611e3e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610c29573d6000803e3d6000fd5b5050565b6000610c37610c3c565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060078054610c7490611cbb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca090611cbb565b8015610ced5780601f10610cc257610100808354040283529160200191610ced565b820191906000526020600020905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b6000610dba610d04611000565b84610db5856040518060600160405280602681526020016122a86026913960026000610d2e611000565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115469092919063ffffffff16565b611008565b6001905092915050565b6000610dd8610dd1611000565b84846111d1565b6001905092915050565b610dea611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6e90611d38565b60405180910390fd5b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60045481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f67611000565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90611d38565b60405180910390fd5b610ffd81611608565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90611ed0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90611f62565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111c49190611966565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790611ff4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690612086565b60405180910390fd5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113535750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611389906120f2565b60405180910390fd5b6113fe816040518060600160405280602781526020016122f760279139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115469092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600081905061149881600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115aa90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115389190611966565b60405180910390a350505050565b600083831115829061158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158591906117c4565b60405180910390fd5b506000838561159d9190612141565b9050809150509392505050565b60008082846115b99190612175565b9050838110156115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f5906121f5565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166e90612287565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561176e578082015181840152602081019050611753565b60008484015250505050565b6000601f19601f8301169050919050565b600061179682611734565b6117a0818561173f565b93506117b0818560208601611750565b6117b98161177a565b840191505092915050565b600060208201905081810360008301526117de818461178b565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611825826117fa565b9050919050565b6118358161181a565b811461184057600080fd5b50565b6000813590506118528161182c565b92915050565b6000819050919050565b61186b81611858565b811461187657600080fd5b50565b60008135905061188881611862565b92915050565b600080604083850312156118a5576118a46117f0565b5b60006118b385828601611843565b92505060206118c485828601611879565b9150509250929050565b60008115159050919050565b6118e3816118ce565b82525050565b60006020820190506118fe60008301846118da565b92915050565b60008060006060848603121561191d5761191c6117f0565b5b600061192b86828701611843565b935050602061193c86828701611843565b925050604061194d86828701611879565b9150509250925092565b61196081611858565b82525050565b600060208201905061197b6000830184611957565b92915050565b600060ff82169050919050565b61199781611981565b82525050565b60006020820190506119b2600083018461198e565b92915050565b6000602082840312156119ce576119cd6117f0565b5b60006119dc84828501611843565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611a228261177a565b810181811067ffffffffffffffff82111715611a4157611a406119ea565b5b80604052505050565b6000611a546117e6565b9050611a608282611a19565b919050565b600067ffffffffffffffff821115611a8057611a7f6119ea565b5b602082029050602081019050919050565b600080fd5b6000611aa9611aa484611a65565b611a4a565b90508083825260208201905060208402830185811115611acc57611acb611a91565b5b835b81811015611af55780611ae18882611843565b845260208401935050602081019050611ace565b5050509392505050565b600082601f830112611b1457611b136119e5565b5b8135611b24848260208601611a96565b91505092915050565b611b36816118ce565b8114611b4157600080fd5b50565b600081359050611b5381611b2d565b92915050565b60008060408385031215611b7057611b6f6117f0565b5b600083013567ffffffffffffffff811115611b8e57611b8d6117f5565b5b611b9a85828601611aff565b9250506020611bab85828601611b44565b9150509250929050565b600060208284031215611bcb57611bca6117f0565b5b6000611bd984828501611879565b91505092915050565b611beb8161181a565b82525050565b6000602082019050611c066000830184611be2565b92915050565b60008060408385031215611c2357611c226117f0565b5b6000611c3185828601611843565b9250506020611c4285828601611b44565b9150509250929050565b60008060408385031215611c6357611c626117f0565b5b6000611c7185828601611843565b9250506020611c8285828601611843565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611cd357607f821691505b602082108103611ce657611ce5611c8c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611d2260208361173f565b9150611d2d82611cec565b602082019050919050565b60006020820190508181036000830152611d5181611d15565b9050919050565b6000604082019050611d6d6000830185611be2565b611d7a6020830184611957565b9392505050565b600081519050611d9081611b2d565b92915050565b600060208284031215611dac57611dab6117f0565b5b6000611dba84828501611d81565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f696e73756666696369656e74205553432062616c616e63650000000000000000600082015250565b6000611e2860188361173f565b9150611e3382611df2565b602082019050919050565b60006020820190508181036000830152611e5781611e1b565b9050919050565b7f5542495432303a20617070726f76652066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611eba60258361173f565b9150611ec582611e5e565b604082019050919050565b60006020820190508181036000830152611ee981611ead565b9050919050565b7f5542495432303a20617070726f766520746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611f4c60238361173f565b9150611f5782611ef0565b604082019050919050565b60006020820190508181036000830152611f7b81611f3f565b9050919050565b7f5542495432303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611fde60268361173f565b9150611fe982611f82565b604082019050919050565b6000602082019050818103600083015261200d81611fd1565b9050919050565b7f5542495432303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061207060248361173f565b915061207b82612014565b604082019050919050565b6000602082019050818103600083015261209f81612063565b9050919050565b7f5472616e73666572206e6f7420616c6c6f776564000000000000000000000000600082015250565b60006120dc60148361173f565b91506120e7826120a6565b602082019050919050565b6000602082019050818103600083015261210b816120cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061214c82611858565b915061215783611858565b925082820390508181111561216f5761216e612112565b5b92915050565b600061218082611858565b915061218b83611858565b92508282019050808211156121a3576121a2612112565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006121df601b8361173f565b91506121ea826121a9565b602082019050919050565b6000602082019050818103600083015261220e816121d2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061227160268361173f565b915061227c82612215565b604082019050919050565b600060208201905081810360008301526122a081612264565b905091905056fe5542495432303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f5542495432303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655542495432303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220a56c4d9b856b0a3b9061da003b17c2c77ad88f057a094f0babb8d7c537c8a44a64736f6c63430008180033