
{
  softwareVersion = {majorVersion = 8, buildRevision = 183, revisionString = "b7c79ba4cf"}, 
  content = => 'Compo @c01c018d31bdbcb7 
  {
    tools = 
    {
      => 'ParameterBank @305887d821f654b0 
      {
        parameters = 
        {
          => 'Parameter(Percentage) @7240998078382efb 
          {
            targets = 
            {
              => 'ParameterLinkTarget @a6a9e0466aa02fbc 
              {
                modifiers = 
                {
                  => 'FunctionLinkModifier({input = Percentage, output = Percentage}) @7c55e5845a673b17 
                  {
                    function = => 'KeyframeFunction({input = Percentage, output = Percentage}) @3d34a66ea83ed2d6 
                    {
                      keyframes = 
                      {
                        => @a15fb3405740929 
                        {
                          inputInterpolator = => 'LinearKeyframeInterpolator @d70086c3926ebc80 void, 
                          outputInterpolator = => 'LinearKeyframeInterpolator @b5bdcae19c81428b void
                        }, 
                        => @a250c040a6f6373a 
                        {
                          position = 1., 
                          key = 1., 
                          inputInterpolator = => 'LinearKeyframeInterpolator @384e748981eb9fbd void, 
                          outputInterpolator = => 'LinearKeyframeInterpolator @ad2361b42b12d184 void
                        }
                      }
                    }
                  }
                }, 
                target = {"data", -> @5e64a5bffce82864, "value"}
              }
            }, 
            value = 1.
          }
        }
      }, 
      => 'AnimationBank @141f7aa3aaace374 
      {
        animations = 
        {
          => 'FunctionCue(Percentage) @2bd9f8eb46e7106f 
          {
            transport = {state = "paused", position = 0.840210524321, length = 3.}, 
            parameters = {launchMode = "restartWithActivation", out = {value = 3.}, looping = True}, 
            targets = 
            {
              => 'ParameterLinkTarget @64576d4f3179b94e {target = {"data", -> @7240998078382efb, "value"}}
            }, 
            function = => 'ParametricScalarFunction({input = Seconds, output = Percentage}) @aeb87a99e537fa41 
            {
              shape = => 'LinearRampFunctionShape @1770355af597f3b8 void, 
              parameters = {maximum = 1., period = 3.}
            }
          }
        }
      }
    }, 
    processor = {resolution = {preset = "hd1080"}, alphaLayer = False}, 
    mainAnimation = => 'TimelineCue @cd5297f25009c3f6 void, 
    renderables = 
    {
      => 'Layer @4880b27ec37bfb06 
      {
        generator = => 'ShaderToyLayerGenerator @caf784b33cd94599 
        {
          modifiers = 
          {
            => 'AntiAliasingLayerModifier @e820a8b3f381ba0 {size = {width = 0.000520833333333, height = 0.000925925925926, ratio = 0.5625}}, 
            => 'BlurLayerModifier @4a695993f5b56c23 
            {
              intensity = 0.531, 
              shape = => 'GaussianBlurShape @55b0675a7aa7cf2 void, 
              samples = 
              {
                distance = {width = 0.00208333333333, height = 0.0037037037037, ratio = 0.5625}, 
                downSampling = {width = "one", height = "one"}
              }, 
              additionalBrightness = 0.371
            }
          }, 
          image = "uniform float p = Percentage;

float map(vec2 p)
{
  p *= 1.2;
  p.y *= 1.2;
  p.x += 0.2;
  if (p.x > 0.0)
    return length(p)-0.8;
  else 
  {
    p.x += 0.15;
    float d = length(abs(p)); 
    if (abs(p.y) < 0.95)
    {
      if (abs(p.y) > 0.65 && abs(p.x) < 0.35)
        return max(abs(p.y) - 0.8, -p.x);
      return min(-p.x, d);
    }
    else 
      return d;
  }
}


void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
  vec2 v = fragCoord.xy / iResolution.xy;
  vec2 uv = v;
  uv = uv * 2.0 - 1.0;
  uv.x *= iResolution.x / iResolution.y;
  
  vec2 v2 = v * 2.0 - 1.0;

  float d = map(uv);
  float c = abs(sin(d * 10.0 + iTime));
  vec3 color = vec3(0.0);
  //color += exp(-abs(d)); 
  //color *= mix(vec3(1.0, 0.5, 0.5), vec3(0.5, 1.0, 0.5), 0.5 + 0.5 * sign(d));
  if (abs(d) < 0.15 && abs(d) > 0.1)
    color = vec3(1.0);
  else if (abs(d) < 0.08 && ((p * 0.81 > v.y && v.x < 0.439) || (v.x >= 0.439 && atan(v2.y, v2.x + 0.05) < (2.0 * (p * 0.777) - 1.0) * 3.1415)))
    color = vec3(1.0);
  fragColor = vec4(color,1.0);
}


", 
          transport = 
          {
            state = "playing", 
            position = 2472.6054396, 
            player = => @46cbe54549daf328 {parameters = {launchMode = "restartWithActivation", out = {value = +oo}, looping = True}}
          }, 
          channel0 = => 'UniformLayerGenerator @c0db679ff4161830 void, 
          channel1 = => 'UniformLayerGenerator @3e137aaeb3636c7b void, 
          channel2 = => 'UniformLayerGenerator @812e7af602fb26a void, 
          channel3 = => 'UniformLayerGenerator @f838bad93452332d void, 
          dynamicVariables = 
          {
            => 'DynamicVariable(Percentage) @5e64a5bffce82864 {friendlyName = "P", value = 1.}
          }
        }, 
        renderer = => 'SingleLayerRenderer @493d378654763834 
        {
          placement = => 'Parametric2dPlacement @8256ced114c4a62f 
          {
            scale = => 'ScaleFactorPlacement2dScale @dd5ed3ff7a5cfc0e void
          }
        }
      }
    }
  }, 
  uiState = => 'DefaultDocumentEditor 
  {
    state = 
    {
      currentVisualizerView = => 'LayerGeneratorVisualizerViewSelector "twoDimensions", 
      currentElementEditor = GizmoShaderEditor, 
      currentSelection = {{"data", -> @141f7aa3aaace374}}
    }, 
    internal = => 'SplitLayout 
    {
      ratio = 0.566744730679, 
      first = 'SplitLayout 
      {
        ratio = 0.554203539823, 
        first = 'GizmoVisualizerEditor 
        {
          widget = 'ToolsAndContentLayout 
          {
            content = 'DocumentWeakPointerContextualEditor 
            {
              state = 
              {
                {
                  key = => 'ObjectWeakPointer {"data", -> @c01c018d31bdbcb7}, 
                  value = => => 'LayerGeneratorVisualizer void
                }
              }
            }
          }, 
          state = {targetPointer = {"data", -> @c01c018d31bdbcb7}, targetPointerAsSelection = {{"data", -> @c01c018d31bdbcb7}}}
        }, 
        second = 'ElementEditorsTabbedLayout 
        {
          widgets = 
          {
            'GizmoTimelineEditor 
            {
              widget = 'ToolsAndContentLayout 
              {
                content = 'DocumentWeakPointerContextualEditor 
                {
                  state = 
                  {
                    {
                      key = => 'ObjectWeakPointer {"data", -> @cd5297f25009c3f6}, 
                      value = => => 'AnimationEditor 
                      {
                        widget = 'AnimationFunctionEditor 
                        {
                          internal = => 'ToolsAndContentLayout {content = 'WidgetOverlay {content = 'SplitLayout {ratio = 0.45}}}
                        }, 
                        state = 
                        {
                          inputRanges = 
                          {
                            {
                              key = => Seconds, 
                              value = => 
                              {
                                range = {position = -3., scale = {scale = 0.245353159851}}, 
                                currentValue = => 'Seconds 0.
                              }
                            }
                          }, 
                          currentCue = {"data", -> @cd5297f25009c3f6}
                        }
                      }
                    }
                  }
                }
              }, 
              state = {targetPointer = {"data", -> @cd5297f25009c3f6}, targetPointerAsSelection = {{"data", -> @cd5297f25009c3f6}}}
            }, 
            'GizmoShaderEditor 
            {
              widget = 'ToolsAndContentLayout 
              {
                content = 'DocumentWeakPointerContextualEditor 
                {
                  state = 
                  {
                    {
                      key = => 'ObjectWeakPointer {"data", -> @caf784b33cd94599}, 
                      value = => => 'ElementShaderEditor void
                    }
                  }
                }
              }, 
              state = {targetPointer = {"data", -> @caf784b33cd94599}, targetPointerAsSelection = {{"data", -> @caf784b33cd94599}}}
            }
          }, 
          currentTabIndex = 1
        }
      }, 
      second = 'SplitLayout 
      {
        ratio = 0.65, 
        first = 'WidgetSlot 
        {
          content = 'OwnedPointerContextualEditor 
          {
            currentEditor = 'ElementTableEditor 
            {
              widget = 'ToolsAndContentLayout 
              {
                content = 'ElementTableWidget 
                {
                  state = 
                  {
                    header = => 'TableHeader 
                    {
                      stretchToFit = True, 
                      columns = 
                      {
                        => {name = "visualize", width = 22}, 
                        => {name = "elements", width = 188}, 
                        => {name = "status", width = 22}, 
                        => {name = "activation", width = 22}, 
                        => {name = "solo", width = 22}, 
                        => {name = "colorLabel", width = 22}, 
                        => {name = "editable", width = 22}, 
                        => {name = "value", width = 205}, 
                        => {name = "activity", width = 22}, 
                        => {name = "type", visible = False, width = 100}, 
                        => {name = "menu", visible = False, width = 22}
                      }
                    }, 
                    expandedRowTargets = 
                    {
                      {"data", -> @c01c018d31bdbcb7}, 
                      {"data", -> @c01c018d31bdbcb7, "renderables"}, 
                      {"data", -> @c01c018d31bdbcb7, "tools"}, 
                      {"data", -> @305887d821f654b0, "parameters"}, 
                      {"data", -> @caf784b33cd94599, "transport", "player"}, 
                      {"data", -> @4880b27ec37bfb06, "generator"}, 
                      {"data", -> @4880b27ec37bfb06}, 
                      {"data", -> @305887d821f654b0}, 
                      {"data", -> @caf784b33cd94599}, 
                      {"data", -> @caf784b33cd94599, "modifiers"}, 
                      {"data", -> @141f7aa3aaace374}, 
                      {"data", -> @7240998078382efb}, 
                      {"data", -> @7240998078382efb, "targets"}
                    }, 
                    selectedRowTargets = {{"data", -> @141f7aa3aaace374}}, 
                    lastSelectedRowTarget = {"data", -> @141f7aa3aaace374}
                  }
                }
              }
            }
          }
        }, 
        second = 'ElementEditorsTabbedLayout 
        {
          widgets = 
          {
            'GizmoParametersEditor 
            {
              widget = 'ToolsAndContentLayout 
              {
                content = 'DocumentWeakPointerContextualEditor 
                {
                  state = 
                  {
                    {
                      key = => 'ObjectWeakPointer {"data", -> @efcadd1fd3f45d4}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @46cbe54549daf328}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @305887d821f654b0}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @f3333f25a38582ea}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @4a695993f5b56c23}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @a6a9e0466aa02fbc}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @f838bad93452332d}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @c01c018d31bdbcb7}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @4880b27ec37bfb06}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @e820a8b3f381ba0}, 
                      value = => => 'ElementParametersEditor void
                    }, 
                    {
                      key = => 'ObjectWeakPointer {"data", -> @141f7aa3aaace374}, 
                      value = => => 'ElementParametersEditor void
                    }
                  }
                }
              }, 
              state = {targetPointer = {"data", -> @141f7aa3aaace374}, targetPointerAsSelection = {{"data", -> @141f7aa3aaace374}}}
            }
          }, 
          currentTabIndex = 0
        }
      }
    }
  }
}
