#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ float2 resolution;
};
struct tint_array_wrapper {
  int arr[256];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_7, thread float4* const tint_symbol_6, thread tint_array_wrapper* const tint_symbol_7, thread float4* const tint_symbol_8) {
  float2 pos = 0.0f;
  int2 ipos = 0;
  int i = 0;
  int2 p = 0;
  bool canwalk = false;
  int v = 0;
  int directions = 0;
  int j = 0;
  int d = 0;
  float4 const x_59 = *(tint_symbol_6);
  float2 const x_62 = x_7.resolution;
  pos = (float2(x_59.x, x_59.y) / x_62);
  float const x_65 = pos.x;
  float const x_69 = pos.y;
  ipos = int2(int((x_65 * 16.0f)), int((x_69 * 16.0f)));
  i = 0;
  while (true) {
    int const x_77 = i;
    if ((x_77 < 256)) {
    } else {
      break;
    }
    int const x_80 = i;
    (*(tint_symbol_7)).arr[x_80] = 0;
    {
      int const x_82 = i;
      i = as_type<int>((as_type<uint>(x_82) + as_type<uint>(1)));
    }
  }
  p = int2(0, 0);
  canwalk = true;
  v = 0;
  while (true) {
    bool x_104 = false;
    bool x_124 = false;
    bool x_144 = false;
    bool x_164 = false;
    bool x_105_phi = false;
    bool x_125_phi = false;
    bool x_145_phi = false;
    bool x_165_phi = false;
    int const x_88 = v;
    v = as_type<int>((as_type<uint>(x_88) + as_type<uint>(1)));
    directions = 0;
    int const x_91 = p.x;
    bool const x_92 = (x_91 > 0);
    x_105_phi = x_92;
    if (x_92) {
      int const x_96 = p.x;
      int const x_99 = p.y;
      int const x_103 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_96) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_99) * as_type<uint>(16))))))];
      x_104 = (x_103 == 0);
      x_105_phi = x_104;
    }
    bool const x_105 = x_105_phi;
    if (x_105) {
      int const x_108 = directions;
      directions = as_type<int>((as_type<uint>(x_108) + as_type<uint>(1)));
    }
    int const x_111 = p.y;
    bool const x_112 = (x_111 > 0);
    x_125_phi = x_112;
    if (x_112) {
      int const x_116 = p.x;
      int const x_118 = p.y;
      int const x_123 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_116) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_118) - as_type<uint>(2)))) * as_type<uint>(16))))))];
      x_124 = (x_123 == 0);
      x_125_phi = x_124;
    }
    bool const x_125 = x_125_phi;
    if (x_125) {
      int const x_128 = directions;
      directions = as_type<int>((as_type<uint>(x_128) + as_type<uint>(1)));
    }
    int const x_131 = p.x;
    bool const x_132 = (x_131 < 14);
    x_145_phi = x_132;
    if (x_132) {
      int const x_136 = p.x;
      int const x_139 = p.y;
      int const x_143 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_136) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_139) * as_type<uint>(16))))))];
      x_144 = (x_143 == 0);
      x_145_phi = x_144;
    }
    bool const x_145 = x_145_phi;
    if (x_145) {
      int const x_148 = directions;
      directions = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
    }
    int const x_151 = p.y;
    bool const x_152 = (x_151 < 14);
    x_165_phi = x_152;
    if (x_152) {
      int const x_156 = p.x;
      int const x_158 = p.y;
      int const x_163 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_156) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_158) + as_type<uint>(2)))) * as_type<uint>(16))))))];
      x_164 = (x_163 == 0);
      x_165_phi = x_164;
    }
    bool const x_165 = x_165_phi;
    if (x_165) {
      int const x_168 = directions;
      directions = as_type<int>((as_type<uint>(x_168) + as_type<uint>(1)));
    }
    bool x_229 = false;
    bool x_242 = false;
    bool x_281 = false;
    int x_288 = 0;
    int x_289 = 0;
    int x_295 = 0;
    int x_296 = 0;
    tint_array_wrapper x_303 = {};
    tint_array_wrapper x_304 = {};
    int x_315 = 0;
    int x_316 = 0;
    bool x_359 = false;
    bool x_372 = false;
    bool x_411 = false;
    bool x_424 = false;
    bool x_230_phi = false;
    bool x_243_phi = false;
    bool x_282_phi = false;
    int x_290_phi = 0;
    int x_297_phi = 0;
    tint_array_wrapper x_305_phi = {};
    int x_317_phi = 0;
    bool x_360_phi = false;
    bool x_373_phi = false;
    bool x_412_phi = false;
    bool x_425_phi = false;
    int const x_170 = directions;
    if ((x_170 == 0)) {
      canwalk = false;
      i = 0;
      while (true) {
        int const x_179 = i;
        if ((x_179 < 8)) {
        } else {
          break;
        }
        j = 0;
        while (true) {
          int const x_186 = j;
          if ((x_186 < 8)) {
          } else {
            break;
          }
          int const x_189 = j;
          int const x_191 = i;
          int const x_196 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_189) * as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_191) * as_type<uint>(2)))) * as_type<uint>(16))))))];
          if ((x_196 == 0)) {
            int const x_200 = j;
            p.x = as_type<int>((as_type<uint>(x_200) * as_type<uint>(2)));
            int const x_203 = i;
            p.y = as_type<int>((as_type<uint>(x_203) * as_type<uint>(2)));
            canwalk = true;
          }
          {
            int const x_206 = j;
            j = as_type<int>((as_type<uint>(x_206) + as_type<uint>(1)));
          }
        }
        {
          int const x_208 = i;
          i = as_type<int>((as_type<uint>(x_208) + as_type<uint>(1)));
        }
      }
      int const x_211 = p.x;
      int const x_213 = p.y;
      (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_211) + as_type<uint>(as_type<int>((as_type<uint>(x_213) * as_type<uint>(16))))))] = 1;
    } else {
      int const x_217 = v;
      int const x_218 = directions;
      d = (x_217 % x_218);
      int const x_220 = directions;
      int const x_221 = v;
      v = as_type<int>((as_type<uint>(x_221) + as_type<uint>(x_220)));
      int const x_223 = d;
      bool const x_224 = (x_223 >= 0);
      x_230_phi = x_224;
      if (x_224) {
        int const x_228 = p.x;
        x_229 = (x_228 > 0);
        x_230_phi = x_229;
      }
      bool const x_230 = x_230_phi;
      x_243_phi = x_230;
      if (x_230) {
        int const x_234 = p.x;
        int const x_237 = p.y;
        int const x_241 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_234) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_237) * as_type<uint>(16))))))];
        x_242 = (x_241 == 0);
        x_243_phi = x_242;
      }
      bool const x_243 = x_243_phi;
      if (x_243) {
        int const x_246 = d;
        d = as_type<int>((as_type<uint>(x_246) - as_type<uint>(1)));
        int const x_249 = p.x;
        int const x_251 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_249) + as_type<uint>(as_type<int>((as_type<uint>(x_251) * as_type<uint>(16))))))] = 1;
        int const x_256 = p.x;
        int const x_259 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_256) - as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_259) * as_type<uint>(16))))))] = 1;
        int const x_264 = p.x;
        int const x_267 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_264) - as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_267) * as_type<uint>(16))))))] = 1;
        int const x_272 = p.x;
        p.x = as_type<int>((as_type<uint>(x_272) - as_type<uint>(2)));
      }
      int const x_275 = d;
      bool const x_276 = (x_275 >= 0);
      x_282_phi = x_276;
      if (x_276) {
        int const x_280 = p.y;
        x_281 = (x_280 > 0);
        x_282_phi = x_281;
      }
      bool const x_282 = x_282_phi;
      if (x_282) {
        x_288 = p.x;
        x_290_phi = x_288;
      } else {
        x_289 = 0;
        x_290_phi = x_289;
      }
      int const x_290 = x_290_phi;
      if (x_282) {
        x_295 = p.y;
        x_297_phi = x_295;
      } else {
        x_296 = 0;
        x_297_phi = x_296;
      }
      int const x_297 = x_297_phi;
      int const x_299 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_297) - as_type<uint>(2)))) * as_type<uint>(16)));
      if (x_282) {
        x_303 = *(tint_symbol_7);
        x_305_phi = x_303;
      } else {
        tint_array_wrapper const tint_symbol_2 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
        x_304 = tint_symbol_2;
        x_305_phi = x_304;
      }
      tint_array_wrapper const x_305 = x_305_phi;
      if (x_282) {
        tint_array_wrapper const tint_symbol_3 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
        *(tint_symbol_7) = tint_symbol_3;
      }
      if (x_282) {
        *(tint_symbol_7) = x_305;
      }
      if (x_282) {
        x_315 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_290) + as_type<uint>(x_299)))];
        x_317_phi = x_315;
      } else {
        x_316 = 0;
        x_317_phi = x_316;
      }
      int const x_317 = x_317_phi;
      bool const x_318 = (x_317 == 0);
      if (select(x_282, x_318, x_282)) {
        int const x_323 = d;
        d = as_type<int>((as_type<uint>(x_323) - as_type<uint>(1)));
        int const x_326 = p.x;
        int const x_328 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_326) + as_type<uint>(as_type<int>((as_type<uint>(x_328) * as_type<uint>(16))))))] = 1;
        int const x_333 = p.x;
        int const x_335 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_333) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_335) - as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
        int const x_341 = p.x;
        int const x_343 = p.y;
        tint_array_wrapper const x_345 = *(tint_symbol_7);
        tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
        *(tint_symbol_7) = tint_symbol_4;
        *(tint_symbol_7) = x_345;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_341) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_343) - as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
        int const x_350 = p.y;
        p.y = as_type<int>((as_type<uint>(x_350) - as_type<uint>(2)));
      }
      int const x_353 = d;
      bool const x_354 = (x_353 >= 0);
      x_360_phi = x_354;
      if (x_354) {
        int const x_358 = p.x;
        x_359 = (x_358 < 14);
        x_360_phi = x_359;
      }
      bool const x_360 = x_360_phi;
      x_373_phi = x_360;
      if (x_360) {
        int const x_364 = p.x;
        int const x_367 = p.y;
        int const x_371 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_364) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_367) * as_type<uint>(16))))))];
        x_372 = (x_371 == 0);
        x_373_phi = x_372;
      }
      bool const x_373 = x_373_phi;
      if (x_373) {
        int const x_376 = d;
        d = as_type<int>((as_type<uint>(x_376) - as_type<uint>(1)));
        int const x_379 = p.x;
        int const x_381 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_379) + as_type<uint>(as_type<int>((as_type<uint>(x_381) * as_type<uint>(16))))))] = 1;
        int const x_386 = p.x;
        int const x_389 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_386) + as_type<uint>(1)))) + as_type<uint>(as_type<int>((as_type<uint>(x_389) * as_type<uint>(16))))))] = 1;
        int const x_394 = p.x;
        int const x_397 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_394) + as_type<uint>(2)))) + as_type<uint>(as_type<int>((as_type<uint>(x_397) * as_type<uint>(16))))))] = 1;
        int const x_402 = p.x;
        p.x = as_type<int>((as_type<uint>(x_402) + as_type<uint>(2)));
      }
      int const x_405 = d;
      bool const x_406 = (x_405 >= 0);
      x_412_phi = x_406;
      if (x_406) {
        int const x_410 = p.y;
        x_411 = (x_410 < 14);
        x_412_phi = x_411;
      }
      bool const x_412 = x_412_phi;
      x_425_phi = x_412;
      if (x_412) {
        int const x_416 = p.x;
        int const x_418 = p.y;
        int const x_423 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_416) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_418) + as_type<uint>(2)))) * as_type<uint>(16))))))];
        x_424 = (x_423 == 0);
        x_425_phi = x_424;
      }
      bool const x_425 = x_425_phi;
      if (x_425) {
        int const x_428 = d;
        d = as_type<int>((as_type<uint>(x_428) - as_type<uint>(1)));
        int const x_431 = p.x;
        int const x_433 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_431) + as_type<uint>(as_type<int>((as_type<uint>(x_433) * as_type<uint>(16))))))] = 1;
        int const x_438 = p.x;
        int const x_440 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_438) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_440) + as_type<uint>(1)))) * as_type<uint>(16))))))] = 1;
        int const x_446 = p.x;
        int const x_448 = p.y;
        (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(x_446) + as_type<uint>(as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_448) + as_type<uint>(2)))) * as_type<uint>(16))))))] = 1;
        int const x_454 = p.y;
        p.y = as_type<int>((as_type<uint>(x_454) + as_type<uint>(2)));
      }
    }
    int const x_458 = ipos.y;
    int const x_461 = ipos.x;
    int const x_464 = (*(tint_symbol_7)).arr[as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(x_458) * as_type<uint>(16)))) + as_type<uint>(x_461)))];
    if ((x_464 == 1)) {
      *(tint_symbol_8) = float4(1.0f, 1.0f, 1.0f, 1.0f);
      return;
    }
    {
      bool const x_468 = canwalk;
      if (x_468) {
      } else {
        break;
      }
    }
  }
  *(tint_symbol_8) = float4(0.0f, 0.0f, 0.0f, 1.0f);
  return;
}

main_out tint_symbol_inner(constant buf0& x_7, float4 gl_FragCoord_param, thread float4* const tint_symbol_9, thread tint_array_wrapper* const tint_symbol_10, thread float4* const tint_symbol_11) {
  *(tint_symbol_9) = gl_FragCoord_param;
  main_1(x_7, tint_symbol_9, tint_symbol_10, tint_symbol_11);
  main_out const tint_symbol_5 = {.x_GLF_color_1=*(tint_symbol_11)};
  return tint_symbol_5;
}

fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_7 [[buffer(0)]]) {
  thread float4 tint_symbol_12 = 0.0f;
  thread tint_array_wrapper tint_symbol_13 = {};
  thread float4 tint_symbol_14 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_7, gl_FragCoord_param, &(tint_symbol_12), &(tint_symbol_13), &(tint_symbol_14));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

