[[block]]
struct buf0 {
  injectionSwitch : vec2<f32>;
};

var<private> data : array<i32, 10>;

var<private> temp : array<i32, 10>;

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
  var k : i32;
  var i : i32;
  var j : i32;
  var i_1 : i32;
  let x_262 : i32 = *(from);
  k = x_262;
  let x_263 : i32 = *(from);
  i = x_263;
  let x_264 : i32 = *(mid);
  j = (x_264 + 1);
  loop {
    let x_270 : i32 = i;
    let x_271 : i32 = *(mid);
    let x_273 : i32 = j;
    let x_274 : i32 = *(to);
    if (((x_270 <= x_271) & (x_273 <= x_274))) {
    } else {
      break;
    }
    let x_278 : i32 = i;
    let x_280 : i32 = data[x_278];
    let x_281 : i32 = j;
    let x_283 : i32 = data[x_281];
    if ((x_280 < x_283)) {
      let x_288 : i32 = k;
      k = (x_288 + 1);
      let x_290 : i32 = i;
      i = (x_290 + 1);
      let x_293 : i32 = data[x_290];
      temp[x_288] = x_293;
    } else {
      let x_295 : i32 = k;
      k = (x_295 + 1);
      let x_297 : i32 = j;
      j = (x_297 + 1);
      let x_300 : i32 = data[x_297];
      temp[x_295] = x_300;
    }
  }
  loop {
    let x_306 : i32 = i;
    let x_308 : i32 = i;
    let x_309 : i32 = *(mid);
    if (((x_306 < 10) & (x_308 <= x_309))) {
    } else {
      break;
    }
    let x_313 : i32 = k;
    k = (x_313 + 1);
    let x_315 : i32 = i;
    i = (x_315 + 1);
    let x_318 : i32 = data[x_315];
    temp[x_313] = x_318;
  }
  let x_320 : i32 = *(from);
  i_1 = x_320;
  loop {
    let x_325 : i32 = i_1;
    let x_326 : i32 = *(to);
    if ((x_325 <= x_326)) {
    } else {
      break;
    }
    let x_329 : i32 = i_1;
    let x_330 : i32 = i_1;
    let x_332 : i32 = temp[x_330];
    data[x_329] = x_332;

    continuing {
      let x_334 : i32 = i_1;
      i_1 = (x_334 + 1);
    }
  }
  return;
}

fn mergeSort_() {
  var low : i32;
  var high : i32;
  var m : i32;
  var i_2 : i32;
  var from_1 : i32;
  var mid_1 : i32;
  var to_1 : i32;
  var param : i32;
  var param_1 : i32;
  var param_2 : i32;
  low = 0;
  high = 9;
  m = 1;
  loop {
    let x_341 : i32 = m;
    let x_342 : i32 = high;
    if ((x_341 <= x_342)) {
    } else {
      break;
    }
    let x_345 : i32 = low;
    i_2 = x_345;
    loop {
      let x_350 : i32 = i_2;
      let x_351 : i32 = high;
      if ((x_350 < x_351)) {
      } else {
        break;
      }
      let x_354 : i32 = i_2;
      from_1 = x_354;
      let x_355 : i32 = i_2;
      let x_356 : i32 = m;
      mid_1 = ((x_355 + x_356) - 1);
      let x_359 : i32 = i_2;
      let x_360 : i32 = m;
      let x_364 : i32 = high;
      to_1 = min(((x_359 + (2 * x_360)) - 1), x_364);
      let x_366 : i32 = from_1;
      param = x_366;
      let x_367 : i32 = mid_1;
      param_1 = x_367;
      let x_368 : i32 = to_1;
      param_2 = x_368;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_370 : i32 = m;
        let x_372 : i32 = i_2;
        i_2 = (x_372 + (2 * x_370));
      }
    }

    continuing {
      let x_374 : i32 = m;
      m = (2 * x_374);
    }
  }
  return;
}

