d3j := proc(j1,j2,j3,m1,m2,m3)
      local sgn,aaa,m33,ja,top,bot,front,back,low,lhi,i1,i2,i3,i4,i5,k;

      m33 := -m3;
      if m1+m2<>m33 then RETURN(0) fi;
      ja := j1 + m1;
      if (2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0  then RETURN(0) fi;

      ja := j1 - m1;
      if (2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0 then RETURN(0) fi;

      ja := j2 + m2;
      if (2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0 then RETURN(0) fi;

      ja := j2 - m2;
      if(2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0 then RETURN(0) fi;

      ja := j3 + m33;
      if (2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0 then RETURN(0) fi;

      ja := j3 - m33;
      if (2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0 then RETURN(0) fi;

      top := sqrt((j3-m33)!*(j3+m33)!*(j2-m2)!*(j2+m2)!*(j1-m1)!*(j1+m1)!);

      ja := j1 + j2 - j3;
      if (2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0 then RETURN(0) fi;

      ja := j3 + j1 - j2;
      if (2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0 then RETURN(0) fi;

      ja := j3 + j2 - j1;
      if (2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0 then RETURN(0) fi;

      ja := j1 + j2 + j3 + 1;
      if (2*ja) mod 2<>0 then RETURN(0) fi;
      if ja<0 then RETURN(0) fi;

      front := sqrt((j1+j2-j3)!*(j3+j1-j2)!*(j3+j2-j1)!/(j1+j2+j3+1)!);

      i1 := j1+j2-j3;
      i2 := j1-m1;
      i3 := j2+m2;
      i4 := j3-j2+m1;
      i5 := j3-j1-m2;
      lhi := min(i1,i2,i3);
      low := max(0,-i4,-i5);

      back := 0;
      for k from low to lhi do
	 bot := (k)!*(i1-k)!*(i2-k)!*(i3-k)!*(i4+k)!*(i5+k)!;
	 back := back + (-1)^k * top / bot;
      od;
	 aaa := (-1)^(j1-j2-m3) * front * back;
         sgn := aaa/abs(aaa);
         sgn * sqrt(aaa^2);
	 
      end:
