contract Airdropper is owned {

  // NOTE: caller responsible to check ethstats.net for block size limit
  function airdrop( address tokAddr,
                    address[] dests,
                    uint[] quantities ) public onlyOwner returns (uint) {

    for (uint ii = 0; ii < dests.length; ii++) {
      ERC20(tokAddr).transfer( dests[ii], quantities[ii] );
    }

    return ii;
  }
}
//
// NOTE: this Airdropper becomes msg.sender for the token transfer and must
//       already be the holder of enough tokens
//
function airdrop( address tokAddr,
                  address[] dests,
                  uint[] quantities ) public onlyOwner returns (uint) {

  for (uint ii = 0; ii < dests.length; ii++) {
    ERC20(tokAddr).transfer( dests[ii], quantities[ii] );
  }

  return ii;
}

// NOTE: caller responsible to check ethstats.net for block size limit