#include <metal_stdlib>

using namespace metal;
struct Output {
  float4 Position;
  float4 color;
};
struct tint_symbol_1 {
  float4 color [[user(locn0)]];
  float4 Position [[position]];
};
struct tint_array_wrapper {
  float2 arr[4];
};
struct tint_array_wrapper_1 {
  float4 arr[4];
};

Output tint_symbol_inner(uint VertexIndex, uint InstanceIndex) {
  tint_array_wrapper zv = {.arr={float2(0.200000003f, 0.200000003f), float2(0.300000012f, 0.300000012f), float2(-0.100000001f, -0.100000001f), float2(1.100000024f, 1.100000024f)}};
  float const z = zv.arr[InstanceIndex].x;
  Output output = {};
  output.Position = float4(0.5f, 0.5f, z, 1.0f);
  tint_array_wrapper_1 colors = {.arr={float4(1.0f, 0.0f, 0.0f, 1.0f), float4(0.0f, 1.0f, 0.0f, 1.0f), float4(0.0f, 0.0f, 1.0f, 1.0f), float4(1.0f, 1.0f, 1.0f, 1.0f)}};
  output.color = colors.arr[InstanceIndex];
  return output;
}

vertex tint_symbol_1 tint_symbol(uint VertexIndex [[vertex_id]], uint InstanceIndex [[instance_id]]) {
  Output const inner_result = tint_symbol_inner(VertexIndex, InstanceIndex);
  tint_symbol_1 wrapper_result = {};
  wrapper_result.Position = inner_result.Position;
  wrapper_result.color = inner_result.color;
  return wrapper_result;
}

