contract Jcoin is MintableToken {
    string public name = "Jcoin";
    string public symbol = "JCO";
    uint8 public decimals = 18;
    
    address private constant COMPANY_ADDRESS = 0x695e23819F9F307318c471Ea698Bb1aa0C40Df25;
    address private constant REWARDS_ADDRESS = 0x9a1FD2632ad10d2e329312C7e947ee3Ba05663a5;
    address private constant ADVISORS_ADDRESS = 0x82d39148389837B7F5f9eC8B425EdaBc8F0edFA5;
    address private constant TEAM_ADDRESS = 0x83426931a7986D590b4B8633217EBf95c13Fa655;
    address private constant PRE_ICO_ADDRESS = 0x535FC3d183C7feCDB730F11cc276000880b373Cc;
    address private constant ICO_ADDRESS = 0xa17536ae64eb311cfdD9DB8bDf1c1997C691c383;
    
    uint256 private constant COMPANY_AMOUNT = 13860000;
    uint256 private constant REWARDS_AMOUNT = 6300000;
    uint256 private constant ADVISORS_AMOUNT = 4410000;
    uint256 private constant TEAM_AMOUNT = 6930000;
    uint256 private constant PRE_ICO_AMOUNT = 10500000;
    uint256 private constant ICO_AMOUNT = 21000000;
    uint256 private constant SUPPLY_AMOUNT = 63000000;
    
    function Jcoin() public {
        uint256 decimalPlace = 10 ** uint(decimals);
        
        totalSupply_ = SUPPLY_AMOUNT * decimalPlace;
        
        initialTransfer(COMPANY_ADDRESS, COMPANY_AMOUNT, decimalPlace);
        initialTransfer(REWARDS_ADDRESS, REWARDS_AMOUNT, decimalPlace);
        initialTransfer(ADVISORS_ADDRESS, ADVISORS_AMOUNT, decimalPlace);
        initialTransfer(TEAM_ADDRESS, TEAM_AMOUNT, decimalPlace);
        initialTransfer(PRE_ICO_ADDRESS, PRE_ICO_AMOUNT, decimalPlace);
        initialTransfer(ICO_ADDRESS, ICO_AMOUNT, decimalPlace);
    }
    
    /**
    * @dev Function Transfers the funds to accounts described in the whitepaper.
    */
    function initialTransfer(address _to, uint256 _amount, uint256 _decimalPlace) private { 
        balances[_to] = _amount.mul(_decimalPlace);
        Transfer(address(0), _to, balances[_to]);
    }
}
function initialTransfer(address _to, uint256 _amount, uint256 _decimalPlace) private { 
    balances[_to] = _amount.mul(_decimalPlace);
    Transfer(address(0), _to, balances[_to]);
}

/**
 * @dev Function Transfers the funds to accounts described in the whitepaper.
 */