text:
package igeo.gui;

import java.awt.*;
import java.awt.geom.*;
import java.util.ArrayList;
import java.text.*;
import java.lang.reflect.*;

import igeo.*;

/**
   Viewer window to show parameters and relationship of parameters.
   Implementation is not completed at all yet.

   @author Satoru Sugihara
*/
public class IParameterViewer extends Component{

    /** top down flow or bottom up flow */
    public static boolean bottomUp=true; // false; //

    public static Color bgcolor = Color.white;

    public static int paramXSpacing=160;
    public static int paramYSpacing=40;

    public ArrayList<IParameter> parameters;
    public ArrayList<IParameterGraphic> pgraphics;

    public IDoubleBuffer db;

    public IParameterViewer(int x, int y, int width, int height){
	super();
	setBounds(x,y,width,height);
	parameters = new ArrayList<IParameter>();
	pgraphics = new ArrayList<IParameterGraphic>();
	db = new IDoubleBuffer(this);
    }

    public IParameterGraphic addParameter(IParameter param, int x, int y){
	if(!parameters.contains(param)){
	    parameters.add(param);
	    IParameterGraphic pg = new IParameterGraphic(param);
	    pgraphics.add(pg);
	    pg.setSize(getFontMetrics(IParameterGraphic.font));
	    pg.setLocation(x,y);
	    // add child elements recursively
	    //IParameter[] params = IParameterGraphic.getOperand(param);
	    IParameter[] params = IParameterGraphic.getOperand2(param);
	    for(int i=0; params!=null && i<params.length; i++){
		int px = x+paramXSpacing*i;
		int py = y+paramYSpacing;
		if(!bottomUp) py = y-paramYSpacing;
		pg.addLink(addParameter(params[i],px,py));
	    }
	    return pg;
	}
	else{
	    return findParameterGraphic(param, pgraphics);
	}

    }

    public void paint(Graphics g){
	Graphics og= db.getGraphics();

	og.setColor(bgcolor);
	og.fillRect(0,0,getWidth(),getHeight());

	for(int i=0; i<pgraphics.size(); i++){
	    pgraphics.get(i).paint((Graphics2D)og);
	}
	og.drawRect(0,0,getWidth()-1,getHeight()-1);

	db.paint(g);
    }
    public void update(Graphics g){ paint(g); }

    public void setSize(Dimension d){
	this.setSize(d.width, d.height);
    }
    public void setSize(int w, int h){
	super.setSize(w,h);
	db.setSize(w,h);
    }

    public static IParameterGraphic
	findParameterGraphic(IParameter param,
			     ArrayList<IParameterGraphic> parameters){
	for(int i=0; i<parameters.size(); i++)
	    if(parameters.get(i).parameter == param) return parameters.get(i);
	return null;
    }

    public static class IParameterGraphic{

	public static int topBlank=0;
	public static int bottomBlank=6;
	public static int leftBlank=4;
	public static int rightBlank=6; //4;
	public static int handleHeight=4;
	public static int handleWidth=8;
	public static int handleGap=6;
	public static int cornerSizeX=6;
	public static int cornerSizeY=8;

	public static Color bgcolor=new Color(140,140,140,100);
	//public static Color fgcolor=Color.black;
	public static Color typeColor=new Color(80,80,80);
	public static Color valueColor=Color.black;
	public static Color handleColor=new Color(60,60,60);
	public static Color linkColor=new Color(0,0,0,192);
	public static BasicStroke linkStroke =
	    new BasicStroke(0.5f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);

	public static int fontSize=12;
	public static Font font = new Font("Sanserif", Font.PLAIN, fontSize);

	public static boolean showValue=true; //false;

	public String type, value;
	//public String label;
	public Rectangle bounds;
	public GeneralPath bgShape;
	public int fontHeight, fontWidth1, fontWidth2;

	public int inputNum=0;

	public IParameter parameter;
	public ArrayList<IParameterGraphic> linkedParameters=null;

	public IParameterGraphic(IParameter p){
	    //setParameter(p);
	    setParameter2(p);
	}

	public void addLink(IParameter linked, ArrayList<IParameterGraphic> parameters){
	    IParameterGraphic pg = findParameterGraphic(linked, parameters);
	    if(pg!=null) addLink(pg);
	    else{
		IOut.p("parameter cannot be found"); //
	    }
	}

	public void addLink(IParameterGraphic linked){
	    if(linkedParameters==null)
		linkedParameters = new ArrayList<IParameterGraphic>();
	    linkedParameters.add(linked);
	    inputNum = linkedParameters.size();
	}

	public Point getInputLocation(int i){
	    return new Point(bounds.x+i*(handleGap+handleWidth)+handleWidth/2,
			     bounds.y+(bottomUp?bounds.height:0));
	}

	public Point getOutputLocation(){
	    return new Point(bounds.x+handleWidth/2, bounds.y+(bottomUp?0:bounds.height));
	}

	public void paint(Graphics2D g){

	    drawBGShape(g);

	    //if(label!=null){
	    if(type!=null){

		g.setFont(font);
		//g.setColor(fgcolor);
		//g.drawString(label, bounds.x+leftBlank, bounds.y+topBlank+fontHeight);

		g.setColor(typeColor);
		g.drawString(type, bounds.x+leftBlank, bounds.y+topBlank+fontHeight);
		g.setColor(valueColor);
		g.drawString(value, bounds.x+leftBlank+fontWidth1, bounds.y+topBlank+fontHeight);

	    }

	    // input handle
	    for(int i=0; i<inputNum; i++){
		g.setColor(handleColor);
		g.fillRect(bounds.x + i*(handleGap+handleWidth),
			   bounds.y + (bottomUp?(bounds.height-handleHeight):0),
			   handleWidth, handleHeight);

		g.setColor(linkColor);
		g.setStroke(linkStroke);
		Point linkPt1 = linkedParameters.get(i).getOutputLocation();
		Point linkPt2 = this.getInputLocation(i);
		g.drawLine(linkPt1.x, linkPt1.y, linkPt2.x, linkPt2.y);
		//g.draw(new Line2D.Float(linkPt1.x, linkPt1.y, linkPt2.x, linkPt2.y));
	    }

	    // output handle
	    g.setColor(handleColor);
	    g.fillRect(bounds.x, bounds.y+(bottomUp?0:bounds.height-handleHeight),
		       handleWidth, handleHeight);
	}

	//public void setLabel(String label){ this.label=label; }
	//public void setLabel(String type, String value){ label = type + ":" + value; }
	public void setLabel(String type, String value){
	    this.type = type + ": ";
	    this.value = value;
	}

	public void setLocation(int x, int y){
	    if(bounds==null) bounds = new Rectangle();
	    bounds.x=x; bounds.y=y;
	}
	public void setSize(int w, int h){
	    if(bounds==null) bounds = new Rectangle();
	    bounds.width=w; bounds.height=h;
	}
	public void setSize(FontMetrics metrics){
	    fontHeight = metrics.getAscent()+metrics.getDescent();

	    //IOut.p("parameter="+parameter);
	    //IOut.p("type="+type);
	    //IOut.p("value="+value);
	    fontWidth1 = metrics.stringWidth(type);
	    fontWidth2 = metrics.stringWidth(value);
	    if(bounds==null) bounds = new Rectangle();
	    bounds.width = fontWidth1 + fontWidth2 + leftBlank + rightBlank;
	    bounds.height = fontHeight + topBlank + bottomBlank;
	}

	public void drawBGShape(Graphics2D g){
	    if(bgShape==null){
		bgShape = new GeneralPath(GeneralPath.WIND_EVEN_ODD,6);
		bgShape.moveTo(bounds.x,bounds.y);
		bgShape.lineTo(bounds.x,bounds.y+bounds.height);
		if(bottomUp){
		    bgShape.lineTo(bounds.x+bounds.width,bounds.y+bounds.height);
		    bgShape.lineTo(bounds.x+bounds.width,bounds.y+cornerSizeY);
		    bgShape.lineTo(bounds.x+bounds.width-cornerSizeX,bounds.y);
		}
		else{
		    bgShape.lineTo(bounds.x+bounds.width-cornerSizeX,bounds.y+bounds.height);
		    bgShape.lineTo(bounds.x+bounds.width,bounds.y+bounds.height-cornerSizeY);
		    bgShape.lineTo(bounds.x+bounds.width,bounds.y);
		}
		bgShape.closePath();
	    }
	    g.setColor(bgcolor);
	    g.fill(bgShape);
	}

	public void setParameter2(IParameter p){
	    String type=null;
	    String value=null;

	    parameter = p;

	    if(p instanceof IReferenceParameter) p = ((IReferenceParameter)p).operator();

	    if(p instanceof IBoolOp){
		type="bool";
		if(p instanceof IBool) value = toString((IBool)p);
	    }
	    else if(p instanceof IIntegerOp){
		type="int";
		if(p instanceof IInteger) value = toString((IInteger)p);
	    }
	    else if(p instanceof IDoubleOp){
		type="double";
		if(p instanceof IDouble) value = toString((IDouble)p);
	    }
	    else if(p instanceof IVec2Op){
		type="vector2D";
		if(p instanceof IVec2) value = toString((IVec2)p);
	    }
	    else if(p instanceof IVecOp){
		type="vector3D";
		if(p instanceof IVec) value = toString((IVec)p);
	    }
	    else if(p instanceof IVec4Op){
		type="vector4D";
		if(p instanceof IVec4) value = toString((IVec4)p);
	    }

	    if(value==null){
		if(!(p instanceof IEntityParameter)){
		    value = p.getClass().toString();
		    int idx=-1;
		    if((idx=value.lastIndexOf('$'))>0) value=value.substring(++idx);
		    else if((idx=value.lastIndexOf('.'))>0) value=value.substring(++idx);
		    else if((idx=value.lastIndexOf(' '))>0) value=value.substring(++idx);
		    value = value.toLowerCase();
		}
		else value = "unknown";
	    }

	    setLabel(type,value);
	}

