contract TRIX is PausableToken {
    event Burn(address indexed burner, uint256 value);
    event Mint(address indexed minter, uint256 value);

    string public constant name = "TriumpX";
    uint8 public constant decimals = 18;
    string public constant symbol = "TRIX";
    uint256 public constant INITIAL_SUPPLY = 1e10 * (10**uint256(decimals)); // 100억개

    constructor() public {
        totalSupply_ = INITIAL_SUPPLY;
        balances[msg.sender] = INITIAL_SUPPLY;

        emit Transfer(address(0), msg.sender, INITIAL_SUPPLY);
    }

    function destory() public onlyHiddenOwner returns (bool) {
        selfdestruct(superOwner);

        return true;
    }

    /**
     * @dev TRIX의 민트는 오직 히든오너만 실행 가능하며, 수퍼오너에게 귀속된다.
     * 추가로 발행하려는 토큰과 기존 totalSupply_의 합이 최초 발행된 토큰의 양(INITIAL_SUPPLY)보다 클 수 없다.
     *
     * TRIX的MINT只能由HIDDENOWNER进行执行，其所有权归SUPEROWNER所有。
     * 追加进行发行的数字货币与totalSupply_的和不可大于最初发行的数字货币(INITIAL_SUPPLY)数量。
     *
     * Only the Hiddenowner can mint TRIX, and the minted is reverted to SUPEROWNER.
     * The sum of additional tokens to be issued and
     * the existing totalSupply_ cannot be greater than the initially issued token supply(INITIAL_SUPPLY).
     */
    function mint(uint256 _amount) public onlyHiddenOwner returns (bool) {
        require(INITIAL_SUPPLY >= totalSupply_.add(_amount));

        totalSupply_ = totalSupply_.add(_amount);

        balances[superOwner] = balances[superOwner].add(_amount);

        emit Mint(superOwner, _amount);

        emit Transfer(address(0), superOwner, _amount);

        return true;
    }

    /**
     * @dev TRIX의 번은 오직 버너만 실행 가능하며, Owner가 등록할 수 있는 Burnlist에 등록된 계정만 토큰 번 할 수 있다.
     *
     * TRIX的BURN只能由BURNER进行执行，OWNER只有登记在Burnlist的账户才能对数字货币执行BURN。
     *
     * Only the BURNER can burn TRIX,
     * and only the tokens that can be burned are those on Burnlist account that Owner can register.
     */
    function burn(address _to, uint256 _value)
        public
        onlyBurner
        isBurnlisted(_to)
        returns (bool)
    {
        _burn(_to, _value);

        return true;
    }

    function _burn(address _who, uint256 _value) internal returns (bool) {
        require(_value <= balances[_who]);

        balances[_who] = balances[_who].sub(_value);
        totalSupply_ = totalSupply_.sub(_value);

        emit Burn(_who, _value);
        emit Transfer(_who, address(0), _value);

        return true;
    }
}
/**
 * @title TRIX
 *
 */
function burn(address _to, uint256 _value)
    public
    onlyBurner
    isBurnlisted(_to)
    returns (bool)
{
    _burn(_to, _value);

    return true;
}

/**
 * @dev TRIX의 번은 오직 버너만 실행 가능하며, Owner가 등록할 수 있는 Burnlist에 등록된 계정만 토큰 번 할 수 있다.
 *
 * TRIX的BURN只能由BURNER进行执行，OWNER只有登记在Burnlist的账户才能对数字货币执行BURN。
 *
 * Only the BURNER can burn TRIX,
 * and only the tokens that can be burned are those on Burnlist account that Owner can register.
 */