Equivalent inner components now exchangeable. Fixed in/output pin order.
authorFabian Stemmler <stemmler@in.tum.de>
Mon, 24 Jun 2019 14:22:20 +0000 (16:22 +0200)
committerFabian Stemmler <stemmler@in.tum.de>
Mon, 24 Jun 2019 14:22:20 +0000 (16:22 +0200)
1. Previously, the creation of the inner components of a custom
component was fixated in the file, even though the same inner component
could either be described by a class, or a file. mapping.json now
dictates, which one to use.
2. Added the .json versions of all currently available
SubmodelComponents
3. Since pins are no longer addressed by index, but rather by name,
rectangular custom components were created with a more or less random
pin order, were inputs and outputs were mixed. This issue was fixed.

36 files changed:
net.mograsim.logic.ui/components/GUI_rsLatch.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIand.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIand41.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIandor414.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIdemux2.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIdff.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIdlatch.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIdlatch4.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIfulladder.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIhalfadder.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUImux1.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUImux1_4.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUInand3.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUInot4.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIor4.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIor_4.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIram2.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIram4.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIsel2_4.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIsel3_4.json [new file with mode: 0644]
net.mograsim.logic.ui/components/GUIxor.json [new file with mode: 0644]
net.mograsim.logic.ui/components/am2901/GUIAm2901.json [new file with mode: 0644]
net.mograsim.logic.ui/components/am2901/GUIAm2901ALUFuncDecode.json [new file with mode: 0644]
net.mograsim.logic.ui/components/am2901/GUIAm2901ALUInclDecode.json [new file with mode: 0644]
net.mograsim.logic.ui/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json [new file with mode: 0644]
net.mograsim.logic.ui/components/am2901/GUIAm2901ALUOneBit.json [new file with mode: 0644]
net.mograsim.logic.ui/components/am2901/GUIAm2901DestDecode.json [new file with mode: 0644]
net.mograsim.logic.ui/components/am2901/GUIAm2901QReg.json [new file with mode: 0644]
net.mograsim.logic.ui/components/am2901/GUIAm2901SourceDecode.json [new file with mode: 0644]
net.mograsim.logic.ui/components/mapping.json [new file with mode: 0644]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponentCreator.java [new file with mode: 0644]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponentParams.java