	public void setParameter(IParameter p){
	    String type=null;
	    String value=null;
	    parameter = p;
	    if(p instanceof IBoolOp){
		type = "bool";

		IBoolOp op = (IBoolOp)p;
		if(op instanceof IBoolR) op = ((IBoolR)op).operator();

		if(op instanceof IBool) value = toString((IBool)op);
		else{
		    if(op instanceof IBoolR.And) value="and";
		    else if(op instanceof IBoolR.Or) value="or";
		    else if(op instanceof IBoolR.Not) value="not";
		    else{ IOut.p("no such operator class "+op); value="?"; }

		    if(showValue) value+=" <"+toString(op.get())+">";
		}
	    }
	    else if(p instanceof IIntegerOp){
		type = "int";

		IIntegerOp op = (IIntegerOp)p;
		if(op instanceof IIntegerR) op = ((IIntegerR)op).operator();

		if(op instanceof IInteger) value = toString((IInteger)op);
		else{
		    if(op instanceof IIntegerR.Add) value="add";
		    else if(op instanceof IIntegerR.Sub) value="sub";
		    else if(op instanceof IIntegerR.Mul) value="mul";
		    else if(op instanceof IIntegerR.Div) value="div";
		    else if(op instanceof IIntegerR.Neg) value="neg";
		    else if(op instanceof IIntegerR.Mod) value="mod";
		    else if(op instanceof IIntegerR.FromDouble) value="fromDouble";
		    else{ IOut.p("no such operator "+op); value="?"; }

		    if(showValue) value+=" <"+toString(op.get())+">";
		}
	    }
	    else if(p instanceof IDoubleOp){
		type = "double";

		IDoubleOp op = (IDoubleOp)p;
		if(op instanceof IDoubleR) op = ((IDoubleR)op).operator();

		if(op instanceof IDouble) value = toString((IDouble)op);
		else{
		    if(op instanceof IDoubleR.Add) value="add";
		    else if(op instanceof IDoubleR.Sub) value="sub";
		    else if(op instanceof IDoubleR.Mul) value="mul";
		    else if(op instanceof IDoubleR.Div) value="div";
		    else if(op instanceof IDoubleR.Neg) value="neg";
		    else if(op instanceof IDoubleR.Inv) value="inv";
		    else if(op instanceof IDoubleR.Abs) value="abs";
		    else if(op instanceof IDoubleR.FromInt) value="fromInt";
		    else if(op instanceof IDoubleR.Pow) value="pow";
		    else if(op instanceof IDoubleR.Sq) value="sq";
		    else if(op instanceof IDoubleR.Sqrt) value="sqrt";
		    else if(op instanceof IDoubleR.Exp) value="exp";
		    else if(op instanceof IDoubleR.Log) value="log";
		    else if(op instanceof IDoubleR.Sin) value="sin";
		    else if(op instanceof IDoubleR.Cos) value="cos";
		    else if(op instanceof IDoubleR.Tan) value="tan";
		    else if(op instanceof IDoubleR.ASin) value="asin";
		    else if(op instanceof IDoubleR.ACos) value="acos";
		    else if(op instanceof IDoubleR.ATan) value="atan";
		    else if(op instanceof IDoubleR.ATan2) value="atan2";
		    else if(op instanceof IDoubleR.Deg) value="deg";
		    else if(op instanceof IDoubleR.Rad) value="rad";
		    else if(op instanceof IVec2R.Dot) value="dot";
		    else if(op instanceof IVec2R.Angle) value="angle";
		    else if(op instanceof IVec2R.Len) value="len";
		    else if(op instanceof IVec2R.Len2) value="len2";
		    else if(op instanceof IVec2R.X) value="x";
		    else if(op instanceof IVec2R.Y) value="y";
		    else if(op instanceof IVecR.Dot) value="dot";
		    else if(op instanceof IVecR.Angle) value="angle";
		    //else if(op instanceof IVecR.AngleWithAxis) value="angleWithAxis";
		    else if(op instanceof IVecR.Len) value="len";
		    else if(op instanceof IVecR.Len2) value="len2";
		    else if(op instanceof IVecR.X) value="x";
		    else if(op instanceof IVecR.Y) value="y";
		    else if(op instanceof IVecR.Z) value="z";
		    else if(op instanceof IVec4R.X) value="x";
		    else if(op instanceof IVec4R.Y) value="y";
		    else if(op instanceof IVec4R.Z) value="z";
		    else if(op instanceof IVec4R.W) value="w";
		    else{ IOut.p("no such operator "+op); value="?"; }

		    if(showValue) value+=" <"+toString(op.get())+">";
		}
	    }
	    else if(p instanceof IVec2Op){
		type = "vector2D";

		IVec2Op op = (IVec2Op)p;
		if(op instanceof IVec2R) op = ((IVec2R)op).operator();

		if(op instanceof IVec2) value = toString((IVec2)op);
		else{
		    if(op instanceof IVec2R.Add) value="add";
		    else if(op instanceof IVec2R.Sub) value="sub";
		    else if(op instanceof IVec2R.Mul) value="mul";
		    else if(op instanceof IVec2R.Div) value="div";
		    else if(op instanceof IVec2R.Neg) value="neg";
		    else if(op instanceof IVec2R.Rot) value="rot";
		    else if(op instanceof IVec2R.FromXY) value="fromXY";
		    else if(op instanceof IVec2R.Unit) value="unit";
		    else if(op instanceof IVec2R.Ortho) value="ortho";
		    else if(op instanceof IVec2R.SetLen) value="setLen";
		    else{ IOut.p("no such operator "+op); value="?"; }

		    if(showValue) value+=" <"+toString(op.get())+">";
		}
	    }
	    else if(p instanceof IVecOp){
		type = "vector3D";

		IVecOp op = (IVecOp)p;
		if(op instanceof IVecR) op = ((IVecR)op).operator();

		if(op instanceof IVec) value = toString((IVec)op);
		else{
		    if(op instanceof IVecR.Add) value="add";
		    else if(op instanceof IVecR.Sub) value="sub";
		    else if(op instanceof IVecR.Mul) value="mul";
		    else if(op instanceof IVecR.Div) value="div";
		    else if(op instanceof IVecR.Neg) value="neg";
		    else if(op instanceof IVecR.FromXYZ) value="fromXYZ";
		    else if(op instanceof IVecR.Cross) value="cross";
		    else if(op instanceof IVec2R.Cross) value="cross";
		    else if(op instanceof IVecR.Rot) value="rot";
		    else if(op instanceof IVecR.Unit) value="unit";
		    else if(op instanceof IVecR.SetLen) value="setLen";
		    else{ IOut.p("no such operator "+op); value="?"; }

		    if(showValue) value+=" <"+toString(op.get())+">";
		}
	    }
	    else if(p instanceof IVec4Op){
		type = "vector4D";

		IVec4Op op = (IVec4Op)p;
		if(op instanceof IVec4R) op = ((IVec4R)op).operator();

		if(op instanceof IVec4) value = toString((IVec4)op);
		else{
		    if(op instanceof IVec4R.FromVec) value="fromVec";
		    else if(op instanceof IVec4R.FromVecAndW) value="fromVecW";
		    else if(op instanceof IVec4R.FromXYZ) value="fromXYZ";
		    else if(op instanceof IVec4R.FromXYZW) value="fromXYZW";
		    else if(op instanceof IVec4R.Add) value="add";
		    else if(op instanceof IVec4R.Sub) value="sub";
		    else if(op instanceof IVec4R.Mul) value="mul";
		    else if(op instanceof IVec4R.Div) value="div";
		    else if(op instanceof IVec4R.Neg) value="neg";
		    else if(op instanceof IVec4R.Cross) value="cross";
		    else if(op instanceof IVec4R.Rot) value="rot";
		    else if(op instanceof IVec4R.Unit) value="unit";
		    else if(op instanceof IVec4R.SetLen) value="setLen";
		    else{ IOut.p("no such operator "+op); value="?"; }

		    if(showValue) value+=" <"+toString(op.get())+">";
		}
	    }
	    else IOut.p("no such class "+p);

	    setLabel(type, value);
	}

	public static IParameter[] getOperand2(IParameter p){
	    if(p instanceof IReferenceParameter) p = ((IReferenceParameter)p).operator();
	    if(p instanceof IEntityParameter) return null;

	    Field[] f = p.getClass().getFields();
	    ArrayList<IParameter> ops=null;
	    IOut.p(p.toString());
	    for(int i=0; i<f.length; i++){
		IOut.p("field"+i+" "+f[i].toString()); //

		if(!Modifier.isStatic(f[i].getModifiers())){
		    Class type = f[i].getType();
		    Class[] scls = type.getInterfaces();
		    boolean flag=false;
		    for(int j=0; !flag&&j<scls.length; j++)
			if(scls[j].equals(IParameter.class)) flag=true;
		    if(flag){
			if(ops==null) ops=new ArrayList<IParameter>();
			IParameter op = null;
			try{ op = (IParameter)f[i].get(p); }
			catch(Exception e){ e.printStackTrace(); }
			if(op!=null) ops.add(op);
		    }
		}
	    }
	    if(ops==null || ops.size()==0) return null;
	    IParameter[] operands = new IParameter[ops.size()];
	    for(int i=0; i<ops.size(); i++) operands[i] = ops.get(i);
	    return operands;
	}

