function bnpSquareTo(r) {
  var x = this.abs();
  var x_array = x.array;
  var r_array = r.array;

  var i = r.t = 2*x.t;
  while(--i >= 0) r_array[i] = 0;
  for(i = 0; i < x.t-1; ++i) {
    var c = x.am(i,x_array[i],r,2*i,0,1);
    if((r_array[i+x.t]+=x.am(i+1,2*x_array[i],r,2*i+1,c,x.t-i-1)) >= BI_DV) {
      r_array[i+x.t] -= BI_DV;
      r_array[i+x.t+1] = 1;
    }
  }
  if(r.t > 0) r_array[r.t-1] += x.am(i,x_array[i],r,2*i,0,1);
  r.s = 0;
  r.clamp();
}
function bnpSquareTo(r) {
  var x = this.abs();
  var x_array = x.array;
  var r_array = r.array;

  var i = r.t = 2*x.t;
  while(--i >= 0) r_array[i] = 0;
  for(i = 0; i < x.t-1; ++i) {
    var c = x.am(i,x_array[i],r,2*i,0,1);
    if((r_array[i+x.t]+=x.am(i+1,2*x_array[i],r,2*i+1,c,x.t-i-1)) >= BI_DV) {
      r_array[i+x.t] -= BI_DV;
      r_array[i+x.t+1] = 1;
    }
  }
  if(r.t > 0) r_array[r.t-1] += x.am(i,x_array[i],r,2*i,0,1);
  r.s = 0;
  r.clamp();
}
function bnpSquareTo ( r ) { var x = this . abs ( ) ; var x_array = x . array ; var r_array = r . array ; var i = r . t = 2 * x . t ; while ( -- i >= 0 ) r_array [ i ] = 0 ; for ( i = 0 ; i < x . t - 1 ; ++ i ) { var c = x . am ( i , x_array [ i ] , r , 2 * i , 0 , 1 ) ; if ( ( r_array [ i + x . t ] += x . am ( i + 1 , 2 * x_array [ i ] , r , 2 * i + 1 , c , x . t - i - 1 ) ) >= BI_DV ) { r_array [ i + x . t ] -= BI_DV ; r_array [ i + x . t + 1 ] = 1 ; } } if ( r . t > 0 ) r_array [ r . t - 1 ] += x . am ( i , x_array [ i ] , r , 2 * i , 0 , 1 ) ; r . s = 0 ; r . clamp ( ) ; }
(protected) r = this^2, r != this (HAC 14.16)
( protected ) r = this^2 r ! = this ( HAC 14 . 16 )