[[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_251 : i32 = *(from);
  k = x_251;
  let x_252 : i32 = *(from);
  i = x_252;
  let x_253 : i32 = *(mid);
  j = (x_253 + 1);
  loop {
    let x_259 : i32 = i;
    let x_260 : i32 = *(mid);
    let x_262 : i32 = j;
    let x_263 : i32 = *(to);
    if (((x_259 <= x_260) & (x_262 <= x_263))) {
    } else {
      break;
    }
    let x_267 : i32 = i;
    let x_269 : i32 = data[x_267];
    let x_270 : i32 = j;
    let x_272 : i32 = data[x_270];
    if ((x_269 < x_272)) {
      let x_277 : i32 = k;
      k = (x_277 + 1);
      let x_279 : i32 = i;
      i = (x_279 + 1);
      let x_282 : i32 = data[x_279];
      temp[x_277] = x_282;
    } else {
      let x_284 : i32 = k;
      k = (x_284 + 1);
      let x_286 : i32 = j;
      j = (x_286 + 1);
      let x_289 : i32 = data[x_286];
      temp[x_284] = x_289;
    }
  }
  loop {
    let x_295 : i32 = i;
    let x_297 : i32 = i;
    let x_298 : i32 = *(mid);
    if (((x_295 < 10) & (x_297 <= x_298))) {
    } else {
      break;
    }
    let x_302 : i32 = k;
    k = (x_302 + 1);
    let x_304 : i32 = i;
    i = (x_304 + 1);
    let x_307 : i32 = data[x_304];
    temp[x_302] = x_307;
  }
  let x_309 : i32 = *(from);
  i_1 = x_309;
  loop {
    let x_314 : i32 = i_1;
    let x_315 : i32 = *(to);
    if ((x_314 <= x_315)) {
    } else {
      break;
    }
    let x_318 : i32 = i_1;
    let x_319 : i32 = i_1;
    let x_321 : i32 = temp[x_319];
    data[x_318] = x_321;

    continuing {
      let x_323 : i32 = i_1;
      i_1 = (x_323 + 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_330 : i32 = m;
    let x_331 : i32 = high;
    if ((x_330 <= x_331)) {
    } else {
      break;
    }
    let x_334 : i32 = low;
    i_2 = x_334;
    loop {
      let x_339 : i32 = i_2;
      let x_340 : i32 = high;
      if ((x_339 < x_340)) {
      } else {
        break;
      }
      let x_343 : i32 = i_2;
      from_1 = x_343;
      let x_344 : i32 = i_2;
      let x_345 : i32 = m;
      mid_1 = ((x_344 + x_345) - 1);
      let x_348 : i32 = i_2;
      let x_349 : i32 = m;
      let x_353 : i32 = high;
      to_1 = min(((x_348 + (2 * x_349)) - 1), x_353);
      let x_355 : i32 = from_1;
      param = x_355;
      let x_356 : i32 = mid_1;
      param_1 = x_356;
      let x_357 : i32 = to_1;
      param_2 = x_357;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_359 : i32 = m;
        let x_361 : i32 = i_2;
        i_2 = (x_361 + (2 * x_359));
      }
    }

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

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

    continuing {
      let x_124 : i32 = i_3;
      if ((x_124 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_130 : i32 = j_1;
    if ((x_130 < 10)) {
    } else {
      break;
    }
    let x_133 : i32 = j_1;
    let x_134 : i32 = j_1;
    let x_136 : i32 = data[x_134];
    temp[x_133] = x_136;

    continuing {
      let x_138 : i32 = j_1;
      j_1 = (x_138 + 1);
    }
  }
  mergeSort_();
  let x_142 : f32 = gl_FragCoord.y;
  if ((i32(x_142) < 30)) {
    let x_149 : i32 = data[0];
    grey = (0.5 + (f32(x_149) / 10.0));
  } else {
    let x_154 : f32 = gl_FragCoord.y;
    if ((i32(x_154) < 60)) {
      let x_161 : i32 = data[1];
      grey = (0.5 + (f32(x_161) / 10.0));
    } else {
      let x_166 : f32 = gl_FragCoord.y;
      if ((i32(x_166) < 90)) {
        let x_173 : i32 = data[2];
        grey = (0.5 + (f32(x_173) / 10.0));
      } else {
        let x_178 : f32 = gl_FragCoord.y;
        if ((i32(x_178) < 120)) {
          let x_185 : i32 = data[3];
          grey = (0.5 + (f32(x_185) / 10.0));
        } else {
          let x_190 : f32 = gl_FragCoord.y;
          if ((i32(x_190) < 150)) {
            discard;
          } else {
            let x_197 : f32 = gl_FragCoord.y;
            if ((i32(x_197) < 180)) {
              let x_204 : i32 = data[5];
              grey = (0.5 + (f32(x_204) / 10.0));
            } else {
              let x_209 : f32 = gl_FragCoord.y;
              if ((i32(x_209) < 210)) {
                let x_216 : i32 = data[6];
                grey = (0.5 + (f32(x_216) / 10.0));
              } else {
                let x_221 : f32 = gl_FragCoord.y;
                if ((i32(x_221) < 240)) {
                  let x_228 : i32 = data[7];
                  grey = (0.5 + (f32(x_228) / 10.0));
                } else {
                  let x_233 : f32 = gl_FragCoord.y;
                  if ((i32(x_233) < 270)) {
                    let x_240 : i32 = data[8];
                    grey = (0.5 + (f32(x_240) / 10.0));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_244 : f32 = grey;
  let x_245 : vec3<f32> = vec3<f32>(x_244, x_244, x_244);
  x_GLF_color = vec4<f32>(x_245.x, x_245.y, x_245.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);
}
