#define rot(a) mat2(cos(a + vec4(0, 11, 33, 0)))
#define t iTime

void mainImage(out vec4 o, vec2 u) {
    vec2  r = iResolution.xy;
          u = (u - r.xy / 2.) / r.y;
          o -= o;

    float i, d, e, a;
    vec3 p, q,
         D = vec3(2. * u, 1);

    p --;
    while(i++ < 42.) {
        q = p;

        e = length(q) + cos(t) * .25 - .5;

        q = vec3(
                log2(e) + t,
                -q.z / e - 1.,
                atan(q.x, q.y)
            );


        d = i / 1e3 + q.y;
        a = .5;
        while((a += a) < 512.)
            d += cos(
                    dot(
                        cos(q.zyx * a/2.),
                        cos(q.xzy * a)
                    )) / a;

        i > 24. ? D = -vec3(1): D;

        p += D * d * e * .15;

        o.rgb += clamp(
                     pow(
                         vec3(d),
                         vec3(4,2,3)
                     ) / vec3(35,25,15),
                     0., 1.
                 );
    }
}

