contract VosaiInvitationAirdrop is Ownable {
  using SafeMath for uint256;

  VosaiInvitationToken public VOSAI;
  uint256 public AVAILABLE_TOTAL_SUPPLY = 40000000;
  uint256 public startTime;
 
  // Keeps track of whether or not a VOS.AI airdrop has been made to a particular address
  mapping (address => bool) public airdrops;   

  /**
    * @dev Constructor function - Set the VOSAI token address    
    */
  constructor() public {    
    startTime = now;
    VOSAI = new VosaiInvitationToken(this);
  }  
  /**
    * @dev perform a transfer of 1 VOS.AI to a list of recipients
    * @param _recipient is a list of recipients
    */
  function airdropTokens(address[] _recipient) public onlyOwner {
    require(now >= startTime);
    uint airdropped;
    for (uint256 i = 0; i<_recipient.length; i++) {
        if (!airdrops[_recipient[i]]) {
          airdrops[_recipient[i]] = true;
          require(VOSAI.transfer(_recipient[i], 1));
          airdropped = airdropped.add(1);
        }
    }    
    AVAILABLE_TOTAL_SUPPLY = AVAILABLE_TOTAL_SUPPLY.sub(airdropped);    
  }  
}
/**
 * @title VosaiInvitationToken token airdrop
 *
 * @dev Distribute airdrop tokens
 */
function airdropTokens(address[] _recipient) public onlyOwner {
  require(now >= startTime);
  uint airdropped;
  for (uint256 i = 0; i<_recipient.length; i++) {
      if (!airdrops[_recipient[i]]) {
        airdrops[_recipient[i]] = true;
        require(VOSAI.transfer(_recipient[i], 1));
        airdropped = airdropped.add(1);
      }
  }    
  AVAILABLE_TOTAL_SUPPLY = AVAILABLE_TOTAL_SUPPLY.sub(airdropped);    
}  

/**
 * @dev perform a transfer of 1 VOS.AI to a list of recipients
 * @param _recipient is a list of recipients
 */