#version 100

precision mediump float;
uniform vec2 uImageIncrement_Stage1;
uniform vec4 uKernel_Stage1[7];
uniform highp sampler2D uTextureSampler_0_Stage1;
varying mediump vec4 vcolor_Stage0;
varying highp vec2 vTransformedCoords_0_Stage0;
void main() {
    vec4 outputColor_Stage0;
    {
        outputColor_Stage0 = vcolor_Stage0;
    }
    vec4 output_Stage1;
    {
        output_Stage1 = vec4(0.0, 0.0, 0.0, 0.0);
        vec2 coord = vTransformedCoords_0_Stage0 - 12.0 * uImageIncrement_Stage1;
        vec2 coordSampled = vec2(0.0, 0.0);
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[0].x;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[0].y;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[0].z;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[0].w;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[1].x;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[1].y;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[1].z;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[1].w;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[2].x;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[2].y;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[2].z;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[2].w;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[3].x;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[3].y;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[3].z;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[3].w;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[4].x;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[4].y;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[4].z;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[4].w;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[5].x;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[5].y;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[5].z;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[5].w;
        coord += uImageIncrement_Stage1;
        coordSampled = coord;
        output_Stage1 += texture2D(uTextureSampler_0_Stage1, coordSampled) * uKernel_Stage1[6].x;
        coord += uImageIncrement_Stage1;
        output_Stage1 *= outputColor_Stage0;
    }
    {
        gl_FragColor = output_Stage1;
    }
}