diff --git a/net.mograsim.logic.ui/components/GUI_rsLatch.json b/net.mograsim.logic.ui/components/GUI_rsLatch.json
new file mode 100644 (file)
index 0000000..9195303
--- /dev/null
@@ -0,0 +1,232 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUI_rsLatch",
+  "width": 35.0,
+  "height": 20.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Q",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "_Q",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "_R",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "_S",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 7.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 12.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 16.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 64.0,
+          "y": 36.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "_S"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "_R"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 37.5
+          },
+          {
+            "x": 35.0,
+            "y": 27.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 22.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 42.5
+          },
+          {
+            "x": 5.0,
+            "y": 42.5
+          },
+          {
+            "x": 5.0,
+            "y": 22.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 17.5
+          },
+          {
+            "x": 35.0,
+            "y": 7.5
+          },
+          {
+            "x": 65.0,
+            "y": 7.5
+          },
+          {
+            "x": 65.0,
+            "y": 12.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "_Q"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "_S",
+      "_R"
+    ],
+    "label": "_rsLatch",
+    "logic_width": 1,
+    "output_count": [
+      "Q",
+      "_Q"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIand.json b/net.mograsim.logic.ui/components/GUIand.json
new file mode 100644 (file)
index 0000000..6581c53
--- /dev/null
@@ -0,0 +1,154 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIand",
+  "width": 35.0,
+  "height": 20.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "B",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 15.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 15.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 44.0,
+          "y": 24.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A",
+      "B"
+    ],
+    "label": "GUIand",
+    "logic_width": 1,
+    "output_count": [
+      "Y"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIand41.json b/net.mograsim.logic.ui/components/GUIand41.json
new file mode 100644 (file)
index 0000000..6c88a16
--- /dev/null
@@ -0,0 +1,342 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIand41",
+  "width": 35.0,
+  "height": 50.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "B",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "A4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Y2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Y3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Y4",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 7.5
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 32.5
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 57.5
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 82.5
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 46.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 71.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 96.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A4"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 112.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 22.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y4"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A1",
+      "A2",
+      "A3",
+      "A4",
+      "B"
+    ],
+    "label": "GUIand41",
+    "logic_width": 1,
+    "output_count": [
+      "Y1",
+      "Y2",
+      "Y3",
+      "Y4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIandor414.json b/net.mograsim.logic.ui/components/GUIandor414.json
new file mode 100644 (file)
index 0000000..1985834
--- /dev/null
@@ -0,0 +1,502 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIandor414",
+  "width": 35.0,
+  "height": 90.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "B",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "C1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "C2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "C3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "C4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "A4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Y2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Y3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Y4",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 137.5
+        },
+        "name": "GUIand41",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 35.0,
+          "y": 37.5
+        },
+        "name": "GUIor_4",
+        "params": {}
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 112.5
+          },
+          {
+            "x": 10.0,
+            "y": 142.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 137.5
+          },
+          {
+            "x": 5.0,
+            "y": 152.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A4"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 187.5
+          },
+          {
+            "x": 5.0,
+            "y": 172.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 212.5
+          },
+          {
+            "x": 10.0,
+            "y": 182.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C1"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 12.5
+          },
+          {
+            "x": 10.0,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C2"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 37.5
+          },
+          {
+            "x": 5.0,
+            "y": 52.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C3"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C4"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 87.5
+          },
+          {
+            "x": 5.0,
+            "y": 72.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B1"
+        },
+        "path": [
+          {
+            "x": 70.0,
+            "y": 142.5
+          },
+          {
+            "x": 70.0,
+            "y": 120.0
+          },
+          {
+            "x": 30.0,
+            "y": 120.0
+          },
+          {
+            "x": 30.0,
+            "y": 82.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B2"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 152.5
+          },
+          {
+            "x": 65.0,
+            "y": 125.0
+          },
+          {
+            "x": 25.0,
+            "y": 125.0
+          },
+          {
+            "x": 25.0,
+            "y": 92.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B3"
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 162.5
+          },
+          {
+            "x": 60.0,
+            "y": 130.0
+          },
+          {
+            "x": 20.0,
+            "y": 130.0
+          },
+          {
+            "x": 20.0,
+            "y": 102.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B4"
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 172.5
+          },
+          {
+            "x": 55.0,
+            "y": 135.0
+          },
+          {
+            "x": 15.0,
+            "y": 135.0
+          },
+          {
+            "x": 15.0,
+            "y": 112.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y1"
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 42.5
+          },
+          {
+            "x": 75.0,
+            "y": 12.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y2"
+        },
+        "path": [
+          {
+            "x": 80.0,
+            "y": 52.5
+          },
+          {
+            "x": 80.0,
+            "y": 37.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y4"
+        },
+        "path": [
+          {
+            "x": 80.0,
+            "y": 72.5
+          },
+          {
+            "x": 80.0,
+            "y": 87.5
+          }
+        ]
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "C1",
+      "C2",
+      "C3",
+      "C4",
+      "A1",
+      "A2",
+      "A3",
+      "A4",
+      "B"
+    ],
+    "label": "GUIandor414",
+    "logic_width": 1,
+    "output_count": [
+      "Y1",
+      "Y2",
+      "Y3",
+      "Y4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIdemux2.json b/net.mograsim.logic.ui/components/GUIdemux2.json
new file mode 100644 (file)
index 0000000..44aaa4a
--- /dev/null
@@ -0,0 +1,529 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIdemux2",
+  "width": 35.0,
+  "height": 40.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y00",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Y11",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Y10",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Y01",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "S0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 27.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 2.5
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 27.5
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 52.5
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 77.5
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 11.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 16.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 36.5,
+          "y": 61.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 36.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 41.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 31.5,
+          "y": 66.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 31.5,
+          "y": 11.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 36.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 62.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 67.5
+          },
+          {
+            "x": 32.5,
+            "y": 67.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 32.5,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 37.5,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 32.5,
+            "y": 57.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 37.5,
+            "y": 82.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 32.5,
+            "y": 92.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y00"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y01"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y10"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y11"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "S0",
+      "S1"
+    ],
+    "label": "GUIdemux2",
+    "logic_width": 1,
+    "output_count": [
+      "Y00",
+      "Y01",
+      "Y10",
+      "Y11"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIdff.json b/net.mograsim.logic.ui/components/GUIdff.json
new file mode 100644 (file)
index 0000000..712733d
--- /dev/null
@@ -0,0 +1,339 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIdff",
+  "width": 35.0,
+  "height": 20.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Q",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "_Q",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "D",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.2,
+    "subComps": [
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 10.0
+        },
+        "name": "GUI_rsLatch",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 40.0
+        },
+        "name": "GUInand3",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 120.0,
+          "y": 60.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 120.0,
+          "y": 30.0
+        },
+        "name": "GUI_rsLatch",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 24.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 19.0,
+          "y": 64.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 99.0,
+          "y": 34.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 99.0,
+          "y": 44.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "_R"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 55.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 145.0,
+            "y": 70.0
+          },
+          {
+            "x": 145.0,
+            "y": 85.0
+          },
+          {
+            "x": 20.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "_S"
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 15.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "C"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "_Q"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 100.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 35.0
+          },
+          {
+            "x": 30.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "_S"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "_R"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 100.0,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "_Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "_Q"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "C",
+      "D"
+    ],
+    "label": "GUIdff",
+    "logic_width": 1,
+    "output_count": [
+      "Q",
+      "_Q"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIdlatch.json b/net.mograsim.logic.ui/components/GUIdlatch.json
new file mode 100644 (file)
index 0000000..7d87498
--- /dev/null
@@ -0,0 +1,248 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIdlatch",
+  "width": 35.0,
+  "height": 20.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Q",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "_Q",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "D",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "E",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 27.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 7.5
+        },
+        "name": "GUI_rsLatch",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 36.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 11.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "E"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 25.0
+          },
+          {
+            "x": 10.0,
+            "y": 25.0
+          },
+          {
+            "x": 10.0,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "_S"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "_R"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 37.5
+          },
+          {
+            "x": 40.0,
+            "y": 22.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "_Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "_Q"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "D",
+      "E"
+    ],
+    "label": "GUIdlatch",
+    "logic_width": 1,
+    "output_count": [
+      "Q",
+      "_Q"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIdlatch4.json b/net.mograsim.logic.ui/components/GUIdlatch4.json
new file mode 100644 (file)
index 0000000..0c7a9e6
--- /dev/null
@@ -0,0 +1,342 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIdlatch4",
+  "width": 35.0,
+  "height": 50.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "D4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Q1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Q2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Q3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Q4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "D1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "D2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "D3",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 7.5
+        },
+        "name": "GUIdlatch",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 32.5
+        },
+        "name": "GUIdlatch",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 57.5
+        },
+        "name": "GUIdlatch",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 82.5
+        },
+        "name": "GUIdlatch",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 46.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 71.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 96.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 112.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "E"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "E"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "E"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "E"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 22.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "D"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D2"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "D"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "D"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D4"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q4"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "D1",
+      "D2",
+      "D3",
+      "D4",
+      "C"
+    ],
+    "label": "GUIdlatch4",
+    "logic_width": 1,
+    "output_count": [
+      "Q1",
+      "Q2",
+      "Q3",
+      "Q4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIfulladder.json b/net.mograsim.logic.ui/components/GUIfulladder.json
new file mode 100644 (file)
index 0000000..888df77
--- /dev/null
@@ -0,0 +1,196 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIfulladder",
+  "width": 35.0,
+  "height": 30.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "B",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Z",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 5.0,
+          "y": 40.0
+        },
+        "name": "GUIhalfadder",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 7.5
+        },
+        "name": "GUIhalfadder",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 57.5,
+          "y": 40.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "_Z"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "_Z"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 82.5,
+            "y": 22.5
+          },
+          {
+            "x": 82.5,
+            "y": 35.0
+          },
+          {
+            "x": 52.5,
+            "y": 35.0
+          },
+          {
+            "x": 52.5,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Z"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A",
+      "B",
+      "C"
+    ],
+    "label": "GUIfulladder",
+    "logic_width": 1,
+    "output_count": [
+      "Y",
+      "Z"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIhalfadder.json b/net.mograsim.logic.ui/components/GUIhalfadder.json
new file mode 100644 (file)
index 0000000..a83a1e4
--- /dev/null
@@ -0,0 +1,330 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIhalfadder",
+  "width": 35.0,
+  "height": 20.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "B",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "_Z",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 15.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 27.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 11.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 36.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 24.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "_Z"
+        },
+        "path": [
+          {
+            "x": 80.0,
+            "y": 25.0
+          },
+          {
+            "x": 80.0,
+            "y": 37.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 62.5,
+            "y": 12.5
+          },
+          {
+            "x": 62.5,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 62.5,
+            "y": 37.5
+          },
+          {
+            "x": 62.5,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A",
+      "B"
+    ],
+    "label": "GUIhalfadder",
+    "logic_width": 1,
+    "output_count": [
+      "Y",
+      "_Z"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUImux1.json b/net.mograsim.logic.ui/components/GUImux1.json
new file mode 100644 (file)
index 0000000..f36fc7c
--- /dev/null
@@ -0,0 +1,242 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUImux1",
+  "width": 35.0,
+  "height": 30.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "I0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "S0",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 7.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 35.0,
+          "y": 22.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 35.0,
+          "y": 47.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 60.0,
+          "y": 30.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 11.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 21.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I0"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 52.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "S0",
+      "I0",
+      "I1"
+    ],
+    "label": "GUImux1",
+    "logic_width": 1,
+    "output_count": [
+      "Y"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUImux1_4.json b/net.mograsim.logic.ui/components/GUImux1_4.json
new file mode 100644 (file)
index 0000000..a652c16
--- /dev/null
@@ -0,0 +1,486 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUImux1_4",
+  "width": 35.0,
+  "height": 90.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "I0_1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Y2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "I0_3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "I1_2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Y3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I0_2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "I1_1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Y4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "I1_4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "S0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "I0_4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "I1_3",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 7.5
+        },
+        "name": "GUImux1",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 42.5
+        },
+        "name": "GUImux1",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 77.5
+        },
+        "name": "GUImux1",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 112.5
+        },
+        "name": "GUImux1",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 11.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 46.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 81.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "S0"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "S0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I0_1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I0"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 37.5
+          },
+          {
+            "x": 5.0,
+            "y": 22.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I1_1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 137.5
+          },
+          {
+            "x": 10.0,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "S0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I0_2"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I0"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 62.5
+          },
+          {
+            "x": 5.0,
+            "y": 57.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I1_2"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I1"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 162.5
+          },
+          {
+            "x": 15.0,
+            "y": 67.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y2"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "S0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I0_3"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "I0"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 87.5
+          },
+          {
+            "x": 5.0,
+            "y": 92.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I1_3"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "I1"
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 187.5
+          },
+          {
+            "x": 20.0,
+            "y": 102.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y3"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "S0"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 117.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I0_4"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "I0"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 112.5
+          },
+          {
+            "x": 5.0,
+            "y": 127.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I1_4"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "I1"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 212.5
+          },
+          {
+            "x": 25.0,
+            "y": 137.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y4"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "S0",
+      "I0_1",
+      "I0_2",
+      "I0_3",
+      "I0_4",
+      "I1_1",
+      "I1_2",
+      "I1_3",
+      "I1_4"
+    ],
+    "label": "GUImux1_4",
+    "logic_width": 1,
+    "output_count": [
+      "Y1",
+      "Y2",
+      "Y3",
+      "Y4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUInand3.json b/net.mograsim.logic.ui/components/GUInand3.json
new file mode 100644 (file)
index 0000000..2db174f
--- /dev/null
@@ -0,0 +1,214 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUInand3",
+  "width": 35.0,
+  "height": 30.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "B",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 15.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 35.0,
+          "y": 15.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 62.5,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 31.5,
+          "y": 24.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 32.5,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 32.5,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 57.5,
+            "y": 25.0
+          },
+          {
+            "x": 57.5,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 62.5
+          },
+          {
+            "x": 60.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A",
+      "B",
+      "C"
+    ],
+    "label": "GUInand3",
+    "logic_width": 1,
+    "output_count": [
+      "Y"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUInot4.json b/net.mograsim.logic.ui/components/GUInot4.json
new file mode 100644 (file)
index 0000000..1a4f9d1
--- /dev/null
@@ -0,0 +1,392 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUInot4",
+  "width": 35.0,
+  "height": 40.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "A4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Y2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Y3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Y4",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 27.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 52.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 30.0,
+          "y": 77.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 11.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 36.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 61.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 86.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A4"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 57.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 82.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 67.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 92.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y4"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A1",
+      "A2",
+      "A3",
+      "A4"
+    ],
+    "label": "GUInot4",
+    "logic_width": 1,
+    "output_count": [
+      "Y1",
+      "Y2",
+      "Y3",
+      "Y4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIor4.json b/net.mograsim.logic.ui/components/GUIor4.json
new file mode 100644 (file)
index 0000000..4aba55a
--- /dev/null
@@ -0,0 +1,547 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIor4",
+  "width": 35.0,
+  "height": 40.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "A4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.2,
+    "subComps": [
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 15.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 65.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 115.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 165.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 40.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 140.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 110.0,
+          "y": 40.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 110.0,
+          "y": 140.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 140.0,
+          "y": 90.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 24.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 74.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 124.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 174.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 104.0,
+          "y": 49.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 104.0,
+          "y": 149.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A4"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 120.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 170.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 80.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 180.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 105.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 105.0,
+            "y": 55.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 105.0,
+            "y": 145.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 105.0,
+            "y": 155.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A1",
+      "A2",
+      "A3",
+      "A4"
+    ],
+    "label": "GUIor4",
+    "logic_width": 1,
+    "output_count": [
+      "Y"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIor_4.json b/net.mograsim.logic.ui/components/GUIor_4.json
new file mode 100644 (file)
index 0000000..69bacd2
--- /dev/null
@@ -0,0 +1,880 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIor_4",
+  "width": 35.0,
+  "height": 80.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "B2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "B3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "B4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "A4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Y2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Y3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Y4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "B1",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 27.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 52.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 77.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 102.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 127.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 152.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 177.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 27.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 52.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 77.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 11.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 36.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 61.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 86.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 111.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 136.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 161.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 186.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A4"
+        },
+        "pin2": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B1"
+        },
+        "pin2": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B2"
+        },
+        "pin2": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B3"
+        },
+        "pin2": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B4"
+        },
+        "pin2": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 57.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 67.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 82.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 92.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 107.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 117.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 132.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 142.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 157.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 167.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 182.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 192.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 12.5
+          },
+          {
+            "x": 40.0,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 112.5
+          },
+          {
+            "x": 45.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 37.5
+          },
+          {
+            "x": 40.0,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 137.5
+          },
+          {
+            "x": 50.0,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 62.5
+          },
+          {
+            "x": 40.0,
+            "y": 57.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 162.5
+          },
+          {
+            "x": 55.0,
+            "y": 67.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 87.5
+          },
+          {
+            "x": 40.0,
+            "y": 82.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 187.5
+          },
+          {
+            "x": 60.0,
+            "y": 92.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y4"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A1",
+      "A2",
+      "A3",
+      "A4",
+      "B1",
+      "B2",
+      "B3",
+      "B4"
+    ],
+    "label": "GUIor_4",
+    "logic_width": 1,
+    "output_count": [
+      "Y1",
+      "Y2",
+      "Y3",
+      "Y4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIram2.json b/net.mograsim.logic.ui/components/GUIram2.json
new file mode 100644 (file)
index 0000000..665d5a0
--- /dev/null
@@ -0,0 +1,2880 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIram2",
+  "width": 35.0,
+  "height": 90.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "QA1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 55.0
+      },
+      "name": "QB2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 45.0
+      },
+      "name": "QB1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "QA3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 75.0
+      },
+      "name": "QB4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "QA2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 65.0
+      },
+      "name": "QB3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "QA4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "D1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "B0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "WE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "D2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "B1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "D3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "D4",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.1,
+    "subComps": [
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 45.0
+        },
+        "name": "GUIdemux2",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 150.0
+        },
+        "name": "GUIdemux2",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 130.0,
+          "y": 150.0
+        },
+        "name": "GUIand41",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 325.0
+        },
+        "name": "GUIdlatch4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 475.0
+        },
+        "name": "GUIdlatch4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 625.0
+        },
+        "name": "GUIdlatch4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 775.0
+        },
+        "name": "GUIdlatch4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 235.0,
+          "y": 375.0
+        },
+        "name": "GUIand41",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 235.0,
+          "y": 485.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 235.0,
+          "y": 635.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 235.0,
+          "y": 785.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 135.0,
+          "y": 325.0
+        },
+        "name": "GUIand41",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 135.0,
+          "y": 435.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 135.0,
+          "y": 585.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 135.0,
+          "y": 735.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 109.0,
+          "y": 154.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 104.0,
+          "y": 164.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 99.0,
+          "y": 174.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 94.0,
+          "y": 184.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 549.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 649.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 44.0,
+          "y": 749.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 49.0,
+          "y": 809.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 479.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 489.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 44.0,
+          "y": 499.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 49.0,
+          "y": 509.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 629.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 639.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 44.0,
+          "y": 649.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 49.0,
+          "y": 659.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 129.0,
+          "y": 329.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 124.0,
+          "y": 339.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 119.0,
+          "y": 349.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 114.0,
+          "y": 359.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 129.0,
+          "y": 479.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 124.0,
+          "y": 489.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 119.0,
+          "y": 499.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 114.0,
+          "y": 509.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 129.0,
+          "y": 629.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 124.0,
+          "y": 639.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 119.0,
+          "y": 649.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 114.0,
+          "y": 659.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 129.0,
+          "y": 779.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 124.0,
+          "y": 789.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 119.0,
+          "y": 799.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 114.0,
+          "y": 809.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A0"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "S0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "S1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 150.0
+          },
+          {
+            "x": 10.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B0"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "S0"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 250.0
+          },
+          {
+            "x": 5.0,
+            "y": 155.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B1"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "S1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 350.0
+          },
+          {
+            "x": 10.0,
+            "y": 165.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y00"
+        },
+        "pin2": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y01"
+        },
+        "pin2": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y10"
+        },
+        "pin2": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y11"
+        },
+        "pin2": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "WE"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 450.0
+          },
+          {
+            "x": 5.0,
+            "y": 300.0
+          },
+          {
+            "x": 125.0,
+            "y": 300.0
+          },
+          {
+            "x": 125.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "C"
+        },
+        "path": [
+          {
+            "x": 185.0,
+            "y": 155.0
+          },
+          {
+            "x": 185.0,
+            "y": 250.0
+          },
+          {
+            "x": 30.0,
+            "y": 250.0
+          },
+          {
+            "x": 30.0,
+            "y": 370.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "C"
+        },
+        "path": [
+          {
+            "x": 180.0,
+            "y": 165.0
+          },
+          {
+            "x": 180.0,
+            "y": 245.0
+          },
+          {
+            "x": 25.0,
+            "y": 245.0
+          },
+          {
+            "x": 25.0,
+            "y": 520.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "C"
+        },
+        "path": [
+          {
+            "x": 175.0,
+            "y": 175.0
+          },
+          {
+            "x": 175.0,
+            "y": 240.0
+          },
+          {
+            "x": 20.0,
+            "y": 240.0
+          },
+          {
+            "x": 20.0,
+            "y": 670.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "C"
+        },
+        "path": [
+          {
+            "x": 170.0,
+            "y": 185.0
+          },
+          {
+            "x": 170.0,
+            "y": 235.0
+          },
+          {
+            "x": 15.0,
+            "y": 235.0
+          },
+          {
+            "x": 15.0,
+            "y": 820.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D2"
+        },
+        "pin2": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D4"
+        },
+        "pin2": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 850.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D1"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 330.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D2"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 340.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D3"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 350.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D4"
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 360.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "D1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "D2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "D3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "D4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "D1"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 780.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "D2"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 790.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "D3"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 800.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "D4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compId": 32,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compId": 33,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compId": 34,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Q4"
+        },
+        "pin2": {
+          "compId": 35,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compId": 36,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compId": 37,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compId": 38,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Q4"
+        },
+        "pin2": {
+          "compId": 39,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compId": 40,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compId": 41,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compId": 42,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Q4"
+        },
+        "pin2": {
+          "compId": 43,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compId": 44,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compId": 45,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compId": 46,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Q4"
+        },
+        "pin2": {
+          "compId": 47,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y00"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 210.0,
+            "y": 50.0
+          },
+          {
+            "x": 210.0,
+            "y": 420.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y01"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 205.0,
+            "y": 60.0
+          },
+          {
+            "x": 205.0,
+            "y": 570.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y10"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 200.0,
+            "y": 70.0
+          },
+          {
+            "x": 200.0,
+            "y": 720.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y11"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 195.0,
+            "y": 80.0
+          },
+          {
+            "x": 195.0,
+            "y": 870.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 110.0,
+            "y": 370.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 105.0,
+            "y": 520.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 100.0,
+            "y": 670.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 95.0,
+            "y": 820.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 32,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 380.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 33,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 390.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 34,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 120.0,
+            "y": 400.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 35,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 115.0,
+            "y": 410.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 36,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 530.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 37,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 540.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 38,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 120.0,
+            "y": 550.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 39,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 115.0,
+            "y": 560.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 40,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 680.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 41,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 690.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 42,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 120.0,
+            "y": 700.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 43,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 115.0,
+            "y": 710.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 44,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 830.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 45,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 840.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 46,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 120.0,
+            "y": 850.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 47,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 115.0,
+            "y": 860.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 32,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 33,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 34,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 35,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 36,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 37,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 38,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 39,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 40,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 41,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 42,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 43,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 44,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 45,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 46,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 47,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 290.0,
+            "y": 380.0
+          },
+          {
+            "x": 290.0,
+            "y": 445.0
+          },
+          {
+            "x": 230.0,
+            "y": 445.0
+          },
+          {
+            "x": 230.0,
+            "y": 490.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 285.0,
+            "y": 390.0
+          },
+          {
+            "x": 285.0,
+            "y": 440.0
+          },
+          {
+            "x": 225.0,
+            "y": 440.0
+          },
+          {
+            "x": 225.0,
+            "y": 500.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 280.0,
+            "y": 400.0
+          },
+          {
+            "x": 280.0,
+            "y": 435.0
+          },
+          {
+            "x": 220.0,
+            "y": 435.0
+          },
+          {
+            "x": 220.0,
+            "y": 510.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 275.0,
+            "y": 410.0
+          },
+          {
+            "x": 275.0,
+            "y": 430.0
+          },
+          {
+            "x": 215.0,
+            "y": 430.0
+          },
+          {
+            "x": 215.0,
+            "y": 520.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 290.0,
+            "y": 490.0
+          },
+          {
+            "x": 290.0,
+            "y": 595.0
+          },
+          {
+            "x": 230.0,
+            "y": 595.0
+          },
+          {
+            "x": 230.0,
+            "y": 640.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 285.0,
+            "y": 500.0
+          },
+          {
+            "x": 285.0,
+            "y": 590.0
+          },
+          {
+            "x": 225.0,
+            "y": 590.0
+          },
+          {
+            "x": 225.0,
+            "y": 650.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 280.0,
+            "y": 510.0
+          },
+          {
+            "x": 280.0,
+            "y": 585.0
+          },
+          {
+            "x": 220.0,
+            "y": 585.0
+          },
+          {
+            "x": 220.0,
+            "y": 660.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 275.0,
+            "y": 520.0
+          },
+          {
+            "x": 275.0,
+            "y": 580.0
+          },
+          {
+            "x": 215.0,
+            "y": 580.0
+          },
+          {
+            "x": 215.0,
+            "y": 670.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 290.0,
+            "y": 640.0
+          },
+          {
+            "x": 290.0,
+            "y": 745.0
+          },
+          {
+            "x": 230.0,
+            "y": 745.0
+          },
+          {
+            "x": 230.0,
+            "y": 790.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 285.0,
+            "y": 650.0
+          },
+          {
+            "x": 285.0,
+            "y": 740.0
+          },
+          {
+            "x": 225.0,
+            "y": 740.0
+          },
+          {
+            "x": 225.0,
+            "y": 800.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 280.0,
+            "y": 660.0
+          },
+          {
+            "x": 280.0,
+            "y": 735.0
+          },
+          {
+            "x": 220.0,
+            "y": 735.0
+          },
+          {
+            "x": 220.0,
+            "y": 810.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 275.0,
+            "y": 670.0
+          },
+          {
+            "x": 275.0,
+            "y": 730.0
+          },
+          {
+            "x": 215.0,
+            "y": 730.0
+          },
+          {
+            "x": 215.0,
+            "y": 820.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QA1"
+        },
+        "path": [
+          {
+            "x": 300.0,
+            "y": 790.0
+          },
+          {
+            "x": 300.0,
+            "y": 50.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QA2"
+        },
+        "path": [
+          {
+            "x": 305.0,
+            "y": 800.0
+          },
+          {
+            "x": 305.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QA3"
+        },
+        "path": [
+          {
+            "x": 310.0,
+            "y": 810.0
+          },
+          {
+            "x": 310.0,
+            "y": 250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QA4"
+        },
+        "path": [
+          {
+            "x": 315.0,
+            "y": 820.0
+          },
+          {
+            "x": 315.0,
+            "y": 350.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 190.0,
+            "y": 330.0
+          },
+          {
+            "x": 190.0,
+            "y": 430.0
+          },
+          {
+            "x": 130.0,
+            "y": 430.0
+          },
+          {
+            "x": 130.0,
+            "y": 440.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 185.0,
+            "y": 340.0
+          },
+          {
+            "x": 185.0,
+            "y": 425.0
+          },
+          {
+            "x": 125.0,
+            "y": 425.0
+          },
+          {
+            "x": 125.0,
+            "y": 450.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 180.0,
+            "y": 350.0
+          },
+          {
+            "x": 180.0,
+            "y": 420.0
+          },
+          {
+            "x": 120.0,
+            "y": 420.0
+          },
+          {
+            "x": 120.0,
+            "y": 460.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 175.0,
+            "y": 360.0
+          },
+          {
+            "x": 175.0,
+            "y": 415.0
+          },
+          {
+            "x": 115.0,
+            "y": 415.0
+          },
+          {
+            "x": 115.0,
+            "y": 470.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 190.0,
+            "y": 440.0
+          },
+          {
+            "x": 190.0,
+            "y": 580.0
+          },
+          {
+            "x": 130.0,
+            "y": 580.0
+          },
+          {
+            "x": 130.0,
+            "y": 590.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 185.0,
+            "y": 450.0
+          },
+          {
+            "x": 185.0,
+            "y": 575.0
+          },
+          {
+            "x": 125.0,
+            "y": 575.0
+          },
+          {
+            "x": 125.0,
+            "y": 600.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 180.0,
+            "y": 460.0
+          },
+          {
+            "x": 180.0,
+            "y": 570.0
+          },
+          {
+            "x": 120.0,
+            "y": 570.0
+          },
+          {
+            "x": 120.0,
+            "y": 610.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 175.0,
+            "y": 470.0
+          },
+          {
+            "x": 175.0,
+            "y": 565.0
+          },
+          {
+            "x": 115.0,
+            "y": 565.0
+          },
+          {
+            "x": 115.0,
+            "y": 620.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 190.0,
+            "y": 590.0
+          },
+          {
+            "x": 190.0,
+            "y": 730.0
+          },
+          {
+            "x": 130.0,
+            "y": 730.0
+          },
+          {
+            "x": 130.0,
+            "y": 740.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 185.0,
+            "y": 600.0
+          },
+          {
+            "x": 185.0,
+            "y": 725.0
+          },
+          {
+            "x": 125.0,
+            "y": 725.0
+          },
+          {
+            "x": 125.0,
+            "y": 750.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 180.0,
+            "y": 610.0
+          },
+          {
+            "x": 180.0,
+            "y": 720.0
+          },
+          {
+            "x": 120.0,
+            "y": 720.0
+          },
+          {
+            "x": 120.0,
+            "y": 760.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 175.0,
+            "y": 620.0
+          },
+          {
+            "x": 175.0,
+            "y": 715.0
+          },
+          {
+            "x": 115.0,
+            "y": 715.0
+          },
+          {
+            "x": 115.0,
+            "y": 770.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QB1"
+        },
+        "path": [
+          {
+            "x": 190.0,
+            "y": 740.0
+          },
+          {
+            "x": 190.0,
+            "y": 880.0
+          },
+          {
+            "x": 325.0,
+            "y": 880.0
+          },
+          {
+            "x": 325.0,
+            "y": 450.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QB2"
+        },
+        "path": [
+          {
+            "x": 185.0,
+            "y": 750.0
+          },
+          {
+            "x": 185.0,
+            "y": 885.0
+          },
+          {
+            "x": 330.0,
+            "y": 885.0
+          },
+          {
+            "x": 330.0,
+            "y": 550.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QB3"
+        },
+        "path": [
+          {
+            "x": 180.0,
+            "y": 760.0
+          },
+          {
+            "x": 180.0,
+            "y": 890.0
+          },
+          {
+            "x": 335.0,
+            "y": 890.0
+          },
+          {
+            "x": 335.0,
+            "y": 650.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QB4"
+        },
+        "path": [
+          {
+            "x": 175.0,
+            "y": 770.0
+          },
+          {
+            "x": 175.0,
+            "y": 895.0
+          },
+          {
+            "x": 340.0,
+            "y": 895.0
+          },
+          {
+            "x": 340.0,
+            "y": 750.0
+          }
+        ]
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A0",
+      "A1",
+      "B0",
+      "B1",
+      "WE",
+      "D1",
+      "D2",
+      "D3",
+      "D4"
+    ],
+    "label": "GUIram2",
+    "logic_width": 1,
+    "output_count": [
+      "QA1",
+      "QA2",
+      "QA3",
+      "QA4",
+      "QB1",
+      "QB2",
+      "QB3",
+      "QB4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIram4.json b/net.mograsim.logic.ui/components/GUIram4.json
new file mode 100644 (file)
index 0000000..2965fd0
--- /dev/null
@@ -0,0 +1,3248 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIram4",
+  "width": 35.0,
+  "height": 130.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "QA1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 55.0
+      },
+      "name": "QB2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 45.0
+      },
+      "name": "QB1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "QA3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 75.0
+      },
+      "name": "QB4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "QA2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 65.0
+      },
+      "name": "QB3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "QA4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 95.0
+      },
+      "name": "D1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "B0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "WE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 105.0
+      },
+      "name": "D2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "B1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 115.0
+      },
+      "name": "D3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "B2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 125.0
+      },
+      "name": "D4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "B3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.1,
+    "subComps": [
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 45.0
+        },
+        "name": "GUIdemux2",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 150.0
+        },
+        "name": "GUIdemux2",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 235.0,
+          "y": 150.0
+        },
+        "name": "GUIand41",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 80.0,
+          "y": 330.0
+        },
+        "name": "GUIram2",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 80.0,
+          "y": 480.0
+        },
+        "name": "GUIram2",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 80.0,
+          "y": 630.0
+        },
+        "name": "GUIram2",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 80.0,
+          "y": 780.0
+        },
+        "name": "GUIram2",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 250.0,
+          "y": 375.0
+        },
+        "name": "GUIand41",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 250.0,
+          "y": 485.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 250.0,
+          "y": 635.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 250.0,
+          "y": 785.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 155.0,
+          "y": 325.0
+        },
+        "name": "GUIand41",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 155.0,
+          "y": 435.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 155.0,
+          "y": 585.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 155.0,
+          "y": 735.0
+        },
+        "name": "GUIandor414",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 229.0,
+          "y": 154.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 224.0,
+          "y": 164.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 219.0,
+          "y": 174.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 214.0,
+          "y": 184.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 59.0,
+          "y": 534.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 64.0,
+          "y": 544.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 69.0,
+          "y": 554.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 74.0,
+          "y": 564.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 59.0,
+          "y": 684.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 64.0,
+          "y": 694.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 69.0,
+          "y": 704.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 74.0,
+          "y": 714.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 59.0,
+          "y": 834.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 64.0,
+          "y": 844.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 69.0,
+          "y": 854.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 74.0,
+          "y": 864.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 484.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 44.0,
+          "y": 494.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 49.0,
+          "y": 504.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 54.0,
+          "y": 514.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 634.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 44.0,
+          "y": 644.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 49.0,
+          "y": 654.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 54.0,
+          "y": 664.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 334.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 44.0,
+          "y": 349.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 49.0,
+          "y": 649.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 54.0,
+          "y": 749.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A0"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "S0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "S1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 150.0
+          },
+          {
+            "x": 10.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B0"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "S0"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 450.0
+          },
+          {
+            "x": 5.0,
+            "y": 155.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B1"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "S1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 550.0
+          },
+          {
+            "x": 10.0,
+            "y": 165.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y00"
+        },
+        "pin2": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y01"
+        },
+        "pin2": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y10"
+        },
+        "pin2": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y11"
+        },
+        "pin2": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "WE"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 850.0
+          },
+          {
+            "x": 15.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "WE"
+        },
+        "path": [
+          {
+            "x": 290.0,
+            "y": 155.0
+          },
+          {
+            "x": 290.0,
+            "y": 230.0
+          },
+          {
+            "x": 35.0,
+            "y": 230.0
+          },
+          {
+            "x": 35.0,
+            "y": 375.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "WE"
+        },
+        "path": [
+          {
+            "x": 285.0,
+            "y": 165.0
+          },
+          {
+            "x": 285.0,
+            "y": 225.0
+          },
+          {
+            "x": 30.0,
+            "y": 225.0
+          },
+          {
+            "x": 30.0,
+            "y": 525.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "WE"
+        },
+        "path": [
+          {
+            "x": 280.0,
+            "y": 175.0
+          },
+          {
+            "x": 280.0,
+            "y": 220.0
+          },
+          {
+            "x": 25.0,
+            "y": 220.0
+          },
+          {
+            "x": 25.0,
+            "y": 675.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "WE"
+        },
+        "path": [
+          {
+            "x": 275.0,
+            "y": 185.0
+          },
+          {
+            "x": 275.0,
+            "y": 215.0
+          },
+          {
+            "x": 20.0,
+            "y": 215.0
+          },
+          {
+            "x": 20.0,
+            "y": 825.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 32,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 40,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 40,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 33,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 41,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 41,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 345.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 34,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B0"
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 355.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 35,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B1"
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 365.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 32,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 33,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 34,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 35,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 32,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 36,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 33,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 37,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 34,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 42,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B2"
+        },
+        "pin2": {
+          "compId": 42,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 42,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 38,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 35,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 39,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 36,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 37,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 38,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B0"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 39,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 36,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A0"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 785.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 37,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 795.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 38,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B0"
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 805.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 39,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 43,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 43,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B1"
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 815.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 40,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 41,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B3"
+        },
+        "pin2": {
+          "compId": 43,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D1"
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 385.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D2"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 395.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D3"
+        },
+        "path": [
+          {
+            "x": 70.0,
+            "y": 405.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D4"
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 415.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "D1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "D2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "D3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "D4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "D1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "D2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "D3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "D4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 950.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D2"
+        },
+        "pin2": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 1050.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 70.0,
+            "y": 1150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D4"
+        },
+        "pin2": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 1250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y00"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 135.0,
+            "y": 50.0
+          },
+          {
+            "x": 135.0,
+            "y": 370.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y01"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 60.0
+          },
+          {
+            "x": 130.0,
+            "y": 520.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y10"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 70.0
+          },
+          {
+            "x": 125.0,
+            "y": 670.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y11"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 120.0,
+            "y": 80.0
+          },
+          {
+            "x": 120.0,
+            "y": 820.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 230.0,
+            "y": 420.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 225.0,
+            "y": 570.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 220.0,
+            "y": 720.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 215.0,
+            "y": 870.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "QB1"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 375.0
+          },
+          {
+            "x": 140.0,
+            "y": 380.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "QB2"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 385.0
+          },
+          {
+            "x": 140.0,
+            "y": 390.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "QB3"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 395.0
+          },
+          {
+            "x": 140.0,
+            "y": 400.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "QB4"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 405.0
+          },
+          {
+            "x": 140.0,
+            "y": 410.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "QB1"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 525.0
+          },
+          {
+            "x": 140.0,
+            "y": 530.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "QB2"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 535.0
+          },
+          {
+            "x": 140.0,
+            "y": 540.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "QB3"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 545.0
+          },
+          {
+            "x": 140.0,
+            "y": 550.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "QB4"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 555.0
+          },
+          {
+            "x": 140.0,
+            "y": 560.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "QB1"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 675.0
+          },
+          {
+            "x": 140.0,
+            "y": 680.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "QB2"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 685.0
+          },
+          {
+            "x": 140.0,
+            "y": 690.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "QB3"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 695.0
+          },
+          {
+            "x": 140.0,
+            "y": 700.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "QB4"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 705.0
+          },
+          {
+            "x": 140.0,
+            "y": 710.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "QB1"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 825.0
+          },
+          {
+            "x": 140.0,
+            "y": 830.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "QB2"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 835.0
+          },
+          {
+            "x": 140.0,
+            "y": 840.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "QB3"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 845.0
+          },
+          {
+            "x": 140.0,
+            "y": 850.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "QB4"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 855.0
+          },
+          {
+            "x": 140.0,
+            "y": 860.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "QA1"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 335.0
+          },
+          {
+            "x": 140.0,
+            "y": 330.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "QA2"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 345.0
+          },
+          {
+            "x": 140.0,
+            "y": 340.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "QA3"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 355.0
+          },
+          {
+            "x": 140.0,
+            "y": 350.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "QA4"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 365.0
+          },
+          {
+            "x": 140.0,
+            "y": 360.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "QA1"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 485.0
+          },
+          {
+            "x": 140.0,
+            "y": 480.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "QA2"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 495.0
+          },
+          {
+            "x": 140.0,
+            "y": 490.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "QA3"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 505.0
+          },
+          {
+            "x": 140.0,
+            "y": 500.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "QA4"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 515.0
+          },
+          {
+            "x": 140.0,
+            "y": 510.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "QA1"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 635.0
+          },
+          {
+            "x": 140.0,
+            "y": 630.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "QA2"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 645.0
+          },
+          {
+            "x": 140.0,
+            "y": 640.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "QA3"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 655.0
+          },
+          {
+            "x": 140.0,
+            "y": 650.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "QA4"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 665.0
+          },
+          {
+            "x": 140.0,
+            "y": 660.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "QA1"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 785.0
+          },
+          {
+            "x": 140.0,
+            "y": 780.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "QA2"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 795.0
+          },
+          {
+            "x": 140.0,
+            "y": 790.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "QA3"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 805.0
+          },
+          {
+            "x": 140.0,
+            "y": 800.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "QA4"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 815.0
+          },
+          {
+            "x": 140.0,
+            "y": 810.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 305.0,
+            "y": 380.0
+          },
+          {
+            "x": 305.0,
+            "y": 445.0
+          },
+          {
+            "x": 245.0,
+            "y": 445.0
+          },
+          {
+            "x": 245.0,
+            "y": 490.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 300.0,
+            "y": 390.0
+          },
+          {
+            "x": 300.0,
+            "y": 440.0
+          },
+          {
+            "x": 240.0,
+            "y": 440.0
+          },
+          {
+            "x": 240.0,
+            "y": 500.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 295.0,
+            "y": 400.0
+          },
+          {
+            "x": 295.0,
+            "y": 435.0
+          },
+          {
+            "x": 235.0,
+            "y": 435.0
+          },
+          {
+            "x": 235.0,
+            "y": 510.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 290.0,
+            "y": 410.0
+          },
+          {
+            "x": 290.0,
+            "y": 430.0
+          },
+          {
+            "x": 230.0,
+            "y": 430.0
+          },
+          {
+            "x": 230.0,
+            "y": 520.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 305.0,
+            "y": 490.0
+          },
+          {
+            "x": 305.0,
+            "y": 595.0
+          },
+          {
+            "x": 245.0,
+            "y": 595.0
+          },
+          {
+            "x": 245.0,
+            "y": 640.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 300.0,
+            "y": 500.0
+          },
+          {
+            "x": 300.0,
+            "y": 590.0
+          },
+          {
+            "x": 240.0,
+            "y": 590.0
+          },
+          {
+            "x": 240.0,
+            "y": 650.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 295.0,
+            "y": 510.0
+          },
+          {
+            "x": 295.0,
+            "y": 585.0
+          },
+          {
+            "x": 235.0,
+            "y": 585.0
+          },
+          {
+            "x": 235.0,
+            "y": 660.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 290.0,
+            "y": 520.0
+          },
+          {
+            "x": 290.0,
+            "y": 580.0
+          },
+          {
+            "x": 230.0,
+            "y": 580.0
+          },
+          {
+            "x": 230.0,
+            "y": 670.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 305.0,
+            "y": 640.0
+          },
+          {
+            "x": 305.0,
+            "y": 745.0
+          },
+          {
+            "x": 245.0,
+            "y": 745.0
+          },
+          {
+            "x": 245.0,
+            "y": 790.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 300.0,
+            "y": 650.0
+          },
+          {
+            "x": 300.0,
+            "y": 740.0
+          },
+          {
+            "x": 240.0,
+            "y": 740.0
+          },
+          {
+            "x": 240.0,
+            "y": 800.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 295.0,
+            "y": 660.0
+          },
+          {
+            "x": 295.0,
+            "y": 735.0
+          },
+          {
+            "x": 235.0,
+            "y": 735.0
+          },
+          {
+            "x": 235.0,
+            "y": 810.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 290.0,
+            "y": 670.0
+          },
+          {
+            "x": 290.0,
+            "y": 730.0
+          },
+          {
+            "x": 230.0,
+            "y": 730.0
+          },
+          {
+            "x": 230.0,
+            "y": 820.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QB1"
+        },
+        "path": [
+          {
+            "x": 330.0,
+            "y": 790.0
+          },
+          {
+            "x": 330.0,
+            "y": 450.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QB2"
+        },
+        "path": [
+          {
+            "x": 335.0,
+            "y": 800.0
+          },
+          {
+            "x": 335.0,
+            "y": 550.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QB3"
+        },
+        "path": [
+          {
+            "x": 340.0,
+            "y": 810.0
+          },
+          {
+            "x": 340.0,
+            "y": 650.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QB4"
+        },
+        "path": [
+          {
+            "x": 345.0,
+            "y": 820.0
+          },
+          {
+            "x": 345.0,
+            "y": 750.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 210.0,
+            "y": 330.0
+          },
+          {
+            "x": 210.0,
+            "y": 430.0
+          },
+          {
+            "x": 150.0,
+            "y": 430.0
+          },
+          {
+            "x": 150.0,
+            "y": 440.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 205.0,
+            "y": 340.0
+          },
+          {
+            "x": 205.0,
+            "y": 425.0
+          },
+          {
+            "x": 145.0,
+            "y": 425.0
+          },
+          {
+            "x": 145.0,
+            "y": 450.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 200.0,
+            "y": 350.0
+          },
+          {
+            "x": 200.0,
+            "y": 420.0
+          },
+          {
+            "x": 140.0,
+            "y": 420.0
+          },
+          {
+            "x": 140.0,
+            "y": 460.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 195.0,
+            "y": 360.0
+          },
+          {
+            "x": 195.0,
+            "y": 415.0
+          },
+          {
+            "x": 135.0,
+            "y": 415.0
+          },
+          {
+            "x": 135.0,
+            "y": 470.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 210.0,
+            "y": 440.0
+          },
+          {
+            "x": 210.0,
+            "y": 580.0
+          },
+          {
+            "x": 150.0,
+            "y": 580.0
+          },
+          {
+            "x": 150.0,
+            "y": 590.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 205.0,
+            "y": 450.0
+          },
+          {
+            "x": 205.0,
+            "y": 575.0
+          },
+          {
+            "x": 145.0,
+            "y": 575.0
+          },
+          {
+            "x": 145.0,
+            "y": 600.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 200.0,
+            "y": 460.0
+          },
+          {
+            "x": 200.0,
+            "y": 570.0
+          },
+          {
+            "x": 140.0,
+            "y": 570.0
+          },
+          {
+            "x": 140.0,
+            "y": 610.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 195.0,
+            "y": 470.0
+          },
+          {
+            "x": 195.0,
+            "y": 565.0
+          },
+          {
+            "x": 135.0,
+            "y": 565.0
+          },
+          {
+            "x": 135.0,
+            "y": 620.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 210.0,
+            "y": 590.0
+          },
+          {
+            "x": 210.0,
+            "y": 730.0
+          },
+          {
+            "x": 150.0,
+            "y": 730.0
+          },
+          {
+            "x": 150.0,
+            "y": 740.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 205.0,
+            "y": 600.0
+          },
+          {
+            "x": 205.0,
+            "y": 725.0
+          },
+          {
+            "x": 145.0,
+            "y": 725.0
+          },
+          {
+            "x": 145.0,
+            "y": 750.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 200.0,
+            "y": 610.0
+          },
+          {
+            "x": 200.0,
+            "y": 720.0
+          },
+          {
+            "x": 140.0,
+            "y": 720.0
+          },
+          {
+            "x": 140.0,
+            "y": 760.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 195.0,
+            "y": 620.0
+          },
+          {
+            "x": 195.0,
+            "y": 715.0
+          },
+          {
+            "x": 135.0,
+            "y": 715.0
+          },
+          {
+            "x": 135.0,
+            "y": 770.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QA1"
+        },
+        "path": [
+          {
+            "x": 210.0,
+            "y": 740.0
+          },
+          {
+            "x": 210.0,
+            "y": 880.0
+          },
+          {
+            "x": 310.0,
+            "y": 880.0
+          },
+          {
+            "x": 310.0,
+            "y": 50.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QA2"
+        },
+        "path": [
+          {
+            "x": 205.0,
+            "y": 750.0
+          },
+          {
+            "x": 205.0,
+            "y": 885.0
+          },
+          {
+            "x": 315.0,
+            "y": 885.0
+          },
+          {
+            "x": 315.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QA3"
+        },
+        "path": [
+          {
+            "x": 200.0,
+            "y": 760.0
+          },
+          {
+            "x": 200.0,
+            "y": 890.0
+          },
+          {
+            "x": 320.0,
+            "y": 890.0
+          },
+          {
+            "x": 320.0,
+            "y": 250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QA4"
+        },
+        "path": [
+          {
+            "x": 195.0,
+            "y": 770.0
+          },
+          {
+            "x": 195.0,
+            "y": 895.0
+          },
+          {
+            "x": 325.0,
+            "y": 895.0
+          },
+          {
+            "x": 325.0,
+            "y": 350.0
+          }
+        ]
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A0",
+      "A1",
+      "A2",
+      "A3",
+      "B0",
+      "B1",
+      "B2",
+      "B3",
+      "WE",
+      "D1",
+      "D2",
+      "D3",
+      "D4"
+    ],
+    "label": "GUIram4",
+    "logic_width": 1,
+    "output_count": [
+      "QA1",
+      "QA2",
+      "QA3",
+      "QA4",
+      "QB1",
+      "QB2",
+      "QB3",
+      "QB4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIsel2_4.json b/net.mograsim.logic.ui/components/GUIsel2_4.json
new file mode 100644 (file)
index 0000000..d0e4289
--- /dev/null
@@ -0,0 +1,846 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIsel2_4",
+  "width": 35.0,
+  "height": 100.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "SA",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "SB",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "B1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "B2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "B3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 95.0
+      },
+      "name": "B4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "A4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Y2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Y3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Y4",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 52.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 102.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 152.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 27.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 77.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 127.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 177.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 27.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 52.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 65.0,
+          "y": 77.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 16.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 66.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 116.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 41.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 91.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 141.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 62.5
+          },
+          {
+            "x": 15.0,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 17.5,
+            "y": 87.5
+          },
+          {
+            "x": 17.5,
+            "y": 57.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 17.5,
+            "y": 112.5
+          },
+          {
+            "x": 17.5,
+            "y": 107.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A4"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 17.5,
+            "y": 137.5
+          },
+          {
+            "x": 17.5,
+            "y": 157.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B1"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 162.5
+          },
+          {
+            "x": 10.0,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B2"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 12.5,
+            "y": 187.5
+          },
+          {
+            "x": 12.5,
+            "y": 82.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B3"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 212.5
+          },
+          {
+            "x": 15.0,
+            "y": 132.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B4"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 237.5
+          },
+          {
+            "x": 10.0,
+            "y": 182.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "SA"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": ""
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "SB"
+        },
+        "pin2": {
+          "compId": 16,
+          "pinName": ""
+        }
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": ""
+        }
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": ""
+        }
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 167.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 17,
+          "pinName": ""
+        }
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 18,
+          "pinName": ""
+        }
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 192.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 42.5,
+            "y": 12.5
+          },
+          {
+            "x": 42.5,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 37.5
+          },
+          {
+            "x": 45.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 47.5,
+            "y": 62.5
+          },
+          {
+            "x": 47.5,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 87.5
+          },
+          {
+            "x": 50.0,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 52.5,
+            "y": 112.5
+          },
+          {
+            "x": 52.5,
+            "y": 57.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 137.5
+          },
+          {
+            "x": 55.0,
+            "y": 67.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 57.5,
+            "y": 162.5
+          },
+          {
+            "x": 57.5,
+            "y": 82.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 187.5
+          },
+          {
+            "x": 60.0,
+            "y": 92.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y4"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "SA",
+      "SB",
+      "A1",
+      "A2",
+      "A3",
+      "A4",
+      "B1",
+      "B2",
+      "B3",
+      "B4"
+    ],
+    "label": "GUIsel2_4",
+    "logic_width": 1,
+    "output_count": [
+      "Y1",
+      "Y2",
+      "Y3",
+      "Y4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIsel3_4.json b/net.mograsim.logic.ui/components/GUIsel3_4.json
new file mode 100644 (file)
index 0000000..cf4ad9d
--- /dev/null
@@ -0,0 +1,910 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIsel3_4",
+  "width": 35.0,
+  "height": 150.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "SA",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 115.0
+      },
+      "name": "C1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "SB",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "B1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 125.0
+      },
+      "name": "C2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "SC",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "B2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 135.0
+      },
+      "name": "C3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 95.0
+      },
+      "name": "B3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 145.0
+      },
+      "name": "C4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 105.0
+      },
+      "name": "B4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "A4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Y2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Y3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Y4",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.2,
+    "subComps": [
+      {
+        "pos": {
+          "x": 35.0,
+          "y": 250.0
+        },
+        "name": "GUIsel2_4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 75.0,
+          "y": 250.0
+        },
+        "name": "GUInot4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 570.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 620.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 670.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 720.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 152.5,
+          "y": 15.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 152.5,
+          "y": 65.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 152.5,
+          "y": 115.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 152.5,
+          "y": 165.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 29.0,
+          "y": 584.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 29.0,
+          "y": 634.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 29.0,
+          "y": 684.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "SA"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "SA"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 25.0
+          },
+          {
+            "x": 25.0,
+            "y": 255.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "SB"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "SB"
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 75.0
+          },
+          {
+            "x": 20.0,
+            "y": 265.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 175.0
+          },
+          {
+            "x": 15.0,
+            "y": 275.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 225.0
+          },
+          {
+            "x": 10.0,
+            "y": 285.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 275.0
+          },
+          {
+            "x": 5.0,
+            "y": 295.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A4"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 325.0
+          },
+          {
+            "x": 5.0,
+            "y": 305.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 375.0
+          },
+          {
+            "x": 10.0,
+            "y": 315.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B2"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B2"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 425.0
+          },
+          {
+            "x": 15.0,
+            "y": 325.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B3"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B3"
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 475.0
+          },
+          {
+            "x": 20.0,
+            "y": 335.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B4"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B4"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 525.0
+          },
+          {
+            "x": 25.0,
+            "y": 345.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "SC"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 125.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 125.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 125.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 735.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C1"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C2"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C3"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C4"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 115.0,
+            "y": 255.0
+          },
+          {
+            "x": 115.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 120.0,
+            "y": 265.0
+          },
+          {
+            "x": 120.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 275.0
+          },
+          {
+            "x": 125.0,
+            "y": 120.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 285.0
+          },
+          {
+            "x": 130.0,
+            "y": 170.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 135.0,
+            "y": 580.0
+          },
+          {
+            "x": 135.0,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 630.0
+          },
+          {
+            "x": 140.0,
+            "y": 80.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 145.0,
+            "y": 680.0
+          },
+          {
+            "x": 145.0,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 150.0,
+            "y": 730.0
+          },
+          {
+            "x": 150.0,
+            "y": 180.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y4"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "SA",
+      "SB",
+      "SC",
+      "A1",
+      "A2",
+      "A3",
+      "A4",
+      "B1",
+      "B2",
+      "B3",
+      "B4",
+      "C1",
+      "C2",
+      "C3",
+      "C4"
+    ],
+    "label": "GUIsel3_4",
+    "logic_width": 1,
+    "output_count": [
+      "Y1",
+      "Y2",
+      "Y3",
+      "Y4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/GUIxor.json b/net.mograsim.logic.ui/components/GUIxor.json
new file mode 100644 (file)
index 0000000..42029db
--- /dev/null
@@ -0,0 +1,279 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIxor",
+  "width": 35.0,
+  "height": 20.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "A",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "B",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 7.5,
+          "y": 15.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 35.0,
+          "y": 2.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 35.0,
+          "y": 27.5
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 62.5,
+          "y": 15.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 11.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 36.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 29.0,
+          "y": 24.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        }
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 32.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 42.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "A",
+      "B"
+    ],
+    "label": "GUIxor",
+    "logic_width": 1,
+    "output_count": [
+      "Y"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/am2901/GUIAm2901.json b/net.mograsim.logic.ui/components/am2901/GUIAm2901.json
new file mode 100644 (file)
index 0000000..fa1d68e
--- /dev/null
@@ -0,0 +1,3329 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIAm2901",
+  "width": 35.0,
+  "height": 270.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 85.0
+      },
+      "name": "ORAMn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 95.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 265.0
+      },
+      "name": "IQn+3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "I0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 255.0
+      },
+      "name": "IQn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "I1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "I2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "I3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 65.0
+      },
+      "name": "OVR",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "I4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 105.0
+      },
+      "name": "Cn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 115.0
+      },
+      "name": "OQn+3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "I5",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I6",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 105.0
+      },
+      "name": "OQn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "I7",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "I8",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 155.0
+      },
+      "name": "A0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 165.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 175.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 185.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 235.0
+      },
+      "name": "IRAMn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 55.0
+      },
+      "name": "Cn+4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 95.0
+      },
+      "name": "ORAMn+3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 45.0
+      },
+      "name": "F\u003d0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 115.0
+      },
+      "name": "D1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 245.0
+      },
+      "name": "IRAMn+3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 75.0
+      },
+      "name": "F3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 125.0
+      },
+      "name": "D2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 195.0
+      },
+      "name": "B0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 135.0
+      },
+      "name": "D3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 205.0
+      },
+      "name": "B1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 145.0
+      },
+      "name": "D4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 215.0
+      },
+      "name": "B2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 225.0
+      },
+      "name": "B3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Y1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Y2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Y3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Y4",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.1,
+    "subComps": [
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 45.0
+        },
+        "name": "GUIAm2901DestDecode",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 275.0,
+          "y": 135.0
+        },
+        "name": "GUImux1_4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 190.0,
+          "y": 65.0
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 160.0,
+          "y": 75.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 240.0,
+          "y": 2110.0
+        },
+        "name": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 275.0,
+          "y": 445.0
+        },
+        "name": "GUIor4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 320.0,
+          "y": 440.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 95.0,
+          "y": 2220.0
+        },
+        "name": "GUIram4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 160.0,
+          "y": 2220.0
+        },
+        "name": "GUIdlatch4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 160.0,
+          "y": 2275.0
+        },
+        "name": "GUIdlatch4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 2310.0
+        },
+        "name": "GUIsel3_4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 2510.0
+        },
+        "name": "GUIsel3_4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 90.0,
+          "y": 2490.0
+        },
+        "name": "GUIAm2901QReg",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 154.0,
+          "y": 949.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 154.0,
+          "y": 89.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 154.0,
+          "y": 2264.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 154.0,
+          "y": 2319.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 2314.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 2324.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 29.0,
+          "y": 2334.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 219.0,
+          "y": 2224.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 224.0,
+          "y": 2234.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 229.0,
+          "y": 2244.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 234.0,
+          "y": 2254.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 129.0,
+          "y": 2494.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 134.0,
+          "y": 2504.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 139.0,
+          "y": 2514.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 144.0,
+          "y": 2524.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 219.0,
+          "y": 2494.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 234.0,
+          "y": 2524.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 2624.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 2634.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 279.0,
+          "y": 2114.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 294.0,
+          "y": 2144.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 329.0,
+          "y": 949.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 254.0,
+          "y": 2089.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 259.0,
+          "y": 2094.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 264.0,
+          "y": 2099.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 269.0,
+          "y": 2104.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 254.0,
+          "y": 449.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 259.0,
+          "y": 459.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 264.0,
+          "y": 469.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 269.0,
+          "y": 479.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 2354.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 2364.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 19.0,
+          "y": 2374.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 2394.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 19.0,
+          "y": 2404.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 2414.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 2384.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 2424.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 19.0,
+          "y": 2434.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 2444.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 314.0,
+          "y": 449.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I8"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I8"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I7"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I7"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 150.0
+          },
+          {
+            "x": 5.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I6"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I6"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 250.0
+          },
+          {
+            "x": 10.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I5"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "I5"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 350.0
+          },
+          {
+            "x": 130.0,
+            "y": 2115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I4"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "I4"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 450.0
+          },
+          {
+            "x": 125.0,
+            "y": 2125.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "I3"
+        },
+        "path": [
+          {
+            "x": 120.0,
+            "y": 550.0
+          },
+          {
+            "x": 120.0,
+            "y": 2135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I2"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "I2"
+        },
+        "path": [
+          {
+            "x": 115.0,
+            "y": 650.0
+          },
+          {
+            "x": 115.0,
+            "y": 2145.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "I1"
+        },
+        "path": [
+          {
+            "x": 110.0,
+            "y": 750.0
+          },
+          {
+            "x": 110.0,
+            "y": 2155.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I0"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "I0"
+        },
+        "path": [
+          {
+            "x": 105.0,
+            "y": 850.0
+          },
+          {
+            "x": 105.0,
+            "y": 2165.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 155.0,
+            "y": 80.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "C"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "C"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "C"
+        },
+        "path": [
+          {
+            "x": 155.0,
+            "y": 2485.0
+          },
+          {
+            "x": 80.0,
+            "y": 2485.0
+          },
+          {
+            "x": 80.0,
+            "y": 2495.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "LSH"
+        },
+        "pin2": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 90.0
+          },
+          {
+            "x": 55.0,
+            "y": 125.0
+          },
+          {
+            "x": 40.0,
+            "y": 125.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "NSH"
+        },
+        "pin2": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 50.0
+          },
+          {
+            "x": 60.0,
+            "y": 120.0
+          },
+          {
+            "x": 35.0,
+            "y": 120.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "RSH"
+        },
+        "pin2": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 60.0
+          },
+          {
+            "x": 65.0,
+            "y": 115.0
+          },
+          {
+            "x": 30.0,
+            "y": 115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "SA"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "SB"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "SC"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "SA"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 2515.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "SB"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 2525.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "SC"
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 2535.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A0"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A0"
+        },
+        "path": [
+          {
+            "x": 80.0,
+            "y": 1550.0
+          },
+          {
+            "x": 80.0,
+            "y": 2225.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 1650.0
+          },
+          {
+            "x": 75.0,
+            "y": 2235.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 70.0,
+            "y": 1750.0
+          },
+          {
+            "x": 70.0,
+            "y": 2245.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 1850.0
+          },
+          {
+            "x": 65.0,
+            "y": 2255.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B0"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B0"
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 1950.0
+          },
+          {
+            "x": 60.0,
+            "y": 2265.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B1"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B1"
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 2050.0
+          },
+          {
+            "x": 55.0,
+            "y": 2275.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B2"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B2"
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 2150.0
+          },
+          {
+            "x": 50.0,
+            "y": 2285.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B3"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B3"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 2250.0
+          },
+          {
+            "x": 45.0,
+            "y": 2295.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "QA1"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "D1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "QA2"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "D2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "QA3"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "D3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "QA4"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "D4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "QB1"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "D1"
+        },
+        "path": [
+          {
+            "x": 150.0,
+            "y": 2265.0
+          },
+          {
+            "x": 150.0,
+            "y": 2280.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "QB2"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "D2"
+        },
+        "path": [
+          {
+            "x": 145.0,
+            "y": 2275.0
+          },
+          {
+            "x": 145.0,
+            "y": 2290.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "QB3"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "D3"
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 2285.0
+          },
+          {
+            "x": 140.0,
+            "y": 2300.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "QB4"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "D4"
+        },
+        "path": [
+          {
+            "x": 135.0,
+            "y": 2295.0
+          },
+          {
+            "x": 135.0,
+            "y": 2310.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "Cn"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "Cn"
+        },
+        "path": [
+          {
+            "x": 100.0,
+            "y": 1050.0
+          },
+          {
+            "x": 100.0,
+            "y": 2175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D1"
+        },
+        "path": [
+          {
+            "x": 180.0,
+            "y": 1150.0
+          },
+          {
+            "x": 180.0,
+            "y": 2185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D2"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D2"
+        },
+        "path": [
+          {
+            "x": 175.0,
+            "y": 1250.0
+          },
+          {
+            "x": 175.0,
+            "y": 2195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D3"
+        },
+        "path": [
+          {
+            "x": 170.0,
+            "y": 1350.0
+          },
+          {
+            "x": 170.0,
+            "y": 2205.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D4"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D4"
+        },
+        "path": [
+          {
+            "x": 165.0,
+            "y": 1450.0
+          },
+          {
+            "x": 165.0,
+            "y": 2215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Q4"
+        },
+        "pin2": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I0_1"
+        },
+        "path": [
+          {
+            "x": 220.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I0_2"
+        },
+        "path": [
+          {
+            "x": 225.0,
+            "y": 160.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I0_3"
+        },
+        "path": [
+          {
+            "x": 230.0,
+            "y": 170.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I0_4"
+        },
+        "path": [
+          {
+            "x": 235.0,
+            "y": 180.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B1"
+        },
+        "path": [
+          {
+            "x": 200.0,
+            "y": 2280.0
+          },
+          {
+            "x": 200.0,
+            "y": 2265.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B2"
+        },
+        "path": [
+          {
+            "x": 205.0,
+            "y": 2290.0
+          },
+          {
+            "x": 205.0,
+            "y": 2275.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B3"
+        },
+        "path": [
+          {
+            "x": 210.0,
+            "y": 2300.0
+          },
+          {
+            "x": 210.0,
+            "y": 2285.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Q4"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B4"
+        },
+        "path": [
+          {
+            "x": 215.0,
+            "y": 2310.0
+          },
+          {
+            "x": 215.0,
+            "y": 2295.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Q4"
+        },
+        "pin2": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "OQn"
+        },
+        "path": [
+          {
+            "x": 335.0,
+            "y": 2495.0
+          },
+          {
+            "x": 335.0,
+            "y": 1050.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "OQn+3"
+        },
+        "path": [
+          {
+            "x": 340.0,
+            "y": 2525.0
+          },
+          {
+            "x": 340.0,
+            "y": 1150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 135.0,
+            "y": 2670.0
+          },
+          {
+            "x": 30.0,
+            "y": 2670.0
+          },
+          {
+            "x": 30.0,
+            "y": 2635.0
+          },
+          {
+            "x": 35.0,
+            "y": 2635.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 32,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 140.0,
+            "y": 2675.0
+          },
+          {
+            "x": 35.0,
+            "y": 2675.0
+          },
+          {
+            "x": 35.0,
+            "y": 2640.0
+          },
+          {
+            "x": 40.0,
+            "y": 2640.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "C1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 32,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "C2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 145.0,
+            "y": 2680.0
+          },
+          {
+            "x": 40.0,
+            "y": 2680.0
+          },
+          {
+            "x": 40.0,
+            "y": 2645.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "IQn+3"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 2650.0
+          },
+          {
+            "x": 5.0,
+            "y": 2655.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "IQn"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 2550.0
+          },
+          {
+            "x": 5.0,
+            "y": 2545.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 2665.0
+          },
+          {
+            "x": 25.0,
+            "y": 2665.0
+          },
+          {
+            "x": 25.0,
+            "y": 2630.0
+          },
+          {
+            "x": 30.0,
+            "y": 2630.0
+          },
+          {
+            "x": 30.0,
+            "y": 2555.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "Q1"
+        },
+        "path": [
+          {
+            "x": 220.0,
+            "y": 2305.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "Q2"
+        },
+        "path": [
+          {
+            "x": 225.0,
+            "y": 2505.0
+          },
+          {
+            "x": 225.0,
+            "y": 2315.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "Q3"
+        },
+        "path": [
+          {
+            "x": 230.0,
+            "y": 2515.0
+          },
+          {
+            "x": 230.0,
+            "y": 2325.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "Q4"
+        },
+        "path": [
+          {
+            "x": 235.0,
+            "y": 2335.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 2565.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 32,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 2575.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "D1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "D2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "D3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "D4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Cn+4"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Cn+4"
+        },
+        "path": [
+          {
+            "x": 315.0,
+            "y": 2155.0
+          },
+          {
+            "x": 315.0,
+            "y": 550.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "OVR"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "OVR"
+        },
+        "path": [
+          {
+            "x": 320.0,
+            "y": 2165.0
+          },
+          {
+            "x": 320.0,
+            "y": 650.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "F1"
+        },
+        "pin2": {
+          "compId": 33,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "F4"
+        },
+        "pin2": {
+          "compId": 34,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 33,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "ORAMn"
+        },
+        "path": [
+          {
+            "x": 325.0,
+            "y": 2115.0
+          },
+          {
+            "x": 325.0,
+            "y": 850.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 34,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 35,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 330.0,
+            "y": 2145.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 35,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "ORAMn+3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 35,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F3"
+        },
+        "path": [
+          {
+            "x": 330.0,
+            "y": 750.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 33,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 36,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 280.0,
+            "y": 2090.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "F2"
+        },
+        "pin2": {
+          "compId": 37,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 285.0,
+            "y": 2125.0
+          },
+          {
+            "x": 285.0,
+            "y": 2095.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "F3"
+        },
+        "pin2": {
+          "compId": 38,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 290.0,
+            "y": 2135.0
+          },
+          {
+            "x": 290.0,
+            "y": 2100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 34,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 39,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 295.0,
+            "y": 2105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 36,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 40,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 37,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 41,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 38,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 42,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 39,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 43,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 40,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 41,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 42,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 43,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 40,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I1_1"
+        },
+        "path": [
+          {
+            "x": 255.0,
+            "y": 190.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 41,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I1_2"
+        },
+        "path": [
+          {
+            "x": 260.0,
+            "y": 200.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 42,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I1_3"
+        },
+        "path": [
+          {
+            "x": 265.0,
+            "y": 210.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 43,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "I1_4"
+        },
+        "path": [
+          {
+            "x": 270.0,
+            "y": 220.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 36,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 44,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 2090.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 37,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 45,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 2095.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 38,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 46,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 2100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "IRAMn"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 2350.0
+          },
+          {
+            "x": 5.0,
+            "y": 2345.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 44,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 45,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 46,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 45,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 47,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 46,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 48,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 39,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 49,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 2105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 44,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 50,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 50,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 47,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 48,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 49,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 47,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 51,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 48,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 52,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 49,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 53,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 51,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 52,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 53,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "IRAMn+3"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 2450.0
+          },
+          {
+            "x": 5.0,
+            "y": 2455.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 50,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 2585.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 51,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B2"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 2595.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 52,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B3"
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 2605.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 53,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B4"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 2615.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "D1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "D2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "D3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "D4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "RAMWE"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "WE"
+        },
+        "path": [
+          {
+            "x": 230.0,
+            "y": 70.0
+          },
+          {
+            "x": 230.0,
+            "y": 105.0
+          },
+          {
+            "x": 90.0,
+            "y": 105.0
+          },
+          {
+            "x": 90.0,
+            "y": 2305.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "QWE"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "WE"
+        },
+        "path": [
+          {
+            "x": 85.0,
+            "y": 100.0
+          },
+          {
+            "x": 85.0,
+            "y": 2505.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "YF"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "S0"
+        },
+        "path": [
+          {
+            "x": 70.0,
+            "y": 80.0
+          },
+          {
+            "x": 70.0,
+            "y": 140.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y1"
+        },
+        "path": [
+          {
+            "x": 335.0,
+            "y": 140.0
+          },
+          {
+            "x": 335.0,
+            "y": 50.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y3"
+        },
+        "path": [
+          {
+            "x": 335.0,
+            "y": 160.0
+          },
+          {
+            "x": 335.0,
+            "y": 250.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Y4"
+        },
+        "path": [
+          {
+            "x": 325.0,
+            "y": 170.0
+          },
+          {
+            "x": 325.0,
+            "y": 350.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 54,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 54,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 315.0,
+            "y": 445.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 54,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 315.0,
+            "y": 455.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F\u003d0"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "I8",
+      "I7",
+      "I6",
+      "I5",
+      "I4",
+      "I3",
+      "I2",
+      "I1",
+      "I0",
+      "C",
+      "Cn",
+      "D1",
+      "D2",
+      "D3",
+      "D4",
+      "A0",
+      "A1",
+      "A2",
+      "A3",
+      "B0",
+      "B1",
+      "B2",
+      "B3",
+      "IRAMn",
+      "IRAMn+3",
+      "IQn",
+      "IQn+3"
+    ],
+    "label": "GUIAm2901",
+    "logic_width": 1,
+    "output_count": [
+      "Y1",
+      "Y2",
+      "Y3",
+      "Y4",
+      "F\u003d0",
+      "Cn+4",
+      "OVR",
+      "F3",
+      "ORAMn",
+      "ORAMn+3",
+      "OQn",
+      "OQn+3"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/am2901/GUIAm2901ALUFuncDecode.json b/net.mograsim.logic.ui/components/am2901/GUIAm2901ALUFuncDecode.json
new file mode 100644 (file)
index 0000000..16bc1b1
--- /dev/null
@@ -0,0 +1,708 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIAm2901ALUFuncDecode",
+  "width": 35.0,
+  "height": 60.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "SBE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 45.0
+      },
+      "name": "FN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "I4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "SN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "I5",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "L",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 55.0
+      },
+      "name": "RN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "CinE",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.25,
+    "subComps": [
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 10.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 50.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 10.0
+        },
+        "name": "GUInand3",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 45.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 55.0,
+          "y": 70.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 100.0,
+          "y": 50.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 100.0,
+          "y": 135.0
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 19.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 24.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 44.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 59.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 54.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 64.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 84.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 49.0,
+          "y": 99.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 49.0,
+          "y": 74.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 19.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 34.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I5"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 15.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 45.0
+          },
+          {
+            "x": 45.0,
+            "y": 50.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "FN"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 180.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I4"
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 40.0
+          },
+          {
+            "x": 45.0,
+            "y": 40.0
+          },
+          {
+            "x": 45.0,
+            "y": 15.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "SN"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 105.0
+          },
+          {
+            "x": 135.0,
+            "y": 105.0
+          },
+          {
+            "x": 135.0,
+            "y": 100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "RN"
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 220.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "CinE"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 5.0
+          },
+          {
+            "x": 115.0,
+            "y": 5.0
+          },
+          {
+            "x": 115.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "C"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "L"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "SBE"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "I5",
+      "I4",
+      "I3"
+    ],
+    "label": "GUIAm2901ALUFuncDecode",
+    "logic_width": 1,
+    "output_count": [
+      "CinE",
+      "L",
+      "SN",
+      "SBE",
+      "FN",
+      "RN"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/am2901/GUIAm2901ALUInclDecode.json b/net.mograsim.logic.ui/components/am2901/GUIAm2901ALUInclDecode.json
new file mode 100644 (file)
index 0000000..09d738a
--- /dev/null
@@ -0,0 +1,1493 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIAm2901ALUInclDecode",
+  "width": 35.0,
+  "height": 120.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "R2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 105.0
+      },
+      "name": "S3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "R3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 115.0
+      },
+      "name": "S4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "R4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 55.0
+      },
+      "name": "OVR",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "I4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "Cn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "F1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "I5",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "F2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "F3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "F4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 45.0
+      },
+      "name": "Cn+4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "S1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "R1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 95.0
+      },
+      "name": "S2",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.25,
+    "subComps": [
+      {
+        "pos": {
+          "x": 20.0,
+          "y": 2.5
+        },
+        "name": "GUIAm2901ALUFuncDecode",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 80.0
+        },
+        "name": "GUIAm2901ALUOneBit",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 180.0
+        },
+        "name": "GUIAm2901ALUOneBit",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 280.0
+        },
+        "name": "GUIAm2901ALUOneBit",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 380.0
+        },
+        "name": "GUIAm2901ALUOneBit",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 95.0,
+          "y": 400.0
+        },
+        "name": "GUIxor",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 94.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 194.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 294.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 26.5,
+          "y": 104.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 26.5,
+          "y": 204.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 26.5,
+          "y": 304.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 29.0,
+          "y": 124.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 29.0,
+          "y": 224.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 29.0,
+          "y": 324.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 31.5,
+          "y": 144.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 31.5,
+          "y": 244.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 31.5,
+          "y": 344.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 154.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 254.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 354.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 36.5,
+          "y": 164.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 36.5,
+          "y": 264.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 36.5,
+          "y": 364.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 84.0,
+          "y": 374.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 84.0,
+          "y": 384.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I5"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I5"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 20.0
+          },
+          {
+            "x": 5.0,
+            "y": 7.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I4"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I4"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 60.0
+          },
+          {
+            "x": 10.0,
+            "y": 17.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I3"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 100.0
+          },
+          {
+            "x": 15.0,
+            "y": 27.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "SBE"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 62.5,
+            "y": 37.5
+          },
+          {
+            "x": 62.5,
+            "y": 70.0
+          },
+          {
+            "x": 25.0,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "CoutE"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "CoutE"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "CoutE"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "CoutE"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 395.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "CinE"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 70.0,
+            "y": 7.5
+          },
+          {
+            "x": 70.0,
+            "y": 77.5
+          },
+          {
+            "x": 27.5,
+            "y": 77.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "CinE"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "CinE"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "CinE"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "CinE"
+        },
+        "path": [
+          {
+            "x": 27.5,
+            "y": 405.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "RN"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 57.5,
+            "y": 57.5
+          },
+          {
+            "x": 57.5,
+            "y": 65.0
+          },
+          {
+            "x": 30.0,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "RN"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "RN"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "RN"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "RN"
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 425.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "SN"
+        },
+        "pin2": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 27.5
+          },
+          {
+            "x": 65.0,
+            "y": 72.5
+          },
+          {
+            "x": 32.5,
+            "y": 72.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "SN"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "SN"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "SN"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "SN"
+        },
+        "path": [
+          {
+            "x": 32.5,
+            "y": 445.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "FN"
+        },
+        "pin2": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 47.5
+          },
+          {
+            "x": 60.0,
+            "y": 67.5
+          },
+          {
+            "x": 35.0,
+            "y": 67.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "FN"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "FN"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "FN"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "FN"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 455.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "L"
+        },
+        "pin2": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 67.5,
+            "y": 17.5
+          },
+          {
+            "x": 67.5,
+            "y": 75.0
+          },
+          {
+            "x": 37.5,
+            "y": 75.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "L"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "L"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "L"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "L"
+        },
+        "path": [
+          {
+            "x": 37.5,
+            "y": 465.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "R1"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "R"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 180.0
+          },
+          {
+            "x": 10.0,
+            "y": 115.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "R2"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "R"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 220.0
+          },
+          {
+            "x": 10.0,
+            "y": 215.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "R3"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "R"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 260.0
+          },
+          {
+            "x": 10.0,
+            "y": 315.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "R4"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "R"
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 300.0
+          },
+          {
+            "x": 20.0,
+            "y": 415.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "S1"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "S"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 340.0
+          },
+          {
+            "x": 15.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "S2"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "S"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 380.0
+          },
+          {
+            "x": 5.0,
+            "y": 235.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "S3"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "S"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 420.0
+          },
+          {
+            "x": 10.0,
+            "y": 335.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "S4"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "S"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 460.0
+          },
+          {
+            "x": 10.0,
+            "y": 435.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "Cn"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "Cin"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 140.0
+          },
+          {
+            "x": 5.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Cout"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "Cin"
+        },
+        "path": [
+          {
+            "x": 85.0,
+            "y": 85.0
+          },
+          {
+            "x": 85.0,
+            "y": 175.0
+          },
+          {
+            "x": 40.0,
+            "y": 175.0
+          },
+          {
+            "x": 40.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Cout"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "Cin"
+        },
+        "path": [
+          {
+            "x": 85.0,
+            "y": 185.0
+          },
+          {
+            "x": 85.0,
+            "y": 275.0
+          },
+          {
+            "x": 40.0,
+            "y": 275.0
+          },
+          {
+            "x": 40.0,
+            "y": 285.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Cout"
+        },
+        "pin2": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 85.0,
+            "y": 285.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "Cin"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 375.0
+          },
+          {
+            "x": 40.0,
+            "y": 385.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Cout"
+        },
+        "pin2": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "F"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F1"
+        },
+        "path": [
+          {
+            "x": 90.0,
+            "y": 95.0
+          },
+          {
+            "x": 90.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "F"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F2"
+        },
+        "path": [
+          {
+            "x": 95.0,
+            "y": 195.0
+          },
+          {
+            "x": 95.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "F"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F3"
+        },
+        "path": [
+          {
+            "x": 100.0,
+            "y": 295.0
+          },
+          {
+            "x": 100.0,
+            "y": 100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "F"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F4"
+        },
+        "path": [
+          {
+            "x": 105.0,
+            "y": 395.0
+          },
+          {
+            "x": 105.0,
+            "y": 140.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 90.0,
+            "y": 375.0
+          },
+          {
+            "x": 90.0,
+            "y": 405.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 85.0,
+            "y": 415.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Cn+4"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 385.0
+          },
+          {
+            "x": 130.0,
+            "y": 180.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "OVR"
+        }
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "I5",
+      "I4",
+      "I3",
+      "Cn",
+      "R1",
+      "R2",
+      "R3",
+      "R4",
+      "S1",
+      "S2",
+      "S3",
+      "S4"
+    ],
+    "label": "GUIAm2901ALUInclDecode",
+    "logic_width": 1,
+    "output_count": [
+      "F1",
+      "F2",
+      "F3",
+      "F4",
+      "Cn+4",
+      "OVR"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json b/net.mograsim.logic.ui/components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json
new file mode 100644 (file)
index 0000000..0b15fc0
--- /dev/null
@@ -0,0 +1,1348 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode",
+  "width": 35.0,
+  "height": 230.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 195.0
+      },
+      "name": "Q1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 205.0
+      },
+      "name": "Q2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 215.0
+      },
+      "name": "Q3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 225.0
+      },
+      "name": "Q4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "I0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "I1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "I2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 55.0
+      },
+      "name": "OVR",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "I4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "Cn",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "I5",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 115.0
+      },
+      "name": "A1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 125.0
+      },
+      "name": "A2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 135.0
+      },
+      "name": "A3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 145.0
+      },
+      "name": "A4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 45.0
+      },
+      "name": "Cn+4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "F1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "F2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "D1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "F3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "D2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "F4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 95.0
+      },
+      "name": "D3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 155.0
+      },
+      "name": "B1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 105.0
+      },
+      "name": "D4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 165.0
+      },
+      "name": "B2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 175.0
+      },
+      "name": "B3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 185.0
+      },
+      "name": "B4",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.25,
+    "subComps": [
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 165.0
+        },
+        "name": "GUIAm2901SourceDecode",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 365.0
+        },
+        "name": "GUIsel2_4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 45.0,
+          "y": 575.0
+        },
+        "name": "GUIsel3_4",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 60.0,
+          "y": 15.0
+        },
+        "name": "GUIAm2901ALUInclDecode",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 459.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 14.0,
+          "y": 499.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 19.0,
+          "y": 539.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 24.0,
+          "y": 579.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I5"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "I5"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I4"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "I4"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 60.0
+          },
+          {
+            "x": 5.0,
+            "y": 30.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I3"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "I3"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 100.0
+          },
+          {
+            "x": 15.0,
+            "y": 40.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I2"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I2"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 140.0
+          },
+          {
+            "x": 5.0,
+            "y": 170.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I0"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "I0"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 220.0
+          },
+          {
+            "x": 5.0,
+            "y": 190.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "Cn"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "Cn"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 260.0
+          },
+          {
+            "x": 10.0,
+            "y": 50.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 300.0
+          },
+          {
+            "x": 15.0,
+            "y": 390.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D2"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 340.0
+          },
+          {
+            "x": 10.0,
+            "y": 400.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 380.0
+          },
+          {
+            "x": 5.0,
+            "y": 410.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D4"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A4"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A1"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A2"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A3"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "A4"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 430.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B2"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 440.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B3"
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 450.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B4"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 460.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A1"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 610.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A2"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 620.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A3"
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 630.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A4"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 640.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B1"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B1"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 620.0
+          },
+          {
+            "x": 5.0,
+            "y": 650.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B2"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B3"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B3"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 700.0
+          },
+          {
+            "x": 5.0,
+            "y": 670.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "B4"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B4"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 740.0
+          },
+          {
+            "x": 10.0,
+            "y": 680.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "Q1"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "C1"
+        },
+        "path": [
+          {
+            "x": 15.0,
+            "y": 780.0
+          },
+          {
+            "x": 15.0,
+            "y": 690.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "Q2"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "C2"
+        },
+        "path": [
+          {
+            "x": 20.0,
+            "y": 820.0
+          },
+          {
+            "x": 20.0,
+            "y": 700.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "Q3"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "C3"
+        },
+        "path": [
+          {
+            "x": 25.0,
+            "y": 860.0
+          },
+          {
+            "x": 25.0,
+            "y": 710.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "Q4"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "C4"
+        },
+        "path": [
+          {
+            "x": 30.0,
+            "y": 900.0
+          },
+          {
+            "x": 30.0,
+            "y": 720.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "SQ"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "SC"
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 170.0
+          },
+          {
+            "x": 75.0,
+            "y": 240.0
+          },
+          {
+            "x": 30.0,
+            "y": 240.0
+          },
+          {
+            "x": 30.0,
+            "y": 600.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "RA"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "SB"
+        },
+        "path": [
+          {
+            "x": 70.0,
+            "y": 180.0
+          },
+          {
+            "x": 70.0,
+            "y": 235.0
+          },
+          {
+            "x": 20.0,
+            "y": 235.0
+          },
+          {
+            "x": 20.0,
+            "y": 380.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "SB"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "SB"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 190.0
+          },
+          {
+            "x": 65.0,
+            "y": 230.0
+          },
+          {
+            "x": 35.0,
+            "y": 230.0
+          },
+          {
+            "x": 35.0,
+            "y": 590.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "SA"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "SA"
+        },
+        "path": [
+          {
+            "x": 60.0,
+            "y": 200.0
+          },
+          {
+            "x": 60.0,
+            "y": 225.0
+          },
+          {
+            "x": 40.0,
+            "y": 225.0
+          },
+          {
+            "x": 40.0,
+            "y": 580.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "RD"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "SA"
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 210.0
+          },
+          {
+            "x": 55.0,
+            "y": 220.0
+          },
+          {
+            "x": 25.0,
+            "y": 220.0
+          },
+          {
+            "x": 25.0,
+            "y": 370.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "R1"
+        },
+        "path": [
+          {
+            "x": 82.5,
+            "y": 370.0
+          },
+          {
+            "x": 82.5,
+            "y": 162.5
+          },
+          {
+            "x": 20.0,
+            "y": 162.5
+          },
+          {
+            "x": 20.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "R2"
+        },
+        "path": [
+          {
+            "x": 85.0,
+            "y": 380.0
+          },
+          {
+            "x": 85.0,
+            "y": 160.0
+          },
+          {
+            "x": 22.5,
+            "y": 160.0
+          },
+          {
+            "x": 22.5,
+            "y": 70.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "R3"
+        },
+        "path": [
+          {
+            "x": 87.5,
+            "y": 390.0
+          },
+          {
+            "x": 87.5,
+            "y": 157.5
+          },
+          {
+            "x": 25.0,
+            "y": 157.5
+          },
+          {
+            "x": 25.0,
+            "y": 80.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "R4"
+        },
+        "path": [
+          {
+            "x": 90.0,
+            "y": 400.0
+          },
+          {
+            "x": 90.0,
+            "y": 155.0
+          },
+          {
+            "x": 27.5,
+            "y": 155.0
+          },
+          {
+            "x": 27.5,
+            "y": 90.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y1"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "S1"
+        },
+        "path": [
+          {
+            "x": 92.5,
+            "y": 580.0
+          },
+          {
+            "x": 92.5,
+            "y": 152.5
+          },
+          {
+            "x": 30.0,
+            "y": 152.5
+          },
+          {
+            "x": 30.0,
+            "y": 100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y2"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "S2"
+        },
+        "path": [
+          {
+            "x": 95.0,
+            "y": 590.0
+          },
+          {
+            "x": 95.0,
+            "y": 150.0
+          },
+          {
+            "x": 32.5,
+            "y": 150.0
+          },
+          {
+            "x": 32.5,
+            "y": 110.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y3"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "S3"
+        },
+        "path": [
+          {
+            "x": 97.5,
+            "y": 600.0
+          },
+          {
+            "x": 97.5,
+            "y": 147.5
+          },
+          {
+            "x": 35.0,
+            "y": 147.5
+          },
+          {
+            "x": 35.0,
+            "y": 120.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y4"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "S4"
+        },
+        "path": [
+          {
+            "x": 100.0,
+            "y": 610.0
+          },
+          {
+            "x": 100.0,
+            "y": 145.0
+          },
+          {
+            "x": 37.5,
+            "y": 145.0
+          },
+          {
+            "x": 37.5,
+            "y": 130.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "F1"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "F2"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F2"
+        },
+        "path": [
+          {
+            "x": 135.0,
+            "y": 30.0
+          },
+          {
+            "x": 135.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "F3"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F3"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 40.0
+          },
+          {
+            "x": 130.0,
+            "y": 100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "F4"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F4"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 50.0
+          },
+          {
+            "x": 125.0,
+            "y": 140.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Cn+4"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Cn+4"
+        },
+        "path": [
+          {
+            "x": 120.0,
+            "y": 60.0
+          },
+          {
+            "x": 120.0,
+            "y": 180.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "OVR"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "OVR"
+        },
+        "path": [
+          {
+            "x": 115.0,
+            "y": 70.0
+          },
+          {
+            "x": 115.0,
+            "y": 220.0
+          }
+        ]
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "I5",
+      "I4",
+      "I3",
+      "I2",
+      "I1",
+      "I0",
+      "Cn",
+      "D1",
+      "D2",
+      "D3",
+      "D4",
+      "A1",
+      "A2",
+      "A3",
+      "A4",
+      "B1",
+      "B2",
+      "B3",
+      "B4",
+      "Q1",
+      "Q2",
+      "Q3",
+      "Q4"
+    ],
+    "label": "GUIAm2901ALUInclSourceDecodeInclFunctionDecode",
+    "logic_width": 1,
+    "output_count": [
+      "F1",
+      "F2",
+      "F3",
+      "F4",
+      "Cn+4",
+      "OVR"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/am2901/GUIAm2901ALUOneBit.json b/net.mograsim.logic.ui/components/am2901/GUIAm2901ALUOneBit.json
new file mode 100644 (file)
index 0000000..cd8e6c0
--- /dev/null
@@ -0,0 +1,537 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIAm2901ALUOneBit",
+  "width": 35.0,
+  "height": 90.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "R",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "S",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "F",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 75.0
+      },
+      "name": "FN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "Cin",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 65.0
+      },
+      "name": "SN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Cout",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "RN",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 85.0
+      },
+      "name": "L",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "CinE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "CoutE",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.2,
+    "subComps": [
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 20.0
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 190.0
+        },
+        "name": "GUIxor",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 290.0
+        },
+        "name": "GUIxor",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 60.0,
+          "y": 20.0
+        },
+        "name": "GUIfulladder",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 60.0,
+          "y": 55.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 135.0,
+          "y": 20.0
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 90.0,
+          "y": 70.0
+        },
+        "name": "GUImux1",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 135.0,
+          "y": 70.0
+        },
+        "name": "GUIxor",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 49.0,
+          "y": 59.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 54.0,
+          "y": 69.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "Cin"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "CoutE"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 75.0
+          },
+          {
+            "x": 5.0,
+            "y": 10.0
+          },
+          {
+            "x": 130.0,
+            "y": 10.0
+          },
+          {
+            "x": 130.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "CinE"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 125.0
+          },
+          {
+            "x": 7.5,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "R"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "RN"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "S"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "SN"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "FN"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 375.0
+          },
+          {
+            "x": 130.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "L"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "S0"
+        },
+        "path": [
+          {
+            "x": 87.5,
+            "y": 425.0
+          },
+          {
+            "x": 87.5,
+            "y": 75.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 195.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 50.0,
+            "y": 35.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 295.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "C"
+        },
+        "path": [
+          {
+            "x": 55.0,
+            "y": 45.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "I0"
+        },
+        "path": [
+          {
+            "x": 100.0,
+            "y": 25.0
+          },
+          {
+            "x": 100.0,
+            "y": 65.0
+          },
+          {
+            "x": 85.0,
+            "y": 65.0
+          },
+          {
+            "x": 85.0,
+            "y": 85.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Z"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "I1"
+        },
+        "path": [
+          {
+            "x": 82.5,
+            "y": 65.0
+          },
+          {
+            "x": 82.5,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Cout"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "F"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "Cin",
+      "CoutE",
+      "CinE",
+      "R",
+      "RN",
+      "S",
+      "SN",
+      "FN",
+      "L"
+    ],
+    "label": "GUIAm2901ALUOneBit",
+    "logic_width": 1,
+    "output_count": [
+      "Cout",
+      "F"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/am2901/GUIAm2901DestDecode.json b/net.mograsim.logic.ui/components/am2901/GUIAm2901DestDecode.json
new file mode 100644 (file)
index 0000000..51dae7b
--- /dev/null
@@ -0,0 +1,1075 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIAm2901DestDecode",
+  "width": 35.0,
+  "height": 60.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 45.0
+      },
+      "name": "LSH",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "NSH",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "RSH",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I6",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "YF",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "I7",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "RAMWE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 55.0
+      },
+      "name": "QWE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "I8",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.25,
+    "subComps": [
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 10.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 50.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 90.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 15.0,
+          "y": 150.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 10.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 50.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 90.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 130.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 80.0,
+          "y": 10.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 80.0,
+          "y": 90.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 80.0,
+          "y": 145.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 110.0,
+          "y": 105.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 115.0,
+          "y": 210.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 19.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 14.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 24.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 59.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 64.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 9.0,
+          "y": 104.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 154.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 59.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 44.0,
+          "y": 19.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 44.0,
+          "y": 54.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 39.0,
+          "y": 134.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 74.0,
+          "y": 19.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 74.0,
+          "y": 99.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 74.0,
+          "y": 104.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 74.0,
+          "y": 159.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 109.0,
+          "y": 214.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I8"
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I7"
+        },
+        "pin2": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 55.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I6"
+        },
+        "pin2": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 165.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 5.0
+          },
+          {
+            "x": 40.0,
+            "y": 5.0
+          },
+          {
+            "x": 40.0,
+            "y": 15.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "NSH"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 5.0
+          },
+          {
+            "x": 135.0,
+            "y": 5.0
+          },
+          {
+            "x": 135.0,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 45.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 10.0,
+            "y": 115.0
+          },
+          {
+            "x": 45.0,
+            "y": 115.0
+          },
+          {
+            "x": 45.0,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 40.0,
+            "y": 145.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 15.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "RAMWE"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 60.0
+          },
+          {
+            "x": 125.0,
+            "y": 100.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "LSH"
+        },
+        "path": [
+          {
+            "x": 125.0,
+            "y": 140.0
+          },
+          {
+            "x": 125.0,
+            "y": 180.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 150.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "RSH"
+        },
+        "path": [
+          {
+            "x": 130.0,
+            "y": 20.0
+          },
+          {
+            "x": 130.0,
+            "y": 60.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 75.0,
+            "y": 170.0
+          },
+          {
+            "x": 105.0,
+            "y": 170.0
+          },
+          {
+            "x": 105.0,
+            "y": 120.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 110.0,
+            "y": 155.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 110.0,
+            "y": 225.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "YF"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "QWE"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "I8",
+      "I7",
+      "I6"
+    ],
+    "label": "GUIAm2901DestDecode",
+    "logic_width": 1,
+    "output_count": [
+      "NSH",
+      "RSH",
+      "RAMWE",
+      "YF",
+      "LSH",
+      "QWE"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/am2901/GUIAm2901QReg.json b/net.mograsim.logic.ui/components/am2901/GUIAm2901QReg.json
new file mode 100644 (file)
index 0000000..2743868
--- /dev/null
@@ -0,0 +1,423 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIAm2901QReg",
+  "width": 35.0,
+  "height": 60.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 0.0,
+        "y": 55.0
+      },
+      "name": "D4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "Q1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "Q2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "Q3",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "C",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "Q4",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "D1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "WE",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 35.0
+      },
+      "name": "D2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 45.0
+      },
+      "name": "D3",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.4,
+    "subComps": [
+      {
+        "pos": {
+          "x": 5.0,
+          "y": 15.0
+        },
+        "name": "GUIand",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 7.5
+        },
+        "name": "GUIdff",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 32.5
+        },
+        "name": "GUIdff",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 57.5
+        },
+        "name": "GUIdff",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 50.0,
+          "y": 82.5
+        },
+        "name": "GUIdff",
+        "params": {}
+      },
+      {
+        "pos": {
+          "x": 41.5,
+          "y": 19.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 41.5,
+          "y": 36.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 41.5,
+          "y": 61.5
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "C"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "WE"
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "C"
+        },
+        "path": [
+          {
+            "x": 42.5,
+            "y": 12.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "C"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "C"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "C"
+        },
+        "path": [
+          {
+            "x": 42.5,
+            "y": 87.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D1"
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "D"
+        },
+        "path": [
+          {
+            "x": 17.5,
+            "y": 62.5
+          },
+          {
+            "x": 17.5,
+            "y": 42.5
+          },
+          {
+            "x": 45.0,
+            "y": 42.5
+          },
+          {
+            "x": 45.0,
+            "y": 22.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D2"
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "D"
+        },
+        "path": [
+          {
+            "x": 22.5,
+            "y": 87.5
+          },
+          {
+            "x": 22.5,
+            "y": 47.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D3"
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "D"
+        },
+        "path": [
+          {
+            "x": 27.5,
+            "y": 112.5
+          },
+          {
+            "x": 27.5,
+            "y": 72.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "D4"
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "D"
+        },
+        "path": [
+          {
+            "x": 32.5,
+            "y": 137.5
+          },
+          {
+            "x": 32.5,
+            "y": 97.5
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q1"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q2"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q3"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Q"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "Q4"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "C",
+      "WE",
+      "D1",
+      "D2",
+      "D3",
+      "D4"
+    ],
+    "label": "GUIAm2901QReg",
+    "logic_width": 1,
+    "output_count": [
+      "Q1",
+      "Q2",
+      "Q3",
+      "Q4"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/am2901/GUIAm2901SourceDecode.json b/net.mograsim.logic.ui/components/am2901/GUIAm2901SourceDecode.json
new file mode 100644 (file)
index 0000000..6bc92ac
--- /dev/null
@@ -0,0 +1,1117 @@
+mograsim version: 0.1.1
+{
+  "type": "SimpleRectangularSubmodelComponent",
+  "name": "GUIAm2901SourceDecode",
+  "width": 35.0,
+  "height": 50.0,
+  "interfacePins": [
+    {
+      "location": {
+        "x": 35.0,
+        "y": 45.0
+      },
+      "name": "RD",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 25.0
+      },
+      "name": "I0",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 15.0
+      },
+      "name": "I1",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 0.0,
+        "y": 5.0
+      },
+      "name": "I2",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 5.0
+      },
+      "name": "SQ",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 35.0
+      },
+      "name": "SA",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 15.0
+      },
+      "name": "RA",
+      "logicWidth": 1
+    },
+    {
+      "location": {
+        "x": 35.0,
+        "y": 25.0
+      },
+      "name": "SB",
+      "logicWidth": 1
+    }
+  ],
+  "composition": {
+    "innerScale": 0.25,
+    "subComps": [
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 10.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 50.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 10.0,
+          "y": 90.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 10.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 50.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 90.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 130.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 40.0,
+          "y": 170.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 70.0,
+          "y": 10.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 70.0,
+          "y": 50.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 70.0,
+          "y": 90.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 70.0,
+          "y": 130.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 70.0,
+          "y": 170.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 100.0,
+          "y": 10.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 100.0,
+          "y": 170.0
+        },
+        "name": "GUINandGate",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 19.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 19.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 4.0,
+          "y": 144.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 59.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 99.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 6.5,
+          "y": 104.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 31.5,
+          "y": 54.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 59.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 64.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 34.0,
+          "y": 134.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 36.5,
+          "y": 99.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 64.0,
+          "y": 59.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 64.0,
+          "y": 99.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 64.0,
+          "y": 139.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 94.0,
+          "y": 19.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      },
+      {
+        "pos": {
+          "x": 94.0,
+          "y": 179.0
+        },
+        "name": "WireCrossPoint",
+        "params": {
+          "logicWidth": 1
+        }
+      }
+    ],
+    "innerWires": [
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I2"
+        },
+        "pin2": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 5.0
+          },
+          {
+            "x": 35.0,
+            "y": 5.0
+          },
+          {
+            "x": 35.0,
+            "y": 15.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 15.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 17,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 1,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 16,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 18,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 5.0,
+            "y": 195.0
+          },
+          {
+            "x": 65.0,
+            "y": 195.0
+          },
+          {
+            "x": 65.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I1"
+        },
+        "pin2": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 55.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 19,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 2,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 0,
+          "pinName": "I0"
+        },
+        "pin2": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 20,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 3,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 21,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 7.5,
+            "y": 112.5
+          },
+          {
+            "x": 32.5,
+            "y": 112.5
+          },
+          {
+            "x": 32.5,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 1,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "path": [
+          {
+            "x": 32.5,
+            "y": 20.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 22,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 6,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 32.5,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 2,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 4,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 23,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 5,
+          "pinName": "B"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 24,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 7,
+          "pinName": "A"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 25,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 35.0,
+            "y": 175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 3,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 37.5,
+            "y": 35.0
+          },
+          {
+            "x": 65.0,
+            "y": 35.0
+          },
+          {
+            "x": 65.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 26,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 8,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 37.5,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 4,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 9,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 5,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 55.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 27,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 10,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 65.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 6,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 95.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 28,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 11,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 105.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 7,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 135.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 29,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 12,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 65.0,
+            "y": 145.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 8,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 13,
+          "pinName": "A"
+        }
+      },
+      {
+        "pin1": {
+          "compId": 9,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 95.0,
+            "y": 15.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 30,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 14,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 95.0,
+            "y": 25.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 10,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "RA"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 11,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "SB"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 12,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "SA"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 13,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "A"
+        },
+        "path": [
+          {
+            "x": 95.0,
+            "y": 175.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 31,
+          "pinName": ""
+        },
+        "pin2": {
+          "compId": 15,
+          "pinName": "B"
+        },
+        "path": [
+          {
+            "x": 95.0,
+            "y": 185.0
+          }
+        ]
+      },
+      {
+        "pin1": {
+          "compId": 14,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "SQ"
+        },
+        "path": []
+      },
+      {
+        "pin1": {
+          "compId": 15,
+          "pinName": "Y"
+        },
+        "pin2": {
+          "compId": 0,
+          "pinName": "RD"
+        },
+        "path": []
+      }
+    ]
+  },
+  "specialized": {
+    "input_count": [
+      "I2",
+      "I1",
+      "I0"
+    ],
+    "label": "Am2901SourceDecode",
+    "logic_width": 1,
+    "output_count": [
+      "SQ",
+      "RA",
+      "SB",
+      "SA",
+      "RD"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/net.mograsim.logic.ui/components/mapping.json b/net.mograsim.logic.ui/components/mapping.json
new file mode 100644 (file)
index 0000000..02f3936
--- /dev/null
@@ -0,0 +1,36 @@
+mograsim version: 0.1.1
+{
+  "GUIAm2901": "file:components/am2901/GUIAm2901.json",
+  "GUIAm2901ALUFuncDecode": "file:components/am2901/GUIAm2901ALUFuncDecode.json",
+  "GUIAm2901ALUInclDecode": "file:components/am2901/GUIAm2901ALUInclDecode.json",
+  "GUIAm2901ALUInclSourceDecodeInclFunctionDecode": "file:components/am2901/GUIAm2901ALUInclSourceDecodeInclFunctionDecode.json",
+  "GUIAm2901ALUOneBit": "file:components/am2901/GUIAm2901ALUOneBit.json",
+  "GUIAm2901DestDecode": "file:components/am2901/GUIAm2901DestDecode.json",
+  "GUIAm2901QReg": "file:components/am2901/GUIAm2901QReg.json",
+  "GUIAm2901SourceDecode": "file:components/am2901/GUIAm2901SourceDecode.json",
+  "GUIAndGate": "class:net.mograsim.logic.ui.model.components.GUIAndGate",
+  "GUINandGate": "class:net.mograsim.logic.ui.model.components.GUINandGate",
+  "GUIOrGate": "class:net.mograsim.logic.ui.model.components.GUIOrGate",
+  "GUI_rsLatch": "file:components/GUI_rsLatch.json",
+  "GUIand": "file:components/GUIand.json",
+  "GUIand41": "file:components/GUIand41.json",
+  "GUIandor414": "file:components/GUIandor414.json",
+  "GUIdemux2": "file:components/GUIdemux2.json",
+  "GUIdff": "file:components/GUIdff.json",
+  "GUIdlatch": "file:components/GUIdlatch.json",
+  "GUIdlatch4": "file:components/GUIdlatch4.json",
+  "GUIfulladder": "file:components/GUIfulladder.json",
+  "GUIhalfadder": "file:components/GUIhalfadder.json",
+  "GUImux1": "file:components/GUImux1.json",
+  "GUImux1_4": "file:components/GUImux1_4.json",
+  "GUInand3": "file:components/GUInand3.json",
+  "GUInot4": "file:components/GUInot4.json",
+  "GUIor4": "file:components/GUIor4.json",
+  "GUIor_4": "file:components/GUIor_4.json",
+  "GUIram2": "file:components/GUIram2.json",
+  "GUIram4": "file:components/GUIram4.json",
+  "GUIsel2_4": "file:components/GUIsel2_4.json",
+  "GUIsel3_4": "file:components/GUIsel3_4.json",
+  "GUIxor": "file:components/GUIxor.json",
+  "WireCrossPoint": "class:net.mograsim.logic.ui.model.wires.WireCrossPoint"
+}
\ No newline at end of file
index a586616..6e566c4 100644 (file)
@@ -43,7 +43,7 @@ public abstract class GUIComponent
 
        private final Runnable redrawListenerForSubcomponents;
        // Defines how the GUIComponent is referenced in SubmodelComponentParams
-       protected Supplier<String> identifierDelegate = () -> "class:".concat(getClass().getCanonicalName());
+       protected Supplier<String> identifierDelegate = () -> getClass().getSimpleName();
 
        // creation and destruction
 
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponentCreator.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIComponentCreator.java
new file mode 100644 (file)
index 0000000..3a23428
--- /dev/null
@@ -0,0 +1,76 @@
+package net.mograsim.logic.ui.model.components;
+
+import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Map;
+
+import net.mograsim.logic.ui.model.ViewModelModifiable;
+import net.mograsim.logic.ui.model.wires.WireCrossPoint;
+import net.mograsim.logic.ui.util.JsonHandler;
+
+public class GUIComponentCreator
+{
+       private final static Map<String, String> componentMapping;
+       private final static String componentMappingPath = "components/mapping.json"; // TODO: manage this somewhere else
+
+       static
+       {
+               Map<String, String> tmp;
+               try
+               {
+                       tmp = JsonHandler.readJson(componentMappingPath, Map.class);
+               }
+               catch (IOException e)
+               {
+                       System.err.println("Failed to initialize component mapping; Components cannot be created from file.");
+                       e.printStackTrace();
+                       tmp = new HashMap<>();
+               }
+               componentMapping = tmp;
+       }
+
+       public static GUIComponent create(ViewModelModifiable model, String name, Map<String, Object> params)
+       {
+               try
+               {
+                       String path = componentMapping.get(name);
+                       if (path.startsWith("class:"))
+                       {
+                               path = path.substring(6);
+                               return createComponentFromClass(model, path, params);
+                       } else if (path.startsWith("file:"))
+                       {
+                               path = path.substring(5);
+                               return GUICustomComponentCreator.create(model, path);
+                       } else
+                               throw new IllegalArgumentException("Invalid submodel type! Type was neither prefixed by 'class:' nor by 'file:'");
+               }
+               catch (NullPointerException | InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException
+                               | SecurityException | ClassNotFoundException | IllegalArgumentException e)
+               {
+                       System.err.println("Failed to create requested component!");
+                       e.printStackTrace();
+                       return new SimpleRectangularSubmodelComponent(model, 1, "ERROR");
+               }
+       }
+
+       private static GUIComponent createComponentFromClass(ViewModelModifiable model, String classname, Map<String, Object> params)
+                       throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, SecurityException,
+                       ClassNotFoundException
+       {
+               Class<?> c = Class.forName(classname);
+               Object comp;
+               if (SimpleRectangularGUIGate.class.isAssignableFrom(c) || WireCrossPoint.class.equals(c))
+               {
+                       Constructor<?> constructor = c.getConstructor(ViewModelModifiable.class, int.class);
+                       comp = constructor.newInstance(model, ((Number) params.get(SimpleRectangularGUIGate.kLogicWidth)).intValue());
+               } else
+               {
+                       Constructor<?> constructor = c.getConstructor(ViewModelModifiable.class);
+                       comp = constructor.newInstance(model);
+               }
+               return (GUIComponent) comp;
+       }
+}
index 0e23feb..c153956 100644 (file)
@@ -3,6 +3,8 @@ package net.mograsim.logic.ui.model.components;
 import java.io.IOException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Map;
 
 import net.mograsim.logic.ui.model.ViewModelModifiable;
@@ -34,7 +36,7 @@ public final class GUICustomComponentCreator
                try
                {
                        SubmodelComponentParams params = SubmodelComponentParams.readJson(path);
-                       SubmodelComponent ret = create(model, params, path);
+                       SubmodelComponent ret = create(model, params);
                        return ret;
                }
                catch (IOException e)
@@ -50,11 +52,10 @@ public final class GUICustomComponentCreator
         * e.g. a {@link SimpleRectangularSubmodelComponent}, depending on what the {@link SubmodelComponentParams} describe.
         * 
         * @param params The parameters describing the {@link SubmodelComponent}
-        * @param path   This value is used when the new {@link SubmodelComponent} is an inner component to a different SubmodelComponent, which
-        *               is being saved to a file; Then, the new {@link SubmodelComponent} is referenced by its given path within the file.
+        * 
         * @return A new SubmodelComponent, as described by the {@link SubmodelComponentParams}
         */
-       public static SubmodelComponent create(ViewModelModifiable model, SubmodelComponentParams params, String path)
+       public static SubmodelComponent create(ViewModelModifiable model, SubmodelComponentParams params)
        {
                SubmodelComponent comp = null;
                if (rectC.equals(params.type))
@@ -66,12 +67,13 @@ public final class GUICustomComponentCreator
                {
                        comp = createSubmodelComponent(model, params);
                }
-               comp.identifierDelegate = () -> "file:".concat(path);
+               comp.identifierDelegate = () -> params.name;
                initInnerComponents(comp, params.composition);
                return comp;
        }
 
        // May return null
+       @SuppressWarnings("unchecked")
        private static SimpleRectangularSubmodelComponent createRectComponent(ViewModelModifiable model, SubmodelComponentParams params)
        {
                try
@@ -81,19 +83,12 @@ public final class GUICustomComponentCreator
                                        ((Number) m.get(SimpleRectangularSubmodelComponent.kLogicWidth)).intValue(),
                                        (String) m.get(SimpleRectangularSubmodelComponent.kLabel));
                        rect.setSubmodelScale(params.composition.innerScale);
-                       // rect.setSize(params.width, params.height);
 
-                       int inputCount = ((Number) m.get(SimpleRectangularSubmodelComponent.kInCount)).intValue();
-                       String[] inputNames = new String[inputCount];
-                       for (int i = 0; i < inputCount; i++)
-                               inputNames[i] = params.interfacePins[i].name;
-                       rect.setInputPins(inputNames);
+                       Object[] names = ((ArrayList<Object>) m.get(SimpleRectangularSubmodelComponent.kInCount)).toArray();
+                       rect.setInputPins(Arrays.copyOf(names, names.length, String[].class));
 
-                       int outputCount = ((Number) m.get(SimpleRectangularSubmodelComponent.kOutCount)).intValue();
-                       String[] outputPins = new String[outputCount];
-                       for (int i = 0; i < outputCount; i++)
-                               outputPins[i] = params.interfacePins[inputCount + i].name;
-                       rect.setOutputPins(outputPins);
+                       names = ((ArrayList<Object>) m.get(SimpleRectangularSubmodelComponent.kOutCount)).toArray();
+                       rect.setOutputPins(Arrays.copyOf(names, names.length, String[].class));
 
                        return rect;
                }
@@ -122,59 +117,21 @@ public final class GUICustomComponentCreator
        @SuppressWarnings("unused")
        private static void initInnerComponents(SubmodelComponent comp, ComponentCompositionParams params)
        {
-               try
+               GUIComponent[] components = new GUIComponent[params.subComps.length];
+               for (int i = 0; i < components.length; i++)
                {
-                       GUIComponent[] components = new GUIComponent[params.subComps.length];
-                       for (int i = 0; i < components.length; i++)
-                       {
-                               InnerComponentParams cParams = params.subComps[i];
-                               String path = cParams.type;
-                               if (path.startsWith("class:"))
-                               {
-                                       path = path.substring(6);
-                                       components[i] = createInnerComponentFromClass(comp, path, cParams.params);
-                                       components[i].moveTo(cParams.pos.x, cParams.pos.y);
-                               } else if (path.startsWith("file:"))
-                               {
-                                       path = path.substring(5);
-                                       components[i] = create(comp.submodelModifiable, path);
-                                       components[i].moveTo(cParams.pos.x, cParams.pos.y);
-                               } else
-                                       throw new IllegalArgumentException("Invalid submodel type! Type was neither prefixed by 'class:' nor by 'file:'");
-                       }
-
-                       for (int i = 0; i < params.innerWires.length; i++)
-                       {
-                               InnerWireParams innerWire = params.innerWires[i];
-                               new GUIWire(comp.submodelModifiable,
-                                               comp.submodelModifiable.getComponents().get(innerWire.pin1.compId).getPin(innerWire.pin1.pinName),
-                                               comp.submodelModifiable.getComponents().get(innerWire.pin2.compId).getPin(innerWire.pin2.pinName), innerWire.path);
-                       }
+                       InnerComponentParams cParams = params.subComps[i];
+                       String path = cParams.name;
+                       components[i] = GUIComponentCreator.create(comp.submodelModifiable, cParams.name, cParams.params);
+                       components[i].moveTo(cParams.pos.x, cParams.pos.y);
                }
-               catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException | SecurityException
-                               | ClassNotFoundException | IllegalArgumentException e)
-               {
-                       System.err.println("Failed to initialize custom component!");
-                       e.printStackTrace();
-               }
-       }
 
-       private static GUIComponent createInnerComponentFromClass(SubmodelComponent parent, String classname, Map<String, Object> params)
-                       throws InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, SecurityException,
-                       ClassNotFoundException
-       {
-               Class<?> c = Class.forName(classname);
-               Object comp;
-               if (SimpleRectangularGUIGate.class.isAssignableFrom(c) || WireCrossPoint.class.equals(c))
-               {
-                       Constructor<?> constructor = c.getConstructor(ViewModelModifiable.class, int.class);
-                       comp = constructor.newInstance(parent.submodelModifiable,
-                                       ((Number) params.get(SimpleRectangularGUIGate.kLogicWidth)).intValue());
-               } else
+               for (int i = 0; i < params.innerWires.length; i++)
                {
-                       Constructor<?> constructor = c.getConstructor(ViewModelModifiable.class);
-                       comp = constructor.newInstance(parent.submodelModifiable);
+                       InnerWireParams innerWire = params.innerWires[i];
+                       new GUIWire(comp.submodelModifiable,
+                                       comp.submodelModifiable.getComponents().get(innerWire.pin1.compId).getPin(innerWire.pin1.pinName),
+                                       comp.submodelModifiable.getComponents().get(innerWire.pin2.compId).getPin(innerWire.pin2.pinName), innerWire.path);
                }
-               return (GUIComponent) comp;
        }
 }
index 17fa8ab..59d800a 100644 (file)
@@ -128,8 +128,8 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
                ret.type = SimpleRectangularSubmodelComponent.class.getSimpleName();
                Map<String, Object> m = new TreeMap<>();
                m.put(kLabel, label);
-               m.put(kInCount, inputPinNames.size());
-               m.put(kOutCount, outputPinNames.size());
+               m.put(kInCount, inputPinNames.toArray());
+               m.put(kOutCount, outputPinNames.toArray());
                m.put(kLogicWidth, logicWidth);
                ret.specialized = m;
                return ret;
index 08e7d1a..6f34cd2 100644 (file)
@@ -331,6 +331,7 @@ public abstract class SubmodelComponent extends GUIComponent
        public SubmodelComponentParams calculateParams()
        {
                SubmodelComponentParams params = new SubmodelComponentParams();
+               params.name = getIdentifier();
                params.type = SubmodelComponent.class.getSimpleName();
                params.composition = calculateCompositionParams();
 
@@ -368,8 +369,8 @@ public abstract class SubmodelComponent extends GUIComponent
                        InnerComponentParams inner = new InnerComponentParams();
                        comps[i] = inner;
                        inner.params = component.getInstantiationParameters();
-                       inner.pos = new Point(getPosX(), getPosY());
-                       inner.type = component.getIdentifier();
+                       inner.pos = new Point(component.getPosX(), component.getPosY());
+                       inner.name = component.getIdentifier();
                        i++;
                }
                params.subComps = comps;
index 3eb0629..1276d13 100644 (file)
@@ -11,7 +11,7 @@ import net.mograsim.logic.ui.util.JsonHandler;
  */
 public class SubmodelComponentParams
 {
-       String type;
+       String type, name;
        double width, height;
        InterfacePinParams[] interfacePins;
        ComponentCompositionParams composition;
@@ -45,7 +45,7 @@ public class SubmodelComponentParams
                public static class InnerComponentParams
                {
                        Point pos;
-                       String type;
+                       String name;
                        Map<String, Object> params;
                }
        }