123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548 |
- Draw.loadPlugin(function(ui) {
- // For auto-updating port orientation
- // Note: this is only the 'shape', not the full style
- const encodedPortShapes = {
- in: {
- l: `stencil(pZNdD4IgFIZ/DbcNYa3rZvU/yE7JRHBAX/++Y0c3zXC2btzO+4wHfFEm81CqBpjgJZM7JoRc4wPHO42C06hCA0Wk7Ka8VkcDREL0roK7PsXOoG0JXseWyj3jW9Y6OJN54axFiXY2jMiAo0xpi2v5g2Td9s9uWnWna3CHGiJ4yjNKmTgsFmf/iGWOSep1ZH5URXXx7mpP01VJdnYevoAeN6rtdwJ6XLsbJFuba6cXGG0Hgg9Dtun7+UUydshFhsK4ADNXiXmiCWxQG0NfY+rKJh2/U/oD3sEL)`,
- r: `stencil(pZNdD4IgFIZ/DbcNYa3rZvU/yE7JQnBAVv++o0eXH9ls3bid9xkP8qJMpiFXJTDBcyZ3TAi5xgeOdxoFp1GFErJIWaW8VkcDREL07gp3fYqtQdscvI41lXvGt6x2cCbTzFmLEu1sGJAeR5nSFtfyB8na7Z/ttGrfrsQdCojgKU8oZeKwWJz8I5YpJnPHkelRZdeLdzd7mq6aZWfn4QPocKnqfiegw4Wr4H24cW3f6ukMRtueYShINl0/vzhGErlIkRkX4MtdYj5TBVaojaHPce7OJiU3Kf0CTfAC)`,
- t: `stencil(nZPRDoIgGIWfhtuGsNZ1s3oP0r9kIjggrbfv1183S23VDds5Z3zAAZhMQ6FqYIIXTB6YEILjgLIlKbckVaghi+Q1ymt1NkBJiN6V0Oo8DgRtC/A6dqk8Mr5nHZIzmWbOWoRoZ8NLMskRprTFufxOML4ZNvAYNKkaV6gggic3IZeJ09/g5BewTNFZO45Mzyorr97dbD6ftZpdnIeFYIxr1fU7C8a4cg1MDrfU2XI7I8BoOwHIxdZ/ISS7t4K/g2TGBfhwleivNIENamPoNa5d2azj3qUf0BtP)`,
- b: `stencil(nZNRD4IgFIV/Da8NYa3nZvU/EG/JQnBAWv++q1c3m9pWL27nnPHJPQCTeaxUA0zwiskTE0Jw/KDsSMo9SRUb0Im8VgWjCguUxBT8HTpTppFgXAXBpD6VZ8aPrEdyJnPtnUOI8S5+JLMcYco4XMufBOO7cQOvUZNq8A81JAjkZuQycfkbnP0Cljk6W+PIvFD6fgv+4crlqs3s6gOsBFPcqL7fRTDFtW9hNtzHaJNcr2ciWONmhOywXvwvDLn/Yxva+ghfzhL9jSqwQmMtXcetM1uUPLj0BAbjDQ==)`,
- }
- };
- encodedPortShapes.out = {
- r: encodedPortShapes.in.l,
- l: encodedPortShapes.in.r,
- t: encodedPortShapes.in.b,
- b: encodedPortShapes.in.t,
- }
- // Styles for our different edge types
- const edgeStyles = {
- ctrl_flow: parseStyle("edgeStyle=0;endArrow=classic;html=1;strokeWidth=2;fontSize=14;strokeColor=#004C99;"),
- data_flow: parseStyle("edgeStyle=0;endArrow=open;html=1;strokeWidth=1;fontSize=14;fontColor=#000000;fillColor=#d5e8d4;strokeColor=#6D9656;endFill=0;"),
- typed_by: parseStyle("edgeStyle=0;endArrow=blockThin;html=1;strokeWidth=1;fontSize=14;fontColor=#000000;dashed=1;endFill=1;endSize=6;strokeColor=#999999;"),
- parent_version: parseStyle("edgeStyle=0;endArrow=classic;html=1;fontSize=11;fontColor=#000000;fillColor=#fff2cc;strokeColor=#d6b656;rounded=0;"),
- ss_link: parseStyle("edgeStyle=0;endArrow=blockThin;html=1;fontSize=11;strokeColor=#694B2E;rounded=0;dashed=1;dashPattern=1 4;endFill=1;"),
- comment_edge: parseStyle("endArrow=none;dashed=1;html=1;"),
- };
- const model = ui.editor.graph.model;
- const TYPE_ATTR = "pmRole"; // cell attribute holding the ftgpm type
- function parseStyle(str) {
- const pairs = str.split(';').filter(s => s !== '');
- const map = new Map();
- pairs.map(pair => {
- const [key,value] = pair.split('=');
- map.set(key, value);
- });
- return map;
- }
- function unparseStyle(map) {
- let str = "";
- for (const [key, value] of map.entries()) {
- if (value === undefined) {
- str += key + ';';
- } else {
- str += key + '=' + value + ';';
- }
- }
- return str;
- }
- // copy selected keys (=array) from fromMap to toMap
- function mapAssign(toMap, fromMap, keys) {
- for (const key of keys) {
- const value = fromMap.get(key);
- if (value !== undefined) {
- toMap.set(key, value);
- }
- }
- }
- function reverseEdge(edge, sourceCell, targetCell) {
- // Reverse source and target
- ui.editor.graph.model.setTerminals(edge, targetCell, sourceCell);
- // Reverse 'waypoints'
- if (edge.geometry.points) {
- const newGeometry = edge.geometry.clone();
- newGeometry.points.reverse();
- ui.editor.graph.model.setGeometry(edge, newGeometry);
- }
- // Reverse entry and exit points
- const oldStyle = parseStyle(model.getStyle(edge));
- const newStyle = new Map(oldStyle);
- // entry becomes exit
- newStyle.set('entryX', oldStyle.get('exitX'));
- newStyle.set('entryY', oldStyle.get('exitY'));
- // exit becomes entry
- newStyle.set('exitX', oldStyle.get('entryX'));
- newStyle.set('exitY', oldStyle.get('entryY'));
- // entryD becomes exitD
- newStyle.set('entryDx', oldStyle.get('exitDx'));
- newStyle.set('entryDy', oldStyle.get('exitDy'));
- // exitD becomes entryD
- newStyle.set('exitDx', oldStyle.get('entryDx'));
- newStyle.set('exitDy', oldStyle.get('entryDy'));
- model.setStyle(edge, unparseStyle(newStyle));
- }
- function setEdgeStyle(edge, style_type) {
- // Set type attribute
- let value = model.getValue(edge);
- if (!value) {
- // Workaround: 'value' must be an XML element
- value = mxUtils.createXmlDocument().createElement('object');
- value.setAttribute('label', '');
- }
- value.setAttribute(TYPE_ATTR, style_type);
- model.setValue(edge, value);
- // Update style
-
- // Workaround: don't overwrite connection points
- const oldstyle = parseStyle(model.getStyle(edge));
- const newstyle = new Map(edgeStyles[style_type]);
- mapAssign(newstyle, oldstyle, [
- // retain these properties from oldstyle:
- "entryX", "entryY", "entryDx", "entryDy",
- "exitX", "exitY", "exitDx", "exitDy"
- ]);
- model.setStyle(edge, unparseStyle(newstyle));
- }
- function isArtifact(type) {
- return type === "artifact";
- }
- function isFormalism(type) {
- return type === "formalism";
- }
- function isTransformation(type) {
- return type === "auto_transformation" || type === "transformation" || type === "comp_transformation";
- }
- function isActivityNode(type) {
- return type === "autom_activity" || type === "activity" || type === "comp_activity";
- }
- function isControlFlowPort(type) {
- return type === "ctrl_in" || type === "ctrl_out";
- }
- function isDataPort(type) {
- return type === "data_in" || type === "data_out";
- }
- function isInport(type) {
- return type === "data_in" || type === "ctrl_in";
- }
- function isOutport(type) {
- return type === "data_out" || type === "ctrl_out";
- }
- function isPort(type) {
- return ["data_in", "data_out", "ctrl_in", "ctrl_out"].includes(type);
- }
- function isControlFlowNode(type) {
- return isControlFlowPort(type) || type === "initial" || type === "final" || type === "fork_join";
- }
- function isDataFlowNode(type) {
- return isDataPort(type) || isArtifact(type) || isFormalism(type);
- }
- function isTraceEvent(type) {
- return type === "traceevent_begin" || type === "traceevent_end";
- }
- function isArtifactVersion(type) {
- return type === "artifact_version";
- }
- function getFlowType(type) {
- if (isDataFlowNode(type)) {
- return "data";
- }
- if (isControlFlowNode(type)) {
- return "ctrl";
- }
- // throw new Error("unknown flow type");
- console.log("unknown flow type");
- }
- // [ condition, flow-type ]
- const edgeTypeRules = [
- // PM control flow
- [ (src, tgt) => isControlFlowNode(src) && isControlFlowNode(tgt), "ctrl_flow" ],
- // PM data flow
- [ (src, tgt) => isDataFlowNode(src) && isDataFlowNode(tgt), "data_flow" ],
- // FTG data flow
- [ (src, tgt) => isTransformation(src) && isFormalism(tgt), "data_flow" ],
- [ (src, tgt) => isFormalism(src) && isTransformation(tgt), "data_flow" ],
- [ (src,tgt) => isActivityNode(src) && isTransformation(tgt), "typed_by" ],
- [ (src,tgt) => isArtifact(src) && isFormalism(tgt), "typed_by" ],
- [ (src,tgt) => isTraceEvent(src) && isArtifactVersion(tgt), "data_flow"],
- [ (src,tgt) => isArtifactVersion(src) && isTraceEvent(tgt), "data_flow"],
- [ (src,tgt) => isTraceEvent(src) && isTraceEvent(tgt), "ctrl_flow"],
- [ (src,tgt) => src === "traceevent_begin" && tgt === "ctrl_in", "typed_by"],
- [ (src,tgt) => src === "traceevent_end" && tgt === "ctrl_out", "typed_by"],
- [ (src,tgt) => isArtifactVersion(src) && isArtifact(tgt), "typed_by"],
- [ (src,tgt) => isArtifactVersion(src) && isArtifactVersion(tgt), "parent_version"],
- [ (src,tgt) => isArtifactVersion(src) && tgt === "storage", "ss_link"],
- [ (src,tgt) => isArtifactVersion(src) && tgt === "real_object", "ss_link"],
- [ (src,tgt) => src === "traceevent_begin" && tgt === "service", "ss_link"],
- [ (src,tgt) => src === "comment" || tgt === "comment", "comment_edge"],
- ];
- // Very specific: This function is used to determine the correct direction of an arrow automatically
- // An activity or artifact at the highest level (= a direct child of a layer) has level 0
- // Every time something is nested in an activity, the level increases by 1.
- // Ports are special: they can only be a child of an activity, but they have the same level as the activity.
- function getNestedLevel(cell) {
- function getLvlRecursive(cell) {
- if (!cell.parent) {
- throw Error("getNestedLevel called with parentless cell (i.e. cell is root, or is deleted)");
- }
- if (model.isLayer(cell)) {
- return 0;
- // throw Error("getNestedLevel called with layer cell");
- }
- if (cell.parent === model.isLayer(cell.parent)) {
- return 0;
- }
- else if (isActivityNode(cell.parent.getAttribute(TYPE_ATTR))) {
- return getLvlRecursive(cell.parent) + 1;
- }
- else {
- return getLvlRecursive(cell.parent);
- }
- }
- const baseLevel = getLvlRecursive(cell);
- if (isPort(cell.getAttribute(TYPE_ATTR))) {
- return baseLevel - 1;
- } else {
- return baseLevel;
- }
- }
- function isDirectionless(type) {
- return isArtifact(type) || type === "fork_join";
- }
- ui.editor.graph.addListener(mxEvent.CELL_CONNECTED, (_, eventObj) => {
- // Happens whenever an edge is (dis)connected.
- const edge = eventObj.properties.edge;
- const sourceCell = edge.source;
- const targetCell = edge.getTerminal();
- // This will change the edge style WITHIN the transaction of the edit operation.
- // The terminal-change and style-change will be one edit operation from point of view of undo manager.
- const sourceType = sourceCell ? sourceCell.getAttribute(TYPE_ATTR) : null;
- const targetType = targetCell ? targetCell.getAttribute(TYPE_ATTR) : null;
- // Update style if necessary
- for (const [cond, linkType] of edgeTypeRules) {
- if (cond(sourceType, targetType)) {
- setEdgeStyle(edge, linkType);
- }
- }
- if (sourceCell && targetCell) {
- // Auto-correct edge direction in certain cases.
- // We call 'reverseEdge' if we have an illegal situation, but reversing the arrow gives a legal situation.
- const sourceLvl = getNestedLevel(sourceCell);
- const targetLvl = getNestedLevel(targetCell);
- // We have 2 flow types: ctrl and data. They remain segregated.
- if (getFlowType(sourceType) === getFlowType(targetType)) {
- if (sourceLvl === targetLvl) {
- // Equally nested ...
- if (isInport(sourceType) && isOutport(targetType)
- || isInport(sourceType) && isDirectionless(targetType)
- || isDirectionless(sourceType) && isOutport(targetType)) {
- reverseEdge(edge, sourceCell, targetCell);
- }
- }
- else if (sourceLvl === targetLvl + 1) {
- // Source of arrow is nested deeper ...
- if (isInport(sourceType) && isInport(targetType)
- || isDirectionless(sourceType) && isInport(targetType)) {
- // Should flow from shallowly nested input port to deeply nested input port:
- reverseEdge(edge, sourceCell, targetCell);
- }
- }
- else if (sourceLvl + 1 === targetLvl) {
- // Target of arrow is nested deeper ...
- if (isOutport(sourceType) && isOutport(targetType)
- || isOutport(sourceType) && isDirectionless(targetType)) {
- // Should flow from deeply nested output port to shallowly nested output port
- reverseEdge(edge, sourceCell, targetCell);
- }
- }
- }
- }
- });
- function outsideOffset(wOrH) {
- return 0;
- }
- function centerOffset(wOrH) {
- return -wOrH / 2;
- }
- function insideOffset(wOrH) {
- return -wOrH;
- }
- // Change this to position ports outside, inside or centered at the edge.
- const borderOffset = centerOffset;
- function rightOrBottomBorder(wOrH, parentWorH) {
- return parentWorH + borderOffset(wOrH);
- }
- function leftOrTopBorder(wOrH) {
- return -wOrH - borderOffset(wOrH);
- }
- function cellCenter(cellGeometry) {
- // Coordinates are relative to topleft corner of parent shape
- const {x,y, width, height} = cellGeometry;
- // Center of cell
- return {
- x: x + width/2,
- y: y + height/2,
- };
- }
- // Deprecated snapping algorithm
- function closestBorder(cellGeometry, parentGeometry) {
- // Cell center is relative to parent: (0,0) is topleft
- const c = cellCenter(cellGeometry);
- // We draw two imaginary diagonals through the parent shape, to determine whether the child shape is more close to the top, right, bottom or left side.
- //
- // 2
- // /
- // +----+
- // |\ t/|
- // |l\/ |
- // | /\r|
- // |/b \|
- // +----+
- // \
- // 1
- const slope = parentGeometry.height / parentGeometry.width;
- const above1 = c.y < slope * c.x;
- const above2 = c.y < parentGeometry.height - slope * c.x;
- if (above1)
- if (above2)
- return 't';
- else
- return 'r';
- else
- if (above2)
- return 'l';
- else
- return 'b';
- }
- // Improved snapping algorithm
- function closestBorder2(cellGeometry, parentGeometry) {
- // Cell center is relative to parent: (0,0) is topleft
- const c = cellCenter(cellGeometry);
- const slope = 1; // fixed slope, 45 degrees
- const above1 = c.y < slope * c.x;
- const above3 = c.y < (-slope) * c.x + parentGeometry.height ;
- const above4 = c.y < slope * (c.x - parentGeometry.width) + parentGeometry.height;
- const above2 = c.y < (-slope) * (c.x - parentGeometry.width);
- if (parentGeometry.width >= parentGeometry.height) {
- // Parent's width > height
- //
- // 1 2
- // \ /
- // +------+ --> x
- // |\ t /|
- // |l\__/ |__ 5
- // | / \r|
- // |/ b \|
- // +------+
- // / \
- // 3 4
- // |
- // V
- // y
- const above5 = c.y < parentGeometry.height / 2;
- if (!above1 && above3) {
- return 'l';
- }
- if (!above2 && above4) {
- return 'r';
- }
- if (above1 && above2 && above5) {
- return 't';
- }
- if (!above3 && !above4 && !above5) {
- return 'b';
- }
- }
- else {
- // Parent's height > width
- // 1 2
- // \ /
- // +----+
- // |\ t/|
- // | \/ |
- // |l | |
- // | | |
- // | /\r|
- // |/b \|
- // +----+
- // / | \
- // 3 5 4
- const leftOf5 = c.x < parentGeometry.width / 2;
- if (above1 && above2) {
- return 't';
- }
- if (!above3 && !above4) {
- return 'b';
- }
- if (above3 && !above1 && leftOf5) {
- return 'l';
- }
- if (above4 && !above2 && !leftOf5) {
- return 'r';
- }
- }
- }
- function moveToBorder(cell, cellGeometry, parentGeometry, border) {
- const style = parseStyle(model.getStyle(cell));
- const type = cell.getAttribute(TYPE_ATTR);
- const inOrOut = isInport(type) ? "in" : "out";
- style.set('shape', encodedPortShapes[inOrOut][border]);
- model.setStyle(cell, unparseStyle(style));
- switch (border) {
- case 't':
- cellGeometry.width = 35;
- cellGeometry.height = 20;
- cellGeometry.y = leftOrTopBorder(cellGeometry.height);
- return;
- case 'r':
- cellGeometry.width = 20;
- cellGeometry.height = 35;
- cellGeometry.x = rightOrBottomBorder(cellGeometry.width, parentGeometry.width);
- return;
- case 'l':
- cellGeometry.width = 20;
- cellGeometry.height = 35;
- cellGeometry.x = leftOrTopBorder(cellGeometry.width);
- return;
- case 'b':
- cellGeometry.width = 35;
- cellGeometry.height = 20;
- cellGeometry.y = rightOrBottomBorder(cellGeometry.height, parentGeometry.height);
- return;
- }
- }
- ui.editor.graph.addListener(mxEvent.MOVE_CELLS, (_, eventObj) => {
- // High-level event: Happens when the user releases dragged shape(s)
- for (const cell of eventObj.properties.cells) {
- const type = cell.getAttribute(TYPE_ATTR);
- if (isPort(type)) {
- if (cell.parent) {
- const parentType = cell.parent.getAttribute(TYPE_ATTR);
- if (isActivityNode(parentType) || isTransformation(parentType)) {
- // Snap port to border
- const border = closestBorder2(cell.geometry, cell.parent.geometry);
- moveToBorder(cell, cell.geometry, cell.parent.geometry, border);
- }
- }
- }
- }
- });
- ui.editor.graph.addListener(mxEvent.RESIZE_CELLS, (_, eventObj) => {
- // High-level event: Happens when the user resized cell(s)
- for (let i=0; i<eventObj.properties.cells.length; i++) {
- const cell = eventObj.properties.cells[i];
- const type = cell.getAttribute(TYPE_ATTR);
- if (isActivityNode(type) || isTransformation(type)) {
- // Activity was resized...
- // In drawio, 'arcSize' of a rounded rectangle is relative to size of shape.
- // Retain apparent arc size of activity:
- const style = parseStyle(model.getStyle(cell));
- const newArcSize = 1000 / Math.sqrt(cell.geometry.width * cell.geometry.height);
- style.set("arcSize", newArcSize);
- model.setStyle(cell, unparseStyle(style));
- if (cell.children) {
- // Need this for moving contained ports:
- const prevGeometry = eventObj.properties.previous[i];
- const scaleW = cell.geometry.width / prevGeometry.width;
- const scaleH = cell.geometry.height / prevGeometry.height;
- for (const child of cell.children) {
- const childType = child.getAttribute(TYPE_ATTR);
- // Keep activity icon in place
- if (childType === "activityIcon") {
- newIconGeometry = child.geometry.clone();
- newIconGeometry.x = cell.geometry.width - 28;
- newIconGeometry.y = 4;
- model.setGeometry(child, newIconGeometry);
- }
- // Move contained ports
- else if (isPort(childType)) {
- const border = closestBorder2(child.geometry, prevGeometry);
- const newGeometry = child.geometry.clone();
- moveToBorder(child, newGeometry, cell.geometry, border);
- // Scale position
- switch (border) {
- case 't':
- newGeometry.x = child.geometry.x * scaleW;
- break;
- case 'l':
- newGeometry.y = child.geometry.y * scaleH;
- break;
- case 'b':
- newGeometry.x = child.geometry.x * scaleW;
- break;
- case 'r':
- newGeometry.y = child.geometry.y * scaleH;
- break;
- }
- ui.editor.graph.model.setGeometry(child, newGeometry);
- }
- }
- }
- }
- }
- });
- // Hardcoded primitive shape library.
- // To alter, make changes to the library in the drawio webapp, then 'save' (this downloads the library as XML), and copy+paste the contents of the XML file below:
- const encodedLib = `<mxlibrary>[{"xml":"dVPbkppAEP0aqpKHTQ2MAX3k4mXjEpWNRn0DaWFkuDgzgPr1O4DEtSr7QNF9Tp/u6sso2E4vU+YXsZuHQBU8VrDN8lx0VnqxgVJFQyRUsKNoGpKfok2+YNWWRYXPIBP/EeTBCQ5CRlA/aIo5LdlKUi+n0CEkI4L4tCP61G3cc1Uurr2Ex37RmFxAdiD0W7ifeA5/jcZjb1nfZH3bXt82cDU5J4llFqe/GirjYxIXq1Owhz/2frsi0h1b9nwxHVoiNsa/irO/OZZUT0znFa/BnZ95UnhNNicirLLKyPXcOvi5DW2maNZ2EVZRUm2XEzNQ32bvM35Y6ccV1yv992gx28iQ0C3RyXHNZWSsd+gUqFryVrnYkFSZDWQjk91+Hs2nhpfyWWnvJG7NxVn+Bu75aMrune8KtuqYCHgv/EPTci2XJ7FYpM1AVWkeCaV2TnPWzgYjNLBHI4lzwfIEeibLMym3GHBy84N2kEj6EBJxd5tcLBe++EQzOJSMkwq8RtejBTCSgoAmr9wNKTgsH5DVbbICJuDy5aGonxY8hVxq2VWGXDv2Rf2hYn2oD7FhaKqu6gjDi4q7NDUJRdzF4e7eUAwkisUz5vPOj/5lf1ymNO531bv3W+3dx5toQ5+ezAc=","w":30,"h":30,"aspect":"fixed","title":"(PM) Initial"},{"xml":"dVNRj6IwEP41JHcPe6F0ZeFRQI2onGIOlbeiFeoVim0R3F+/BfRckzMpycz3zTdDZ6YadPNmwlGZLdgBUw2ONOhyxmRv5Y2LKdUMnRw06GmGoatPM8YvWNCxeok4LuR/BCw54b1UERQlbTGvIztJHjKKe+RICkR7+J64i3quKeT1LhAZKltTSFzsCf1xjOZzT0zT0fKKLuvlCHtxpP7BXK75ppmx4Xhh2tbcWdn2buRP4xRNYESHwdgE09ovXLEKfntWM77gaVmDSil36TWez4pJIhea4ajjidQJAAvJ6g9OmT/e7tMInvIkHE1NvdF3E2GFYqwCZ4tqScXg4jd2bgxUqrPJAagmjuUHIWpK2yxYtY0Hn8HAAnOH7tdpePY2CydT4ncbxeCkjG3AotpPomgY10U8DY7Hs6VLUcHVJigUP8qOqftTg06dEYnXJdq37ajVWBWWybxtNVDmkVDqMsp41zeo6++ubStcSM7+4tfMhhxkphg1A4djQT5R0vVeVz4+EHlz2xKcSSS/0RzvKy7IBYet7o6WmJMcS9yWU+MkpcDLB+T0w79gLnHzcrPAt52YYKa0/KpCrj37Bn4BaFqmBT8+DGACU4f4DcA+TX27j/Jgv6B6hkmayWcMid5P/2V/rLIybqt4d2/LfXcfj6gLfXpjXw==","w":30,"h":30,"aspect":"fixed","title":"(PM) Final"},{"xml":"dVK7csIwEPwatRnZjgvKYBIqGihSZoR1YIGs88jila/PnSSHMBMKzdzt7r0lqqa/Lr0auhVqsKJ6F1XjEUOy+msD1opSGi2qhShLSU+UH0/YIrJyUB5c+CcAtwdoAyms2nKxRSRjSL9GCwnZoT9+HdC4RE3Jo/Kx7hhuU5DHk9PAUimq+aUzATaDapm90HiEdaHnkgWZO3RhY76ZLFg+Bo9H+DQ6dASVrDDWNmjRx+yVlK/NbEa4smbvCGtpQCByfgYfTKvsWyZ6ozX3lHNOORw6BgeaKoycs56LekEIaBPUNk7BnXloT340Z1jDmBrk/tIiuBRcn266+LOfJWAPwd9IcslTsULKlzoFdmD2XQ7MN5JqTP7+N/h+OTLy1ic333Jy738mSh++1A8=","w":100.5,"h":20,"aspect":"fixed","title":"(PM) Fork / Join"},{"xml":"dVLNToQwEH6aXk1L0Q1Hl9U9mRj34NF0YRaqhdm0o4JPb6GUhegeSGbm+xvaMpk33d6qc/2EJRgmH5jMLSKFqulyMIYlXJdM7liScP+x5PEKKkaUn5WFlv4R4PEdCvIMo45D2G4ER0nzggbCpCBr3k4GvwMUzUfmOtdRH0VQVnCYWs7kFtry3lrvIXeFUc7pwg9raoZU4UtHFj/gVZdU+4k33p6wpYP+GQwEnxk5GrRjhOQ8zbPMI2GvIfHqb4vFsnvABsj2nmLBKNJfa51yoa1m3ix9Rt0O59UHRsrXCoeftoCJtLyXqOui7oZzeZtkqRCbu3SzdiFlK6A/Lr5Y7H4ZjWcf2+lGY3t5OUG9fFi/","w":40.0035294117647,"h":40,"aspect":"fixed","title":"Control Flow"},{"xml":"dZJNb4MwDIZ/Te6BULQdN1h7mjSthx2ntHFptoBR8DbYr18+gILWIiH5431sJw4TRd3vrGzPz6jAMPHERGERKVp1X4AxLOVaMVGyNOXuZ+n2RjYJWd5KCw1dAfDwAUdyCiMPvlkZkgGpX9FAjChJ8v1k8CempuJBue7b0TBBoCrYjy5n4hEa9WCtqyFKbKFxkTPVvmXizI4sfsKbVnQeIydsaK9/PZ1ko1+gQRuqCx4+H9fGLOJqA3cqmysuMnl5n2/yOMjWQeNY8Uh+2Js3lizOuQOsgezgJBaMJP295mQX3WrWzegL6sZf9RAVGV8THX7ZI4yi5Uonrr/OkbQV0D/OGYtpL6GwqMkd1z+5l2cW6eUr/AM=","w":40,"h":40,"aspect":"fixed","title":"Data Flow"},{"xml":"dVJNT8MwDP01uafNhMQROrYTEmJIHFHamDZbWlepgZZfT5qkX2KLFMnP9vNzHDOR1f3RyrZ6RgWGiScmMotIwar7DIxhKdeKiT1LU+4uSw83oomP8lZaaOgKAfMzFOQyjMxHsb0Pekr9igaCh4YW1Ec+hMhU2yduZTsaJg6oEk4RciYeoVEP1uKPg7nB4vJW6ca5K6pH2cSZHVm8wLtWVEXPJzZ00r9jiWQXcYYGrZcQ3B/nV7KrQEWSEzpoYxYUK9zNEqsS9/64SHja2PTNwSWr9x4BayDrJsItGEn6e8uTXYDlnDdTX1A348SHkLHjW0aHX7aAmLT+2YnXX+eRtCXQP54zVt0uLv9hE4xbMMFl2wJ7vYx/","w":40,"h":40,"aspect":"fixed","title":"Typed-by"},{"xml":"dVRtc6IwEP41zNx96Ex4EY+PyptFi56tBf1yEyBCLBAuiQL99ZcotHbmOqMz++zus3mS3UXR7arzKWyKJ5KhUtFdRbcpIfxmVZ2NylLRAM4U3VE0DYi/onnfRNVrFDSQopr/h0CSE0q5yChhIg9zrsFJQyivYYWEORQYHdeMFNeDu4QpKkiZIcq+HlhtSTlmc1r+GRmjME3Cr5oZ70cKK2AjTcZRneLyR3MIM8d4zL3Hg5DuJGm4hzo9XHYC9e402C7ms1heSpuL3x6k+ntsawl/XwtotIuj51a/VPvvvDnlweFpGpBtarSbxdrQbGAW9gxEb9Ml/PX6ljpbdwUoWU43LF4THwQxQ1F/0k+RtTfXQTgxYOfheK+dnvCMgK7B2mWSay+ZxaxzVEc11O2FjwOjP4XL6iVnXnUUyrAfrZ9Rox4Wk902jrtp1WyA+hpk9R5dyAyFJuVZG5jxiiWBd06gmca+DxZ5bjn8XE/FPXa7PmOFV7ClMXPCGMcVtqPutw/C416E6TIoZGPlmxBHZ+7qp6LP2wJz9NyINonnbMVYCV/BK9lqVZjioTPSCgAEoIjhd5hcm3DD6ZkyfEFbGRi9FbnInNUwMLJKhTh0M8zHopySN2STktBrO3UADNuyPiIRznghIpo8g5zrDGVD7SMuyzueY7iqN5E8cQFc5y9EyHceTOFJSYXTUSfhkN/pvk3aBVGOum/XQL0bQB8RcQXai5R20CZH9LYpoEA4LwaWPuwDHMY9/2B+FNsQXMuNGo5+0KwbpR+wan4tQY5Hhvj9UgrjTtOn67onIxw2d4SfX4gb+/4D8g8=","w":20,"h":35,"aspect":"fixed","title":"Control Input Port"},{"xml":"dVRbc6IwFP41zOw+dCZc1PKo3CxadG0t6MtOgAixQNgkCvTXN1GwdmY7AzPnO9cvOedE0a2y9Sis82eSokLRHUW3KCH8KpWthYpC0QBOFd1WNA2IX9HcH6zqxQpqSFHF/xNA4iNKuPAoYCyL2RfjqCaUV7BEQuwTDIqLR0JOvNcXMEE5KVJE2feK5YYUgzunxd9byEBNk/A7a8a7IYblsJYi46hKcPGr3gepbTxl7tNekLfjJNhBne7PW4E6Z+Jv5rNpJI+lzcS3A4n+EVlazD9WAhrN/OA65aNq/ZvVx8zfP098skmMZj1fGZoFxrk1BeH7ZAEf394Te+MsASWLyZpFK+IBP2Io7I76MTR345UfjAzYujjaacdnPCWgrbF2HmXaa2oy8xRWYQV1a+5h3+iOwaJ8zZhbHgQz7IWrF1Sr+/lou4midlLWa6C++Wm1Q2cyRcGY8rTxx9GSxb57iuE4iTwPzLPMtPmpmohzbLddynI3ZwtjagcRjkpshe0fDwSHnTDThZ/L1so7IbbOnOVvRZ81OebopRZ9EtfZiMESupyXstmqEMVFp6QRAAhAEcMfML404YqTE2X4jDbSMGhLcpY+y35kZJYSceikmA9JOSXvyCIFoZd26gAYlmneLCFOeS4smqxBTlWK0j73ARfFXZxtOKo7knHiALjKXomgbz+MhSYhJU4GnoRDfsf7OmlnRDlqf1wE9W4APUTEEWgnXJqemxzR666AHOEs76P0fiNgP+/ZLfKWbE1wJXeqLz3U7q7wQTW/ZyCHA0P8fiuFcEfpS3VZkwH2qzvAryfiGn3/gnwC","w":20,"h":35,"aspect":"fixed","title":"Control Output Port"},{"xml":"dVRtk6IwDP41zNx98KZQRP2ovLnoqueuC/rlpkCBukC5torur78isLoztyPO5EnS5EmTVIFmcXEZqrJnGuNcgbYCTUapaKXiYuI8VzRAYgVaiqYB+Vc05xurerOCCjFciv8coOERR0J65Chsklk347CiTJSowFLsAvSKm0dMyk6dowhnNI8x418TFlua995IoD/9iZ6Y1sCvnLm49kd4hqpG5AKXEcl/VIdVbOlPqfN0kNStMFrtEWSH806iqz3ytvPZNGiK0mby24MIfgSmFoqPtYR6PU8cuxir5t9ZdUy9w/PIo9tIrzfzta6ZwMjMKfDfRws0fnuPrK29BIwuRhserKkLvIBj/3qER3+yN9beaqiji0OCvXZ8JlMKLhXRzsNUe40nfHLyS79E0Jy7xNOvx9WieE25UySSGXH99Quu1MN8uNsGwWVUVBugvnlxucdnOsUrg4m49oxgyUPPOYXIiALXBfM0nVjiVI5kHbvdNeaZk/GFPrVWAQkKYvqX3y5YJXtpZgsvaxrb3Am1ILeXPxU4qzMi8Esl2ySvs5ZjJXWZKJpWq1KUFx3TWgIgAcOcfKDw1oQWRyfGyRlvG0OvLei58Vl2A9NEKbBAdkxEH1Qw+o5NmlN2ayc0rIkxND4tPolF1vkyeipjHHexuSRKyvSVSprWoDkR0YJEnTWhpXhpiaja3VvCB7TEiej9SZ4/sLChM7K1W04hR/JeZzuZZ8wEvny7NurDwLqYypLZVbpcW+vwlzHWoa6OxwYYy5+GB6reBqm7apuhb3cPZJikWRcXdhuGugVKP2N/pttQUjY72pEbwC5Ml3vQ0+1D0CThWDyuuRQeWN9Vt83rYfcW9PD+5rSnH5+kfw==","w":20,"h":35,"aspect":"fixed","title":"Data Input Port"},{"xml":"dVRtb6MwDP41SHcfJvFWWD+2vHW0o71uHbRfTgECpAPCJWmB/folLXSddJNA8mP7cezYjqRZVecR0BTPOIWlpDmSZhGM2VWqOguWpaTKKJU0W1JVmf+S6v5gVS5WuQEE1uw/BBwfYcK4RwlicZh9MU4aTFgNKsjFIcCouHik+MQGfQkSWOAyhYR+P7Ha4nJ0Bwz8vVHG1FQBv2dNWT9yaAEaIVIG6wSVv5pDkNr6U+4+HXjydpwEe6CRw3nHUe+Y/nYxn0WiLHXOv72caB+RpcbsY82h3i4y16keFevfvDnm/uHZ9PE20dvNYq2rlmwU1kwO380leHx7T+yts5IJXpobGq2xJ/sRhWF/1I7hdG+s/WCig85F0V49PqMZlrsGqedJrr6mUzo9hXVYA81aeMjX+2OwrF5z6lYZzwx54foFNsphMdlto6gzq2YjK29+Wu/hGc9gYBCWtr4RrWjsu6cYGEnkefIiz6c2O9Umr2O361NauAVd6jM7iFBUISvs/nhykO25mSz9QrRW3Am2NeqsfkvavC0Qgy8N7xO/zpYPFtcVrBLNVrjILzrFLQcyBwRS9AHiSxOuODkRis5wKwyjtsJn4bMaRkZEqSADTorYGJQR/A4tXGJyaadm2FNjYtwsIUpZMfgSfKpTmA6xM1SWdzxHc01HFTxeAKrzV8zTtx9EpARXKBlYg5WjO98VzNhYB2Z8Br/quk7iGRIGux8XRbkbUA9iXiLpuUs75C5G+LpLcgFRXgwsbdgYMOxDfmPegm0wqsXODUePZ/dX+KA8fo+As4xCdr+1XLhL6Ut1WaMRDqs9wq8n5Mq+f2E+AQ==","w":20,"h":35,"aspect":"fixed","title":"Data Output Port"},{"xml":"jVNLb9swDP41ug7yK12OjZP2smFAO2DHQrZYW6ssGbQSJ/v1o2TJTYZ12MGwSH58fHywoh7OjyjG/quVoFlxYEWN1rrlNZxr0JrlXElW7Fmec/pY/vCBNQtWPgoE4/7iYJuf0DpCaNH4ZB7QQKcMK+5ZvhHDyIqdaSb/I1lTjF1Dj84FRSVap07KXV6MGIDkhKEEV7Doh0kzWnT/mcBD/x088BuerIalfIeiBTgR35eFyYLQpO2tloDTTWtuGQTLH6SC+1pGQLQpbOpz7sXbEUzukkqae+XgeaQKSJ5ptlR47wbf74yek0P7Bj+UdD1pKM6utcYJZQAjorVai3FSTYjISSPRjt8FduAixNgvcYTejNAecVIneIJJ/UpOcB6FkVFoRPvWoT0a+e3oNCWLesptaCfEksuHHsCJg1QpE1onkpmHaSrjQlOrHav2nlAvpJ2j+ZW4PC81ZJ6b0NrO94h2nmJAge0K+LTdlPyuLO8yXhb5503IRzWCjOBXpXVttcXQ2mJfHrKHam3ilYXzst5u1xU5ATo4f3gV2dUAH8ESZbwQZI5D8Yh4ObwH1fXRrajiFsWl6lbX9xujR1yKJMarS+L7dQfozfH/Bg==","w":120,"h":35,"aspect":"fixed","title":"(Trace) Begin-event"},{"xml":"jVNLb9swDP41vg7yK12OjZP2smFAO2DHQrZZW6tsGjQTJ/v1o2TZTYZ12MGwyO/jm4zSojs/kh7ar1iDjdJDlBaEyPOrOxdgbZQoU0fpPkoSJV+UPHyAxh5Vgybo+S8GWP6EioVhdemCOQL0YnwfJRvdDVG668vR/US24mFXyqNhr8h1xeZk+PLS6w5EXjji/ooW7GjRDEj8nwEc9d/OfXXdE1qYk2fSFcBJqn1xdcy4FV2LtgYab9pym79H/ijJm69JeEaFR56BpcmJE2/7P/JlyWhqDcPzICmIPMlgJe+WO9fsWJ4jE77BD1NzKxrxs6uwZ216oMCo0Fo9jKb0HpVoasLhu6YGOFB6/BLm52CC6kijOcETjObXYgTnQbvJeqHU1VtDeOzrb0e2EizoJXYvC6HnWM51B6wPtVkiEbJeYOWHaXr2Xc13Ub53BbW6xinAr1LL85xD7GrT1uJ0T4TTGBxqqlbCp+0mU3dZdherLE0+b3w8yRHqQH411hZokXxr0312iB/ytYlXiFJZsd2uG3ICYjh/eBLx1QAfAaVkughlCkNxjHA2qgXTtMEszcMaha1qVtP3A5NHWIpFDCe3iO+n7ak3l/8b","w":120,"h":35,"aspect":"fixed","title":"(Trace) End-event"},{"xml":"dVPBboMwDP2aXCcgotuuUNrTLmulnVNwIWsSoyQd7b5+JoS2TBsC4ff8nNixw3ipL1sr+u4NG1CMV4yXFtFPlr6UoBTLEtkwvmZZltDHss0/3jR4k15YMP6PADx8Qu1JocRh3GwdnLkRGugXg/U7Kph8R7RaKOn05Aq64Nhfe4hyJWroUDVg3SKJOadshMt0nb/OO1g8mwZGacJ4MXTSw66nFYkY6FSI67weM03JdJ1ocIjaVgnnou28xRN8yMZ3UXpE40tUaMM2PAkP8VRNa4ir6YDARuEu5jMKwskUoj61IbV5DYOGFEWNWtZRKc4enfyeAx2lLU27x35JFOg96iVHaEXIAsWLQ9h7TFqDF1Uj/VyDVOqhhopvnqvsVu2DZ7V+XeXjgj1K40Mb8oJe6n2ZPOUsJ1E5YrKJ+YXTG07venp5MTXyC6yHy78Dlj70dwtINdgrSYbYDPK+TDOYdCDbLkbxyIk4NO0t8j6tZMSRmWGc3xne70mQLq7RDw==","w":80,"h":30,"aspect":"fixed","title":"(FTG) Type"},{"xml":"dVPJcoMwDP0aXzssJZ0eC1lOvTSZ6dkBBdwYizFKk/TrKxuTQCedYZGenqRnWxZp0V42VnbNO1agRboSaWERabDaSwFaiyRSlUiXIkkifkWy/ica+2jUSQuGHiTg/gtKYoaWe9ds6YOZkS3wj3GRvrlvktG1GyBfr/1ADQNdWlIH6Yr4iJYlNKgrsP1Mgi/5IMHX9fjOd0gm6hPnzhfW03VsbPFkKnBUVpmfG0Ww7bg7A2feP8Yaat2aYjb7RlZ4Dtxay74Pdk8Wj/CpKmoC9aC0LlCj9W3SVbp+WbGMXGpVG8ZK3kqwjoiGtkHPM/t+D3NZHmsvbaxh0DAjL7FVZWgqT4S9+oFRA8tWpmZvwZ4FDsm9LxvfFE4ULZavi8wxWyC5qhQFYofKkN/1LOeHT62InjKRcU7hfLYZ+ePHNz++8/lhHUiSgo6Jyh12cyBHImwDNhzgN1iCy78jGE/OdQPIy7BXppzDIThGNIxp1ICqm5CWBkyGyapvqfeBZiPMyuiGER/d+1Xy1NlN+wU=","w":100,"h":30,"aspect":"fixed","title":"(PM) Artifact"},{"xml":"jVnbcpvKEv0av+5CIBL7URLExsVAZKHY6OWUhBSMLpZKYHH5+rO6e0Ao2zl1smuXxTCXnu7Vq9cMd9bkUD2el6d3dVxv9neWe2dNzsdjIb8O1WSz39+ZRra+s5w70zTw/5354y9vB/zWOC3Pm4/iiwHH1XaTFOixX65oMYdf2vnmfMmSzX/Wmzw5Z6ciO36gVeb66h2Pm8kLveJ+mWzej/v15pzfmnJ4Oe430pT3R7Qmm/R4u5u8qLsh78sT/UzqffaBya07a1y+Z8VmdsKCeFHCdWh7Lw60nQF+ro6f6Ln2V13DMtmlZ2oNPwtMs9HtedbQz+E/9w/W/b1hGvcW/n2nV7+PH8XkuD+e2QrrN/9D+/p8PEXLc7oh5xpoSNBxiSnP3fN+vzzl2Yo3QC2H42WJJ187nJs2xdJdZ4W247xJPs95dtm8bLRJ1Ol42Zx/748lHi+ZnnB8PhbLYnmdfFOdlh9rPc/vbL/vGf3tYTg24dex+BvTFZvqrzAZ9MLwuDnCxHONLmW2Lt51j28CJeN9k6XvethQty111NNuaDfbz2P2QZBr17ZkRC2P1u344+/fOZzbgyx+9Cy6NjFW2keN66+TQi9xWe4/Ny3kza9hlh2WKfmZ/47yE0/Knl62D7+zaoOJx+TPLFnuObA/j3mmM2N1LIrjoddhtM9SelEcT+3MeFojjnfWSB7NH/klvTPHFUBsTn4+BeaiHg9Xr9Vn0hjZ8unFSJzjxbfW1rq2LVXbl+SQXNR2VKrJQ7M+JJn39F6sHu0m/MDY/3vM+rR4ejn+nHlVsI0/1VbZaju3Qsetg5mXLh9/nRbmu0HvVeN9qiYZqGg3VE1scL+Jl64P+/3aeL5sHCPzo9GncjC/MzKCJka/pAqitFaOqtA/VZPRF+uM/sfcv+rE3F9WWyNTs2HlZePTAusk1uID9sFfz1kwjKM89Zxqt3hdNN7jfvdz9sy/VeZdfmbxdvPofvcmo3t4lEevHn/YizePZjOSw4/PxFzAM8aD9/FSx692g/fGYpYWCrsJothS253pT4w6nA0NFalabeOTtx0ePOv9PaxHKc3tzYzCm40fV6ZteO4Pa/EWXFav83T+9HzxHOx4Miy9x2fbc8cH6hO/rfeJ+VAsZqPCe3w31k/jJszuL4vDw+f6sRv/GaOP51an2PwFO+epPxsf108vZdIgsrB79fHyvjZ/NStzsPcPGDN7yJevwX71Eey9ybuD9mLx9rxdvv7Ie/OcPDe4JE/7evm6Pq4nI0TIqz2X50Ofh8+kLtPZq731s1HhR7d7TeCf5WRMfi48Jx34W2Ug4nY4Kc1wMmxUg+dmmsb1qPS3ng0/GiorK3+b2GHkmgG3T40wSmy0N/42RuS9gefA387UDppd7TtzoGRHaLHQnqtsWKkoNvGcMsqi+TBo5rmqh3awTS2gqICPjcDZWWHk5cFsaAVYD2PS1WQEG1OLECbzKhpL9sGmdICMGAYTso/m57lq/K7CSOF3afjbkRU4WG9C/YFOZ1oFdWlSH91Oa5sKvggcLyekBttpJba6WC8h+62gSTkL/Ahod9wydFTjO1PsBRmAOb3HkvcWOl4Jm2zfceEPr7W1wLylalzZ9wx+Zt8mvAbWMkOH9ucBs7safrY8YNbfzm32I/s5bWDXIJzwXAPYS/aQbSVsGCqsEUxge6RszEHtZtB4wD3aM/Rv5sDJjtaGDdjrZJxjDQuxxHNSIv4FxhjBdmSqbLyV9dNGxx+/FfyT2GiH70aD0NnBFvKvR5hp0G7DXvhpR/5FzOaDYAtcsF9c8gs/+06C/Sa0R/HLZEi/y8Bx8259agdmwijmduwLuQubZ7xH+IoZidqBC/SZsU+wtmfBLznNqQirwD8wNghavxO+o2QAWwn39h9thKcanAFWK0s8E7Zr2rOalWQn4ix4AT4b4H8AXkEuqIpiTLgInJTWb27bp9ivIkwMffapZwXRtMb88N2uptzx+XeC+I7+7S+OEfMYMKbwTgGTqeCPbSZO29USl3nJOGLbgcNoakpcFOIPnsA+YPtA9tjFH3kzN/Cupt/KiWtZh1l9CJsMn3K72TWyH+Sg48F3Kmef3GAM/aN5LvbT76nkRKRMvRfY64FfaD2O2RCYpDyleGP8DhyzE19uXUP7krBvSh6wzaVwEeOS5jCI/8AbLZ6AibTC+mwH2wcsSHynJeKWy/y7YRs34r+gSXQc3JIxL5xkh1QRo1jG6P1I7nq29N8ZnD8z5hfgQg1C8jPyD/5HnkxbDgNuKX85BjVsxL45z5hngZFG1bwfcOCuarmSOI34QPyguZbHxEOda0WfL9WE5zADVHHiF8I3xpMdOWEHHEtV+8/x7CPMQbbSM+KeGqj+Ocf7yrkcM3oXOqnEORoNhCs6zqUcRU5xLmp+g2Jo5uSvjncV15GY1IbEv28z7EHODmQN+L1JS/i48hyOlXX1vUt1RbDsEPdiPOqXzoshbAOXwMfyriJf6ncN4Qv8QDFDfQCXZoxB4Cwh21P+HQGDTcJ+Cx0oIuSwR7xOfBu1eN4BO+CgyYjsGQCHAyV4hj9d+GCX/iU3asr1oCbOiwc3/LdlXxP/oibCjzIfWDblmoH54A+vEv9MCY81xQcapwH/g2tcjhvWKKlu0jqca9s5zY13xMGIvaMsyvUrB3vib2c+ID+Sv9EHMYkt8feUeHUY8l5vuAscNDdCrrEJuIrygTkTfebgTeCyx8OcQw34DZzkUU1vNAcQblBDkM839kJ5Xrk4K0uOuzO3Eb9bHiceaxKKHfAJG4B5bndc9mnAueBJewaMbRPk7i79V03Zeoivolzo1wTiYfh/2gSMKeQS+SKac61Hbbe43kEvBs1U13Pi6hHj3XN26J9ILju3sSEMoD/XLvE/8MS1U9FeGlHa7B+L7KQ8DUhPbGWPoqlcm7mb1gcHtRqkwxrlQOSZpFXYXqrn4HbBc1xJO3EcThNU569axKR9hKTtkD+MpQnFZtTqCSh+Hq81Y8K8DS7j2gTMUz1n7mXe5DoDP1LOMcZJP3F/0mrgCbcUfoIWFI1B2gMczNqOuFK0JPfH/iPmkj5/5FfuVekmGwfAWMV4RS3AOibxOmKNdUWDwP8l5TrxnSJ9RTFgDQOuJF2ZdW0VaUHStBgDPO54DcQC8db6kfuNuB/8DNuT9Dr/juaXd6xBpgPRo11bN78fEY4S1uOiV+Jh6HCd1rZ0Num/42/eo5GiD+IcM//64HrJU+hLqTWtjreoplNNpbhxXSB/cK5pHT7jOgAc0e+y0/xaJyE2c+B7JGMbBbyqvKftU+Efz2Zd2c3J9XtAmlHyY074bHq1BbiYi0alPJ2MulrC2NwC4w1p5pj1AcerjbvoCdECkiui6SesJUW/i16oA62VSccHonu1hmb7CKu11lEl5T/m1Nqr1ROeaAvkIvqJXuFckXat51OpG9A+TqsfOJ96Z4ip9Od6orTuIS7dCa9Hc/BVnPZqhuCC89slfuo0m3/V8tVVv82J33ht5jeONdULUuyK5yJNK2tQvNr60HKVJ3qg5rMEaZ68p00lZteaJfHvMAXd67hkcyW617WZb65al7Hcca8+CyjRIeKXJiEdIJqL+JXi2tYR6c/a3b/q+Vb/SO3IiC8Q4ygVbVVTfZ8Stlt9LvqG60+/rdPyKdcJ0qusAVst76bd2cNxuR2+4vMh/NXpdY03bQvVjD5+Wh0/pdoIjJEeKUVHO8x13RnKFw1PZw5bn9u+insZdnoysZXoWeLO4VUzuqiRKtcans8qnvMVtkTnwFeNtHe1o5a6MM0Fw8riswfXh5iwrbU152mrOygn9Zko0e0q7c7AmdQ15PAQmEyvZ9Bbbf9lvkp/qu9DzTPAQErnX4mP1I8+rtKuNsidgdwH0LniereQs/5tlOhzqo84lyg+N3T4rrj+a85knS53H5XnfMF7yPnruRtnS6flTI/PUEHUxbumGPtObz7SB915oSz+ZZtwjc5LOuNTTJHjTqL1ey8ezpU3haemhF+T53FGzDvXuxA37XiTa7lnedf7jrwfA9FJUt/7Z0W5o5HzKbfzbSLZ19ok/I1zQ8OxrOlswZjonSeuGsHvaW+ZQ7jyeu+R9v1M5+FG6sgfOUN3EJRjzchuNRYwTXWuu/MQPS93G77T8uTckPgKT5LeJu4Io+lN3ovu6jiyXbfp19zrnQafuxv4m/2L2JpUAwPWKG7d1zy8f82JHfexDk3oLNBr63FaZ4vSd28jPgv2uLD4YlyvreVCOZdDc7LO6bS03MnoexjSZHRz7DZyj9Hd9eQ3PNi7t/A7HR3ruw3SyzFpOHBCPAzlPKrvLMr2jonPTj2uuKl9rJPlLHrlP/I93//u8k47T/R59hYvlde7p/CvulnXeZc5ke7gAqotE75j4pvvgHErd3btPY6+A8w7zTy72X8l+TKl+xyen+5KKJ+vWuZGq3S5oO8HtX2J9h/VoSn8417vwOpR0eO8q06eiV5Eba8CfTcErFPNJi0rWp5rC9aTe6RWgw46nar/9p67/qINWf/mnT6efKmjRRvzWU40bqubb/smpJnoLPWHhpYxnozJ9ZrQ/V66fJ0+eB/j9/VjCt9PM+8pMDav1f7n7PmwfK3yMAsOC/4v/r447PPVZHBJHn9sl28vdrh1vyfWS70yi73/Jl9awu20awszVeqvJdd+rw9l/Bqc1k+7byoqmvXT82VpzovV695YvD3ny9fBae0cjdAKjOTwcF7MBrv4LTjGb891/Lb7tjo8fC5mt989fDO5fim59y36PjSkr15/+/CoP1jqpzO96j//8QUyOX58bJJ+y3K/P5aj8/lY5rrl//oAaX79AbK6+YZXt98Q/zG+PVz/Wd/kde9rpfXFx0rT+ufe/vv3ypsvjjefF6/f4+VrZP9z/X8B","w":160,"h":40,"aspect":"fixed","title":"(S/S) Service"},{"xml":"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","w":160,"h":40,"aspect":"fixed","title":"(S/S) Storage"},{"xml":"jVTBbtswDP0aXwdHSrr02LhdLx06dLsXsk3b2mTTkOQ42dePkuVERp2hBgyIj3wkRT4o4Vl7etaib75jCSrhTwnPNKKdTu0pA6USlsoy4Y8JYyn9Cft2w7vx3rQXGjq7QsD8NxSWIpTIXbFH79xN8HsJptCytxI7AqdUKy7Peg2ZfDklCmhQlaDNso/2DRVMkAah3jFizT0zZy6vY+x5pplG9O5YnJXsqABP+GFspIWfPRUlx0izI6yxrbvPho45DhRZvuQXQBR/au3Q18FSGgi4kX/dcftlf8/3+5Sle07fV+eqsLMZKtS+C175j/BSY/9L6BrcdFMCCgoUlFJfbKVEb2TuL+CQFo+CrJcwcQdpKAZt5BHeIPTgUbTCiogIVjyV0oZuK6lU1NLd/fbAaGqHaZpH0BZON1WwiYb8DEip9ZlCRlnaJkTcTUpJG5B1E2jbgImw1/pCvWT7gbJzippr84lxnky+5GNVGbCxIukQdXSFvBJmM8hmXfOhxFGoAWZFs6WIInGsaWfWmDSYDTmwG5JxO6GQh672eTe7T29SO6f4IImrhDq6XoQIpXB80BpHE5BPLZmtLzkQdovFzHuKFMBWBMD+I4DFChf7ur5f03rj5+0f","w":160,"h":40,"aspect":"fixed","title":"(S/S) Real-world object"},{"xml":"dVPbkqIwEP0aqnbfuKzKPsrNwXHUGVFX3wK0EAkkGyKIXz/h4jpW7RSVok+fTqfTfaIYdn6dccTSNxoDUQxXMWxOqeit/GoDIYqu4lgxHEXXVbkU3fuG1TpWZYhDIf6zgYZniISMIChsD3M6clSgHORv2Jx/UAI9JzgqyhPlORKYFgNPUAQpJTHw8unULkvnmEYCV1g0QcOg5+4F6i18rr0Uzf24MkWsNUsBRYTJj/PRC53ST1x396e+yVvYdnbbnfbTCdlm86VvMSNUzb95drWspT0qvCadZO/GOWNHbL9tSr9KF27AwF0purVbZHVpvEtLq6PosE3JSDeO1PesiTmn82OiRtGlus7HTlabxi/LqGJ3vHl9+ZhQx0z8IEaXZnWRg9EtIOeb5i4Dflhc6NI7IF/8Rt709Xg9xXtZ5rrJNajetcN4H9D4pQrXpTXbIbFkN5Pu/e1ZJvFWe2bWB3nbn4ph1SkWsGGys9JRSzlIXyrydkSaNDmU+IbCrk9qi6lA4gvOQSA3xmIIjzllAeIJiIGPaCEQLoAPWDY6pvUAGHAsE3SkHAlmJawfLuuECbEpobybkeE67Sf9/WAr4AKu36pP+zLvGVCZkzcypMaxSPuISS9QNQWcpOLZhwaBJf92PqQsjUFCdziI+w4fj6gLfXpjnw==","w":70,"h":70,"aspect":"fixed","title":"(FTG) ActivityType"},{"xml":"pVZZc6pIFP41Vs283IJGE31k05BrtxK3wBsCaVabQWT79XO6wcTcWWqqxsSyz/b1WT48ThQ9b1elV0SYBWE2UcyJopeMVcMpb/UwyyZIioOJYkwQkuA9Qct/sMrCKhVeGV6qvwlg5yT0K/DIvDO/zBDG2cXLQ/gYg/M3loWDrSq9y/WDlblXxewy2jPPDyOWBWF5/XarQBEK1a/iOq66fVeEg81necGucfWJexsN98wRF78Xda26ex7XyCv48VqFFz/Ofkvc5dm4WtQ0j+9ND+XpetofP07qc3ZIX4mlFcpZmv+Rp62mEX12WXbRc2orSVq4sY53V6uO1ua+CM3NBGnHddpcFRtOcuP7ziHKZkhxmbXUnuev7NWlku/f6vb1yUibuTLVlDown3Y/X96emTGn1j7wbt3mBhNDWpglvWySfemsb4wsHc+qFt5S/em2H8EJ0tx2uRzWtuw8nfYseKnP26u2OnoVKfo5O1mHBECWm1Mxbxyo9veJojURNG1XQMtB0QBPQBdVOZ+dDMcyvMa9dxZ9krjMKq96kPOw8swgrkb3oGTF3itpWI12n10qL76E5ShDowPWjEIRljEACCOMJC6u4fZLpX3EWaazjJViRopp8D/QD4Otw7IK23+kpfww71XIALPswKWJgyoaPJ4H5kpRGNOo+q7zRubRz8gvjsNhpNBdHFn/L0/Ar7z3RgJb/p31d54q/4mnce5R+NR4E2Lfy9b8si1/APhjpBhnVlUsBweRheb5KS3Z7RI8tPNDvB4w1CymPLZinAPetRA1GR9xG0JumrhSvWuluwbOATBioqiDiJbXmgJTW6AQ0rcvBLmdNj2f2pvfS7H38ib5BqvXSqAE3UzB3az2c7/GidpgfdEHuR9bL27hvgf6WaELK1Ep7i1K9j6yDFva6BYNUJYGK247KCS2qLc6Fi6KpO3OkohB423SROudFFmmW58vNrXfg8xHi8rdabafzymJp80acJ1LSu0V93mLAnTsz0jOLF2iIscX/LTuFvkZzSTnM36WnJFE96sscU+z3t2plbWKpOBF6zfxvHbzxS1YLRX3ndTn0+HmQMwatYWDjjcfHehPk+vlzM9J4ZyaBxzIAy2a8P1V1GEZVoMTi74JvAzunPVrXXs95/gG+VXbpG2c9zdmreyFlUodNijdGJoBPZxaxqFfJ/YMMLrNbipbBu7gLJNY7XFKe5yAX2+jdXIQfcW98xCD0UZXp3jptMR4MwabqWBd4EjQN/g0Z5hj8bns025n4BZnTof7V4sYjmT39ozoU35/D36y8IM5rRMTZmg1oJ9ulg7PwwJ5avcHmQz4HdZVmfQO5GS3PL9h5pDT0pEA3xg5IG+E/z3OnvI4nFAKs292ho2IicHfv5GdKm0MFfTmQ5zdQi843onXB/lyuQcf4T/Gifp4PSIvk0qE+yeU+ytQV7cx8I3jkITeiM7lu781Bf8e7zm+BfnweAz4zifu0FfIcZgP73lPkuhEwNfuhSyRPRX+Y5yog+OJek3akb0L87Zmok9QN+fMQ5zgBMc7JoBnYiHf+3qPG/BGbsA8cOJIx0Tk30L+Bt6rMDeYR8LxzWaoU9TdYsPm+ingd1/+ePqFayKsf/a1JWPdxwQqTLGQiXEY/Me4oQ6zhf5CvcAPI4IaId5IR9tDjP44Q/WhtsH/3qtxfjIBjm4Aj+ydTz5uIDds+CDzZ0TcK3g89AF4nn7vM+f72OeW9Opnn/HeBn/ahLFVw3dP7SvuZUv5lyz/1+BHV3jfmHxF+hm7hA/yrxvVyzLWqGXJmut95/6yg3NWP0iwQS7wnfy4o0P/Vl7jOnzjgXftf9qa6O+35hiAlB/zp+ni6zUAPOxUhH6g+V/Xqvz8Q5H/72YF8et3q3D99rP2Tw==","w":70,"h":70,"aspect":"fixed","title":"(FTG) ActivityType (Composite)"},{"xml":"dVPJkqMwDP0aqmZuLJOlj4FAmnQ6+zLJzcEKOBjsMQZCvn4MgUmnavpAIb0nPdmWpFlOcpsIxKNPhoFqlqtZjmBMPqzk5gClmqkTrFljzTR19Wmm9w1rNKzOkYBU/ieBna8QSBVB0bkuNm7IXooSUL82OVkzCg9OCpRmFyYSJAlLW56iACJGMYjspWqj0gCjQJKCyGpbcXhwKJdMiQDudPOW6E5u1u7rpTJZdefIIsRrM5OQBoT+uJ688zjzQ9fd/y7v6nqOE9/3l8NoQHfxdO7b3Drrwz9JfLPtudNLvSoaxCvrGvMTcT43mV9EM3fLwV1opr2fxWVmrZRllEFw3EW0Z1on5nv2YDhl01OoB0Fe3Kb9cVwOrV+2VWC3v/l4Xw/YeBj6W4zyapGrjpk20OvdcOdbcZzlbO4dkS/fkDf6ON0u+KCOuawSA4qVcewftgy/F+dlZk/2SM75fcgO/u6qRLzFgQ/Lo7rtT82yy4hI2HD15Aoo1ZwoLJJJ3TtDmQIyckfn5p302mcSyS9+AhK5mMg2HAvGt0iEIFs+YKlEJAXR5UOQi4wUsK6FO5UChCQBoiNKwlRhCcG4LmGrvmBWtlEcBFH1Gi3VQcIzWD4h+0IodRhlommp5XnOuP+m8Mcc1CXg9u0UG1/GYwJMaYpKhZQEy+gRMXgMuh4BCSP5iqF2UMN/mc+VUEY7cZ3bLknnPpexCX3Z1b8=","w":70,"h":70,"aspect":"fixed","title":"(FTG) ActivityType (Automated)"},{"xml":"pVbZcqs4EP0aV8283GKxE/uRzY5yLWy8Bt4wELFaDGC2r5+WwImTuXdqqsaVFOru00e9CTGRtaxdFW4eYuoH6UQ2JrJWUFoNq6zVgjSdSELkT2R9IkkC/E+k5W+sIrcKuVsE1+oXDvQSB14FiNS9sM10bpxd3SyAx+ic7WgaDLaqcK/lOy0yt4rodbSnrheENPWDovyyK2fhCsWrojqqukOXB4PNo1lOy6j64L2NBvdWUWAP/O+Ge0oSE79mW1bdPcAydHO2LKvg6kXpH7GzvOglIoZxemt6yFvTkv70flae02PyaiI1ly/C/K8saVXV1GbXZRc+J5YcJ7kTaXhfojpcG4c8MDYTST2tk6aULViJjefZxzCdSbJD0VJ9nr/SV4cInner29cnPWnm8lSVa9942v982T1TfU7QwXdv3eYGrZTUII170TAPhb2+UXNpu6hauEvlp9O++2cIc9tlYlBbov10PlD/pb5sS3V1cisz7+f0jI4xkCw353ze2JDtnxNZbUKo5j6HXoCigQECXVhlrKkiLIugjHr3wuskMJlWbvUgZ0HlGn5UjXC/oPnBLUhQjXaPXis3ugbFKEOhfdqMQh4UERBwI7Qkystg+6lS36M01WhKC94jebnU9KcF6IfG1kFRBe1v51V86PcqoMBZdABpIr8KB8TzMNJCGEQkrL7q3HEkyYfn5/DDYhyhuzgeh385Gt8PhDtONvLux+E+p/J/mtMocwk8VVaEyHPTNdtsy04GO1+yfqEVnAcA8ChU10tIQW9X/6Gc7/z3wKGkEWG+FWUz4JY5z0l/j1p2qlS+pXLXCncNrH2YiImsDKK0LGsCk9rCCEna9sWUnE6dXs7tzeuFyH3ZCZ5O67Xsy343k3E3q73Mq3GsNFhb9H7mRejFyZ03X7vIZIFiheAeEfPgSUi3hI2GiC+lib9itqNsRoi4q1PuSKGw3SPB1Em0jZtwvRdCZDj15WoR681PPWlROXvV8rI5MaNpswZe+5oQa8Uwu9CXTv1FElOkCYTH+IKf1t0iu0gzwf7wn8UXSSCHVRo751nv7JUKrULBf1H7TTSvnWxx81dL2Xkz68v5eLPBZy21uS2dbp50JD8NphdTLzNz+9w88EAc0qIJ3l55HkhHDY4R2XG+FPac9WtNfb1k+AbxVdu4bey3HUUra4ESocM6IRtd1aGGU6Qf+3VszYCj2+ynItJxB2vRjJQeJ6THMeB6S1rHR15X3NsPPljaaMoUL+3W1Hf6YDNkrHEeAeoGT2OGGRfryyHp9jpucWp3uH9Fpm4LVm/NTG3K9u8BJ3Ic9GkdG9BD1IB+ulnaLA4E8tTqj6I58HdYU0SztyEmq2XxDT2HmJa2APz6OAPihuPvftaU+eGYEOh9s9ctyTQw4L2buVeEja6A3njws1qoBeM7s/wgXib3gOH40Y/nx/LhcRlEMBk+JgwvQ17dRsc3xmPG5GZqTL7j0RTwPT4wfgTxMH8M/PYH71BXiHHoD6t5b8bh2QSs1XNZMA+E40c/ngfj4/kapDMPDvQbzXidIG82Mw9+fCYY3ykGPgNz+V7Xu9/AN84G9APHtnCKefwtxK/jgwJ9g37EjN9ohjx53i3WLaafAn/3icfTT15DwtpHXVtzzPsUQ4YJ5rKpHwf86DfkYbRQX8gX5kMPIUfw15PR9uCjPfZQechtwN9rNfZPNGFGN8BnHuyPedxAbFj3QGZnhO/L53ioA8x58rXObN7HOrdmr3zUGR8swJMmiFAN757ak53rlrCXLPtT4WssuN+Y7Ir0UnoNHuTvN6qbprRRioI25f3O/XYHZ7R+kOAGucI7+fGODrxbUUZ1sGOOd+1/ujWlX9+ao4Mk/5g/TRefv4Hg4U6VpB/S/J/Xqvj8Qxb/780K4ucHLYd++d79Gw==","w":70,"h":70,"aspect":"fixed","title":"(FTG) ActivityType (Composite, Automated)"},{"xml":"dVNNj5swEP01ltpLBSZE22MC6V62qrS7Us8GJuCu8bCDE5L++o6NCRupK0Kw35sZv/mwyIr+8khq6H5iA0ZkB5EVhOjmVX8pwBghE92IrBRSJvwK+eMTNg1sMigC6/7jgNUfqB1bGFX5w8pAbg3b7sdBWWZGdzUQmO37ycvY12iQRLZjktrqCwfkX8H/H1ZfV3NetfM3t6oH/iwnVLRyM8LC5mMXOKjvnzFKkI6UHY9IvXIa7cyHqIHd1U6ftbu+XgeIvkbV0KFpgMa7kiwVkn57X7w1Y0l4sg1405TlTJ128DJwRAYm7hFjnetNpEdH+Aa/deO6iNRondIW6LY3Rg2jrkL8hJGGcHhV1IKLJorqF/3X0w/f8s2GSym3m/Qh2yaetfgUG+WdCeoTjfoMzzDOPh6FC1ewiZtK1W9tyOLXyRmWEnFWZrnzalbiQ/fg1KHRiw5CpxbaOwyorQslzPciL326nWpwivSRM426U+nTMAanHRFOYwwYLGJlk1u1inmWSote2v6ojVkgIbND6Z/bIJyBHFw+nez0QysfATkhurLJFBviLfJ5+pMOdNtFt+8RU3FA2pvrek94Ecdj2cabs2zXGxpM7y7wPw==","w":150,"h":90,"aspect":"fixed","title":"(FTG) ActivityType w/ ports"},{"xml":"dVNtj5swDP41kbZvFNRK97HA9b5smnR3fyAQF7ILMTOhtPv1c0JSrtJOAmL78RuPY1FUw/WF5Nj/RAVGFM+iqAjRrdJwrcAYkWdaiaIWeZ7xK/LTF+guoNkoCaz7TwA2v6F17GFk44vVATwY9i2nUVpGJnczEJDDn9m3UbZokERxZJC65hsn5Kfi7yfp++bOUreeeysH4CNVaGjDVgs3tpZN5tD98IqxhdyRtNMZaZBOo13xkDWgx9bpi3a399sIMdbIFno0Cmh6oETODjkJqJR3jhGJutyrj6xuVORLrx28jZyc9YXHxd32bvAU7gJF1kltge66MXKcdBPiM7YowvFdUgcuulj8EWfgYYJ2pklf4BUm/TcFwZXJUVFpZPvREc5W/Zqd4WLRzrUtD1WutXzqAZx8VjpVInQywT5gRG1dYGdfin3tR99LhUuEz/wvb2sPO2aklMbgciTCZbon5CYCk16bHOEHVOslqS36xsqzNiaZRF6cTlV9eLpP+ALk4Prlld19GsULIP8O3dhl0cr10WO/XuusB931Mewp2mScfHcP3RaAhTjepMaVSOq2esH1YTP/AQ==","w":150,"h":90,"aspect":"fixed","title":"(FTG) ActivityType w/ ports (Automated)"},{"xml":"pVZbc6s2EP41nmlfzoCANH7EiDicWjjEzgW/cYsAA6IYm8uv70oIx+k5p9OZJk7Q3j7tfrtCXmhW2a+boE4Ji5NiodkLzWoYa6dV2VtJUSyQksULDS8QUuBvgR5+YVWFVamDJqnanwSwME+iFjyKIOSbYWG8K8B3daqDCiyndigSYbn768zTWEWsYM1CM8HY0PA3AISPBf9vVr9/usOKTk+jCsoEHvMOYfNpmzSQ2LTtrBbZl89MpoDaJqhOH6wpgzZj1WQXqMJqRm12ydphP9SJjC2CKElZESfN6QslEStrdsraK+5ZRszUIS5+ZfWTCtSwcxUn3FWFPLsUgHY1bAWKDpoHurQtC2k+tQ07Jm9Z3KZSE7GqDbIqaa5yUQT1KQsFvgKauGH1Pmho0kqXoIl22cjN998MXQeO0Z2u3mt3CrdWbCM7yIObJDo3p+ySPCenKYZrkx6ojaUQBtGRiiq257aAVKQeMqtgJIIpEw5dJm1gx9mcR8PaYDbzgJplVSu4NVYLA/Ny0yBmnTR/QKUybxXxMoqCdWbTsO4kAYWHZFa5smVNQ4YrxlNbfWRFMasWSLMx/71OyCVp2qT/5cirN61cJwwKagZw6WRDuIcxHQslTTKayrCl1AVycug19PMAwUKOxyzKI/Uvx+ufMx3IqXWieaLnGdT+dQaB55ovszKgnCPOQhYFhZiEJz7c/IhoOGRty0pwEFmsro2/4fND/NxgmEVGeWzL+CwHp1rUhD+yng/9Smxpzlpl1sA6huGAd8Mkwmm+0AVa9XAUkPX06KLDsNLDt/4cjUoWPD4rEWaXjRZr8WBoZDAuURldSG52xFqOcRllzuOhPrzHVqjRpZOblIwOdfcRcrCnbC2Hxqg4xmtue9HczKHB+rU+oFR52jmKi2n2lHfpZqekjn24hJVHvfe4iNCyPexWXlTeUzfTuw3g+tWRemvu85zG6HUMkVo4lkJFjo/kbjMsyxAZin+NN/IQKXS/LvLDmzEedmbrrFMlflyN2+z+ciiX53j9oB3e3Uv49nL2IWaD+tpHr+cIvdA/ba5Xi6h0a/+tu8GBPNCyS96/izoc7HQkd+izwCtgT2PcWKvvYUnOkF/7lPed//7MnLW3dI7KQDClW7zCwKHu4Jdxk3sGYAzbna46mAywVt3MHMmRjiQHv9FDm/xF8EpG/yaGoK1l6uTB7138jCebrRFL4CjAGzxtg3As3pf9cdhh0pPCH8j43XGxr3ijZ7iWzvcfwU8VftCnTW5DD50O9Pr2wed5OCDr3viiuhP+QCxTdUcfcvJ6nt/Uc8jpwVcAH8sZULfCf47zdB5Hckqh990Oe8i1CfhHZ3dnKltsgt6+ifN64ILjvfH6IF8uj+Aj/GWcqI/XI/KyqeJy/5xyfw3qGraYnDmOm9Oza3F59nd08B/JnuM7kA+PJ4DvX3EnXiHHqT+c89HN0zcXfL1RyIq7p8Jfxok6OJ6o16aDuz9Avx1D8AR185m5iRMzwfFec8CziZBnXue4CU/OBvSD5L7ymov8e8gfk70JfYN+5Bzf7qY6Rd09wR7X64A/fPoT/RPXRsS68tq7su7XHCo8EiG7+GXyl3FTHXYP/EK9MB84hRohHh+l7SbGuu2heVPb5D9zJfunujCjW8Bz9/51HreQG8ERyPyMiH3FHE88wJwfv/LM513y3LujeeWZ7D3wp12SORd491wi7VA9Uf6S5Z8fLs+SXW6kht/WX+SfXeNfb9Af72zlv16L6OfX4hwwX1XDJOuTdHNpIvQN3f94bap/fNPU/3tzgvj5pVe4fvlO/Dc=","w":150,"h":90,"aspect":"fixed","title":"(FTG) ActivityType (Composite)"},{"xml":"pVZZc6pIFP41Vs283IJGMtdHpNFwx8bgkgTf2NKAQDMIsvz6Od2AmrvVVE3KaJ/tO9uH7UzRs3ZdukVEWBCmM8WYKXrJWDWcslYP03SGpDiYKXiGkAT/M7T6hVUWVqlwyzCvfhLAvCT0K/BIXY8nw8L4lILv8lK4OVguVZeGwvL0T83LWPosZeVM0cBYUu8PAISXDu8Ppz/v7nCiw6eau1kIH1MGr7zbBg0UNqSd1KL6bMfGElBVuvnlg5WZW8UsH+wCVVg1v4qvcdUduiIcY1PXDyOWBmF5+TQSn2UFu8TVDbceI9y6YoAeBt8bppkiLn4e931GqGR1HohgGRpoIsiwL6AGUDSwVdBFVZaOZp/llRvnYXmT09QtLrEn0CTQBCUrDm5Jw2p0ydlmXBU3l6Ffl5f4Gu7CS9xPQWELMwxGwXP9MxVVbesqhWSjHnLnsHt3yMWhs7ByjSCeMpWsciczDyhYnFdiiOpypmLOkMgNWDOaP6CX/VCDDPNZumnKGq0sWXMZAS9Vyc6hPrAH54yXsvyI03RSzZCyWun4aXFb/TUsq7D9JZflh1WsQwYNlB24NHFQRaOHOvBdisKYRmPYYtS5IyXoLfT+ZMBhXO8kjs/Kb56b78nqjnQ0/YmqE4eU33II5lrwY5y5lM+ITyH23VRs/oWzlnNfwR6rgKvgIKpY3hb9MM8P8feAoaUx5bEV41x0L4XoCX/ELSftUqTUJq00aeAcABngoR9EeEyvdIaWLVAZ6S/PFjp1y7n31tZ+L8Xu807yMbtulEAJOlUhnXr1M/9KEq0h+qIPMj82n0/F6T3QPYUuzESjpDepdfCRiW1pq5s0QOk5WHPbUbFik7rr1+KEIullb0oWpvFL0kSbvRSZxunq5Ta134PUR4vqtF/afvaVWvG82QCuk5+pveY+uyhAr72H5NTUJSpqfCZPm26ReUiVnFu8mnhIood1mpze1P601ypzHUnB87Lfxl+vp2xRB+uVcnq3rt7bsXYgZoPawkGvtY+O9G+D6+XUz6zCeWsecKAOtGjC92+iDxObDUlMuhN4KeRU+42+/OZlpIb6qpekbZz3HTPX9sI8Sx3BlG7xEsMM5yY+9pvEVgGj2+7nsolJB2fZirWenGlPEvDrbbRJjmKupHceYgja6tqcrJzWwjs82AyF6AJHgrnBp6ESjsX3cjh3e0xakjod6b+ZFnYku7dVS5/z/D34ycIP9rRJDNih2YB+vl05vA4T5LndH2VrwO+IrslW70BNdsvrG3YONa0cCfDxyAF5K/ynOHvO40hCKey+2WMbWQYBf7+29pq0xRrojYc4u4VZcLw33h/Uy+UefIT/GCf64/2IugwqWdw/odxfgb66LSY1x7ESWls6lyd/cw7+PTlwfBPq4fEE8J0b7jBXqHHYD595byXRmwW+di9kyTpQ4T/GiT44nujXoJ11OMG+TVXMCfrmnHmIE5zgeK8J4BlEyNNcp7gBb+QG7IMkjvSaiPpbqB+TgwZ7g30kHN9ohj5F3y3BNtfPAb+7+5P5HddARL/NtbXGvl8T6PBMhGzh4+A/xg19GC3MF/oFfuAIeoR4fB5tDzH64w61h94G/2lW4/5kCzi6BTzr4Nz4uIXaCPZB5s+IyCt4PMwBeH7+PGfO93HOrdVrtzmTgw3+tAlj8wrfPVdfOeUvlH/J8tcPl2XGrg9SyW/nT/LPru3PN+aPd7T0X69F9PNrcQqYrqpukOeD9HBpIvQFff3x2pT/+qLI//fmBPH+a1a4fvqx+y8=","w":150,"h":90,"aspect":"fixed","title":"(FTG) ActivityType (Composite, Automated)"},{"xml":"dVPbbqMwEP0aS92XFTGlKx4T0vZlV5XaSvu4MngKbg3DDiYk+/U7NiYkUitC8MyZy/FcRFq0x0dSffMLNViR3ou0IEQ3n9pjAdYKmRgt0r2QMuFXyIcv0E1Ak14RdO4TByzfoXJsYVXpk+0DeGfZdjeyenAnC0F993f0HHYVWiSRbhmkurzhaPwr+P/i9G0151M9f7NOtcCfJXxJZyxEY8id+ksLZjmu/uEe7TNGPlJVzhyMO81ICH6l/zPn82CIG8BtBF9DphDSqgoatBpouKrZUkLpxevqrlWRhGOnwZtumOXUGAcvPUdkxcRNZF3jWhvhwRF+wG+jXRM1FXZOmQ7oLFur+sGUIX7CGk3YvyqqwUUTRdWL+efhH99vszTL8lze5nmeMtbhz9hH70pQjTSYAzzDMHt4LRx71ekolKr6qMMdnkZnmUjUM6+OB0PNPHzaFpy612ZhQejUAnuHHk3nQgGzncj2/rKN0jhF+I3vGVlvpJeNtcU8SVzF9GHrH385a3HaEuE0xERzMw5ADo5fzvTmokePgMyVeC6SKVbaW2Tz3CcNmLpZ3OIyJCq2vj77rivCh9j4RYxLs4jrcgbTq939Dw==","w":150,"h":120.00000000000001,"aspect":"fixed","title":"(PM) Activity"},{"xml":"dVNtb5tADP41SNuHVnAUwj4mpOmXTZPaSvs4HeDCrQdHjQnJfv18xxESaZV4OfuxH7+cHcR5e3pC2Tc/TAU6iB+DOEdjaD61pxy0DkSoqiDeB0KE/Abi8AkaOTTsJUJH/3EwxR8oiS20LGywvQNTzba7kdUDnTU4dfox2hx2pdEGg3jLINbFF2bjJ+fv1enras6nev4nnWyBfwt9gRfMsTFE5/7agrMcV39XR/tsfD5ClqSOis4z4shv9L/neBZ0vA7cevDVRXKUWpbQGF0BDjc9kyOZVhL4ThKO3mPprbDibdvXdgk0Y1c554jTnxpF8NJzKFZMfLusa6jVHh4IzTv8UhU1XlOajqTqAC+y1rIfVOH4Q9ZUaPpXiTWQN5FYvqi/Ft7cJ1H6kIYiC/kVWcZoZ777K7bOCOWIgzrCMwyzj9XCqZdd5YVClu+1q+LnSJpT8XrOrOOZkXMmNnALJB8rteSBhuQCW4feqI5cb5NdkOxtuY2szOThN67U5x0JW4bWZtoimmnwhG9K63weO+5sfDjk+/TbZSaOgASnT8c9urqlJzCcK/LIhOcZvYvuozjN0izebESURmkYw10UzzSTvw/LksxrEzag6mah9rsUSj859YV/3TA++PFYRL9zi7jutjO9Wf1/","w":150,"h":120.00000000000001,"aspect":"fixed","title":"(PM) Activity (Automated)"},{"xml":"pVZZc6pIFP41Vs083FTTiDGPCGi4Y2NwicGXKbY0IIiDIMuvn9MNKNZNbk3VJCp9tq/P8rXtSFSSapHZ54Cknh+PRG0kKlma5u0qqRQ/jkcYhd5IVEcYI3iP8Pwbq8Ct6Gxn/in/IiB1It/NwSO2HbaZyo2TGHxnBagveR37XD35p2A5zNw0TrORKIMxo84fgAYvBT4Hqz/v7rCi7VM62YkPjx7eyW42jgamvD4PPSDL4h7P60jWaZcPtt08vIZ53Vo4+IP+73Y/ZuS43Ch3xi3fiUPGtusHaez52eWhZ26anNNLmHeReVZ0EX1vMRMf235vF87S4uT5zFWA9MsAgDZn2AoUJUwXdEGexJ35kmfp0d+HXh50Gjc95XZ48rObHMf2+RI6HB+BxsvS89bOqJ93LnbmbsKGmZ+fJGEyniA8RfDG0ylYT+myGzELzny3yC7h1V/7lzaGaf3qbJ+8TnBs90h5FasijyGVTg+ZnYAzdpsJ2zjxc1vzwj6PLM3t3swCzml4ynlvpdlIUlm5ge2lZWf+hEq7vAXMyojjtJSzLC0vHeBnGMdKSzvorDiX2f+NE1c/y/3qW7oLgykt/BRyzYAyqG6tP4QnQZxMJ1Px+RkLE2GCRP+HILYwZTcPhiK1xwYFfkiDHro7S8jumENv+PcTBouOHr3YnbnfnL/vqK5D7x85KP6Wg9BnTvwwsSk8Z6xVoWvHnAlvjNwhAIqqk+Z5moADz2J2G/yg6Z/8b4AhxyFlsXnKuGxfzrwm9TOsGOlnfEu516JeA2sPyAEnvhXx/HKlIzyr4Chg5e3VwId6Nnb2VeE2KLRf18hV0+tS9ESvlkRSS1c3ca8kkkuivDRe4ob66+F8+PAUR6QveiRT0ujU2LpYV020UnTq4fjoLZhtJxqhTu3F+/mAA/S20ZGh0vAtKoPlBgW6drg6J5OaH17s4pf8sJmZbjKlRjgul4BrnY7UXDCfdeDh98bBQqwriPIcX8lkWb8kDpaQdYuXIgcjul3E0WEvNYeNnOuLAHmvs2YVTq+H5KXwFnPx8GFcnf2usCBmiauzhd8LF+/oXxrTC7GbGGdrXw5wIA/8UvofP3kduqqXJNLpmuPFsKfULJXZTychBeSXv0VVaX2sU31hvuhHVBOV0pU6U6GHY13dNcvIlACjXm3Ggq6SGtaCEcoNOdKGRODXmHgZ7XhfSWMNYgheKfKYzK3KUNdqa9NEonAcBH2DpyYRhsXmsj3WG5VUJLZq0vzUDdVCZmNKhjJm+zfgJ3A/mNMy0mCGegn68WpusTx0kMdmsxOMFr8miiwYjQU5mRXLr5055DS3EOCrHQeEFffv48wxiyMRpTD7cqOa2NAI+LuFsZHRSpVBrw3izAp6wfD2rD7Il8kN+HD/Lo7Xx+rheWkUGcw/osxfhLrqlUoKhmNEtDAUJvf++hj8G7Jl+Drkw+IJ4Fs33LavkGM7H9bzxoiCvQG+ZsNlZGwp9+/ieB0Mj9er0drYHmDeusT7BHUzzgziOCcY3nsEeBrhct/XPq7F67gB8yCRhd4jnn8F+atkK8PcYB4Rw9fKtk5ed0VUk+nHgF/f/cn4jqthotz6Whld3e8RVHgkXDbUXevfxbV1aBX0F+oFfqgB1Ajx6rGzDWKU4QzlQW2tf9+rbn6CARxdAZ6xtW58XEFuRHVBZmeE78t53PYBeH587DPje9fnymjkW5/J1gR/WvqhfoXvnqsrHk5vlH3Jstcvlyf8BPSHcsbu64GcpNeB9Hg3f3/RP96x6L/epfjru7QP6K+u7m4d/3KLYvyEp1/co89PovB/b1IQ77+SuevDj+h/AQ==","w":150,"h":120.00000000000001,"aspect":"fixed","title":"(PM) Activity (Composite)"},{"xml":"pVZbk6I4FP41Vu0+TFcI4ugjErSZNdi09gVftrh1AEFcBLn8+j0JYOPO9NZWbZc2Obcv37mEOJG1tF7nzjmkmR8kE1mfyFqeZUW3SmstSJIJRpE/kckEYwTfCV59YZWEFZ2dPDgVvwjI3DjwCvBIHJdvRoRxloDvsgT1pWiSQKhnf5Wcw9LLkiyfyCoYc+b+Bmjw0eD/aPX7pzusWPdUTk4awGOAd/ObTaCBqWjOYw9gWX7GizzS56zngx2viK5R0XQWAX6n/7PbjxsFrjCqvXEvdhKQieMFYZb4QX65q5mXpefsEhV9ZJGXfYRTFlnqFIH/T8NQdMzF+3581hHnWXnyRbAEeVUh7LA7AwdQVNB20IVFmvTmS5Fnx+At8ouw13jZqXCiU5Df5CRxzpfIFfgINH6enfdOzoKid3Fybxe13Pz9QZFm0xnCcwRfPJ+D9ZRt+t7z4DzwyvwSXYPn4NLFcG1Qn52T3wuu4x2ZyGJbFglQ6fXA7ATD5HRM+MZpUDi6Hw088qxwBjMPOGfRqRBFV5YThfB0Q8fPqt78AZn2vCXM00iSrFLzPKsuPeBHlCRaN49QWXm10shscRuWa5AXQf3lOZBGXVoHGXDNYZZQ01m/SQ+SPJvP5vL371iaSTMkB98kuYOp+n5wFKU7TygMIhYO0P0hQ04/UuyG/3n0YNGPxyD2h/FfDuZXZ8CA2t/PoPyvMwh1FiciSh0GzyUvVeQ5iZiEJz71EQDKxM0KmHVwECyWt8aPiv4h/kYYahIxHltkfJady1nkRD6img/9UmypDlo0aGDtw3DAq6AT8epyZRO8rOEoYO3p0cSHZjl13+rSa1HkPD4jj2TXjezLfqPItFGuXupdaaxWVFu0fupFxuPhfHj3NVdmCyNWGW0NZu49bBALbTWD+Tg5+mtue5HNyGDO+vV8wCF62hnIJCx6iqtws0OhoR+u7sli1rufeHhRHHZLy0vnzIym1QZw7dORWWvu8xz6+LV1sZQYGmKC4yOdbZpF6mIF2bd4JXYxYvt1Eh/elPawUwtjHSL/cdluo/n1kC5Kf72SD+/m1X17KW2I2eD6bOPX0sMv7A+d66XES82z/VaNcIAHXlTB+w+Rh0GMisYGexZ4CeyptBtt+cNNaQn8iqe4ruz358xYWwvjiBpKGNuSJYEaTg3y0m5iSwGMZrubSgahDawlM1JbemQtjcGvtfAmfhF1pa09iqF4q6lTurJrkzyTzqbLVBM4COoGT12hHIv3ZX9sdoTWNLEb2v4wTGIjq7UUU5vy/Vvwk4Qf9GkT69BDowL9dLuyOQ8D5KnVvkhmh99QTZXM1gZOVs35dT0HTisbAT7pZ0DaCv8hzpryOBozBr2vdsTCpk7B3yvNnYq2RAW9PoqzaqgFx3vj+QFfLrfgI/z7OJEfz0fw0hkyuX/MuL8MeTVbQkuOY8asNDUuD/7GFPxbuuf4BvDh8RTw7RtuV1fg2PWH17w14/DNBF+rFTIy90z493EiD44n8tVZY+4P0G9DEXWCvPnMjOLETHC81xjwdCrkoa5DXIfXzwb0g8Y2eo0F/xr4E7pXoW/Qj5jj61WXp8i7psTi+ingN5/+dPqJq2Oq3epam33erzFkeKRCNslL59/HdXnoNdQX8oX5ICHkCPHk2NtGMdq4h+oot85/qFXfP8mEGd0Cnrm3b/O4BW6UeCDzMyL2FXPc1QHm/HhfZz7vfZ1rs1VvdaZ7C/xZFUTGFd49V08+nJ4Yf8nyz0+XJ/w2DMZyzu/rkZxm15F0fzd/fdHf37Hov96l+Nd36RAwXF393Tr96RbF+AHPf3GPfn+Qpf97k4L4+fNZuN79uv4b","w":150,"h":120.00000000000001,"aspect":"fixed","title":"(PM) Activity (Composite, Automated)"},{"xml":"dVRbd6o6EP41rLX3Gxex5VFQu62V2nrvy1kBAkRDgkkQ9NfvCaK2a539IM58880lycwYTlA0LwKV+YwnmBrOyHACwbm6SkUTYEoN2ySJ4QwN2zbhZ9jjf1it1mqWSGCm/seBR3scK2BQFOlkw9bYp8D1KxAyLRi2y1CB4Q+IhjPQX9tV5/IKXdmReNCvCCT5HuKEhSSctS66pjZkm/AaXGNtzBZbttHb2imKcc5pAv4/D1V8ctrRkVAkRbH6755FM25KSzldD36/GlurP29NqvMtoMxRW4pUmMWE/lJf22TPZ9losklzJcPFCRHac6L0w7D9o3Q3qyx7OVYQVJ+b2/kSVea8jhe7i3/pFZOG5W/DwBK1f1DvSAbAW7hNAVn9GepVvcKNkG/OFT1PwD/HGcVypiNNGNrHZz84+iSMxdMk4WsVmxfwk9O39SLwx8heBa6Z/3nJ46nnhemwqebgmR1zXUp2iIu38YSdt64HTqfd/tmz6pBOvV20O6bi4KHdMG/WDDl27+t9IP9IOb0E56+iWT9t8978s/TWYQKu1nFu8YGDR4uN25vb5mX39Tqv+IrNnAUkCptwELDVuJrXY5OMqudl9TEdfZRqt2HH5+m7s80kV59hLD+KQT4e4vB8qqPV29Nhvg0I89JoYL7uoXwLLmUc1PZrWuu3cIa/oYHqnCi8KKEVAKhhPADLVaFb1tLdh+JDJnjFkvdKUcJwh7cQ1i8OjevDoya87pSMIik7ueSEKSxGJ5iSGyaV4AcccMpF2xJOf+j13T5YUkLpN3zkjJ9Gto4oUEIgws3GuK7DR5RkugdjrHMAAG2pSIzooDMUJEl03/kpZ2rR9eCjhA1JVN6dR8INEJaB1n9oS17eHK6Az5XiRYfFvCDxXWYKwe2ITk8EL5dIZFjdCZSiUpLoXoPgCin0TcdxBVN1wp9YkssNLbBCo4Sorsz7+Cnc/HMRWd8G8AVzCCHOQKm742qG1c1sjkmWd25OFwp12yC7uz7WGgjdUN/UbtHd1MdCbak/9u1f","w":110,"h":31,"aspect":"fixed","title":"(Trace) Versioned Artifact (w/ version)"},{"xml":"dVRdd6o6EP01rHXOGx9iy6Mg9lgrpfW7L3cFCBANCZIg6K8/E0Rt17rnQZzZ2XtmkkxGs7yifalQmc95gqlm+ZrlVZzLq1W0HqZUM3WSaNZYM00dfpo5+ceq0a3qJaowk/8j4NEexxIYFEUq2bhbHFLgujUYmTI002aowPAHRM0aqa9py3N5ha5sCPlNoJJ2mi7iVa2wTtRhy07eFUdRjHNOE1yJn1UXn5z2dFRJkqJY/ncCFuHsyrht01TuzxMQ8nzTihx1WYXELCb0l/zaJns+z/zpJs2lCBYnROjAitIPzXSPwt6ssuzlWENQtStu5ktU62ETL3YX9zIopi3L38aeUTXuQb4j4QFvYbcFZHXnaFAPCjtCrh5Kep6CPscZxWKuIk0Z2sdn1zu6JIirp2nC1zLWL6ATs7f1wnMnyFx5tp7/ecnjmeME6bitQ1Bmx1yVkh3i4m0yZeet7YDotNs/O0YT0Jmzi3bHtDo4aDfO2zVDljn4eh+JP0LMLt75q2jXT9t8EH6WzjpIQGocQ4OPLOwvNvYgNPXL7us1rPmKza0FJAraYOSx1aQOm4lO/Pp5WX/M/I9S7jbs+Dx7t7aZ4PIziMVHMconYxycT020ens6hFuPMCeNRvrrHso34FAmXmO+po26C2v8G9qjyYnEixJuHYAGWh2wXBaq/QwwIxQfsorXLHmvJSUM93gHYXXj0IQuXGrCm97JKBKit0tOmMSVf4KOv2FCVvyAPU551bWENRw7Q3sIKymh9BvuW5Mn31QRK5QQiHBbY1zV4SJKMgZujFUOAKAdJYkRHfULBUkS1Xduyplc9D34KGFDEpn3+xFwAoRl4A0f3pKXN8EVcLmUvOixmBckvttMIjidqveTipdLVGVY3gmUolKQ6F5DheMaXs8Jf2JBLneUSyTRg1VgifyEyL7M60tT+8TtP4eK8e0BvmAOIaozUJp+u4phXAePnmOS5b3M6kOh/uFnd+ljRIHRP+qb2w+tm/sYjh31x+z8Cw==","w":110,"h":31,"aspect":"fixed","title":"(Trace) Versioned Artifact"},{"xml":"dVJNbwIhEP01XBs+thqPda2empjae4MydaksYwBb7a8vC4vupvVAMm/mvXkDAxF1e145eWxeUIEh4pmI2iGGHLXnGowhnGpFxIJwTuMhfHmnylKVHqUDG/4R4PYTdiEyjNx2ZotUTJL2FQ3kjPfvRttDLpTWiTd29eFSJKD2sOkhJWIOVj05h98Rbg3uDm+NtjHdhLZzZTH8QBs2+qcTsA774PAANRp0qaWYzKo5j35zhyerQPWdlfRNAqwHaxkCOJsynFbZfKlNMcrX6Aa8+0ZscLcVYAvBXSLFgZFBf4110me4v/Ku0jVq2z3uJTMqOlZ4PLkd9KThEovuXHQPlIpHPqsYm06q6bhLkG4P4U+XGAxmv6XSqgrs11/g7Ztl9fAX/gI=","w":40.0035294117647,"h":40,"aspect":"fixed","title":"Trace - S/S Link"},{"xml":"dZLdTsMwDIWfJvdpA72HDnY1CbEHQFnjdoG0npxstDw9+Wm3VLBKlXLs88VOHCbqftySPB13qMAw8cJETYgurfqxBmNYybViYsPKkvufla93skXM8pMkGNw/AB4+oXHeYeQhFNvEZET6dzSQIgn/uABZjUPKLxWifV3cumkhQXWwnyVn4hkG9USE3142RlqrGx88uj6ULvyyxcHt9U+wF4uu0SDF7QSPX4hrY7J427ZlE7ayjvALsoyqDtVj5TOE50GBmvtIZwjd3b2nIjvYFrAHR5O3EBjp9GXNSZtkd/Vd0TfUQ7jgKTke+JqweKYGZlM+yIUbZ06sOSepA/eH84us21soTmaR89AXeXtcic7f3i8=","w":43,"h":40,"aspect":"fixed","title":"(Trace) Parent Version"},{"xml":"dVLbboMwDP2avE4BtGqvK9v6VFVavyAEj2TNBQW3wL5+DgnrKrUPKD7H59ixA6tqO+2C6NXet2BY9c6qOniPKbJTDcawkuuWVW+sLDl9rPx4kC2WLO9FAId3DL75BomkMKKJzaJAemujOjntpzdwJ7F2KCO8bT7gvFoGJfoYOo90bEelEY69kJEbaUjiFNrYuKCwEfLUBX927eGMRjvIfCvC6UAujTMx/Ik/EymM7hxBA1802fYCAbUU5jXT6GPxQf8sRWKVdO+og+nhdop/4+zAW8Awk2TULaqkeEkL5Ap0p7Jrs0mcGBLu/pzXVVOQN7TCvPwVXh95kd78A78=","w":80,"h":66,"aspect":"fixed","title":"Comment"},{"xml":"dZLdbsMgDIWfhvv8qA+wpluvKk19gYoGKzABrhx3Sd5+BEKbaO1FJB/b3zE4iLpx45HkTZ9QgRX1p6gbQuQUubEBa0VVGCXqg6iqInyi+npTLWO1uEkCzy8AvP5Ay6HDyus87BCLEXFntJAyLToX+AuoDlI1+8fm7eiep8yBVx9EOATl0YfkXslew8yWQWh2dgmTa/R/d+5yNeoI6IBpCi2DUaxTxy5drdBgOs3bHIGVbH639rJPsnvYPSZ8o/HzXqatTSZ6vFMLS9N6/5kbX3MsqQP+x4VgdalnKq40y+VfZfl8E4leP5k/","w":50,"h":50,"aspect":"fixed","title":"Comment Edge"}]</mxlibrary>`;
- ui.loadLibrary(new LocalLibrary(ui, encodedLib, "FTG+PM (plugin, hardcoded)"));
- // For debugging only
- window.ui = ui;
- });
|