struct buf0 {
  resolution : vec2<f32>;
};

[[group(0), binding(0)]] var<uniform> x_7 : buf0;

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var c : vec3<f32>;
  var x_51 : f32;
  var x_55 : f32;
  var x_56 : f32;
  var x_81 : f32;
  var x_82 : f32;
  var x_118 : f32;
  var x_119 : f32;
  var x_55_phi : f32;
  var x_58_phi : i32;
  var x_81_phi : f32;
  var x_82_phi : f32;
  var x_83_phi : bool;
  var x_85_phi : f32;
  var x_122_phi : f32;
  var x_129_phi : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_47 : f32 = x_7.resolution.x;
  let x_49 : f32 = round((x_47 * 0.125));
  x_51 = gl_FragCoord.x;
  switch(0u) {
    default: {
      x_55_phi = -0.5;
      x_58_phi = 1;
      loop {
        var x_68 : f32;
        var x_76 : f32;
        var x_59 : i32;
        var x_56_phi : f32;
        x_55 = x_55_phi;
        let x_58 : i32 = x_58_phi;
        x_81_phi = 0.0;
        x_82_phi = x_55;
        x_83_phi = false;
        if ((x_58 < 800)) {
        } else {
          break;
        }
        var x_75 : f32;
        var x_76_phi : f32;
        if (((x_58 % 32) == 0)) {
          x_68 = (x_55 + 0.400000006);
          x_56_phi = x_68;
        } else {
          x_76_phi = x_55;
          if (((f32(x_58) - (round(x_49) * floor((f32(x_58) / round(x_49))))) <= 0.01)) {
            x_75 = (x_55 + 100.0);
            x_76_phi = x_75;
          }
          x_76 = x_76_phi;
          x_56_phi = x_76;
        }
        x_56 = x_56_phi;
        if ((f32(x_58) >= x_51)) {
          x_81_phi = x_56;
          x_82_phi = x_56;
          x_83_phi = true;
          break;
        }

        continuing {
          x_59 = (x_58 + 1);
          x_55_phi = x_56;
          x_58_phi = x_59;
        }
      }
      x_81 = x_81_phi;
      x_82 = x_82_phi;
      let x_83 : bool = x_83_phi;
      x_85_phi = x_81;
      if (x_83) {
        break;
      }
      x_85_phi = x_82;
    }
  }
  var x_88 : f32;
  var x_92 : f32;
  var x_93 : f32;
  var x_92_phi : f32;
  var x_95_phi : i32;
  var x_118_phi : f32;
  var x_119_phi : f32;
  var x_120_phi : bool;
  let x_85 : f32 = x_85_phi;
  c.x = x_85;
  x_88 = gl_FragCoord.y;
  switch(0u) {
    default: {
      x_92_phi = -0.5;
      x_95_phi = 1;
      loop {
        var x_105 : f32;
        var x_113 : f32;
        var x_96 : i32;
        var x_93_phi : f32;
        x_92 = x_92_phi;
        let x_95 : i32 = x_95_phi;
        x_118_phi = 0.0;
        x_119_phi = x_92;
        x_120_phi = false;
        if ((x_95 < 800)) {
        } else {
          break;
        }
        var x_112 : f32;
        var x_113_phi : f32;
        if (((x_95 % 32) == 0)) {
          x_105 = (x_92 + 0.400000006);
          x_93_phi = x_105;
        } else {
          x_113_phi = x_92;
          if (((f32(x_95) - (round(x_49) * floor((f32(x_95) / round(x_49))))) <= 0.01)) {
            x_112 = (x_92 + 100.0);
            x_113_phi = x_112;
          }
          x_113 = x_113_phi;
          x_93_phi = x_113;
        }
        x_93 = x_93_phi;
        if ((f32(x_95) >= x_88)) {
          x_118_phi = x_93;
          x_119_phi = x_93;
          x_120_phi = true;
          break;
        }

        continuing {
          x_96 = (x_95 + 1);
          x_92_phi = x_93;
          x_95_phi = x_96;
        }
      }
      x_118 = x_118_phi;
      x_119 = x_119_phi;
      let x_120 : bool = x_120_phi;
      x_122_phi = x_118;
      if (x_120) {
        break;
      }
      x_122_phi = x_119;
    }
  }
  let x_122 : f32 = x_122_phi;
  c.y = x_122;
  let x_124 : f32 = c.x;
  let x_125 : f32 = c.y;
  c.z = (x_124 + x_125);
  x_129_phi = 0;
  loop {
    var x_130 : i32;
    let x_129 : i32 = x_129_phi;
    if ((x_129 < 3)) {
    } else {
      break;
    }
    let x_136 : f32 = c[x_129];
    if ((x_136 >= 1.0)) {
      let x_140 : f32 = c[x_129];
      let x_141 : f32 = c[x_129];
      c[x_129] = (x_140 * x_141);
    }

    continuing {
      x_130 = (x_129 + 1);
      x_129_phi = x_130;
    }
  }
  let x_143 : vec3<f32> = c;
  let x_145 : vec3<f32> = normalize(abs(x_143));
  x_GLF_color = vec4<f32>(x_145.x, x_145.y, x_145.z, 1.0);
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
