abstract writer and router