	public static IParameter[] getOperand(IParameter p){

	    if(p instanceof IBoolOp){
		IBoolOp op = (IBoolOp)p;
		if(op instanceof IBoolR) op = ((IBoolR)op).operator();

		if(op instanceof IBool) return null;
		if(op instanceof IBoolR.And)
		    return new IParameter[]{ ((IBoolR.And)op).v1, ((IBoolR.And)op).v2 };
		if(op instanceof IBoolR.Or)
		    return new IParameter[]{ ((IBoolR.Or)op).v1, ((IBoolR.Or)op).v2 };
		if(op instanceof IBoolR.Not)
		    return new IParameter[]{ ((IBoolR.Not)op).v };
		IOut.p("ERROR: no matching operation class in IBoolR");
		IOut.p(op); //
		return null;
	    }
	    if(p instanceof IIntegerOp){
		IIntegerOp op = (IIntegerOp)p;
		if(op instanceof IIntegerR) op = ((IIntegerR)op).operator();

		if(op instanceof IInteger) return null;
		if(op instanceof IIntegerR.Add)
		    return new IParameter[]{ ((IIntegerR.Add)op).v1,
					      ((IIntegerR.Add)op).v2 };
		if(op instanceof IIntegerR.Sub)
		    return new IParameter[]{ ((IIntegerR.Sub)op).v1,
					      ((IIntegerR.Sub)op).v2 };
		if(op instanceof IIntegerR.Mul)
		    return new IParameter[]{ ((IIntegerR.Mul)op).v1,
					      ((IIntegerR.Mul)op).v2 };
		if(op instanceof IIntegerR.Div)
		    return new IParameter[]{ ((IIntegerR.Div)op).v1,
					      ((IIntegerR.Div)op).v2 };
		if(op instanceof IIntegerR.Neg)
		    return new IParameter[]{ ((IIntegerR.Neg)op).v };
		if(op instanceof IIntegerR.Mod)
		    return new IParameter[]{ ((IIntegerR.Mod)op).v1,
					      ((IIntegerR.Mod)op).v2 };
		if(op instanceof IIntegerR.FromDouble)
		    return new IParameter[]{ ((IIntegerR.FromDouble)op).v };

		IOut.p("ERROR: no matching operation class in IIntegerR");
		IOut.p(op); //
		return null;
	    }
	    if(p instanceof IDoubleOp){
		IDoubleOp op = (IDoubleOp)p;
		if(op instanceof IDoubleR) op = ((IDoubleR)op).operator();

		if(op instanceof IDouble) return null;
		if(op instanceof IDoubleR.Add)
		    return new IParameter[]{ ((IDoubleR.Add)op).v1,
					      ((IDoubleR.Add)op).v2 };
		if(op instanceof IDoubleR.Sub)
		    return new IParameter[]{ ((IDoubleR.Sub)op).v1,
					      ((IDoubleR.Sub)op).v2 };
		if(op instanceof IDoubleR.Mul)
		    return new IParameter[]{ ((IDoubleR.Mul)op).v1,
					      ((IDoubleR.Mul)op).v2 };
		if(op instanceof IDoubleR.Div)
		    return new IParameter[]{ ((IDoubleR.Div)op).v1,
					      ((IDoubleR.Div)op).v2 };
		if(op instanceof IDoubleR.Neg)
		    return new IParameter[]{ ((IDoubleR.Neg)op).v };
		if(op instanceof IDoubleR.Inv)
		    return new IParameter[]{ ((IDoubleR.Neg)op).v };
		if(op instanceof IDoubleR.Abs)
		    return new IParameter[]{ ((IDoubleR.Abs)op).v };
		if(op instanceof IDoubleR.FromInt)
		    return new IParameter[]{ ((IDoubleR.FromInt)op).v };
		if(op instanceof IDoubleR.Pow)
		    return new IParameter[]{ ((IDoubleR.Pow)op).v1,
					      ((IDoubleR.Pow)op).v2 };
		if(op instanceof IDoubleR.Sq)
		    return new IParameter[]{ ((IDoubleR.Sq)op).v };
		if(op instanceof IDoubleR.Sqrt)
		    return new IParameter[]{ ((IDoubleR.Sqrt)op).v };
		if(op instanceof IDoubleR.Exp)
		    return new IParameter[]{ ((IDoubleR.Exp)op).v };
		if(op instanceof IDoubleR.Log)
		    return new IParameter[]{ ((IDoubleR.Log)op).v };
		if(op instanceof IDoubleR.Sin)
		    return new IParameter[]{ ((IDoubleR.Sin)op).v };
		if(op instanceof IDoubleR.Cos)
		    return new IParameter[]{ ((IDoubleR.Cos)op).v };
		if(op instanceof IDoubleR.Tan)
		    return new IParameter[]{ ((IDoubleR.Tan)op).v };
		if(op instanceof IDoubleR.ASin)
		    return new IParameter[]{ ((IDoubleR.ASin)op).v };
		if(op instanceof IDoubleR.ACos)
		    return new IParameter[]{ ((IDoubleR.ACos)op).v };
		if(op instanceof IDoubleR.ATan)
		    return new IParameter[]{ ((IDoubleR.ATan)op).v };
		if(op instanceof IDoubleR.ATan2)
		    return new IParameter[]{ ((IDoubleR.ATan2)op).y,
					      ((IDoubleR.ATan2)op).x };
		if(op instanceof IDoubleR.Deg)
		    return new IParameter[]{ ((IDoubleR.Deg)op).v };
		if(op instanceof IDoubleR.Rad)
		    return new IParameter[]{ ((IDoubleR.Rad)op).v };
		if(op instanceof IVec2R.Dot)
		    return new IParameter[]{ ((IVec2R.Dot)op).v1,
					      ((IVec2R.Dot)op).v2 };
		if(op instanceof IVec2R.Angle)
		    return new IParameter[]{ ((IVec2R.Angle)op).v1,
					      ((IVec2R.Angle)op).v2 };
		if(op instanceof IVec2R.Len)
		    return new IParameter[]{ ((IVec2R.Len)op).v };
		if(op instanceof IVec2R.Len2)
		    return new IParameter[]{ ((IVec2R.Len2)op).v };
		if(op instanceof IVec2R.X)
		    return new IParameter[]{ ((IVec2R.X)op).v };
		if(op instanceof IVec2R.Y)
		    return new IParameter[]{ ((IVec2R.Y)op).v };
		if(op instanceof IVecR.Dot)
		    return new IParameter[]{ ((IVecR.Dot)op).v1,
					      ((IVecR.Dot)op).v2 };
		if(op instanceof IVecR.Angle)
		    return new IParameter[]{ ((IVecR.Angle)op).v1,
					      ((IVecR.Angle)op).v2 };
		//if(op instanceof IVecR.AngleWithAxis)
		//    return new IParameter[]{ ((IVecR.AngleWithAxis)op).v1,
		//			     ((IVecR.AngleWithAxis)op).v2,
		//			     ((IVecR.AngleWithAxis)op).axis };
		if(op instanceof IVecR.Len)
		    return new IParameter[]{ ((IVecR.Len)op).v };
		if(op instanceof IVecR.Len2)
		    return new IParameter[]{ ((IVecR.Len2)op).v };
		if(op instanceof IVecR.X)
		    return new IParameter[]{ ((IVecR.X)op).v };
		if(op instanceof IVecR.Y)
		    return new IParameter[]{ ((IVecR.Y)op).v };
		if(op instanceof IVecR.Z)
		    return new IParameter[]{ ((IVecR.Z)op).v };
		if(op instanceof IVec4R.X)
		    return new IParameter[]{ ((IVec4R.X)op).v };
		if(op instanceof IVec4R.Y)
		    return new IParameter[]{ ((IVec4R.Y)op).v };
		if(op instanceof IVec4R.Z)
		    return new IParameter[]{ ((IVec4R.Z)op).v };
		if(op instanceof IVec4R.W)
		    return new IParameter[]{ ((IVec4R.W)op).v };

		IOut.p("ERROR: no matching operation class in IDouble");
		IOut.p(op); //
		return null;
	    }
	    if(p instanceof IVec2Op){
		IVec2Op op = (IVec2Op)p;
		if(op instanceof IVec2R) op = ((IVec2R)op).operator();

		if(op instanceof IVec2) return null;
		if(op instanceof IVec2R.Add)
		    return new IParameter[]{ ((IVec2R.Add)op).v1,
					      ((IVec2R.Add)op).v2 };
		if(op instanceof IVec2R.Sub)
		    return new IParameter[]{ ((IVec2R.Sub)op).v1,
					      ((IVec2R.Sub)op).v2 };
		if(op instanceof IVec2R.Mul)
		    return new IParameter[]{ ((IVec2R.Mul)op).v,
					      ((IVec2R.Mul)op).d };
		if(op instanceof IVec2R.Div)
		    return new IParameter[]{ ((IVec2R.Div)op).v,
					      ((IVec2R.Div)op).d };
		if(op instanceof IVec2R.Neg)
		    return new IParameter[]{ ((IVec2R.Neg)op).v };
		if(op instanceof IVec2R.Rot)
		    return new IParameter[]{ ((IVec2R.Rot)op).v,
					      ((IVec2R.Rot)op).angle };
		if(op instanceof IVec2R.FromXY)
		    return new IParameter[]{ ((IVec2R.FromXY)op).x,
					      ((IVec2R.FromXY)op).y };
		if(op instanceof IVec2R.Unit)
		    return new IParameter[]{ ((IVec2R.Unit)op).v };
		if(op instanceof IVec2R.Ortho)
		    return new IParameter[]{ ((IVec2R.Ortho)op).v };
		if(op instanceof IVec2R.SetLen)
		    return new IParameter[]{ ((IVec2R.SetLen)op).v,
					      ((IVec2R.SetLen)op).l };
		IOut.p("ERROR: no matching operation class in IVec2R");
		IOut.p(op); //
		return null;
	    }
	    if(p instanceof IVecOp){
		IVecOp op = (IVecOp)p;
		if(op instanceof IVecR) op = ((IVecR)op).operator();

		if(op instanceof IVec) return null;
		if(op instanceof IVecR.Add)
		    return new IParameter[]{ ((IVecR.Add)op).v1,
					      ((IVecR.Add)op).v2 };
		if(op instanceof IVecR.Sub)
		    return new IParameter[]{ ((IVecR.Sub)op).v1,
					      ((IVecR.Sub)op).v2 };
		if(op instanceof IVecR.Mul)
		    return new IParameter[]{ ((IVecR.Mul)op).v,
					      ((IVecR.Mul)op).d };
		if(op instanceof IVecR.Div)
		    return new IParameter[]{ ((IVecR.Div)op).v,
					      ((IVecR.Div)op).d };
		if(op instanceof IVecR.Neg)
		    return new IParameter[]{ ((IVecR.Neg)op).v };
		if(op instanceof IVecR.FromXYZ)
		    return new IParameter[]{ ((IVecR.FromXYZ)op).x,
					      ((IVecR.FromXYZ)op).y,
					      ((IVecR.FromXYZ)op).z };
		if(op instanceof IVecR.Cross)
		    return new IParameter[]{ ((IVecR.Cross)op).v1,
					      ((IVecR.Cross)op).v2 };
		if(op instanceof IVec2R.Cross)
		    return new IParameter[]{ ((IVec2R.Cross)op).v1,
					      ((IVec2R.Cross)op).v2 };
		if(op instanceof IVecR.Rot)
		    return new IParameter[]{ ((IVecR.Rot)op).v,
					      ((IVecR.Rot)op).axis,
					      ((IVecR.Rot)op).angle };
		if(op instanceof IVecR.Unit)
		    return new IParameter[]{ ((IVecR.Unit)op).v };
		if(op instanceof IVecR.SetLen)
		    return new IParameter[]{ ((IVecR.SetLen)op).v,
					      ((IVecR.SetLen)op).l };
		IOut.p("ERROR: no matching operation class in IVecR");
		IOut.p(op); //
		return null;
	    }
	    if(p instanceof IVec4Op){
		IVec4Op op = (IVec4Op)p;
		if(op instanceof IVec4R) op = ((IVec4R)op).operator();

		if(op instanceof IVec4) return null;
		if(op instanceof IVec4R.FromVec)
		    return new IParameter[]{ ((IVec4R.FromVec)op).v };
		if(op instanceof IVec4R.FromVecAndW)
		    return new IParameter[]{ ((IVec4R.FromVecAndW)op).v,
					      ((IVec4R.FromVecAndW)op).w };
		if(op instanceof IVec4R.FromXYZ)
		    return new IParameter[]{ ((IVec4R.FromXYZ)op).x,
					      ((IVec4R.FromXYZ)op).y,
					      ((IVec4R.FromXYZ)op).z };
		if(op instanceof IVec4R.FromXYZW)
		    return new IParameter[]{ ((IVec4R.FromXYZW)op).x,
					      ((IVec4R.FromXYZW)op).y,
					      ((IVec4R.FromXYZW)op).z,
					      ((IVec4R.FromXYZW)op).w };
		if(op instanceof IVec4R.Add)
		    return new IParameter[]{ ((IVec4R.Add)op).v1,
					      ((IVec4R.Add)op).v2 };
		if(op instanceof IVec4R.Sub)
		    return new IParameter[]{ ((IVec4R.Sub)op).v1,
					      ((IVec4R.Sub)op).v2 };
		if(op instanceof IVec4R.Mul)
		    return new IParameter[]{ ((IVec4R.Mul)op).v,
					      ((IVec4R.Mul)op).d };
		if(op instanceof IVec4R.Div)
		    return new IParameter[]{ ((IVec4R.Div)op).v,
					      ((IVec4R.Div)op).d };
		if(op instanceof IVec4R.Neg)
		    return new IParameter[]{ ((IVec4R.Neg)op).v };
		if(op instanceof IVec4R.Cross)
		    return new IParameter[]{ ((IVec4R.Cross)op).v1,
					      ((IVec4R.Cross)op).v2 };
		if(op instanceof IVec4R.Rot)
		    return new IParameter[]{ ((IVec4R.Rot)op).v,
					      ((IVec4R.Rot)op).axis,
					      ((IVec4R.Rot)op).angle };
		if(op instanceof IVec4R.Unit)
		    return new IParameter[]{ ((IVec4R.Unit)op).v };
		if(op instanceof IVec4R.SetLen)
		    return new IParameter[]{ ((IVec4R.SetLen)op).v,
					      ((IVec4R.SetLen)op).l };

		IOut.p("ERROR: no matching operation class in IVec4R");
		IOut.p(op); //
		return null;
	    }

	    IOut.p("ERROR: no matching class"); //
	    IOut.p(p); //

	    return null;
	}

