vec3 hsv2rgb(vec3 c)
{
    vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
    vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
    return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
}


vec3 hsl2rgb( in vec3 c )
{
    vec3 rgb = clamp( abs(mod(c.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 );

    return c.z + c.y * (rgb-0.5)*(1.0-abs(2.0*c.z-1.0));
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
	vec2 u = 2.*(2.*fragCoord-iResolution.xy)/iResolution.y;
    float pi = 3.14159265359;
    float p = 1.+sin(iTime)*.15;
    u *= p;
    vec2 v = u;
    float e = -4.;
    for(float i = 1.5; i < 3.5; ++i)
    {
        //u = sin(atan(u.y,u.x)*e+vec2(0.,pi*.5))*pow(length(u),-1.+4./(e+1.));
        float ttt = (1.0+0.1*sin(iTime))*pi;
        vec2 ooo = vec2(pi*0.5*sin(ttt),pi*.5*cos(ttt));
        float div = 1.1; // + .6* sin(iTime);
        u = sin(atan(u.y,u.x)*e+ooo)*pow(length(u),-1.+4./div);//(e+1.+xxx));
        //u = sin(atan(u.y,u.x)*e+vec2(pi*.5*sin(iTime),pi*.5*cos(iTime)))*pow(length(u),-1.+4./(e+1.));


        u+= v/p;
    }

    float iTime2 = 0.5 + 2.25*sin(iTime);// 0.2*pi;
    u = vec2(u.x*cos(iTime2),u.y*sin(iTime2));
    vec3 hsl = vec3(
        5.5+4.4*sin(2.*iTime+length(u*2.)),
        2.7+.2*cos(3.*iTime+length(u*2.)),
        exp(dot(u,u)*-.1));
    vec3 rgb = hsv2rgb(hsl);
    fragColor = vec4(rgb, 1.0);

}