if (bn_wexpand(rr,max+1) == NULL) return(0);
if (bn_wexpand(rr,max+1) == NULL) goto err;
int BN_sqr(BIGNUM *r, BIGNUM *a, BN_CTX *ctx)	{	int max,al;	BIGNUM *tmp,*rr;#ifdef BN_COUNTprintf("BN_sqr %d * %d\n",a->top,a->top);#endif	bn_check_top(a);	tmp= &(ctx->bn[ctx->tos]);	rr=(a != r)?r: (&ctx->bn[ctx->tos+1]);	al=a->top;	if (al <= 0)		{		r->top=0;		return(1);		}	max=(al+al);	if (bn_wexpand(rr,max+1) == NULL) return(0);	r->neg=0;	if (al == 4)		{#ifndef BN_SQR_COMBA		BN_ULONG t[8];		bn_sqr_normal(rr->d,a->d,4,t);#else		bn_sqr_comba4(rr->d,a->d);#endif		}	else if (al == 8)		{#ifndef BN_SQR_COMBA		BN_ULONG t[16];		bn_sqr_normal(rr->d,a->d,8,t);#else		bn_sqr_comba8(rr->d,a->d);#endif		}	else 		{#if defined(BN_RECURSION)		if (al < BN_SQR_RECURSIVE_SIZE_NORMAL)			{			BN_ULONG t[BN_SQR_RECURSIVE_SIZE_NORMAL*2];			bn_sqr_normal(rr->d,a->d,al,t);			}		else			{			int j,k;			j=BN_num_bits_word((BN_ULONG)al);			j=1<<(j-1);			k=j+j;			if (al == j)				{				if (bn_wexpand(a,k*2) == NULL) return(0);				if (bn_wexpand(tmp,k*2) == NULL) return(0);				bn_sqr_recursive(rr->d,a->d,al,tmp->d);				}			else				{				if (bn_wexpand(tmp,max) == NULL) return(0);				bn_sqr_normal(rr->d,a->d,al,tmp->d);				}			}#else		if (bn_wexpand(tmp,max) == NULL) return(0);		bn_sqr_normal(rr->d,a->d,al,tmp->d);#endif		}	rr->top=max;	if ((max > 0) && (rr->d[max-1] == 0)) rr->top--;	if (rr != r) BN_copy(r,rr);	return(1);	}