rem: metrics->y_scale ) + 32 ) & -64;
add: metrics->y_scale ) + 0 ) & -64;
context:   Reset_Outline_Size( TT_Size  size )  {    TT_Face           face;    FT_Error          error = TT_Err_Ok;    FT_Size_Metrics*  metrics;    if ( size->ttmetrics.valid )      return TT_Err_Ok;    face = (TT_Face)size->root.face;    metrics = &size->root.metrics;    if ( metrics->x_ppem < 1 || metrics->y_ppem < 1 )      return TT_Err_Invalid_PPem;    /* compute new transformation */    if ( metrics->x_ppem >= metrics->y_ppem )    {      size->ttmetrics.scale   = metrics->x_scale;      size->ttmetrics.ppem    = metrics->x_ppem;      size->ttmetrics.x_ratio = 0x10000L;      size->ttmetrics.y_ratio = FT_MulDiv( metrics->y_ppem,                                           0x10000L,                                           metrics->x_ppem );    }    else    {      size->ttmetrics.scale   = metrics->y_scale;      size->ttmetrics.ppem    = metrics->y_ppem;      size->ttmetrics.x_ratio = FT_MulDiv( metrics->x_ppem,                                           0x10000L,                                           metrics->y_ppem );      size->ttmetrics.y_ratio = 0x10000L;    }    /* Compute root ascender, descender, test height, and max_advance */    metrics->ascender    = ( FT_MulFix( face->root.ascender,                                        metrics->y_scale ) + 32 ) & -64;    metrics->descender   = ( FT_MulFix( face->root.descender,                                        metrics->y_scale ) + 32 ) & -64;    metrics->height      = ( FT_MulFix( face->root.height,                                        metrics->y_scale ) + 32 ) & -64;    metrics->max_advance = ( FT_MulFix( face->root.max_advance_width,                                        metrics->x_scale ) + 32 ) & -64;#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS    /* set to `invalid' by default */    size->strike_index = 0xFFFFU;#endif#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER    {      TT_ExecContext  exec;      FT_UInt         i, j;      /* Scale the cvt values to the new ppem.          */      /* We use by default the y ppem to scale the CVT. */      for ( i = 0; i < size->cvt_size; i++ )        size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale );      /* All twilight points are originally zero */      for ( j = 0; j < (FT_UInt)size->twilight.n_points; j++ )      {        size->twilight.org[j].x = 0;        size->twilight.org[j].y = 0;        size->twilight.cur[j].x = 0;        size->twilight.cur[j].y = 0;      }      /* clear storage area */      for ( i = 0; i < (FT_UInt)size->storage_size; i++ )        size->storage[i] = 0;      size->GS = tt_default_graphics_state;      /* get execution context and run prep program */      if ( size->debug )        exec = size->context;      else        exec = TT_New_Context( face );      /* debugging instances have their own context */      if ( !exec )        return TT_Err_Could_Not_Find_Context;      TT_Load_Context( exec, face, size );      TT_Set_CodeRange( exec,                        tt_coderange_cvt,                        face->cvt_program,                        face->cvt_program_size );      TT_Clear_CodeRange( exec, tt_coderange_glyph );      exec->instruction_trap = FALSE;      exec->top     = 0;      exec->callTop = 0;      if ( face->cvt_program_size > 0 )      {        error = TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 );        if ( error )          goto End;        if ( !size->debug )          error = face->interpreter( exec );      }      else        error = TT_Err_Ok;      size->GS = exec->GS;      /* save default graphics state */    End:      TT_Save_Context( exec, size );      if ( !size->debug )        TT_Done_Context( exec );      /* debugging instances keep their context */    }#endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */    if ( !error )      size->ttmetrics.valid = TRUE;    return error;  }