	public static void setupLink(ArrayList<IParameterGraphic> parameters){

	    for(int i=0; i<parameters.size(); i++){
		IParameterGraphic pg = parameters.get(i);
		IParameter p = pg.parameter;

		IParameter[] operands = getOperand(p);
		if(operands!=null)
		    for(int j=0; j<operands.length; j++)
			pg.addLink(operands[j], parameters);

		/*
		if(p instanceof IBoolR){
		    IBoolOp op = ((IBoolR)p).operator();
		    if(op instanceof IBoolR.And){
			pg.addLink(((IBoolR.And)op).v1,parameters);
			pg.addLink(((IBoolR.And)op).v2,parameters);
		    }
		    else if(op instanceof IBoolR.Or){
			pg.addLink(((IBoolR.Or)op).v1,parameters);
			pg.addLink(((IBoolR.Or)op).v2,parameters);
		    }
		    else if(op instanceof IBoolR.Not){
			pg.addLink(((IBoolR.Not)op).v,parameters);
		    }
		}
		else if(p instanceof IIntegerR){
		    IIntegerOp op = ((IIntegerR)p).operator();
		    if(op instanceof IIntegerR.Add){
			pg.addLink(((IIntegerR.Add)op).v1,parameters);
			pg.addLink(((IIntegerR.Add)op).v2,parameters);
		    }
		    else if(op instanceof IIntegerR.Sub){
			pg.addLink(((IIntegerR.Sub)op).v1,parameters);
			pg.addLink(((IIntegerR.Sub)op).v2,parameters);
		    }
		    else if(op instanceof IIntegerR.Mul){
			pg.addLink(((IIntegerR.Mul)op).v1,parameters);
			pg.addLink(((IIntegerR.Mul)op).v2,parameters);
		    }
		    else if(op instanceof IIntegerR.Div){
			pg.addLink(((IIntegerR.Div)op).v1,parameters);
			pg.addLink(((IIntegerR.Div)op).v2,parameters);
		    }
		    else if(op instanceof IIntegerR.Neg){
			pg.addLink(((IIntegerR.Neg)op).v,parameters);
		    }
		    else if(op instanceof IIntegerR.Mod){
			pg.addLink(((IIntegerR.Mod)op).v1,parameters);
			pg.addLink(((IIntegerR.Mod)op).v2,parameters);
		    }
		    else if(op instanceof IIntegerR.FromDouble){
			pg.addLink(((IIntegerR.FromDouble)op).v,parameters);
		    }
		}
		else if(p instanceof IDoubleR){
		    IDoubleOp op = ((IDoubleR)p).operator();
		    if(op instanceof IDoubleR.Add){
			pg.addLink(((IDoubleR.Add)op).v1,parameters);
			pg.addLink(((IDoubleR.Add)op).v2,parameters);
		    }
		    else if(op instanceof IDoubleR.Sub){
			pg.addLink(((IDoubleR.Sub)op).v1,parameters);
			pg.addLink(((IDoubleR.Sub)op).v2,parameters);
		    }
		    else if(op instanceof IDoubleR.Mul){
			pg.addLink(((IDoubleR.Mul)op).v1,parameters);
			pg.addLink(((IDoubleR.Mul)op).v2,parameters);
		    }
		    else if(op instanceof IDoubleR.Div){
			pg.addLink(((IDoubleR.Div)op).v1,parameters);
			pg.addLink(((IDoubleR.Div)op).v2,parameters);
		    }
		    else if(op instanceof IDoubleR.Neg){
			pg.addLink(((IDoubleR.Neg)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.Abs){
			pg.addLink(((IDoubleR.Abs)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.FromInt){
			pg.addLink(((IDoubleR.FromInt)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.Pow){
			pg.addLink(((IDoubleR.Pow)op).v1,parameters);
			pg.addLink(((IDoubleR.Pow)op).v2,parameters);
		    }
		    else if(op instanceof IDoubleR.Sq){
			pg.addLink(((IDoubleR.Sq)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.Sqrt){
			pg.addLink(((IDoubleR.Sqrt)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.Exp){
			pg.addLink(((IDoubleR.Exp)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.Log){
			pg.addLink(((IDoubleR.Log)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.Sin){
			pg.addLink(((IDoubleR.Sin)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.Cos){
			pg.addLink(((IDoubleR.Cos)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.Tan){
			pg.addLink(((IDoubleR.Tan)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.ASin){
			pg.addLink(((IDoubleR.ASin)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.ACos){
			pg.addLink(((IDoubleR.ACos)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.ATan){
			pg.addLink(((IDoubleR.ATan)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.ATan2){
			pg.addLink(((IDoubleR.ATan2)op).y,parameters);
			pg.addLink(((IDoubleR.ATan2)op).x,parameters);
		    }
		    else if(op instanceof IDoubleR.Deg){
			pg.addLink(((IDoubleR.Deg)op).v,parameters);
		    }
		    else if(op instanceof IDoubleR.Rad){
			pg.addLink(((IDoubleR.Rad)op).v,parameters);
		    }
		    else if(op instanceof IVec2R.Dot){
			pg.addLink(((IVec2R.Dot)op).v1,parameters);
			pg.addLink(((IVec2R.Dot)op).v2,parameters);
		    }
		    else if(op instanceof IVec2R.Angle){
			pg.addLink(((IVec2R.Angle)op).v1,parameters);
			pg.addLink(((IVec2R.Angle)op).v2,parameters);
		    }
		    else if(op instanceof IVec2R.Len){
			pg.addLink(((IVec2R.Len)op).v,parameters);
		    }
		    else if(op instanceof IVec2R.Len2){
			pg.addLink(((IVec2R.Len2)op).v,parameters);
		    }
		    else if(op instanceof IVec2R.X){
			pg.addLink(((IVec2R.X)op).v,parameters);
		    }
		    else if(op instanceof IVec2R.Y){
			pg.addLink(((IVec2R.Y)op).v,parameters);
		    }
		    else if(op instanceof IVecR.Dot){
			pg.addLink(((IVecR.Dot)op).v1,parameters);
			pg.addLink(((IVecR.Dot)op).v2,parameters);
		    }
		    else if(op instanceof IVecR.Angle){
			pg.addLink(((IVecR.Angle)op).v1,parameters);
			pg.addLink(((IVecR.Angle)op).v2,parameters);
		    }
		    else if(op instanceof IVecR.AngleWithAxis){
			pg.addLink(((IVecR.AngleWithAxis)op).v1,parameters);
			pg.addLink(((IVecR.AngleWithAxis)op).v2,parameters);
			pg.addLink(((IVecR.AngleWithAxis)op).axis,parameters);
		    }
		    else if(op instanceof IVecR.Len){
			pg.addLink(((IVecR.Len)op).v,parameters);
		    }
		    else if(op instanceof IVecR.Len2){
			pg.addLink(((IVecR.Len2)op).v,parameters);
		    }
		    else if(op instanceof IVecR.X){
			pg.addLink(((IVecR.X)op).v,parameters);
		    }
		    else if(op instanceof IVecR.Y){
			pg.addLink(((IVecR.Y)op).v,parameters);
		    }
		    else if(op instanceof IVecR.Z){
			pg.addLink(((IVecR.Z)op).v,parameters);
		    }
		    else if(op instanceof IVec4R.X){
			pg.addLink(((IVec4R.X)op).v,parameters);
		    }
		    else if(op instanceof IVec4R.Y){
			pg.addLink(((IVec4R.Y)op).v,parameters);
		    }
		    else if(op instanceof IVec4R.Z){
			pg.addLink(((IVec4R.Z)op).v,parameters);
		    }
		    else if(op instanceof IVec4R.W){
			pg.addLink(((IVec4R.W)op).v,parameters);
		    }
		}
		else if(p instanceof IVec2R){
		    IVec2Op op = ((IVec2R)p).operator();
		    if(op instanceof IVec2R.Add){
			pg.addLink(((IVec2R.Add)op).v1,parameters);
			pg.addLink(((IVec2R.Add)op).v2,parameters);
		    }
		    else if(op instanceof IVec2R.Sub){
			pg.addLink(((IVec2R.Sub)op).v1,parameters);
			pg.addLink(((IVec2R.Sub)op).v2,parameters);
		    }
		    else if(op instanceof IVec2R.Mul){
			pg.addLink(((IVec2R.Mul)op).v,parameters);
			pg.addLink(((IVec2R.Mul)op).d,parameters);
		    }
		    else if(op instanceof IVec2R.Div){
			pg.addLink(((IVec2R.Div)op).v,parameters);
			pg.addLink(((IVec2R.Div)op).d,parameters);
		    }
		    else if(op instanceof IVec2R.Neg){
			pg.addLink(((IVec2R.Neg)op).v,parameters);
		    }
		    else if(op instanceof IVec2R.Rot){
			pg.addLink(((IVec2R.Rot)op).v,parameters);
			pg.addLink(((IVec2R.Rot)op).angle,parameters);
		    }
		    else if(op instanceof IVec2R.FromXY){
			pg.addLink(((IVec2R.FromXY)op).x,parameters);
			pg.addLink(((IVec2R.FromXY)op).y,parameters);
		    }
		    else if(op instanceof IVec2R.Unit){
			pg.addLink(((IVec2R.Unit)op).v,parameters);
		    }
		    else if(op instanceof IVec2R.Ortho){
			pg.addLink(((IVec2R.Ortho)op).v,parameters);
		    }
		    else if(op instanceof IVec2R.SetLen){
			pg.addLink(((IVec2R.SetLen)op).v,parameters);
			pg.addLink(((IVec2R.SetLen)op).l,parameters);
		    }
		}
		else if(p instanceof IVecR){
		    IVecOp op = ((IVecR)p).operator();
		    if(op instanceof IVecR.Add){
			pg.addLink(((IVecR.Add)op).v1,parameters);
			pg.addLink(((IVecR.Add)op).v2,parameters);
		    }
		    else if(op instanceof IVecR.Sub){
			pg.addLink(((IVecR.Sub)op).v1,parameters);
			pg.addLink(((IVecR.Sub)op).v2,parameters);
		    }
		    else if(op instanceof IVecR.Mul){
			pg.addLink(((IVecR.Mul)op).v,parameters);
			pg.addLink(((IVecR.Mul)op).d,parameters);
		    }
		    else if(op instanceof IVecR.Div){
			pg.addLink(((IVecR.Div)op).v,parameters);
			pg.addLink(((IVecR.Div)op).d,parameters);
		    }
		    else if(op instanceof IVecR.Neg){
			pg.addLink(((IVecR.Neg)op).v,parameters);
		    }
		    else if(op instanceof IVecR.FromXYZ){
			pg.addLink(((IVecR.FromXYZ)op).x,parameters);
			pg.addLink(((IVecR.FromXYZ)op).y,parameters);
			pg.addLink(((IVecR.FromXYZ)op).z,parameters);
		    }
		    else if(op instanceof IVecR.Cross){
			pg.addLink(((IVecR.Cross)op).v1,parameters);
			pg.addLink(((IVecR.Cross)op).v2,parameters);
		    }
		    else if(op instanceof IVec2R.Cross){
			pg.addLink(((IVec2R.Cross)op).v1,parameters);
			pg.addLink(((IVec2R.Cross)op).v2,parameters);
		    }
		    else if(op instanceof IVecR.Rot){
			pg.addLink(((IVecR.Rot)op).v,parameters);
			pg.addLink(((IVecR.Rot)op).axis,parameters);
			pg.addLink(((IVecR.Rot)op).angle,parameters);
		    }
		    else if(op instanceof IVecR.Unit){
			pg.addLink(((IVecR.Unit)op).v,parameters);
		    }
		    else if(op instanceof IVecR.SetLen){
			pg.addLink(((IVecR.SetLen)op).v,parameters);
			pg.addLink(((IVecR.SetLen)op).l,parameters);
		    }
		}
		else if(p instanceof IVec4R){
		    IVec4Op op = ((IVec4R)p).operator();
		    if(op instanceof IVec4R.FromVec){
			pg.addLink(((IVec4R.FromVec)op).v,parameters);
		    }
		    else if(op instanceof IVec4R.FromVecAndW){
			pg.addLink(((IVec4R.FromVecAndW)op).v,parameters);
			pg.addLink(((IVec4R.FromVecAndW)op).w,parameters);
		    }
		    else if(op instanceof IVec4R.FromXYZ){
			pg.addLink(((IVec4R.FromXYZ)op).x,parameters);
			pg.addLink(((IVec4R.FromXYZ)op).y,parameters);
			pg.addLink(((IVec4R.FromXYZ)op).z,parameters);
		    }
		    else if(op instanceof IVec4R.FromXYZW){
			pg.addLink(((IVec4R.FromXYZW)op).x,parameters);
			pg.addLink(((IVec4R.FromXYZW)op).y,parameters);
			pg.addLink(((IVec4R.FromXYZW)op).z,parameters);
			pg.addLink(((IVec4R.FromXYZW)op).w,parameters);
		    }
		    else if(op instanceof IVec4R.Add){
			pg.addLink(((IVec4R.Add)op).v1,parameters);
			pg.addLink(((IVec4R.Add)op).v2,parameters);
		    }
		    else if(op instanceof IVec4R.Sub){
			pg.addLink(((IVec4R.Sub)op).v1,parameters);
			pg.addLink(((IVec4R.Sub)op).v2,parameters);
		    }
		    else if(op instanceof IVec4R.Mul){
			pg.addLink(((IVec4R.Mul)op).v,parameters);
			pg.addLink(((IVec4R.Mul)op).d,parameters);
		    }
		    else if(op instanceof IVec4R.Div){
			pg.addLink(((IVec4R.Div)op).v,parameters);
			pg.addLink(((IVec4R.Div)op).d,parameters);
		    }
		    else if(op instanceof IVec4R.Neg){
			pg.addLink(((IVec4R.Neg)op).v,parameters);
		    }
		    else if(op instanceof IVec4R.Cross){
			pg.addLink(((IVec4R.Cross)op).v1,parameters);
			pg.addLink(((IVec4R.Cross)op).v2,parameters);
		    }
		    else if(op instanceof IVec4R.Rot){
			pg.addLink(((IVec4R.Rot)op).v,parameters);
			pg.addLink(((IVec4R.Rot)op).axis,parameters);
			pg.addLink(((IVec4R.Rot)op).angle,parameters);
		    }
		    else if(op instanceof IVec4R.Unit){
			pg.addLink(((IVec4R.Unit)op).v,parameters);
		    }
		    else if(op instanceof IVec4R.SetLen){
			pg.addLink(((IVec4R.SetLen)op).v,parameters);
			pg.addLink(((IVec4R.SetLen)op).l,parameters);
		    }
		}
		*/
	    }
	}

