{
  "Name": "DustParticles NEW",
  "_id": "6f56ac99-5976-43bc-a093-dd6e5aaa3706",
  "Namespace": "lib.3d.generate",
  "Description": "A new and refined version of the distribution.",
  "Inputs": [
    {
      "Name": "Code",
      "MetaInstanceID": "011b2d6e-a3e8-4dd0-ad6a-04c4f34d4e26",
      "DefaultValue": {
        "Type": "Text",
        "Value": [
          "//>>> _common parameters\r",
          "float4x4 objectToWorldMatrix;",
          "float4x4 worldToCameraMatrix;",
          "float4x4 projMatrix;",
          "Texture2D txDiffuse;",
          "float2 RenderTargetSize;",
          "//<<< _common parameters\r",
          "float4x4 cameraToObjectMatrix; // modelview inverse\r",
          "\r",
          "//>>> _parameters\r",
          "Texture2D Image;",
          "float Count;",
          "float Seed;",
          "float BoxSize;",
          "float2 SizeRange;",
          "float3 Offset;",
          "float2 Focus;",
          "float2 TextureCells;",
          "float3 DensityWaveLength;",
          "float3 DensityWaveStrength;",
          "float3 WaveLength;",
          "float3 WaveStrength;",
          "float WiggleStrength;",
          "float WiggleOffset;",
          "float WiggleNoise;",
          "//<<< _parameters\r",
          "float GridSize;\r",
          "\r",
          "\r",
          "SamplerState samLinear\r",
          "{\r",
          "    Filter = MIN_MAG_MIP_LINEAR;\r",
          "    AddressU = Wrap;\r",
          "    AddressV = Wrap;\r",
          "};\r",
          "\r",
          "BlendState SrcAlphaBlendingAdd\r",
          "{\r",
          "    BlendEnable[0] = TRUE;\r",
          "    SrcBlend = SRC_ALPHA;\r",
          "    DestBlend = DEST_ALPHA;\r",
          "    BlendOp = ADD;\r",
          "    SrcBlendAlpha = SRC_ALPHA;\r",
          "    DestBlendAlpha = DEST_ALPHA;\r",
          "    BlendOpAlpha = ADD;\r",
          "    RenderTargetWriteMask[0] = 0x0F;\r",
          "};\r",
          "\r",
          "DepthStencilState DisabledDepth\r",
          "{\r",
          "    DepthEnable = FALSE;\r",
          "};\r",
          "\r",
          "struct VS_IN\r",
          "{\r",
          "    float4 pos : POSITION;\r",
          "    float3 vertexAdd : OFFSET;\r",
          "//    int row : ROW;\r",
          "};\r",
          "\r",
          "struct PS_IN\r",
          "{\r",
          "    float4 pos : SV_POSITION;\r",
          "    float2 texCoord: TEXCOORD0;\r",
          "};\r",
          "\r",
          "\r",
          "float mod(float a, float b)\r",
          "{\r",
          "    return a - b*floor(a/b);\r",
          "}\r",
          "\r",
          "float3 mod(float3 a, float b)\r",
          "{\r",
          "    return a - b*floor(a/b);\r",
          "}\r",
          "\r",
          "//>>> VS\r",
          "PS_IN VS( VS_IN input )\r",
          "{\r",
          "    PS_IN output = (PS_IN)0;\r",
          "\r",
          "    float3 pos = input.pos;\r",
          "    \r",
          "    // Concentrate\r",
          "    pos -= fmod(pos,DensityWaveLength) * DensityWaveStrength;    \r",
          "    \r",
          "    // Distort\r",
          "    pos += sin( float3(pos.z , pos.x, 0)  * WaveLength)* WaveStrength;\r",
          "    pos += sin( float3(pos.x,  0, pos.y )   * WaveLength)* WaveStrength;\r",
          "    pos += sin( pos * WiggleNoise + WiggleOffset ) * WiggleStrength;    \r",
          "    pos += Offset;\r",
          "    \r",
          "    pos -= cameraToObjectMatrix[3];\r",
          "    pos = mod(pos, GridSize) - GridSize/2.0;\r",
          "    float3 posWorldspace = pos + cameraToObjectMatrix[3];\r",
          "\r",
          "    // rotate to camera and create quad\r",
          "    float3x3 modelViewRotMatrix = worldToCameraMatrix;\r",
          "    pos = mul(pos, modelViewRotMatrix);\r",
          "    pos = pos + float3(input.vertexAdd.x, input.vertexAdd.y, 0);\r",
          "    output.pos = mul(float4(pos.x, pos.y, pos.z, 1.0), projMatrix);\r",
          "\r",
          "    // calc distance to focus range\r",
          "    float dist = (abs(Focus.x - output.pos.z) / Focus.y);\r",
          "    float columnWidth = 1.0 / float(TextureCells.y);\r",
          "    dist = clamp(dist, 0.0, 1.0  - columnWidth);\r",
          "    dist = dist * float(TextureCells.y);\r",
          "    dist -= mod(dist, 1.0);\r",
          "\r",
          "    // calc u\r",
          "    float columnWidthHalf = columnWidth / 2.0;\r",
          "    float column = dist * columnWidth + columnWidthHalf;\r",
          "    float u = column + columnWidthHalf * input.vertexAdd.x / abs(input.vertexAdd.x);\r",
          "\r",
          "    // calc v\r",
          "    float rowHeight = 1.0 / float(TextureCells.x);\r",
          "    float rowHeightHalf = rowHeight / 2.0;\r",
          "    float r = float(input.vertexAdd.z);\r",
          "    float rowPos = r * rowHeight + rowHeightHalf;\r",
          "    float v = rowPos + rowHeightHalf * input.vertexAdd.y / abs(input.vertexAdd.y);\r",
          "\r",
          "    output.texCoord = float2(u, v);\r",
          "\r",
          "    return output;\r",
          "}\r",
          "//<<< VS\r",
          "\r",
          "\r",
          "float4 PS( PS_IN input ) : SV_Target\r",
          "{\r",
          "    float4 c= txDiffuse.Sample(samLinear, input.texCoord);\r",
          "    c.a = clamp(c.a, 0,1);\r",
          "    return c;\r",
          "}\r",
          "\r",
          "technique10 Render\r",
          "{\r",
          "    pass P0\r",
          "    {\r",
          "        SetGeometryShader( 0 );\r",
          "        SetVertexShader( CompileShader( vs_4_0, VS() ) );\r",
          "        SetPixelShader( CompileShader( ps_4_0, PS() ) );\r",
          "    }\r",
          "} "
        ]
      },
      "MetaID": "c522a66e-3260-4692-b3e3-79fd0361fa3d",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Image",
      "MetaInstanceID": "5b558e82-fb08-4d2c-a4ed-9ecc77ffdce2",
      "DefaultValue": {
        "Type": "Image",
        "Value": "Framefield.Core.Image"
      },
      "MetaID": "9848060d-fd84-45b0-b658-d0d531c61dab",
      "IsMultiInput": "False",
      "Relevance": "Required",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Count",
      "MetaInstanceID": "6a7e9d02-8b3d-40d5-8caf-e5c4811b8651",
      "DefaultValue": {
        "Type": "Float",
        "Value": "30000"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "1",
      "Max": "1E+08",
      "Scale": "1",
      "ScaleType": "Quadratic",
      "EnumValues": []
    },
    {
      "Name": "Seed",
      "MetaInstanceID": "c1516130-074c-4af5-8001-36d49240e993",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "1000",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "BoxSize",
      "MetaInstanceID": "9c5c3fc9-3b0f-43c2-9c5f-89f7c87de421",
      "DefaultValue": {
        "Type": "Float",
        "Value": "10"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "1000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "SizeRange.X",
      "MetaInstanceID": "f86bad92-8e3e-49c5-b5d8-ed59413f8b0d",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0.01"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "1000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "SizeRange.Y",
      "MetaInstanceID": "989dd384-a91a-4272-8ee2-e3d45f5c0eaa",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0.08000001"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "1000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Offset.X",
      "MetaInstanceID": "0b46bbd8-101f-4775-b0b8-4706819ecc13",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Offset.Y",
      "MetaInstanceID": "4ae64e1e-ccaa-491a-8bab-5ce23632361a",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Offset.Z",
      "MetaInstanceID": "2cc02b27-f392-467c-8399-2946bb757fb9",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Focus.Distance",
      "MetaInstanceID": "383fbc82-200e-4d21-8ceb-415be58b2c7e",
      "DefaultValue": {
        "Type": "Float",
        "Value": "5"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "1000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "Focus.Range",
      "MetaInstanceID": "e973c460-6ae2-4ec7-ad00-c81ed8baa6bf",
      "DefaultValue": {
        "Type": "Float",
        "Value": "5"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "1000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "TextureCells.X",
      "MetaInstanceID": "19cd619f-b406-481e-baa1-2a7139f85fb1",
      "DefaultValue": {
        "Type": "Float",
        "Value": "8"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "1",
      "Max": "32",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "TextureCells.Y",
      "MetaInstanceID": "433754bd-a032-4fa3-bcb6-f4f60c16d2e3",
      "DefaultValue": {
        "Type": "Float",
        "Value": "16"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "1",
      "Max": "32",
      "Scale": "1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "DensityWaveLength.X",
      "MetaInstanceID": "18b6500e-72b9-4650-a789-64a0f6947017",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "DensityWaveLength.Y",
      "MetaInstanceID": "6d491349-8ff9-4148-9bd0-6932d8172f4f",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "DensityWaveLength.Z",
      "MetaInstanceID": "75bed15b-540c-4f29-a9d1-e15c378c1152",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "DensityWaveStrength.X",
      "MetaInstanceID": "e8294f20-3b85-4774-9c14-1246a77a7458",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "DensityWaveStrength.Y",
      "MetaInstanceID": "25fdca3d-91d0-4720-a5f6-e471f8c6f3bb",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "DensityWaveStrength.Z",
      "MetaInstanceID": "c3a8d72b-f82d-4a27-a8a6-2251ceec2536",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "WaveLength.X",
      "MetaInstanceID": "ca4e1dbb-d1d5-4082-9a56-a1ff72e35b9b",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "WaveLength.Y",
      "MetaInstanceID": "437e518a-14bf-4c0f-9e6f-eacb3d301cb9",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "WaveLength.Z",
      "MetaInstanceID": "e940b82c-508c-4722-8023-298497f801b1",
      "DefaultValue": {
        "Type": "Float",
        "Value": "1"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "WaveStrength.X",
      "MetaInstanceID": "ca67d7c6-3efa-4506-a074-a6bb32d6bfba",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "WaveStrength.Y",
      "MetaInstanceID": "eba3d2f0-e17c-49fc-8a73-f1482a49ea40",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "WaveStrength.Z",
      "MetaInstanceID": "fd4d7284-3709-4a9f-bdb1-f65a9dbdcd25",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "WiggleStrength",
      "MetaInstanceID": "cfecad7c-6cdb-44f8-a22a-2beae97dff62",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0.2"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-100000",
      "Max": "100000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "WiggleOffset",
      "MetaInstanceID": "f4e82e6f-1ba3-422e-a2de-e70faa85f23d",
      "DefaultValue": {
        "Type": "Float",
        "Value": "0"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "-10000",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    },
    {
      "Name": "WiggleNoise",
      "MetaInstanceID": "a8446ec4-e7ac-476f-b1a8-083b71699988",
      "DefaultValue": {
        "Type": "Float",
        "Value": "50"
      },
      "MetaID": "3f76dee3-3897-44ac-82d6-25ce9f53a506",
      "IsMultiInput": "False",
      "Relevance": "Optional",
      "Description": "",
      "Min": "0",
      "Max": "10000",
      "Scale": "0.1",
      "ScaleType": "Linear",
      "EnumValues": []
    }
  ],
  "Outputs": [
    {
      "Name": "Scene",
      "MetaInstanceID": "cf853174-1978-48f0-ad57-3c211fc71d34",
      "MetaID": "79122951-7bc4-4c68-b085-866eab828248"
    }
  ],
  "OperatorParts": [
    {
      "MetaInstanceID": "6114d1f5-731d-4027-8774-d7f7b0c5655d",
      "MetaID": "2442812b-55f1-4a23-a396-dac74e9ce0d6",
      "Name": "DustParticles NEWFunc",
      "Version": "f92c0f20-8b1e-4106-a632-f1984f25aade",
      "Type": "Float",
      "IsMultiInput": "True",
      "Script": [
        "using System;",
        "using System.Collections.Generic;",
        "using SharpDX;",
        "using SharpDX.Direct3D;",
        "using SharpDX.Direct3D11;",
        "using Framefield.Core.Rendering;",
        "using Buffer = SharpDX.Direct3D11.Buffer;",
        "",
        "namespace Framefield.Core.ID2442812b_55f1_4a23_a396_dac74e9ce0d6",
        "{",
        "    public class Class_DustParticles_NEW : FXSourceCodeFunction, IFXSceneSourceCode",
        "    {",
        "        //>>> _inputids",
        "        private enum InputId",
        "        {",
        "            Code = 0,",
        "            Image = 1,",
        "            Count = 2,",
        "            Seed = 3,",
        "            BoxSize = 4,",
        "            SizeRangeX = 5,",
        "            SizeRangeY = 6,",
        "            OffsetX = 7,",
        "            OffsetY = 8,",
        "            OffsetZ = 9,",
        "            FocusDistance = 10,",
        "            FocusRange = 11,",
        "            TextureCellsX = 12,",
        "            TextureCellsY = 13,",
        "            DensityWaveLengthX = 14,",
        "            DensityWaveLengthY = 15,",
        "            DensityWaveLengthZ = 16,",
        "            DensityWaveStrengthX = 17,",
        "            DensityWaveStrengthY = 18,",
        "            DensityWaveStrengthZ = 19,",
        "            WaveLengthX = 20,",
        "            WaveLengthY = 21,",
        "            WaveLengthZ = 22,",
        "            WaveStrengthX = 23,",
        "            WaveStrengthY = 24,",
        "            WaveStrengthZ = 25,",
        "            WiggleStrength = 26,",
        "            WiggleOffset = 27,",
        "            WiggleNoise = 28",
        "        }",
        "        //<<< _inputids",
        "",
        "",
        "        public Class_DustParticles_NEW() {",
        "        }",
        "",
        "        public override void Dispose() {",
        "            Utilities.DisposeObj(ref _mesh);",
        "            Utilities.DisposeObj(ref _inputLayout);",
        "            base.Dispose();",
        "        }",
        "",
        "        bool _firstEval = true;",
        "        public override OperatorPartContext Eval(OperatorPartContext context, List<OperatorPart> inputs, int outputIdx) {",
        "            if (_firstEval) {",
        "                for (int i = 0; i < NumCodes(); ++i)",
        "                    Compile(i);",
        "                _firstEval = false;",
        "                Changed = true;",
        "            }",
        "",
        "            _image = inputs[1].Eval(context).Image;",
        "                ",
        "            //>>> _params",
        "            var Code = inputs[(int)InputId.Code].Eval(context).Text;",
        "            var Image = inputs[(int)InputId.Image].Eval(context).Image; // Needs to be checked for null!",
        "            var Count = inputs[(int)InputId.Count].Eval(context).Value;",
        "            var Seed = inputs[(int)InputId.Seed].Eval(context).Value;",
        "            var BoxSize = inputs[(int)InputId.BoxSize].Eval(context).Value;",
        "            var SizeRangeX = inputs[(int)InputId.SizeRangeX].Eval(context).Value;",
        "            var SizeRangeY = inputs[(int)InputId.SizeRangeY].Eval(context).Value;",
        "            var SizeRange = new Vector2(SizeRangeX, SizeRangeY);",
        "            var OffsetX = inputs[(int)InputId.OffsetX].Eval(context).Value;",
        "            var OffsetY = inputs[(int)InputId.OffsetY].Eval(context).Value;",
        "            var OffsetZ = inputs[(int)InputId.OffsetZ].Eval(context).Value;",
        "            var Offset = new Vector3(OffsetX, OffsetY, OffsetZ);",
        "            var FocusDistance = inputs[(int)InputId.FocusDistance].Eval(context).Value;",
        "            var FocusRange = inputs[(int)InputId.FocusRange].Eval(context).Value;",
        "            var Focus = new Vector2(FocusDistance, FocusRange);",
        "            var TextureCellsX = inputs[(int)InputId.TextureCellsX].Eval(context).Value;",
        "            var TextureCellsY = inputs[(int)InputId.TextureCellsY].Eval(context).Value;",
        "            var TextureCells = new Vector2(TextureCellsX, TextureCellsY);",
        "            var DensityWaveLengthX = inputs[(int)InputId.DensityWaveLengthX].Eval(context).Value;",
        "            var DensityWaveLengthY = inputs[(int)InputId.DensityWaveLengthY].Eval(context).Value;",
        "            var DensityWaveLengthZ = inputs[(int)InputId.DensityWaveLengthZ].Eval(context).Value;",
        "            var DensityWaveLength = new Vector3(DensityWaveLengthX, DensityWaveLengthY, DensityWaveLengthZ);",
        "            var DensityWaveStrengthX = inputs[(int)InputId.DensityWaveStrengthX].Eval(context).Value;",
        "            var DensityWaveStrengthY = inputs[(int)InputId.DensityWaveStrengthY].Eval(context).Value;",
        "            var DensityWaveStrengthZ = inputs[(int)InputId.DensityWaveStrengthZ].Eval(context).Value;",
        "            var DensityWaveStrength = new Vector3(DensityWaveStrengthX, DensityWaveStrengthY, DensityWaveStrengthZ);",
        "            var WaveLengthX = inputs[(int)InputId.WaveLengthX].Eval(context).Value;",
        "            var WaveLengthY = inputs[(int)InputId.WaveLengthY].Eval(context).Value;",
        "            var WaveLengthZ = inputs[(int)InputId.WaveLengthZ].Eval(context).Value;",
        "            var WaveLength = new Vector3(WaveLengthX, WaveLengthY, WaveLengthZ);",
        "            var WaveStrengthX = inputs[(int)InputId.WaveStrengthX].Eval(context).Value;",
        "            var WaveStrengthY = inputs[(int)InputId.WaveStrengthY].Eval(context).Value;",
        "            var WaveStrengthZ = inputs[(int)InputId.WaveStrengthZ].Eval(context).Value;",
        "            var WaveStrength = new Vector3(WaveStrengthX, WaveStrengthY, WaveStrengthZ);",
        "            var WiggleStrength = inputs[(int)InputId.WiggleStrength].Eval(context).Value;",
        "            var WiggleOffset = inputs[(int)InputId.WiggleOffset].Eval(context).Value;",
        "            var WiggleNoise = inputs[(int)InputId.WiggleNoise].Eval(context).Value;",
        "            //<<< _params",
        "            ",
        "            bool rebuildParticles = (Count != _count) ||",
        "                                    (Seed != _seed) ||",
        "                                    (BoxSize != _gridSize) ||",
        "                                    (SizeRange != _particleSizeRange) ||",
        "                                    (TextureCells != _textureCells);",
        "            _count = (int)Count;",
        "            _seed = (int)Seed;",
        "            _gridSize = BoxSize;",
        "            _particleSizeRange = SizeRange;",
        "            _textureCells = TextureCells;",
        "",
        "            _count = Math.Max(1, _count);",
        "",
        "            if (rebuildParticles)",
        "                CreateParticles();",
        "            ",
        "            Changed = false;",
        "",
        "            var D3DDevice = context.D3DDevice;",
        "",
        "            try {",
        "                context.D3DDevice.ImmediateContext.ClearState();",
        "",
        "                context.ObjectTWorld = Matrix.Identity;",
        "                var matrixVariable = _effect.GetVariableByName(\"objectToWorldMatrix\").AsMatrix();",
        "                matrixVariable.SetMatrix(context.ObjectTWorld);",
        "                matrixVariable = _effect.GetVariableByName(\"worldToCameraMatrix\").AsMatrix();",
        "                matrixVariable.SetMatrix(context.WorldToCamera);",
        "                matrixVariable = _effect.GetVariableByName(\"cameraToObjectMatrix\").AsMatrix();",
        "                var cameraToObject = Matrix.Invert(/*context.ObjectTWorld */ context.WorldToCamera);",
        "                matrixVariable.SetMatrix(cameraToObject);",
        "                matrixVariable = _effect.GetVariableByName(\"projMatrix\").AsMatrix();",
        "                matrixVariable.SetMatrix(context.CameraProjection);",
        "                ",
        "                //>>> setup (Code NOT auto generated)",
        "                using (var ImageView = new ShaderResourceView(context.D3DDevice, Image))",
        "                {",
        "                    _effect.GetVariableByName(\"txDiffuse\").AsShaderResource().SetResource(ImageView);",
        "                    _effect.GetVariableByName(\"Count\").AsScalar().Set(Count);",
        "                    _effect.GetVariableByName(\"Seed\").AsScalar().Set(Seed);",
        "                    _effect.GetVariableByName(\"GridSize\").AsScalar().Set(BoxSize);",
        "                    _effect.GetVariableByName(\"SizeRange\").AsVector().Set(new Vector2(SizeRangeX, SizeRangeY));",
        "                    _effect.GetVariableByName(\"Offset\").AsVector().Set(new Vector3(OffsetX, OffsetY, OffsetZ));",
        "                    _effect.GetVariableByName(\"Focus\").AsVector().Set(new Vector2(FocusDistance, FocusRange));",
        "                    _effect.GetVariableByName(\"TextureCells\").AsVector().Set(new Vector2(TextureCellsX, TextureCellsY));",
        "                    _effect.GetVariableByName(\"DensityWaveLength\").AsVector().Set(new Vector3(DensityWaveLengthX, DensityWaveLengthY, DensityWaveLengthZ));",
        "                    _effect.GetVariableByName(\"DensityWaveStrength\").AsVector().Set(new Vector3(DensityWaveStrengthX, DensityWaveStrengthY, DensityWaveStrengthZ));",
        "                    _effect.GetVariableByName(\"WaveLength\").AsVector().Set(new Vector3(WaveLengthX, WaveLengthY, WaveLengthZ));",
        "                    _effect.GetVariableByName(\"WaveStrength\").AsVector().Set(new Vector3(WaveStrengthX, WaveStrengthY, WaveStrengthZ));",
        "                    _effect.GetVariableByName(\"WiggleStrength\").AsScalar().Set(WiggleStrength);",
        "                    _effect.GetVariableByName(\"WiggleOffset\").AsScalar().Set( WiggleOffset );",
        "                    _effect.GetVariableByName(\"WiggleNoise\").AsScalar().Set( WiggleNoise );",
        "                    //_effect.GetVariableByName(\"CenterDistance\").AsScalar().Set(CenterDistance);",
        "                    //_effect.GetVariableByName(\"WaveThickness\").AsScalar().Set(WaveThickness);",
        "                    //_effect.GetVariableByName(\"WaveIntensity\").AsScalar().Set(WaveIntensity);",
        "                    //<<< setup (Code NOT auto generated)",
        "",
        "                    if (context.DepthStencilView != null)",
        "                        context.D3DDevice.ImmediateContext.OutputMerger.SetTargets(context.DepthStencilView, context.RenderTargetView);",
        "                    else",
        "                        context.D3DDevice.ImmediateContext.OutputMerger.SetTargets(context.RenderTargetView);",
        "    ",
        "                    if (context.BlendState != null) {",
        "                        context.D3DDevice.ImmediateContext.OutputMerger.BlendState = context.BlendState;",
        "                    }",
        "    ",
        "                    if (context.DepthStencilState != null) {",
        "                        context.D3DDevice.ImmediateContext.OutputMerger.DepthStencilState = context.DepthStencilState;",
        "                    }",
        "    ",
        "                    if (context.RasterizerState != null) {",
        "                        context.D3DDevice.ImmediateContext.Rasterizer.State = context.RasterizerState;",
        "                    }",
        "",
        "                    context.D3DDevice.ImmediateContext.Rasterizer.SetViewports(new [] { context.Viewport });",
        "                    context.D3DDevice.ImmediateContext.InputAssembler.InputLayout = _inputLayout;",
        "                    context.D3DDevice.ImmediateContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;",
        "                    context.D3DDevice.ImmediateContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(_mesh.Vertices, _mesh.AttributesSize, 0));",
        "    ",
        "                    var technique = _effect.GetTechniqueByIndex(0);",
        "                    for (int i2 = 0; i2 < technique.Description.PassCount; ++i2) {",
        "                        technique.GetPassByIndex(i2).Apply(context.D3DDevice.ImmediateContext);",
        "                        context.D3DDevice.ImmediateContext.Draw(_mesh.NumTriangles * 3, 0);",
        "                    }",
        "                }",
        "            }",
        "            catch (Exception exception) {",
        "                Logger.Error(this,\"Load Effect error: {0}\", exception.Message);",
        "            }",
        "",
        "            return context;",
        "        }",
        "",
        "        private void CreateParticles()",
        "        {",
        "            var inputElements = new InputElement[]",
        "                                    {",
        "                                        new InputElement(\"POSITION\", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 0, 0),",
        "                                        new InputElement(\"OFFSET\", 0, SharpDX.DXGI.Format.R32G32B32_Float, 16, 0),",
        "//                            new InputElement(\"OFFSET\", 0, SharpDX.DXGI.Format.R32G32_Float, 16, 0),",
        "//                            new InputElement(\"ROW\", 0, SharpDX.DXGI.Format.R32_UInt, 24, 0)",
        "                                    };",
        "",
        "            var attributesSize = 28;",
        "            int streamSize = 2*3*attributesSize*_count;",
        "            using (var vertexStream = new DataStream(streamSize, true, true))",
        "            {",
        "",
        "                Random _random = new Random(_seed);",
        "                float gridSizeHalf = _gridSize/2.0f;",
        "",
        "                for (int particleIdx = 0; particleIdx < _count; ++particleIdx)",
        "                {",
        "                    float noise1 = (float) _random.NextDouble();",
        "                    float noise2 = (float) _random.NextDouble();",
        "                    float noise3 = (float) _random.NextDouble();",
        "",
        "                    var pos = new Vector4(-gridSizeHalf + _gridSize*noise1,",
        "                                          -gridSizeHalf + _gridSize*noise2,",
        "                                          -gridSizeHalf + _gridSize*noise3,",
        "                                          1.0f);",
        "                    var size = _particleSizeRange.X + (_particleSizeRange.Y - _particleSizeRange.X)*((float) _random.NextDouble());",
        "                    var halfSize = size/2.0f;",
        "                    float row = (int) (((float) _random.NextDouble())*(_textureCells.X - 1.0f));",
        "                    //Logger.Info(this,\"row: {0}\", row);",
        "",
        "                    // tri 1 vert 1",
        "                    vertexStream.Write(pos);",
        "                    vertexStream.Write(new Vector3(halfSize, halfSize, row));",
        "                    //                vertexStream.Write(row);",
        "",
        "                    // tri 1 vert 2",
        "                    vertexStream.Write(pos);",
        "                    vertexStream.Write(new Vector3(halfSize, -halfSize, row));",
        "                    //                vertexStream.Write(row);",
        "",
        "                    // tri 1 vert 3",
        "                    vertexStream.Write(pos);",
        "                    vertexStream.Write(new Vector3(-halfSize, -halfSize, row));",
        "                    //                vertexStream.Write(row);",
        "",
        "                    // tri 2 vert 1",
        "                    vertexStream.Write(pos);",
        "                    vertexStream.Write(new Vector3(-halfSize, -halfSize, row));",
        "                    //                vertexStream.Write(row);",
        "",
        "                    // tri 2 vert 2",
        "                    vertexStream.Write(pos);",
        "                    vertexStream.Write(new Vector3(-halfSize, halfSize, row));",
        "                    //                vertexStream.Write(row);",
        "",
        "                    // tri 2 vert 3",
        "                    vertexStream.Write(pos);",
        "                    vertexStream.Write(new Vector3(halfSize, halfSize, row));",
        "                    //                vertexStream.Write(row);",
        "",
        "                }",
        "",
        "                vertexStream.Position = 0;",
        "",
        "                var vertices = new Buffer(D3DDevice.Device, vertexStream, new BufferDescription()",
        "                                                                              {",
        "                                                                                  BindFlags = BindFlags.VertexBuffer,",
        "                                                                                  CpuAccessFlags = CpuAccessFlags.None,",
        "                                                                                  OptionFlags = ResourceOptionFlags.None,",
        "                                                                                  SizeInBytes = streamSize,",
        "                                                                                  Usage = ResourceUsage.Default",
        "                                                                              });",
        "",
        "                Utilities.DisposeObj(ref _mesh);",
        "                Utilities.DisposeObj(ref _inputLayout);",
        "                _mesh = new Mesh() { InputElements = inputElements, Vertices = vertices, NumTriangles = _count*2, AttributesSize = attributesSize };",
        "                if (_effect != null && Core.D3DDevice.Device != null)",
        "                {",
        "                    var technique = _effect.GetTechniqueByIndex(0);",
        "                    var pass = technique.GetPassByIndex(0);",
        "                    _inputLayout = new InputLayout(Core.D3DDevice.Device, pass.Description.Signature, inputElements);",
        "                }",
        "            }",
        "        }",
        "",
        "        InputLayout _inputLayout = null;",
        "        Texture2D _image = null;",
        "        Mesh _mesh = null;",
        "        int _count;",
        "        int _seed;",
        "        float _gridSize;",
        "        Vector2 _particleSizeRange;",
        "        Vector2 _textureCells;",
        "    }",
        "}",
        "",
        "",
        ""
      ],
      "AdditionalAssemblies": []
    }
  ],
  "Operators": [],
  "Connections": [
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "cf853174-1978-48f0-ad57-3c211fc71d34"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "011b2d6e-a3e8-4dd0-ad6a-04c4f34d4e26",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "5b558e82-fb08-4d2c-a4ed-9ecc77ffdce2",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "6a7e9d02-8b3d-40d5-8caf-e5c4811b8651",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "c1516130-074c-4af5-8001-36d49240e993",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "9c5c3fc9-3b0f-43c2-9c5f-89f7c87de421",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "f86bad92-8e3e-49c5-b5d8-ed59413f8b0d",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "989dd384-a91a-4272-8ee2-e3d45f5c0eaa",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "0b46bbd8-101f-4775-b0b8-4706819ecc13",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "4ae64e1e-ccaa-491a-8bab-5ce23632361a",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "2cc02b27-f392-467c-8399-2946bb757fb9",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "383fbc82-200e-4d21-8ceb-415be58b2c7e",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "e973c460-6ae2-4ec7-ad00-c81ed8baa6bf",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "19cd619f-b406-481e-baa1-2a7139f85fb1",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "433754bd-a032-4fa3-bcb6-f4f60c16d2e3",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "18b6500e-72b9-4650-a789-64a0f6947017",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "6d491349-8ff9-4148-9bd0-6932d8172f4f",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "75bed15b-540c-4f29-a9d1-e15c378c1152",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "e8294f20-3b85-4774-9c14-1246a77a7458",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "25fdca3d-91d0-4720-a5f6-e471f8c6f3bb",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "c3a8d72b-f82d-4a27-a8a6-2251ceec2536",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "ca4e1dbb-d1d5-4082-9a56-a1ff72e35b9b",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "437e518a-14bf-4c0f-9e6f-eacb3d301cb9",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "e940b82c-508c-4722-8023-298497f801b1",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "ca67d7c6-3efa-4506-a074-a6bb32d6bfba",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "eba3d2f0-e17c-49fc-8a73-f1482a49ea40",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "fd4d7284-3709-4a9f-bdb1-f65a9dbdcd25",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "cfecad7c-6cdb-44f8-a22a-2beae97dff62",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "f4e82e6f-1ba3-422e-a2de-e70faa85f23d",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    },
    {
      "SourceOp": "00000000-0000-0000-0000-000000000000",
      "SourceOpPart": "a8446ec4-e7ac-476f-b1a8-083b71699988",
      "TargetOp": "00000000-0000-0000-0000-000000000000",
      "TargetOpPart": "6114d1f5-731d-4027-8774-d7f7b0c5655d"
    }
  ]
}