fn main_1() {
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  let x_86 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_86);
  loop {
    let x_92 : i32 = i_3;
    switch(x_92) {
      case 9: {
        let x_122 : i32 = i_3;
        data[x_122] = -5;
      }
      case 8: {
        let x_120 : i32 = i_3;
        data[x_120] = -4;
      }
      case 7: {
        let x_118 : i32 = i_3;
        data[x_118] = -3;
      }
      case 6: {
        let x_116 : i32 = i_3;
        data[x_116] = -2;
      }
      case 5: {
        let x_114 : i32 = i_3;
        data[x_114] = -1;
      }
      case 4: {
        let x_112 : i32 = i_3;
        data[x_112] = 0;
      }
      case 3: {
        let x_110 : i32 = i_3;
        data[x_110] = 1;
      }
      case 2: {
        let x_108 : i32 = i_3;
        data[x_108] = 2;
      }
      case 1: {
        let x_106 : i32 = i_3;
        data[x_106] = 3;
      }
      case 0: {
        let x_104 : i32 = i_3;
        data[x_104] = 4;
      }
      default: {
      }
    }
    let x_124 : i32 = i_3;
    i_3 = (x_124 + 1);

    continuing {
      let x_126 : i32 = i_3;
      if ((x_126 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_132 : i32 = j_1;
    let x_133 : bool = (x_132 < 10);
    let x_135 : f32 = x_28.injectionSwitch.x;
    if (!((x_135 <= 1.0))) {
      grey = 1.0;
    }
    if (x_133) {
    } else {
      break;
    }
    let x_140 : i32 = j_1;
    let x_141 : i32 = j_1;
    let x_143 : i32 = data[x_141];
    temp[x_140] = x_143;

    continuing {
      let x_145 : i32 = j_1;
      j_1 = (x_145 + 1);
    }
  }
  mergeSort_();
  let x_149 : f32 = gl_FragCoord.y;
  if ((i32(x_149) < 30)) {
    let x_156 : i32 = data[0];
    grey = (0.5 + (f32(x_156) / 10.0));
  } else {
    let x_161 : f32 = gl_FragCoord.y;
    if ((i32(x_161) < 60)) {
      let x_168 : i32 = data[1];
      grey = (0.5 + (f32(x_168) / 10.0));
    } else {
      let x_173 : f32 = gl_FragCoord.y;
      if ((i32(x_173) < 90)) {
        let x_180 : i32 = data[2];
        grey = (0.5 + (f32(x_180) / 10.0));
      } else {
        let x_185 : f32 = gl_FragCoord.y;
        if ((i32(x_185) < 120)) {
          let x_192 : i32 = data[3];
          grey = (0.5 + (f32(x_192) / 10.0));
        } else {
          let x_197 : f32 = gl_FragCoord.y;
          if ((i32(x_197) < 150)) {
            discard;
          } else {
            let x_204 : f32 = gl_FragCoord.y;
            if ((i32(x_204) < 180)) {
              let x_211 : i32 = data[5];
              grey = (0.5 + (f32(x_211) / 10.0));
            } else {
              let x_216 : f32 = gl_FragCoord.y;
              if ((i32(x_216) < 210)) {
                let x_223 : i32 = data[6];
                grey = (0.5 + (f32(x_223) / 10.0));
              } else {
                let x_228 : f32 = gl_FragCoord.y;
                if ((i32(x_228) < 240)) {
                  let x_235 : i32 = data[7];
                  grey = (0.5 + (f32(x_235) / 10.0));
                } else {
                  let x_240 : f32 = gl_FragCoord.y;
                  var guard233 : bool = true;
                  if ((i32(x_240) < 270)) {
                    let x_247 : i32 = data[8];
                    grey = (0.5 + (f32(x_247) / 10.0));
                    guard233 = false;
                  } else {
                    if (guard233) {
                      let x_252 : f32 = x_28.injectionSwitch.y;
                      if (!((0.0 < x_252))) {
                        guard233 = false;
                      }
                      if (guard233) {
                        discard;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_255 : f32 = grey;
  let x_256 : vec3<f32> = vec3<f32>(x_255, x_255, x_255);
  x_GLF_color = vec4<f32>(x_256.x, x_256.y, x_256.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);
}