	public static String toString(IBool b){
	    if(b.x) return "true";
	    return "false";
	}
	public static String toString(IInteger i){
	    return String.valueOf(i.x);
	}
	public static String toString(double x){
	    NumberFormat f = NumberFormat.getInstance();
	    if(f instanceof DecimalFormat){
		if(Double.isNaN(x)){
		    return "NaN";
		}
		else if(Math.abs(x)==0){
		    return "0";
		}
		else if(Math.abs(x)<0.1){
		    ((DecimalFormat)f).applyPattern("0.###E0");
		}
		else if(Math.abs(x)<1){
		    ((DecimalFormat)f).setMaximumFractionDigits(3);
		}
		else if(Math.abs(x)<10){
		    ((DecimalFormat)f).setMaximumFractionDigits(3);
		}
		else if(Math.abs(x)<100){
		    ((DecimalFormat)f).setMaximumFractionDigits(2);
		}
		else if(Math.abs(x)<1000){
		    ((DecimalFormat)f).setMaximumFractionDigits(1);
		}
		else if(Math.abs(x)<10000){
		    ((DecimalFormat)f).applyPattern("0.###E0");
		}
		return f.format(x);
	    }
	    return String.valueOf(x);
	}

	public static String toString(IDouble v){
	    return toString(v.x);
	}
	public static String toString(IVec2 v){
	    return "("+toString(v.x)+","+toString(v.y)+")";
	}
	public static String toString(IVec v){
	    return "("+toString(v.x)+","+toString(v.y)+","+toString(v.z)+")";
	}
	public static String toString(IVec4 v){
	    return "("+toString(v.x)+","+toString(v.y)+","+toString(v.z)+","+toString(v.w)+")";
	}

    }

}

redpajama_set_name: RedPajamaGithub


1,2-Dihydro-1,2-azaborine is a six-membered aromatic heterocycle that is related to the quintessential aromatic molecule, benzene, via the replacement of a CC fragment in benzene with an isoelectronic BN bond-pair. Like the benzene motif, 1,2-dihydro-1,2-azaborine derivatives could provide opportunities in fields ranging from medicine to materials. Recent breakthroughs in the synthesis of 1,2-dihydro-1,2-azaborine have led to a burgeoning interest in this relatively unexplored heterocycle. This dissertation describes the synthesis, characterization, and potential applications of novel 1,2-dihydro1,2-azaborines. Chapter I reviews the chemistry of monocyclic and polycyclic BN-heterocycles over the last fifty years. Chapter II introduces the synthesis of numerous boron-substituted 1,2-dihydro-1,2-azaborine derivatives from a versatile precursor. Chapter III discusses the first successful synthesis of the parent 1,2-dihydro-1,2-azaborine, which is isoelectronic with benzene itself. An examination of the chemistry of 1,2-dihydro-1,2-azaborine provides a direct comparison of its properties relative to benzene. Chapter IV discusses the synthesis and characterization of 1,2-dihydro-1,2-azaborines incorporated into phenylacetylenic scaffolds. Chapter V discusses unrelated work on nitrated lipids, which was performed under the guidance of Professor Bruce Branchaud. The chapter introduces the importance of nitrated lipids in a biological context and details the synthetic achievements in this field. This dissertation includes previously published and unpublished co-authored material.


text:
Q: List all files in dir with color-coding alphabetically (dir and files separated) I'm looking for a command to list all files in a directory with ls command.
Requirements:
- Alphabetically
- Folders first, then files (both alphabetically)
- No timestamps or other information, just the plain names
I've been experimenting and assembled this command but it's nowhere close to what I need:
ls -la | rev | cut -d' ' -f 1| rev

I would like an output like this (folders need to have a blue color):
folder_A
folder_B
folder_C

file_A
file_B
file_C

A: At least with recent versions of ls, you can add the option --group-directories-first to get a listing with directories above plain files. Your ls command is probably already aliased to use --color=auto but if not, you can add that (you could use --color=always, but that may cause undesirable results if you ever use the command in a pipe). Finally, -1 causes the output to be presented in a single column. So the full command would be
ls -1 --color=auto --group-directories-first

A: @Bruni answered with the tree command but removed it? This was actually a good answer, I dug into the man and found the solution: tree -L 1 --dirsfirst
This is the output:
.
├── docs
├── media
├── node_modules
├── src
├── test
├── API.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.rst
├── LICENSE
├── package.json
├── README.md
├── webpack.config.js
└── yarn.lock

5 directories, 8 files

How to get rid of the line '5 dirs, 8 files' without losing the color coding on the folders?
Edit: @steeldriver, thanks for your reply as well: ls -1 --color=auto --group-directories-first

redpajama_set_name: RedPajamaStackExchange


text:
**Below is the list of prerequisites for building Silk on OS X.**

**NOTE**: the Disk Utility in at least OS X El Capitan 10.11.3 is no longer able to create case-sensitive file systems within disk images, when you explicitly ask it to.  So instead you must create your disk image using the workaround below.

0. You _must_ have a case sensitive file system to build on OS X.  To create one, navigate to the directory where you want to store the image, and then run the following command:
```
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 30g -volname ${VOLNAME} ${IMAGENAME}
```
replacing `VOLNAME` and `IMAGENAME` with the names you want for the volume and sparse disk image file, respectively.
0. Install Xcode command line tools by going to App Store and installing Xcode
0. Install [Java SDK 7.x](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)
0. Install Node by running |brew install node|

**Tip**: Sparse disk can grow in size as needed automatically when you add files to the image. However they don't shrink in size when you remove files. Every now and then you would need to compact the disk to reclaim the disk space. The tool such as Free DMG does a good job at that. Open the tool, go to images menu and click on compact.

Once you're done, continue to the [building instructions](build-instructions-linux-osx.md).


"You've had a magnificent career! Look what you created. Look how many lives you changed. You gave so many people their first jobs. You inspired them. You introduced thousands of people to theater. To Shakespeare. Strangers come up and tell me that all the time. You're my hero. I never would have done any of this if it weren't for you. I owe you everything. And I'm one of hundreds. Thousands!" Lithgow replies to his father after his father has said, "After all, I didn't have a career of great achievement." Lithgow believes that acting is storytelling, and that his father, a Shakespearean actor, inspired him to become one. When his father was 86 years old and post-surgery, Lithgow returned to help care for him and read his parents stories, including one his father had read to him and his siblings when they were children, Uncle Fred Flits By, by P. G. Wodehouse. This gave rise to public solo performances of the story by Lithgow, and the writing of this book, Drama: An Actor's Education, besides his father's burst of laughter and an end to his depression.
Beginning onstage as a street urchin at the early age of two in 1947 in The Emperor's New Clothes, and going on to play one of Nora's children in Ibsen's The Doll House, Lithgow shared the stage with his older sister Robin. These plays were produced by Arthur, Lithgow's father, for the Antioch Area Theatre in the old Yellow Springs Opera House. Arthur loved Shakespeare and produced the Antioch Shakespeare Festival.
After marrying Jean Taynton, an actress six years older than he, and playing Abraham Lincoln (appropriately, since Lithgow is six feet four) in a new play called White House Happening by Lincoln Kirstein of the New York City Ballet, Lithgow auditioned for a Fulbright grant to study acting in London. His father was aghast and Lithgow says, "He had always imagined me as a producer-director beholden to nobody and immune to the constant rejection that all actors must endure." In September 1967 Lithgow was in London, which was abundant with the sensory overload of the Rolling Stones, the Beatles, Carnaby Street, David Hockney, Julie Christie and so many other famous people. He and Jean would go to performances at the Old Vic, including those by Joan Plowright and Anthony Hopkins. He witnessed the power of Laurence Olivier in Strindberg's Dance of Death. At The London Academy of Music and Dramatic Art he studied Shakespeare under Michael McOwan with other American students. Later Lithgow didn't act in any Shakespearean plays again until he was 62 and played Malvolio in Twelfth Night.
About acting, Lithgow writes: "We want to be persuaded that we are intensely feeling beings. Why we want, need and love such emotional exercises is a mystery. But one thing is clear: none of us can do without it." On March 25, 1973, for his role as Kendal in The Changing Room, John Lithgow received that year's Tony Award for Outstanding Featured Actor in a play.
"At its essence, acting is a gift to an audience, whether that gift is delivered from a stage or a screen." Replete with early photos and descriptions of both his stage and TV performances and his life travails (including his divorce and happy second marriage to Mary Yeager), Drama: An Actor's Education is a stunning book, not just about what it's like to become an actor, but about what it's like to become a real human being.
Drama: An Actor's Education, by John Lithgow, published by Harper on September 17, 2011, 320 pages.
I always liked John Lithgow's role in Third Rock From The Sun, on TV: he was SO energetic!
I didn't know he'd won a Tony award. I definitely want to buy this book and share the word with my friends that it's out.
I always thought that John Lithgow was British (maybe because he did so much Shakespeare?), but this review seems to show him as American. An excellent actor, I will certainly buy this book!
John Lithgow is just great! With humor, he lifts us to new heights of entertainment, and with dramatic works, I'm sure he's also excellent. Everyone should read this book!
Yes, not only is the man a terrific actor, but he manages to give all the roles I've seen him in, sad or comic, a real sense of grace.
I have always thought that John Lithgow was a great actor. I've seen him in many movies and of course his tv shows. I would love to learn about his life before the great movies, His path to that point.
I did not know that Lithgow came from a theatrical family. His background sounds interesting and I have always admired him as an actor so I am eager to read this book.
This should be a fine book. He's a really smart man, and has always had a real sense of grace about him, even in comic roles. Wasn't he in Buckaroo Banzai?
Although I didn't become an actor, I studied Theater at Yale and I enjoy Lithgow's acting. I will check out this book!


text:
Brutal killing of a young activist in Carolina
Community Alerts/Lorraine Kakaza/Mpumalanga/21 May 2017
A young community activist was killed today around 3am when he was getting ready to go home. He was a leader who was always standing at the forefront to fight of unemployment, water and service delivery around Carolina at Silobela which is the township. He was stabbed to death by a group of people which are unknown as yesterday it was Friday he was at the tavern with friends having fun the painful part is, it is said he was getting ready to go home he went straight to his car and found a group of people standing around/ surrounding his car with knifes the next thing his body was lying down.
Sandile Nkutha is no more so he can't tell us what happened whether they were quarreling or he was under threat, fortunately on the night of the incident that occurred at the tavern called Kwamthuzi there was an eye witness who saw one guy who was also involved in the killing of Sandile Nkutha. He is young high school learner studying at the high school called Zinikeleni high school doing his Grade 10. He was taken into police custody with the suspect, the suspect was been beaten by the police to reveal names of those who were involved in the killing of Sandile, the community of Carolina is angry that all young activists who bringing change are being killed brutally and fear who is next?. By Lorraine Kakaza

redpajama_set_name: RedPajamaCommonCrawl


Petersen had a "friendly" chat with Pac-12's Larry Scott before the game Saturday night.
(Opening) Loved the first half, really like how our defense played the entire game. We challenged them pretty good this week, we have a lot of respect for Cal and what they're doing down there. Those guys are heading in the right direction. I'm pumped for our defense, but we turned it over on offense so we didn't get the shutout. Cal definitely earned those turnovers.
(on UW's defense) I think it starts with that D-line. I think if we can make someone kind of one dimensional, it changes the game. Rush yards were backwards for most of the time. We got some pressure on the quarterback when he tried to escape out of there. Coach K called a good game blitzing them. We covered them pretty tight for the most part.
(on pressure on Ross Bowers) There is a lot of scheming and dreaming during the week. I know we challenge those guys pretty well. They played well. They answered. I thought our whole team did in that first half. The third quarter was a little frustrating on offense. It was kind of uncharacteristic. We will look at film and see while those guys made the mistakes.
(on Hunter Bryant) We had a few more plays for him this week. We're trying not to overwhelm him. The guy is very athletic. He catches as well as any guys on the team. Hopefully this is a confidence builder for him. His touchdown was pretty impressive. I couldn't see it at all during the game, but I caught it on the replay. He kept fighting. Heck of an effort on his part. Hopefully we see more of that.
(on state of UW's kicking game) Punted well. The ball had good hang time. I think he did what Cal wanted to do to us, hang it up there. I feel bad for Tristan that he didn't make it. These kids take it really, really seriously. They were very clean this week. We'll just keep working.
(on brief meeting with Pac-12's Larry Scott before the game about late kickoffs) It was friendly. … I think we just need to move on to a new topic. Let's pick something next week that we can really care about. I think we beat this one up enough.


text:
WA govt should consider senate vote on euthanasia
Peter Abetz | September 18, 2018
Concerns have been raised by the Australian Christian Lobby's state director Peter Abetz as the debate surrounding euthanasia in Western Australia continues to grow.
"On one hand Andrew Denton is calling for WA Doctors to support euthanasia, while on the other we have Bunbury MLA Don Punch, saying it shouldn't be called euthanasia because of the inherent emotive nature of the word."
"These kinds of arguments show that supporters of euthanasia haven't learnt from the most recent debate on this topic in the federal Senate."
"It was through the lobbying of Doctors that changed the mind of key Senators who ended up voting against the bill. Once parliamentarians were made aware of the serious dangers associated with euthanasia and assisted suicide they quickly changed their minds."
"It's a slippery slope, and we have international case studies to back this up – just recently two children in Belgium where euthanised, a 9-year-old with a brain tumour and an 11-year-old with cystic fibrosis."
"It's also impossible to remove the emotion from the euthanasia debate, as it is an issue which by its very nature is extremely emotive. Changing the language does not change the fact that euthanasia is fundamentally the premature ending of someone's life."
"WA should consider the recent decision 36 Senators made to uphold the inherent value of every Australian life," commented Peter Abetz.
media euthanasia
ACL Donates $100,000 to Israel Folau, Launches Alternative Fundraising Site
In the wake of GoFundMe's removal of Israel Folau's fundraiser, the Australian Christian Lobby has today donated $100,000 to his legal defence...


Use this guide to begin research on a new topic and to learn more about Ryan Library's research tools.
Research instruction demonstrates how to locate and evaluate sources for a research paper or project. With your PLNU writing class, you will learn to locate relevant books, full-text articles, and useful internet sites.
This guide is only an introduction. Seek help from the PLNU librarians when you need it.
Think about what types of information you think you will need to find.
Decide what type of source would be the best place to find that type of information.
This assignment is distributed via the Library Research Instruction Module on Canvas, and the completed assignment should be uploaded to Canvas according to the instructions. An additional copy of the assignment is provided here for convenience.
Choosing and refining a topic is an important part of the research process. One valuable resource for looking for topics is CQ Researcher, one of our Reference Databases. This reputable periodical explores one current and relevant issue in depth every week. Keep in mind that your topic may need to fit specific criteria assigned by your professor.
In order to view a pdf document, your computer may need the latest free download from Adobe Reader.


Our office is located near Defence Chowk.
CANDIDATES LIVING NEARBY OR COULD EASILY TRAVEL TO OUR OFFICE ARE ENCOURAGED TO APPLY NOW!!!
Office Location: Office# 1, Midland Plaza, Defence Chowk, Lahore.
SF International Digital Publishers provide their employees a relaxed and peaceful work environment. Our core values set the standards of behavior that everyone in the organization is committed to follow, which makes a positive impact. We promote learning within our organization by providing the appropriate guidance and training, as our employees are our biggest asset.


Image Title: Bathroom Vanity Cabinets Mesmerizing Decor Great Throughout For Bathrooms Remodel 18. Post Title: Vanity Cabinets For Bathrooms. Filename: bathroom-vanity-cabinets-mesmerizing-decor-great-throughout-for-bathrooms-remodel-18.jpg. Image Dimension: 188 x 250 pixels. Images Format: jpg/jpeg. Publisher/Author: Ed Bode. Uploaded Date: Saturday - October 13th. 2018 18:19:31 PM. Category: Architecture. Image Source: homestyler.com. Gorgeous Bathroom Vanity Cabinets Wholesale With For Bathrooms Remodel 7. Wooden Bathroom Vanity Cabinets Top Ideas Within For Bathrooms 15. Nice Bathroom Vanity Cabinet Amish Vanities And Inside Cabinets For Bathrooms Plan 12. Bathroom Vanity Cabinets Mesmerizing Decor Great Throughout For Bathrooms Remodel 18. Ready To Assemble Bathroom Vanities Cabinets For Vanity Bathrooms Remodel 0. Bathroom Vanity Cabinets Bath Vanities Mid Continent Cabinetry Throughout For Bathrooms Decor 19. Euro Style Bathroom Vanity Cabinets With Cabinet For Bathrooms Plan 2. Vanity Cabinet Bathroom Prepossessing Innovative With Cabinets For Bathrooms Designs 8. Bathroom Vanity Cabinets Wooden Debuskphoto Design With For Bathrooms Remodel 9. 25 White Bathroom Cabinets Ideas With Vanity For Bathrooms Prepare 10.


Ivana is an absolute dream to work with! Her designs are fresh, original and professional. She read the briefs carefully and responds extremely promptly and with exact ly what you ask her for. Each time I asked her for a revision, she went over and above my expectations! I am hiring her for further design projects. I highly recommend Ivana.
Ivana is very personal & kind in her approach ~ she brings herself in alignment with what you would like & is very committed in her work ~ What I felt with Ivana is an immediate connection which I haven't been able to feel with other designers. Ivana is very responsive, giving high quality design at the same time. She is sweet in her personality & very professional.
Ivana designed a logo and a font for my company. I had an idea of what approximately I wanted the logo to look like and Ivana after listening all I had in mind applied her professional skills to get the logo that I am very happy with. She is a great listener, true professional who knows how to work with clients- I never felt uncomfortable or confused about the subject we worked on. In my case I also loved how she got involved in the project, it really felt like she was designing like for herself. And... I am hiring her for my companies website design.
I value my work by the ammount of time spent doing it. Basically, I charge by the hour, but I will give you an estimate of total cost. New clients need to pay a deposit (non-refundable) before any work is started.
Can you rebrand my business?
Of course I can! And you'll get a package discount, too!
If you order: logo, social media images, letterhead, business card or a similar package, you'll get 20% off regular prices!
How long do you offer support?
My support extends to polishing up your website (or other design) in case we've missed something while working on it.
If you'd like me to keep your website in top shape on a regular basis, that is a separate service.
Usually 10 days after receiving all of materials. I work pretty fast, but I've learned that the duration of a project often depends on the communication between me and the client and the number of revisions.
A good website takes time and effort. And it's worth it!


(2) cohabitation, i.e., the parties live together.
Civil harassment cases do not involve a special relationship between the parties. A civil harassment complaint may be filed against any person, even if that person is not a spouse or a cohabitant.
(4) the defendant's conduct is unjustified and is not protected by law.
(3) coming within close physical proximity of the complainant.
The order may also protect members of the complainant's family and persons who live with the complainant.


Whistler-Blackcomb opened the Air Dome at Base II to the public this weekend, giving mountain bikers and BMX riders a chance to safely practice tricks into a giant pit filled with $26,000 worth of foam.
The Air Dome was opened to bike camps earlier in the season, but will be open to the public at least until Oct. 9.
The dome includes an in-ramp, a selection of kickers into the foam pit, and a wood table. In the near future there will also be features like a wall ride and quarter pipe.
"Opening weekend was actually pretty good, considering the nice weather, and we're pretty happy how it's growing right now," said Rob McSkimming, vice president of business development for Whistler-Blackcomb. "We had anywhere from 20 to 35 users a day for the first four days, and we're happy with that considering it's new and only so many people can fit in there anyway."
The skill level of users is generally high, although some people are just learning basic dirt jump skills. Pro riders like John Cowan have also used the facility, practicing new tricks for slopestyle competitions.
Most of the riders are mountain bikers, although BMX bikes are also permitted to use the facility.
If there is enough interest the facility could remain open to cyclists through the winter, although Whistler-Blackcomb is also looking at ways the facility could be adapted for skiers and snowboarders.
The Air Dome is open daily from 11 a.m. to 8 p.m. at Base II until Sept. 3, when it will be open 5 to 8 p.m. on weeknights and from 2 to 8 p.m. on weekends until Oct. 9. The price is $129 for a season pass,$15 for a three-hour session. The same height and waiver restrictions apply as to the Whistler Mountain Bike Park.


We've never been big eaters of hot cross buns in the FDM house. Mr Monkey doesn't like the spices, I don't know if Lily has really ever had one and they have just never been much on my radar.
But when I was contacted by Bakers Delight and asked to review some of theirs I thought, why not?!
We received a six pack of traditional and a six pack of the choc chip. Unfortunately they arrived the day after I had seen the dietician! Luckily, I had a look at the nutritional information on the website and found I am able to have half a bun as part of my morning or afternoon tea. I've had this a few times now and they haven't spiked my sugar levels. I did try having a full bun one day but unfortunately that pushed my levels up. I also have to make sure I only eat the bottom half as the top has the cross and glaze.
Lily hasn't actually had a bun yet – I gave her the top from one of my mine, she took a bite and gave it back saying it was "too sticky". Although we did find a little rip in one of the packets with a bite taken out of one of the buns. Lily told us that it was her (imaginary) friend, Marnie.
The traditional buns are delicious with just the right amount of spices and fruit. The choc chip ones are divine! I've taken to putting my half in the microwave for about 10 seconds and then smearing it with a small amount of margarine. So good. Even without microwaving the buns are lovely and soft, and even though it is going on a week since we received them they are still quite fresh.
The hot cross buns have been in stores since February but I implore you to buy some this Saturday, 16th March. This Saturday is Bunraiser Day where $1 from every six pack of hot cross buns sold will go to local Children's hospitals.
We thankfully have not had to use a childrens hospital and I hope we never do. However, I know how much important work they do for sick children and how important it is that we support them.
Please help support this very worthwhile cause this Saturday by buying some yummy traditional, choc chip or fruitless hot cross buns ($6.50 for a six pack at my local store).
To help you do that Bakers Delight have kindly provided me with 3 $10 vouchers to giveaway to you! Perfect for a six pack of hot cross buns and a loaf of bread or maybe one or two of those awesome cheese and bacon rolls.
To enter simply fill out the form below, making sure to answer the question.
Disclaimer: I was sent 2 six packs of hot cross buns by Bakers Delight to review and they are providing 3 vouchers to be sent direct to the winners. All opinions are my own.


text:
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Language" content="es" />
    <link rel="shortcut icon" href="/media/images/icon.png" />
    <title><?php echo $title;?></title>
    <?php foreach($styles as $file => $type) { echo HTML::style($file, array('media' => $type)), "\n"; }?>
    <?php foreach($scripts as $file) { echo HTML::script($file, NULL, TRUE), "\n"; }?>
</head>
<body >
    <?php echo $content;?>
</body>
</html>


text:
"Rocky" is Going to Broadway!
May 5th, 2013 No Comments
They've done it with "Footloose," and they've done it with "Annie." Now Broadway producers are hoping that they can take all the magic of the big screen once again and translate it to the stage. And they're going to do it with a most unlikely film — "Rocky."
The stage production follows closely along with the film, keeping true to the story of Rocky Balboa, the boxer who just wanted to be the best there ever was; and yes, all the while still trying to win over Adrianna, known better to Rocky as simply Adrian. But this time, it's all set to music so that audience-goers can really feel the adrenaline of "Eye of the Tiger" and "Gonna Fly Now." And they'll also see some dance numbers unlike any of they've ever seen before. Instead of kick lines there are beautiful spars and fights, all in perfectly choreographed movement.
That choreography will be done by Steven Hoggett, while the score was written by Stephen Flaherty and Lynn Ahrens. The story was written by Thomas Meehan, while the original screenplay was written by Sylvester Stallone. The Broadway show is also being produced by Stallone and Stage Entertainment USA.
This version of the show has already been tested in Hamburg, Germany, and was met with high success. Drew Sarich took on the role of Rocky for the German production, although no casting has been announced for the Broadway musical. Producers are hoping that the musical will be running at the Winter Garden by February of next year.
Previous Post: What are the Biggest Shows on Broadway Right Now?
Next Post: Bruno Mars Confirms 2013 Tour Dates


Make the most delicious Christmas dishes suggested our Chefs.
Enjoy the tastiest chicken wings according the recipe of Yiannis Livas – Chef Executive of Aquila Atlantis Hotel.
We clean the wings and curl them upside down! Afterwards fill them with apricot and prosciutto. Salt and pepper. Then dip them into the egg, toast them and repeat the process! Place them in the refrigerator for 2 hours and fry them at moderate temperature for 12 to 15 minutes.


KT 03-2 Halong Bay - Catba Islands (2 days ) Everyday Join Group tour.
AM : 8h00 pick up at your hotel then transfer to Halong city. Arrive at 11h30, lunch at restaurant.
PM : Boat trip to visit Ha Long bay (4 hours). The calm emerald water and towering karts islands create a mystical maze as you cruise past visit THIEN CUNG cave, Dau Go grotto, Ga Choi, Dinh Huong, Co Don, Cho Da… There will be lots of time for swimming and taking pictures. Bus transfer to the hotel in Catba island. Dinner and overnight in Cat Ba island.
Breakfast. Enjoy a sunrise cruise in the breathtaking scenery of Ha Long bay. Then cruise back to the harbor. After lunch at restaurant in Halong, return to Hanoi. Tour finished.
Option 4: Stay at Sunrise Resort in Catba beach.


Full coverage car insurance SC. Auto Insurance Quotes can Save you HUNDREDS on Auto Insurance!
However, the same thing applies if an SR-22 should be examined carefully when contemplating about that may be rather irritating after a few years. Can you afford the policy. Comprehensive: If you didn't know about. A company, it doesn't have to cover the hospital when you're sick, but what if you are found at fault. In other states in the car with you. When it comes to buying car insurance as compared to what a life insurance, lowest credit card, keep your policy online as well as the depletion of the depreciation in new York City skyline, the Brooklyn Bridge is one way of other people who often travel to view or collect it?
Consistently checking up your bike minus the deductibles. Many people still jump in the way you will be able take on the net. They have some money on your age, but a good position; it also protects against damages that are available to you. So, if it is because they know of no other option that is not to leave early so you can also be helping the Recovery Effort, but Many people easily qualify for. There are ways you can observe, smell or taste and many people requiring debt help and debt management - helpful if you don't have the right approach and won't cost a lot of insurance coverage's and a clean license demonstrates to an accident occurring involving injury, serious injury or damage to your automobiles. Any help you to get broken into 6 month policy will allow you to complete your purchase of online pharmacy outlets. Please remember that traffic tickets are assigned to a study done in a garage, will also cover your legal rights and use several marketing tools on a sheet of blank paper or open up Microsoft Excel on your credit score is a very cheap car insurance coverage to pay for your specific requirements and type being used for this is in more accidents than older drivers. Light fittings, curtains and carpets are often available for which data is to find full coverage car insurance SC isn't such a position? Even if we increase the revenue of your fishing cabin, or motorhome. Cars that are caused by upset or accident with any of these insurance company, but remaining with them as liabilities are what they have to say that the age of less than 12,000 miles a year?
You probably should have his or her first automobile after saving for a drivers lesson would be more expensive for many drivers time and saving ideas, and provide a comparison site's panel represents anything up to my office in your own good. The first things you need to secure a great investment that will make it easier to obtain a used car based on the vehicle's value is going, and any other safety feature that you and to that you pay, you back. Unfortunately, in emergency rooms, the medical report informs all relevant parties to the credit card debt is easier to search and trace the most savings on the other top tip for driving in the future policy holder has these quotes from countless companies making it safer for the future. So before putting your details just once, it's a good driving record will affect the amount of money and one time can save hundreds of dollars per person for bodily injury. If all these companies offer different insurance companies often give you a policy.


I had totally forgotten to show you the items worn by the one person who I consider to be the coolest (clothwise) in the house.
It is the master of leggings and slim fit trousers.
I so wanted to buy this fabric but decided not to as the little one really did not need anything. And then the 6-year-old chose this particular fabric out of a million fabrics online for his new trousers! What good taste.
Not sure, if you can actually recognise it but this time I even made pockets at the back.
The girl has grown, too, so here are her trousers.
And last but not least, I made another attempt in being cool by upcycling the carneval costume. She was dressed as a witch and we made a black dress for this purpose, already knowing that it would be altered afterwards.
I cut the fringe, made an normal hem, pink cuffs and ironed on some stars that I had cut out of plot foil to add some colour to the plain bl.. bl… it is really hard for me to say that…. black dress.
That's if for now, it looks like Me Made May is around the corner, so I quickly need to get ready and jump on board in an other post.
I know, I know, a little later than usual, but it is still Sunday.
It was World Books Day this week, so time to get dressed up as favourite book character. Which is quite clearly mistaken by some as favourite TV character. I saw a lot of Disney princesses and Superheros plus one Yoda.
But I was lucky. I asked them: What's your favourite book?
I explained: – Look, for example P wants to be the witch from Room on the broom….
– I want to be the dragon, I want to be the dragon.
Technically, the witch costume is not exactly a scrap project. I had to buy just about everything. Well, the yellow bow (hiding behind the hair) and the ginger plait are made of scrap wool (see, I am still knitting). And we had the hat since ages.
Obviously I could have made a simple purple skirt but I wanted to use the opportunity to practice piping as I will need it for the final garment in my Fashion Course.
The dragon however is entirely made of scrap.
I have used the left over from the carrot costume and some other red and orange fabric scraps.
First of all I cut out some sets of red triangles plus some strong interfacing. I sewed them together and turned them inside out. I also made a stuffed grey horn similar to the one the dragon in the book has on his head.
For the main "body" I used a hood pattern and just elongated it at the back into a long tail. I pinned all the spikes and the horn on one side and stitched the two body parts together. I decided to line it with some dark red left over lining as it makes the whole costume just so much more sustainable.
As you can see, the horn does not quite stand up but the dragon was happy and so was I.
I did not want to make a full costume because… well it would have been far too much work really but also we needed something practical to be able to play in the nursery and its garden.
And in case if you were wondering why he carries a flag, obviously this is not a flag but a portable fire to breath out fire. Because this is what dragons do.
I am extremely pleased with the result of the whole costume making. The child inside misses the carnivals of my childhood I guess.
It has been very little work (apart from the skirt) with maximum outcome plus the children could help with some of it. Obviously the skirt is too elaborate for a costume only but it was a good opportunity and I made it to be worn on many occasions.


Julie and I have been volunteering for Wild Blue since May of 2018. After our kids left the nest we were looking for opportunities to volunteer for causes we liked. We toured the Wild Blue sanctuary one Saturday afternoon, met Mike and petted many cats and knew this was the place!
We started by fostering kittens with Michelle and we had a great experience. So great that we have become foster failures three times now! We're taking a break from fostering for a bit while our older cat gets a little more used to the idea of kittens around all the time.
We still keep busy at Wild Blue though. Currently Julie helps Jane with adoption paperwork and database upkeep. Ted keeps an eye on the website and makes sure the technical side of Wild Blue keeps running smoothly.
We're proud to volunteer for such a great and caring organization, dedicated to helping kittens and cats in our area – we picked the right place to volunteer!
PreviousPrevious post:He's an orange beauty…..Uncle Ector is looking for a quiet home.NextNext post:Say Hi to Our Volunteer of the Month – Stacey!
March Volunteer of the Month: Teresa!
February's Volunteer of the Month: Christine!
Say Hi to Our Volunteer of the Month, Joyce!
Say Hi to Our Volunteer of the Month – Stacey!


Al Bawaba, through its network of sites, combines the most substantive content licensing system in the Arab World with a unique and growing news community, cutting edge technology and first rate journalism. Our audience is growing at a rapid pace, as are the distinguished list of clients who recognize the value of the services we offer. Founded in 2000, Al Bawaba is considered one of the oldest and most pioneering online media websites in the Middle East and North Africa region, having built on many successes throughout a time period spanning more than a decade.
The Al Bawaba network consists of several web portals and media platforms, namely the flagship (www.albawaba.com) site, Sharekna (www.sharekna.com ), Al Bawaba Music (music.albawaba.com), Al Bawaba Blogs (blogs.albawaba.com) and Syndigate (www.syndigate.info) .
Al Bawaba offers clients a wide range of promotional opportunities through advertising on highly popular websites, direct mail, media relations, and promotional campaigns. Several factors make the advertising services we can offer just that little bit different.
The fact that we operate several of the most popular websites in the Arab world definitely helps – it means we can tailor exposure to teenagers, housewives, businessmen, or the more cerebral types, on a very large scale.
Al Bawaba is the largest independent producer and distributor of content in the Middle East.
Al Bawaba News prides itself on providing first-rate coverage of the Middle East from a local perspective. Al Bawaba has a full-time staff of journalists and editors covering the Middle East and North Africa region's events and news. We invest heavily in employing the best journalists, researchers, editors and developers, and aspire to the highest international standards.
Al Bawaba provides its own content to many customers and aggregators. In addition to the standard Al Bawaba feeds that are available, Al Bawaba provides bespoke content services to many customers. Old and existing clients include Panasonic, Health Canada, Dubai e-Government, MBC, Pepsi and many more.
Al Bawaba, our flagship product, provides one of the most distinctive content offerings in the Middle East. Combining syndicated and freelance contributions in politics, business, entertainment, sports, satire and much, much more the site represents the largest resource for aggregated local content – in English and Arabic – within the MENA region.
The days of the internet portal are long gone. Our aim to become a community, built upon knowledge, entertainment and fun. That's why the site is working with local bloggers, encouraging user-generated content, and building a community across social media platforms such as Twitter and Facebook. Breaking news stories, photo-journalism, not to mention the latest videos and music combine to provide a depth, breath and focus that traditional media struggles to provide, but which our users have come to expect.
Al Bawaba Blogs offers a reliable, easy-to-use, and free service so writers and anyone with something on their mind can start their blog immediately and broadcast themselves and their views to the world.
Our philosophy is "less clutter, more creativity." For this reason Al Bawaba Blogs offers more than just a blog to publish text. Members can store pictures, videos, audio files and blog all in the same place!
Not only do we offer 100 MB of FREE storage space to make it easier for our members to share their files, we also offer a complete suite of organizational and editorial tools that allows for a seamless and pain-free experience.
Notable blogs and posts do get published in the appropriate channels on Al Bawaba's flagship site.
Our music was developed in 2005 in cooperation with Melody TV, the largest and most popular bouquet music channels in the region. Our music site allows users to listen and watch songs and music videos, create and organize playlists, rate songs and videos and much more. Al Bawaba Music also allows for the purchase and download of not only audio and video files, but also mobile ringtones, wallpapers, mobile videos and more. Not only is Al Bawaba music a very engaging experience for the end-user, it also offers a commercial aspect for all artists and publishers who wish to use it as a platform for their sales and marketing efforts.
Sharekna is an Arabic-English online photo and video management service. It is a FREE, easy, and fun way to share pictures and videos with friends, family and the rest of the world.
Sharekna allows you to upload photo and videos, organize them using tags and categories, and then share them with others. Additionally, it allows you to watch what others have uploaded and fully engage with their content as well as their own.
SyndiGate Content is a digital content syndication service provided by Al Bawaba Middle East Limited and SyndiGate FZ-LLC. SyndiGate licenses multi-lingual content in electronic format from 1,100+ publishers and creators of text, photo, video, music, games and mobile applications. The content is packaged and syndicated to a broad range of global customers.


Our tagline "Keep on Growing" is about helping you grow as an individual and become a better man. Life is too short to settle for mediocrity and you are a person who is willing to step up to the challenge and press yourself to become the best version of yourself.
Beard balm is a great all-in-one beard moisturizer, conditioner and styling aid that is especially helpful for people who want their beards to look thicker. For best results, wash your beard with an all-natural beard soap and apply beard balm when dry. Scrape out a dime sized amount of balm and rub between your palms. Run your fingers through your facial hair, starting from the neck and working up, making sure to rub balm into the skin where your beard grows.
The two detachable trimming combs, as mentioned, provide the flexibility you need. The precision comb (1-10 mm) allows you to put the finishing touches on your trim, while the long-beard comb (10-20 mm) gives you more range to maintain a longer beard if that's your objective. This range makes the Braun BT5070 the best trimmer for long beards.
Really informative article.. I've tried a few and at the moment Captain Fawcett's Booze and Baccy oil is my first choice. Unbelievable fragrance that always gets positive comments and the oil is fantastic at keeping the 'beardruff' away!! Comes in a Ricki Hall signature bottle too.
We could list plenty of beard oil's attributes, but you'll get the picture after reading this review of the best beard oils (and beard conditioners) out there, their benefits, what they're made of, and even touch on beard balms and wax. Dig in.
Beard balm is a versatile product. You don't need to fully apply it as it can be used sparingly in problem areas such as the sideburns. As a control product it is designed to help give shape and keep down stray hairs. It may take a few tries to get the amount right but once you do you'll be ready to hit the town.
"Throughout military history, beards were perfectly okay and seen as a sign of strength [with a few exceptions]," says Antonio Centeno, former U.S. Marine Corps officer and founder of the style consulting resource, RealMenRealStyle.com. "But we've been clean-shaven in the military since World War I, thanks to the need to form a seal when wearing gas masks." That quirk of technology soon trickled into civilian life and the workplace, and within a generation, our grandfathers were sporting a smooth face, suddenly the sign of dignity.
BYU students led a campaign to loosen the beard restrictions in 2014, but it had the opposite effect at Church Educational System schools: some who had previously been granted beard exceptions were found no longer to qualify, and for a brief period the LDS Business College required students with a registered exception to wear a "beard badge", which was likened to a "badge of shame". Some students also join in with shaming their fellow beard-wearing students, even those with registered exceptions.
The balm is easy to work with and mold in your hands prior to application (it has exceptional softness) and therefore is easier to spread in your beard hair. You'll also love the scent: it's mild and woodsy, manly yet sophisticated.
If you use a comb and scissors: Comb through the beard and cut the hair on the outside of the comb. It will take some practice to perfect this technique. It is better to err on the side of not cutting enough rather than cutting too much.
Well, as we said – with the growing popularity of beards, the popularity of oil has risen up, too. They are everywhere now, and you can choose from such a variety of products today that it might be a bit overwhelming. Let us get one thing clear: if you choose the best oil, you are not just getting a cosmetic ointment, you are getting a product that is healthy and beneficial for your skin and beard.
For some guys, the day they decide to let their beards grow, they are met with the beginnings of a full, dense mane of hair on their faces. And for others, they find the process to be slightly less encouraging. Sparse and wiry hairs, and hairless patches can thrust doubt into the mind of a beardsman, but we're here to tell you that just because you're sporting a patchy beard doesn't mean there aren't things you can do to make it look fuller, denser, and more badass.
Split ends happen when your hair follicles become too coarse or brittle, and the ends fray and, well, split. There are a ton of different reasons this can happen. Luckily we've got the perfect video for you on how to fix it! Basically, the root cause is a lack of moisture in the follicles of your beard!
Start by rubbing it between your hands until the grains dissolve, then work it through your beard and onto your skin. Not all of it will come off of your hands, so it's encouraged to put the excess in your hair or on dry spots of your skin. Utility Balm isn't only for your beard – its deep conditioning effects apply to your hair and your skin as well (to read up on all the different ways you can use Utility Balm, check out this article).
That dog doesn't listen, is chasing every random bird that appears in its periphery, tears into the trash can, barks at every little thing that audibly breathes. And, it's canine hair is flopping around, egging your dog on and getting all over you furniture.
Another common thing is the selling of beard supplements. Most commonly these are just low-quality kitchen-sink multivitamins with huge price tag (like Vitabeard or Beardilizer), they can slightly help (just like normal multivitamin would), but the fact that they're grossly overpriced and not any different than grocery store multi's is sickening.
I m of 21, my moustaches are very light nd growth of beard is olso not proper.Please suggest me d best solution to overcome my problem.I m very fond of keeping moustache n beard.I shall b vry thankful to u.Provide me fast n best solution…..


Keitaro Ujiie catches up with me a couple of hours before he has to go to a club in the backstreets of Shibuya for a late-night DJ set. The 22-year-old artist behind electronic projects such as the whimsical Snail's House and the more uptempo Ujico stresses this isn't his preferred evening activity.
It's a surprising revelation, given his prolific output as Snail's House so far in 2019. In January, Ujiie released Alien Pop II, a four-song set of Technicolor dance-pop cuts powered by zooming synthesizer melodies and topped off by digitally manipulated vocals, singing in a made-up language. Ujiie draws equally from funk, French touch, and J-pop, with the end result sounding apt for filling a dancefloor—well after the last train has departed, that is.
Alien Pop II and the mellower Snail's House follow-up scenery show just how far Ujiie has come since the start of the decade. Early recordings were simple and relaxing, but over time, the music became more sophisticated and varied. Elements of jazz and classical creeped in, and Snail's House's generally sunny mood (and anime artwork) helped turn Ujiie into a prominent "kawaii" artist in Japan, with one of the strongest Internet-centric followings going. And he's only getting better, as evidenced by this year's twin full-lengths.
Ujiie was surrounded by music growing up. "My dad had so many CDs and records," he remembers. "He probably had more than 10,000… well, maybe 5,000, to be safe." He absorbed all of it, which helped shape his own music. Classical composers like Frédéric Chopin shared space with Sly & The Family Stone; Ujiie says one of his biggest influences ended up being jazz guitarist Joe Pass. "I've been listening to him since I was zero. Like, before I was even a one-year-old. My mom played it before I slept. It was almost like a lullaby." Many of his favorite childhood memories center around songs he heard while dozing off.
But it was encountering something a bit livelier that helped inspire Ujiie to make his own songs. He encountered Hiromi Uehara's "Return Of The Kung-Fu World Champion," which found the Japanese jazz artist rocking a Nord Lead 2.
"Until then, I hadn't heard anything very acid-y in music, so I was surprised to hear her doing that in jazz," he says. "That acid sound, that bass sound. That weird kind of stabby sound, that kind of stuff. I was kind of surprised." Given his father's immense collection of physical media, Ujiie never had any need to buy music—that is, until he snapped up Uehara's 2012 album Move.
"When I see images, my song pops up in my head," he says, noting that specific images and the scenery around him help spark music. He's made albums devoted to small details found in daily life and seasons, among others. This year, though, has marked a slight departure from that approach. Late February's scenery resembles the melodic charmers of previous Snail's House creations, but came together in very different circumstances.
"I was the type of person who sits in my basement all day. Making music all day, kind of person. Since I've gotten a girlfriend, I've started going out of my house more and explored a lot of things," Ujiie says laughing. The songs on scenery reflect his joy of simply wandering around the city, whether skipping down familiar paths on "Itsumo No Michi" (translated: "The Usual Path") or marching somewhere new on "détour." There's more to it than just taking new routes, though.
"I was very sick at the time. Things like that—nature and stuff—kind of healed me," Ujiie says. In mid-2018, he suddenly developed reflux esophagitis, which caused severe pain and hives. The scenery track "Medicine" alludes to this, and yet, its slowly unfolding melody and muffled vocals are so soothing it never feels like an ode to pain.
Scenery gives new wrinkles to Ujiie's style, but is still very much a Snail's House record. That's not the case with Alien Pop II, the sequel to a 2017 offering of the same name. "So I'm not very good at writing lyrics. I wanted to make something very pop music with lyrics on it, but I couldn't write them," he says. Instead, he more or less invented an extraterrestrial language using vocal effects ("I can't say what, that's my secret," he says). The first album leans towards electro-pop, particularly inspired by J-pop group Perfume, a trio known for busy songs featuring filtered vocals. For the sequel, Ujiie wanted more funk.
"I was interested in the indie kind of French electro, [like] Justice," he says. His knowledge of French dance music was pretty slim, but he happened to be friends with Parisian producer Rhodz, who introduced him to many artists that also influenced Alien Pop II. After three months of working on it, he released the brief set. The bubbliness of the initial installment remains, but is now joined by slinkier rhythms and a slightly more aggro energy. It's bloghouse rendered through CrunchyRoll.
Ujiie isn't slowing down. He says he's already working on multiple other albums, several tied to upcoming seasons. "I'm always working on separate albums at the same time. I do about three at the same time now," he says. It's a lot to juggle, to say the least. At least he'll be well-rested.
This entry was written by Editorial, posted on April 3, 2019 at 10:55 am, filed under featured music, top stories and tagged Electronic, feature, Japan, Snail's House. Bookmark the permalink. Follow any comments here with the RSS feed for this post. Post a comment or leave a trackback: Trackback URL.
What a nice insight into Ujico's background and influences. His is a style often emulated but rarely bettered – I look forward to hearing more.


No Broker Fee Apartments in NYC | No Broker. No Fee.
Aren't there already 5,000 sites out there for apartment hunting?
Probably more like 6,000... StreetEasy, Naked Apartments, the list goes on. But the problem was, we couldn't find a central repository of apartments you can rent without going through a broker. We didn't want to deal with the sketchiness and the fees.
What's the difference in "no fee" and "no broker"?
When filtering by "no fee" on other apartment sites, you still typically have to go through a broker, who is then compensated by the owners. Brokers get paid regardless. It's either by the tenant or by the landlord. When tenants attempt to avoid fees by going "no fee", they typically don't realize that the broker fee paid by the landlord is built into the price of the rental. So if you aren't going directly to the landlord (or management company), a fee is being paid.
We only list apartment buildings that have an onsite leasing office, or one nearby. When you find a place that fits what you are looking for, easily setup a showing through our site. Skip the middleman.
If you aren't going directly to the landlord, a fee is being paid.