From 739c7c144cbbc06b48fac2878f37b4ad24f099e2 Mon Sep 17 00:00:00 2001 From: Roman Bruckner Date: Fri, 20 Oct 2023 16:57:10 +0200 Subject: [PATCH] Release v3.7.6 (#2362) --- CHANGELOG | 14 + dist/geometry.js | 12 +- dist/geometry.min.js | 4 +- dist/joint.core.css | 2 +- dist/joint.core.js | 998 ++++++++++++++++++++----- dist/joint.core.min.css | 2 +- dist/joint.core.min.js | 4 +- dist/joint.css | 2 +- dist/joint.d.ts | 8 +- dist/joint.js | 998 ++++++++++++++++++++----- dist/joint.layout.DirectedGraph.js | 2 +- dist/joint.layout.DirectedGraph.min.js | 2 +- dist/joint.min.css | 2 +- dist/joint.min.js | 4 +- dist/joint.nowrap.js | 998 ++++++++++++++++++++----- dist/joint.nowrap.min.js | 4 +- dist/joint.shapes.chess.js | 2 +- dist/joint.shapes.chess.min.js | 2 +- dist/joint.shapes.devs.js | 2 +- dist/joint.shapes.devs.min.js | 2 +- dist/joint.shapes.erd.js | 2 +- dist/joint.shapes.erd.min.js | 2 +- dist/joint.shapes.fsa.js | 2 +- dist/joint.shapes.fsa.min.js | 2 +- dist/joint.shapes.logic.js | 2 +- dist/joint.shapes.logic.min.js | 2 +- dist/joint.shapes.org.js | 2 +- dist/joint.shapes.org.min.js | 2 +- dist/joint.shapes.pn.js | 2 +- dist/joint.shapes.pn.min.js | 2 +- dist/joint.shapes.uml.js | 2 +- dist/joint.shapes.uml.min.js | 2 +- dist/vectorizer.js | 136 +++- dist/vectorizer.min.js | 4 +- dist/version.mjs | 2 +- package-lock.json | 88 +-- package.json | 14 +- 37 files changed, 2634 insertions(+), 698 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 663a75bbc..41f5bb2bd 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,17 @@ +20-10-2023 (v3.7.6) + + * dia.Cell - make prop()'s internal set() call more efficient + * dia.LinkView - fix to prevent hidden doubleLinkTools to affect link bounding box + * dia.attributes - fix to read all breakText options in textWrap attribute + * dia.attributes - fix ambiguous order of cache keys in text attribute + * connectors.Curve - fix wrong target tangent right direction + * linkTools.Segments - throw explicit error when incompatible router in use + * shapes.standard - fix cursor style on DoubleLink and ShadowLink + * util.breakText - fix to use the defined separator to join words + * util.breakText - fix to allow empty string to be separator + * Geometry - prevent unnecessary object instantiation in Rect.prototype.containsPoint() + * Geometry - prevent rounding errors in simplify() of Polyline + 02-08-2023 (v3.7.5) * layout.PortLabel - fix passing of `label.position.args.attrs` in `inside`, `outside`, `radial` layouts diff --git a/dist/geometry.js b/dist/geometry.js index 1ade37ad0..a1d681516 100644 --- a/dist/geometry.js +++ b/dist/geometry.js @@ -1,4 +1,4 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public @@ -1219,7 +1219,10 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. // @return {bool} true if point p is inside me. containsPoint: function(p) { - p = new Point(p); + + if (!(p instanceof Point)) { + p = new Point(p); + } return p.x >= this.x && p.x <= this.x + this.width && p.y >= this.y && p.y <= this.y + this.height; }, @@ -2230,7 +2233,10 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. if (points.length < 3) { return this; } // we need at least 3 points // TODO: we may also accept startIndex and endIndex to specify where to start and end simplification - var threshold = opt.threshold || 0; // = max distance of middle point from chord to be simplified + + // Due to the nature of the algorithm, we do not use 0 as the default value for `threshold` + // because of the rounding errors that can occur when comparing distances. + var threshold = opt.threshold || 1e-10; // = max distance of middle point from chord to be simplified // start at the beginning of the polyline and go forward var currentIndex = 0; diff --git a/dist/geometry.min.js b/dist/geometry.min.js index 23f13bea4..4b0617849 100644 --- a/dist/geometry.min.js +++ b/dist/geometry.min.js @@ -1,8 +1,8 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((t=t||self).g={})}(this,function(t){"use strict";var e=Math.round,i=Math.floor,r=Math.PI,o=function(t){return t%360+(t<0?360:0)},s=function(t,n){return n*e(t/n)},c=function(t){return 180*t/r%360},l=function(t,n){return(t=(n=n||!1)?t:t%360)*r/180},h=function(t,n){if(void 0===n)n=void 0===t?1:t,t=0;else if(ni)&&!(new R(t,e).length()>i)},divideAt:function(t){var n=this.pointAt(t);return[new R(this.start,n),new R(n,this.end)]},divideAtLength:function(t){var n=this.pointAtLength(t);return[new R(this.start,n),new R(n,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,n){if(t&&t.intersectionWithLine){var e=t.intersectionWithLine(this,n);return e&&t instanceof R&&(e=e[0]),e}return null},intersectionWithLine:function(t){var n=new E(this.end.x-this.start.x,this.end.y-this.start.y),e=new E(t.end.x-t.start.x,t.end.y-t.start.y),i=n.x*e.y-n.y*e.x,r=new E(t.start.x-this.start.x,t.start.y-this.start.y),s=r.x*e.y-r.y*e.x,o=r.x*n.y-r.y*n.x;if(0===i||s*i<0||o*i<0)return null;if(0h.x+s/2,l=ih.x?r-30:r+30)-a)/(o*o*(i-u))+u:n=o*o/(r-a)-o*o*(i-u)*((e=r>h.y?i+30:i-30)-u)/(s*s*(r-a))+a,new E(e,n).theta(t)},toString:function(){return new E(this.x,this.y).toString()+" "+this.a+" "+this.b}};var z=q,W=Math.abs,j=Math.cos,k=Math.sin,V=Math.min,F=Math.max,Z=Math.round,B=Math.pow,G=function(t,n,e,i){if(!(this instanceof G))return new G(t,n,e,i);Object(t)===t&&(n=t.y,e=t.width,i=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===n?0:n,this.width=void 0===e?0:e,this.height=void 0===i?0:i};G.fromEllipse=function(t){return t=new q(t),new G(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},G.fromPointUnion=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];if(0===t.length)return null;var e,i,r,s,o=new E;e=i=1/0,r=s=-1/0;for(var h=0;h=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var n=new G(this).normalize(),e=new G(t).normalize(),i=n.width,r=n.height,s=e.width,o=e.height;if(!(i&&r&&s&&o))return!1;var h=n.x,u=n.y,a=e.x,c=e.y;return s+=a,i+=h,o+=c,r+=u,h<=a&&s<=i&&u<=c&&o<=r},corner:function(){return new E(this.x+this.width,this.y+this.height)},equals:function(t){var n=new G(this).normalize(),e=new G(t).normalize();return n.x===e.x&&n.y===e.y&&n.width===e.width&&n.height===e.height},inflate:function(t,n){return void 0===t&&(t=0),void 0===n&&(n=t),this.x-=t,this.y-=n,this.width+=2*t,this.height+=2*n,this},intersect:function(t){var n=this.origin(),e=this.corner(),i=t.origin(),r=t.corner();if(r.x<=n.x||r.y<=n.y||i.x>=e.x||i.y>=e.y)return null;var s=F(n.x,i.x),o=F(n.y,i.y);return new G(s,o,V(e.x,r.x)-s,V(e.y,r.y)-o)},intersectionWithLine:function(t){var n,e,i=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],r=[],s=[],o=i.length;for(e=0;ec&&(i=(this.x+this.width-c)/(d.x-c)),d.y>l&&(h=(this.y+this.height-l)/(d.y-l));var g=t.topRight();g.x>c&&(r=(this.x+this.width-c)/(g.x-c)),g.yl&&(a=(this.y+this.height-l)/(v.y-l)),{sx:V(e,i,r,s),sy:V(o,h,u,a)}},maxRectUniformScaleToFit:function(t,n){var e=this.maxRectScaleToFit(t,n);return V(e.sx,e.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,n=this.y,e=this.width,i=this.height;return this.width<0&&(t=this.x+this.width,e=-this.width),this.height<0&&(n=this.y+this.height,i=-this.height),this.x=t,this.y=n,this.width=e,this.height=i,this},offset:function(t,n){return E.prototype.offset.call(this,t,n)},origin:function(){return new E(this.x,this.y)},pointNearestToPoint:function(t){if(t=new E(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new E(this.x+this.width,t.y);case"left":return new E(this.x,t.y);case"bottom":return new E(t.x,this.y+this.height);case"top":return new E(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new R(this.topRight(),this.bottomRight())},rightMiddle:function(){return new E(this.x+this.width,this.y+this.height/2)},round:function(t){var n=1;if(t)switch(t){case 1:n=10;break;case 2:n=100;break;case 3:n=1e3;break;default:n=B(10,t)}return this.x=Z(this.x*n)/n,this.y=Z(this.y*n)/n,this.width=Z(this.width*n)/n,this.height=Z(this.height*n)/n,this},scale:function(t,n,e){return e=this.origin().scale(t,n,e),this.x=e.x,this.y=e.y,this.width*=t,this.height*=n,this},sideNearestToPoint:function(t){var n=(t=new E(t)).x-this.x,e=this.x+this.width-t.x,i=t.y-this.y,r=n,s="left";return ei.x&&(i=t[n]);var o=[];for(n=0;nf.y||r>l.y&&r<=f.y){var d=l.x-i>f.x-i?l.x-i:f.x-i;0<=d&&(c.x=i+d,c.y=r,a.start=t,a.end=c,u.intersect(a)&&h++)}s=o}return h%2==1},close:function(){var t=this.start,n=this.end,e=this.points;return t&&n&&!t.equals(n)&&e.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new J(H(this.points))},equals:function(t){if(!t)return!1;var n=this.points,e=t.points,i=n.length;if(e.length!==i)return!1;for(var r=0;rr+o&&i.x>r+o||e.xs+h&&i.y>s+h||e.yn.x&&t.yn.y}function Pt(t,n){return jt(t,n,{interior:!1})}function At(t,n){return kt(t,n,{interior:!1})}function Lt(t,n){return Vt(t,n,{interior:!1})}function Et(t,n){return Zt(t,n,{interior:!1})}function Tt(t,n){return jt(t,n,{interior:!0})}function It(t,n){return kt(t,n,{interior:!0})}function Ct(t,n){return Vt(t,n,{interior:!0})}function Rt(t,n){return Zt(t,n,{interior:!0})}function Dt(t,n){return Bt(t,n,{interior:!0})}function Mt(t,e,i){return t.getSubpaths().some(function(t){var n=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?Tt(n,e):Pt(n,e)})}function Ot(t,e,i){return t.getSubpaths().some(function(t){var n=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?It(n,e):At(n,e)})}function Nt(t,n,e){return zt(t,pt.fromRect(n),e)}function qt(t,n,e){return Ft(t,n,e,{interior:!1})}function zt(t,n,e){return Ft(t,n,e,{interior:!0})}function Wt(t,e,i,r){return t.getSubpaths().some(function(t){var n=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?zt(e,n,r):qt(e,n,r)})}function jt(t,n,e){void 0===e&&(e={});var i,r=e.interior;if(void 0===r&&(r=!1),r){if(t.containsPoint(n.start))return!0;var s=t.start,o=t.end,h=t.points;i=o.equals(s)?h:h.concat([s])}else i=t.points;for(var u=i.length,a=new R,c=0;ci)&&!(new R(t,e).length()>i)},divideAt:function(t){var n=this.pointAt(t);return[new R(this.start,n),new R(n,this.end)]},divideAtLength:function(t){var n=this.pointAtLength(t);return[new R(this.start,n),new R(n,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,n){if(t&&t.intersectionWithLine){var e=t.intersectionWithLine(this,n);return e&&t instanceof R&&(e=e[0]),e}return null},intersectionWithLine:function(t){var n=new E(this.end.x-this.start.x,this.end.y-this.start.y),e=new E(t.end.x-t.start.x,t.end.y-t.start.y),i=n.x*e.y-n.y*e.x,r=new E(t.start.x-this.start.x,t.start.y-this.start.y),s=r.x*e.y-r.y*e.x,o=r.x*n.y-r.y*n.x;if(0===i||s*i<0||o*i<0)return null;if(0h.x+s/2,l=ih.x?r-30:r+30)-a)/(o*o*(i-u))+u:n=o*o/(r-a)-o*o*(i-u)*((e=r>h.y?i+30:i-30)-u)/(s*s*(r-a))+a,new E(e,n).theta(t)},toString:function(){return new E(this.x,this.y).toString()+" "+this.a+" "+this.b}};var z=q,W=Math.abs,j=Math.cos,k=Math.sin,V=Math.min,F=Math.max,Z=Math.round,B=Math.pow,G=function(t,n,e,i){if(!(this instanceof G))return new G(t,n,e,i);Object(t)===t&&(n=t.y,e=t.width,i=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===n?0:n,this.width=void 0===e?0:e,this.height=void 0===i?0:i};G.fromEllipse=function(t){return t=new q(t),new G(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},G.fromPointUnion=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];if(0===t.length)return null;var e,i,r,s,o=new E;e=i=1/0,r=s=-1/0;for(var h=0;h=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var n=new G(this).normalize(),e=new G(t).normalize(),i=n.width,r=n.height,s=e.width,o=e.height;if(!(i&&r&&s&&o))return!1;var h=n.x,u=n.y,a=e.x,c=e.y;return s+=a,i+=h,o+=c,r+=u,h<=a&&s<=i&&u<=c&&o<=r},corner:function(){return new E(this.x+this.width,this.y+this.height)},equals:function(t){var n=new G(this).normalize(),e=new G(t).normalize();return n.x===e.x&&n.y===e.y&&n.width===e.width&&n.height===e.height},inflate:function(t,n){return void 0===t&&(t=0),void 0===n&&(n=t),this.x-=t,this.y-=n,this.width+=2*t,this.height+=2*n,this},intersect:function(t){var n=this.origin(),e=this.corner(),i=t.origin(),r=t.corner();if(r.x<=n.x||r.y<=n.y||i.x>=e.x||i.y>=e.y)return null;var s=F(n.x,i.x),o=F(n.y,i.y);return new G(s,o,V(e.x,r.x)-s,V(e.y,r.y)-o)},intersectionWithLine:function(t){var n,e,i=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],r=[],s=[],o=i.length;for(e=0;ec&&(i=(this.x+this.width-c)/(d.x-c)),d.y>l&&(h=(this.y+this.height-l)/(d.y-l));var g=t.topRight();g.x>c&&(r=(this.x+this.width-c)/(g.x-c)),g.yl&&(a=(this.y+this.height-l)/(v.y-l)),{sx:V(e,i,r,s),sy:V(o,h,u,a)}},maxRectUniformScaleToFit:function(t,n){var e=this.maxRectScaleToFit(t,n);return V(e.sx,e.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,n=this.y,e=this.width,i=this.height;return this.width<0&&(t=this.x+this.width,e=-this.width),this.height<0&&(n=this.y+this.height,i=-this.height),this.x=t,this.y=n,this.width=e,this.height=i,this},offset:function(t,n){return E.prototype.offset.call(this,t,n)},origin:function(){return new E(this.x,this.y)},pointNearestToPoint:function(t){if(t=new E(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new E(this.x+this.width,t.y);case"left":return new E(this.x,t.y);case"bottom":return new E(t.x,this.y+this.height);case"top":return new E(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new R(this.topRight(),this.bottomRight())},rightMiddle:function(){return new E(this.x+this.width,this.y+this.height/2)},round:function(t){var n=1;if(t)switch(t){case 1:n=10;break;case 2:n=100;break;case 3:n=1e3;break;default:n=B(10,t)}return this.x=Z(this.x*n)/n,this.y=Z(this.y*n)/n,this.width=Z(this.width*n)/n,this.height=Z(this.height*n)/n,this},scale:function(t,n,e){return e=this.origin().scale(t,n,e),this.x=e.x,this.y=e.y,this.width*=t,this.height*=n,this},sideNearestToPoint:function(t){var n=(t=new E(t)).x-this.x,e=this.x+this.width-t.x,i=t.y-this.y,r=n,s="left";return ei.x&&(i=t[n]);var o=[];for(n=0;nf.y||r>l.y&&r<=f.y){var d=l.x-i>f.x-i?l.x-i:f.x-i;0<=d&&(c.x=i+d,c.y=r,a.start=t,a.end=c,u.intersect(a)&&h++)}s=o}return h%2==1},close:function(){var t=this.start,n=this.end,e=this.points;return t&&n&&!t.equals(n)&&e.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new J(H(this.points))},equals:function(t){if(!t)return!1;var n=this.points,e=t.points,i=n.length;if(e.length!==i)return!1;for(var r=0;rr+o&&i.x>r+o||e.xs+h&&i.y>s+h||e.yn.x&&t.yn.y}function Pt(t,n){return jt(t,n,{interior:!1})}function At(t,n){return kt(t,n,{interior:!1})}function Lt(t,n){return Vt(t,n,{interior:!1})}function Et(t,n){return Zt(t,n,{interior:!1})}function Tt(t,n){return jt(t,n,{interior:!0})}function It(t,n){return kt(t,n,{interior:!0})}function Ct(t,n){return Vt(t,n,{interior:!0})}function Rt(t,n){return Zt(t,n,{interior:!0})}function Dt(t,n){return Bt(t,n,{interior:!0})}function Mt(t,e,i){return t.getSubpaths().some(function(t){var n=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?Tt(n,e):Pt(n,e)})}function Ot(t,e,i){return t.getSubpaths().some(function(t){var n=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?It(n,e):At(n,e)})}function Nt(t,n,e){return zt(t,pt.fromRect(n),e)}function qt(t,n,e){return Ft(t,n,e,{interior:!1})}function zt(t,n,e){return Ft(t,n,e,{interior:!0})}function Wt(t,e,i,r){return t.getSubpaths().some(function(t){var n=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?zt(e,n,r):qt(e,n,r)})}function jt(t,n,e){void 0===e&&(e={});var i,r=e.interior;if(void 0===r&&(r=!1),r){if(t.containsPoint(n.start))return!0;var s=t.start,o=t.end,h=t.points;i=o.equals(s)?h:h.concat([s])}else i=t.points;for(var u=i.length,a=new R,c=0;c= this.x && p.x <= this.x + this.width && p.y >= this.y && p.y <= this.y + this.height; }, @@ -3730,7 +3733,10 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. if (points.length < 3) { return this; } // we need at least 3 points // TODO: we may also accept startIndex and endIndex to specify where to start and end simplification - var threshold = opt.threshold || 0; // = max distance of middle point from chord to be simplified + + // Due to the nature of the algorithm, we do not use 0 as the default value for `threshold` + // because of the rounding errors that can occur when comparing distances. + var threshold = opt.threshold || 1e-10; // = max distance of middle point from chord to be simplified // start at the beginning of the polyline and go forward var currentIndex = 0; @@ -8636,15 +8642,19 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. */ VPrototype.removeAttr = function(name) { - var qualifiedName = V.qualifyAttr(name); + var trueName = attributeNames[name]; + + var ref = V.qualifyAttr(trueName); + var ns = ref.ns; + var local = ref.local; var el = this.node; - if (qualifiedName.ns) { - if (el.hasAttributeNS(qualifiedName.ns, qualifiedName.local)) { - el.removeAttributeNS(qualifiedName.ns, qualifiedName.local); + if (ns) { + if (el.hasAttributeNS(ns, local)) { + el.removeAttributeNS(ns, local); } - } else if (el.hasAttribute(name)) { - el.removeAttribute(name); + } else if (el.hasAttribute(trueName)) { + el.removeAttribute(trueName); } return this; }; @@ -8665,7 +8675,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (V.isString(name) && V.isUndefined(value)) { - return this.node.getAttribute(name); + return this.node.getAttribute(attributeNames[name]); } if (typeof name === 'object') { @@ -9241,16 +9251,18 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return this; } - var qualifiedName = V.qualifyAttr(name); + var trueName = attributeNames[name]; - if (qualifiedName.ns) { + var ref = V.qualifyAttr(trueName); + var ns = ref.ns; + if (ns) { // Attribute names can be namespaced. E.g. `image` elements // have a `xlink:href` attribute to set the source of the image. - el.setAttributeNS(qualifiedName.ns, name, value); - } else if (name === 'id') { + el.setAttributeNS(ns, trueName, value); + } else if (trueName === 'id') { el.id = value; } else { - el.setAttribute(name, value); + el.setAttribute(trueName, value); } return this; @@ -9359,6 +9371,100 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return xml; }; + // Create an empty object which does not inherit any properties from `Object.prototype`. + // This is useful when we want to use an object as a dictionary without having to + // worry about inherited properties such as `toString`, `valueOf` etc. + var _attributeNames = Object.create(null); + + // List of attributes for which not to split camel case words. + // It contains known SVG attribute names and may be extended with user-defined attribute names. + [ + 'baseFrequency', + 'baseProfile', + 'clipPathUnits', + 'contentScriptType', + 'contentStyleType', + 'diffuseConstant', + 'edgeMode', + 'externalResourcesRequired', + 'filterRes', // deprecated + 'filterUnits', + 'gradientTransform', + 'gradientUnits', + 'kernelMatrix', + 'kernelUnitLength', + 'keyPoints', + 'lengthAdjust', + 'limitingConeAngle', + 'markerHeight', + 'markerUnits', + 'markerWidth', + 'maskContentUnits', + 'maskUnits', + 'numOctaves', + 'pathLength', + 'patternContentUnits', + 'patternTransform', + 'patternUnits', + 'pointsAtX', + 'pointsAtY', + 'pointsAtZ', + 'preserveAlpha', + 'preserveAspectRatio', + 'primitiveUnits', + 'refX', + 'refY', + 'requiredExtensions', + 'requiredFeatures', + 'specularConstant', + 'specularExponent', + 'spreadMethod', + 'startOffset', + 'stdDeviation', + 'stitchTiles', + 'surfaceScale', + 'systemLanguage', + 'tableValues', + 'targetX', + 'targetY', + 'textLength', + 'viewBox', + 'viewTarget', // deprecated + 'xChannelSelector', + 'yChannelSelector', + 'zoomAndPan' // deprecated + ].forEach(function (name) { return _attributeNames[name] = name; }); + + var attributeNames = new Proxy(_attributeNames, { + get: function get(cache, name) { + // The cache is a dictionary of attribute names. See `_attributeNames` above. + // If the attribute name is not in the cache, it means that it is not + // a camel-case attribute name. In that case, we need to convert + // the attribute name to dash-separated words. + if (!V.supportCamelCaseAttributes) { return name; } + if (name in cache) { + return cache[name]; + } + // Convert camel case to dash-separated words. + return (cache[name] = name.replace(/[A-Z]/g, '-$&').toLowerCase()); + } + }); + + // Note: The `attributeNames` and `supportCamelCaseAttributes` properties are not enumerable + // in this version to avoid breaking changes. They will be made enumerable in the next major version. + + // Dictionary of attribute names + Object.defineProperty(V, 'attributeNames', { + value: attributeNames, + writable: false, + }); + + // Should camel case attributes be supported? + Object.defineProperty(V, 'supportCamelCaseAttributes', { + value: false, + writable: true, + }); + /** * @param {string} name * @returns {{ns: string|null, local: string}} namespace and attribute name @@ -13563,7 +13669,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var preserveSpaces = opt.preserveSpaces; var space = ' '; - var separator = opt.separator || space; + var separator = (opt.separator || opt.separator === '') ? opt.separator : space; + // If separator is a RegExp, we use the space character to join words together again (not ideal) + var separatorChar = (typeof separator === 'string') ? separator : space; var eol = opt.eol || '\n'; var hyphen = opt.hyphen ? new RegExp(opt.hyphen) : /[^\w\d]/; var maxLineCount = opt.maxLineCount; @@ -13613,9 +13721,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var data = (void 0); if (preserveSpaces) { - data = lines[l] !== undefined ? lines[l] + space + word : word; + data = lines[l] !== undefined ? lines[l] + separatorChar + word : word; } else { - data = lines[l] ? lines[l] + space + word : word; + data = lines[l] ? lines[l] + separatorChar + word : word; } textNode.data = data; @@ -13626,7 +13734,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. lines[l] = data; if (p || h) { - // We were partitioning. Put rest of the word onto next line + // We were partitioning. Put rest of the word onto next line full[l++] = true; // cancel partitioning and splitting by hyphens @@ -13755,12 +13863,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var lastLine = lines[lastL]; if (!lastLine && !isEol) { break; } var k = lastLine.length; - var lastLineWithOmission, lastChar, separatorChar; + var lastLineWithOmission, lastChar; do { lastChar = lastLine[k]; lastLineWithOmission = lastLine.substring(0, k); if (!lastChar) { - separatorChar = (typeof separator === 'string') ? separator : ' '; lastLineWithOmission += separatorChar; } else if (lastChar.match(separator)) { lastLineWithOmission += lastChar; @@ -15242,38 +15349,50 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var $node = $(node); var cacheName = 'joint-text'; var cache = $node.data(cacheName); - var textAttrs = pick(attrs, 'lineHeight', 'annotations', 'textPath', 'x', 'textVerticalAnchor', 'eol', 'displayEmpty'); + var lineHeight = attrs.lineHeight; + var annotations = attrs.annotations; + var textVerticalAnchor = attrs.textVerticalAnchor; + var eol = attrs.eol; + var displayEmpty = attrs.displayEmpty; + var textPath = attrs.textPath; // eval `x` if using calc() - var x = textAttrs.x; + var x = attrs.x; if (isCalcAttribute(x)) { - textAttrs.x = evalCalcAttribute(x, refBBox); + x = evalCalcAttribute(x, refBBox); } - - var fontSizeAttr = attrs['font-size'] || attrs['fontSize']; - if (isCalcAttribute(fontSizeAttr)) { - fontSizeAttr = evalCalcAttribute(fontSizeAttr, refBBox); + // eval `font-size` if using calc() + var fontSize = attrs['font-size'] || attrs['fontSize']; + if (isCalcAttribute(fontSize)) { + fontSize = evalCalcAttribute(fontSize, refBBox); } - var fontSize = textAttrs.fontSize = fontSizeAttr; - var textHash = JSON.stringify([text, textAttrs]); // Update the text only if there was a change in the string // or any of its attributes. + var textHash = JSON.stringify([text, lineHeight, annotations, textVerticalAnchor, eol, displayEmpty, textPath, x, fontSize]); if (cache === undefined || cache !== textHash) { // Chrome bug: - // Tspans positions defined as `em` are not updated + // positions defined as `em` are not updated // when container `font-size` change. if (fontSize) { node.setAttribute('font-size', fontSize); } // Text Along Path Selector - var textPath = textAttrs.textPath; if (isObject$1(textPath)) { var pathSelector = textPath.selector; if (typeof pathSelector === 'string') { - var pathNode = this.findBySelector(pathSelector)[0]; + var ref = this.findBySelector(pathSelector); + var pathNode = ref[0]; if (pathNode instanceof SVGPathElement) { - textAttrs.textPath = assign({ 'xlink:href': '#' + pathNode.id }, textPath); + textPath = assign({ 'xlink:href': '#' + pathNode.id }, textPath); } } } - V(node).text('' + text, textAttrs); + V(node).text('' + text, { + lineHeight: lineHeight, + annotations: annotations, + textPath: textPath, + x: x, + textVerticalAnchor: textVerticalAnchor, + eol: eol, + displayEmpty: displayEmpty + }); $node.data(cacheName, textHash); } } @@ -15331,6 +15450,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. svgDocument: this.paper.svg, ellipsis: value.ellipsis, hyphen: value.hyphen, + separator: value.separator, maxLineCount: value.maxLineCount, preserveSpaces: value.preserveSpaces }); @@ -16256,7 +16376,16 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. options.rewrite = false; } - return this.set(merge({}, this.attributes, props), options); + // Create a new object containing only the changed attributes. + var changedAttributes = {}; + for (var key in props) { + // Merging the values of changed attributes with the current ones. + var ref = merge({}, { changedValue: this.attributes[key] }, { changedValue: props[key] }); + var changedValue = ref.changedValue; + changedAttributes[key] = changedValue; + } + + return this.set(changedAttributes, options); }, // A convenient way to unset nested properties @@ -23391,13 +23520,15 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. tagName: 'path', selector: 'outline', attributes: { - 'fill': 'none' + 'fill': 'none', + 'cursor': 'pointer' } }, { tagName: 'path', selector: 'line', attributes: { - 'fill': 'none' + 'fill': 'none', + 'pointer-events': 'none' } }] }); @@ -23445,13 +23576,15 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. tagName: 'path', selector: 'shadow', attributes: { - 'fill': 'none' + 'fill': 'none', + 'pointer-events': 'none' } }, { tagName: 'path', selector: 'line', attributes: { - 'fill': 'none' + 'fill': 'none', + 'cursor': 'pointer' } }] }); @@ -24540,7 +24673,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. case TangentDirections.LEFT: return new Point(-1, 0); case TangentDirections.RIGHT: - return new Point(0, 1); + return new Point(1, 0); case TangentDirections.AUTO: return getAutoTargetDirection(linkView, route, options); case TangentDirections.CLOSEST_POINT: @@ -26828,74 +26961,45 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var DEFINED_DIRECTIONS = [Directions$2.LEFT, Directions$2.RIGHT, Directions$2.TOP, Directions$2.BOTTOM]; - function getDirectionForLinkConnection(linkOrigin, connectionPoint, linkView) { - var tangent = linkView.getTangentAtLength(linkView.getClosestPointLength(connectionPoint)); - var roundedAngle = Math.round(tangent.angle() / 90) * 90; + var OPPOSITE_DIRECTIONS = {}; + OPPOSITE_DIRECTIONS[Directions$2.LEFT] = Directions$2.RIGHT; + OPPOSITE_DIRECTIONS[Directions$2.RIGHT] = Directions$2.LEFT; + OPPOSITE_DIRECTIONS[Directions$2.TOP] = Directions$2.BOTTOM; + OPPOSITE_DIRECTIONS[Directions$2.BOTTOM] = Directions$2.TOP; - switch (roundedAngle) { - case 0: - case 360: - return linkOrigin.y < connectionPoint.y ? Directions$2.TOP : Directions$2.BOTTOM; - case 90: - return linkOrigin.x < connectionPoint.x ? Directions$2.LEFT : Directions$2.RIGHT; - case 180: - return linkOrigin.y < connectionPoint.y ? Directions$2.TOP : Directions$2.BOTTOM; - case 270: - return linkOrigin.x < connectionPoint.x ? Directions$2.LEFT : Directions$2.RIGHT; - } - } - - function rightAngleRouter(_vertices, opt, linkView) { - var margin = opt.margin || 20; - var sourceDirection = opt.sourceDirection; if ( sourceDirection === void 0 ) sourceDirection = Directions$2.AUTO; - var targetDirection = opt.targetDirection; if ( targetDirection === void 0 ) targetDirection = Directions$2.AUTO; + var VERTICAL_DIRECTIONS = [Directions$2.TOP, Directions$2.BOTTOM]; - var sourceView = linkView.sourceView; - var targetView = linkView.targetView; - - var isSourcePort = !!linkView.model.source().port; - var isTargetPort = !!linkView.model.target().port; - - if (sourceDirection === Directions$2.AUTO) { - sourceDirection = isSourcePort ? Directions$2.MAGNET_SIDE : Directions$2.ANCHOR_SIDE; - } - - if (targetDirection === Directions$2.AUTO) { - targetDirection = isTargetPort ? Directions$2.MAGNET_SIDE : Directions$2.ANCHOR_SIDE; - } - - var sourceBBox = linkView.sourceBBox; - var targetBBox = linkView.targetBBox; - var sourcePoint = linkView.sourceAnchor; - var targetPoint = linkView.targetAnchor; - var ref = sourceView && sourceView.model.isElement() ? Rect.fromRectUnion(sourceBBox, sourceView.model.getBBox()) : linkView.sourceAnchor; - var sx0 = ref.x; - var sy0 = ref.y; - var sourceWidth = ref.width; if ( sourceWidth === void 0 ) sourceWidth = 0; - var sourceHeight = ref.height; if ( sourceHeight === void 0 ) sourceHeight = 0; - - var ref$1 = targetView && targetView.model.isElement() ? Rect.fromRectUnion(targetBBox, targetView.model.getBBox()) : linkView.targetAnchor; - var tx0 = ref$1.x; - var ty0 = ref$1.y; - var targetWidth = ref$1.width; if ( targetWidth === void 0 ) targetWidth = 0; - var targetHeight = ref$1.height; if ( targetHeight === void 0 ) targetHeight = 0; + var ANGLE_DIRECTION_MAP = { + 0: Directions$2.RIGHT, + 180: Directions$2.LEFT, + 270: Directions$2.TOP, + 90: Directions$2.BOTTOM + }; - var tx1 = tx0 + targetWidth; - var ty1 = ty0 + targetHeight; - var sx1 = sx0 + sourceWidth; - var sy1 = sy0 + sourceHeight; + function getSegmentAngle(line) { + // TODO: the angle() method is general and therefore unnecessarily heavy for orthogonal links + return line.angle(); + } - // Key coordinates including the margin - var smx0 = sx0 - margin; - var smx1 = sx1 + margin; - var smy0 = sy0 - margin; - var smy1 = sy1 + margin; - var tmx0 = tx0 - margin; - var tmx1 = tx1 + margin; - var tmy0 = ty0 - margin; - var tmy1 = ty1 + margin; + function simplifyPoints(points) { + // TODO: use own more efficient implementation (filter points that do not change direction). + // To simplify segments that are almost aligned (start and end points differ by e.g. 0.5px), use a threshold of 1. + return new Polyline(points).simplify({ threshold: 1 }).points; + } - var sourceOutsidePoint = sourcePoint.clone(); + function resolveSides(source, target) { + var sourcePoint = source.point; + var sx0 = source.x0; + var sy0 = source.y0; + var sourceView = source.view; + var sourceBBox = source.bbox; + var sourceDirection = source.direction; + var targetPoint = target.point; + var tx0 = target.x0; + var ty0 = target.y0; + var targetView = target.view; + var targetBBox = target.bbox; + var targetDirection = target.direction; var sourceSide; @@ -26912,26 +27016,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. sourceSide = sourceDirection; } - switch (sourceSide) { - case 'left': - sourceOutsidePoint.x = smx0; - break; - case 'right': - sourceOutsidePoint.x = smx1; - break; - case 'top': - sourceOutsidePoint.y = smy0; - break; - case 'bottom': - sourceOutsidePoint.y = smy1; - break; - } - var targetOutsidePoint = targetPoint.clone(); - - var targetSide; - if (!targetView) { var targetLinkAnchorBBox = new Rect(tx0, ty0, 0, 0); targetSide = DEFINED_DIRECTIONS.includes(targetDirection) ? targetDirection : targetLinkAnchorBBox.sideNearestToPoint(sourcePoint); @@ -26945,21 +27031,319 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. targetSide = targetDirection; } - switch (targetSide) { + return [sourceSide, targetSide]; + } + + function resolveForTopSourceSide(source, target, nextInLine) { + var sx0 = source.x0; + var sy0 = source.y0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx0 = sx0 - margin; + var smx1 = sx1 + margin; + var smy0 = sy0 - margin; + + var ax = anchor.x; + var tx = target.x0; + var ty = target.y0; + + if (tx === ax && ty < sy0) { return Directions$2.BOTTOM; } + if (tx < ax && ty < smy0) { return Directions$2.RIGHT; } + if (tx > ax && ty < smy0) { return Directions$2.LEFT; } + if (tx < smx0 && ty >= sy0) { return Directions$2.TOP; } + if (tx > smx1 && ty >= sy0) { return Directions$2.TOP; } + if (tx >= smx0 && tx <= ax && ty > sy1) { + if (nextInLine.point.x < tx) { + return Directions$2.RIGHT; + } + + return Directions$2.LEFT; + } + if (tx <= smx1 && tx >= ax && ty > sy1) { + if (nextInLine.point.x < tx) { + return Directions$2.RIGHT; + } + + return Directions$2.LEFT; + } + + return Directions$2.TOP; + } + + function resolveForBottomSourceSide(source, target, nextInLine) { + var sx0 = source.x0; + var sy0 = source.y0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx0 = sx0 - margin; + var smx1 = sx1 + margin; + var smy1 = sy1 + margin; + + var ax = anchor.x; + var tx = target.x0; + var ty = target.y0; + + if (tx === ax && ty > sy1) { return Directions$2.TOP; } + if (tx < ax && ty > smy1) { return Directions$2.RIGHT; } + if (tx > ax && ty > smy1) { return Directions$2.LEFT; } + if (tx < smx0 && ty <= sy1) { return Directions$2.BOTTOM; } + if (tx > smx1 && ty <= sy1) { return Directions$2.BOTTOM; } + if (tx >= smx0 && tx <= ax && ty < sy0) { + if (nextInLine.point.x < tx) { + return Directions$2.RIGHT; + } + + return Directions$2.LEFT; + } + if (tx <= smx1 && tx >= ax && ty < sy0) { + if (nextInLine.point.x < tx) { + return Directions$2.RIGHT; + } + + return Directions$2.LEFT; + } + + return Directions$2.BOTTOM; + } + + function resolveForLeftSourceSide(source, target, nextInLine) { + var sy0 = source.y0; + var sx0 = source.x0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx0 = sx0 - margin; + var smy0 = sy0 - margin; + var smy1 = sy1 + margin; + + var ax = anchor.x; + var ay = anchor.y; + var tx = target.x0; + var ty = target.y0; + + if (tx < ax && ty === ay) { return Directions$2.RIGHT; } + if (tx <= smx0 && ty < ay) { return Directions$2.BOTTOM; } + if (tx <= smx0 && ty > ay) { return Directions$2.TOP; } + if (tx >= sx0 && ty <= smy0) { return Directions$2.LEFT; } + if (tx >= sx0 && ty >= smy1) { return Directions$2.LEFT; } + if (tx > sx1 && ty >= smy0 && ty <= ay) { + if (nextInLine.point.y < ty) { + return Directions$2.BOTTOM; + } + + return Directions$2.TOP; + } + if (tx > sx1 && ty <= smy1 && ty >= ay) { + if (nextInLine.point.y < ty) { + return Directions$2.BOTTOM; + } + + return Directions$2.TOP; + } + + return Directions$2.LEFT; + } + + function resolveForRightSourceSide(source, target, nextInLine) { + var sy0 = source.y0; + var sx0 = source.x0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx1 = sx1 + margin; + var smy0 = sy0 - margin; + var smy1 = sy1 + margin; + + var ax = anchor.x; + var ay = anchor.y; + var tx = target.x0; + var ty = target.y0; + + if (tx > ax && ty === ay) { return Directions$2.LEFT; } + if (tx >= smx1 && ty < ay) { return Directions$2.BOTTOM; } + if (tx >= smx1 && ty > ay) { return Directions$2.TOP; } + if (tx <= sx1 && ty <= smy0) { return Directions$2.RIGHT; } + if (tx <= sx1 && ty >= smy1) { return Directions$2.RIGHT; } + if (tx < sx0 && ty >= smy0 && ty <= ay) { + if (nextInLine.point.y < ty) { + return Directions$2.BOTTOM; + } + + return Directions$2.TOP; + } + if (tx < sx0 && ty <= smy1 && ty >= ay) { + if (nextInLine.point.y < ty) { + return Directions$2.BOTTOM; + } + + return Directions$2.TOP; + } + + return Directions$2.RIGHT; + } + + function resolveInitialDirection(source, target, nextInLine) { + var ref = resolveSides(source, target); + var sourceSide = ref[0]; + + switch (sourceSide) { + case Directions$2.TOP: + return resolveForTopSourceSide(source, target, nextInLine); + case Directions$2.RIGHT: + return resolveForRightSourceSide(source, target, nextInLine); + case Directions$2.BOTTOM: + return resolveForBottomSourceSide(source, target, nextInLine); + case Directions$2.LEFT: + return resolveForLeftSourceSide(source, target, nextInLine); + } + } + + function getDirectionForLinkConnection(linkOrigin, connectionPoint, linkView) { + var tangent = linkView.getTangentAtLength(linkView.getClosestPointLength(connectionPoint)); + var roundedAngle = Math.round(getSegmentAngle(tangent) / 90) * 90; + + if (roundedAngle % 180 === 0 && linkOrigin.y === connectionPoint.y) { + return linkOrigin.x < connectionPoint.x ? Directions$2.LEFT : Directions$2.RIGHT; + } else if (linkOrigin.x === connectionPoint.x) { + return linkOrigin.y < connectionPoint.y ? Directions$2.TOP : Directions$2.BOTTOM; + } + + switch (roundedAngle) { + case 0: + case 180: + case 360: + return linkOrigin.y < connectionPoint.y ? Directions$2.TOP : Directions$2.BOTTOM; + case 90: + case 270: + return linkOrigin.x < connectionPoint.x ? Directions$2.LEFT : Directions$2.RIGHT; + } + } + + function pointDataFromAnchor(view, point, bbox, direction, isPort, fallBackAnchor, margin) { + if (direction === Directions$2.AUTO) { + direction = isPort ? Directions$2.MAGNET_SIDE : Directions$2.ANCHOR_SIDE; + } + + var isElement = view && view.model.isElement(); + + var ref = isElement ? Rect.fromRectUnion(bbox, view.model.getBBox()) : fallBackAnchor; + var x0 = ref.x; + var y0 = ref.y; + var width = ref.width; if ( width === void 0 ) width = 0; + var height = ref.height; if ( height === void 0 ) height = 0; + + return { + point: point, + x0: x0, + y0: y0, + view: view, + bbox: bbox, + width: width, + height: height, + direction: direction, + margin: isElement ? margin : 0 + }; + } + + function pointDataFromVertex(ref) { + var x = ref.x; + var y = ref.y; + + var point = new Point(x, y); + + return { + point: point, + x0: point.x, + y0: point.y, + view: null, + bbox: new Rect(x, y, 0, 0), + width: 0, + height: 0, + direction: null, + margin: 0 + }; + } + + function getOutsidePoint(side, pointData, margin) { + var outsidePoint = pointData.point.clone(); + + var x0 = pointData.x0; + var y0 = pointData.y0; + var width = pointData.width; + var height = pointData.height; + + switch (side) { case 'left': - targetOutsidePoint.x = tmx0; + outsidePoint.x = x0 - margin; break; case 'right': - targetOutsidePoint.x = tmx1; + outsidePoint.x = x0 + width + margin; break; case 'top': - targetOutsidePoint.y = tmy0; + outsidePoint.y = y0 - margin; break; case 'bottom': - targetOutsidePoint.y = tmy1; + outsidePoint.y = y0 + height + margin; break; } + return outsidePoint; + } + + function routeBetweenPoints(source, target) { + var sourcePoint = source.point; + var sx0 = source.x0; + var sy0 = source.y0; + var sourceView = source.view; + var sourceWidth = source.width; + var sourceHeight = source.height; + var sourceMargin = source.margin; + var targetPoint = target.point; + var tx0 = target.x0; + var ty0 = target.y0; + var targetWidth = target.width; + var targetHeight = target.height; + var targetMargin = target.margin; + + var tx1 = tx0 + targetWidth; + var ty1 = ty0 + targetHeight; + var sx1 = sx0 + sourceWidth; + var sy1 = sy0 + sourceHeight; + + var isSourceEl = sourceView && sourceView.model.isElement(); + + // Key coordinates including the margin + var smx0 = sx0 - sourceMargin; + var smx1 = sx1 + sourceMargin; + var smy0 = sy0 - sourceMargin; + var smy1 = sy1 + sourceMargin; + + var tmx0 = tx0 - targetMargin; + var tmx1 = tx1 + targetMargin; + var tmy0 = ty0 - targetMargin; + var tmy1 = ty1 + targetMargin; + + var ref = resolveSides(source, target); + var sourceSide = ref[0]; + var targetSide = ref[1]; + + var sourceOutsidePoint = getOutsidePoint(sourceSide, { point: sourcePoint, x0: sx0, y0: sy0, width: sourceWidth, height: sourceHeight }, sourceMargin); + var targetOutsidePoint = getOutsidePoint(targetSide, { point: targetPoint, x0: tx0, y0: ty0, width: targetWidth, height: targetHeight }, targetMargin); + var sox = sourceOutsidePoint.x; var soy = sourceOutsidePoint.y; var tox = targetOutsidePoint.x; @@ -26972,7 +27356,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var middleOfHorizontalSides = (scy < tcy ? (sy1 + ty0) : (ty1 + sy0)) / 2; if (sourceSide === 'left' && targetSide === 'right') { - if (smx0 <= tx1) { + if (smx0 <= tmx1) { var y = middleOfHorizontalSides; if (sx1 <= tx0) { if (ty1 >= smy0 && toy < soy) { @@ -26995,7 +27379,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: x, y: toy } ]; } else if (sourceSide === 'right' && targetSide === 'left') { - if (smx1 >= tx0) { + if (smx1 >= tmx0) { var y$1 = middleOfHorizontalSides; if (sox > tx1) { if (ty1 >= smy0 && toy < soy) { @@ -27044,7 +27428,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: tox, y: y$3 } ]; } else if (sourceSide === 'bottom' && targetSide === 'top') { - if (soy - margin > toy) { + if (soy - sourceMargin > toy) { var x$3 = middleOfVerticalSides; var y$4 = soy; @@ -27076,8 +27460,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. if (toy < soy) { if (sox >= tmx1 || sox <= tmx0) { return [ - { x: sox, y: Math.min(soy,toy) }, - { x: tox, y: Math.min(soy,toy) } + { x: sox, y: Math.min(soy, toy) }, + { x: tox, y: Math.min(soy, toy) } ]; } else if (tox > sox) { x$4 = Math.min(sox, tmx0); @@ -27087,8 +27471,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } else { if (tox >= smx1 || tox <= smx0) { return [ - { x: sox, y: Math.min(soy,toy) }, - { x: tox, y: Math.min(soy,toy) } + { x: sox, y: Math.min(soy, toy) }, + { x: tox, y: Math.min(soy, toy) } ]; } else if (tox >= sox) { x$4 = Math.max(tox, smx1); @@ -27104,34 +27488,31 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: tox, y: y1 } ]; } else if (sourceSide === 'bottom' && targetSide === 'bottom') { - if (tx0 >= sox + margin || tx1 <= sox - margin) { - return [ - { x: sox, y: Math.max(soy, toy) }, - { x: tox, y: Math.max(soy, toy) } - ]; - } - var x$5; - var y1$1; - var y2$1; + var y1$1 = Math.max((sy0 + ty1) / 2, toy); + var y2$1 = Math.max((sy1 + ty0) / 2, soy); if (toy > soy) { - y1$1 = Math.max((sy1 + ty0) / 2, toy); - y2$1 = Math.max((sy1 + ty0) / 2, soy); - - if (tox > sox) { + if (sox >= tmx1 || sox <= tmx0) { + return [ + { x: sox, y: Math.max(soy, toy) }, + { x: tox, y: Math.max(soy, toy) } + ]; + } else if (tox > sox) { x$5 = Math.min(sox, tmx0); } else { x$5 = Math.max(sox, tmx1); } } else { - y1$1 = Math.max((sy0 + ty1) / 2, toy); - y2$1 = Math.max((sy0 + ty1) / 2, soy); - - if (tox > sox) { - x$5 = Math.min(tox, smx0); - } else { + if (tox >= smx1 || tox <= smx0) { + return [ + { x: sox, y: Math.max(soy, toy) }, + { x: tox, y: Math.max(soy, toy) } + ]; + } else if (tox >= sox) { x$5 = Math.max(tox, smx1); + } else { + x$5 = Math.min(tox, smx0); } } @@ -27194,8 +27575,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } else if (sourceSide === 'top' && targetSide === 'right') { if (soy > toy) { if (sox < tox) { - var y$8 = (sy0 + ty1) / 2; - if (y$8 > tcy && y$8 < tmy1 && sox < tmx0) { + var y$8 = middleOfHorizontalSides; + + if ((y$8 > tcy || !isSourceEl) && y$8 < tmy1 && sox < tx0) { y$8 = tmy0; } return [ @@ -27204,37 +27586,41 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: tox, y: toy } ]; } + return [{ x: sox, y: toy }]; } - var x$6 = (sx0 + tx1) / 2; + var x$6 = Math.max(middleOfVerticalSides, tmx1); - if (sox > tox && sy1 >= toy) { + if (tox < sox && toy > sy0 && toy < sy1) { return [ { x: sox, y: soy }, { x: x$6, y: soy }, - { x: x$6, y: toy }]; + { x: x$6, y: toy } + ]; } - if (x$6 > smx0 && soy < ty1) { - var y$9 = Math.min(sy0, ty0) - margin; - var x$7 = Math.max(sx1, tx1) + margin; + if ((x$6 > smx0 && toy > sy0) || tx0 > sx1) { + var y$9 = Math.min(sy0 - sourceMargin, ty0 - targetMargin); + var x$7 = Math.max(sx1 + sourceMargin, tx1 + targetMargin); return [ { x: sox, y: y$9 }, { x: x$7, y: y$9 }, { x: x$7, y: toy } ]; } + return [ { x: sox, y: soy }, - { x: x$6, y: soy }, - { x: x$6, y: toy } + { x: Math.max(x$6, tox), y: soy }, + { x: Math.max(x$6, tox), y: toy } ]; } else if (sourceSide === 'top' && targetSide === 'left') { if (soy > toy) { if (sox > tox) { - var y$10 = (sy0 + ty1) / 2; - if (y$10 > tcy && y$10 < tmy1 && sox > tmx1) { + var y$10 = middleOfHorizontalSides; + + if ((y$10 > tcy || !isSourceEl) && y$10 < tmy1 && sox > tx1) { y$10 = tmy0; } return [ @@ -27246,7 +27632,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return [{ x: sox, y: toy }]; } - var x$8 = (sx1 + tx0) / 2; + var x$8 = Math.min(tmx0, middleOfVerticalSides); if (sox < tox && sy1 >= toy) { return [ @@ -27256,8 +27642,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (x$8 < smx1 && soy < ty1) { - var y$11 = Math.min(sy0, ty0) - margin; - var x$9 = Math.min(sx0, tx0) - margin; + var y$11 = Math.min(smy0, tmy0); + var x$9 = Math.min(smx0, tmx0); return [ { x: sox, y: y$11 }, { x: x$9, y: y$11 }, @@ -27272,8 +27658,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } else if (sourceSide === 'bottom' && targetSide === 'right') { if (soy < toy) { if (sox < tox) { - var y$12 = (sy1 + ty0) / 2; - if (y$12 < tcy && y$12 > tmy0 && sox < tmx0) { + var y$12 = middleOfHorizontalSides; + + if ((y$12 < tcy || !isSourceEl) && y$12 > tmy0 && sox < tx0) { y$12 = tmy1; } return [ @@ -27285,8 +27672,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return [{ x: sox, y: toy }]; } else { if (sx0 < tox) { - var y$13 = Math.max(sy1, ty1) + margin; - var x$10 = Math.max(sx1, tx1) + margin; + var y$13 = Math.max(smy1, tmy1); + var x$10 = Math.max(smx1, tmx1); return [ { x: sox, y: y$13 }, { x: x$10, y: y$13 }, @@ -27305,8 +27692,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } else if (sourceSide === 'bottom' && targetSide === 'left') { if (soy < toy) { if (sox > tox) { - var y$14 = (sy1 + ty0) / 2; - if (y$14 < tcy && y$14 > tmy0 && sox > tmx1) { + var y$14 = middleOfHorizontalSides; + + if ((y$14 < tcy || !isSourceEl) && y$14 > tmy0 && sox > tx1) { y$14 = tmy1; } return [ @@ -27318,8 +27706,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return [{ x: sox, y: toy }]; } else { if (sx1 > tox) { - var y$15 = Math.max(sy1, ty1) + margin; - var x$12 = Math.min(sx0, tx0) - margin; + var y$15 = Math.max(smy1, tmy1); + var x$12 = Math.min(smx0, tmx0); return [ { x: sox, y: y$15 }, { x: x$12, y: y$15 }, @@ -27335,13 +27723,15 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: x$13, y: soy }, { x: x$13, y: toy } ]; - } else if (sourceSide === 'left' && targetSide === 'bottom') { - if (sox > tox && soy >= tmy1) { + } + else if (sourceSide === 'left' && targetSide === 'bottom') { + if (sox >= tox && soy >= tmy1) { return [{ x: tox, y: soy }]; } if (sox >= tx1 && soy < toy) { - var x$14 = (sx1 + tx0) / 2; + var x$14 = middleOfVerticalSides; + return [ { x: x$14, y: soy }, { x: x$14, y: toy }, @@ -27350,7 +27740,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (tox < sx1 && ty1 <= sy0) { - var y$16 = (sy0 + ty1) / 2; + var y$16 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -27360,7 +27750,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } var x$15 = Math.min(tmx0, sox); - var y$17 = Math.max(sy1, ty1) + margin; + var y$17 = Math.max(smy1, tmy1); return [ { x: x$15, y: soy }, @@ -27374,7 +27764,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. if (sox >= tx1) { if (soy > toy) { - var x$16 = (sx0 + tx1) / 2; + var x$16 = middleOfVerticalSides; + return [ { x: x$16, y: soy }, { x: x$16, y: toy }, @@ -27384,7 +27775,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (tox <= sx1 && toy > soy) { - var y$18 = (ty0 + sy1) / 2; + var y$18 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -27392,8 +27783,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: tox, y: y$18 } ]; } - var x$17 = toy < soy ? Math.min(sx0, tx0) - margin : smx0; - var y$19 = Math.min(sy0, ty0) - margin; + var x$17 = toy < soy ? Math.min(smx0, tmx0) : smx0; + var y$19 = Math.min(smy0, tmy0); return [ { x: x$17, y: soy }, @@ -27402,12 +27793,13 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. ]; } else if (sourceSide === 'right' && targetSide === 'top') { - if (sox < tox && soy < tmy0) { + if (sox <= tox && soy < tmy0) { return [{ x: tox, y: soy }]; } if (sx1 < tx0 && soy > toy) { - var x$18 = (sx1 + tx0) / 2; + var x$18 = middleOfVerticalSides; + return [ { x: x$18, y: soy }, { x: x$18, y: toy }, @@ -27416,7 +27808,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (tox < sox && ty0 > sy1) { - var y$20 = (sy1 + ty0) / 2; + var y$20 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -27425,20 +27817,22 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. ]; } - var x$19 = Math.max(sx1, tx1) + margin; - var y$21 = Math.min(sy0, ty0) - margin; + var x$19 = Math.max(smx1, tmx1); + var y$21 = Math.min(smy0, tmy0); + return [ { x: x$19, y: soy }, { x: x$19, y: y$21 }, { x: tox, y: y$21 } ]; } else if (sourceSide === 'right' && targetSide === 'bottom') { - if (sox < tox && soy >= tmy1) { + if (sox <= tox && soy >= tmy1) { return [{ x: tox, y: soy }]; } - if (sox <= tx0 && soy < toy) { - var x$20 = (sx1 + tx0) / 2; + if (sox <= tmx0 && soy < toy) { + var x$20 = middleOfVerticalSides; + return [ { x: x$20, y: soy }, { x: x$20, y: toy }, @@ -27447,7 +27841,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (tox > sx0 && ty1 < sy0) { - var y$22 = (sy0 + ty1) / 2; + var y$22 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -27457,7 +27851,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } var x$21 = Math.max(tmx1, sox); - var y$23 = Math.max(sy1, ty1) + margin; + var y$23 = Math.max(smy1, tmy1); return [ { x: x$21, y: soy }, @@ -27467,6 +27861,209 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } } + function rightAngleRouter(vertices, opt, linkView) { + var sourceDirection = opt.sourceDirection; if ( sourceDirection === void 0 ) sourceDirection = Directions$2.AUTO; + var targetDirection = opt.targetDirection; if ( targetDirection === void 0 ) targetDirection = Directions$2.AUTO; + var margin = opt.margin || 20; + var useVertices = opt.useVertices || false; + + var isSourcePort = !!linkView.model.source().port; + var sourcePoint = pointDataFromAnchor(linkView.sourceView, linkView.sourceAnchor, linkView.sourceBBox, sourceDirection, isSourcePort, linkView.sourceAnchor, margin); + + var isTargetPort = !!linkView.model.target().port; + var targetPoint = pointDataFromAnchor(linkView.targetView, linkView.targetAnchor, linkView.targetBBox, targetDirection, isTargetPort, linkView.targetAnchor, margin); + + var resultVertices = []; + + if (!useVertices || vertices.length === 0) { + return simplifyPoints(routeBetweenPoints(sourcePoint, targetPoint)); + } + + var verticesData = vertices.map(function (v) { return pointDataFromVertex(v); }); + var firstVertex = verticesData[0]; + + if (sourcePoint.view && sourcePoint.view.model.isElement() && sourcePoint.view.model.getBBox().inflate(margin).containsPoint(firstVertex.point)) { + var ref = resolveSides(sourcePoint, firstVertex); + var fromDirection = ref[0]; + var toDirection = fromDirection; + var dummySource = pointDataFromVertex(sourcePoint.point); + // Points do not usually have margin. Here we create a point with a margin. + dummySource.margin = margin; + dummySource.direction = fromDirection; + firstVertex.direction = toDirection; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(dummySource, firstVertex).concat( [firstVertex.point] )); + } else { + // The first point responsible for the initial direction of the route + var next = verticesData[1] || targetPoint; + var direction = resolveInitialDirection(sourcePoint, firstVertex, next); + firstVertex.direction = direction; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(sourcePoint, firstVertex).concat( [firstVertex.point] )); + } + + for (var i = 0; i < verticesData.length - 1; i++) { + var from = verticesData[i]; + var to = verticesData[i + 1]; + + var segment = new Line(from.point, to.point); + var segmentAngle = getSegmentAngle(segment); + if (segmentAngle % 90 === 0) { + // Since the segment is horizontal or vertical, we can skip the routing and just connect them with a straight line + var toDirection$1 = ANGLE_DIRECTION_MAP[segmentAngle]; + var accessDirection = OPPOSITE_DIRECTIONS[toDirection$1]; + + if (toDirection$1 !== from.direction) { + resultVertices.push(from.point, to.point); + to.direction = accessDirection; + } else { + var angle = normalizeAngle(segmentAngle - 90); + + var dx = 0; + var dy = 0; + + if (angle === 90) { + dy = -margin; + } else if (angle === 180) { + dx = -margin; + } else if (angle === 270) { + dy = margin; + } else if (angle === 0) { + dx = margin; + } + + var p1 = { x: from.point.x + dx, y: from.point.y + dy }; + var p2 = { x: to.point.x + dx, y: to.point.y + dy }; + + var segment2 = new Line(to.point, p2); + to.direction = ANGLE_DIRECTION_MAP[getSegmentAngle(segment2)]; + + // Constructing a loop + resultVertices.push(from.point, p1, p2, to.point); + } + + continue; + } + + var ref$1 = resolveDirection(from, to); + var fromDirection$1 = ref$1[0]; + var toDirection$2 = ref$1[1]; + + from.direction = fromDirection$1; + to.direction = toDirection$2; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(from, to).concat( [to.point] )); + } + + var lastVertex = verticesData[verticesData.length - 1]; + + if (targetPoint.view && targetPoint.view.model.isElement()) { + if (targetPoint.view.model.getBBox().inflate(margin).containsPoint(lastVertex.point)) { + var ref$2 = resolveDirection(lastVertex, targetPoint); + var fromDirection$2 = ref$2[0]; + var dummyTarget = pointDataFromVertex(targetPoint.point); + var ref$3 = resolveSides(lastVertex, targetPoint); + var toDirection$3 = ref$3[1]; + // we are creating a point that has a margin + dummyTarget.margin = margin; + dummyTarget.direction = toDirection$3; + lastVertex.direction = fromDirection$2; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(lastVertex, dummyTarget)); + } else { + // the last point of `simplified` array is the last defined vertex + // grab the penultimate point and construct a line segment from it to the last vertex + // this will ensure that the last segment continues in a straight line + + var simplified = simplifyPoints(resultVertices); + var segment$1 = new Line(simplified[simplified.length - 2], lastVertex.point); + var definedDirection = ANGLE_DIRECTION_MAP[Math.round(getSegmentAngle(segment$1))]; + lastVertex.direction = definedDirection; + + var lastSegmentRoute = routeBetweenPoints(lastVertex, targetPoint); + var ref$4 = simplifyPoints(lastSegmentRoute.concat( [targetPoint.point])); + var p1$1 = ref$4[0]; + var p2$1 = ref$4[1]; + + var lastSegment = new Line(p1$1, p2$1); + var roundedLastSegmentAngle = Math.round(getSegmentAngle(lastSegment)); + var lastSegmentDirection = ANGLE_DIRECTION_MAP[roundedLastSegmentAngle]; + + if (lastSegmentDirection !== definedDirection && definedDirection === OPPOSITE_DIRECTIONS[lastSegmentDirection]) { + lastVertex.margin = margin; + lastSegmentRoute = routeBetweenPoints(lastVertex, targetPoint); + } + + resultVertices.push.apply(resultVertices, lastSegmentRoute); + } + } else { + // since the target is only a point we can apply the same logic as if we connected two verticesData + var ref$5 = resolveDirection(lastVertex, targetPoint); + var vertexDirection = ref$5[0]; + lastVertex.direction = vertexDirection; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(lastVertex, targetPoint)); + } + + return simplifyPoints(resultVertices); + } + + function resolveDirection(from, to) { + var accessDirection = from.direction; + var isDirectionVertical = VERTICAL_DIRECTIONS.includes(accessDirection); + + var sourceDirection = from.direction; + var targetDirection = to.direction; + + if (isDirectionVertical) { + var isToAbove = from.point.y > to.point.y; + var dx = to.point.x - from.point.x; + + if (accessDirection === Directions$2.BOTTOM) { + // If isToAbove === false and we need figure out if to go left or right + sourceDirection = isToAbove ? OPPOSITE_DIRECTIONS[accessDirection] : dx >= 0 ? Directions$2.RIGHT : Directions$2.LEFT; + + if (dx > 0) { + targetDirection = isToAbove ? Directions$2.LEFT : Directions$2.TOP; + } else if (dx < 0) { + targetDirection = isToAbove ? Directions$2.RIGHT : Directions$2.TOP; + } + } else { + // If isToAbove === true and we need figure out if to go left or right + sourceDirection = isToAbove ? dx >= 0 ? Directions$2.RIGHT : Directions$2.LEFT : OPPOSITE_DIRECTIONS[accessDirection]; + + if (dx > 0) { + targetDirection = isToAbove ? Directions$2.BOTTOM : Directions$2.LEFT; + } else if (dx < 0) { + targetDirection = isToAbove ? Directions$2.BOTTOM : Directions$2.RIGHT; + } + } + } else { + var isToLeft = from.point.x > to.point.x; + var dy = to.point.y - from.point.y; + + if (accessDirection === Directions$2.RIGHT) { + sourceDirection = isToLeft ? OPPOSITE_DIRECTIONS[accessDirection] : dy >= 0 ? Directions$2.BOTTOM : Directions$2.TOP; + + if (dy > 0) { + targetDirection = isToLeft ? Directions$2.TOP : Directions$2.LEFT; + } else if (dy < 0) { + targetDirection = isToLeft ? Directions$2.BOTTOM : Directions$2.LEFT; + } + } else { + sourceDirection = isToLeft ? dy >= 0 ? Directions$2.BOTTOM : Directions$2.TOP : OPPOSITE_DIRECTIONS[accessDirection]; + + if (dy > 0) { + targetDirection = isToLeft ? Directions$2.RIGHT : Directions$2.TOP; + } else if (dy < 0) { + targetDirection = isToLeft ? Directions$2.RIGHT : Directions$2.BOTTOM; + } + } + } + + return [sourceDirection, targetDirection]; + } + rightAngleRouter.Directions = Directions$2; var rightAngle = rightAngleRouter; @@ -30046,11 +30643,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. toolPosition = this.getPointAtLength(connectionLength - doubleLinkToolsOffset); this._tool2Cache.attr('transform', 'translate(' + toolPosition.x + ', ' + toolPosition.y + ') ' + scale); - this._tool2Cache.attr('visibility', 'visible'); + this._tool2Cache.attr('display', 'inline'); } else if (this.options.doubleLinkTools) { - this._tool2Cache.attr('visibility', 'hidden'); + this._tool2Cache.attr('display', 'none'); } } @@ -35683,6 +36280,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. this.resetAnchor('target', data.targetAnchorDef); } } + if (vertices.some(function (v) { return !v; })) { + // This can happen when the link is using a smart routing and the number of + // vertices is not the same as the number of route points. + throw new Error('Segments: incompatible router in use'); + } link.vertices(vertices, { ui: true, tool: this.cid }); this.updateHandle(handle, vertex, nextVertex, offset); if (!options.stopPropagation) { relatedView.notifyPointermove(normalizedEvent, coords.x, coords.y); } @@ -36766,7 +37368,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. Control: Control }); - var version = "3.7.5"; + var version = "3.7.6"; var Vectorizer = V; var layout = { PortLabel: PortLabel, Port: Port }; diff --git a/dist/joint.core.min.css b/dist/joint.core.min.css index 6cc445286..c9b167c4a 100644 --- a/dist/joint.core.min.css +++ b/dist/joint.core.min.css @@ -1,4 +1,4 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public diff --git a/dist/joint.core.min.js b/dist/joint.core.min.js index 378d2fcf5..ae75e5941 100644 --- a/dist/joint.core.min.js +++ b/dist/joint.core.min.js @@ -1,8 +1,8 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -if(function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("backbone"),require("jquery")):"function"==typeof define&&define.amd?define(["exports","backbone","jquery"],e):e((t=t||self).joint={},t.Backbone,t.$)}(this,function(t,l,P){"use strict";l=l&&l.hasOwnProperty("default")?l.default:l,P=P&&P.hasOwnProperty("default")?P.default:P;var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(t,e){return t(e={exports:{}},e.exports),e.exports}var r=function(t){return t&&t.Math==Math&&t},h=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof e&&e)||function(){return this}()||Function("return this")(),a=function(t){try{return!!t()}catch(t){return!0}},s=!a(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}),i={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,u={f:o&&!i.call({1:2},1)?function(t){var e=o(this,t);return!!e&&e.enumerable}:i},x=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},c={}.toString,f=function(t){return c.call(t).slice(8,-1)},d="".split,w=a(function(){return!Object("z").propertyIsEnumerable(0)})?function(t){return"String"==f(t)?d.call(t,""):Object(t)}:Object,p=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},g=function(t){return w(p(t))},v=function(t){return"object"==typeof t?null!==t:"function"==typeof t},m=function(t,e){if(!v(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!v(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!v(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!v(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")},y={}.hasOwnProperty,b=function(t,e){return y.call(t,e)},A=h.document,S=v(A)&&v(A.createElement),E=function(t){return S?A.createElement(t):{}},T=!s&&!a(function(){return 7!=Object.defineProperty(E("div"),"a",{get:function(){return 7}}).a}),k=Object.getOwnPropertyDescriptor,C={f:s?k:function(t,e){if(t=g(t),e=m(e,!0),T)try{return k(t,e)}catch(t){}if(b(t,e))return x(!u.f.call(t,e),t[e])}},L=function(t){if(!v(t))throw TypeError(String(t)+" is not an object");return t},M=Object.defineProperty,N={f:s?M:function(t,e,n){if(L(t),e=m(e,!0),L(n),T)try{return M(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},_=s?function(t,e,n){return N.f(t,e,x(1,n))}:function(t,e,n){return t[e]=n,t},O=function(e,n){try{_(h,e,n)}catch(t){h[e]=n}return n},R="__core-js_shared__",V=h[R]||O(R,{}),F=Function.toString;"function"!=typeof V.inspectSource&&(V.inspectSource=function(t){return F.call(t)});var B,D,I,z=V.inspectSource,j=h.WeakMap,G="function"==typeof j&&/native code/.test(z(j)),U=n(function(t){(t.exports=function(t,e){return V[t]||(V[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.8.3",mode:"global",copyright:"\xa9 2021 Denis Pushkarev (zloirock.ru)"})}),q=0,H=Math.random(),Y=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++q+H).toString(36)},W=U("keys"),X=function(t){return W[t]||(W[t]=Y(t))},$={},Z=h.WeakMap;if(G){var J=V.state||(V.state=new Z),K=J.get,Q=J.has,tt=J.set;B=function(t,e){return e.facade=t,tt.call(J,t,e),e},D=function(t){return K.call(J,t)||{}},I=function(t){return Q.call(J,t)}}else{var et=X("state");$[et]=!0,B=function(t,e){return e.facade=t,_(t,et,e),e},D=function(t){return b(t,et)?t[et]:{}},I=function(t){return b(t,et)}}var nt,rt={set:B,get:D,has:I,enforce:function(t){return I(t)?D(t):B(t,{})},getterFor:function(n){return function(t){var e;if(!v(t)||(e=D(t)).type!==n)throw TypeError("Incompatible receiver, "+n+" required");return e}}},it=n(function(t){var e=rt.get,u=rt.enforce,l=String(String).split("String");(t.exports=function(t,e,n,r){var i,o=!!r&&!!r.unsafe,a=!!r&&!!r.enumerable,s=!!r&&!!r.noTargetGet;"function"==typeof n&&("string"!=typeof e||b(n,"name")||_(n,"name",e),(i=u(n)).source||(i.source=l.join("string"==typeof e?e:""))),t!==h?(o?!s&&t[e]&&(a=!0):delete t[e],a?t[e]=n:_(t,e,n)):a?t[e]=n:O(e,n)})(Function.prototype,"toString",function(){return"function"==typeof this&&e(this).source||z(this)})}),ot=h,at=function(t){return"function"==typeof t?t:void 0},st=function(t,e){return arguments.length<2?at(ot[t])||at(h[t]):ot[t]&&ot[t][e]||h[t]&&h[t][e]},ut=Math.ceil,lt=Math.floor,ht=function(t){return isNaN(t=+t)?0:(0i;)b(r,n=e[i++])&&(~mt(o,n)||o.push(n));return o},bt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],xt=bt.concat("length","prototype"),wt={f:Object.getOwnPropertyNames||function(t){return yt(t,xt)}},At={f:Object.getOwnPropertySymbols},Pt=st("Reflect","ownKeys")||function(t){var e=wt.f(L(t)),n=At.f;return n?e.concat(n(t)):e},St=function(t,e){for(var n=Pt(e),r=N.f,i=C.f,o=0;o"+t+""},Xt=function(){try{nt=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;Xt=nt?function(t){t.write(Wt("")),t.close();var e=t.parentWindow.Object;return t=null,e}(nt):((e=E("iframe")).style.display="none",Gt.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(Wt("document.F=Object")),t.close(),t.F);for(var n=bt.length;n--;)delete Xt[Ut][bt[n]];return Xt()};$[Ht]=!0;var $t=Object.create||function(t,e){var n;return null!==t?(Yt[Ut]=L(t),n=new Yt,Yt[Ut]=null,n[Ht]=t):n=Xt(),void 0===e?n:jt(n,e)},Zt=It("unscopables"),Jt=Array.prototype;null==Jt[Zt]&&N.f(Jt,Zt,{configurable:!0,value:$t(null)});var Kt=function(t){Jt[Zt][t]=!0},Qt=Object.defineProperty,te={},ee=function(t){throw t},ne=function(t,e){if(b(te,t))return te[t];e||(e={});var n=[][t],r=!!b(e,"ACCESSORS")&&e.ACCESSORS,i=b(e,0)?e[0]:ee,o=b(e,1)?e[1]:void 0;return te[t]=!!n&&!a(function(){if(r&&!s)return!0;var t={length:-1};r?Qt(t,1,{enumerable:!0,get:ee}):t[1]=1,n.call(t,i,o)})},re=vt.includes,ie=ne("indexOf",{ACCESSORS:!0,1:0});Ot({target:"Array",proto:!0,forced:!ie},{includes:function(t){return re(this,t,1=n.length?{value:void 0,done:!0}:(t=qe(n,r),e.index+=t.length,{value:t,done:!1})});var Xe=function(e,t,n,r){try{return r?t(L(n)[0],n[1]):t(n)}catch(t){throw function(t){var e=t.return;if(void 0!==e)L(e.call(t)).value}(e),t}},$e=It("iterator"),Ze=Array.prototype,Je=function(t,e,n){var r=m(e);r in t?N.f(t,r,x(0,n)):t[r]=n},Ke={};Ke[It("toStringTag")]="z";var Qe="[object z]"===String(Ke),tn=It("toStringTag"),en="Arguments"==f(function(){return arguments}()),nn=Qe?f:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),tn))?n:en?f(e):"Object"==(r=f(e))&&"function"==typeof e.callee?"Arguments":r},rn=It("iterator"),on=It("iterator"),an=!1;try{var sn=0,un={next:function(){return{done:!!sn++}},return:function(){an=!0}};un[on]=function(){return this},Array.from(un,function(){throw 2})}catch(t){}var ln=!function(t,e){if(!e&&!an)return!1;var n=!1;try{var r={};r[on]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(t){}return n}(function(t){Array.from(t)});Ot({target:"Array",stat:!0,forced:ln},{from:function(t){var e,n,r,i,o,a,s,u=ue(t),l="function"==typeof this?this:Array,h=arguments.length,c=1>8-i%1*8)){if(255<(n=r.charCodeAt(i+=.75)))throw new u("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");e=e<<8|n}return a}),t.atob||(t.atob=function(t){var e=String(t).replace(/=+$/,"");if(e.length%4==1)throw new u("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,r,i=0,o=0,a="";r=e.charAt(o++);~r&&(n=i%4?64*n+r:r,i++%4)?a+=String.fromCharCode(255&n>>(-2*i&6)):0)r=s.indexOf(r);return a})}()});Ot({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});ot.Number.isNaN;var pn=h.isFinite,gn=Number.isFinite||function(t){return"number"==typeof t&&pn(t)};Ot({target:"Number",stat:!0},{isFinite:gn});ot.Number.isFinite;var vn=It("match"),mn=function(t){if(v(e=t)&&(void 0!==(n=e[vn])?n:"RegExp"==f(e)))throw TypeError("The method doesn't accept regular expressions");var e,n;return t},yn=It("match"),bn=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[yn]=!1,"/./"[e](n)}catch(t){}}return!1};Ot({target:"String",proto:!0,forced:!bn("includes")},{includes:function(t){return!!~String(p(this)).indexOf(mn(t),1r)&&!(new er(t,n).length()>r)},divideAt:function(t){var e=this.pointAt(t);return[new er(this.start,e),new er(e,this.end)]},divideAtLength:function(t){var e=this.pointAtLength(t);return[new er(this.start,e),new er(e,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,e){if(t&&t.intersectionWithLine){var n=t.intersectionWithLine(this,e);return n&&t instanceof er&&(n=n[0]),n}return null},intersectionWithLine:function(t){var e=new Jn(this.end.x-this.start.x,this.end.y-this.start.y),n=new Jn(t.end.x-t.start.x,t.end.y-t.start.y),r=e.x*n.y-e.y*n.x,i=new Jn(t.start.x-this.start.x,t.start.y-this.start.y),o=i.x*n.y-i.y*n.x,a=i.x*e.y-i.y*e.x;if(0===r||o*r<0||a*r<0)return null;if(0s.x+o/2,c=rs.x?i-30:i+30)-l)/(a*a*(r-u))+u:e=a*a/(i-l)-a*a*(r-u)*((n=i>s.y?r+30:r-30)-u)/(o*o*(i-l))+l,new Jn(n,e).theta(t)},toString:function(){return new Jn(this.x,this.y).toString()+" "+this.a+" "+this.b}};var sr=ar,ur=Math.abs,lr=Math.cos,hr=Math.sin,cr=Math.min,fr=Math.max,dr=Math.round,pr=Math.pow,gr=function(t,e,n,r){if(!(this instanceof gr))return new gr(t,e,n,r);Object(t)===t&&(e=t.y,n=t.width,r=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===e?0:e,this.width=void 0===n?0:n,this.height=void 0===r?0:r};gr.fromEllipse=function(t){return t=new ar(t),new gr(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},gr.fromPointUnion=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if(0===t.length)return null;var n,r,i,o,a=new Jn;n=r=1/0,i=o=-1/0;for(var s=0;s=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var e=new gr(this).normalize(),n=new gr(t).normalize(),r=e.width,i=e.height,o=n.width,a=n.height;if(!(r&&i&&o&&a))return!1;var s=e.x,u=e.y,l=n.x,h=n.y;return o+=l,r+=s,a+=h,i+=u,s<=l&&o<=r&&u<=h&&a<=i},corner:function(){return new Jn(this.x+this.width,this.y+this.height)},equals:function(t){var e=new gr(this).normalize(),n=new gr(t).normalize();return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height},inflate:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.x-=t,this.y-=e,this.width+=2*t,this.height+=2*e,this},intersect:function(t){var e=this.origin(),n=this.corner(),r=t.origin(),i=t.corner();if(i.x<=e.x||i.y<=e.y||r.x>=n.x||r.y>=n.y)return null;var o=fr(e.x,r.x),a=fr(e.y,r.y);return new gr(o,a,cr(n.x,i.x)-o,cr(n.y,i.y)-a)},intersectionWithLine:function(t){var e,n,r=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],i=[],o=[],a=r.length;for(n=0;nh&&(r=(this.x+this.width-h)/(d.x-h)),d.y>c&&(s=(this.y+this.height-c)/(d.y-c));var p=t.topRight();p.x>h&&(i=(this.x+this.width-h)/(p.x-h)),p.yc&&(l=(this.y+this.height-c)/(g.y-c)),{sx:cr(n,r,i,o),sy:cr(a,s,u,l)}},maxRectUniformScaleToFit:function(t,e){var n=this.maxRectScaleToFit(t,e);return cr(n.sx,n.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,e=this.y,n=this.width,r=this.height;return this.width<0&&(t=this.x+this.width,n=-this.width),this.height<0&&(e=this.y+this.height,r=-this.height),this.x=t,this.y=e,this.width=n,this.height=r,this},offset:function(t,e){return Jn.prototype.offset.call(this,t,e)},origin:function(){return new Jn(this.x,this.y)},pointNearestToPoint:function(t){if(t=new Jn(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new Jn(this.x+this.width,t.y);case"left":return new Jn(this.x,t.y);case"bottom":return new Jn(t.x,this.y+this.height);case"top":return new Jn(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new er(this.topRight(),this.bottomRight())},rightMiddle:function(){return new Jn(this.x+this.width,this.y+this.height/2)},round:function(t){var e=1;if(t)switch(t){case 1:e=10;break;case 2:e=100;break;case 3:e=1e3;break;default:e=pr(10,t)}return this.x=dr(this.x*e)/e,this.y=dr(this.y*e)/e,this.width=dr(this.width*e)/e,this.height=dr(this.height*e)/e,this},scale:function(t,e,n){return n=this.origin().scale(t,e,n),this.x=n.x,this.y=n.y,this.width*=t,this.height*=e,this},sideNearestToPoint:function(t){var e=(t=new Jn(t)).x-this.x,n=this.x+this.width-t.x,r=t.y-this.y,i=e,o="left";return nr.x&&(r=t[e]);var a=[];for(e=0;ef.y||i>c.y&&i<=f.y){var d=c.x-r>f.x-r?c.x-r:f.x-r;0<=d&&(h.x=r+d,h.y=i,l.start=t,l.end=h,u.intersect(l)&&s++)}o=a}return s%2==1},close:function(){var t=this.start,e=this.end,n=this.points;return t&&e&&!t.equals(e)&&n.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new xr(br(this.points))},equals:function(t){if(!t)return!1;var e=this.points,n=t.points,r=e.length;if(n.length!==r)return!1;for(var i=0;ii+a&&r.x>i+a||n.xo+s&&r.y>o+s||n.ye.x&&t.ye.y}function Xr(t,e){return li(t,e,{interior:!1})}function $r(t,e){return hi(t,e,{interior:!1})}function Zr(t,e){return ci(t,e,{interior:!1})}function Jr(t,e){return di(t,e,{interior:!1})}function Kr(t,e){return li(t,e,{interior:!0})}function Qr(t,e){return hi(t,e,{interior:!0})}function ti(t,e){return ci(t,e,{interior:!0})}function ei(t,e){return di(t,e,{interior:!0})}function ni(t,e){return pi(t,e,{interior:!0})}function ri(t,n,r){return t.getSubpaths().some(function(t){var e=t.toPolylines(r)[0];return"Z"===t.getSegment(-1).type?Kr(e,n):Xr(e,n)})}function ii(t,n,r){return t.getSubpaths().some(function(t){var e=t.toPolylines(r)[0];return"Z"===t.getSegment(-1).type?Qr(e,n):$r(e,n)})}function oi(t,e,n){return si(t,jr.fromRect(e),n)}function ai(t,e,n){return fi(t,e,n,{interior:!1})}function si(t,e,n){return fi(t,e,n,{interior:!0})}function ui(t,n,r,i){return t.getSubpaths().some(function(t){var e=t.toPolylines(r)[0];return"Z"===t.getSegment(-1).type?si(n,e,i):ai(n,e,i)})}function li(t,e,n){void 0===n&&(n={});var r,i=n.interior;if(void 0===i&&(i=!1),i){if(t.containsPoint(e.start))return!0;var o=t.start,a=t.end,s=t.points;r=a.equals(o)?s:s.concat([o])}else r=t.points;for(var u=r.length,l=new er,h=0;h'+t+"";return F.parseXML(e,{async:!1}).documentElement}var n=document.createElementNS(V.svg,"svg");return n.setAttributeNS(V.xmlns,"xmlns:xlink",V.xlink),n.setAttribute("version","1.1"),n},F.createSVGStyle=function(t){return F("style",{type:"text/css"},[F.createCDATASection(t)]).node},F.createCDATASection=function(t){return void 0===t&&(t=""),document.implementation.createDocument(null,"xml",null).createCDATASection(t)},F.idCounter=0,F.uniqueId=function(){return"v-"+ ++F.idCounter},F.toNode=function(t){return F.isV(t)?t.node:t.nodeName&&t||t[0]},F.ensureId=function(t){return(t=F.toNode(t)).id||(t.id=F.uniqueId())},F.sanitizeText=function(t){return(t||"").replace(/ /g,"\xa0")},F.isUndefined=function(t){return void 0===t},F.isString=function(t){return"string"==typeof t},F.isObject=function(t){return t&&"object"==typeof t},F.isArray=Array.isArray,F.parseXML=function(t,e){var n;e=e||{};try{var r=new DOMParser;F.isUndefined(e.async)||(r.async=e.async),n=r.parseFromString(t,"text/xml")}catch(t){n=void 0}if(!n||n.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+t);return n},F.qualifyAttr=function(t){if(-1===t.indexOf(":"))return{ns:null,local:t};var e=t.split(":");return{ns:V[e[0]],local:e[1]}},F.transformSeparatorRegex=/[ ,]+/,F.transformRegex=/\b\w+\([^()]+\)/g,F.transformFunctionRegex=/\b(\w+)\(([^()]+)\)/,F.transformTranslateRegex=/\btranslate\(([^()]+)\)/,F.transformRotateRegex=/\brotate\(([^()]+)\)/,F.transformScaleRegex=/\bscale\(([^()]+)\)/,F.transformStringToMatrix=function(t){var e=F.createSVGMatrix(),n=t&&t.match(F.transformRegex);if(!n)return e;for(var r=n.length,i=0;i=t.start&&et.start&&n<=t.end||t.start>=e&&t.end=e?t.end+=n:t.start>=e&&(t.start+=n,t.end+=n)}),t},F.convertLineToPathData=function(t){return["M",(t=F(t)).attr("x1"),t.attr("y1"),"L",t.attr("x2"),t.attr("y2")].join(" ")},F.convertPolygonToPathData=function(t){var e=F.getPointsFromSvgNode(t);return 0===e.length?null:F.svgPointsToPath(e)+" Z"},F.convertPolylineToPathData=function(t){var e=F.getPointsFromSvgNode(t);return 0===e.length?null:F.svgPointsToPath(e)},F.svgPointsToPath=function(t){for(var e=0,n=t.length;e=o[i]&&(a.push([e].concat(r.splice(0,o[i]))),o[i]););}),a}(t)),!t||!t.length)return[["M",0,0]];for(var e,n=[],r=0,i=0,o=0,a=0,s=t.length,u=0;uf){var T=S,k=u,C=l;p=t(u=w+r*H(S=P+f*(s&&Pp)N=p-1;else if(void 0!==o){if(void 0===m&&""!==l.data)if("auto"===n.lineHeight)m=su({value:1.5,unit:"em"},u);else m=su(iu(n.lineHeight,["em","px",""]),u);m*x.length>o&&(N=Math.floor(o/m)-1)}if(null!==N){x.splice(N+1);var _=r.ellipsis;if(!_||N<0)break;"string"!=typeof _&&(_="\u2026");var O=x[N];if(!O&&!E)break;var R,V,F=O.length;do{if(V=O[F],R=O.substring(0,F),V?V.match(c)&&(R+=V):R+="string"==typeof c?c:" ",R+=_,l.data=R,s.getComputedTextLength()<=i){x[N]=R;break}F--}while(0<=F);break}}}return r.svgDocument?a.removeChild(u):document.body.removeChild(a),x.join(f)},lu=function(t){var e=P(P.parseHTML("
"+t+"
",null,!1));return e.find("*").each(function(){var n=this;P.each(n.attributes,function(){var t=this.name,e=this.value;(t.startsWith("on")||e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&P(n).removeAttr(t)})}),e.html()},hu=function(t,e){if(window.navigator.msSaveBlob)window.navigator.msSaveBlob(t,e);else{var n=window.URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=e,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.URL.revokeObjectURL(n)}},cu=function(t){t=t.replace(/\s/g,"");var e,n=(t=decodeURIComponent(t)).indexOf(","),r=t.slice(0,n),i=r.split(":")[1].split(";")[0],o=t.slice(n+1);e=0<=r.indexOf("base64")?atob(o):unescape(encodeURIComponent(o));for(var a=new Uint8Array(e.length),s=0;s')({color:t.color||"blue",opacity:Number.isFinite(t.opacity)?t.opacity:1,outerRadius:e+n,innerRadius:e})},highlight:function(t){return yu('')({color:t.color||"red",width:Number.isFinite(t.width)?t.width:1,blur:Number.isFinite(t.blur)?t.blur:0,opacity:Number.isFinite(t.opacity)?t.opacity:1})},blur:function(t){var e=Number.isFinite(t.x)?t.x:2;return yu('')({stdDeviation:Number.isFinite(t.y)?[e,t.y]:e})},dropShadow:function(t){var e="SVGFEDropShadowElement"in window?'':'';return yu(e)({dx:t.dx||0,dy:t.dy||0,opacity:Number.isFinite(t.opacity)?t.opacity:1,color:t.color||"black",blur:Number.isFinite(t.blur)?t.blur:4})},grayscale:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return yu('')({a:.2126+.7874*(1-e),b:.7152-.7152*(1-e),c:.0722-.0722*(1-e),d:.2126-.2126*(1-e),e:.7152+.2848*(1-e),f:.0722-.0722*(1-e),g:.2126-.2126*(1-e),h:.0722+.9278*(1-e)})},sepia:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return yu('')({a:.393+.607*(1-e),b:.769-.769*(1-e),c:.189-.189*(1-e),d:.349-.349*(1-e),e:.686+.314*(1-e),f:.168-.168*(1-e),g:.272-.272*(1-e),h:.534-.534*(1-e),i:.131+.869*(1-e)})},saturate:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return yu('')({amount:1-e})},hueRotate:function(t){return yu('')({angle:t.angle||0})},invert:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return yu('')({amount:e,amount2:1-e})},brightness:function(t){return yu('')({amount:Number.isFinite(t.amount)?t.amount:1})},contrast:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return yu('')({amount:e,amount2:.5-e/2})}},mu={number:function(t,e,o){o=o||{currency:["$",""],decimal:".",thousands:",",grouping:[3]};var n=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i.exec(t),r=n[1]||" ",i=n[2]||">",a=n[3]||"",s=n[4]||"",u=n[5],l=+n[6],h=n[7],c=n[8],f=n[9],d=1,p="",g="",v=!1;switch(c&&(c=+c.substring(1)),(u||"0"===r&&"="===i)&&(u=r="0",i="=",h&&(l-=Math.floor((l-1)/4))),f){case"n":h=!0,f="g";break;case"%":d=100,g="%",f="f";break;case"p":d=100,g="%",f="r";break;case"b":case"o":case"x":case"X":"#"===s&&(p="0"+f.toLowerCase());break;case"c":case"d":v=!0,c=0;break;case"s":d=-1,f="r"}"$"===s&&(p=o.currency[0],g=o.currency[1]),"r"!=f||c||(f="g"),null!=c&&("g"==f?c=Math.max(1,Math.min(21,c)):"e"!=f&&"f"!=f||(c=Math.max(0,Math.min(20,c))));var m=u&&h;if(v&&e%1)return"";var y=e<0||0===e&&1/e<0?(e=-e,"-"):a,b=g;if(d<0){var x=this.prefix(e,c);e=x.scale(e),b=x.symbol+g}else e*=d;var w=(e=this.convert(f,e,c)).lastIndexOf("."),A=w<0?e:e.substring(0,w),P=w<0?"":o.decimal+e.substring(w+1);function S(t){for(var e=t.length,n=[],r=0,i=o.grouping[0];0"===i?T+y+e:"^"===i?T.substring(0,E>>=1)+y+e+T.substring(E):y+(m?e:T+e))+b},string:function(t,e){for(var n,r="{",i=!1,o=[];-1!==(n=t.indexOf(r));){var a,s,u;if(a=t.slice(0,n),i){u=(s=a.split(":")).shift().split("."),a=e;for(var l=0;l|\$\{ ?([^{} ]+) ?\}|\{\{([^{} ]+)\}\}/g;return function(r){return r=r||{},t.replace(e,function(t){for(var e=Array.from(arguments).slice(1,4).find(function(t){return!!t}).split("."),n=r[e.shift()];void 0!==n&&e.length;)n=n[e.shift()];return void 0!==n?n:""})}},bu=function(){};function xu(t){t=ps(t);var a=ws(t).reduce(function(t,e){return t[e.id]=e.clone(),t},{});return ws(t).forEach(function(t){var e=a[t.id];if(e.isLink()){var n=e.source(),r=e.target();n.id&&a[n.id]&&e.prop("source/id",a[n.id].id),r.id&&a[r.id]&&e.prop("target/id",a[r.id].id)}var i=t.get("parent");i&&a[i]&&e.set("parent",a[i].id);var o=ws(t.get("embeds")).reduce(function(t,e){return a[e]&&t.push(a[e].id),t},[]);ms(o)||e.set("embeds",o)}),a}var wu={x:"x",y:"y",width:"w",height:"h",minimum:"s",maximum:"l",diagonal:"d"},Au=Object.keys(wu).map(function(t){return wu[t]}).join(""),Pu="[-+]?[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?",Su=/\s/g,Eu=new RegExp("^("+Pu+"\\*)?(["+Au+"])(/"+Pu+")?([-+]{1,2}"+Pu+")?$","g");function Tu(t){throw new Error("Invalid calc() expression: "+t)}function ku(t,e){var n=Eu.exec(t.replace(Su,""));n||Tu(t),Eu.lastIndex=0;var r=n[1],i=n[2],o=n[3],a=n[4],s=e.x,u=e.y,l=e.width,h=e.height,c=0;switch(i){case wu.width:c=l;break;case wu.height:c=h;break;case wu.x:c=s;break;case wu.y:c=u;break;case wu.minimum:c=Math.min(h,l);break;case wu.maximum:c=Math.max(h,l);break;case wu.diagonal:c=Math.sqrt(h*h+l*l)}return r&&(c*=parseFloat(r)),o&&(c/=parseFloat(o.slice(1))),a&&(c+=function(t){if(!t)return 0;switch(t[0]){case"+":return parseFloat(t.substr(1));case"-":return-parseFloat(t.substr(1))}return parseFloat(t)}(a)),c}function Cu(t){return"string"==typeof t&&t.includes("calc")}var Lu="calc(",Mu=Lu.length;function Nu(t,e){for(var n=t,r=0;;){var i=n.indexOf(Lu,r);if(-1===i)return n;var o=i+Mu,a=1;t:for(;;){switch(n[o]){case"(":a++;break;case")":if(0===--a)break t;break;case void 0:Tu(n)}o++}var s=n.slice(i+Mu,o);Cu(s)&&(s=Nu(s,e));var u=String(ku(s,e));n=n.slice(0,i)+u+n.slice(o+1),r=i+u.length}}var _u=["checked","selected","disabled","readOnly","contentEditable","value","indeterminate"].reduce(function(t,e){return t[e]=!0,t},{}),Ou={qualify:function(t){return xs(t)},set:function(e,t,r){Object.keys(e).forEach(function(t){if(_u[t]&&t in r){var n=e[t];"SELECT"===r.tagName&&Array.isArray(n)?Array.from(r.options).forEach(function(t,e){t.selected=n.includes(t.value)}):r[t]=n}})}};function Ru(o,a){return function(t,e){var n=ru(t);t=parseFloat(t),n&&(t/=100);var r={};if(isFinite(t)){var i=n||0<=t&&t<=1?t*e[a]:Math.max(t+e[a],0);r[o]=i}return r}}function Vu(a,s,u){return function(t,e){var n,r=ru(t);if(t=parseFloat(t),r&&(t/=100),isFinite(t)){var i=e[u]();n=r||0e.width?Yu:Wu)(t,e)})},refRCircumscribed:{set:function(t,e){var n=ru(t);t=parseFloat(t),n&&(t/=100);var r,i=Math.sqrt(e.height*e.height+e.width*e.width);return isFinite(t)&&(r=n||0<=t&&t<=1?t*i:Math.max(t+i,0)),{r:r}}},refCx:{set:Ru("cx","width")},refCy:{set:Ru("cy","height")},xAlignment:{offset:Fu("x","width","right")},yAlignment:{offset:Fu("y","height","bottom")},resetOffset:{offset:function(t,e){return t?{x:-e.x,y:-e.y}:{x:0,y:0}}},refDResetOffset:{set:Du({resetOffset:!0})},refDKeepOffset:{set:Du({resetOffset:!1})},refPointsResetOffset:{set:Iu({resetOffset:!0})},refPointsKeepOffset:{set:Iu({resetOffset:!1})},connection:{qualify:Uu,set:function(t){var e,n=t.stubs;if(void 0===n&&(n=0),isFinite(n)&&0!==n){var r;r=n<0?(this.getConnectionLength()+n)/2:n;var i=this.getConnection(),o=this.getConnectionSubdivisions(),a=i.divideAtLength(r,{segmentSubdivisions:o}),s=i.divideAtLength(-r,{segmentSubdivisions:o});a&&s&&(e=a[0].serialize()+" "+s[1].serialize())}return{d:e||this.getSerializedConnection()}}},atConnectionLengthKeepGradient:{qualify:Uu,set:zu("getTangentAtLength",{rotate:!0})},atConnectionLengthIgnoreGradient:{qualify:Uu,set:zu("getTangentAtLength",{rotate:!1})},atConnectionRatioKeepGradient:{qualify:Uu,set:zu("getTangentAtRatio",{rotate:!0})},atConnectionRatioIgnoreGradient:{qualify:Uu,set:zu("getTangentAtRatio",{rotate:!1})}};Xu["xlink:href"]=Xu.xlinkHref,["transform","d","points","cx","cy","x1","x2","y1","y2","x","y","dx","dy"].forEach(function(r){Xu[r]={qualify:Cu,set:function(t,e){var n;return(n={})[r]=Nu(t,e),n}}}),["width","height","r","rx","ry","font-size","stroke-width"].forEach(function(r){Xu[r]={qualify:Cu,set:function(t,e){var n;return(n={})[r]=Math.max(0,Nu(t,e)),n}}}),Xu.refR=Xu.refRInscribed,Xu.refD=Xu.refDResetOffset,Xu.refPoints=Xu.refPointsResetOffset,Xu.atConnectionLength=Xu.atConnectionLengthKeepGradient,Xu.atConnectionRatio=Xu.atConnectionRatioKeepGradient,Xu.fontSize=Xu["font-size"],Xu.strokeWidth=Xu["stroke-width"],Xu.refX2=Xu.refX,Xu.refY2=Xu.refY,Xu.refWidth2=Xu.refWidth,Xu.refHeight2=Xu.refHeight,Xu["ref-x"]=Xu.refX,Xu["ref-y"]=Xu.refY,Xu["ref-dy"]=Xu.refDy,Xu["ref-dx"]=Xu.refDx,Xu["ref-width"]=Xu.refWidth,Xu["ref-height"]=Xu.refHeight,Xu["x-alignment"]=Xu.xAlignment,Xu["y-alignment"]=Xu.yAlignment;var $u=Xu,Zu=l.Model.extend({constructor:function(t,e){var n,r=t||{};"function"==typeof this.preinitialize&&this.preinitialize.apply(this,arguments),this.cid=Ds("c"),this.attributes={},e&&e.collection&&(this.collection=e.collection),e&&e.parse&&(r=this.parse(r,e)||{}),(n=_s(this,"defaults"))&&(r=Is({},n,r)),this.set(r,e),this.changed={},this.initialize.apply(this,arguments)},translate:function(t,e,n){throw new Error("Must define a translate() method.")},toJSON:function(){var e=_s(this.constructor.prototype,"defaults").attrs||{},t=this.attributes.attrs,o={};Vs(t,function(t,r){var i=e[r];Vs(t,function(t,n){es(t)&&!Array.isArray(t)?Vs(t,function(t,e){i&&i[n]&&ys(i[n][e],t)||(o[r]=o[r]||{},(o[r][n]||(o[r][n]={}))[e]=t)}):i&&ys(i[n],t)||(o[r]=o[r]||{},o[r][n]=t)})});var n=vs(Os(this.attributes,"attrs"));return n.attrs=o,n},initialize:function(t){var e=this.getIdAttribute();t&&void 0!==t[e]||this.set(e,this.generateId(),{silent:!0}),this._transitionIds={},this._scheduledTransitionIds={},this.processPorts(),this.on("change:attrs",this.processPorts,this)},getIdAttribute:function(){return this.idAttribute||"id"},generateId:function(){return $s()},processPorts:function(){var t=this.ports,n={};Vs(this.get("attrs"),function(t,e){t&&t.port&&(void 0!==t.port.id?n[t.port.id]=t.port:n[t.port]={id:t.port})});var r={};(Vs(t,function(t,e){n[e]||(r[e]=!0)}),this.graph&&!ms(r))&&(this.graph.getConnectedLinks(this,{inbound:!0}).forEach(function(t){r[t.get("target").port]&&t.remove()}),this.graph.getConnectedLinks(this,{outbound:!0}).forEach(function(t){r[t.get("source").port]&&t.remove()}));this.ports=n},remove:function(t){void 0===t&&(t={});var e=this.graph,n=this.collection;if(!e)return n&&n.remove(this,t),this;e.startBatch("remove");var r=this.getParentCell();r&&r.unembed(this,t);for(var i=this.getEmbeddedCells(),o=0,a=i.length;o";if(r.parseFromString(i.replace(/@/g,""),"application/xml").getElementsByTagName("parsererror")[0])throw new Error("Invalid SVG markup");return e=r.parseFromString(i,"text/html").querySelector("svg"),n=[],Array.from(e.children).forEach(function(t){n.push(function n(t){var e={},r=t.tagName,i=t.attributes,o=t.namespaceURI,a=t.style,s=t.childNodes;e.namespaceURI=o,e.tagName=o===yi.namespace.xhtml?r.toLowerCase():r;for(var u={},l=a.length;l--;){var h=a[l];u[h]=a.getPropertyValue(h)}e.style=u;var c=i.getNamedItem("@selector");c&&(e.selector=c.value,i.removeNamedItem("@selector"));var f=i.getNamedItem("@group-selector");if(f){var d=f.value.split(",");e.groupSelector=d.map(function(t){return t.trim()}),i.removeNamedItem("@group-selector")}var p=i.getNamedItem("class");p&&(e.className=p.value);var g=[];s.forEach(function(t){switch(t.nodeType){case Node.TEXT_NODE:var e=t.data.replace(/\s\s+/g," ");e.trim()&&g.push(e);break;case Node.ELEMENT_NODE:g.push(n(t))}}),g.length&&(e.children=g);var v={};return Array.from(i).forEach(function(t){var e=t.name,n=t.value;v[e]=n}),0 "+e),n=this.getSelector(t.parentNode,n)}return n},addLinkFromMagnet:function(t,e,n){var r=this.paper,i=r.model,o=r.getDefaultLink(this,t);return o.set({source:this.getLinkEnd(t,e,n,o,"source"),target:{x:e,y:n}}).addTo(i,{async:!1,ui:!0}),o.findView(r)},getLinkEnd:function(t){for(var e,n=[],r=arguments.length-1;0i.options.clickThreshold||this.notify("element:magnet:pointerclick",t,e,n,r)}},{Flags:Cl});is(Nl.prototype,vl);var _l={_results:{},_tests:{svgforeignobject:function(){return!!document.createElementNS&&/SVGForeignObject/.test({}.toString.call(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")))}},addTest:function(t,e){return this._tests[t]=e},test:function(t){var e=this._tests[t];if(!e)throw new Error('Test not defined ("'+t+'"). Use `joint.env.addTest(name, fn) to add a new test.`');var n=this._results[t];if(void 0!==n)return n;try{n=e()}catch(t){n=!1}return this._results[t]=n}},Ol=ml.define("basic.Generic",{attrs:{".":{fill:"#ffffff",stroke:"none"}}}),Rl=Ol.define("basic.Rect",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:100,height:60},text:{fill:"#000000",text:"","font-size":14,"ref-x":.5,"ref-y":.5,"text-anchor":"middle","y-alignment":"middle","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Vl=Nl.extend({presentationAttributes:Nl.addPresentationAttributes({attrs:["SCALE"]}),confirmUpdate:function(){var t=Nl.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"SCALE")&&(this.resize(),t=this.removeFlag(t,"SCALE")),t}}),Fl=Ol.define("basic.Text",{attrs:{text:{"font-size":18,fill:"#000000"}}},{markup:''}),Bl=Ol.define("basic.Circle",{size:{width:60,height:60},attrs:{circle:{fill:"#ffffff",stroke:"#000000",r:30,cx:30,cy:30},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Dl=Ol.define("basic.Ellipse",{size:{width:60,height:40},attrs:{ellipse:{fill:"#ffffff",stroke:"#000000",rx:30,ry:20,cx:30,cy:20},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Il=Ol.define("basic.Polygon",{size:{width:60,height:40},attrs:{polygon:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),zl=Ol.define("basic.Polyline",{size:{width:60,height:40},attrs:{polyline:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),jl=Ol.define("basic.Image",{attrs:{text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Gl=Ol.define("basic.Path",{size:{width:60,height:60},attrs:{path:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle",ref:"path","ref-x":.5,"ref-dy":10,fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Ul=Gl.define("basic.Rhombus",{attrs:{path:{d:"M 30 0 L 60 30 30 60 0 30 z"},text:{"ref-y":.5,"ref-dy":null,"y-alignment":"middle"}}}),ql=_l.test("svgforeignobject"),Hl=Ol.define("basic.TextBlock",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:80,height:100},text:{fill:"#000000","font-size":14,"font-family":"Arial, helvetica, sans-serif"},".content":{text:"","ref-x":.5,"ref-y":.5,"y-alignment":"middle","x-alignment":"middle"}},content:""},{markup:['','',ql?'
':'',""].join(""),initialize:function(){this.listenTo(this,"change:size",this.updateSize),this.listenTo(this,"change:content",this.updateContent),this.updateSize(this,this.get("size")),this.updateContent(this,this.get("content")),Ol.prototype.initialize.apply(this,arguments)},updateSize:function(t,e){this.attr({".fobj":is({},e),div:{style:is({},e)}})},updateContent:function(t,e){ql?this.attr({".content":{html:lu(e)}}):this.attr({".content":{text:e}})},setForeignObjectSize:function(){this.updateSize.apply(this,arguments)},setDivContent:function(){this.updateContent.apply(this,arguments)}}),Yl=Nl.extend({presentationAttributes:ql?Nl.prototype.presentationAttributes:Nl.addPresentationAttributes({content:["CONTENT"],size:["CONTENT"]}),initFlag:["RENDER","CONTENT"],confirmUpdate:function(){var t=Nl.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"CONTENT")&&(this.updateContent(this.model),t=this.removeFlag(t,"CONTENT")),t},update:function(t,e){var n=this.model;if(ql)Nl.prototype.update.call(this,n,e);else{var r=Os(e||n.get("attrs"),".content");Nl.prototype.update.call(this,n,r),e&&!Ns(e,".content")||this.updateContent(n,e)}},updateContent:function(t,e){var n=Is({},(e||t.get("attrs"))[".content"]);n=Os(n,"text");var r=uu(t.get("content"),t.get("size"),n,{svgDocument:this.paper.svg}),i=Ys({},".content",n,"/");i[".content"].text=r,Nl.prototype.update.call(this,t,i)}}),Wl={Generic:Ol,Rect:Rl,TextView:Vl,Text:Fl,Circle:Bl,Ellipse:Dl,Polygon:Il,Polyline:zl,Image:jl,Path:Gl,Rhombus:Ul,TextBlock:Hl,TextBlockView:Yl},Xl=Zu.extend({markup:['','','','','','','',''].join(""),toolMarkup:['','','','',"Remove link.","",'','','',"Link options.","",""].join(""),doubleToolMarkup:void 0,vertexMarkup:['','','','',"Remove vertex.","",""].join(""),arrowheadMarkup:['','',""].join(""),defaultLabel:void 0,labelMarkup:void 0,_builtins:{defaultLabel:{markup:[{tagName:"rect",selector:"rect"},{tagName:"text",selector:"text"}],attrs:{text:{fill:"#000000",fontSize:14,textAnchor:"middle",yAlignment:"middle",pointerEvents:"none"},rect:{ref:"text",fill:"#ffffff",rx:3,ry:3,refWidth:1,refHeight:1,refX:0,refY:0}},position:{distance:.5}}},defaults:{type:"link",source:{},target:{}},isLink:function(){return!0},disconnect:function(t){return this.set({source:{x:0,y:0},target:{x:0,y:0}},t)},source:function(t,e,n){return void 0===t?gs(this.get("source")):(i=t instanceof Zu?((r=gs(e)||{}).id=t.id,n):xs(t)?(r=t,e):((r=gs(e)||{}).x=t.x,r.y=t.y,n),this.set("source",r,i));var r,i},target:function(t,e,n){return void 0===t?gs(this.get("target")):(i=t instanceof Zu?((r=gs(e)||{}).id=t.id,n):xs(t)?(r=t,e):((r=gs(e)||{}).x=t.x,r.y=t.y,n),this.set("target",r,i));var r,i},router:function(t,e,n){if(void 0===t){var r=this.get("router");return r?"object"==typeof r?gs(r):r:this.get("manhattan")?{name:"orthogonal"}:null}var i="object"==typeof t||"function"==typeof t,o=i?t:{name:t,args:e},a=i?e:n;return this.set("router",o,a)},connector:function(t,e,n){if(void 0===t){var r=this.get("connector");return r?"object"==typeof r?gs(r):r:this.get("smooth")?{name:"smooth"}:null}var i="object"==typeof t||"function"==typeof t,o=i?t:{name:t,args:e},a=i?e:n;return this.set("connector",o,a)},label:function(t,e,n){var r=this.labels();return(t=isFinite(t)&&null!==t?0|t:0)<0&&(t=r.length+t),arguments.length<=1?this.prop(["labels",t]):this.prop(["labels",t],e,n)},labels:function(t,e){return 0===arguments.length?(t=this.get("labels"),Array.isArray(t)?t.slice():[]):(Array.isArray(t)||(t=[]),this.set("labels",t,e))},hasLabels:function(){var t=this.attributes.labels;return Array.isArray(t)&&0e[1].x?"right":"left";switch(r){case"left":o=new Jn(-1,0);break;case"right":default:o=new Jn(1,0)}n.rotate&&i&&o.rotate(null,-i);return o}(t,e,r);case xh.VERTICAL:return function(t,e,n){var r,i,o,a=t.sourceBBox;if(t.sourceView)if(i=t.sourceView.model.angle(),n.rotate&&i){var s=t.sourceView.getNodeUnrotatedBBox(t.sourceView.el),u=e[0].clone();u.rotate(a.center(),i),r=s.sideNearestToPoint(u)}else r=a.sideNearestToPoint(e[0]);else r=a.y>e[1].y?"bottom":"top";switch(r){case"top":o=new Jn(0,-1);break;case"bottom":default:o=new Jn(0,1)}n.rotate&&i&&o.rotate(null,-i);return o}(t,e,r);case xh.CLOSEST_POINT:return Eh(t,e);case xh.OUTWARDS:return kh(t,e);case xh.AUTO:default:return Ph(t,e,r)}}(i,c,a,u),d=c[0].distance(c[1])*u.coeff,p=Mh(f,c[1].difference(c[0]).normalize());if(p>Math.PI/4){var g=d+(p-Math.PI/4)*u.angleTangentCoefficient;l=f.clone().scale(g,g)}else l=f.clone().scale(d,d)}if(u.targetTangent)h=u.targetTangent;else{var v=function(t,e,n,r){if(r.targetDirection)switch(r.targetDirection){case wh.UP:return new Jn(0,-1);case wh.DOWN:return new Jn(0,1);case wh.LEFT:return new Jn(-1,0);case wh.RIGHT:return new Jn(0,1);case wh.AUTO:return Sh(t,e,r);case wh.CLOSEST_POINT:return Th(t,e);case wh.OUTWARDS:return Ch(t,e);default:return r.targetDirection}switch(n){case xh.HORIZONTAL:return function(t,e,n){var r,i,o,a=t.targetBBox;if(t.targetView)if(i=t.targetView.model.angle(),n.rotate&&i){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),u=e[e.length-1].clone();u.rotate(a.center(),i),r=s.sideNearestToPoint(u)}else r=a.sideNearestToPoint(e[e.length-1]);else r=a.x>e[e.length-2].x?"left":"right";switch(r){case"left":o=new Jn(-1,0);break;case"right":default:o=new Jn(1,0)}n.rotate&&i&&o.rotate(null,-i);return o}(t,e,r);case xh.VERTICAL:return function(t,e,n){var r,i,o,a=t.targetBBox;if(t.targetView)if(i=t.targetView.model.angle(),n.rotate&&i){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),u=e[e.length-1].clone();u.rotate(a.center(),i),r=s.sideNearestToPoint(u)}else r=a.sideNearestToPoint(e[e.length-1]);else r=a.y>e[e.length-2].y?"top":"bottom";switch(r){case"top":o=new Jn(0,-1);break;case"bottom":default:o=new Jn(0,1)}n.rotate&&i&&o.rotate(null,-i);return o}(t,e,r);case xh.CLOSEST_POINT:return Th(t,e);case xh.OUTWARDS:return Ch(t,e);case xh.AUTO:default:return Sh(t,e,r)}}(i,c,a,u),m=c.length-1,y=c[m-1].distance(c[m])*u.coeff,b=Mh(v,c[m-1].difference(c[m]).normalize());if(b>Math.PI/4){var x=y+(b-Math.PI/4)*u.angleTangentCoefficient;h=v.clone().scale(x,x)}else h=v.clone().scale(y,y)}var w=function(t,e,n,r){for(var i=r.tau,o=r.coeff,a=[],s=[],u=[],l=t.length-1,h=0;h=Math.abs(t.y-e.y)){var l=(t.x+e.x)/2;u=Cr.createSegment("C",l,t.y,l,e.y,e.x,e.y),i.appendSegment(u)}else{var h=(t.y+e.y)/2;u=Cr.createSegment("C",t.x,h,e.x,h,e.x,e.y),i.appendSegment(u)}}return o?i:i.serialize()},curve:Ah},Oh=Sl.extend({tagName:"path",className:"highlight-stroke",attributes:{"pointer-events":"none","vector-effect":"non-scaling-stroke",fill:"none"},options:{padding:3,rx:0,ry:0,useFirstSubpath:!1,attrs:{"stroke-width":3,stroke:"#FEB663"}},getPathData:function(e,n){var r,i=this.options,t=i.useFirstSubpath;try{var o=yi(n);if(r=o.convertToPathData().trim(),"PATH"===o.tagName()&&t){var a=r.search(/.M/i)+1;0e.y?"N":"S":t.y===e.y?t.x>e.x?"W":"E":null}function oc(t){return new gr(t.x,t.y,0,0)}function ac(t){var e=du(t.padding||t.elementPadding||20);return{x:-e.left,y:-e.top,width:e.left+e.right,height:e.top+e.bottom}}function sc(t,e){return t.sourceBBox.clone().moveAndExpand(ac(e))}function uc(t,e){return t.targetBBox.clone().moveAndExpand(ac(e))}function lc(t,e,n){var r=new Jn(t.x,e.y),i=new Jn(e.x,t.y),o=ic(t,r),a=ic(t,i),s=tc[n],u=o===n||o!==s&&(a===s||a!==n)?r:i;return{points:[u],direction:ic(u,e)}}function hc(t,e,n){var r=nc(t,e,n);return{points:[r],direction:ic(r,e)}}function cc(e,t,n,r){var i,o={},a=[new Jn(e.x,t.y),new Jn(t.x,e.y)],s=a.filter(function(t){return!n.containsPoint(t)}),u=s.filter(function(t){return ic(t,e)!==r});if(0l.center().distance(t),c=h?e:t,f=h?t:e;return a=nc(o=i?(o=Jn.fromPolar(l.width+l.height,ec[i],c),l.pointNearestToPoint(o).move(o,-1)):l.pointNearestToPoint(c).move(c,1),f,l),o.round().equals(a.round())?(a=Jn.fromPolar(l.width+l.height,_n(o.theta(c))+Math.PI/2,f),s=nc(o,a=l.pointNearestToPoint(a).move(f,1).round(),l),u.points=h?[a,s,o]:[o,s,a]):u.points=h?[a,o]:[o,a],u.direction=ic(h?o:a,e),u}function pc(t,e,n){var r,i,o,a,s,u=sc(n,e),l=uc(n,e),h=(i=e,(r=n).sourceAnchor?r.sourceAnchor:sc(r,i).center()),c=(a=e,(o=n).targetAnchor?o.targetAnchor:uc(o,a).center());u=u.union(oc(h)),l=l.union(oc(c)),(t=ws(t).map(Jn)).unshift(h),t.push(c);for(var f=[],d=0,p=t.length-1;dr.maxAllowedDirectionChange)){var Y=Ec(D.clone().offset(C.gridOffsetX,C.gridOffsetY),b,u),W=Tc(Y);if(!x.isClose(W)&&!n(Y)){if(0<=R.indexOf(W))if(!Y.equals(d))if(Ac(H,wc(Y,d,O,b,r))>r.maxAllowedDirectionChange)continue;var X=z+C.cost+(G?0:r.penalties[L]);(!x.isOpen(W)||X=this.options.longLinkLength){var i=this.options.doubleLinkToolsOffset||e;r=this.getPointAtLength(n-i),this._tool2Cache.attr("transform","translate("+r.x+", "+r.y+") "+t),this._tool2Cache.attr("visibility","visible")}else this.options.doubleLinkTools&&this._tool2Cache.attr("visibility","hidden")}return this},updateArrowheadMarkers:function(){if(!this._V.markerArrowheads)return this;if("none"===P.css(this._V.markerArrowheads.node,"display"))return this;var t=this.getConnectionLength()i;)b(r,n=e[i++])&&(~mt(o,n)||o.push(n));return o},bt=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],xt=bt.concat("length","prototype"),wt={f:Object.getOwnPropertyNames||function(t){return yt(t,xt)}},At={f:Object.getOwnPropertySymbols},Pt=st("Reflect","ownKeys")||function(t){var e=wt.f(L(t)),n=At.f;return n?e.concat(n(t)):e},Tt=function(t,e){for(var n=Pt(e),r=O.f,i=C.f,o=0;o"+t+""},Xt=function(){try{nt=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;Xt=nt?function(t){t.write(Wt("")),t.close();var e=t.parentWindow.Object;return t=null,e}(nt):((e=E("iframe")).style.display="none",Gt.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(Wt("document.F=Object")),t.close(),t.F);for(var n=bt.length;n--;)delete Xt[Ut][bt[n]];return Xt()};$[qt]=!0;var $t=Object.create||function(t,e){var n;return null!==t?(Yt[Ut]=L(t),n=new Yt,Yt[Ut]=null,n[qt]=t):n=Xt(),void 0===e?n:jt(n,e)},Zt=It("unscopables"),Jt=Array.prototype;null==Jt[Zt]&&O.f(Jt,Zt,{configurable:!0,value:$t(null)});var Kt=function(t){Jt[Zt][t]=!0},Qt=Object.defineProperty,te={},ee=function(t){throw t},ne=function(t,e){if(b(te,t))return te[t];e||(e={});var n=[][t],r=!!b(e,"ACCESSORS")&&e.ACCESSORS,i=b(e,0)?e[0]:ee,o=b(e,1)?e[1]:void 0;return te[t]=!!n&&!a(function(){if(r&&!s)return!0;var t={length:-1};r?Qt(t,1,{enumerable:!0,get:ee}):t[1]=1,n.call(t,i,o)})},re=vt.includes,ie=ne("indexOf",{ACCESSORS:!0,1:0});_t({target:"Array",proto:!0,forced:!ie},{includes:function(t){return re(this,t,1=n.length?{value:void 0,done:!0}:(t=He(n,r),e.index+=t.length,{value:t,done:!1})});var Xe=function(e,t,n,r){try{return r?t(L(n)[0],n[1]):t(n)}catch(t){throw function(t){var e=t.return;if(void 0!==e)L(e.call(t)).value}(e),t}},$e=It("iterator"),Ze=Array.prototype,Je=function(t,e,n){var r=m(e);r in t?O.f(t,r,x(0,n)):t[r]=n},Ke={};Ke[It("toStringTag")]="z";var Qe="[object z]"===String(Ke),tn=It("toStringTag"),en="Arguments"==d(function(){return arguments}()),nn=Qe?d:function(t){var e,n,r;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),tn))?n:en?d(e):"Object"==(r=d(e))&&"function"==typeof e.callee?"Arguments":r},rn=It("iterator"),on=It("iterator"),an=!1;try{var sn=0,un={next:function(){return{done:!!sn++}},return:function(){an=!0}};un[on]=function(){return this},Array.from(un,function(){throw 2})}catch(t){}var ln=!function(t,e){if(!e&&!an)return!1;var n=!1;try{var r={};r[on]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(t){}return n}(function(t){Array.from(t)});_t({target:"Array",stat:!0,forced:ln},{from:function(t){var e,n,r,i,o,a,s,u=ue(t),l="function"==typeof this?this:Array,h=arguments.length,c=1>8-i%1*8)){if(255<(n=r.charCodeAt(i+=.75)))throw new u("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");e=e<<8|n}return a}),t.atob||(t.atob=function(t){var e=String(t).replace(/=+$/,"");if(e.length%4==1)throw new u("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,r,i=0,o=0,a="";r=e.charAt(o++);~r&&(n=i%4?64*n+r:r,i++%4)?a+=String.fromCharCode(255&n>>(-2*i&6)):0)r=s.indexOf(r);return a})}()});_t({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});ot.Number.isNaN;var pn=h.isFinite,gn=Number.isFinite||function(t){return"number"==typeof t&&pn(t)};_t({target:"Number",stat:!0},{isFinite:gn});ot.Number.isFinite;var vn=It("match"),mn=function(t){if(v(e=t)&&(void 0!==(n=e[vn])?n:"RegExp"==d(e)))throw TypeError("The method doesn't accept regular expressions");var e,n;return t},yn=It("match"),bn=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[yn]=!1,"/./"[e](n)}catch(t){}}return!1};_t({target:"String",proto:!0,forced:!bn("includes")},{includes:function(t){return!!~String(p(this)).indexOf(mn(t),1r)&&!(new er(t,n).length()>r)},divideAt:function(t){var e=this.pointAt(t);return[new er(this.start,e),new er(e,this.end)]},divideAtLength:function(t){var e=this.pointAtLength(t);return[new er(this.start,e),new er(e,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,e){if(t&&t.intersectionWithLine){var n=t.intersectionWithLine(this,e);return n&&t instanceof er&&(n=n[0]),n}return null},intersectionWithLine:function(t){var e=new Jn(this.end.x-this.start.x,this.end.y-this.start.y),n=new Jn(t.end.x-t.start.x,t.end.y-t.start.y),r=e.x*n.y-e.y*n.x,i=new Jn(t.start.x-this.start.x,t.start.y-this.start.y),o=i.x*n.y-i.y*n.x,a=i.x*e.y-i.y*e.x;if(0===r||o*r<0||a*r<0)return null;if(0s.x+o/2,c=rs.x?i-30:i+30)-l)/(a*a*(r-u))+u:e=a*a/(i-l)-a*a*(r-u)*((n=i>s.y?r+30:r-30)-u)/(o*o*(i-l))+l,new Jn(n,e).theta(t)},toString:function(){return new Jn(this.x,this.y).toString()+" "+this.a+" "+this.b}};var sr=ar,ur=Math.abs,lr=Math.cos,hr=Math.sin,cr=Math.min,dr=Math.max,fr=Math.round,pr=Math.pow,gr=function(t,e,n,r){if(!(this instanceof gr))return new gr(t,e,n,r);Object(t)===t&&(e=t.y,n=t.width,r=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===e?0:e,this.width=void 0===n?0:n,this.height=void 0===r?0:r};gr.fromEllipse=function(t){return t=new ar(t),new gr(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},gr.fromPointUnion=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if(0===t.length)return null;var n,r,i,o,a=new Jn;n=r=1/0,i=o=-1/0;for(var s=0;s=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var e=new gr(this).normalize(),n=new gr(t).normalize(),r=e.width,i=e.height,o=n.width,a=n.height;if(!(r&&i&&o&&a))return!1;var s=e.x,u=e.y,l=n.x,h=n.y;return o+=l,r+=s,a+=h,i+=u,s<=l&&o<=r&&u<=h&&a<=i},corner:function(){return new Jn(this.x+this.width,this.y+this.height)},equals:function(t){var e=new gr(this).normalize(),n=new gr(t).normalize();return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height},inflate:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.x-=t,this.y-=e,this.width+=2*t,this.height+=2*e,this},intersect:function(t){var e=this.origin(),n=this.corner(),r=t.origin(),i=t.corner();if(i.x<=e.x||i.y<=e.y||r.x>=n.x||r.y>=n.y)return null;var o=dr(e.x,r.x),a=dr(e.y,r.y);return new gr(o,a,cr(n.x,i.x)-o,cr(n.y,i.y)-a)},intersectionWithLine:function(t){var e,n,r=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],i=[],o=[],a=r.length;for(n=0;nh&&(r=(this.x+this.width-h)/(f.x-h)),f.y>c&&(s=(this.y+this.height-c)/(f.y-c));var p=t.topRight();p.x>h&&(i=(this.x+this.width-h)/(p.x-h)),p.yc&&(l=(this.y+this.height-c)/(g.y-c)),{sx:cr(n,r,i,o),sy:cr(a,s,u,l)}},maxRectUniformScaleToFit:function(t,e){var n=this.maxRectScaleToFit(t,e);return cr(n.sx,n.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,e=this.y,n=this.width,r=this.height;return this.width<0&&(t=this.x+this.width,n=-this.width),this.height<0&&(e=this.y+this.height,r=-this.height),this.x=t,this.y=e,this.width=n,this.height=r,this},offset:function(t,e){return Jn.prototype.offset.call(this,t,e)},origin:function(){return new Jn(this.x,this.y)},pointNearestToPoint:function(t){if(t=new Jn(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new Jn(this.x+this.width,t.y);case"left":return new Jn(this.x,t.y);case"bottom":return new Jn(t.x,this.y+this.height);case"top":return new Jn(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new er(this.topRight(),this.bottomRight())},rightMiddle:function(){return new Jn(this.x+this.width,this.y+this.height/2)},round:function(t){var e=1;if(t)switch(t){case 1:e=10;break;case 2:e=100;break;case 3:e=1e3;break;default:e=pr(10,t)}return this.x=fr(this.x*e)/e,this.y=fr(this.y*e)/e,this.width=fr(this.width*e)/e,this.height=fr(this.height*e)/e,this},scale:function(t,e,n){return n=this.origin().scale(t,e,n),this.x=n.x,this.y=n.y,this.width*=t,this.height*=e,this},sideNearestToPoint:function(t){var e=(t=new Jn(t)).x-this.x,n=this.x+this.width-t.x,r=t.y-this.y,i=e,o="left";return nr.x&&(r=t[e]);var a=[];for(e=0;ed.y||i>c.y&&i<=d.y){var f=c.x-r>d.x-r?c.x-r:d.x-r;0<=f&&(h.x=r+f,h.y=i,l.start=t,l.end=h,u.intersect(l)&&s++)}o=a}return s%2==1},close:function(){var t=this.start,e=this.end,n=this.points;return t&&e&&!t.equals(e)&&n.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new xr(br(this.points))},equals:function(t){if(!t)return!1;var e=this.points,n=t.points,r=e.length;if(n.length!==r)return!1;for(var i=0;ii+a&&r.x>i+a||n.xo+s&&r.y>o+s||n.ye.x&&t.ye.y}function Xr(t,e){return li(t,e,{interior:!1})}function $r(t,e){return hi(t,e,{interior:!1})}function Zr(t,e){return ci(t,e,{interior:!1})}function Jr(t,e){return fi(t,e,{interior:!1})}function Kr(t,e){return li(t,e,{interior:!0})}function Qr(t,e){return hi(t,e,{interior:!0})}function ti(t,e){return ci(t,e,{interior:!0})}function ei(t,e){return fi(t,e,{interior:!0})}function ni(t,e){return pi(t,e,{interior:!0})}function ri(t,n,r){return t.getSubpaths().some(function(t){var e=t.toPolylines(r)[0];return"Z"===t.getSegment(-1).type?Kr(e,n):Xr(e,n)})}function ii(t,n,r){return t.getSubpaths().some(function(t){var e=t.toPolylines(r)[0];return"Z"===t.getSegment(-1).type?Qr(e,n):$r(e,n)})}function oi(t,e,n){return si(t,jr.fromRect(e),n)}function ai(t,e,n){return di(t,e,n,{interior:!1})}function si(t,e,n){return di(t,e,n,{interior:!0})}function ui(t,n,r,i){return t.getSubpaths().some(function(t){var e=t.toPolylines(r)[0];return"Z"===t.getSegment(-1).type?si(n,e,i):ai(n,e,i)})}function li(t,e,n){void 0===n&&(n={});var r,i=n.interior;if(void 0===i&&(i=!1),i){if(t.containsPoint(e.start))return!0;var o=t.start,a=t.end,s=t.points;r=a.equals(o)?s:s.concat([o])}else r=t.points;for(var u=r.length,l=new er,h=0;h'+t+"";return F.parseXML(e,{async:!1}).documentElement}var n=document.createElementNS(V.svg,"svg");return n.setAttributeNS(V.xmlns,"xmlns:xlink",V.xlink),n.setAttribute("version","1.1"),n},F.createSVGStyle=function(t){return F("style",{type:"text/css"},[F.createCDATASection(t)]).node},F.createCDATASection=function(t){return void 0===t&&(t=""),document.implementation.createDocument(null,"xml",null).createCDATASection(t)},F.idCounter=0,F.uniqueId=function(){return"v-"+ ++F.idCounter},F.toNode=function(t){return F.isV(t)?t.node:t.nodeName&&t||t[0]},F.ensureId=function(t){return(t=F.toNode(t)).id||(t.id=F.uniqueId())},F.sanitizeText=function(t){return(t||"").replace(/ /g,"\xa0")},F.isUndefined=function(t){return void 0===t},F.isString=function(t){return"string"==typeof t},F.isObject=function(t){return t&&"object"==typeof t},F.isArray=Array.isArray,F.parseXML=function(t,e){var n;e=e||{};try{var r=new DOMParser;F.isUndefined(e.async)||(r.async=e.async),n=r.parseFromString(t,"text/xml")}catch(t){n=void 0}if(!n||n.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+t);return n};var r=Object.create(null);["baseFrequency","baseProfile","clipPathUnits","contentScriptType","contentStyleType","diffuseConstant","edgeMode","externalResourcesRequired","filterRes","filterUnits","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].forEach(function(t){return r[t]=t});var s=new Proxy(r,{get:function(t,e){return F.supportCamelCaseAttributes?e in t?t[e]:t[e]=e.replace(/[A-Z]/g,"-$&").toLowerCase():e}});Object.defineProperty(F,"attributeNames",{value:s,writable:!1}),Object.defineProperty(F,"supportCamelCaseAttributes",{value:!1,writable:!0}),F.qualifyAttr=function(t){if(-1===t.indexOf(":"))return{ns:null,local:t};var e=t.split(":");return{ns:V[e[0]],local:e[1]}},F.transformSeparatorRegex=/[ ,]+/,F.transformRegex=/\b\w+\([^()]+\)/g,F.transformFunctionRegex=/\b(\w+)\(([^()]+)\)/,F.transformTranslateRegex=/\btranslate\(([^()]+)\)/,F.transformRotateRegex=/\brotate\(([^()]+)\)/,F.transformScaleRegex=/\bscale\(([^()]+)\)/,F.transformStringToMatrix=function(t){var e=F.createSVGMatrix(),n=t&&t.match(F.transformRegex);if(!n)return e;for(var r=n.length,i=0;i=t.start&&et.start&&n<=t.end||t.start>=e&&t.end=e?t.end+=n:t.start>=e&&(t.start+=n,t.end+=n)}),t},F.convertLineToPathData=function(t){return["M",(t=F(t)).attr("x1"),t.attr("y1"),"L",t.attr("x2"),t.attr("y2")].join(" ")},F.convertPolygonToPathData=function(t){var e=F.getPointsFromSvgNode(t);return 0===e.length?null:F.svgPointsToPath(e)+" Z"},F.convertPolylineToPathData=function(t){var e=F.getPointsFromSvgNode(t);return 0===e.length?null:F.svgPointsToPath(e)},F.svgPointsToPath=function(t){for(var e=0,n=t.length;e=o[i]&&(a.push([e].concat(r.splice(0,o[i]))),o[i]););}),a}(t)),!t||!t.length)return[["M",0,0]];for(var e,n=[],r=0,i=0,o=0,a=0,s=t.length,u=0;ud){var S=T,k=u,C=l;p=t(u=w+r*q(T=P+d*(s&&Pg)N=g-1;else if(void 0!==o){if(void 0===y&&""!==l.data)if("auto"===n.lineHeight)y=au({value:1.5,unit:"em"},u);else y=au(ru(n.lineHeight,["em","px",""]),u);y*w.length>o&&(N=Math.floor(o/y)-1)}if(null!==N){w.splice(N+1);var _=r.ellipsis;if(!_||N<0)break;"string"!=typeof _&&(_="\u2026");var R=w[N];if(!R&&!S)break;var V,F,B=R.length;do{if(F=R[B],V=R.substring(0,B),F?F.match(c)&&(V+=F):V+=d,V+=_,l.data=V,s.getComputedTextLength()<=i){w[N]=V;break}B--}while(0<=B);break}}}return r.svgDocument?a.removeChild(u):document.body.removeChild(a),w.join(f)},uu=function(t){var e=P(P.parseHTML("
"+t+"
",null,!1));return e.find("*").each(function(){var n=this;P.each(n.attributes,function(){var t=this.name,e=this.value;(t.startsWith("on")||e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&P(n).removeAttr(t)})}),e.html()},lu=function(t,e){if(window.navigator.msSaveBlob)window.navigator.msSaveBlob(t,e);else{var n=window.URL.createObjectURL(t),r=document.createElement("a");r.href=n,r.download=e,document.body.appendChild(r),r.click(),document.body.removeChild(r),window.URL.revokeObjectURL(n)}},hu=function(t){t=t.replace(/\s/g,"");var e,n=(t=decodeURIComponent(t)).indexOf(","),r=t.slice(0,n),i=r.split(":")[1].split(";")[0],o=t.slice(n+1);e=0<=r.indexOf("base64")?atob(o):unescape(encodeURIComponent(o));for(var a=new Uint8Array(e.length),s=0;s')({color:t.color||"blue",opacity:Number.isFinite(t.opacity)?t.opacity:1,outerRadius:e+n,innerRadius:e})},highlight:function(t){return mu('')({color:t.color||"red",width:Number.isFinite(t.width)?t.width:1,blur:Number.isFinite(t.blur)?t.blur:0,opacity:Number.isFinite(t.opacity)?t.opacity:1})},blur:function(t){var e=Number.isFinite(t.x)?t.x:2;return mu('')({stdDeviation:Number.isFinite(t.y)?[e,t.y]:e})},dropShadow:function(t){var e="SVGFEDropShadowElement"in window?'':'';return mu(e)({dx:t.dx||0,dy:t.dy||0,opacity:Number.isFinite(t.opacity)?t.opacity:1,color:t.color||"black",blur:Number.isFinite(t.blur)?t.blur:4})},grayscale:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return mu('')({a:.2126+.7874*(1-e),b:.7152-.7152*(1-e),c:.0722-.0722*(1-e),d:.2126-.2126*(1-e),e:.7152+.2848*(1-e),f:.0722-.0722*(1-e),g:.2126-.2126*(1-e),h:.0722+.9278*(1-e)})},sepia:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return mu('')({a:.393+.607*(1-e),b:.769-.769*(1-e),c:.189-.189*(1-e),d:.349-.349*(1-e),e:.686+.314*(1-e),f:.168-.168*(1-e),g:.272-.272*(1-e),h:.534-.534*(1-e),i:.131+.869*(1-e)})},saturate:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return mu('')({amount:1-e})},hueRotate:function(t){return mu('')({angle:t.angle||0})},invert:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return mu('')({amount:e,amount2:1-e})},brightness:function(t){return mu('')({amount:Number.isFinite(t.amount)?t.amount:1})},contrast:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return mu('')({amount:e,amount2:.5-e/2})}},vu={number:function(t,e,o){o=o||{currency:["$",""],decimal:".",thousands:",",grouping:[3]};var n=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i.exec(t),r=n[1]||" ",i=n[2]||">",a=n[3]||"",s=n[4]||"",u=n[5],l=+n[6],h=n[7],c=n[8],d=n[9],f=1,p="",g="",v=!1;switch(c&&(c=+c.substring(1)),(u||"0"===r&&"="===i)&&(u=r="0",i="=",h&&(l-=Math.floor((l-1)/4))),d){case"n":h=!0,d="g";break;case"%":f=100,g="%",d="f";break;case"p":f=100,g="%",d="r";break;case"b":case"o":case"x":case"X":"#"===s&&(p="0"+d.toLowerCase());break;case"c":case"d":v=!0,c=0;break;case"s":f=-1,d="r"}"$"===s&&(p=o.currency[0],g=o.currency[1]),"r"!=d||c||(d="g"),null!=c&&("g"==d?c=Math.max(1,Math.min(21,c)):"e"!=d&&"f"!=d||(c=Math.max(0,Math.min(20,c))));var m=u&&h;if(v&&e%1)return"";var y=e<0||0===e&&1/e<0?(e=-e,"-"):a,b=g;if(f<0){var x=this.prefix(e,c);e=x.scale(e),b=x.symbol+g}else e*=f;var w=(e=this.convert(d,e,c)).lastIndexOf("."),A=w<0?e:e.substring(0,w),P=w<0?"":o.decimal+e.substring(w+1);function T(t){for(var e=t.length,n=[],r=0,i=o.grouping[0];0"===i?S+y+e:"^"===i?S.substring(0,E>>=1)+y+e+S.substring(E):y+(m?e:S+e))+b},string:function(t,e){for(var n,r="{",i=!1,o=[];-1!==(n=t.indexOf(r));){var a,s,u;if(a=t.slice(0,n),i){u=(s=a.split(":")).shift().split("."),a=e;for(var l=0;l|\$\{ ?([^{} ]+) ?\}|\{\{([^{} ]+)\}\}/g;return function(r){return r=r||{},t.replace(e,function(t){for(var e=Array.from(arguments).slice(1,4).find(function(t){return!!t}).split("."),n=r[e.shift()];void 0!==n&&e.length;)n=n[e.shift()];return void 0!==n?n:""})}},yu=function(){};function bu(t){t=ps(t);var a=ws(t).reduce(function(t,e){return t[e.id]=e.clone(),t},{});return ws(t).forEach(function(t){var e=a[t.id];if(e.isLink()){var n=e.source(),r=e.target();n.id&&a[n.id]&&e.prop("source/id",a[n.id].id),r.id&&a[r.id]&&e.prop("target/id",a[r.id].id)}var i=t.get("parent");i&&a[i]&&e.set("parent",a[i].id);var o=ws(t.get("embeds")).reduce(function(t,e){return a[e]&&t.push(a[e].id),t},[]);ms(o)||e.set("embeds",o)}),a}var xu={x:"x",y:"y",width:"w",height:"h",minimum:"s",maximum:"l",diagonal:"d"},wu=Object.keys(xu).map(function(t){return xu[t]}).join(""),Au="[-+]?[0-9]*\\.?[0-9]+(?:[eE][-+]?[0-9]+)?",Pu=/\s/g,Tu=new RegExp("^("+Au+"\\*)?(["+wu+"])(/"+Au+")?([-+]{1,2}"+Au+")?$","g");function Eu(t){throw new Error("Invalid calc() expression: "+t)}function Su(t,e){var n=Tu.exec(t.replace(Pu,""));n||Eu(t),Tu.lastIndex=0;var r=n[1],i=n[2],o=n[3],a=n[4],s=e.x,u=e.y,l=e.width,h=e.height,c=0;switch(i){case xu.width:c=l;break;case xu.height:c=h;break;case xu.x:c=s;break;case xu.y:c=u;break;case xu.minimum:c=Math.min(h,l);break;case xu.maximum:c=Math.max(h,l);break;case xu.diagonal:c=Math.sqrt(h*h+l*l)}return r&&(c*=parseFloat(r)),o&&(c/=parseFloat(o.slice(1))),a&&(c+=function(t){if(!t)return 0;switch(t[0]){case"+":return parseFloat(t.substr(1));case"-":return-parseFloat(t.substr(1))}return parseFloat(t)}(a)),c}function ku(t){return"string"==typeof t&&t.includes("calc")}var Cu="calc(",Lu=Cu.length;function Mu(t,e){for(var n=t,r=0;;){var i=n.indexOf(Cu,r);if(-1===i)return n;var o=i+Lu,a=1;t:for(;;){switch(n[o]){case"(":a++;break;case")":if(0===--a)break t;break;case void 0:Eu(n)}o++}var s=n.slice(i+Lu,o);ku(s)&&(s=Mu(s,e));var u=String(Su(s,e));n=n.slice(0,i)+u+n.slice(o+1),r=i+u.length}}var Ou=["checked","selected","disabled","readOnly","contentEditable","value","indeterminate"].reduce(function(t,e){return t[e]=!0,t},{}),Nu={qualify:function(t){return xs(t)},set:function(e,t,r){Object.keys(e).forEach(function(t){if(Ou[t]&&t in r){var n=e[t];"SELECT"===r.tagName&&Array.isArray(n)?Array.from(r.options).forEach(function(t,e){t.selected=n.includes(t.value)}):r[t]=n}})}};function _u(o,a){return function(t,e){var n=nu(t);t=parseFloat(t),n&&(t/=100);var r={};if(isFinite(t)){var i=n||0<=t&&t<=1?t*e[a]:Math.max(t+e[a],0);r[o]=i}return r}}function Ru(a,s,u){return function(t,e){var n,r=nu(t);if(t=parseFloat(t),r&&(t/=100),isFinite(t)){var i=e[u]();n=r||0e.width?qu:Yu)(t,e)})},refRCircumscribed:{set:function(t,e){var n=nu(t);t=parseFloat(t),n&&(t/=100);var r,i=Math.sqrt(e.height*e.height+e.width*e.width);return isFinite(t)&&(r=n||0<=t&&t<=1?t*i:Math.max(t+i,0)),{r:r}}},refCx:{set:_u("cx","width")},refCy:{set:_u("cy","height")},xAlignment:{offset:Vu("x","width","right")},yAlignment:{offset:Vu("y","height","bottom")},resetOffset:{offset:function(t,e){return t?{x:-e.x,y:-e.y}:{x:0,y:0}}},refDResetOffset:{set:Bu({resetOffset:!0})},refDKeepOffset:{set:Bu({resetOffset:!1})},refPointsResetOffset:{set:Du({resetOffset:!0})},refPointsKeepOffset:{set:Du({resetOffset:!1})},connection:{qualify:Gu,set:function(t){var e,n=t.stubs;if(void 0===n&&(n=0),isFinite(n)&&0!==n){var r;r=n<0?(this.getConnectionLength()+n)/2:n;var i=this.getConnection(),o=this.getConnectionSubdivisions(),a=i.divideAtLength(r,{segmentSubdivisions:o}),s=i.divideAtLength(-r,{segmentSubdivisions:o});a&&s&&(e=a[0].serialize()+" "+s[1].serialize())}return{d:e||this.getSerializedConnection()}}},atConnectionLengthKeepGradient:{qualify:Gu,set:Iu("getTangentAtLength",{rotate:!0})},atConnectionLengthIgnoreGradient:{qualify:Gu,set:Iu("getTangentAtLength",{rotate:!1})},atConnectionRatioKeepGradient:{qualify:Gu,set:Iu("getTangentAtRatio",{rotate:!0})},atConnectionRatioIgnoreGradient:{qualify:Gu,set:Iu("getTangentAtRatio",{rotate:!1})}};Wu["xlink:href"]=Wu.xlinkHref,["transform","d","points","cx","cy","x1","x2","y1","y2","x","y","dx","dy"].forEach(function(r){Wu[r]={qualify:ku,set:function(t,e){var n;return(n={})[r]=Mu(t,e),n}}}),["width","height","r","rx","ry","font-size","stroke-width"].forEach(function(r){Wu[r]={qualify:ku,set:function(t,e){var n;return(n={})[r]=Math.max(0,Mu(t,e)),n}}}),Wu.refR=Wu.refRInscribed,Wu.refD=Wu.refDResetOffset,Wu.refPoints=Wu.refPointsResetOffset,Wu.atConnectionLength=Wu.atConnectionLengthKeepGradient,Wu.atConnectionRatio=Wu.atConnectionRatioKeepGradient,Wu.fontSize=Wu["font-size"],Wu.strokeWidth=Wu["stroke-width"],Wu.refX2=Wu.refX,Wu.refY2=Wu.refY,Wu.refWidth2=Wu.refWidth,Wu.refHeight2=Wu.refHeight,Wu["ref-x"]=Wu.refX,Wu["ref-y"]=Wu.refY,Wu["ref-dy"]=Wu.refDy,Wu["ref-dx"]=Wu.refDx,Wu["ref-width"]=Wu.refWidth,Wu["ref-height"]=Wu.refHeight,Wu["x-alignment"]=Wu.xAlignment,Wu["y-alignment"]=Wu.yAlignment;var Xu=Wu,$u=l.Model.extend({constructor:function(t,e){var n,r=t||{};"function"==typeof this.preinitialize&&this.preinitialize.apply(this,arguments),this.cid=Bs("c"),this.attributes={},e&&e.collection&&(this.collection=e.collection),e&&e.parse&&(r=this.parse(r,e)||{}),(n=Ns(this,"defaults"))&&(r=Ds({},n,r)),this.set(r,e),this.changed={},this.initialize.apply(this,arguments)},translate:function(t,e,n){throw new Error("Must define a translate() method.")},toJSON:function(){var e=Ns(this.constructor.prototype,"defaults").attrs||{},t=this.attributes.attrs,o={};Rs(t,function(t,r){var i=e[r];Rs(t,function(t,n){es(t)&&!Array.isArray(t)?Rs(t,function(t,e){i&&i[n]&&ys(i[n][e],t)||(o[r]=o[r]||{},(o[r][n]||(o[r][n]={}))[e]=t)}):i&&ys(i[n],t)||(o[r]=o[r]||{},o[r][n]=t)})});var n=vs(_s(this.attributes,"attrs"));return n.attrs=o,n},initialize:function(t){var e=this.getIdAttribute();t&&void 0!==t[e]||this.set(e,this.generateId(),{silent:!0}),this._transitionIds={},this._scheduledTransitionIds={},this.processPorts(),this.on("change:attrs",this.processPorts,this)},getIdAttribute:function(){return this.idAttribute||"id"},generateId:function(){return Xs()},processPorts:function(){var t=this.ports,n={};Rs(this.get("attrs"),function(t,e){t&&t.port&&(void 0!==t.port.id?n[t.port.id]=t.port:n[t.port]={id:t.port})});var r={};(Rs(t,function(t,e){n[e]||(r[e]=!0)}),this.graph&&!ms(r))&&(this.graph.getConnectedLinks(this,{inbound:!0}).forEach(function(t){r[t.get("target").port]&&t.remove()}),this.graph.getConnectedLinks(this,{outbound:!0}).forEach(function(t){r[t.get("source").port]&&t.remove()}));this.ports=n},remove:function(t){void 0===t&&(t={});var e=this.graph,n=this.collection;if(!e)return n&&n.remove(this,t),this;e.startBatch("remove");var r=this.getParentCell();r&&r.unembed(this,t);for(var i=this.getEmbeddedCells(),o=0,a=i.length;o";if(r.parseFromString(i.replace(/@/g,""),"application/xml").getElementsByTagName("parsererror")[0])throw new Error("Invalid SVG markup");return e=r.parseFromString(i,"text/html").querySelector("svg"),n=[],Array.from(e.children).forEach(function(t){n.push(function n(t){var e={},r=t.tagName,i=t.attributes,o=t.namespaceURI,a=t.style,s=t.childNodes;e.namespaceURI=o,e.tagName=o===yi.namespace.xhtml?r.toLowerCase():r;for(var u={},l=a.length;l--;){var h=a[l];u[h]=a.getPropertyValue(h)}e.style=u;var c=i.getNamedItem("@selector");c&&(e.selector=c.value,i.removeNamedItem("@selector"));var d=i.getNamedItem("@group-selector");if(d){var f=d.value.split(",");e.groupSelector=f.map(function(t){return t.trim()}),i.removeNamedItem("@group-selector")}var p=i.getNamedItem("class");p&&(e.className=p.value);var g=[];s.forEach(function(t){switch(t.nodeType){case Node.TEXT_NODE:var e=t.data.replace(/\s\s+/g," ");e.trim()&&g.push(e);break;case Node.ELEMENT_NODE:g.push(n(t))}}),g.length&&(e.children=g);var v={};return Array.from(i).forEach(function(t){var e=t.name,n=t.value;v[e]=n}),0 "+e),n=this.getSelector(t.parentNode,n)}return n},addLinkFromMagnet:function(t,e,n){var r=this.paper,i=r.model,o=r.getDefaultLink(this,t);return o.set({source:this.getLinkEnd(t,e,n,o,"source"),target:{x:e,y:n}}).addTo(i,{async:!1,ui:!0}),o.findView(r)},getLinkEnd:function(t){for(var e,n=[],r=arguments.length-1;0i.options.clickThreshold||this.notify("element:magnet:pointerclick",t,e,n,r)}},{Flags:kl});is(Ml.prototype,gl);var Ol={_results:{},_tests:{svgforeignobject:function(){return!!document.createElementNS&&/SVGForeignObject/.test({}.toString.call(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")))}},addTest:function(t,e){return this._tests[t]=e},test:function(t){var e=this._tests[t];if(!e)throw new Error('Test not defined ("'+t+'"). Use `joint.env.addTest(name, fn) to add a new test.`');var n=this._results[t];if(void 0!==n)return n;try{n=e()}catch(t){n=!1}return this._results[t]=n}},Nl=vl.define("basic.Generic",{attrs:{".":{fill:"#ffffff",stroke:"none"}}}),_l=Nl.define("basic.Rect",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:100,height:60},text:{fill:"#000000",text:"","font-size":14,"ref-x":.5,"ref-y":.5,"text-anchor":"middle","y-alignment":"middle","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Rl=Ml.extend({presentationAttributes:Ml.addPresentationAttributes({attrs:["SCALE"]}),confirmUpdate:function(){var t=Ml.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"SCALE")&&(this.resize(),t=this.removeFlag(t,"SCALE")),t}}),Vl=Nl.define("basic.Text",{attrs:{text:{"font-size":18,fill:"#000000"}}},{markup:''}),Fl=Nl.define("basic.Circle",{size:{width:60,height:60},attrs:{circle:{fill:"#ffffff",stroke:"#000000",r:30,cx:30,cy:30},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Bl=Nl.define("basic.Ellipse",{size:{width:60,height:40},attrs:{ellipse:{fill:"#ffffff",stroke:"#000000",rx:30,ry:20,cx:30,cy:20},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Dl=Nl.define("basic.Polygon",{size:{width:60,height:40},attrs:{polygon:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Il=Nl.define("basic.Polyline",{size:{width:60,height:40},attrs:{polyline:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),zl=Nl.define("basic.Image",{attrs:{text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),jl=Nl.define("basic.Path",{size:{width:60,height:60},attrs:{path:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle",ref:"path","ref-x":.5,"ref-dy":10,fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Gl=jl.define("basic.Rhombus",{attrs:{path:{d:"M 30 0 L 60 30 30 60 0 30 z"},text:{"ref-y":.5,"ref-dy":null,"y-alignment":"middle"}}}),Ul=Ol.test("svgforeignobject"),Hl=Nl.define("basic.TextBlock",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:80,height:100},text:{fill:"#000000","font-size":14,"font-family":"Arial, helvetica, sans-serif"},".content":{text:"","ref-x":.5,"ref-y":.5,"y-alignment":"middle","x-alignment":"middle"}},content:""},{markup:['','',Ul?'
':'',""].join(""),initialize:function(){this.listenTo(this,"change:size",this.updateSize),this.listenTo(this,"change:content",this.updateContent),this.updateSize(this,this.get("size")),this.updateContent(this,this.get("content")),Nl.prototype.initialize.apply(this,arguments)},updateSize:function(t,e){this.attr({".fobj":is({},e),div:{style:is({},e)}})},updateContent:function(t,e){Ul?this.attr({".content":{html:uu(e)}}):this.attr({".content":{text:e}})},setForeignObjectSize:function(){this.updateSize.apply(this,arguments)},setDivContent:function(){this.updateContent.apply(this,arguments)}}),ql=Ml.extend({presentationAttributes:Ul?Ml.prototype.presentationAttributes:Ml.addPresentationAttributes({content:["CONTENT"],size:["CONTENT"]}),initFlag:["RENDER","CONTENT"],confirmUpdate:function(){var t=Ml.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"CONTENT")&&(this.updateContent(this.model),t=this.removeFlag(t,"CONTENT")),t},update:function(t,e){var n=this.model;if(Ul)Ml.prototype.update.call(this,n,e);else{var r=_s(e||n.get("attrs"),".content");Ml.prototype.update.call(this,n,r),e&&!Os(e,".content")||this.updateContent(n,e)}},updateContent:function(t,e){var n=Ds({},(e||t.get("attrs"))[".content"]);n=_s(n,"text");var r=su(t.get("content"),t.get("size"),n,{svgDocument:this.paper.svg}),i=qs({},".content",n,"/");i[".content"].text=r,Ml.prototype.update.call(this,t,i)}}),Yl={Generic:Nl,Rect:_l,TextView:Rl,Text:Vl,Circle:Fl,Ellipse:Bl,Polygon:Dl,Polyline:Il,Image:zl,Path:jl,Rhombus:Gl,TextBlock:Hl,TextBlockView:ql},Wl=$u.extend({markup:['','','','','','','',''].join(""),toolMarkup:['','','','',"Remove link.","",'','','',"Link options.","",""].join(""),doubleToolMarkup:void 0,vertexMarkup:['','','','',"Remove vertex.","",""].join(""),arrowheadMarkup:['','',""].join(""),defaultLabel:void 0,labelMarkup:void 0,_builtins:{defaultLabel:{markup:[{tagName:"rect",selector:"rect"},{tagName:"text",selector:"text"}],attrs:{text:{fill:"#000000",fontSize:14,textAnchor:"middle",yAlignment:"middle",pointerEvents:"none"},rect:{ref:"text",fill:"#ffffff",rx:3,ry:3,refWidth:1,refHeight:1,refX:0,refY:0}},position:{distance:.5}}},defaults:{type:"link",source:{},target:{}},isLink:function(){return!0},disconnect:function(t){return this.set({source:{x:0,y:0},target:{x:0,y:0}},t)},source:function(t,e,n){return void 0===t?gs(this.get("source")):(i=t instanceof $u?((r=gs(e)||{}).id=t.id,n):xs(t)?(r=t,e):((r=gs(e)||{}).x=t.x,r.y=t.y,n),this.set("source",r,i));var r,i},target:function(t,e,n){return void 0===t?gs(this.get("target")):(i=t instanceof $u?((r=gs(e)||{}).id=t.id,n):xs(t)?(r=t,e):((r=gs(e)||{}).x=t.x,r.y=t.y,n),this.set("target",r,i));var r,i},router:function(t,e,n){if(void 0===t){var r=this.get("router");return r?"object"==typeof r?gs(r):r:this.get("manhattan")?{name:"orthogonal"}:null}var i="object"==typeof t||"function"==typeof t,o=i?t:{name:t,args:e},a=i?e:n;return this.set("router",o,a)},connector:function(t,e,n){if(void 0===t){var r=this.get("connector");return r?"object"==typeof r?gs(r):r:this.get("smooth")?{name:"smooth"}:null}var i="object"==typeof t||"function"==typeof t,o=i?t:{name:t,args:e},a=i?e:n;return this.set("connector",o,a)},label:function(t,e,n){var r=this.labels();return(t=isFinite(t)&&null!==t?0|t:0)<0&&(t=r.length+t),arguments.length<=1?this.prop(["labels",t]):this.prop(["labels",t],e,n)},labels:function(t,e){return 0===arguments.length?(t=this.get("labels"),Array.isArray(t)?t.slice():[]):(Array.isArray(t)||(t=[]),this.set("labels",t,e))},hasLabels:function(){var t=this.attributes.labels;return Array.isArray(t)&&0e[1].x?"right":"left";switch(r){case"left":o=new Jn(-1,0);break;case"right":default:o=new Jn(1,0)}n.rotate&&i&&o.rotate(null,-i);return o}(t,e,r);case bh.VERTICAL:return function(t,e,n){var r,i,o,a=t.sourceBBox;if(t.sourceView)if(i=t.sourceView.model.angle(),n.rotate&&i){var s=t.sourceView.getNodeUnrotatedBBox(t.sourceView.el),u=e[0].clone();u.rotate(a.center(),i),r=s.sideNearestToPoint(u)}else r=a.sideNearestToPoint(e[0]);else r=a.y>e[1].y?"bottom":"top";switch(r){case"top":o=new Jn(0,-1);break;case"bottom":default:o=new Jn(0,1)}n.rotate&&i&&o.rotate(null,-i);return o}(t,e,r);case bh.CLOSEST_POINT:return Th(t,e);case bh.OUTWARDS:return Sh(t,e);case bh.AUTO:default:return Ah(t,e,r)}}(i,c,a,u),f=c[0].distance(c[1])*u.coeff,p=Lh(d,c[1].difference(c[0]).normalize());if(p>Math.PI/4){var g=f+(p-Math.PI/4)*u.angleTangentCoefficient;l=d.clone().scale(g,g)}else l=d.clone().scale(f,f)}if(u.targetTangent)h=u.targetTangent;else{var v=function(t,e,n,r){if(r.targetDirection)switch(r.targetDirection){case xh.UP:return new Jn(0,-1);case xh.DOWN:return new Jn(0,1);case xh.LEFT:return new Jn(-1,0);case xh.RIGHT:return new Jn(1,0);case xh.AUTO:return Ph(t,e,r);case xh.CLOSEST_POINT:return Eh(t,e);case xh.OUTWARDS:return kh(t,e);default:return r.targetDirection}switch(n){case bh.HORIZONTAL:return function(t,e,n){var r,i,o,a=t.targetBBox;if(t.targetView)if(i=t.targetView.model.angle(),n.rotate&&i){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),u=e[e.length-1].clone();u.rotate(a.center(),i),r=s.sideNearestToPoint(u)}else r=a.sideNearestToPoint(e[e.length-1]);else r=a.x>e[e.length-2].x?"left":"right";switch(r){case"left":o=new Jn(-1,0);break;case"right":default:o=new Jn(1,0)}n.rotate&&i&&o.rotate(null,-i);return o}(t,e,r);case bh.VERTICAL:return function(t,e,n){var r,i,o,a=t.targetBBox;if(t.targetView)if(i=t.targetView.model.angle(),n.rotate&&i){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),u=e[e.length-1].clone();u.rotate(a.center(),i),r=s.sideNearestToPoint(u)}else r=a.sideNearestToPoint(e[e.length-1]);else r=a.y>e[e.length-2].y?"top":"bottom";switch(r){case"top":o=new Jn(0,-1);break;case"bottom":default:o=new Jn(0,1)}n.rotate&&i&&o.rotate(null,-i);return o}(t,e,r);case bh.CLOSEST_POINT:return Eh(t,e);case bh.OUTWARDS:return kh(t,e);case bh.AUTO:default:return Ph(t,e,r)}}(i,c,a,u),m=c.length-1,y=c[m-1].distance(c[m])*u.coeff,b=Lh(v,c[m-1].difference(c[m]).normalize());if(b>Math.PI/4){var x=y+(b-Math.PI/4)*u.angleTangentCoefficient;h=v.clone().scale(x,x)}else h=v.clone().scale(y,y)}var w=function(t,e,n,r){for(var i=r.tau,o=r.coeff,a=[],s=[],u=[],l=t.length-1,h=0;h=Math.abs(t.y-e.y)){var l=(t.x+e.x)/2;u=Cr.createSegment("C",l,t.y,l,e.y,e.x,e.y),i.appendSegment(u)}else{var h=(t.y+e.y)/2;u=Cr.createSegment("C",t.x,h,e.x,h,e.x,e.y),i.appendSegment(u)}}return o?i:i.serialize()},curve:wh},Nh=Pl.extend({tagName:"path",className:"highlight-stroke",attributes:{"pointer-events":"none","vector-effect":"non-scaling-stroke",fill:"none"},options:{padding:3,rx:0,ry:0,useFirstSubpath:!1,attrs:{"stroke-width":3,stroke:"#FEB663"}},getPathData:function(e,n){var r,i=this.options,t=i.useFirstSubpath;try{var o=yi(n);if(r=o.convertToPathData().trim(),"PATH"===o.tagName()&&t){var a=r.search(/.M/i)+1;0e.y?"N":"S":t.y===e.y?t.x>e.x?"W":"E":null}function ic(t){return new gr(t.x,t.y,0,0)}function oc(t){var e=du(t.padding||t.elementPadding||20);return{x:-e.left,y:-e.top,width:e.left+e.right,height:e.top+e.bottom}}function ac(t,e){return t.sourceBBox.clone().moveAndExpand(oc(e))}function sc(t,e){return t.targetBBox.clone().moveAndExpand(oc(e))}function uc(t,e,n){var r=new Jn(t.x,e.y),i=new Jn(e.x,t.y),o=rc(t,r),a=rc(t,i),s=Qh[n],u=o===n||o!==s&&(a===s||a!==n)?r:i;return{points:[u],direction:rc(u,e)}}function lc(t,e,n){var r=ec(t,e,n);return{points:[r],direction:rc(r,e)}}function hc(e,t,n,r){var i,o={},a=[new Jn(e.x,t.y),new Jn(t.x,e.y)],s=a.filter(function(t){return!n.containsPoint(t)}),u=s.filter(function(t){return rc(t,e)!==r});if(0l.center().distance(t),c=h?e:t,d=h?t:e;return a=ec(o=i?(o=Jn.fromPolar(l.width+l.height,tc[i],c),l.pointNearestToPoint(o).move(o,-1)):l.pointNearestToPoint(c).move(c,1),d,l),o.round().equals(a.round())?(a=Jn.fromPolar(l.width+l.height,Nn(o.theta(c))+Math.PI/2,d),s=ec(o,a=l.pointNearestToPoint(a).move(d,1).round(),l),u.points=h?[a,s,o]:[o,s,a]):u.points=h?[a,o]:[o,a],u.direction=rc(h?o:a,e),u}function fc(t,e,n){var r,i,o,a,s,u=ac(n,e),l=sc(n,e),h=(i=e,(r=n).sourceAnchor?r.sourceAnchor:ac(r,i).center()),c=(a=e,(o=n).targetAnchor?o.targetAnchor:sc(o,a).center());u=u.union(ic(h)),l=l.union(ic(c)),(t=ws(t).map(Jn)).unshift(h),t.push(c);for(var d=[],f=0,p=t.length-1;fr.maxAllowedDirectionChange)){var Y=Tc(D.clone().offset(C.gridOffsetX,C.gridOffsetY),b,u),W=Ec(Y);if(!x.isClose(W)&&!n(Y)){if(0<=R.indexOf(W))if(!Y.equals(f))if(wc(q,xc(Y,f,_,b,r))>r.maxAllowedDirectionChange)continue;var X=z+C.cost+(G?0:r.penalties[L]);(!x.isOpen(W)||Xe.point.y,s=e.point.x-t.point.x;n===Rc.BOTTOM?(i=a?Fc[n]:0<=s?Rc.RIGHT:Rc.LEFT,0e.point.x,l=e.point.y-t.point.y;n===Rc.RIGHT?(i=u?Fc[n]:0<=l?Rc.BOTTOM:Rc.TOP,0=this.options.longLinkLength){var i=this.options.doubleLinkToolsOffset||e;r=this.getPointAtLength(n-i),this._tool2Cache.attr("transform","translate("+r.x+", "+r.y+") "+t),this._tool2Cache.attr("display","inline")}else this.options.doubleLinkTools&&this._tool2Cache.attr("display","none")}return this},updateArrowheadMarkers:function(){if(!this._V.markerArrowheads)return this;if("none"===P.css(this._V.markerArrowheads.node,"display"))return this;var t=this.getConnectionLength() boolean; + fallbackRouter: (vertices: dia.Point[], opts?: ManhattanRouterArguments, linkView?: dia.LinkView) => dia.Point[]; } interface OrthogonalRouterArguments { @@ -4696,6 +4697,8 @@ export namespace routers { interface RightAngleRouterArguments { margin?: number; + /** @experimental before version 4.0 */ + useVertices?: boolean; sourceDirection?: RightAngleDirections; targetDirection?: RightAngleDirections; } @@ -5114,6 +5117,7 @@ export namespace attributes { width?: string | number | null; height?: string | number | null; ellipsis?: boolean | string; + separator?: string; hyphen?: string; maxLineCount?: number; preserveSpaces?: boolean; diff --git a/dist/joint.js b/dist/joint.js index 90feea1da..018058434 100644 --- a/dist/joint.js +++ b/dist/joint.js @@ -1,4 +1,4 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public @@ -2992,7 +2992,10 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. // @return {bool} true if point p is inside me. containsPoint: function(p) { - p = new Point(p); + + if (!(p instanceof Point)) { + p = new Point(p); + } return p.x >= this.x && p.x <= this.x + this.width && p.y >= this.y && p.y <= this.y + this.height; }, @@ -4003,7 +4006,10 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. if (points.length < 3) { return this; } // we need at least 3 points // TODO: we may also accept startIndex and endIndex to specify where to start and end simplification - var threshold = opt.threshold || 0; // = max distance of middle point from chord to be simplified + + // Due to the nature of the algorithm, we do not use 0 as the default value for `threshold` + // because of the rounding errors that can occur when comparing distances. + var threshold = opt.threshold || 1e-10; // = max distance of middle point from chord to be simplified // start at the beginning of the polyline and go forward var currentIndex = 0; @@ -8912,15 +8918,19 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. */ VPrototype.removeAttr = function(name) { - var qualifiedName = V.qualifyAttr(name); + var trueName = attributeNames[name]; + + var ref = V.qualifyAttr(trueName); + var ns = ref.ns; + var local = ref.local; var el = this.node; - if (qualifiedName.ns) { - if (el.hasAttributeNS(qualifiedName.ns, qualifiedName.local)) { - el.removeAttributeNS(qualifiedName.ns, qualifiedName.local); + if (ns) { + if (el.hasAttributeNS(ns, local)) { + el.removeAttributeNS(ns, local); } - } else if (el.hasAttribute(name)) { - el.removeAttribute(name); + } else if (el.hasAttribute(trueName)) { + el.removeAttribute(trueName); } return this; }; @@ -8941,7 +8951,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (V.isString(name) && V.isUndefined(value)) { - return this.node.getAttribute(name); + return this.node.getAttribute(attributeNames[name]); } if (typeof name === 'object') { @@ -9517,16 +9527,18 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return this; } - var qualifiedName = V.qualifyAttr(name); + var trueName = attributeNames[name]; - if (qualifiedName.ns) { + var ref = V.qualifyAttr(trueName); + var ns = ref.ns; + if (ns) { // Attribute names can be namespaced. E.g. `image` elements // have a `xlink:href` attribute to set the source of the image. - el.setAttributeNS(qualifiedName.ns, name, value); - } else if (name === 'id') { + el.setAttributeNS(ns, trueName, value); + } else if (trueName === 'id') { el.id = value; } else { - el.setAttribute(name, value); + el.setAttribute(trueName, value); } return this; @@ -9635,6 +9647,100 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return xml; }; + // Create an empty object which does not inherit any properties from `Object.prototype`. + // This is useful when we want to use an object as a dictionary without having to + // worry about inherited properties such as `toString`, `valueOf` etc. + var _attributeNames = Object.create(null); + + // List of attributes for which not to split camel case words. + // It contains known SVG attribute names and may be extended with user-defined attribute names. + [ + 'baseFrequency', + 'baseProfile', + 'clipPathUnits', + 'contentScriptType', + 'contentStyleType', + 'diffuseConstant', + 'edgeMode', + 'externalResourcesRequired', + 'filterRes', // deprecated + 'filterUnits', + 'gradientTransform', + 'gradientUnits', + 'kernelMatrix', + 'kernelUnitLength', + 'keyPoints', + 'lengthAdjust', + 'limitingConeAngle', + 'markerHeight', + 'markerUnits', + 'markerWidth', + 'maskContentUnits', + 'maskUnits', + 'numOctaves', + 'pathLength', + 'patternContentUnits', + 'patternTransform', + 'patternUnits', + 'pointsAtX', + 'pointsAtY', + 'pointsAtZ', + 'preserveAlpha', + 'preserveAspectRatio', + 'primitiveUnits', + 'refX', + 'refY', + 'requiredExtensions', + 'requiredFeatures', + 'specularConstant', + 'specularExponent', + 'spreadMethod', + 'startOffset', + 'stdDeviation', + 'stitchTiles', + 'surfaceScale', + 'systemLanguage', + 'tableValues', + 'targetX', + 'targetY', + 'textLength', + 'viewBox', + 'viewTarget', // deprecated + 'xChannelSelector', + 'yChannelSelector', + 'zoomAndPan' // deprecated + ].forEach(function (name) { return _attributeNames[name] = name; }); + + var attributeNames = new Proxy(_attributeNames, { + get: function get(cache, name) { + // The cache is a dictionary of attribute names. See `_attributeNames` above. + // If the attribute name is not in the cache, it means that it is not + // a camel-case attribute name. In that case, we need to convert + // the attribute name to dash-separated words. + if (!V.supportCamelCaseAttributes) { return name; } + if (name in cache) { + return cache[name]; + } + // Convert camel case to dash-separated words. + return (cache[name] = name.replace(/[A-Z]/g, '-$&').toLowerCase()); + } + }); + + // Note: The `attributeNames` and `supportCamelCaseAttributes` properties are not enumerable + // in this version to avoid breaking changes. They will be made enumerable in the next major version. + + // Dictionary of attribute names + Object.defineProperty(V, 'attributeNames', { + value: attributeNames, + writable: false, + }); + + // Should camel case attributes be supported? + Object.defineProperty(V, 'supportCamelCaseAttributes', { + value: false, + writable: true, + }); + /** * @param {string} name * @returns {{ns: string|null, local: string}} namespace and attribute name @@ -13851,7 +13957,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var preserveSpaces = opt.preserveSpaces; var space = ' '; - var separator = opt.separator || space; + var separator = (opt.separator || opt.separator === '') ? opt.separator : space; + // If separator is a RegExp, we use the space character to join words together again (not ideal) + var separatorChar = (typeof separator === 'string') ? separator : space; var eol = opt.eol || '\n'; var hyphen = opt.hyphen ? new RegExp(opt.hyphen) : /[^\w\d]/; var maxLineCount = opt.maxLineCount; @@ -13901,9 +14009,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var data = (void 0); if (preserveSpaces) { - data = lines[l] !== undefined ? lines[l] + space + word : word; + data = lines[l] !== undefined ? lines[l] + separatorChar + word : word; } else { - data = lines[l] ? lines[l] + space + word : word; + data = lines[l] ? lines[l] + separatorChar + word : word; } textNode.data = data; @@ -13914,7 +14022,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. lines[l] = data; if (p || h) { - // We were partitioning. Put rest of the word onto next line + // We were partitioning. Put rest of the word onto next line full[l++] = true; // cancel partitioning and splitting by hyphens @@ -14043,12 +14151,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var lastLine = lines[lastL]; if (!lastLine && !isEol) { break; } var k = lastLine.length; - var lastLineWithOmission, lastChar, separatorChar; + var lastLineWithOmission, lastChar; do { lastChar = lastLine[k]; lastLineWithOmission = lastLine.substring(0, k); if (!lastChar) { - separatorChar = (typeof separator === 'string') ? separator : ' '; lastLineWithOmission += separatorChar; } else if (lastChar.match(separator)) { lastLineWithOmission += lastChar; @@ -15395,38 +15502,50 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var $node = $(node); var cacheName = 'joint-text'; var cache = $node.data(cacheName); - var textAttrs = pick(attrs, 'lineHeight', 'annotations', 'textPath', 'x', 'textVerticalAnchor', 'eol', 'displayEmpty'); + var lineHeight = attrs.lineHeight; + var annotations = attrs.annotations; + var textVerticalAnchor = attrs.textVerticalAnchor; + var eol = attrs.eol; + var displayEmpty = attrs.displayEmpty; + var textPath = attrs.textPath; // eval `x` if using calc() - var x = textAttrs.x; + var x = attrs.x; if (isCalcAttribute(x)) { - textAttrs.x = evalCalcAttribute(x, refBBox); + x = evalCalcAttribute(x, refBBox); } - - var fontSizeAttr = attrs['font-size'] || attrs['fontSize']; - if (isCalcAttribute(fontSizeAttr)) { - fontSizeAttr = evalCalcAttribute(fontSizeAttr, refBBox); + // eval `font-size` if using calc() + var fontSize = attrs['font-size'] || attrs['fontSize']; + if (isCalcAttribute(fontSize)) { + fontSize = evalCalcAttribute(fontSize, refBBox); } - var fontSize = textAttrs.fontSize = fontSizeAttr; - var textHash = JSON.stringify([text, textAttrs]); // Update the text only if there was a change in the string // or any of its attributes. + var textHash = JSON.stringify([text, lineHeight, annotations, textVerticalAnchor, eol, displayEmpty, textPath, x, fontSize]); if (cache === undefined || cache !== textHash) { // Chrome bug: - // Tspans positions defined as `em` are not updated + // positions defined as `em` are not updated // when container `font-size` change. if (fontSize) { node.setAttribute('font-size', fontSize); } // Text Along Path Selector - var textPath = textAttrs.textPath; if (isObject$1(textPath)) { var pathSelector = textPath.selector; if (typeof pathSelector === 'string') { - var pathNode = this.findBySelector(pathSelector)[0]; + var ref = this.findBySelector(pathSelector); + var pathNode = ref[0]; if (pathNode instanceof SVGPathElement) { - textAttrs.textPath = assign({ 'xlink:href': '#' + pathNode.id }, textPath); + textPath = assign({ 'xlink:href': '#' + pathNode.id }, textPath); } } } - V(node).text('' + text, textAttrs); + V(node).text('' + text, { + lineHeight: lineHeight, + annotations: annotations, + textPath: textPath, + x: x, + textVerticalAnchor: textVerticalAnchor, + eol: eol, + displayEmpty: displayEmpty + }); $node.data(cacheName, textHash); } } @@ -15487,6 +15606,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. svgDocument: this.paper.svg, ellipsis: value.ellipsis, hyphen: value.hyphen, + separator: value.separator, maxLineCount: value.maxLineCount, preserveSpaces: value.preserveSpaces }); @@ -16412,7 +16532,16 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. options.rewrite = false; } - return this.set(merge({}, this.attributes, props), options); + // Create a new object containing only the changed attributes. + var changedAttributes = {}; + for (var key in props) { + // Merging the values of changed attributes with the current ones. + var ref = merge({}, { changedValue: this.attributes[key] }, { changedValue: props[key] }); + var changedValue = ref.changedValue; + changedAttributes[key] = changedValue; + } + + return this.set(changedAttributes, options); }, // A convenient way to unset nested properties @@ -25023,74 +25152,45 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var DEFINED_DIRECTIONS = [Directions.LEFT, Directions.RIGHT, Directions.TOP, Directions.BOTTOM]; - function getDirectionForLinkConnection(linkOrigin, connectionPoint, linkView) { - var tangent = linkView.getTangentAtLength(linkView.getClosestPointLength(connectionPoint)); - var roundedAngle = Math.round(tangent.angle() / 90) * 90; - - switch (roundedAngle) { - case 0: - case 360: - return linkOrigin.y < connectionPoint.y ? Directions.TOP : Directions.BOTTOM; - case 90: - return linkOrigin.x < connectionPoint.x ? Directions.LEFT : Directions.RIGHT; - case 180: - return linkOrigin.y < connectionPoint.y ? Directions.TOP : Directions.BOTTOM; - case 270: - return linkOrigin.x < connectionPoint.x ? Directions.LEFT : Directions.RIGHT; - } - } + var OPPOSITE_DIRECTIONS = {}; + OPPOSITE_DIRECTIONS[Directions.LEFT] = Directions.RIGHT; + OPPOSITE_DIRECTIONS[Directions.RIGHT] = Directions.LEFT; + OPPOSITE_DIRECTIONS[Directions.TOP] = Directions.BOTTOM; + OPPOSITE_DIRECTIONS[Directions.BOTTOM] = Directions.TOP; - function rightAngleRouter(_vertices, opt, linkView) { - var margin = opt.margin || 20; - var sourceDirection = opt.sourceDirection; if ( sourceDirection === void 0 ) sourceDirection = Directions.AUTO; - var targetDirection = opt.targetDirection; if ( targetDirection === void 0 ) targetDirection = Directions.AUTO; - - var sourceView = linkView.sourceView; - var targetView = linkView.targetView; - - var isSourcePort = !!linkView.model.source().port; - var isTargetPort = !!linkView.model.target().port; + var VERTICAL_DIRECTIONS = [Directions.TOP, Directions.BOTTOM]; - if (sourceDirection === Directions.AUTO) { - sourceDirection = isSourcePort ? Directions.MAGNET_SIDE : Directions.ANCHOR_SIDE; - } - - if (targetDirection === Directions.AUTO) { - targetDirection = isTargetPort ? Directions.MAGNET_SIDE : Directions.ANCHOR_SIDE; - } - - var sourceBBox = linkView.sourceBBox; - var targetBBox = linkView.targetBBox; - var sourcePoint = linkView.sourceAnchor; - var targetPoint = linkView.targetAnchor; - var ref = sourceView && sourceView.model.isElement() ? Rect.fromRectUnion(sourceBBox, sourceView.model.getBBox()) : linkView.sourceAnchor; - var sx0 = ref.x; - var sy0 = ref.y; - var sourceWidth = ref.width; if ( sourceWidth === void 0 ) sourceWidth = 0; - var sourceHeight = ref.height; if ( sourceHeight === void 0 ) sourceHeight = 0; - - var ref$1 = targetView && targetView.model.isElement() ? Rect.fromRectUnion(targetBBox, targetView.model.getBBox()) : linkView.targetAnchor; - var tx0 = ref$1.x; - var ty0 = ref$1.y; - var targetWidth = ref$1.width; if ( targetWidth === void 0 ) targetWidth = 0; - var targetHeight = ref$1.height; if ( targetHeight === void 0 ) targetHeight = 0; + var ANGLE_DIRECTION_MAP = { + 0: Directions.RIGHT, + 180: Directions.LEFT, + 270: Directions.TOP, + 90: Directions.BOTTOM + }; - var tx1 = tx0 + targetWidth; - var ty1 = ty0 + targetHeight; - var sx1 = sx0 + sourceWidth; - var sy1 = sy0 + sourceHeight; + function getSegmentAngle(line) { + // TODO: the angle() method is general and therefore unnecessarily heavy for orthogonal links + return line.angle(); + } - // Key coordinates including the margin - var smx0 = sx0 - margin; - var smx1 = sx1 + margin; - var smy0 = sy0 - margin; - var smy1 = sy1 + margin; - var tmx0 = tx0 - margin; - var tmx1 = tx1 + margin; - var tmy0 = ty0 - margin; - var tmy1 = ty1 + margin; + function simplifyPoints(points) { + // TODO: use own more efficient implementation (filter points that do not change direction). + // To simplify segments that are almost aligned (start and end points differ by e.g. 0.5px), use a threshold of 1. + return new Polyline(points).simplify({ threshold: 1 }).points; + } - var sourceOutsidePoint = sourcePoint.clone(); + function resolveSides(source, target) { + var sourcePoint = source.point; + var sx0 = source.x0; + var sy0 = source.y0; + var sourceView = source.view; + var sourceBBox = source.bbox; + var sourceDirection = source.direction; + var targetPoint = target.point; + var tx0 = target.x0; + var ty0 = target.y0; + var targetView = target.view; + var targetBBox = target.bbox; + var targetDirection = target.direction; var sourceSide; @@ -25107,26 +25207,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. sourceSide = sourceDirection; } - switch (sourceSide) { - case 'left': - sourceOutsidePoint.x = smx0; - break; - case 'right': - sourceOutsidePoint.x = smx1; - break; - case 'top': - sourceOutsidePoint.y = smy0; - break; - case 'bottom': - sourceOutsidePoint.y = smy1; - break; - } - var targetOutsidePoint = targetPoint.clone(); - - var targetSide; - if (!targetView) { var targetLinkAnchorBBox = new Rect(tx0, ty0, 0, 0); targetSide = DEFINED_DIRECTIONS.includes(targetDirection) ? targetDirection : targetLinkAnchorBBox.sideNearestToPoint(sourcePoint); @@ -25140,21 +25222,319 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. targetSide = targetDirection; } - switch (targetSide) { + return [sourceSide, targetSide]; + } + + function resolveForTopSourceSide(source, target, nextInLine) { + var sx0 = source.x0; + var sy0 = source.y0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx0 = sx0 - margin; + var smx1 = sx1 + margin; + var smy0 = sy0 - margin; + + var ax = anchor.x; + var tx = target.x0; + var ty = target.y0; + + if (tx === ax && ty < sy0) { return Directions.BOTTOM; } + if (tx < ax && ty < smy0) { return Directions.RIGHT; } + if (tx > ax && ty < smy0) { return Directions.LEFT; } + if (tx < smx0 && ty >= sy0) { return Directions.TOP; } + if (tx > smx1 && ty >= sy0) { return Directions.TOP; } + if (tx >= smx0 && tx <= ax && ty > sy1) { + if (nextInLine.point.x < tx) { + return Directions.RIGHT; + } + + return Directions.LEFT; + } + if (tx <= smx1 && tx >= ax && ty > sy1) { + if (nextInLine.point.x < tx) { + return Directions.RIGHT; + } + + return Directions.LEFT; + } + + return Directions.TOP; + } + + function resolveForBottomSourceSide(source, target, nextInLine) { + var sx0 = source.x0; + var sy0 = source.y0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx0 = sx0 - margin; + var smx1 = sx1 + margin; + var smy1 = sy1 + margin; + + var ax = anchor.x; + var tx = target.x0; + var ty = target.y0; + + if (tx === ax && ty > sy1) { return Directions.TOP; } + if (tx < ax && ty > smy1) { return Directions.RIGHT; } + if (tx > ax && ty > smy1) { return Directions.LEFT; } + if (tx < smx0 && ty <= sy1) { return Directions.BOTTOM; } + if (tx > smx1 && ty <= sy1) { return Directions.BOTTOM; } + if (tx >= smx0 && tx <= ax && ty < sy0) { + if (nextInLine.point.x < tx) { + return Directions.RIGHT; + } + + return Directions.LEFT; + } + if (tx <= smx1 && tx >= ax && ty < sy0) { + if (nextInLine.point.x < tx) { + return Directions.RIGHT; + } + + return Directions.LEFT; + } + + return Directions.BOTTOM; + } + + function resolveForLeftSourceSide(source, target, nextInLine) { + var sy0 = source.y0; + var sx0 = source.x0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx0 = sx0 - margin; + var smy0 = sy0 - margin; + var smy1 = sy1 + margin; + + var ax = anchor.x; + var ay = anchor.y; + var tx = target.x0; + var ty = target.y0; + + if (tx < ax && ty === ay) { return Directions.RIGHT; } + if (tx <= smx0 && ty < ay) { return Directions.BOTTOM; } + if (tx <= smx0 && ty > ay) { return Directions.TOP; } + if (tx >= sx0 && ty <= smy0) { return Directions.LEFT; } + if (tx >= sx0 && ty >= smy1) { return Directions.LEFT; } + if (tx > sx1 && ty >= smy0 && ty <= ay) { + if (nextInLine.point.y < ty) { + return Directions.BOTTOM; + } + + return Directions.TOP; + } + if (tx > sx1 && ty <= smy1 && ty >= ay) { + if (nextInLine.point.y < ty) { + return Directions.BOTTOM; + } + + return Directions.TOP; + } + + return Directions.LEFT; + } + + function resolveForRightSourceSide(source, target, nextInLine) { + var sy0 = source.y0; + var sx0 = source.x0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx1 = sx1 + margin; + var smy0 = sy0 - margin; + var smy1 = sy1 + margin; + + var ax = anchor.x; + var ay = anchor.y; + var tx = target.x0; + var ty = target.y0; + + if (tx > ax && ty === ay) { return Directions.LEFT; } + if (tx >= smx1 && ty < ay) { return Directions.BOTTOM; } + if (tx >= smx1 && ty > ay) { return Directions.TOP; } + if (tx <= sx1 && ty <= smy0) { return Directions.RIGHT; } + if (tx <= sx1 && ty >= smy1) { return Directions.RIGHT; } + if (tx < sx0 && ty >= smy0 && ty <= ay) { + if (nextInLine.point.y < ty) { + return Directions.BOTTOM; + } + + return Directions.TOP; + } + if (tx < sx0 && ty <= smy1 && ty >= ay) { + if (nextInLine.point.y < ty) { + return Directions.BOTTOM; + } + + return Directions.TOP; + } + + return Directions.RIGHT; + } + + function resolveInitialDirection(source, target, nextInLine) { + var ref = resolveSides(source, target); + var sourceSide = ref[0]; + + switch (sourceSide) { + case Directions.TOP: + return resolveForTopSourceSide(source, target, nextInLine); + case Directions.RIGHT: + return resolveForRightSourceSide(source, target, nextInLine); + case Directions.BOTTOM: + return resolveForBottomSourceSide(source, target, nextInLine); + case Directions.LEFT: + return resolveForLeftSourceSide(source, target, nextInLine); + } + } + + function getDirectionForLinkConnection(linkOrigin, connectionPoint, linkView) { + var tangent = linkView.getTangentAtLength(linkView.getClosestPointLength(connectionPoint)); + var roundedAngle = Math.round(getSegmentAngle(tangent) / 90) * 90; + + if (roundedAngle % 180 === 0 && linkOrigin.y === connectionPoint.y) { + return linkOrigin.x < connectionPoint.x ? Directions.LEFT : Directions.RIGHT; + } else if (linkOrigin.x === connectionPoint.x) { + return linkOrigin.y < connectionPoint.y ? Directions.TOP : Directions.BOTTOM; + } + + switch (roundedAngle) { + case 0: + case 180: + case 360: + return linkOrigin.y < connectionPoint.y ? Directions.TOP : Directions.BOTTOM; + case 90: + case 270: + return linkOrigin.x < connectionPoint.x ? Directions.LEFT : Directions.RIGHT; + } + } + + function pointDataFromAnchor(view, point, bbox, direction, isPort, fallBackAnchor, margin) { + if (direction === Directions.AUTO) { + direction = isPort ? Directions.MAGNET_SIDE : Directions.ANCHOR_SIDE; + } + + var isElement = view && view.model.isElement(); + + var ref = isElement ? Rect.fromRectUnion(bbox, view.model.getBBox()) : fallBackAnchor; + var x0 = ref.x; + var y0 = ref.y; + var width = ref.width; if ( width === void 0 ) width = 0; + var height = ref.height; if ( height === void 0 ) height = 0; + + return { + point: point, + x0: x0, + y0: y0, + view: view, + bbox: bbox, + width: width, + height: height, + direction: direction, + margin: isElement ? margin : 0 + }; + } + + function pointDataFromVertex(ref) { + var x = ref.x; + var y = ref.y; + + var point = new Point(x, y); + + return { + point: point, + x0: point.x, + y0: point.y, + view: null, + bbox: new Rect(x, y, 0, 0), + width: 0, + height: 0, + direction: null, + margin: 0 + }; + } + + function getOutsidePoint(side, pointData, margin) { + var outsidePoint = pointData.point.clone(); + + var x0 = pointData.x0; + var y0 = pointData.y0; + var width = pointData.width; + var height = pointData.height; + + switch (side) { case 'left': - targetOutsidePoint.x = tmx0; + outsidePoint.x = x0 - margin; break; case 'right': - targetOutsidePoint.x = tmx1; + outsidePoint.x = x0 + width + margin; break; case 'top': - targetOutsidePoint.y = tmy0; + outsidePoint.y = y0 - margin; break; case 'bottom': - targetOutsidePoint.y = tmy1; + outsidePoint.y = y0 + height + margin; break; } + return outsidePoint; + } + + function routeBetweenPoints(source, target) { + var sourcePoint = source.point; + var sx0 = source.x0; + var sy0 = source.y0; + var sourceView = source.view; + var sourceWidth = source.width; + var sourceHeight = source.height; + var sourceMargin = source.margin; + var targetPoint = target.point; + var tx0 = target.x0; + var ty0 = target.y0; + var targetWidth = target.width; + var targetHeight = target.height; + var targetMargin = target.margin; + + var tx1 = tx0 + targetWidth; + var ty1 = ty0 + targetHeight; + var sx1 = sx0 + sourceWidth; + var sy1 = sy0 + sourceHeight; + + var isSourceEl = sourceView && sourceView.model.isElement(); + + // Key coordinates including the margin + var smx0 = sx0 - sourceMargin; + var smx1 = sx1 + sourceMargin; + var smy0 = sy0 - sourceMargin; + var smy1 = sy1 + sourceMargin; + + var tmx0 = tx0 - targetMargin; + var tmx1 = tx1 + targetMargin; + var tmy0 = ty0 - targetMargin; + var tmy1 = ty1 + targetMargin; + + var ref = resolveSides(source, target); + var sourceSide = ref[0]; + var targetSide = ref[1]; + + var sourceOutsidePoint = getOutsidePoint(sourceSide, { point: sourcePoint, x0: sx0, y0: sy0, width: sourceWidth, height: sourceHeight }, sourceMargin); + var targetOutsidePoint = getOutsidePoint(targetSide, { point: targetPoint, x0: tx0, y0: ty0, width: targetWidth, height: targetHeight }, targetMargin); + var sox = sourceOutsidePoint.x; var soy = sourceOutsidePoint.y; var tox = targetOutsidePoint.x; @@ -25167,7 +25547,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. var middleOfHorizontalSides = (scy < tcy ? (sy1 + ty0) : (ty1 + sy0)) / 2; if (sourceSide === 'left' && targetSide === 'right') { - if (smx0 <= tx1) { + if (smx0 <= tmx1) { var y = middleOfHorizontalSides; if (sx1 <= tx0) { if (ty1 >= smy0 && toy < soy) { @@ -25190,7 +25570,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: x, y: toy } ]; } else if (sourceSide === 'right' && targetSide === 'left') { - if (smx1 >= tx0) { + if (smx1 >= tmx0) { var y$1 = middleOfHorizontalSides; if (sox > tx1) { if (ty1 >= smy0 && toy < soy) { @@ -25239,7 +25619,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: tox, y: y$3 } ]; } else if (sourceSide === 'bottom' && targetSide === 'top') { - if (soy - margin > toy) { + if (soy - sourceMargin > toy) { var x$3 = middleOfVerticalSides; var y$4 = soy; @@ -25271,8 +25651,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. if (toy < soy) { if (sox >= tmx1 || sox <= tmx0) { return [ - { x: sox, y: Math.min(soy,toy) }, - { x: tox, y: Math.min(soy,toy) } + { x: sox, y: Math.min(soy, toy) }, + { x: tox, y: Math.min(soy, toy) } ]; } else if (tox > sox) { x$4 = Math.min(sox, tmx0); @@ -25282,8 +25662,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } else { if (tox >= smx1 || tox <= smx0) { return [ - { x: sox, y: Math.min(soy,toy) }, - { x: tox, y: Math.min(soy,toy) } + { x: sox, y: Math.min(soy, toy) }, + { x: tox, y: Math.min(soy, toy) } ]; } else if (tox >= sox) { x$4 = Math.max(tox, smx1); @@ -25299,34 +25679,31 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: tox, y: y1 } ]; } else if (sourceSide === 'bottom' && targetSide === 'bottom') { - if (tx0 >= sox + margin || tx1 <= sox - margin) { - return [ - { x: sox, y: Math.max(soy, toy) }, - { x: tox, y: Math.max(soy, toy) } - ]; - } - var x$5; - var y1$1; - var y2$1; + var y1$1 = Math.max((sy0 + ty1) / 2, toy); + var y2$1 = Math.max((sy1 + ty0) / 2, soy); if (toy > soy) { - y1$1 = Math.max((sy1 + ty0) / 2, toy); - y2$1 = Math.max((sy1 + ty0) / 2, soy); - - if (tox > sox) { + if (sox >= tmx1 || sox <= tmx0) { + return [ + { x: sox, y: Math.max(soy, toy) }, + { x: tox, y: Math.max(soy, toy) } + ]; + } else if (tox > sox) { x$5 = Math.min(sox, tmx0); } else { x$5 = Math.max(sox, tmx1); } } else { - y1$1 = Math.max((sy0 + ty1) / 2, toy); - y2$1 = Math.max((sy0 + ty1) / 2, soy); - - if (tox > sox) { - x$5 = Math.min(tox, smx0); - } else { + if (tox >= smx1 || tox <= smx0) { + return [ + { x: sox, y: Math.max(soy, toy) }, + { x: tox, y: Math.max(soy, toy) } + ]; + } else if (tox >= sox) { x$5 = Math.max(tox, smx1); + } else { + x$5 = Math.min(tox, smx0); } } @@ -25389,8 +25766,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } else if (sourceSide === 'top' && targetSide === 'right') { if (soy > toy) { if (sox < tox) { - var y$8 = (sy0 + ty1) / 2; - if (y$8 > tcy && y$8 < tmy1 && sox < tmx0) { + var y$8 = middleOfHorizontalSides; + + if ((y$8 > tcy || !isSourceEl) && y$8 < tmy1 && sox < tx0) { y$8 = tmy0; } return [ @@ -25399,37 +25777,41 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: tox, y: toy } ]; } + return [{ x: sox, y: toy }]; } - var x$6 = (sx0 + tx1) / 2; + var x$6 = Math.max(middleOfVerticalSides, tmx1); - if (sox > tox && sy1 >= toy) { + if (tox < sox && toy > sy0 && toy < sy1) { return [ { x: sox, y: soy }, { x: x$6, y: soy }, - { x: x$6, y: toy }]; + { x: x$6, y: toy } + ]; } - if (x$6 > smx0 && soy < ty1) { - var y$9 = Math.min(sy0, ty0) - margin; - var x$7 = Math.max(sx1, tx1) + margin; + if ((x$6 > smx0 && toy > sy0) || tx0 > sx1) { + var y$9 = Math.min(sy0 - sourceMargin, ty0 - targetMargin); + var x$7 = Math.max(sx1 + sourceMargin, tx1 + targetMargin); return [ { x: sox, y: y$9 }, { x: x$7, y: y$9 }, { x: x$7, y: toy } ]; } + return [ { x: sox, y: soy }, - { x: x$6, y: soy }, - { x: x$6, y: toy } + { x: Math.max(x$6, tox), y: soy }, + { x: Math.max(x$6, tox), y: toy } ]; } else if (sourceSide === 'top' && targetSide === 'left') { if (soy > toy) { if (sox > tox) { - var y$10 = (sy0 + ty1) / 2; - if (y$10 > tcy && y$10 < tmy1 && sox > tmx1) { + var y$10 = middleOfHorizontalSides; + + if ((y$10 > tcy || !isSourceEl) && y$10 < tmy1 && sox > tx1) { y$10 = tmy0; } return [ @@ -25441,7 +25823,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return [{ x: sox, y: toy }]; } - var x$8 = (sx1 + tx0) / 2; + var x$8 = Math.min(tmx0, middleOfVerticalSides); if (sox < tox && sy1 >= toy) { return [ @@ -25451,8 +25833,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (x$8 < smx1 && soy < ty1) { - var y$11 = Math.min(sy0, ty0) - margin; - var x$9 = Math.min(sx0, tx0) - margin; + var y$11 = Math.min(smy0, tmy0); + var x$9 = Math.min(smx0, tmx0); return [ { x: sox, y: y$11 }, { x: x$9, y: y$11 }, @@ -25467,8 +25849,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } else if (sourceSide === 'bottom' && targetSide === 'right') { if (soy < toy) { if (sox < tox) { - var y$12 = (sy1 + ty0) / 2; - if (y$12 < tcy && y$12 > tmy0 && sox < tmx0) { + var y$12 = middleOfHorizontalSides; + + if ((y$12 < tcy || !isSourceEl) && y$12 > tmy0 && sox < tx0) { y$12 = tmy1; } return [ @@ -25480,8 +25863,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return [{ x: sox, y: toy }]; } else { if (sx0 < tox) { - var y$13 = Math.max(sy1, ty1) + margin; - var x$10 = Math.max(sx1, tx1) + margin; + var y$13 = Math.max(smy1, tmy1); + var x$10 = Math.max(smx1, tmx1); return [ { x: sox, y: y$13 }, { x: x$10, y: y$13 }, @@ -25500,8 +25883,9 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } else if (sourceSide === 'bottom' && targetSide === 'left') { if (soy < toy) { if (sox > tox) { - var y$14 = (sy1 + ty0) / 2; - if (y$14 < tcy && y$14 > tmy0 && sox > tmx1) { + var y$14 = middleOfHorizontalSides; + + if ((y$14 < tcy || !isSourceEl) && y$14 > tmy0 && sox > tx1) { y$14 = tmy1; } return [ @@ -25513,8 +25897,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return [{ x: sox, y: toy }]; } else { if (sx1 > tox) { - var y$15 = Math.max(sy1, ty1) + margin; - var x$12 = Math.min(sx0, tx0) - margin; + var y$15 = Math.max(smy1, tmy1); + var x$12 = Math.min(smx0, tmx0); return [ { x: sox, y: y$15 }, { x: x$12, y: y$15 }, @@ -25530,13 +25914,15 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: x$13, y: soy }, { x: x$13, y: toy } ]; - } else if (sourceSide === 'left' && targetSide === 'bottom') { - if (sox > tox && soy >= tmy1) { + } + else if (sourceSide === 'left' && targetSide === 'bottom') { + if (sox >= tox && soy >= tmy1) { return [{ x: tox, y: soy }]; } if (sox >= tx1 && soy < toy) { - var x$14 = (sx1 + tx0) / 2; + var x$14 = middleOfVerticalSides; + return [ { x: x$14, y: soy }, { x: x$14, y: toy }, @@ -25545,7 +25931,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (tox < sx1 && ty1 <= sy0) { - var y$16 = (sy0 + ty1) / 2; + var y$16 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -25555,7 +25941,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } var x$15 = Math.min(tmx0, sox); - var y$17 = Math.max(sy1, ty1) + margin; + var y$17 = Math.max(smy1, tmy1); return [ { x: x$15, y: soy }, @@ -25569,7 +25955,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. if (sox >= tx1) { if (soy > toy) { - var x$16 = (sx0 + tx1) / 2; + var x$16 = middleOfVerticalSides; + return [ { x: x$16, y: soy }, { x: x$16, y: toy }, @@ -25579,7 +25966,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (tox <= sx1 && toy > soy) { - var y$18 = (ty0 + sy1) / 2; + var y$18 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -25587,8 +25974,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. { x: tox, y: y$18 } ]; } - var x$17 = toy < soy ? Math.min(sx0, tx0) - margin : smx0; - var y$19 = Math.min(sy0, ty0) - margin; + var x$17 = toy < soy ? Math.min(smx0, tmx0) : smx0; + var y$19 = Math.min(smy0, tmy0); return [ { x: x$17, y: soy }, @@ -25597,12 +25984,13 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. ]; } else if (sourceSide === 'right' && targetSide === 'top') { - if (sox < tox && soy < tmy0) { + if (sox <= tox && soy < tmy0) { return [{ x: tox, y: soy }]; } if (sx1 < tx0 && soy > toy) { - var x$18 = (sx1 + tx0) / 2; + var x$18 = middleOfVerticalSides; + return [ { x: x$18, y: soy }, { x: x$18, y: toy }, @@ -25611,7 +25999,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (tox < sox && ty0 > sy1) { - var y$20 = (sy1 + ty0) / 2; + var y$20 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -25620,20 +26008,22 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. ]; } - var x$19 = Math.max(sx1, tx1) + margin; - var y$21 = Math.min(sy0, ty0) - margin; + var x$19 = Math.max(smx1, tmx1); + var y$21 = Math.min(smy0, tmy0); + return [ { x: x$19, y: soy }, { x: x$19, y: y$21 }, { x: tox, y: y$21 } ]; } else if (sourceSide === 'right' && targetSide === 'bottom') { - if (sox < tox && soy >= tmy1) { + if (sox <= tox && soy >= tmy1) { return [{ x: tox, y: soy }]; } - if (sox <= tx0 && soy < toy) { - var x$20 = (sx1 + tx0) / 2; + if (sox <= tmx0 && soy < toy) { + var x$20 = middleOfVerticalSides; + return [ { x: x$20, y: soy }, { x: x$20, y: toy }, @@ -25642,7 +26032,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (tox > sx0 && ty1 < sy0) { - var y$22 = (sy0 + ty1) / 2; + var y$22 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -25652,7 +26042,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } var x$21 = Math.max(tmx1, sox); - var y$23 = Math.max(sy1, ty1) + margin; + var y$23 = Math.max(smy1, tmy1); return [ { x: x$21, y: soy }, @@ -25662,6 +26052,209 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } } + function rightAngleRouter(vertices, opt, linkView) { + var sourceDirection = opt.sourceDirection; if ( sourceDirection === void 0 ) sourceDirection = Directions.AUTO; + var targetDirection = opt.targetDirection; if ( targetDirection === void 0 ) targetDirection = Directions.AUTO; + var margin = opt.margin || 20; + var useVertices = opt.useVertices || false; + + var isSourcePort = !!linkView.model.source().port; + var sourcePoint = pointDataFromAnchor(linkView.sourceView, linkView.sourceAnchor, linkView.sourceBBox, sourceDirection, isSourcePort, linkView.sourceAnchor, margin); + + var isTargetPort = !!linkView.model.target().port; + var targetPoint = pointDataFromAnchor(linkView.targetView, linkView.targetAnchor, linkView.targetBBox, targetDirection, isTargetPort, linkView.targetAnchor, margin); + + var resultVertices = []; + + if (!useVertices || vertices.length === 0) { + return simplifyPoints(routeBetweenPoints(sourcePoint, targetPoint)); + } + + var verticesData = vertices.map(function (v) { return pointDataFromVertex(v); }); + var firstVertex = verticesData[0]; + + if (sourcePoint.view && sourcePoint.view.model.isElement() && sourcePoint.view.model.getBBox().inflate(margin).containsPoint(firstVertex.point)) { + var ref = resolveSides(sourcePoint, firstVertex); + var fromDirection = ref[0]; + var toDirection = fromDirection; + var dummySource = pointDataFromVertex(sourcePoint.point); + // Points do not usually have margin. Here we create a point with a margin. + dummySource.margin = margin; + dummySource.direction = fromDirection; + firstVertex.direction = toDirection; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(dummySource, firstVertex).concat( [firstVertex.point] )); + } else { + // The first point responsible for the initial direction of the route + var next = verticesData[1] || targetPoint; + var direction = resolveInitialDirection(sourcePoint, firstVertex, next); + firstVertex.direction = direction; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(sourcePoint, firstVertex).concat( [firstVertex.point] )); + } + + for (var i = 0; i < verticesData.length - 1; i++) { + var from = verticesData[i]; + var to = verticesData[i + 1]; + + var segment = new Line(from.point, to.point); + var segmentAngle = getSegmentAngle(segment); + if (segmentAngle % 90 === 0) { + // Since the segment is horizontal or vertical, we can skip the routing and just connect them with a straight line + var toDirection$1 = ANGLE_DIRECTION_MAP[segmentAngle]; + var accessDirection = OPPOSITE_DIRECTIONS[toDirection$1]; + + if (toDirection$1 !== from.direction) { + resultVertices.push(from.point, to.point); + to.direction = accessDirection; + } else { + var angle = normalizeAngle(segmentAngle - 90); + + var dx = 0; + var dy = 0; + + if (angle === 90) { + dy = -margin; + } else if (angle === 180) { + dx = -margin; + } else if (angle === 270) { + dy = margin; + } else if (angle === 0) { + dx = margin; + } + + var p1 = { x: from.point.x + dx, y: from.point.y + dy }; + var p2 = { x: to.point.x + dx, y: to.point.y + dy }; + + var segment2 = new Line(to.point, p2); + to.direction = ANGLE_DIRECTION_MAP[getSegmentAngle(segment2)]; + + // Constructing a loop + resultVertices.push(from.point, p1, p2, to.point); + } + + continue; + } + + var ref$1 = resolveDirection(from, to); + var fromDirection$1 = ref$1[0]; + var toDirection$2 = ref$1[1]; + + from.direction = fromDirection$1; + to.direction = toDirection$2; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(from, to).concat( [to.point] )); + } + + var lastVertex = verticesData[verticesData.length - 1]; + + if (targetPoint.view && targetPoint.view.model.isElement()) { + if (targetPoint.view.model.getBBox().inflate(margin).containsPoint(lastVertex.point)) { + var ref$2 = resolveDirection(lastVertex, targetPoint); + var fromDirection$2 = ref$2[0]; + var dummyTarget = pointDataFromVertex(targetPoint.point); + var ref$3 = resolveSides(lastVertex, targetPoint); + var toDirection$3 = ref$3[1]; + // we are creating a point that has a margin + dummyTarget.margin = margin; + dummyTarget.direction = toDirection$3; + lastVertex.direction = fromDirection$2; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(lastVertex, dummyTarget)); + } else { + // the last point of `simplified` array is the last defined vertex + // grab the penultimate point and construct a line segment from it to the last vertex + // this will ensure that the last segment continues in a straight line + + var simplified = simplifyPoints(resultVertices); + var segment$1 = new Line(simplified[simplified.length - 2], lastVertex.point); + var definedDirection = ANGLE_DIRECTION_MAP[Math.round(getSegmentAngle(segment$1))]; + lastVertex.direction = definedDirection; + + var lastSegmentRoute = routeBetweenPoints(lastVertex, targetPoint); + var ref$4 = simplifyPoints(lastSegmentRoute.concat( [targetPoint.point])); + var p1$1 = ref$4[0]; + var p2$1 = ref$4[1]; + + var lastSegment = new Line(p1$1, p2$1); + var roundedLastSegmentAngle = Math.round(getSegmentAngle(lastSegment)); + var lastSegmentDirection = ANGLE_DIRECTION_MAP[roundedLastSegmentAngle]; + + if (lastSegmentDirection !== definedDirection && definedDirection === OPPOSITE_DIRECTIONS[lastSegmentDirection]) { + lastVertex.margin = margin; + lastSegmentRoute = routeBetweenPoints(lastVertex, targetPoint); + } + + resultVertices.push.apply(resultVertices, lastSegmentRoute); + } + } else { + // since the target is only a point we can apply the same logic as if we connected two verticesData + var ref$5 = resolveDirection(lastVertex, targetPoint); + var vertexDirection = ref$5[0]; + lastVertex.direction = vertexDirection; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(lastVertex, targetPoint)); + } + + return simplifyPoints(resultVertices); + } + + function resolveDirection(from, to) { + var accessDirection = from.direction; + var isDirectionVertical = VERTICAL_DIRECTIONS.includes(accessDirection); + + var sourceDirection = from.direction; + var targetDirection = to.direction; + + if (isDirectionVertical) { + var isToAbove = from.point.y > to.point.y; + var dx = to.point.x - from.point.x; + + if (accessDirection === Directions.BOTTOM) { + // If isToAbove === false and we need figure out if to go left or right + sourceDirection = isToAbove ? OPPOSITE_DIRECTIONS[accessDirection] : dx >= 0 ? Directions.RIGHT : Directions.LEFT; + + if (dx > 0) { + targetDirection = isToAbove ? Directions.LEFT : Directions.TOP; + } else if (dx < 0) { + targetDirection = isToAbove ? Directions.RIGHT : Directions.TOP; + } + } else { + // If isToAbove === true and we need figure out if to go left or right + sourceDirection = isToAbove ? dx >= 0 ? Directions.RIGHT : Directions.LEFT : OPPOSITE_DIRECTIONS[accessDirection]; + + if (dx > 0) { + targetDirection = isToAbove ? Directions.BOTTOM : Directions.LEFT; + } else if (dx < 0) { + targetDirection = isToAbove ? Directions.BOTTOM : Directions.RIGHT; + } + } + } else { + var isToLeft = from.point.x > to.point.x; + var dy = to.point.y - from.point.y; + + if (accessDirection === Directions.RIGHT) { + sourceDirection = isToLeft ? OPPOSITE_DIRECTIONS[accessDirection] : dy >= 0 ? Directions.BOTTOM : Directions.TOP; + + if (dy > 0) { + targetDirection = isToLeft ? Directions.TOP : Directions.LEFT; + } else if (dy < 0) { + targetDirection = isToLeft ? Directions.BOTTOM : Directions.LEFT; + } + } else { + sourceDirection = isToLeft ? dy >= 0 ? Directions.BOTTOM : Directions.TOP : OPPOSITE_DIRECTIONS[accessDirection]; + + if (dy > 0) { + targetDirection = isToLeft ? Directions.RIGHT : Directions.TOP; + } else if (dy < 0) { + targetDirection = isToLeft ? Directions.RIGHT : Directions.BOTTOM; + } + } + } + + return [sourceDirection, targetDirection]; + } + rightAngleRouter.Directions = Directions; var rightAngle = rightAngleRouter; @@ -26742,7 +27335,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. case TangentDirections.LEFT: return new Point(-1, 0); case TangentDirections.RIGHT: - return new Point(0, 1); + return new Point(1, 0); case TangentDirections.AUTO: return getAutoTargetDirection(linkView, route, options); case TangentDirections.CLOSEST_POINT: @@ -28035,11 +28628,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. toolPosition = this.getPointAtLength(connectionLength - doubleLinkToolsOffset); this._tool2Cache.attr('transform', 'translate(' + toolPosition.x + ', ' + toolPosition.y + ') ' + scale); - this._tool2Cache.attr('visibility', 'visible'); + this._tool2Cache.attr('display', 'inline'); } else if (this.options.doubleLinkTools) { - this._tool2Cache.attr('visibility', 'hidden'); + this._tool2Cache.attr('display', 'none'); } } @@ -35361,13 +35954,15 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. tagName: 'path', selector: 'outline', attributes: { - 'fill': 'none' + 'fill': 'none', + 'cursor': 'pointer' } }, { tagName: 'path', selector: 'line', attributes: { - 'fill': 'none' + 'fill': 'none', + 'pointer-events': 'none' } }] }); @@ -35415,13 +36010,15 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. tagName: 'path', selector: 'shadow', attributes: { - 'fill': 'none' + 'fill': 'none', + 'pointer-events': 'none' } }, { tagName: 'path', selector: 'line', attributes: { - 'fill': 'none' + 'fill': 'none', + 'cursor': 'pointer' } }] }); @@ -37267,6 +37864,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. this.resetAnchor('target', data.targetAnchorDef); } } + if (vertices.some(function (v) { return !v; })) { + // This can happen when the link is using a smart routing and the number of + // vertices is not the same as the number of route points. + throw new Error('Segments: incompatible router in use'); + } link.vertices(vertices, { ui: true, tool: this.cid }); this.updateHandle(handle, vertex, nextVertex, offset); if (!options.stopPropagation) { relatedView.notifyPointermove(normalizedEvent, coords.x, coords.y); } @@ -38350,7 +38952,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. Control: Control }); - var version = "3.7.5"; + var version = "3.7.6"; var Vectorizer = V; var layout = { PortLabel: PortLabel, Port: Port }; diff --git a/dist/joint.layout.DirectedGraph.js b/dist/joint.layout.DirectedGraph.js index a2568f256..558674de8 100644 --- a/dist/joint.layout.DirectedGraph.js +++ b/dist/joint.layout.DirectedGraph.js @@ -1,4 +1,4 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public diff --git a/dist/joint.layout.DirectedGraph.min.js b/dist/joint.layout.DirectedGraph.min.js index b36509b96..074deb8e0 100644 --- a/dist/joint.layout.DirectedGraph.min.js +++ b/dist/joint.layout.DirectedGraph.min.js @@ -1,4 +1,4 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public diff --git a/dist/joint.min.css b/dist/joint.min.css index 6cc445286..c9b167c4a 100644 --- a/dist/joint.min.css +++ b/dist/joint.min.css @@ -1,4 +1,4 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public diff --git a/dist/joint.min.js b/dist/joint.min.js index d0952b3a4..595356130 100644 --- a/dist/joint.min.js +++ b/dist/joint.min.js @@ -1,8 +1,8 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -if(function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("backbone"),require("jquery")):"function"==typeof define&&define.amd?define(["exports","backbone","jquery"],e):e((t=t||self).joint={},t.Backbone,t.$)}(this,function(t,c,b){"use strict";c=c&&c.hasOwnProperty("default")?c.default:c,b=b&&b.hasOwnProperty("default")?b.default:b;var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(t,e){return t(e={exports:{}},e.exports),e.exports}var i=function(t){return t&&t.Math==Math&&t},u=i("object"==typeof globalThis&&globalThis)||i("object"==typeof window&&window)||i("object"==typeof self&&self)||i("object"==typeof e&&e)||function(){return this}()||Function("return this")(),a=function(t){try{return!!t()}catch(t){return!0}},s=!a(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}),r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,l={f:o&&!r.call({1:2},1)?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},C=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},h={}.toString,g=function(t){return h.call(t).slice(8,-1)},d="".split,y=a(function(){return!Object("z").propertyIsEnumerable(0)})?function(t){return"String"==g(t)?d.call(t,""):Object(t)}:Object,f=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},p=function(t){return y(f(t))},m=function(t){return"object"==typeof t?null!==t:"function"==typeof t},v=function(t,e){if(!m(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!m(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!m(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!m(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")},I={}.hasOwnProperty,A=function(t,e){return I.call(t,e)},w=u.document,x=m(w)&&m(w.createElement),N=function(t){return x?w.createElement(t):{}},M=!s&&!a(function(){return 7!=Object.defineProperty(N("div"),"a",{get:function(){return 7}}).a}),S=Object.getOwnPropertyDescriptor,T={f:s?S:function(t,e){if(t=p(t),e=v(e,!0),M)try{return S(t,e)}catch(t){}if(A(t,e))return C(!l.f.call(t,e),t[e])}},k=function(t){if(!m(t))throw TypeError(String(t)+" is not an object");return t},D=Object.defineProperty,L={f:s?D:function(t,e,n){if(k(t),e=v(e,!0),k(n),M)try{return D(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(t[e]=n.value),t}},P=s?function(t,e,n){return L.f(t,e,C(1,n))}:function(t,e,n){return t[e]=n,t},z=function(e,n){try{P(u,e,n)}catch(t){u[e]=n}return n},j="__core-js_shared__",O=u[j]||z(j,{}),G=Function.toString;"function"!=typeof O.inspectSource&&(O.inspectSource=function(t){return G.call(t)});var E,Z,B,R=O.inspectSource,Y=u.WeakMap,W="function"==typeof Y&&/native code/.test(R(Y)),U=n(function(t){(t.exports=function(t,e){return O[t]||(O[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.8.3",mode:"global",copyright:"\xa9 2021 Denis Pushkarev (zloirock.ru)"})}),F=0,V=Math.random(),X=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++F+V).toString(36)},_=U("keys"),H=function(t){return _[t]||(_[t]=X(t))},J={},Q=u.WeakMap;if(W){var K=O.state||(O.state=new Q),q=K.get,$=K.has,tt=K.set;E=function(t,e){return e.facade=t,tt.call(K,t,e),e},Z=function(t){return q.call(K,t)||{}},B=function(t){return $.call(K,t)}}else{var et=H("state");J[et]=!0,E=function(t,e){return e.facade=t,P(t,et,e),e},Z=function(t){return A(t,et)?t[et]:{}},B=function(t){return A(t,et)}}var nt,it={set:E,get:Z,has:B,enforce:function(t){return B(t)?Z(t):E(t,{})},getterFor:function(n){return function(t){var e;if(!m(t)||(e=Z(t)).type!==n)throw TypeError("Incompatible receiver, "+n+" required");return e}}},rt=n(function(t){var e=it.get,l=it.enforce,c=String(String).split("String");(t.exports=function(t,e,n,i){var r,o=!!i&&!!i.unsafe,a=!!i&&!!i.enumerable,s=!!i&&!!i.noTargetGet;"function"==typeof n&&("string"!=typeof e||A(n,"name")||P(n,"name",e),(r=l(n)).source||(r.source=c.join("string"==typeof e?e:""))),t!==u?(o?!s&&t[e]&&(a=!0):delete t[e],a?t[e]=n:P(t,e,n)):a?t[e]=n:z(e,n)})(Function.prototype,"toString",function(){return"function"==typeof this&&e(this).source||R(this)})}),ot=u,at=function(t){return"function"==typeof t?t:void 0},st=function(t,e){return arguments.length<2?at(ot[t])||at(u[t]):ot[t]&&ot[t][e]||u[t]&&u[t][e]},lt=Math.ceil,ct=Math.floor,ut=function(t){return isNaN(t=+t)?0:(0r;)A(i,n=e[r++])&&(~vt(o,n)||o.push(n));return o},At=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ct=At.concat("length","prototype"),yt={f:Object.getOwnPropertyNames||function(t){return It(t,Ct)}},wt={f:Object.getOwnPropertySymbols},bt=st("Reflect","ownKeys")||function(t){var e=yt.f(k(t)),n=wt.f;return n?e.concat(n(t)):e},xt=function(t,e){for(var n=bt(e),i=L.f,r=T.f,o=0;o"+t+""},Ht=function(){try{nt=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;Ht=nt?function(t){t.write(_t("")),t.close();var e=t.parentWindow.Object;return t=null,e}(nt):((e=N("iframe")).style.display="none",Wt.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(_t("document.F=Object")),t.close(),t.F);for(var n=At.length;n--;)delete Ht[Ut][At[n]];return Ht()};J[Vt]=!0;var Jt=Object.create||function(t,e){var n;return null!==t?(Xt[Ut]=k(t),n=new Xt,Xt[Ut]=null,n[Vt]=t):n=Ht(),void 0===e?n:Yt(n,e)},Qt=Bt("unscopables"),Kt=Array.prototype;null==Kt[Qt]&&L.f(Kt,Qt,{configurable:!0,value:Jt(null)});var qt=function(t){Kt[Qt][t]=!0},$t=Object.defineProperty,te={},ee=function(t){throw t},ne=function(t,e){if(A(te,t))return te[t];e||(e={});var n=[][t],i=!!A(e,"ACCESSORS")&&e.ACCESSORS,r=A(e,0)?e[0]:ee,o=A(e,1)?e[1]:void 0;return te[t]=!!n&&!a(function(){if(i&&!s)return!0;var t={length:-1};i?$t(t,1,{enumerable:!0,get:ee}):t[1]=1,n.call(t,r,o)})},ie=mt.includes,re=ne("indexOf",{ACCESSORS:!0,1:0});zt({target:"Array",proto:!0,forced:!re},{includes:function(t){return ie(this,t,1=n.length?{value:void 0,done:!0}:(t=Ve(n,i),e.index+=t.length,{value:t,done:!1})});var Je=function(e,t,n,i){try{return i?t(k(n)[0],n[1]):t(n)}catch(t){throw function(t){var e=t.return;if(void 0!==e)k(e.call(t)).value}(e),t}},Qe=Bt("iterator"),Ke=Array.prototype,qe=function(t,e,n){var i=v(e);i in t?L.f(t,i,C(0,n)):t[i]=n},$e={};$e[Bt("toStringTag")]="z";var tn="[object z]"===String($e),en=Bt("toStringTag"),nn="Arguments"==g(function(){return arguments}()),rn=tn?g:function(t){var e,n,i;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),en))?n:nn?g(e):"Object"==(i=g(e))&&"function"==typeof e.callee?"Arguments":i},on=Bt("iterator"),an=Bt("iterator"),sn=!1;try{var ln=0,cn={next:function(){return{done:!!ln++}},return:function(){sn=!0}};cn[an]=function(){return this},Array.from(cn,function(){throw 2})}catch(t){}var un=!function(t,e){if(!e&&!sn)return!1;var n=!1;try{var i={};i[an]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n}(function(t){Array.from(t)});zt({target:"Array",stat:!0,forced:un},{from:function(t){var e,n,i,r,o,a,s,l=le(t),c="function"==typeof this?this:Array,u=arguments.length,h=1>8-r%1*8)){if(255<(n=i.charCodeAt(r+=.75)))throw new l("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");e=e<<8|n}return a}),t.atob||(t.atob=function(t){var e=String(t).replace(/=+$/,"");if(e.length%4==1)throw new l("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,i,r=0,o=0,a="";i=e.charAt(o++);~i&&(n=r%4?64*n+i:i,r++%4)?a+=String.fromCharCode(255&n>>(-2*r&6)):0)i=s.indexOf(i);return a})}()});zt({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});ot.Number.isNaN;var pn=u.isFinite,mn=Number.isFinite||function(t){return"number"==typeof t&&pn(t)};zt({target:"Number",stat:!0},{isFinite:mn});ot.Number.isFinite;var vn=Bt("match"),In=function(t){if(m(e=t)&&(void 0!==(n=e[vn])?n:"RegExp"==g(e)))throw TypeError("The method doesn't accept regular expressions");var e,n;return t},An=Bt("match"),Cn=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[An]=!1,"/./"[e](n)}catch(t){}}return!1};zt({target:"String",proto:!0,forced:!Cn("includes")},{includes:function(t){return!!~String(f(this)).indexOf(In(t),1i)&&!(new di(t,n).length()>i)},divideAt:function(t){var e=this.pointAt(t);return[new di(this.start,e),new di(e,this.end)]},divideAtLength:function(t){var e=this.pointAtLength(t);return[new di(this.start,e),new di(e,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,e){if(t&&t.intersectionWithLine){var n=t.intersectionWithLine(this,e);return n&&t instanceof di&&(n=n[0]),n}return null},intersectionWithLine:function(t){var e=new ci(this.end.x-this.start.x,this.end.y-this.start.y),n=new ci(t.end.x-t.start.x,t.end.y-t.start.y),i=e.x*n.y-e.y*n.x,r=new ci(t.start.x-this.start.x,t.start.y-this.start.y),o=r.x*n.y-r.y*n.x,a=r.x*e.y-r.y*e.x;if(0===i||o*i<0||a*i<0)return null;if(0s.x+o/2,h=is.x?r-30:r+30)-c)/(a*a*(i-l))+l:e=a*a/(r-c)-a*a*(i-l)*((n=r>s.y?i+30:i-30)-l)/(o*o*(r-c))+c,new ci(n,e).theta(t)},toString:function(){return new ci(this.x,this.y).toString()+" "+this.a+" "+this.b}};var Ai=Ii,Ci=Math.abs,yi=Math.cos,wi=Math.sin,bi=Math.min,xi=Math.max,Ni=Math.round,Mi=Math.pow,Si=function(t,e,n,i){if(!(this instanceof Si))return new Si(t,e,n,i);Object(t)===t&&(e=t.y,n=t.width,i=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===e?0:e,this.width=void 0===n?0:n,this.height=void 0===i?0:i};Si.fromEllipse=function(t){return t=new Ii(t),new Si(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},Si.fromPointUnion=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if(0===t.length)return null;var n,i,r,o,a=new ci;n=i=1/0,r=o=-1/0;for(var s=0;s=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var e=new Si(this).normalize(),n=new Si(t).normalize(),i=e.width,r=e.height,o=n.width,a=n.height;if(!(i&&r&&o&&a))return!1;var s=e.x,l=e.y,c=n.x,u=n.y;return o+=c,i+=s,a+=u,r+=l,s<=c&&o<=i&&l<=u&&a<=r},corner:function(){return new ci(this.x+this.width,this.y+this.height)},equals:function(t){var e=new Si(this).normalize(),n=new Si(t).normalize();return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height},inflate:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.x-=t,this.y-=e,this.width+=2*t,this.height+=2*e,this},intersect:function(t){var e=this.origin(),n=this.corner(),i=t.origin(),r=t.corner();if(r.x<=e.x||r.y<=e.y||i.x>=n.x||i.y>=n.y)return null;var o=xi(e.x,i.x),a=xi(e.y,i.y);return new Si(o,a,bi(n.x,r.x)-o,bi(n.y,r.y)-a)},intersectionWithLine:function(t){var e,n,i=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],r=[],o=[],a=i.length;for(n=0;nu&&(i=(this.x+this.width-u)/(d.x-u)),d.y>h&&(s=(this.y+this.height-h)/(d.y-h));var f=t.topRight();f.x>u&&(r=(this.x+this.width-u)/(f.x-u)),f.yh&&(c=(this.y+this.height-h)/(p.y-h)),{sx:bi(n,i,r,o),sy:bi(a,s,l,c)}},maxRectUniformScaleToFit:function(t,e){var n=this.maxRectScaleToFit(t,e);return bi(n.sx,n.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,e=this.y,n=this.width,i=this.height;return this.width<0&&(t=this.x+this.width,n=-this.width),this.height<0&&(e=this.y+this.height,i=-this.height),this.x=t,this.y=e,this.width=n,this.height=i,this},offset:function(t,e){return ci.prototype.offset.call(this,t,e)},origin:function(){return new ci(this.x,this.y)},pointNearestToPoint:function(t){if(t=new ci(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new ci(this.x+this.width,t.y);case"left":return new ci(this.x,t.y);case"bottom":return new ci(t.x,this.y+this.height);case"top":return new ci(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new di(this.topRight(),this.bottomRight())},rightMiddle:function(){return new ci(this.x+this.width,this.y+this.height/2)},round:function(t){var e=1;if(t)switch(t){case 1:e=10;break;case 2:e=100;break;case 3:e=1e3;break;default:e=Mi(10,t)}return this.x=Ni(this.x*e)/e,this.y=Ni(this.y*e)/e,this.width=Ni(this.width*e)/e,this.height=Ni(this.height*e)/e,this},scale:function(t,e,n){return n=this.origin().scale(t,e,n),this.x=n.x,this.y=n.y,this.width*=t,this.height*=e,this},sideNearestToPoint:function(t){var e=(t=new ci(t)).x-this.x,n=this.x+this.width-t.x,i=t.y-this.y,r=e,o="left";return ni.x&&(i=t[e]);var a=[];for(e=0;eg.y||r>h.y&&r<=g.y){var d=h.x-i>g.x-i?h.x-i:g.x-i;0<=d&&(u.x=i+d,u.y=r,c.start=t,c.end=u,l.intersect(c)&&s++)}o=a}return s%2==1},close:function(){var t=this.start,e=this.end,n=this.points;return t&&e&&!t.equals(e)&&n.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new Pi(Li(this.points))},equals:function(t){if(!t)return!1;var e=this.points,n=t.points,i=e.length;if(n.length!==i)return!1;for(var r=0;rr+a&&i.x>r+a||n.xo+s&&i.y>o+s||n.ye.x&&t.ye.y}function ar(t,e){return yr(t,e,{interior:!1})}function sr(t,e){return wr(t,e,{interior:!1})}function lr(t,e){return br(t,e,{interior:!1})}function cr(t,e){return Nr(t,e,{interior:!1})}function ur(t,e){return yr(t,e,{interior:!0})}function hr(t,e){return wr(t,e,{interior:!0})}function gr(t,e){return br(t,e,{interior:!0})}function dr(t,e){return Nr(t,e,{interior:!0})}function fr(t,e){return Mr(t,e,{interior:!0})}function pr(t,n,i){return t.getSubpaths().some(function(t){var e=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?ur(e,n):ar(e,n)})}function mr(t,n,i){return t.getSubpaths().some(function(t){var e=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?hr(e,n):sr(e,n)})}function vr(t,e,n){return Ar(t,$i.fromRect(e),n)}function Ir(t,e,n){return xr(t,e,n,{interior:!1})}function Ar(t,e,n){return xr(t,e,n,{interior:!0})}function Cr(t,n,i,r){return t.getSubpaths().some(function(t){var e=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?Ar(n,e,r):Ir(n,e,r)})}function yr(t,e,n){void 0===n&&(n={});var i,r=n.interior;if(void 0===r&&(r=!1),r){if(t.containsPoint(e.start))return!0;var o=t.start,a=t.end,s=t.points;i=a.equals(o)?s:s.concat([o])}else i=t.points;for(var l=i.length,c=new di,u=0;u'+t+"";return G.parseXML(e,{async:!1}).documentElement}var n=document.createElementNS(O.svg,"svg");return n.setAttributeNS(O.xmlns,"xmlns:xlink",O.xlink),n.setAttribute("version","1.1"),n},G.createSVGStyle=function(t){return G("style",{type:"text/css"},[G.createCDATASection(t)]).node},G.createCDATASection=function(t){return void 0===t&&(t=""),document.implementation.createDocument(null,"xml",null).createCDATASection(t)},G.idCounter=0,G.uniqueId=function(){return"v-"+ ++G.idCounter},G.toNode=function(t){return G.isV(t)?t.node:t.nodeName&&t||t[0]},G.ensureId=function(t){return(t=G.toNode(t)).id||(t.id=G.uniqueId())},G.sanitizeText=function(t){return(t||"").replace(/ /g,"\xa0")},G.isUndefined=function(t){return void 0===t},G.isString=function(t){return"string"==typeof t},G.isObject=function(t){return t&&"object"==typeof t},G.isArray=Array.isArray,G.parseXML=function(t,e){var n;e=e||{};try{var i=new DOMParser;G.isUndefined(e.async)||(i.async=e.async),n=i.parseFromString(t,"text/xml")}catch(t){n=void 0}if(!n||n.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+t);return n},G.qualifyAttr=function(t){if(-1===t.indexOf(":"))return{ns:null,local:t};var e=t.split(":");return{ns:O[e[0]],local:e[1]}},G.transformSeparatorRegex=/[ ,]+/,G.transformRegex=/\b\w+\([^()]+\)/g,G.transformFunctionRegex=/\b(\w+)\(([^()]+)\)/,G.transformTranslateRegex=/\btranslate\(([^()]+)\)/,G.transformRotateRegex=/\brotate\(([^()]+)\)/,G.transformScaleRegex=/\bscale\(([^()]+)\)/,G.transformStringToMatrix=function(t){var e=G.createSVGMatrix(),n=t&&t.match(G.transformRegex);if(!n)return e;for(var i=n.length,r=0;r=t.start&&et.start&&n<=t.end||t.start>=e&&t.end=e?t.end+=n:t.start>=e&&(t.start+=n,t.end+=n)}),t},G.convertLineToPathData=function(t){return["M",(t=G(t)).attr("x1"),t.attr("y1"),"L",t.attr("x2"),t.attr("y2")].join(" ")},G.convertPolygonToPathData=function(t){var e=G.getPointsFromSvgNode(t);return 0===e.length?null:G.svgPointsToPath(e)+" Z"},G.convertPolylineToPathData=function(t){var e=G.getPointsFromSvgNode(t);return 0===e.length?null:G.svgPointsToPath(e)},G.svgPointsToPath=function(t){for(var e=0,n=t.length;e=o[r]&&(a.push([e].concat(i.splice(0,o[r]))),o[r]););}),a}(t)),!t||!t.length)return[["M",0,0]];for(var e,n=[],i=0,r=0,o=0,a=0,s=t.length,l=0;lg){var M=x,S=l,T=c;f=t(l=y+i*V(x=b+g*(s&&bf)L=f-1;else if(void 0!==o){if(void 0===v&&""!==c.data)if("auto"===n.lineHeight)v=Al({value:1.5,unit:"em"},l);else v=Al(ml(n.lineHeight,["em","px",""]),l);v*C.length>o&&(L=Math.floor(o/v)-1)}if(null!==L){C.splice(L+1);var P=i.ellipsis;if(!P||L<0)break;"string"!=typeof P&&(P="\u2026");var z=C[L];if(!z&&!N)break;var j,O,G=z.length;do{if(O=z[G],j=z.substring(0,G),O?O.match(h)&&(j+=O):j+="string"==typeof h?h:" ",j+=P,c.data=j,s.getComputedTextLength()<=r){C[L]=j;break}G--}while(0<=G);break}}}return i.svgDocument?a.removeChild(l):document.body.removeChild(a),C.join(g)},yl=function(t){var e=b(b.parseHTML("
"+t+"
",null,!1));return e.find("*").each(function(){var n=this;b.each(n.attributes,function(){var t=this.name,e=this.value;(t.startsWith("on")||e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&b(n).removeAttr(t)})}),e.html()},wl=function(t,e){if(window.navigator.msSaveBlob)window.navigator.msSaveBlob(t,e);else{var n=window.URL.createObjectURL(t),i=document.createElement("a");i.href=n,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),window.URL.revokeObjectURL(n)}},bl=function(t){t=t.replace(/\s/g,"");var e,n=(t=decodeURIComponent(t)).indexOf(","),i=t.slice(0,n),r=i.split(":")[1].split(";")[0],o=t.slice(n+1);e=0<=i.indexOf("base64")?atob(o):unescape(encodeURIComponent(o));for(var a=new Uint8Array(e.length),s=0;s')({color:t.color||"blue",opacity:Number.isFinite(t.opacity)?t.opacity:1,outerRadius:e+n,innerRadius:e})},highlight:function(t){return Dl('')({color:t.color||"red",width:Number.isFinite(t.width)?t.width:1,blur:Number.isFinite(t.blur)?t.blur:0,opacity:Number.isFinite(t.opacity)?t.opacity:1})},blur:function(t){var e=Number.isFinite(t.x)?t.x:2;return Dl('')({stdDeviation:Number.isFinite(t.y)?[e,t.y]:e})},dropShadow:function(t){var e="SVGFEDropShadowElement"in window?'':'';return Dl(e)({dx:t.dx||0,dy:t.dy||0,opacity:Number.isFinite(t.opacity)?t.opacity:1,color:t.color||"black",blur:Number.isFinite(t.blur)?t.blur:4})},grayscale:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({a:.2126+.7874*(1-e),b:.7152-.7152*(1-e),c:.0722-.0722*(1-e),d:.2126-.2126*(1-e),e:.7152+.2848*(1-e),f:.0722-.0722*(1-e),g:.2126-.2126*(1-e),h:.0722+.9278*(1-e)})},sepia:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({a:.393+.607*(1-e),b:.769-.769*(1-e),c:.189-.189*(1-e),d:.349-.349*(1-e),e:.686+.314*(1-e),f:.168-.168*(1-e),g:.272-.272*(1-e),h:.534-.534*(1-e),i:.131+.869*(1-e)})},saturate:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:1-e})},hueRotate:function(t){return Dl('')({angle:t.angle||0})},invert:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:e,amount2:1-e})},brightness:function(t){return Dl('')({amount:Number.isFinite(t.amount)?t.amount:1})},contrast:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:e,amount2:.5-e/2})}},kl={number:function(t,e,o){o=o||{currency:["$",""],decimal:".",thousands:",",grouping:[3]};var n=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i.exec(t),i=n[1]||" ",r=n[2]||">",a=n[3]||"",s=n[4]||"",l=n[5],c=+n[6],u=n[7],h=n[8],g=n[9],d=1,f="",p="",m=!1;switch(h&&(h=+h.substring(1)),(l||"0"===i&&"="===r)&&(l=i="0",r="=",u&&(c-=Math.floor((c-1)/4))),g){case"n":u=!0,g="g";break;case"%":d=100,p="%",g="f";break;case"p":d=100,p="%",g="r";break;case"b":case"o":case"x":case"X":"#"===s&&(f="0"+g.toLowerCase());break;case"c":case"d":m=!0,h=0;break;case"s":d=-1,g="r"}"$"===s&&(f=o.currency[0],p=o.currency[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):"e"!=g&&"f"!=g||(h=Math.max(0,Math.min(20,h))));var v=l&&u;if(m&&e%1)return"";var I=e<0||0===e&&1/e<0?(e=-e,"-"):a,A=p;if(d<0){var C=this.prefix(e,h);e=C.scale(e),A=C.symbol+p}else e*=d;var y=(e=this.convert(g,e,h)).lastIndexOf("."),w=y<0?e:e.substring(0,y),b=y<0?"":o.decimal+e.substring(y+1);function x(t){for(var e=t.length,n=[],i=0,r=o.grouping[0];0"===r?M+I+e:"^"===r?M.substring(0,N>>=1)+I+e+M.substring(N):I+(v?e:M+e))+A},string:function(t,e){for(var n,i="{",r=!1,o=[];-1!==(n=t.indexOf(i));){var a,s,l;if(a=t.slice(0,n),r){l=(s=a.split(":")).shift().split("."),a=e;for(var c=0;c|\$\{ ?([^{} ]+) ?\}|\{\{([^{} ]+)\}\}/g;return function(i){return i=i||{},t.replace(e,function(t){for(var e=Array.from(arguments).slice(1,4).find(function(t){return!!t}).split("."),n=i[e.shift()];void 0!==n&&e.length;)n=n[e.shift()];return void 0!==n?n:""})}},Ll=function(){};function Pl(t){t=Ms(t);var a=zs(t).reduce(function(t,e){return t[e.id]=e.clone(),t},{});return zs(t).forEach(function(t){var e=a[t.id];if(e.isLink()){var n=e.source(),i=e.target();n.id&&a[n.id]&&e.prop("source/id",a[n.id].id),i.id&&a[i.id]&&e.prop("target/id",a[i.id].id)}var r=t.get("parent");r&&a[r]&&e.set("parent",a[r].id);var o=zs(t.get("embeds")).reduce(function(t,e){return a[e]&&t.push(a[e].id),t},[]);ks(o)||e.set("embeds",o)}),a}var zl=["checked","selected","disabled","readOnly","contentEditable","value","indeterminate"].reduce(function(t,e){return t[e]=!0,t},{}),jl={qualify:function(t){return Ps(t)},set:function(e,t,i){Object.keys(e).forEach(function(t){if(zl[t]&&t in i){var n=e[t];"SELECT"===i.tagName&&Array.isArray(n)?Array.from(i.options).forEach(function(t,e){t.selected=n.includes(t.value)}):i[t]=n}})}};function Ol(o,a){return function(t,e){var n=pl(t);t=parseFloat(t),n&&(t/=100);var i={};if(isFinite(t)){var r=n||0<=t&&t<=1?t*e[a]:Math.max(t+e[a],0);i[o]=r}return i}}function Gl(a,s,l){return function(t,e){var n,i=pl(t);if(t=parseFloat(t),i&&(t/=100),isFinite(t)){var r=e[l]();n=i||0e.width?_l:Hl)(t,e)})},refRCircumscribed:{set:function(t,e){var n=pl(t);t=parseFloat(t),n&&(t/=100);var i,r=Math.sqrt(e.height*e.height+e.width*e.width);return isFinite(t)&&(i=n||0<=t&&t<=1?t*r:Math.max(t+r,0)),{r:i}}},refCx:{set:Ol("cx","width")},refCy:{set:Ol("cy","height")},xAlignment:{offset:El("x","width","right")},yAlignment:{offset:El("y","height","bottom")},resetOffset:{offset:function(t,e){return t?{x:-e.x,y:-e.y}:{x:0,y:0}}},refDResetOffset:{set:Bl({resetOffset:!0})},refDKeepOffset:{set:Bl({resetOffset:!1})},refPointsResetOffset:{set:Rl({resetOffset:!0})},refPointsKeepOffset:{set:Rl({resetOffset:!1})},connection:{qualify:Fl,set:function(t){var e,n=t.stubs;if(void 0===n&&(n=0),isFinite(n)&&0!==n){var i;i=n<0?(this.getConnectionLength()+n)/2:n;var r=this.getConnection(),o=this.getConnectionSubdivisions(),a=r.divideAtLength(i,{segmentSubdivisions:o}),s=r.divideAtLength(-i,{segmentSubdivisions:o});a&&s&&(e=a[0].serialize()+" "+s[1].serialize())}return{d:e||this.getSerializedConnection()}}},atConnectionLengthKeepGradient:{qualify:Fl,set:Yl("getTangentAtLength",{rotate:!0})},atConnectionLengthIgnoreGradient:{qualify:Fl,set:Yl("getTangentAtLength",{rotate:!1})},atConnectionRatioKeepGradient:{qualify:Fl,set:Yl("getTangentAtRatio",{rotate:!0})},atConnectionRatioIgnoreGradient:{qualify:Fl,set:Yl("getTangentAtRatio",{rotate:!1})}};Jl["xlink:href"]=Jl.xlinkHref,["transform","d","points","cx","cy","x1","x2","y1","y2","x","y","dx","dy"].forEach(function(i){Jl[i]={qualify:jn,set:function(t,e){var n;return(n={})[i]=En(t,e),n}}}),["width","height","r","rx","ry","font-size","stroke-width"].forEach(function(i){Jl[i]={qualify:jn,set:function(t,e){var n;return(n={})[i]=Math.max(0,En(t,e)),n}}}),Jl.refR=Jl.refRInscribed,Jl.refD=Jl.refDResetOffset,Jl.refPoints=Jl.refPointsResetOffset,Jl.atConnectionLength=Jl.atConnectionLengthKeepGradient,Jl.atConnectionRatio=Jl.atConnectionRatioKeepGradient,Jl.fontSize=Jl["font-size"],Jl.strokeWidth=Jl["stroke-width"],Jl.refX2=Jl.refX,Jl.refY2=Jl.refY,Jl.refWidth2=Jl.refWidth,Jl.refHeight2=Jl.refHeight,Jl["ref-x"]=Jl.refX,Jl["ref-y"]=Jl.refY,Jl["ref-dy"]=Jl.refDy,Jl["ref-dx"]=Jl.refDx,Jl["ref-width"]=Jl.refWidth,Jl["ref-height"]=Jl.refHeight,Jl["x-alignment"]=Jl.xAlignment,Jl["y-alignment"]=Jl.yAlignment;var Ql=Jl,Kl=c.Model.extend({constructor:function(t,e){var n,i=t||{};"function"==typeof this.preinitialize&&this.preinitialize.apply(this,arguments),this.cid=Qs("c"),this.attributes={},e&&e.collection&&(this.collection=e.collection),e&&e.parse&&(i=this.parse(i,e)||{}),(n=Fs(this,"defaults"))&&(i=Ks({},n,i)),this.set(i,e),this.changed={},this.initialize.apply(this,arguments)},translate:function(t,e,n){throw new Error("Must define a translate() method.")},toJSON:function(){var e=Fs(this.constructor.prototype,"defaults").attrs||{},t=this.attributes.attrs,o={};_s(t,function(t,i){var r=e[i];_s(t,function(t,n){ds(t)&&!Array.isArray(t)?_s(t,function(t,e){r&&r[n]&&Ds(r[n][e],t)||(o[i]=o[i]||{},(o[i][n]||(o[i][n]={}))[e]=t)}):r&&Ds(r[n],t)||(o[i]=o[i]||{},o[i][n]=t)})});var n=Ts(Vs(this.attributes,"attrs"));return n.attrs=o,n},initialize:function(t){var e=this.getIdAttribute();t&&void 0!==t[e]||this.set(e,this.generateId(),{silent:!0}),this._transitionIds={},this._scheduledTransitionIds={},this.processPorts(),this.on("change:attrs",this.processPorts,this)},getIdAttribute:function(){return this.idAttribute||"id"},generateId:function(){return sl()},processPorts:function(){var t=this.ports,n={};_s(this.get("attrs"),function(t,e){t&&t.port&&(void 0!==t.port.id?n[t.port.id]=t.port:n[t.port]={id:t.port})});var i={};(_s(t,function(t,e){n[e]||(i[e]=!0)}),this.graph&&!ks(i))&&(this.graph.getConnectedLinks(this,{inbound:!0}).forEach(function(t){i[t.get("target").port]&&t.remove()}),this.graph.getConnectedLinks(this,{outbound:!0}).forEach(function(t){i[t.get("source").port]&&t.remove()}));this.ports=n},remove:function(t){void 0===t&&(t={});var e=this.graph,n=this.collection;if(!e)return n&&n.remove(this,t),this;e.startBatch("remove");var i=this.getParentCell();i&&i.unembed(this,t);for(var r=this.getEmbeddedCells(),o=0,a=r.length;o";if(i.parseFromString(r.replace(/@/g,""),"application/xml").getElementsByTagName("parsererror")[0])throw new Error("Invalid SVG markup");return e=i.parseFromString(r,"text/html").querySelector("svg"),n=[],Array.from(e.children).forEach(function(t){n.push(function n(t){var e={},i=t.tagName,r=t.attributes,o=t.namespaceURI,a=t.style,s=t.childNodes;e.namespaceURI=o,e.tagName=o===Dr.namespace.xhtml?i.toLowerCase():i;for(var l={},c=a.length;c--;){var u=a[c];l[u]=a.getPropertyValue(u)}e.style=l;var h=r.getNamedItem("@selector");h&&(e.selector=h.value,r.removeNamedItem("@selector"));var g=r.getNamedItem("@group-selector");if(g){var d=g.value.split(",");e.groupSelector=d.map(function(t){return t.trim()}),r.removeNamedItem("@group-selector")}var f=r.getNamedItem("class");f&&(e.className=f.value);var p=[];s.forEach(function(t){switch(t.nodeType){case Node.TEXT_NODE:var e=t.data.replace(/\s\s+/g," ");e.trim()&&p.push(e);break;case Node.ELEMENT_NODE:p.push(n(t))}}),p.length&&(e.children=p);var m={};return Array.from(r).forEach(function(t){var e=t.name,n=t.value;m[e]=n}),0','','','','','','',''].join(""),toolMarkup:['','','','',"Remove link.","",'','','',"Link options.","",""].join(""),doubleToolMarkup:void 0,vertexMarkup:['','','','',"Remove vertex.","",""].join(""),arrowheadMarkup:['','',""].join(""),defaultLabel:void 0,labelMarkup:void 0,_builtins:{defaultLabel:{markup:[{tagName:"rect",selector:"rect"},{tagName:"text",selector:"text"}],attrs:{text:{fill:"#000000",fontSize:14,textAnchor:"middle",yAlignment:"middle",pointerEvents:"none"},rect:{ref:"text",fill:"#ffffff",rx:3,ry:3,refWidth:1,refHeight:1,refX:0,refY:0}},position:{distance:.5}}},defaults:{type:"link",source:{},target:{}},isLink:function(){return!0},disconnect:function(t){return this.set({source:{x:0,y:0},target:{x:0,y:0}},t)},source:function(t,e,n){return void 0===t?Ss(this.get("source")):(r=t instanceof Kl?((i=Ss(e)||{}).id=t.id,n):Ps(t)?(i=t,e):((i=Ss(e)||{}).x=t.x,i.y=t.y,n),this.set("source",i,r));var i,r},target:function(t,e,n){return void 0===t?Ss(this.get("target")):(r=t instanceof Kl?((i=Ss(e)||{}).id=t.id,n):Ps(t)?(i=t,e):((i=Ss(e)||{}).x=t.x,i.y=t.y,n),this.set("target",i,r));var i,r},router:function(t,e,n){if(void 0===t){var i=this.get("router");return i?"object"==typeof i?Ss(i):i:this.get("manhattan")?{name:"orthogonal"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},a=r?e:n;return this.set("router",o,a)},connector:function(t,e,n){if(void 0===t){var i=this.get("connector");return i?"object"==typeof i?Ss(i):i:this.get("smooth")?{name:"smooth"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},a=r?e:n;return this.set("connector",o,a)},label:function(t,e,n){var i=this.labels();return(t=isFinite(t)&&null!==t?0|t:0)<0&&(t=i.length+t),arguments.length<=1?this.prop(["labels",t]):this.prop(["labels",t],e,n)},labels:function(t,e){return 0===arguments.length?(t=this.get("labels"),Array.isArray(t)?t.slice():[]):(Array.isArray(t)||(t=[]),this.set("labels",t,e))},hasLabels:function(){var t=this.attributes.labels;return Array.isArray(t)&&0 "+e),n=this.getSelector(t.parentNode,n)}return n},addLinkFromMagnet:function(t,e,n){var i=this.paper,r=i.model,o=i.getDefaultLink(this,t);return o.set({source:this.getLinkEnd(t,e,n,o,"source"),target:{x:e,y:n}}).addTo(r,{async:!1,ui:!0}),o.findView(i)},getLinkEnd:function(t){for(var e,n=[],i=arguments.length-1;0r.options.clickThreshold||this.notify("element:magnet:pointerclick",t,e,n,i)}},{Flags:jc});ms(Ec.prototype,Ic);var Zc={N:"S",S:"N",E:"W",W:"E"},Bc={N:-Math.PI/2*3,S:-Math.PI/2,E:0,W:Math.PI};function Rc(t,e,n){var i=new ci(t.x,e.y);return n.containsPoint(i)&&(i=new ci(e.x,t.y)),i}function Yc(t,e){return t["W"===e||"E"===e?"width":"height"]}function Wc(t,e){return t.x===e.x?t.y>e.y?"N":"S":t.y===e.y?t.x>e.x?"W":"E":null}function Uc(t){return new Si(t.x,t.y,0,0)}function Fc(t){var e=Nl(t.padding||t.elementPadding||20);return{x:-e.left,y:-e.top,width:e.left+e.right,height:e.top+e.bottom}}function Vc(t,e){return t.sourceBBox.clone().moveAndExpand(Fc(e))}function Xc(t,e){return t.targetBBox.clone().moveAndExpand(Fc(e))}function _c(t,e,n){var i=new ci(t.x,e.y),r=new ci(e.x,t.y),o=Wc(t,i),a=Wc(t,r),s=Zc[n],l=o===n||o!==s&&(a===s||a!==n)?i:r;return{points:[l],direction:Wc(l,e)}}function Hc(t,e,n){var i=Rc(t,e,n);return{points:[i],direction:Wc(i,e)}}function Jc(e,t,n,i){var r,o={},a=[new ci(e.x,t.y),new ci(t.x,e.y)],s=a.filter(function(t){return!n.containsPoint(t)}),l=s.filter(function(t){return Wc(t,e)!==i});if(0c.center().distance(t),h=u?e:t,g=u?t:e;return a=Rc(o=r?(o=ci.fromPolar(c.width+c.height,Bc[r],h),c.pointNearestToPoint(o).move(o,-1)):c.pointNearestToPoint(h).move(h,1),g,c),o.round().equals(a.round())?(a=ci.fromPolar(c.width+c.height,Fn(o.theta(h))+Math.PI/2,g),s=Rc(o,a=c.pointNearestToPoint(a).move(g,1).round(),c),l.points=u?[a,s,o]:[o,s,a]):l.points=u?[a,o]:[o,a],l.direction=Wc(u?o:a,e),l}function qc(t,e,n){var i,r,o,a,s,l=Vc(n,e),c=Xc(n,e),u=(r=e,(i=n).sourceAnchor?i.sourceAnchor:Vc(i,r).center()),h=(a=e,(o=n).targetAnchor?o.targetAnchor:Xc(o,a).center());l=l.union(Uc(u)),c=c.union(Uc(h)),(t=zs(t).map(ci)).unshift(u),t.push(h);for(var g=[],d=0,f=t.length-1;di.maxAllowedDirectionChange)){var X=cu(Z.clone().offset(T.gridOffsetX,T.gridOffsetY),A,l),_=uu(X);if(!C.isClose(_)&&!n(X)){if(0<=j.indexOf(_))if(!X.equals(d))if(au(V,ou(X,d,z,A,i))>i.maxAllowedDirectionChange)continue;var H=R+T.cost+(W?0:i.penalties[k]);(!C.isOpen(_)||He[1].x?"right":"left";switch(i){case"left":o=new ci(-1,0);break;case"right":default:o=new ci(1,0)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case Ou.VERTICAL:return function(t,e,n){var i,r,o,a=t.sourceBBox;if(t.sourceView)if(r=t.sourceView.model.angle(),n.rotate&&r){var s=t.sourceView.getNodeUnrotatedBBox(t.sourceView.el),l=e[0].clone();l.rotate(a.center(),r),i=s.sideNearestToPoint(l)}else i=a.sideNearestToPoint(e[0]);else i=a.y>e[1].y?"bottom":"top";switch(i){case"top":o=new ci(0,-1);break;case"bottom":default:o=new ci(0,1)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case Ou.CLOSEST_POINT:return Ru(t,e,i);case Ou.OUTWARDS:return Wu(t,e,i);case Ou.AUTO:default:return Zu(t,e,i)}}(r,h,a,l),d=h[0].distance(h[1])*l.coeff,f=Vu(g,h[1].difference(h[0]).normalize());if(f>Math.PI/4){var p=d+(f-Math.PI/4)*l.angleTangentCoefficient;c=g.clone().scale(p,p)}else c=g.clone().scale(d,d)}if(l.targetTangent)u=l.targetTangent;else{var m=function(t,e,n,i){if(i.targetDirection)switch(i.targetDirection){case Gu.UP:return new ci(0,-1);case Gu.DOWN:return new ci(0,1);case Gu.LEFT:return new ci(-1,0);case Gu.RIGHT:return new ci(0,1);case Gu.AUTO:return Bu(t,e,i);case Gu.CLOSEST_POINT:return Yu(t,e,i);case Gu.OUTWARDS:return Uu(t,e,i);default:return i.targetDirection}switch(n){case Ou.HORIZONTAL:return function(t,e,n){var i,r,o,a=t.targetBBox;if(t.targetView)if(r=t.targetView.model.angle(),n.rotate&&r){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),l=e[e.length-1].clone();l.rotate(a.center(),r),i=s.sideNearestToPoint(l)}else i=a.sideNearestToPoint(e[e.length-1]);else i=a.x>e[e.length-2].x?"left":"right";switch(i){case"left":o=new ci(-1,0);break;case"right":default:o=new ci(1,0)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case Ou.VERTICAL:return function(t,e,n){var i,r,o,a=t.targetBBox;if(t.targetView)if(r=t.targetView.model.angle(),n.rotate&&r){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),l=e[e.length-1].clone();l.rotate(a.center(),r),i=s.sideNearestToPoint(l)}else i=a.sideNearestToPoint(e[e.length-1]);else i=a.y>e[e.length-2].y?"top":"bottom";switch(i){case"top":o=new ci(0,-1);break;case"bottom":default:o=new ci(0,1)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case Ou.CLOSEST_POINT:return Yu(t,e,i);case Ou.OUTWARDS:return Uu(t,e,i);case Ou.AUTO:default:return Bu(t,e,i)}}(r,h,a,l),v=h.length-1,I=h[v-1].distance(h[v])*l.coeff,A=Vu(m,h[v-1].difference(h[v]).normalize());if(A>Math.PI/4){var C=I+(A-Math.PI/4)*l.angleTangentCoefficient;u=m.clone().scale(C,C)}else u=m.clone().scale(I,I)}var y=function(t,e,n,i){for(var r=i.tau,o=i.coeff,a=[],s=[],l=[],c=t.length-1,u=0;u=Math.abs(t.y-e.y)){var c=(t.x+e.x)/2;l=Ri.createSegment("C",c,t.y,c,e.y,e.x,e.y),r.appendSegment(l)}else{var u=(t.y+e.y)/2;l=Ri.createSegment("C",t.x,u,e.x,u,e.x,e.y),r.appendSegment(l)}}return o?r:r.serialize()},curve:Eu},Hu={TOOLS:Pc.Flags.TOOLS,RENDER:"RENDER",UPDATE:"UPDATE",LEGACY_TOOLS:"LEGACY_TOOLS",LABELS:"LABELS",VERTICES:"VERTICES",SOURCE:"SOURCE",TARGET:"TARGET",CONNECTOR:"CONNECTOR"},Ju=Pc.extend({className:function(){var t=Pc.prototype.className.apply(this).split(" ");return t.push("link"),t.join(" ")},options:{shortLinkLength:105,doubleLinkTools:!1,longLinkLength:155,linkToolsOffset:40,doubleLinkToolsOffset:65,sampleInterval:50},_labelCache:null,_labelSelectors:null,_markerCache:null,_V:null,_dragData:null,metrics:null,decimalsRounding:2,initialize:function(){Pc.prototype.initialize.apply(this,arguments),this._labelCache={},this._labelSelectors={},this._markerCache={},this._V={},this.cleanNodesCache()},presentationAttributes:{markup:[Hu.RENDER],attrs:[Hu.UPDATE],router:[Hu.UPDATE],connector:[Hu.CONNECTOR],smooth:[Hu.UPDATE],manhattan:[Hu.UPDATE],toolMarkup:[Hu.LEGACY_TOOLS],labels:[Hu.LABELS],labelMarkup:[Hu.LABELS],vertices:[Hu.VERTICES,Hu.UPDATE],vertexMarkup:[Hu.VERTICES],source:[Hu.SOURCE,Hu.UPDATE],target:[Hu.TARGET,Hu.UPDATE]},initFlag:[Hu.RENDER,Hu.SOURCE,Hu.TARGET,Hu.TOOLS],UPDATE_PRIORITY:1,confirmUpdate:function(t,e){if(e||(e={}),this.hasFlag(t,Hu.SOURCE)){if(!this.updateEndProperties("source"))return t;t=this.removeFlag(t,Hu.SOURCE)}if(this.hasFlag(t,Hu.TARGET)){if(!this.updateEndProperties("target"))return t;t=this.removeFlag(t,Hu.TARGET)}var n=this.paper,i=this.sourceView,r=this.targetView;if(n&&(i&&!n.isViewMounted(i)||r&&!n.isViewMounted(r)))return t;if(this.hasFlag(t,Hu.RENDER))return this.render(),this.updateHighlighters(!0),this.updateTools(e),t=this.removeFlag(t,[Hu.RENDER,Hu.UPDATE,Hu.VERTICES,Hu.LABELS,Hu.TOOLS,Hu.LEGACY_TOOLS,Hu.CONNECTOR]);var o=!1;this.hasFlag(t,Hu.VERTICES)&&(this.renderVertexMarkers(),t=this.removeFlag(t,Hu.VERTICES));var a=this.model,s=a.attributes,l=this.hasFlag(t,Hu.LABELS),c=this.hasFlag(t,Hu.LEGACY_TOOLS);l&&(this.onLabelsChange(a,s.labels,e),t=this.removeFlag(t,Hu.LABELS),o=!0),c&&(this.renderTools(),t=this.removeFlag(t,Hu.LEGACY_TOOLS));var u=this.hasFlag(t,Hu.UPDATE),h=this.hasFlag(t,Hu.CONNECTOR);return(u||h)&&(u?e.translateBy&&a.isRelationshipEmbeddedIn(e.translateBy)?this.translate(e.tx,e.ty):this.update():(this.updatePath(),this.updateDOM()),this.updateTools(e),t=this.removeFlag(t,[Hu.UPDATE,Hu.TOOLS,Hu.CONNECTOR]),o=!(c=l=!1)),l&&this.updateLabelPositions(),c&&this.updateToolsPosition(),o&&this.updateHighlighters(),this.hasFlag(t,Hu.TOOLS)&&(this.updateTools(e),t=this.removeFlag(t,Hu.TOOLS)),t},requestConnectionUpdate:function(t){this.requestUpdate(this.getFlag(Hu.UPDATE),t)},isLabelsRenderRequired:function(t){void 0===t&&(t={});var e=this.model.previous("labels");if(!e)return!0;if("propertyPathArray"in t&&"propertyValue"in t){var n=t.propertyPathArray||[],i=n.length;if(1=this.options.longLinkLength){var r=this.options.doubleLinkToolsOffset||e;i=this.getPointAtLength(n-r),this._tool2Cache.attr("transform","translate("+i.x+", "+i.y+") "+t),this._tool2Cache.attr("visibility","visible")}else this.options.doubleLinkTools&&this._tool2Cache.attr("visibility","hidden")}return this},updateArrowheadMarkers:function(){if(!this._V.markerArrowheads)return this;if("none"===b.css(this._V.markerArrowheads.node,"display"))return this;var t=this.getConnectionLength()'}),kh=Ec.extend({presentationAttributes:Ec.addPresentationAttributes({attrs:["SCALE"]}),confirmUpdate:function(){var t=Ec.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"SCALE")&&(this.resize(),t=this.removeFlag(t,"SCALE")),t}}),Dh=Sh.define("basic.Text",{attrs:{text:{"font-size":18,fill:"#000000"}}},{markup:''}),Lh=Sh.define("basic.Circle",{size:{width:60,height:60},attrs:{circle:{fill:"#ffffff",stroke:"#000000",r:30,cx:30,cy:30},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Ph=Sh.define("basic.Ellipse",{size:{width:60,height:40},attrs:{ellipse:{fill:"#ffffff",stroke:"#000000",rx:30,ry:20,cx:30,cy:20},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),zh=Sh.define("basic.Polygon",{size:{width:60,height:40},attrs:{polygon:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),jh=Sh.define("basic.Polyline",{size:{width:60,height:40},attrs:{polyline:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Oh=Sh.define("basic.Image",{attrs:{text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Gh=Sh.define("basic.Path",{size:{width:60,height:60},attrs:{path:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle",ref:"path","ref-x":.5,"ref-dy":10,fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Eh=Gh.define("basic.Rhombus",{attrs:{path:{d:"M 30 0 L 60 30 30 60 0 30 z"},text:{"ref-y":.5,"ref-dy":null,"y-alignment":"middle"}}}),Zh=Mh.test("svgforeignobject"),Bh=Sh.define("basic.TextBlock",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:80,height:100},text:{fill:"#000000","font-size":14,"font-family":"Arial, helvetica, sans-serif"},".content":{text:"","ref-x":.5,"ref-y":.5,"y-alignment":"middle","x-alignment":"middle"}},content:""},{markup:['','',Zh?'
':'',""].join(""),initialize:function(){this.listenTo(this,"change:size",this.updateSize),this.listenTo(this,"change:content",this.updateContent),this.updateSize(this,this.get("size")),this.updateContent(this,this.get("content")),Sh.prototype.initialize.apply(this,arguments)},updateSize:function(t,e){this.attr({".fobj":ms({},e),div:{style:ms({},e)}})},updateContent:function(t,e){Zh?this.attr({".content":{html:yl(e)}}):this.attr({".content":{text:e}})},setForeignObjectSize:function(){this.updateSize.apply(this,arguments)},setDivContent:function(){this.updateContent.apply(this,arguments)}}),Rh=Ec.extend({presentationAttributes:Zh?Ec.prototype.presentationAttributes:Ec.addPresentationAttributes({content:["CONTENT"],size:["CONTENT"]}),initFlag:["RENDER","CONTENT"],confirmUpdate:function(){var t=Ec.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"CONTENT")&&(this.updateContent(this.model),t=this.removeFlag(t,"CONTENT")),t},update:function(t,e){var n=this.model;if(Zh)Ec.prototype.update.call(this,n,e);else{var i=Vs(e||n.get("attrs"),".content");Ec.prototype.update.call(this,n,i),e&&!Us(e,".content")||this.updateContent(n,e)}},updateContent:function(t,e){var n=Ks({},(e||t.get("attrs"))[".content"]);n=Vs(n,"text");var i=Cl(t.get("content"),t.get("size"),n,{svgDocument:this.paper.svg}),r=rl({},".content",n,"/");r[".content"].text=i,Ec.prototype.update.call(this,t,r)}}),Yh={Generic:Sh,Rect:Th,TextView:kh,Text:Dh,Circle:Lh,Ellipse:Ph,Polygon:zh,Polyline:jh,Image:Oh,Path:Gh,Rhombus:Eh,TextBlock:Bh,TextBlockView:Rh},Wh=Ac.define("standard.Rectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"text",selector:"label"}]}),Uh=Ac.define("standard.Circle",{attrs:{body:{refCx:"50%",refCy:"50%",refR:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"circle",selector:"body"},{tagName:"text",selector:"label"}]}),Fh=Ac.define("standard.Ellipse",{attrs:{body:{refCx:"50%",refCy:"50%",refRx:"50%",refRy:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"body"},{tagName:"text",selector:"label"}]}),Vh=Ac.define("standard.Path",{attrs:{body:{refD:"M 0 0 L 10 0 10 10 0 10 Z",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"text",selector:"label"}]}),Xh=Ac.define("standard.Polygon",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polygon",selector:"body"},{tagName:"text",selector:"label"}]}),_h=Ac.define("standard.Polyline",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10 0 0",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polyline",selector:"body"},{tagName:"text",selector:"label"}]}),Hh=Ac.define("standard.Image",{attrs:{image:{refWidth:"100%",refHeight:"100%"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),Jh=Ac.define("standard.BorderedImage",{attrs:{border:{refWidth:"100%",refHeight:"100%",stroke:"#333333",strokeWidth:2},background:{refWidth:-1,refHeight:-1,x:.5,y:.5,fill:"#FFFFFF"},image:{refWidth:-1,refHeight:-1,x:.5,y:.5},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"background",attributes:{stroke:"none"}},{tagName:"image",selector:"image"},{tagName:"rect",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),Qh=Ac.define("standard.EmbeddedImage",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#FFFFFF",strokeWidth:2},image:{refWidth:"30%",refHeight:-20,x:10,y:10,preserveAspectRatio:"xMidYMin"},label:{textVerticalAnchor:"top",textAnchor:"left",refX:"30%",refX2:20,refY:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),Kh=Ac.define("standard.InscribedImage",{attrs:{border:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",stroke:"#333333",strokeWidth:2},background:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",fill:"#FFFFFF"},image:{refWidth:"68%",refHeight:"68%",refX:"16%",refY:"16%",preserveAspectRatio:"xMidYMid"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"background"},{tagName:"image",selector:"image"},{tagName:"ellipse",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),qh=Ac.define("standard.HeaderedRectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},header:{refWidth:"100%",height:30,strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},headerText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:15,fontSize:16,fill:"#333333"},bodyText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"rect",selector:"header"},{tagName:"text",selector:"headerText"},{tagName:"text",selector:"bodyText"}]}),$h=Ac.define("standard.Cylinder",{attrs:{body:{lateralArea:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},top:{refCx:"50%",cy:10,refRx:"50%",ry:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"100%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"ellipse",selector:"top"},{tagName:"text",selector:"label"}],topRy:function(t,e){if(void 0===t)return this.attr("body/lateralArea");var n={lateralArea:t},i=pl(t)?{refCy:t,refRy:t,cy:null,ry:null}:{refCy:null,refRy:null,cy:t,ry:t};return this.attr({body:n,top:i},e)}},{attributes:{lateralArea:{set:function(t,e){var n=pl(t);n&&(t=parseFloat(t)/100);var i=e.x,r=e.y,o=e.width,a=e.height,s=o/2,l=n?a*t:t,c=Dr.KAPPA,u=c*s,h=c*(n?a*t:t),g=i+o/2,d=i+o,f=r+l,p=f-l,m=r+a-l,v=r+a;return{d:["M",i,f,"L",i,m,"C",i,m+h,g-u,v,g,v,"C",g+u,v,d,m+h,d,m,"L",d,f,"C",d,f-h,g+u,p,g,p,"C",g-u,p,i,f-h,i,f,"Z"].join(" ")}}}}}),tg=Mh.test("svgforeignobject")?{tagName:"foreignObject",selector:"foreignObject",attributes:{overflow:"hidden"},children:[{tagName:"div",namespaceURI:"http://www.w3.org/1999/xhtml",selector:"label",style:{width:"100%",height:"100%",position:"static",backgroundColor:"transparent",textAlign:"center",margin:0,padding:"0px 5px",boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center"}}]}:{tagName:"text",selector:"label",attributes:{"text-anchor":"middle"}},eg={Rectangle:Wh,Circle:Uh,Ellipse:Fh,Path:Vh,Polygon:Xh,Polyline:_h,Image:Hh,BorderedImage:Jh,EmbeddedImage:Qh,InscribedImage:Kh,HeaderedRectangle:qh,Cylinder:$h,TextBlock:Ac.define("standard.TextBlock",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#ffffff",strokeWidth:2},foreignObject:{refWidth:"100%",refHeight:"100%"},label:{style:{fontSize:14}}}},{markup:[{tagName:"rect",selector:"body"},tg]},{attributes:{text:{set:function(t,e,n,i){if(!(n instanceof HTMLElement)){var r=i.style||{},o={text:t,width:-5,height:"100%"},a=ms({textVerticalAnchor:"middle"},r);return Ql.textWrap.set.call(this,o,e,n,a),{fill:r.color||null}}n.textContent=t},position:function(t,e,n){if(n instanceof SVGElement)return e.center()}}}}),Link:pc.define("standard.Link",{attrs:{line:{connection:!0,stroke:"#333333",strokeWidth:2,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 10 -5 0 0 10 5 z"}},wrapper:{connection:!0,strokeWidth:10,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"wrapper",attributes:{fill:"none",cursor:"pointer",stroke:"transparent","stroke-linecap":"round"}},{tagName:"path",selector:"line",attributes:{fill:"none","pointer-events":"none"}}]}),DoubleLink:pc.define("standard.DoubleLink",{attrs:{line:{connection:!0,stroke:"#DDDDDD",strokeWidth:4,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"#000000",d:"M 10 -3 10 -10 -2 0 10 10 10 3"}},outline:{connection:!0,stroke:"#000000",strokeWidth:6,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"outline",attributes:{fill:"none"}},{tagName:"path",selector:"line",attributes:{fill:"none"}}]}),ShadowLink:pc.define("standard.ShadowLink",{attrs:{line:{connection:!0,stroke:"#FF0000",strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"none",d:"M 0 -10 -10 0 0 10 z"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}},shadow:{connection:!0,refX:3,refY:6,stroke:"#000000",strokeOpacity:.2,strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 0 -10 -10 0 0 10 z",stroke:"none"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}}}},{markup:[{tagName:"path",selector:"shadow",attributes:{fill:"none"}},{tagName:"path",selector:"line",attributes:{fill:"none"}}]})},ng=Sh.define("devs.Model",{inPorts:[],outPorts:[],size:{width:80,height:80},attrs:{".":{magnet:!1},".label":{text:"Model","ref-x":.5,"ref-y":10,"font-size":18,"text-anchor":"middle",fill:"#000"},".body":{"ref-width":"100%","ref-height":"100%",stroke:"#000"}},ports:{groups:{in:{position:{name:"left"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"left",args:{y:10}}}},out:{position:{name:"right"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"right",args:{y:10}}}}}}},{markup:'',portMarkup:'',portLabelMarkup:'',initialize:function(){Sh.prototype.initialize.apply(this,arguments),this.on("change:inPorts change:outPorts",this.updatePortItems,this),this.updatePortItems()},updatePortItems:function(t,e,n){var i=Ms(this.get("inPorts")),r=Ys(Ms(this.get("outPorts")),i),o=this.createPortItems("in",i),a=this.createPortItems("out",r);this.prop("ports/items",o.concat(a),ms({rewrite:!0},n))},createPortItem:function(t,e){return{id:e,group:t,attrs:{".port-label":{text:e}}}},createPortItems:function(t,e){return zs(e).map(this.createPortItem.bind(this,t))},_addGroupPort:function(t,e,n){var i=this.get(e);return this.set(e,Array.isArray(i)?i.concat(t):[t],n)},addOutPort:function(t,e){return this._addGroupPort(t,"outPorts",e)},addInPort:function(t,e){return this._addGroupPort(t,"inPorts",e)},_removeGroupPort:function(t,e,n){return this.set(e,Rs(this.get(e),t),n)},removeOutPort:function(t,e){return this._removeGroupPort(t,"outPorts",e)},removeInPort:function(t,e){return this._removeGroupPort(t,"inPorts",e)},_changeGroup:function(t,e,n){return this.prop("ports/groups/"+t,ds(e)?e:{},n)},changeInGroup:function(t,e){return this._changeGroup("in",t,e)},changeOutGroup:function(t,e){return this._changeGroup("out",t,e)}}),ig=ng.define("devs.Atomic",{size:{width:80,height:80},attrs:{".label":{text:"Atomic"}}}),rg=ng.define("devs.Coupled",{size:{width:200,height:300},attrs:{".label":{text:"Coupled"}}}),og={Model:ng,Atomic:ig,Coupled:rg,Link:pc.define("devs.Link",{attrs:{".connection":{"stroke-width":2}}})},ag=Sh.define("logic.Gate",{size:{width:80,height:40},attrs:{".":{magnet:!1},".body":{width:100,height:50},circle:{r:7,stroke:"black",fill:"transparent","stroke-width":2}}},{operation:function(){return!0}}),sg=ag.define("logic.IO",{size:{width:60,height:30},attrs:{".body":{fill:"white",stroke:"black","stroke-width":2},".wire":{ref:".body","ref-y":.5,stroke:"black"},text:{fill:"black",ref:".body","ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle","font-weight":"bold","font-variant":"small-caps","text-transform":"capitalize","font-size":"14px"}}},{markup:''}),lg=sg.define("logic.Input",{attrs:{".wire":{"ref-dx":0,d:"M 0 0 L 23 0"},circle:{ref:".body","ref-dx":30,"ref-y":.5,magnet:!0,class:"output",port:"out"},text:{text:"input"}}}),cg=sg.define("logic.Output",{attrs:{".wire":{"ref-x":0,d:"M 0 0 L -23 0"},circle:{ref:".body","ref-x":-30,"ref-y":.5,magnet:"passive",class:"input",port:"in"},text:{text:"output"}}}),ug=ag.define("logic.Gate11",{attrs:{".input":{ref:".body","ref-x":-2,"ref-y":.5,magnet:"passive",port:"in"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:''}),hg=ag.define("logic.Gate21",{attrs:{".input1":{ref:".body","ref-x":-2,"ref-y":.3,magnet:"passive",port:"in1"},".input2":{ref:".body","ref-x":-2,"ref-y":.7,magnet:"passive",port:"in2"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:''}),gg=ug.define("logic.Repeater",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzIuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t){return t}}),dg=ug.define("logic.Not",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzkuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDI2NzEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzYiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA4MCwyNSBBIDQsNCAwIDEgMSA3MiwyNSBBIDQsNCAwIDEgMSA4MCwyNSB6IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEsMCkiIC8+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t){return!t}}),fg=hg.define("logic.Or",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik9SIEFOU0kuc3ZnIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTAgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjcxNCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODA2IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODE5IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjM3Mi4wNDcyNCA6IDM1MC43ODczOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI3NDQuMDk0NDggOiA1MjYuMTgxMDkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzc3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49Ijc1IDogNDAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTUwIDogNjAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDYwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTMyNzUiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNTAgOiAzMy4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTAwIDogNTAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1MzMiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzIgOiAyMS4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNjQgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMzIgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjU1NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDE2LjY2NjY2NyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDI1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNCIKICAgICBpbmtzY2FwZTpjeD0iMTEzLjAwMDM5IgogICAgIGlua3NjYXBlOmN5PSIxMi44OTM3MzEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImcyNTYwIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTpncmlkLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1wb2ludHM9InRydWUiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAwMDAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMzk5IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijg3NCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMzciCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii00IgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gNzAsMjUgYyAyMCwwIDI1LDAgMjUsMCIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMSwxNSA1LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzIsMzUgNSwzNSIKICAgICAgIGlkPSJwYXRoMzk0NCIgLz4KICAgIDxnCiAgICAgICBpZD0iZzI1NjAiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2LjUsLTM5LjUpIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t,e){return t||e}}),pg=hg.define("logic.And",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkFORCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI4IgogICAgIGlua3NjYXBlOmN4PSI1Ni42OTgzNDgiCiAgICAgaW5rc2NhcGU6Y3k9IjI1LjMyNjg5OSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZvbnQtc2l6ZTptZWRpdW07Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7ZGlyZWN0aW9uOmx0cjtibG9jay1wcm9ncmVzc2lvbjp0Yjt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGU7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkJpdHN0cmVhbSBWZXJhIFNhbnMiCiAgICAgICBkPSJNIDMwLDUgTCAzMCw2LjQyODU3MTQgTCAzMCw0My41NzE0MjkgTCAzMCw0NSBMIDMxLjQyODU3MSw0NSBMIDUwLjQ3NjE5LDQ1IEMgNjEuNzQ0MDk4LDQ1IDcwLjQ3NjE5LDM1Ljk5OTk1NSA3MC40NzYxOSwyNSBDIDcwLjQ3NjE5LDE0LjAwMDA0NSA2MS43NDQwOTksNS4wMDAwMDAyIDUwLjQ3NjE5LDUgQyA1MC40NzYxOSw1IDUwLjQ3NjE5LDUgMzEuNDI4NTcxLDUgTCAzMCw1IHogTSAzMi44NTcxNDMsNy44NTcxNDI5IEMgNDAuODM0MjY0LDcuODU3MTQyOSA0NS45MTgzNjgsNy44NTcxNDI5IDQ4LjA5NTIzOCw3Ljg1NzE0MjkgQyA0OS4yODU3MTQsNy44NTcxNDI5IDQ5Ljg4MDk1Miw3Ljg1NzE0MjkgNTAuMTc4NTcxLDcuODU3MTQyOSBDIDUwLjMyNzM4MSw3Ljg1NzE0MjkgNTAuNDA5MjI3LDcuODU3MTQyOSA1MC40NDY0MjksNy44NTcxNDI5IEMgNTAuNDY1MDI5LDcuODU3MTQyOSA1MC40NzE1NDMsNy44NTcxNDI5IDUwLjQ3NjE5LDcuODU3MTQyOSBDIDYwLjIzNjg1Myw3Ljg1NzE0MyA2Ny4xNDI4NTcsMTUuNDk3MDk4IDY3LjE0Mjg1NywyNSBDIDY3LjE0Mjg1NywzNC41MDI5MDIgNTkuNzYwNjYyLDQyLjE0Mjg1NyA1MCw0Mi4xNDI4NTcgTCAzMi44NTcxNDMsNDIuMTQyODU3IEwgMzIuODU3MTQzLDcuODU3MTQyOSB6IgogICAgICAgaWQ9InBhdGgyODg0IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NzY2NjY3Nzc3NzY2NjIiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return t&&e}}),mg=hg.define("logic.Nor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjY3NzY0NCIKICAgICBpbmtzY2FwZTpjeT0iMjIuMTAyMzQ0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjM3IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItNCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc5LDI1IEMgOTksMjUgOTUsMjUgOTUsMjUiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBpZD0icGF0aDI2MDQiCiAgICAgICAgIHNvZGlwb2RpOmN4PSI3NSIKICAgICAgICAgc29kaXBvZGk6Y3k9IjI1IgogICAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgICAgc29kaXBvZGk6cnk9IjQiCiAgICAgICAgIGQ9Ik0gNzksMjUgQSA0LDQgMCAxIDEgNzEsMjUgQSA0LDQgMCAxIDEgNzksMjUgeiIKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI2LjUsMzkuNSkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return!(t||e)}}),vg=hg.define("logic.Nand",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5BTkQgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMTYiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjI4MzMwNyIKICAgICBpbmtzY2FwZTpjeT0iMTYuNDQyODQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzksMjUgQyA5MS44LDI1IDk1LDI1IDk1LDI1IgogICAgICAgaWQ9InBhdGgzMDU5IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMxLDE1IDUsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMiwzNSA1LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmb250LXNpemU6bWVkaXVtO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7dGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbjpub25lO2xpbmUtaGVpZ2h0Om5vcm1hbDtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2RpcmVjdGlvbjpsdHI7YmxvY2stcHJvZ3Jlc3Npb246dGI7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MzttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5OkJpdHN0cmVhbSBWZXJhIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpCaXRzdHJlYW0gVmVyYSBTYW5zIgogICAgICAgZD0iTSAzMCw1IEwgMzAsNi40Mjg1NzE0IEwgMzAsNDMuNTcxNDI5IEwgMzAsNDUgTCAzMS40Mjg1NzEsNDUgTCA1MC40NzYxOSw0NSBDIDYxLjc0NDA5OCw0NSA3MC40NzYxOSwzNS45OTk5NTUgNzAuNDc2MTksMjUgQyA3MC40NzYxOSwxNC4wMDAwNDUgNjEuNzQ0MDk5LDUuMDAwMDAwMiA1MC40NzYxOSw1IEMgNTAuNDc2MTksNSA1MC40NzYxOSw1IDMxLjQyODU3MSw1IEwgMzAsNSB6IE0gMzIuODU3MTQzLDcuODU3MTQyOSBDIDQwLjgzNDI2NCw3Ljg1NzE0MjkgNDUuOTE4MzY4LDcuODU3MTQyOSA0OC4wOTUyMzgsNy44NTcxNDI5IEMgNDkuMjg1NzE0LDcuODU3MTQyOSA0OS44ODA5NTIsNy44NTcxNDI5IDUwLjE3ODU3MSw3Ljg1NzE0MjkgQyA1MC4zMjczODEsNy44NTcxNDI5IDUwLjQwOTIyNyw3Ljg1NzE0MjkgNTAuNDQ2NDI5LDcuODU3MTQyOSBDIDUwLjQ2NTAyOSw3Ljg1NzE0MjkgNTAuNDcxNTQzLDcuODU3MTQyOSA1MC40NzYxOSw3Ljg1NzE0MjkgQyA2MC4yMzY4NTMsNy44NTcxNDMgNjcuMTQyODU3LDE1LjQ5NzA5OCA2Ny4xNDI4NTcsMjUgQyA2Ny4xNDI4NTcsMzQuNTAyOTAyIDU5Ljc2MDY2Miw0Mi4xNDI4NTcgNTAsNDIuMTQyODU3IEwgMzIuODU3MTQzLDQyLjE0Mjg1NyBMIDMyLjg1NzE0Myw3Ljg1NzE0MjkgeiIKICAgICAgIGlkPSJwYXRoMjg4NCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2Njc2NjY2Nzc3Nzc2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDQwMDgiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return!(t&&e)}}),Ig=hg.define("logic.Xor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhPUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjUuNjU2ODU0MiIKICAgICBpbmtzY2FwZTpjeD0iMjUuOTM4MTE2IgogICAgIGlua3NjYXBlOmN5PSIxNy4yMzAwNSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzAuMzg1NzE3LDE1IEwgNC45OTk5OTk4LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5NzY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEuMzYyMDkxLDM1IEwgNC45OTk5OTk4LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPGcKICAgICAgIGlkPSJnMjU2MCIKICAgICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjYuNSwtMzkuNSkiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDM1MTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi4yNSw4MS41MDAwMDUgQyAtMy44NDczNzQsODQuMTQ0NDA1IC00LjUsODQuNTAwMDA1IC00LjUsODQuNTAwMDA1IEwgLTguMTU2MjUsODQuNTAwMDA1IEwgLTYuMTU2MjUsODIuMDYyNTA1IEMgLTYuMTU2MjUsODIuMDYyNTA1IC0wLjUsNzUuMDYyNDUxIC0wLjUsNjQuNSBDIC0wLjUsNTMuOTM3NTQ5IC02LjE1NjI1LDQ2LjkzNzUgLTYuMTU2MjUsNDYuOTM3NSBMIC04LjE1NjI1LDQ0LjUgTCAtNC41LDQ0LjUgQyAtMy43MTg3NSw0NS40Mzc1IC0zLjA3ODEyNSw0Ni4xNTYyNSAtMi4yODEyNSw0Ny41IEMgLTAuNDA4NTMxLDUwLjU5OTgxNSAyLjUsNTYuNTI2NjQ2IDIuNSw2NC41IEMgMi41LDcyLjQ1MDY1IC0wLjM5NjY5Nyw3OC4zNzk0MjUgLTIuMjUsODEuNTAwMDA1IHoiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY3NjY2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return(!t||e)&&(t||!e)}}),Ag=hg.define("logic.Xnor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhOT1IgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNTU3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTYuNjY2NjY3IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDI1IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI0IgogICAgIGlua3NjYXBlOmN4PSI5NS43MjM2NiIKICAgICBpbmtzY2FwZTpjeT0iLTI2Ljc3NTAyMyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjAwMDAwMDI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc4LjMzMzMzMiwyNSBDIDkxLjY2NjY2NiwyNSA5NSwyNSA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMC4zODU3MTcsMTUgTCA0Ljk5OTk5OTgsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk3NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMS4zNjIwOTEsMzUgTCA0Ljk5OTk5OTgsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzUxNiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjI1LDgxLjUwMDAwNSBDIC0zLjg0NzM3NCw4NC4xNDQ0MDUgLTQuNSw4NC41MDAwMDUgLTQuNSw4NC41MDAwMDUgTCAtOC4xNTYyNSw4NC41MDAwMDUgTCAtNi4xNTYyNSw4Mi4wNjI1MDUgQyAtNi4xNTYyNSw4Mi4wNjI1MDUgLTAuNSw3NS4wNjI0NTEgLTAuNSw2NC41IEMgLTAuNSw1My45Mzc1NDkgLTYuMTU2MjUsNDYuOTM3NSAtNi4xNTYyNSw0Ni45Mzc1IEwgLTguMTU2MjUsNDQuNSBMIC00LjUsNDQuNSBDIC0zLjcxODc1LDQ1LjQzNzUgLTMuMDc4MTI1LDQ2LjE1NjI1IC0yLjI4MTI1LDQ3LjUgQyAtMC40MDg1MzEsNTAuNTk5ODE1IDIuNSw1Ni41MjY2NDYgMi41LDY0LjUgQyAyLjUsNzIuNDUwNjUgLTAuMzk2Njk3LDc4LjM3OTQyNSAtMi4yNSw4MS41MDAwMDUgeiIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2Njc2NjY2NzYyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDM1NTEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return(!t||!e)&&(t||e)}}),Cg={Gate:ag,IO:sg,Input:lg,Output:cg,Gate11:ug,Gate21:hg,Repeater:gg,Not:dg,Or:fg,And:pg,Nor:mg,Nand:vg,Xor:Ig,Xnor:Ag,Wire:pc.define("logic.Wire",{attrs:{".connection":{"stroke-width":2},".marker-vertex":{r:7}},router:{name:"orthogonal"},connector:{name:"rounded",args:{radius:10}}},{arrowheadMarkup:['','',""].join(""),vertexMarkup:['','','','','',"Remove vertex.","","",""].join("")})},yg={KingWhite:Sh.define("chess.KingWhite",{size:{width:42,height:38}},{markup:' '}),KingBlack:Sh.define("chess.KingBlack",{size:{width:42,height:38}},{markup:' '}),QueenWhite:Sh.define("chess.QueenWhite",{size:{width:42,height:38}},{markup:' '}),QueenBlack:Sh.define("chess.QueenBlack",{size:{width:42,height:38}},{markup:' '}),RookWhite:Sh.define("chess.RookWhite",{size:{width:32,height:34}},{markup:' '}),RookBlack:Sh.define("chess.RookBlack",{size:{width:32,height:34}},{markup:' '}),BishopWhite:Sh.define("chess.BishopWhite",{size:{width:38,height:38}},{markup:' '}),BishopBlack:Sh.define("chess.BishopBlack",{size:{width:38,height:38}},{markup:' '}),KnightWhite:Sh.define("chess.KnightWhite",{size:{width:38,height:37}},{markup:' '}),KnightBlack:Sh.define("chess.KnightBlack",{size:{width:38,height:37}},{markup:' '}),PawnWhite:Sh.define("chess.PawnWhite",{size:{width:28,height:33}},{markup:''}),PawnBlack:Sh.define("chess.PawnBlack",{size:{width:28,height:33}},{markup:''})},wg=Ac.define("erd.Entity",{size:{width:150,height:60},attrs:{".outer":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"100,0 100,60 0,60 0,0"},".inner":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"95,5 95,55 5,55 5,5",display:"none"},text:{text:"Entity","font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),bg=wg.define("erd.WeakEntity",{attrs:{".inner":{display:"auto"},text:{text:"Weak Entity"}}}),xg=Ac.define("erd.Relationship",{size:{width:80,height:80},attrs:{".outer":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,0 80,40 40,80 0,40"},".inner":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,5 75,40 40,75 5,40",display:"none"},text:{text:"Relationship","font-family":"Arial","font-size":12,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Ng=xg.define("erd.IdentifyingRelationship",{attrs:{".inner":{display:"auto"},text:{text:"Identifying"}}}),Mg=Ac.define("erd.Attribute",{size:{width:100,height:50},attrs:{ellipse:{transform:"translate(50, 25)"},".outer":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:50,ry:25,fill:"#E67E22"},".inner":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:45,ry:20,fill:"#E67E22",display:"none"},text:{"font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Sg=Mg.define("erd.Multivalued",{attrs:{".inner":{display:"block"},text:{text:"multivalued"}}}),Tg=Mg.define("erd.Derived",{attrs:{".outer":{"stroke-dasharray":"3,5"},text:{text:"derived"}}}),kg=Mg.define("erd.Key",{attrs:{ellipse:{"stroke-width":4},text:{text:"key","font-weight":"800","text-decoration":"underline"}}}),Dg=Mg.define("erd.Normal",{attrs:{text:{text:"Normal"}}}),Lg={Entity:wg,WeakEntity:bg,Relationship:xg,IdentifyingRelationship:Ng,Attribute:Mg,Multivalued:Sg,Derived:Tg,Key:kg,Normal:Dg,ISA:Ac.define("erd.ISA",{type:"erd.ISA",size:{width:100,height:50},attrs:{polygon:{points:"0,0 50,50 100,0",fill:"#F1C40F",stroke:"#F39C12","stroke-width":2},text:{text:"ISA","font-size":18,"ref-x":.5,"ref-y":.3,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Line:pc.define("erd.Line",{},{cardinality:function(t){this.set("labels",[{position:-20,attrs:{text:{dy:-8,text:t}}}])}})},Pg={State:Lh.define("fsa.State",{attrs:{circle:{"stroke-width":3},text:{"font-weight":"800"}}}),StartState:Ac.define("fsa.StartState",{size:{width:20,height:20},attrs:{circle:{transform:"translate(10, 10)",r:10,fill:"#000000"}}},{markup:''}),EndState:Ac.define("fsa.EndState",{size:{width:20,height:20},attrs:{".outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#000000"},".inner":{transform:"translate(10, 10)",r:6,fill:"#000000"}}},{markup:''}),Arrow:pc.define("fsa.Arrow",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}},smooth:!0})},zg={Member:Ac.define("org.Member",{size:{width:180,height:70},attrs:{rect:{width:170,height:60},".card":{fill:"#FFFFFF",stroke:"#000000","stroke-width":2,"pointer-events":"visiblePainted",rx:10,ry:10},image:{width:48,height:48,ref:".card","ref-x":10,"ref-y":5},".rank":{"text-decoration":"underline",ref:".card","ref-x":.9,"ref-y":.2,"font-family":"Courier New","font-size":14,"text-anchor":"end"},".name":{"font-weight":"800",ref:".card","ref-x":.9,"ref-y":.6,"font-family":"Courier New","font-size":14,"text-anchor":"end"}}},{markup:''}),Arrow:pc.define("org.Arrow",{source:{selector:".card"},target:{selector:".card"},attrs:{".connection":{stroke:"#585858","stroke-width":3}},z:-1})},jg={Place:Sh.define("pn.Place",{size:{width:50,height:50},attrs:{".root":{r:25,fill:"#ffffff",stroke:"#000000",transform:"translate(25, 25)"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:".root",fill:"#000000","font-size":12},".tokens > circle":{fill:"#000000",r:5},".tokens.one > circle":{transform:"translate(25, 25)"},".tokens.two > circle:nth-child(1)":{transform:"translate(19, 25)"},".tokens.two > circle:nth-child(2)":{transform:"translate(31, 25)"},".tokens.three > circle:nth-child(1)":{transform:"translate(18, 29)"},".tokens.three > circle:nth-child(2)":{transform:"translate(25, 19)"},".tokens.three > circle:nth-child(3)":{transform:"translate(32, 29)"},".tokens.alot > text":{transform:"translate(25, 18)","text-anchor":"middle",fill:"#000000"}}},{markup:''}),PlaceView:Ec.extend({presentationAttributes:Ec.addPresentationAttributes({tokens:["TOKENS"]}),initFlag:Ec.prototype.initFlag.concat(["TOKENS"]),confirmUpdate:function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];var i=(t=Ec.prototype.confirmUpdate).call.apply(t,[this].concat(e));return this.hasFlag(i,"TOKENS")&&(this.renderTokens(),this.update(),i=this.removeFlag(i,"TOKENS")),i},renderTokens:function(){var e=this.vel.findOne(".tokens").empty();["one","two","three","alot"].forEach(function(t){e.removeClass(t)});var t=this.model.get("tokens");if(t)switch(t){case 1:e.addClass("one"),e.append(Dr("circle"));break;case 2:e.addClass("two"),e.append([Dr("circle"),Dr("circle")]);break;case 3:e.addClass("three"),e.append([Dr("circle"),Dr("circle"),Dr("circle")]);break;default:e.addClass("alot"),e.append(Dr("text").text(t+""))}}}),Transition:Sh.define("pn.Transition",{size:{width:12,height:50},attrs:{rect:{width:12,height:50,fill:"#000000",stroke:"#000000"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:"rect",fill:"#000000","font-size":12}}},{markup:''}),Link:pc.define("pn.Link",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}}})},Og=Sh.define("uml.Class",{attrs:{rect:{width:200},".uml-class-name-rect":{stroke:"black","stroke-width":2,fill:"#3498db"},".uml-class-attrs-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-methods-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-name-text":{ref:".uml-class-name-rect","ref-y":.5,"ref-x":.5,"text-anchor":"middle","y-alignment":"middle","font-weight":"bold",fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-attrs-text":{ref:".uml-class-attrs-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-methods-text":{ref:".uml-class-methods-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"}},name:[],attributes:[],methods:[]},{markup:['','','',"",'',""].join(""),initialize:function(){this.on("change:name change:attributes change:methods",function(){this.updateRectangles(),this.trigger("uml-update")},this),this.updateRectangles(),Sh.prototype.initialize.apply(this,arguments)},getClassName:function(){return this.get("name")},updateRectangles:function(){var i=this.get("attrs"),t=[{type:"name",text:this.getClassName()},{type:"attrs",text:this.get("attributes")},{type:"methods",text:this.get("methods")}],r=0;t.forEach(function(t){var e=Array.isArray(t.text)?t.text:[t.text],n=20*e.length+20;i[".uml-class-"+t.type+"-text"].text=e.join("\n"),i[".uml-class-"+t.type+"-rect"].height=n,i[".uml-class-"+t.type+"-rect"].transform="translate(0,"+r+")",r+=n})}}),Gg=Ec.extend({initialize:function(){Ec.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"uml-update",function(){this.update(),this.resize()})}}),Eg=Og.define("uml.Abstract",{attrs:{".uml-class-name-rect":{fill:"#e74c3c"},".uml-class-attrs-rect":{fill:"#c0392b"},".uml-class-methods-rect":{fill:"#c0392b"}}},{getClassName:function(){return["<>",this.get("name")]}}),Zg=Gg,Bg=Og.define("uml.Interface",{attrs:{".uml-class-name-rect":{fill:"#f1c40f"},".uml-class-attrs-rect":{fill:"#f39c12"},".uml-class-methods-rect":{fill:"#f39c12"}}},{getClassName:function(){return["<>",this.get("name")]}}),Rg={basic:Yh,standard:eg,devs:og,logic:Cg,chess:yg,erd:Lg,fsa:Pg,org:zg,pn:jg,uml:{Class:Og,ClassView:Gg,Abstract:Eg,AbstractView:Zg,Interface:Bg,InterfaceView:Gg,Generalization:pc.define("uml.Generalization",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"}}}),Implementation:pc.define("uml.Implementation",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"},".connection":{"stroke-dasharray":"3,3"}}}),Aggregation:pc.define("uml.Aggregation",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"white"}}}),Composition:pc.define("uml.Composition",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"black"}}}),Association:pc.define("uml.Association"),State:Sh.define("uml.State",{attrs:{".uml-state-body":{width:200,height:200,rx:10,ry:10,fill:"#ecf0f1",stroke:"#bdc3c7","stroke-width":3},".uml-state-separator":{stroke:"#bdc3c7","stroke-width":2},".uml-state-name":{ref:".uml-state-body","ref-x":.5,"ref-y":5,"text-anchor":"middle",fill:"#000000","font-family":"Courier New","font-size":14},".uml-state-events":{ref:".uml-state-separator","ref-x":5,"ref-y":5,fill:"#000000","font-family":"Courier New","font-size":14}},name:"State",events:[]},{markup:['','','',"",'','','',""].join(""),initialize:function(){this.on({"change:name":this.updateName,"change:events":this.updateEvents,"change:size":this.updatePath},this),this.updateName(),this.updateEvents(),this.updatePath(),Sh.prototype.initialize.apply(this,arguments)},updateName:function(){this.attr(".uml-state-name/text",this.get("name"))},updateEvents:function(){this.attr(".uml-state-events/text",this.get("events").join("\n"))},updatePath:function(){var t="M 0 20 L "+this.get("size").width+" 20";this.attr(".uml-state-separator/d",t,{silent:!0})}}),StartState:Lh.define("uml.StartState",{type:"uml.StartState",attrs:{circle:{fill:"#34495e",stroke:"#2c3e50","stroke-width":2,rx:1}}}),EndState:Sh.define("uml.EndState",{size:{width:20,height:20},attrs:{"circle.outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#2c3e50"},"circle.inner":{transform:"translate(10, 10)",r:6,fill:"#34495e"}}},{markup:''}),Transition:pc.define("uml.Transition",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z",fill:"#34495e",stroke:"#2c3e50"},".connection":{stroke:"#2c3e50"}}})}};function Yg(t,e){if(0===e)return"0%";return Math.round(t/e*100*1e3)/1e3+"%"}function Wg(r){return function(t,e,n,i){return(e.isNodeConnection(n)?Fg:Ug)(r,t,e,n,i)}}function Ug(t,e,n,i,r){var o=n.model.angle(),a=n.getNodeUnrotatedBBox(i),s=n.model.getBBox().center();r.rotate(s,o);var l=r.x-a.x,c=r.y-a.y;return t&&(l=Yg(l,a.width),c=Yg(c,a.height)),e.anchor={name:"topLeft",args:{dx:l,dy:c,rotate:!0}},e}function Fg(t,e,n,i,r){var o=n.getConnection();if(!o)return e;var a=o.closestPointLength(r);if(t){var s=o.length();e.anchor={name:"connectionRatio",args:{ratio:a/s}}}else e.anchor={name:"connectionLength",args:{length:a}};return e}var Vg=Ll,Xg=Wg(!1),_g=Wg(!0),Hg={useDefaults:Vg,pinAbsolute:Xg,pinRelative:_g},Jg=bc.extend({tagName:"circle",svgElement:!0,className:"marker-vertex",events:{mousedown:"onPointerDown",touchstart:"onPointerDown",dblclick:"onDoubleClick",dbltap:"onDoubleClick"},documentEvents:{mousemove:"onPointerMove",touchmove:"onPointerMove",mouseup:"onPointerUp",touchend:"onPointerUp",touchcancel:"onPointerUp"},attributes:{r:6,fill:"#33334F",stroke:"#FFFFFF","stroke-width":2,cursor:"move"},position:function(t,e){var n=this.vel,i=this.options.scale,r=Dr.createSVGMatrix().translate(t,e);i&&(r=r.scale(i)),n.transform(r,{absolute:!0})},onPointerDown:function(t){this.options.guard(t)||(t.stopPropagation(),t.preventDefault(),this.options.paper.undelegateEvents(),this.delegateDocumentEvents(null,t.data),this.trigger("will-change",this,t))},onPointerMove:function(t){this.trigger("changing",this,t)},onDoubleClick:function(t){this.trigger("remove",this,t)},onPointerUp:function(t){this.trigger("changed",this,t),this.undelegateDocumentEvents(),this.options.paper.delegateEvents()}}),Qg=wh.extend({name:"vertices",options:{handleClass:Jg,snapRadius:20,redundancyRemoval:!0,vertexAdding:!0,stopPropagation:!0,scale:null},children:[{tagName:"path",selector:"connection",className:"joint-vertices-path",attributes:{fill:"none",stroke:"transparent","stroke-width":10,cursor:"cell"}}],handles:null,events:{"mousedown .joint-vertices-path":"onPathPointerDown","touchstart .joint-vertices-path":"onPathPointerDown"},onRender:function(){return this.options.vertexAdding&&(this.renderChildren(),this.updatePath()),this.resetHandles(),this.renderHandles(),this},update:function(){return this.relatedView.model.vertices().length===this.handles.length?this.updateHandles():(this.resetHandles(),this.renderHandles()),this.options.vertexAdding&&this.updatePath(),this},resetHandles:function(){var t=this.handles;if(this.handles=[],this.stopListening(),Array.isArray(t))for(var e=0,n=t.length;er;)A(i,n=e[r++])&&(~vt(o,n)||o.push(n));return o},At=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ct=At.concat("length","prototype"),yt={f:Object.getOwnPropertyNames||function(t){return It(t,Ct)}},wt={f:Object.getOwnPropertySymbols},bt=st("Reflect","ownKeys")||function(t){var e=yt.f(k(t)),n=wt.f;return n?e.concat(n(t)):e},xt=function(t,e){for(var n=bt(e),i=L.f,r=S.f,o=0;o"+t+""},Ht=function(){try{nt=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;Ht=nt?function(t){t.write(_t("")),t.close();var e=t.parentWindow.Object;return t=null,e}(nt):((e=N("iframe")).style.display="none",Wt.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(_t("document.F=Object")),t.close(),t.F);for(var n=At.length;n--;)delete Ht[Ut][At[n]];return Ht()};J[Vt]=!0;var Jt=Object.create||function(t,e){var n;return null!==t?(Xt[Ut]=k(t),n=new Xt,Xt[Ut]=null,n[Vt]=t):n=Ht(),void 0===e?n:Yt(n,e)},Qt=Zt("unscopables"),Kt=Array.prototype;null==Kt[Qt]&&L.f(Kt,Qt,{configurable:!0,value:Jt(null)});var qt=function(t){Kt[Qt][t]=!0},$t=Object.defineProperty,te={},ee=function(t){throw t},ne=function(t,e){if(A(te,t))return te[t];e||(e={});var n=[][t],i=!!A(e,"ACCESSORS")&&e.ACCESSORS,r=A(e,0)?e[0]:ee,o=A(e,1)?e[1]:void 0;return te[t]=!!n&&!a(function(){if(i&&!s)return!0;var t={length:-1};i?$t(t,1,{enumerable:!0,get:ee}):t[1]=1,n.call(t,r,o)})},ie=mt.includes,re=ne("indexOf",{ACCESSORS:!0,1:0});zt({target:"Array",proto:!0,forced:!re},{includes:function(t){return ie(this,t,1=n.length?{value:void 0,done:!0}:(t=Ve(n,i),e.index+=t.length,{value:t,done:!1})});var Je=function(e,t,n,i){try{return i?t(k(n)[0],n[1]):t(n)}catch(t){throw function(t){var e=t.return;if(void 0!==e)k(e.call(t)).value}(e),t}},Qe=Zt("iterator"),Ke=Array.prototype,qe=function(t,e,n){var i=v(e);i in t?L.f(t,i,C(0,n)):t[i]=n},$e={};$e[Zt("toStringTag")]="z";var tn="[object z]"===String($e),en=Zt("toStringTag"),nn="Arguments"==g(function(){return arguments}()),rn=tn?g:function(t){var e,n,i;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),en))?n:nn?g(e):"Object"==(i=g(e))&&"function"==typeof e.callee?"Arguments":i},on=Zt("iterator"),an=Zt("iterator"),sn=!1;try{var ln=0,cn={next:function(){return{done:!!ln++}},return:function(){sn=!0}};cn[an]=function(){return this},Array.from(cn,function(){throw 2})}catch(t){}var un=!function(t,e){if(!e&&!sn)return!1;var n=!1;try{var i={};i[an]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n}(function(t){Array.from(t)});zt({target:"Array",stat:!0,forced:un},{from:function(t){var e,n,i,r,o,a,s,l=le(t),c="function"==typeof this?this:Array,u=arguments.length,h=1>8-r%1*8)){if(255<(n=i.charCodeAt(r+=.75)))throw new l("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");e=e<<8|n}return a}),t.atob||(t.atob=function(t){var e=String(t).replace(/=+$/,"");if(e.length%4==1)throw new l("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,i,r=0,o=0,a="";i=e.charAt(o++);~i&&(n=r%4?64*n+i:i,r++%4)?a+=String.fromCharCode(255&n>>(-2*r&6)):0)i=s.indexOf(i);return a})}()});zt({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});ot.Number.isNaN;var pn=u.isFinite,mn=Number.isFinite||function(t){return"number"==typeof t&&pn(t)};zt({target:"Number",stat:!0},{isFinite:mn});ot.Number.isFinite;var vn=Zt("match"),In=function(t){if(m(e=t)&&(void 0!==(n=e[vn])?n:"RegExp"==g(e)))throw TypeError("The method doesn't accept regular expressions");var e,n;return t},An=Zt("match"),Cn=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[An]=!1,"/./"[e](n)}catch(t){}}return!1};zt({target:"String",proto:!0,forced:!Cn("includes")},{includes:function(t){return!!~String(f(this)).indexOf(In(t),1i)&&!(new di(t,n).length()>i)},divideAt:function(t){var e=this.pointAt(t);return[new di(this.start,e),new di(e,this.end)]},divideAtLength:function(t){var e=this.pointAtLength(t);return[new di(this.start,e),new di(e,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,e){if(t&&t.intersectionWithLine){var n=t.intersectionWithLine(this,e);return n&&t instanceof di&&(n=n[0]),n}return null},intersectionWithLine:function(t){var e=new ci(this.end.x-this.start.x,this.end.y-this.start.y),n=new ci(t.end.x-t.start.x,t.end.y-t.start.y),i=e.x*n.y-e.y*n.x,r=new ci(t.start.x-this.start.x,t.start.y-this.start.y),o=r.x*n.y-r.y*n.x,a=r.x*e.y-r.y*e.x;if(0===i||o*i<0||a*i<0)return null;if(0s.x+o/2,h=is.x?r-30:r+30)-c)/(a*a*(i-l))+l:e=a*a/(r-c)-a*a*(i-l)*((n=r>s.y?i+30:i-30)-l)/(o*o*(r-c))+c,new ci(n,e).theta(t)},toString:function(){return new ci(this.x,this.y).toString()+" "+this.a+" "+this.b}};var Ai=Ii,Ci=Math.abs,yi=Math.cos,wi=Math.sin,bi=Math.min,xi=Math.max,Ni=Math.round,Mi=Math.pow,Ti=function(t,e,n,i){if(!(this instanceof Ti))return new Ti(t,e,n,i);Object(t)===t&&(e=t.y,n=t.width,i=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===e?0:e,this.width=void 0===n?0:n,this.height=void 0===i?0:i};Ti.fromEllipse=function(t){return t=new Ii(t),new Ti(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},Ti.fromPointUnion=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if(0===t.length)return null;var n,i,r,o,a=new ci;n=i=1/0,r=o=-1/0;for(var s=0;s=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var e=new Ti(this).normalize(),n=new Ti(t).normalize(),i=e.width,r=e.height,o=n.width,a=n.height;if(!(i&&r&&o&&a))return!1;var s=e.x,l=e.y,c=n.x,u=n.y;return o+=c,i+=s,a+=u,r+=l,s<=c&&o<=i&&l<=u&&a<=r},corner:function(){return new ci(this.x+this.width,this.y+this.height)},equals:function(t){var e=new Ti(this).normalize(),n=new Ti(t).normalize();return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height},inflate:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.x-=t,this.y-=e,this.width+=2*t,this.height+=2*e,this},intersect:function(t){var e=this.origin(),n=this.corner(),i=t.origin(),r=t.corner();if(r.x<=e.x||r.y<=e.y||i.x>=n.x||i.y>=n.y)return null;var o=xi(e.x,i.x),a=xi(e.y,i.y);return new Ti(o,a,bi(n.x,r.x)-o,bi(n.y,r.y)-a)},intersectionWithLine:function(t){var e,n,i=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],r=[],o=[],a=i.length;for(n=0;nu&&(i=(this.x+this.width-u)/(d.x-u)),d.y>h&&(s=(this.y+this.height-h)/(d.y-h));var f=t.topRight();f.x>u&&(r=(this.x+this.width-u)/(f.x-u)),f.yh&&(c=(this.y+this.height-h)/(p.y-h)),{sx:bi(n,i,r,o),sy:bi(a,s,l,c)}},maxRectUniformScaleToFit:function(t,e){var n=this.maxRectScaleToFit(t,e);return bi(n.sx,n.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,e=this.y,n=this.width,i=this.height;return this.width<0&&(t=this.x+this.width,n=-this.width),this.height<0&&(e=this.y+this.height,i=-this.height),this.x=t,this.y=e,this.width=n,this.height=i,this},offset:function(t,e){return ci.prototype.offset.call(this,t,e)},origin:function(){return new ci(this.x,this.y)},pointNearestToPoint:function(t){if(t=new ci(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new ci(this.x+this.width,t.y);case"left":return new ci(this.x,t.y);case"bottom":return new ci(t.x,this.y+this.height);case"top":return new ci(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new di(this.topRight(),this.bottomRight())},rightMiddle:function(){return new ci(this.x+this.width,this.y+this.height/2)},round:function(t){var e=1;if(t)switch(t){case 1:e=10;break;case 2:e=100;break;case 3:e=1e3;break;default:e=Mi(10,t)}return this.x=Ni(this.x*e)/e,this.y=Ni(this.y*e)/e,this.width=Ni(this.width*e)/e,this.height=Ni(this.height*e)/e,this},scale:function(t,e,n){return n=this.origin().scale(t,e,n),this.x=n.x,this.y=n.y,this.width*=t,this.height*=e,this},sideNearestToPoint:function(t){var e=(t=new ci(t)).x-this.x,n=this.x+this.width-t.x,i=t.y-this.y,r=e,o="left";return ni.x&&(i=t[e]);var a=[];for(e=0;eg.y||r>h.y&&r<=g.y){var d=h.x-i>g.x-i?h.x-i:g.x-i;0<=d&&(u.x=i+d,u.y=r,c.start=t,c.end=u,l.intersect(c)&&s++)}o=a}return s%2==1},close:function(){var t=this.start,e=this.end,n=this.points;return t&&e&&!t.equals(e)&&n.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new Pi(Li(this.points))},equals:function(t){if(!t)return!1;var e=this.points,n=t.points,i=e.length;if(n.length!==i)return!1;for(var r=0;rr+a&&i.x>r+a||n.xo+s&&i.y>o+s||n.ye.x&&t.ye.y}function ar(t,e){return yr(t,e,{interior:!1})}function sr(t,e){return wr(t,e,{interior:!1})}function lr(t,e){return br(t,e,{interior:!1})}function cr(t,e){return Nr(t,e,{interior:!1})}function ur(t,e){return yr(t,e,{interior:!0})}function hr(t,e){return wr(t,e,{interior:!0})}function gr(t,e){return br(t,e,{interior:!0})}function dr(t,e){return Nr(t,e,{interior:!0})}function fr(t,e){return Mr(t,e,{interior:!0})}function pr(t,n,i){return t.getSubpaths().some(function(t){var e=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?ur(e,n):ar(e,n)})}function mr(t,n,i){return t.getSubpaths().some(function(t){var e=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?hr(e,n):sr(e,n)})}function vr(t,e,n){return Ar(t,$i.fromRect(e),n)}function Ir(t,e,n){return xr(t,e,n,{interior:!1})}function Ar(t,e,n){return xr(t,e,n,{interior:!0})}function Cr(t,n,i,r){return t.getSubpaths().some(function(t){var e=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?Ar(n,e,r):Ir(n,e,r)})}function yr(t,e,n){void 0===n&&(n={});var i,r=n.interior;if(void 0===r&&(r=!1),r){if(t.containsPoint(e.start))return!0;var o=t.start,a=t.end,s=t.points;i=a.equals(o)?s:s.concat([o])}else i=t.points;for(var l=i.length,c=new di,u=0;u'+t+"";return G.parseXML(e,{async:!1}).documentElement}var n=document.createElementNS(O.svg,"svg");return n.setAttributeNS(O.xmlns,"xmlns:xlink",O.xlink),n.setAttribute("version","1.1"),n},G.createSVGStyle=function(t){return G("style",{type:"text/css"},[G.createCDATASection(t)]).node},G.createCDATASection=function(t){return void 0===t&&(t=""),document.implementation.createDocument(null,"xml",null).createCDATASection(t)},G.idCounter=0,G.uniqueId=function(){return"v-"+ ++G.idCounter},G.toNode=function(t){return G.isV(t)?t.node:t.nodeName&&t||t[0]},G.ensureId=function(t){return(t=G.toNode(t)).id||(t.id=G.uniqueId())},G.sanitizeText=function(t){return(t||"").replace(/ /g,"\xa0")},G.isUndefined=function(t){return void 0===t},G.isString=function(t){return"string"==typeof t},G.isObject=function(t){return t&&"object"==typeof t},G.isArray=Array.isArray,G.parseXML=function(t,e){var n;e=e||{};try{var i=new DOMParser;G.isUndefined(e.async)||(i.async=e.async),n=i.parseFromString(t,"text/xml")}catch(t){n=void 0}if(!n||n.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+t);return n};var i=Object.create(null);["baseFrequency","baseProfile","clipPathUnits","contentScriptType","contentStyleType","diffuseConstant","edgeMode","externalResourcesRequired","filterRes","filterUnits","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].forEach(function(t){return i[t]=t});var s=new Proxy(i,{get:function(t,e){return G.supportCamelCaseAttributes?e in t?t[e]:t[e]=e.replace(/[A-Z]/g,"-$&").toLowerCase():e}});Object.defineProperty(G,"attributeNames",{value:s,writable:!1}),Object.defineProperty(G,"supportCamelCaseAttributes",{value:!1,writable:!0}),G.qualifyAttr=function(t){if(-1===t.indexOf(":"))return{ns:null,local:t};var e=t.split(":");return{ns:O[e[0]],local:e[1]}},G.transformSeparatorRegex=/[ ,]+/,G.transformRegex=/\b\w+\([^()]+\)/g,G.transformFunctionRegex=/\b(\w+)\(([^()]+)\)/,G.transformTranslateRegex=/\btranslate\(([^()]+)\)/,G.transformRotateRegex=/\brotate\(([^()]+)\)/,G.transformScaleRegex=/\bscale\(([^()]+)\)/,G.transformStringToMatrix=function(t){var e=G.createSVGMatrix(),n=t&&t.match(G.transformRegex);if(!n)return e;for(var i=n.length,r=0;r=t.start&&et.start&&n<=t.end||t.start>=e&&t.end=e?t.end+=n:t.start>=e&&(t.start+=n,t.end+=n)}),t},G.convertLineToPathData=function(t){return["M",(t=G(t)).attr("x1"),t.attr("y1"),"L",t.attr("x2"),t.attr("y2")].join(" ")},G.convertPolygonToPathData=function(t){var e=G.getPointsFromSvgNode(t);return 0===e.length?null:G.svgPointsToPath(e)+" Z"},G.convertPolylineToPathData=function(t){var e=G.getPointsFromSvgNode(t);return 0===e.length?null:G.svgPointsToPath(e)},G.svgPointsToPath=function(t){for(var e=0,n=t.length;e=o[r]&&(a.push([e].concat(i.splice(0,o[r]))),o[r]););}),a}(t)),!t||!t.length)return[["M",0,0]];for(var e,n=[],i=0,r=0,o=0,a=0,s=t.length,l=0;lg){var M=x,T=l,S=c;f=t(l=y+i*V(x=b+g*(s&&bp)P=p-1;else if(void 0!==o){if(void 0===I&&""!==c.data)if("auto"===n.lineHeight)I=Al({value:1.5,unit:"em"},l);else I=Al(ml(n.lineHeight,["em","px",""]),l);I*y.length>o&&(P=Math.floor(o/I)-1)}if(null!==P){y.splice(P+1);var z=i.ellipsis;if(!z||P<0)break;"string"!=typeof z&&(z="\u2026");var j=y[P];if(!j&&!M)break;var O,G,E=j.length;do{if(G=j[E],O=j.substring(0,E),G?G.match(h)&&(O+=G):O+=g,O+=z,c.data=O,s.getComputedTextLength()<=r){y[P]=O;break}E--}while(0<=E);break}}}return i.svgDocument?a.removeChild(l):document.body.removeChild(a),y.join(d)},yl=function(t){var e=b(b.parseHTML("
"+t+"
",null,!1));return e.find("*").each(function(){var n=this;b.each(n.attributes,function(){var t=this.name,e=this.value;(t.startsWith("on")||e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&b(n).removeAttr(t)})}),e.html()},wl=function(t,e){if(window.navigator.msSaveBlob)window.navigator.msSaveBlob(t,e);else{var n=window.URL.createObjectURL(t),i=document.createElement("a");i.href=n,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),window.URL.revokeObjectURL(n)}},bl=function(t){t=t.replace(/\s/g,"");var e,n=(t=decodeURIComponent(t)).indexOf(","),i=t.slice(0,n),r=i.split(":")[1].split(";")[0],o=t.slice(n+1);e=0<=i.indexOf("base64")?atob(o):unescape(encodeURIComponent(o));for(var a=new Uint8Array(e.length),s=0;s')({color:t.color||"blue",opacity:Number.isFinite(t.opacity)?t.opacity:1,outerRadius:e+n,innerRadius:e})},highlight:function(t){return Dl('')({color:t.color||"red",width:Number.isFinite(t.width)?t.width:1,blur:Number.isFinite(t.blur)?t.blur:0,opacity:Number.isFinite(t.opacity)?t.opacity:1})},blur:function(t){var e=Number.isFinite(t.x)?t.x:2;return Dl('')({stdDeviation:Number.isFinite(t.y)?[e,t.y]:e})},dropShadow:function(t){var e="SVGFEDropShadowElement"in window?'':'';return Dl(e)({dx:t.dx||0,dy:t.dy||0,opacity:Number.isFinite(t.opacity)?t.opacity:1,color:t.color||"black",blur:Number.isFinite(t.blur)?t.blur:4})},grayscale:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({a:.2126+.7874*(1-e),b:.7152-.7152*(1-e),c:.0722-.0722*(1-e),d:.2126-.2126*(1-e),e:.7152+.2848*(1-e),f:.0722-.0722*(1-e),g:.2126-.2126*(1-e),h:.0722+.9278*(1-e)})},sepia:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({a:.393+.607*(1-e),b:.769-.769*(1-e),c:.189-.189*(1-e),d:.349-.349*(1-e),e:.686+.314*(1-e),f:.168-.168*(1-e),g:.272-.272*(1-e),h:.534-.534*(1-e),i:.131+.869*(1-e)})},saturate:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:1-e})},hueRotate:function(t){return Dl('')({angle:t.angle||0})},invert:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:e,amount2:1-e})},brightness:function(t){return Dl('')({amount:Number.isFinite(t.amount)?t.amount:1})},contrast:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:e,amount2:.5-e/2})}},kl={number:function(t,e,o){o=o||{currency:["$",""],decimal:".",thousands:",",grouping:[3]};var n=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i.exec(t),i=n[1]||" ",r=n[2]||">",a=n[3]||"",s=n[4]||"",l=n[5],c=+n[6],u=n[7],h=n[8],g=n[9],d=1,f="",p="",m=!1;switch(h&&(h=+h.substring(1)),(l||"0"===i&&"="===r)&&(l=i="0",r="=",u&&(c-=Math.floor((c-1)/4))),g){case"n":u=!0,g="g";break;case"%":d=100,p="%",g="f";break;case"p":d=100,p="%",g="r";break;case"b":case"o":case"x":case"X":"#"===s&&(f="0"+g.toLowerCase());break;case"c":case"d":m=!0,h=0;break;case"s":d=-1,g="r"}"$"===s&&(f=o.currency[0],p=o.currency[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):"e"!=g&&"f"!=g||(h=Math.max(0,Math.min(20,h))));var v=l&&u;if(m&&e%1)return"";var I=e<0||0===e&&1/e<0?(e=-e,"-"):a,A=p;if(d<0){var C=this.prefix(e,h);e=C.scale(e),A=C.symbol+p}else e*=d;var y=(e=this.convert(g,e,h)).lastIndexOf("."),w=y<0?e:e.substring(0,y),b=y<0?"":o.decimal+e.substring(y+1);function x(t){for(var e=t.length,n=[],i=0,r=o.grouping[0];0"===r?M+I+e:"^"===r?M.substring(0,N>>=1)+I+e+M.substring(N):I+(v?e:M+e))+A},string:function(t,e){for(var n,i="{",r=!1,o=[];-1!==(n=t.indexOf(i));){var a,s,l;if(a=t.slice(0,n),r){l=(s=a.split(":")).shift().split("."),a=e;for(var c=0;c|\$\{ ?([^{} ]+) ?\}|\{\{([^{} ]+)\}\}/g;return function(i){return i=i||{},t.replace(e,function(t){for(var e=Array.from(arguments).slice(1,4).find(function(t){return!!t}).split("."),n=i[e.shift()];void 0!==n&&e.length;)n=n[e.shift()];return void 0!==n?n:""})}},Ll=function(){};function Pl(t){t=Ms(t);var a=zs(t).reduce(function(t,e){return t[e.id]=e.clone(),t},{});return zs(t).forEach(function(t){var e=a[t.id];if(e.isLink()){var n=e.source(),i=e.target();n.id&&a[n.id]&&e.prop("source/id",a[n.id].id),i.id&&a[i.id]&&e.prop("target/id",a[i.id].id)}var r=t.get("parent");r&&a[r]&&e.set("parent",a[r].id);var o=zs(t.get("embeds")).reduce(function(t,e){return a[e]&&t.push(a[e].id),t},[]);ks(o)||e.set("embeds",o)}),a}var zl=["checked","selected","disabled","readOnly","contentEditable","value","indeterminate"].reduce(function(t,e){return t[e]=!0,t},{}),jl={qualify:function(t){return Ps(t)},set:function(e,t,i){Object.keys(e).forEach(function(t){if(zl[t]&&t in i){var n=e[t];"SELECT"===i.tagName&&Array.isArray(n)?Array.from(i.options).forEach(function(t,e){t.selected=n.includes(t.value)}):i[t]=n}})}};function Ol(o,a){return function(t,e){var n=pl(t);t=parseFloat(t),n&&(t/=100);var i={};if(isFinite(t)){var r=n||0<=t&&t<=1?t*e[a]:Math.max(t+e[a],0);i[o]=r}return i}}function Gl(a,s,l){return function(t,e){var n,i=pl(t);if(t=parseFloat(t),i&&(t/=100),isFinite(t)){var r=e[l]();n=i||0e.width?_l:Hl)(t,e)})},refRCircumscribed:{set:function(t,e){var n=pl(t);t=parseFloat(t),n&&(t/=100);var i,r=Math.sqrt(e.height*e.height+e.width*e.width);return isFinite(t)&&(i=n||0<=t&&t<=1?t*r:Math.max(t+r,0)),{r:i}}},refCx:{set:Ol("cx","width")},refCy:{set:Ol("cy","height")},xAlignment:{offset:El("x","width","right")},yAlignment:{offset:El("y","height","bottom")},resetOffset:{offset:function(t,e){return t?{x:-e.x,y:-e.y}:{x:0,y:0}}},refDResetOffset:{set:Zl({resetOffset:!0})},refDKeepOffset:{set:Zl({resetOffset:!1})},refPointsResetOffset:{set:Rl({resetOffset:!0})},refPointsKeepOffset:{set:Rl({resetOffset:!1})},connection:{qualify:Fl,set:function(t){var e,n=t.stubs;if(void 0===n&&(n=0),isFinite(n)&&0!==n){var i;i=n<0?(this.getConnectionLength()+n)/2:n;var r=this.getConnection(),o=this.getConnectionSubdivisions(),a=r.divideAtLength(i,{segmentSubdivisions:o}),s=r.divideAtLength(-i,{segmentSubdivisions:o});a&&s&&(e=a[0].serialize()+" "+s[1].serialize())}return{d:e||this.getSerializedConnection()}}},atConnectionLengthKeepGradient:{qualify:Fl,set:Yl("getTangentAtLength",{rotate:!0})},atConnectionLengthIgnoreGradient:{qualify:Fl,set:Yl("getTangentAtLength",{rotate:!1})},atConnectionRatioKeepGradient:{qualify:Fl,set:Yl("getTangentAtRatio",{rotate:!0})},atConnectionRatioIgnoreGradient:{qualify:Fl,set:Yl("getTangentAtRatio",{rotate:!1})}};Jl["xlink:href"]=Jl.xlinkHref,["transform","d","points","cx","cy","x1","x2","y1","y2","x","y","dx","dy"].forEach(function(i){Jl[i]={qualify:jn,set:function(t,e){var n;return(n={})[i]=En(t,e),n}}}),["width","height","r","rx","ry","font-size","stroke-width"].forEach(function(i){Jl[i]={qualify:jn,set:function(t,e){var n;return(n={})[i]=Math.max(0,En(t,e)),n}}}),Jl.refR=Jl.refRInscribed,Jl.refD=Jl.refDResetOffset,Jl.refPoints=Jl.refPointsResetOffset,Jl.atConnectionLength=Jl.atConnectionLengthKeepGradient,Jl.atConnectionRatio=Jl.atConnectionRatioKeepGradient,Jl.fontSize=Jl["font-size"],Jl.strokeWidth=Jl["stroke-width"],Jl.refX2=Jl.refX,Jl.refY2=Jl.refY,Jl.refWidth2=Jl.refWidth,Jl.refHeight2=Jl.refHeight,Jl["ref-x"]=Jl.refX,Jl["ref-y"]=Jl.refY,Jl["ref-dy"]=Jl.refDy,Jl["ref-dx"]=Jl.refDx,Jl["ref-width"]=Jl.refWidth,Jl["ref-height"]=Jl.refHeight,Jl["x-alignment"]=Jl.xAlignment,Jl["y-alignment"]=Jl.yAlignment;var Ql=Jl,Kl=c.Model.extend({constructor:function(t,e){var n,i=t||{};"function"==typeof this.preinitialize&&this.preinitialize.apply(this,arguments),this.cid=Qs("c"),this.attributes={},e&&e.collection&&(this.collection=e.collection),e&&e.parse&&(i=this.parse(i,e)||{}),(n=Fs(this,"defaults"))&&(i=Ks({},n,i)),this.set(i,e),this.changed={},this.initialize.apply(this,arguments)},translate:function(t,e,n){throw new Error("Must define a translate() method.")},toJSON:function(){var e=Fs(this.constructor.prototype,"defaults").attrs||{},t=this.attributes.attrs,o={};_s(t,function(t,i){var r=e[i];_s(t,function(t,n){ds(t)&&!Array.isArray(t)?_s(t,function(t,e){r&&r[n]&&Ds(r[n][e],t)||(o[i]=o[i]||{},(o[i][n]||(o[i][n]={}))[e]=t)}):r&&Ds(r[n],t)||(o[i]=o[i]||{},o[i][n]=t)})});var n=Ss(Vs(this.attributes,"attrs"));return n.attrs=o,n},initialize:function(t){var e=this.getIdAttribute();t&&void 0!==t[e]||this.set(e,this.generateId(),{silent:!0}),this._transitionIds={},this._scheduledTransitionIds={},this.processPorts(),this.on("change:attrs",this.processPorts,this)},getIdAttribute:function(){return this.idAttribute||"id"},generateId:function(){return sl()},processPorts:function(){var t=this.ports,n={};_s(this.get("attrs"),function(t,e){t&&t.port&&(void 0!==t.port.id?n[t.port.id]=t.port:n[t.port]={id:t.port})});var i={};(_s(t,function(t,e){n[e]||(i[e]=!0)}),this.graph&&!ks(i))&&(this.graph.getConnectedLinks(this,{inbound:!0}).forEach(function(t){i[t.get("target").port]&&t.remove()}),this.graph.getConnectedLinks(this,{outbound:!0}).forEach(function(t){i[t.get("source").port]&&t.remove()}));this.ports=n},remove:function(t){void 0===t&&(t={});var e=this.graph,n=this.collection;if(!e)return n&&n.remove(this,t),this;e.startBatch("remove");var i=this.getParentCell();i&&i.unembed(this,t);for(var r=this.getEmbeddedCells(),o=0,a=r.length;o";if(i.parseFromString(r.replace(/@/g,""),"application/xml").getElementsByTagName("parsererror")[0])throw new Error("Invalid SVG markup");return e=i.parseFromString(r,"text/html").querySelector("svg"),n=[],Array.from(e.children).forEach(function(t){n.push(function n(t){var e={},i=t.tagName,r=t.attributes,o=t.namespaceURI,a=t.style,s=t.childNodes;e.namespaceURI=o,e.tagName=o===Dr.namespace.xhtml?i.toLowerCase():i;for(var l={},c=a.length;c--;){var u=a[c];l[u]=a.getPropertyValue(u)}e.style=l;var h=r.getNamedItem("@selector");h&&(e.selector=h.value,r.removeNamedItem("@selector"));var g=r.getNamedItem("@group-selector");if(g){var d=g.value.split(",");e.groupSelector=d.map(function(t){return t.trim()}),r.removeNamedItem("@group-selector")}var f=r.getNamedItem("class");f&&(e.className=f.value);var p=[];s.forEach(function(t){switch(t.nodeType){case Node.TEXT_NODE:var e=t.data.replace(/\s\s+/g," ");e.trim()&&p.push(e);break;case Node.ELEMENT_NODE:p.push(n(t))}}),p.length&&(e.children=p);var m={};return Array.from(r).forEach(function(t){var e=t.name,n=t.value;m[e]=n}),0','','','','','','',''].join(""),toolMarkup:['','','','',"Remove link.","",'','','',"Link options.","",""].join(""),doubleToolMarkup:void 0,vertexMarkup:['','','','',"Remove vertex.","",""].join(""),arrowheadMarkup:['','',""].join(""),defaultLabel:void 0,labelMarkup:void 0,_builtins:{defaultLabel:{markup:[{tagName:"rect",selector:"rect"},{tagName:"text",selector:"text"}],attrs:{text:{fill:"#000000",fontSize:14,textAnchor:"middle",yAlignment:"middle",pointerEvents:"none"},rect:{ref:"text",fill:"#ffffff",rx:3,ry:3,refWidth:1,refHeight:1,refX:0,refY:0}},position:{distance:.5}}},defaults:{type:"link",source:{},target:{}},isLink:function(){return!0},disconnect:function(t){return this.set({source:{x:0,y:0},target:{x:0,y:0}},t)},source:function(t,e,n){return void 0===t?Ts(this.get("source")):(r=t instanceof Kl?((i=Ts(e)||{}).id=t.id,n):Ps(t)?(i=t,e):((i=Ts(e)||{}).x=t.x,i.y=t.y,n),this.set("source",i,r));var i,r},target:function(t,e,n){return void 0===t?Ts(this.get("target")):(r=t instanceof Kl?((i=Ts(e)||{}).id=t.id,n):Ps(t)?(i=t,e):((i=Ts(e)||{}).x=t.x,i.y=t.y,n),this.set("target",i,r));var i,r},router:function(t,e,n){if(void 0===t){var i=this.get("router");return i?"object"==typeof i?Ts(i):i:this.get("manhattan")?{name:"orthogonal"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},a=r?e:n;return this.set("router",o,a)},connector:function(t,e,n){if(void 0===t){var i=this.get("connector");return i?"object"==typeof i?Ts(i):i:this.get("smooth")?{name:"smooth"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},a=r?e:n;return this.set("connector",o,a)},label:function(t,e,n){var i=this.labels();return(t=isFinite(t)&&null!==t?0|t:0)<0&&(t=i.length+t),arguments.length<=1?this.prop(["labels",t]):this.prop(["labels",t],e,n)},labels:function(t,e){return 0===arguments.length?(t=this.get("labels"),Array.isArray(t)?t.slice():[]):(Array.isArray(t)||(t=[]),this.set("labels",t,e))},hasLabels:function(){var t=this.attributes.labels;return Array.isArray(t)&&0 "+e),n=this.getSelector(t.parentNode,n)}return n},addLinkFromMagnet:function(t,e,n){var i=this.paper,r=i.model,o=i.getDefaultLink(this,t);return o.set({source:this.getLinkEnd(t,e,n,o,"source"),target:{x:e,y:n}}).addTo(r,{async:!1,ui:!0}),o.findView(i)},getLinkEnd:function(t){for(var e,n=[],i=arguments.length-1;0r.options.clickThreshold||this.notify("element:magnet:pointerclick",t,e,n,i)}},{Flags:jc});ms(Ec.prototype,Ic);var Bc={N:"S",S:"N",E:"W",W:"E"},Zc={N:-Math.PI/2*3,S:-Math.PI/2,E:0,W:Math.PI};function Rc(t,e,n){var i=new ci(t.x,e.y);return n.containsPoint(i)&&(i=new ci(e.x,t.y)),i}function Yc(t,e){return t["W"===e||"E"===e?"width":"height"]}function Wc(t,e){return t.x===e.x?t.y>e.y?"N":"S":t.y===e.y?t.x>e.x?"W":"E":null}function Uc(t){return new Ti(t.x,t.y,0,0)}function Fc(t){var e=Nl(t.padding||t.elementPadding||20);return{x:-e.left,y:-e.top,width:e.left+e.right,height:e.top+e.bottom}}function Vc(t,e){return t.sourceBBox.clone().moveAndExpand(Fc(e))}function Xc(t,e){return t.targetBBox.clone().moveAndExpand(Fc(e))}function _c(t,e,n){var i=new ci(t.x,e.y),r=new ci(e.x,t.y),o=Wc(t,i),a=Wc(t,r),s=Bc[n],l=o===n||o!==s&&(a===s||a!==n)?i:r;return{points:[l],direction:Wc(l,e)}}function Hc(t,e,n){var i=Rc(t,e,n);return{points:[i],direction:Wc(i,e)}}function Jc(e,t,n,i){var r,o={},a=[new ci(e.x,t.y),new ci(t.x,e.y)],s=a.filter(function(t){return!n.containsPoint(t)}),l=s.filter(function(t){return Wc(t,e)!==i});if(0c.center().distance(t),h=u?e:t,g=u?t:e;return a=Rc(o=r?(o=ci.fromPolar(c.width+c.height,Zc[r],h),c.pointNearestToPoint(o).move(o,-1)):c.pointNearestToPoint(h).move(h,1),g,c),o.round().equals(a.round())?(a=ci.fromPolar(c.width+c.height,Fn(o.theta(h))+Math.PI/2,g),s=Rc(o,a=c.pointNearestToPoint(a).move(g,1).round(),c),l.points=u?[a,s,o]:[o,s,a]):l.points=u?[a,o]:[o,a],l.direction=Wc(u?o:a,e),l}function qc(t,e,n){var i,r,o,a,s,l=Vc(n,e),c=Xc(n,e),u=(r=e,(i=n).sourceAnchor?i.sourceAnchor:Vc(i,r).center()),h=(a=e,(o=n).targetAnchor?o.targetAnchor:Xc(o,a).center());l=l.union(Uc(u)),c=c.union(Uc(h)),(t=zs(t).map(ci)).unshift(u),t.push(h);for(var g=[],d=0,f=t.length-1;di.maxAllowedDirectionChange)){var X=cu(B.clone().offset(S.gridOffsetX,S.gridOffsetY),A,l),_=uu(X);if(!C.isClose(_)&&!n(X)){if(0<=j.indexOf(_))if(!X.equals(d))if(au(V,ou(X,d,z,A,i))>i.maxAllowedDirectionChange)continue;var H=R+S.cost+(W?0:i.penalties[k]);(!C.isOpen(_)||He.point.y,s=e.point.x-t.point.x;n===Au.BOTTOM?(r=a?yu[n]:0<=s?Au.RIGHT:Au.LEFT,0e.point.x,c=e.point.y-t.point.y;n===Au.RIGHT?(r=l?yu[n]:0<=c?Au.BOTTOM:Au.TOP,0e[1].x?"right":"left";switch(i){case"left":o=new ci(-1,0);break;case"right":default:o=new ci(1,0)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case _u.VERTICAL:return function(t,e,n){var i,r,o,a=t.sourceBBox;if(t.sourceView)if(r=t.sourceView.model.angle(),n.rotate&&r){var s=t.sourceView.getNodeUnrotatedBBox(t.sourceView.el),l=e[0].clone();l.rotate(a.center(),r),i=s.sideNearestToPoint(l)}else i=a.sideNearestToPoint(e[0]);else i=a.y>e[1].y?"bottom":"top";switch(i){case"top":o=new ci(0,-1);break;case"bottom":default:o=new ci(0,1)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case _u.CLOSEST_POINT:return qu(t,e,i);case _u.OUTWARDS:return th(t,e,i);case _u.AUTO:default:return Qu(t,e,i)}}(r,h,a,l),d=h[0].distance(h[1])*l.coeff,f=ih(g,h[1].difference(h[0]).normalize());if(f>Math.PI/4){var p=d+(f-Math.PI/4)*l.angleTangentCoefficient;c=g.clone().scale(p,p)}else c=g.clone().scale(d,d)}if(l.targetTangent)u=l.targetTangent;else{var m=function(t,e,n,i){if(i.targetDirection)switch(i.targetDirection){case Hu.UP:return new ci(0,-1);case Hu.DOWN:return new ci(0,1);case Hu.LEFT:return new ci(-1,0);case Hu.RIGHT:return new ci(1,0);case Hu.AUTO:return Ku(t,e,i);case Hu.CLOSEST_POINT:return $u(t,e,i);case Hu.OUTWARDS:return eh(t,e,i);default:return i.targetDirection}switch(n){case _u.HORIZONTAL:return function(t,e,n){var i,r,o,a=t.targetBBox;if(t.targetView)if(r=t.targetView.model.angle(),n.rotate&&r){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),l=e[e.length-1].clone();l.rotate(a.center(),r),i=s.sideNearestToPoint(l)}else i=a.sideNearestToPoint(e[e.length-1]);else i=a.x>e[e.length-2].x?"left":"right";switch(i){case"left":o=new ci(-1,0);break;case"right":default:o=new ci(1,0)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case _u.VERTICAL:return function(t,e,n){var i,r,o,a=t.targetBBox;if(t.targetView)if(r=t.targetView.model.angle(),n.rotate&&r){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),l=e[e.length-1].clone();l.rotate(a.center(),r),i=s.sideNearestToPoint(l)}else i=a.sideNearestToPoint(e[e.length-1]);else i=a.y>e[e.length-2].y?"top":"bottom";switch(i){case"top":o=new ci(0,-1);break;case"bottom":default:o=new ci(0,1)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case _u.CLOSEST_POINT:return $u(t,e,i);case _u.OUTWARDS:return eh(t,e,i);case _u.AUTO:default:return Ku(t,e,i)}}(r,h,a,l),v=h.length-1,I=h[v-1].distance(h[v])*l.coeff,A=ih(m,h[v-1].difference(h[v]).normalize());if(A>Math.PI/4){var C=I+(A-Math.PI/4)*l.angleTangentCoefficient;u=m.clone().scale(C,C)}else u=m.clone().scale(I,I)}var y=function(t,e,n,i){for(var r=i.tau,o=i.coeff,a=[],s=[],l=[],c=t.length-1,u=0;u=Math.abs(t.y-e.y)){var c=(t.x+e.x)/2;l=Ri.createSegment("C",c,t.y,c,e.y,e.x,e.y),r.appendSegment(l)}else{var u=(t.y+e.y)/2;l=Ri.createSegment("C",t.x,u,e.x,u,e.x,e.y),r.appendSegment(l)}}return o?r:r.serialize()},curve:Ju},ah={TOOLS:Pc.Flags.TOOLS,RENDER:"RENDER",UPDATE:"UPDATE",LEGACY_TOOLS:"LEGACY_TOOLS",LABELS:"LABELS",VERTICES:"VERTICES",SOURCE:"SOURCE",TARGET:"TARGET",CONNECTOR:"CONNECTOR"},sh=Pc.extend({className:function(){var t=Pc.prototype.className.apply(this).split(" ");return t.push("link"),t.join(" ")},options:{shortLinkLength:105,doubleLinkTools:!1,longLinkLength:155,linkToolsOffset:40,doubleLinkToolsOffset:65,sampleInterval:50},_labelCache:null,_labelSelectors:null,_markerCache:null,_V:null,_dragData:null,metrics:null,decimalsRounding:2,initialize:function(){Pc.prototype.initialize.apply(this,arguments),this._labelCache={},this._labelSelectors={},this._markerCache={},this._V={},this.cleanNodesCache()},presentationAttributes:{markup:[ah.RENDER],attrs:[ah.UPDATE],router:[ah.UPDATE],connector:[ah.CONNECTOR],smooth:[ah.UPDATE],manhattan:[ah.UPDATE],toolMarkup:[ah.LEGACY_TOOLS],labels:[ah.LABELS],labelMarkup:[ah.LABELS],vertices:[ah.VERTICES,ah.UPDATE],vertexMarkup:[ah.VERTICES],source:[ah.SOURCE,ah.UPDATE],target:[ah.TARGET,ah.UPDATE]},initFlag:[ah.RENDER,ah.SOURCE,ah.TARGET,ah.TOOLS],UPDATE_PRIORITY:1,confirmUpdate:function(t,e){if(e||(e={}),this.hasFlag(t,ah.SOURCE)){if(!this.updateEndProperties("source"))return t;t=this.removeFlag(t,ah.SOURCE)}if(this.hasFlag(t,ah.TARGET)){if(!this.updateEndProperties("target"))return t;t=this.removeFlag(t,ah.TARGET)}var n=this.paper,i=this.sourceView,r=this.targetView;if(n&&(i&&!n.isViewMounted(i)||r&&!n.isViewMounted(r)))return t;if(this.hasFlag(t,ah.RENDER))return this.render(),this.updateHighlighters(!0),this.updateTools(e),t=this.removeFlag(t,[ah.RENDER,ah.UPDATE,ah.VERTICES,ah.LABELS,ah.TOOLS,ah.LEGACY_TOOLS,ah.CONNECTOR]);var o=!1;this.hasFlag(t,ah.VERTICES)&&(this.renderVertexMarkers(),t=this.removeFlag(t,ah.VERTICES));var a=this.model,s=a.attributes,l=this.hasFlag(t,ah.LABELS),c=this.hasFlag(t,ah.LEGACY_TOOLS);l&&(this.onLabelsChange(a,s.labels,e),t=this.removeFlag(t,ah.LABELS),o=!0),c&&(this.renderTools(),t=this.removeFlag(t,ah.LEGACY_TOOLS));var u=this.hasFlag(t,ah.UPDATE),h=this.hasFlag(t,ah.CONNECTOR);return(u||h)&&(u?e.translateBy&&a.isRelationshipEmbeddedIn(e.translateBy)?this.translate(e.tx,e.ty):this.update():(this.updatePath(),this.updateDOM()),this.updateTools(e),t=this.removeFlag(t,[ah.UPDATE,ah.TOOLS,ah.CONNECTOR]),o=!(c=l=!1)),l&&this.updateLabelPositions(),c&&this.updateToolsPosition(),o&&this.updateHighlighters(),this.hasFlag(t,ah.TOOLS)&&(this.updateTools(e),t=this.removeFlag(t,ah.TOOLS)),t},requestConnectionUpdate:function(t){this.requestUpdate(this.getFlag(ah.UPDATE),t)},isLabelsRenderRequired:function(t){void 0===t&&(t={});var e=this.model.previous("labels");if(!e)return!0;if("propertyPathArray"in t&&"propertyValue"in t){var n=t.propertyPathArray||[],i=n.length;if(1=this.options.longLinkLength){var r=this.options.doubleLinkToolsOffset||e;i=this.getPointAtLength(n-r),this._tool2Cache.attr("transform","translate("+i.x+", "+i.y+") "+t),this._tool2Cache.attr("display","inline")}else this.options.doubleLinkTools&&this._tool2Cache.attr("display","none")}return this},updateArrowheadMarkers:function(){if(!this._V.markerArrowheads)return this;if("none"===b.css(this._V.markerArrowheads.node,"display"))return this;var t=this.getConnectionLength()'}),Yh=Ec.extend({presentationAttributes:Ec.addPresentationAttributes({attrs:["SCALE"]}),confirmUpdate:function(){var t=Ec.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"SCALE")&&(this.resize(),t=this.removeFlag(t,"SCALE")),t}}),Wh=Zh.define("basic.Text",{attrs:{text:{"font-size":18,fill:"#000000"}}},{markup:''}),Uh=Zh.define("basic.Circle",{size:{width:60,height:60},attrs:{circle:{fill:"#ffffff",stroke:"#000000",r:30,cx:30,cy:30},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Fh=Zh.define("basic.Ellipse",{size:{width:60,height:40},attrs:{ellipse:{fill:"#ffffff",stroke:"#000000",rx:30,ry:20,cx:30,cy:20},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Vh=Zh.define("basic.Polygon",{size:{width:60,height:40},attrs:{polygon:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Xh=Zh.define("basic.Polyline",{size:{width:60,height:40},attrs:{polyline:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),_h=Zh.define("basic.Image",{attrs:{text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Hh=Zh.define("basic.Path",{size:{width:60,height:60},attrs:{path:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle",ref:"path","ref-x":.5,"ref-dy":10,fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Jh=Hh.define("basic.Rhombus",{attrs:{path:{d:"M 30 0 L 60 30 30 60 0 30 z"},text:{"ref-y":.5,"ref-dy":null,"y-alignment":"middle"}}}),Qh=Bh.test("svgforeignobject"),Kh=Zh.define("basic.TextBlock",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:80,height:100},text:{fill:"#000000","font-size":14,"font-family":"Arial, helvetica, sans-serif"},".content":{text:"","ref-x":.5,"ref-y":.5,"y-alignment":"middle","x-alignment":"middle"}},content:""},{markup:['','',Qh?'
':'',""].join(""),initialize:function(){this.listenTo(this,"change:size",this.updateSize),this.listenTo(this,"change:content",this.updateContent),this.updateSize(this,this.get("size")),this.updateContent(this,this.get("content")),Zh.prototype.initialize.apply(this,arguments)},updateSize:function(t,e){this.attr({".fobj":ms({},e),div:{style:ms({},e)}})},updateContent:function(t,e){Qh?this.attr({".content":{html:yl(e)}}):this.attr({".content":{text:e}})},setForeignObjectSize:function(){this.updateSize.apply(this,arguments)},setDivContent:function(){this.updateContent.apply(this,arguments)}}),qh=Ec.extend({presentationAttributes:Qh?Ec.prototype.presentationAttributes:Ec.addPresentationAttributes({content:["CONTENT"],size:["CONTENT"]}),initFlag:["RENDER","CONTENT"],confirmUpdate:function(){var t=Ec.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"CONTENT")&&(this.updateContent(this.model),t=this.removeFlag(t,"CONTENT")),t},update:function(t,e){var n=this.model;if(Qh)Ec.prototype.update.call(this,n,e);else{var i=Vs(e||n.get("attrs"),".content");Ec.prototype.update.call(this,n,i),e&&!Us(e,".content")||this.updateContent(n,e)}},updateContent:function(t,e){var n=Ks({},(e||t.get("attrs"))[".content"]);n=Vs(n,"text");var i=Cl(t.get("content"),t.get("size"),n,{svgDocument:this.paper.svg}),r=rl({},".content",n,"/");r[".content"].text=i,Ec.prototype.update.call(this,t,r)}}),$h={Generic:Zh,Rect:Rh,TextView:Yh,Text:Wh,Circle:Uh,Ellipse:Fh,Polygon:Vh,Polyline:Xh,Image:_h,Path:Hh,Rhombus:Jh,TextBlock:Kh,TextBlockView:qh},tg=Ac.define("standard.Rectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"text",selector:"label"}]}),eg=Ac.define("standard.Circle",{attrs:{body:{refCx:"50%",refCy:"50%",refR:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"circle",selector:"body"},{tagName:"text",selector:"label"}]}),ng=Ac.define("standard.Ellipse",{attrs:{body:{refCx:"50%",refCy:"50%",refRx:"50%",refRy:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"body"},{tagName:"text",selector:"label"}]}),ig=Ac.define("standard.Path",{attrs:{body:{refD:"M 0 0 L 10 0 10 10 0 10 Z",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"text",selector:"label"}]}),rg=Ac.define("standard.Polygon",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polygon",selector:"body"},{tagName:"text",selector:"label"}]}),og=Ac.define("standard.Polyline",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10 0 0",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polyline",selector:"body"},{tagName:"text",selector:"label"}]}),ag=Ac.define("standard.Image",{attrs:{image:{refWidth:"100%",refHeight:"100%"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),sg=Ac.define("standard.BorderedImage",{attrs:{border:{refWidth:"100%",refHeight:"100%",stroke:"#333333",strokeWidth:2},background:{refWidth:-1,refHeight:-1,x:.5,y:.5,fill:"#FFFFFF"},image:{refWidth:-1,refHeight:-1,x:.5,y:.5},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"background",attributes:{stroke:"none"}},{tagName:"image",selector:"image"},{tagName:"rect",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),lg=Ac.define("standard.EmbeddedImage",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#FFFFFF",strokeWidth:2},image:{refWidth:"30%",refHeight:-20,x:10,y:10,preserveAspectRatio:"xMidYMin"},label:{textVerticalAnchor:"top",textAnchor:"left",refX:"30%",refX2:20,refY:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),cg=Ac.define("standard.InscribedImage",{attrs:{border:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",stroke:"#333333",strokeWidth:2},background:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",fill:"#FFFFFF"},image:{refWidth:"68%",refHeight:"68%",refX:"16%",refY:"16%",preserveAspectRatio:"xMidYMid"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"background"},{tagName:"image",selector:"image"},{tagName:"ellipse",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),ug=Ac.define("standard.HeaderedRectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},header:{refWidth:"100%",height:30,strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},headerText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:15,fontSize:16,fill:"#333333"},bodyText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"rect",selector:"header"},{tagName:"text",selector:"headerText"},{tagName:"text",selector:"bodyText"}]}),hg=Ac.define("standard.Cylinder",{attrs:{body:{lateralArea:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},top:{refCx:"50%",cy:10,refRx:"50%",ry:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"100%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"ellipse",selector:"top"},{tagName:"text",selector:"label"}],topRy:function(t,e){if(void 0===t)return this.attr("body/lateralArea");var n={lateralArea:t},i=pl(t)?{refCy:t,refRy:t,cy:null,ry:null}:{refCy:null,refRy:null,cy:t,ry:t};return this.attr({body:n,top:i},e)}},{attributes:{lateralArea:{set:function(t,e){var n=pl(t);n&&(t=parseFloat(t)/100);var i=e.x,r=e.y,o=e.width,a=e.height,s=o/2,l=n?a*t:t,c=Dr.KAPPA,u=c*s,h=c*(n?a*t:t),g=i+o/2,d=i+o,f=r+l,p=f-l,m=r+a-l,v=r+a;return{d:["M",i,f,"L",i,m,"C",i,m+h,g-u,v,g,v,"C",g+u,v,d,m+h,d,m,"L",d,f,"C",d,f-h,g+u,p,g,p,"C",g-u,p,i,f-h,i,f,"Z"].join(" ")}}}}}),gg=Bh.test("svgforeignobject")?{tagName:"foreignObject",selector:"foreignObject",attributes:{overflow:"hidden"},children:[{tagName:"div",namespaceURI:"http://www.w3.org/1999/xhtml",selector:"label",style:{width:"100%",height:"100%",position:"static",backgroundColor:"transparent",textAlign:"center",margin:0,padding:"0px 5px",boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center"}}]}:{tagName:"text",selector:"label",attributes:{"text-anchor":"middle"}},dg={Rectangle:tg,Circle:eg,Ellipse:ng,Path:ig,Polygon:rg,Polyline:og,Image:ag,BorderedImage:sg,EmbeddedImage:lg,InscribedImage:cg,HeaderedRectangle:ug,Cylinder:hg,TextBlock:Ac.define("standard.TextBlock",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#ffffff",strokeWidth:2},foreignObject:{refWidth:"100%",refHeight:"100%"},label:{style:{fontSize:14}}}},{markup:[{tagName:"rect",selector:"body"},gg]},{attributes:{text:{set:function(t,e,n,i){if(!(n instanceof HTMLElement)){var r=i.style||{},o={text:t,width:-5,height:"100%"},a=ms({textVerticalAnchor:"middle"},r);return Ql.textWrap.set.call(this,o,e,n,a),{fill:r.color||null}}n.textContent=t},position:function(t,e,n){if(n instanceof SVGElement)return e.center()}}}}),Link:pc.define("standard.Link",{attrs:{line:{connection:!0,stroke:"#333333",strokeWidth:2,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 10 -5 0 0 10 5 z"}},wrapper:{connection:!0,strokeWidth:10,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"wrapper",attributes:{fill:"none",cursor:"pointer",stroke:"transparent","stroke-linecap":"round"}},{tagName:"path",selector:"line",attributes:{fill:"none","pointer-events":"none"}}]}),DoubleLink:pc.define("standard.DoubleLink",{attrs:{line:{connection:!0,stroke:"#DDDDDD",strokeWidth:4,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"#000000",d:"M 10 -3 10 -10 -2 0 10 10 10 3"}},outline:{connection:!0,stroke:"#000000",strokeWidth:6,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"outline",attributes:{fill:"none",cursor:"pointer"}},{tagName:"path",selector:"line",attributes:{fill:"none","pointer-events":"none"}}]}),ShadowLink:pc.define("standard.ShadowLink",{attrs:{line:{connection:!0,stroke:"#FF0000",strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"none",d:"M 0 -10 -10 0 0 10 z"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}},shadow:{connection:!0,refX:3,refY:6,stroke:"#000000",strokeOpacity:.2,strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 0 -10 -10 0 0 10 z",stroke:"none"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}}}},{markup:[{tagName:"path",selector:"shadow",attributes:{fill:"none","pointer-events":"none"}},{tagName:"path",selector:"line",attributes:{fill:"none",cursor:"pointer"}}]})},fg=Zh.define("devs.Model",{inPorts:[],outPorts:[],size:{width:80,height:80},attrs:{".":{magnet:!1},".label":{text:"Model","ref-x":.5,"ref-y":10,"font-size":18,"text-anchor":"middle",fill:"#000"},".body":{"ref-width":"100%","ref-height":"100%",stroke:"#000"}},ports:{groups:{in:{position:{name:"left"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"left",args:{y:10}}}},out:{position:{name:"right"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"right",args:{y:10}}}}}}},{markup:'',portMarkup:'',portLabelMarkup:'',initialize:function(){Zh.prototype.initialize.apply(this,arguments),this.on("change:inPorts change:outPorts",this.updatePortItems,this),this.updatePortItems()},updatePortItems:function(t,e,n){var i=Ms(this.get("inPorts")),r=Ys(Ms(this.get("outPorts")),i),o=this.createPortItems("in",i),a=this.createPortItems("out",r);this.prop("ports/items",o.concat(a),ms({rewrite:!0},n))},createPortItem:function(t,e){return{id:e,group:t,attrs:{".port-label":{text:e}}}},createPortItems:function(t,e){return zs(e).map(this.createPortItem.bind(this,t))},_addGroupPort:function(t,e,n){var i=this.get(e);return this.set(e,Array.isArray(i)?i.concat(t):[t],n)},addOutPort:function(t,e){return this._addGroupPort(t,"outPorts",e)},addInPort:function(t,e){return this._addGroupPort(t,"inPorts",e)},_removeGroupPort:function(t,e,n){return this.set(e,Rs(this.get(e),t),n)},removeOutPort:function(t,e){return this._removeGroupPort(t,"outPorts",e)},removeInPort:function(t,e){return this._removeGroupPort(t,"inPorts",e)},_changeGroup:function(t,e,n){return this.prop("ports/groups/"+t,ds(e)?e:{},n)},changeInGroup:function(t,e){return this._changeGroup("in",t,e)},changeOutGroup:function(t,e){return this._changeGroup("out",t,e)}}),pg=fg.define("devs.Atomic",{size:{width:80,height:80},attrs:{".label":{text:"Atomic"}}}),mg=fg.define("devs.Coupled",{size:{width:200,height:300},attrs:{".label":{text:"Coupled"}}}),vg={Model:fg,Atomic:pg,Coupled:mg,Link:pc.define("devs.Link",{attrs:{".connection":{"stroke-width":2}}})},Ig=Zh.define("logic.Gate",{size:{width:80,height:40},attrs:{".":{magnet:!1},".body":{width:100,height:50},circle:{r:7,stroke:"black",fill:"transparent","stroke-width":2}}},{operation:function(){return!0}}),Ag=Ig.define("logic.IO",{size:{width:60,height:30},attrs:{".body":{fill:"white",stroke:"black","stroke-width":2},".wire":{ref:".body","ref-y":.5,stroke:"black"},text:{fill:"black",ref:".body","ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle","font-weight":"bold","font-variant":"small-caps","text-transform":"capitalize","font-size":"14px"}}},{markup:''}),Cg=Ag.define("logic.Input",{attrs:{".wire":{"ref-dx":0,d:"M 0 0 L 23 0"},circle:{ref:".body","ref-dx":30,"ref-y":.5,magnet:!0,class:"output",port:"out"},text:{text:"input"}}}),yg=Ag.define("logic.Output",{attrs:{".wire":{"ref-x":0,d:"M 0 0 L -23 0"},circle:{ref:".body","ref-x":-30,"ref-y":.5,magnet:"passive",class:"input",port:"in"},text:{text:"output"}}}),wg=Ig.define("logic.Gate11",{attrs:{".input":{ref:".body","ref-x":-2,"ref-y":.5,magnet:"passive",port:"in"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:''}),bg=Ig.define("logic.Gate21",{attrs:{".input1":{ref:".body","ref-x":-2,"ref-y":.3,magnet:"passive",port:"in1"},".input2":{ref:".body","ref-x":-2,"ref-y":.7,magnet:"passive",port:"in2"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:''}),xg=wg.define("logic.Repeater",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzIuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t){return t}}),Ng=wg.define("logic.Not",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzkuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDI2NzEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzYiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA4MCwyNSBBIDQsNCAwIDEgMSA3MiwyNSBBIDQsNCAwIDEgMSA4MCwyNSB6IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEsMCkiIC8+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t){return!t}}),Mg=bg.define("logic.Or",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik9SIEFOU0kuc3ZnIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTAgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjcxNCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODA2IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODE5IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjM3Mi4wNDcyNCA6IDM1MC43ODczOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI3NDQuMDk0NDggOiA1MjYuMTgxMDkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzc3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49Ijc1IDogNDAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTUwIDogNjAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDYwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTMyNzUiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNTAgOiAzMy4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTAwIDogNTAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1MzMiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzIgOiAyMS4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNjQgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMzIgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjU1NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDE2LjY2NjY2NyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDI1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNCIKICAgICBpbmtzY2FwZTpjeD0iMTEzLjAwMDM5IgogICAgIGlua3NjYXBlOmN5PSIxMi44OTM3MzEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImcyNTYwIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTpncmlkLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1wb2ludHM9InRydWUiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAwMDAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMzk5IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijg3NCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMzciCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii00IgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gNzAsMjUgYyAyMCwwIDI1LDAgMjUsMCIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMSwxNSA1LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzIsMzUgNSwzNSIKICAgICAgIGlkPSJwYXRoMzk0NCIgLz4KICAgIDxnCiAgICAgICBpZD0iZzI1NjAiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2LjUsLTM5LjUpIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t,e){return t||e}}),Tg=bg.define("logic.And",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkFORCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI4IgogICAgIGlua3NjYXBlOmN4PSI1Ni42OTgzNDgiCiAgICAgaW5rc2NhcGU6Y3k9IjI1LjMyNjg5OSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZvbnQtc2l6ZTptZWRpdW07Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7ZGlyZWN0aW9uOmx0cjtibG9jay1wcm9ncmVzc2lvbjp0Yjt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGU7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkJpdHN0cmVhbSBWZXJhIFNhbnMiCiAgICAgICBkPSJNIDMwLDUgTCAzMCw2LjQyODU3MTQgTCAzMCw0My41NzE0MjkgTCAzMCw0NSBMIDMxLjQyODU3MSw0NSBMIDUwLjQ3NjE5LDQ1IEMgNjEuNzQ0MDk4LDQ1IDcwLjQ3NjE5LDM1Ljk5OTk1NSA3MC40NzYxOSwyNSBDIDcwLjQ3NjE5LDE0LjAwMDA0NSA2MS43NDQwOTksNS4wMDAwMDAyIDUwLjQ3NjE5LDUgQyA1MC40NzYxOSw1IDUwLjQ3NjE5LDUgMzEuNDI4NTcxLDUgTCAzMCw1IHogTSAzMi44NTcxNDMsNy44NTcxNDI5IEMgNDAuODM0MjY0LDcuODU3MTQyOSA0NS45MTgzNjgsNy44NTcxNDI5IDQ4LjA5NTIzOCw3Ljg1NzE0MjkgQyA0OS4yODU3MTQsNy44NTcxNDI5IDQ5Ljg4MDk1Miw3Ljg1NzE0MjkgNTAuMTc4NTcxLDcuODU3MTQyOSBDIDUwLjMyNzM4MSw3Ljg1NzE0MjkgNTAuNDA5MjI3LDcuODU3MTQyOSA1MC40NDY0MjksNy44NTcxNDI5IEMgNTAuNDY1MDI5LDcuODU3MTQyOSA1MC40NzE1NDMsNy44NTcxNDI5IDUwLjQ3NjE5LDcuODU3MTQyOSBDIDYwLjIzNjg1Myw3Ljg1NzE0MyA2Ny4xNDI4NTcsMTUuNDk3MDk4IDY3LjE0Mjg1NywyNSBDIDY3LjE0Mjg1NywzNC41MDI5MDIgNTkuNzYwNjYyLDQyLjE0Mjg1NyA1MCw0Mi4xNDI4NTcgTCAzMi44NTcxNDMsNDIuMTQyODU3IEwgMzIuODU3MTQzLDcuODU3MTQyOSB6IgogICAgICAgaWQ9InBhdGgyODg0IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NzY2NjY3Nzc3NzY2NjIiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return t&&e}}),Sg=bg.define("logic.Nor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjY3NzY0NCIKICAgICBpbmtzY2FwZTpjeT0iMjIuMTAyMzQ0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjM3IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItNCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc5LDI1IEMgOTksMjUgOTUsMjUgOTUsMjUiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBpZD0icGF0aDI2MDQiCiAgICAgICAgIHNvZGlwb2RpOmN4PSI3NSIKICAgICAgICAgc29kaXBvZGk6Y3k9IjI1IgogICAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgICAgc29kaXBvZGk6cnk9IjQiCiAgICAgICAgIGQ9Ik0gNzksMjUgQSA0LDQgMCAxIDEgNzEsMjUgQSA0LDQgMCAxIDEgNzksMjUgeiIKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI2LjUsMzkuNSkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return!(t||e)}}),kg=bg.define("logic.Nand",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5BTkQgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMTYiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjI4MzMwNyIKICAgICBpbmtzY2FwZTpjeT0iMTYuNDQyODQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzksMjUgQyA5MS44LDI1IDk1LDI1IDk1LDI1IgogICAgICAgaWQ9InBhdGgzMDU5IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMxLDE1IDUsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMiwzNSA1LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmb250LXNpemU6bWVkaXVtO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7dGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbjpub25lO2xpbmUtaGVpZ2h0Om5vcm1hbDtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2RpcmVjdGlvbjpsdHI7YmxvY2stcHJvZ3Jlc3Npb246dGI7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MzttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5OkJpdHN0cmVhbSBWZXJhIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpCaXRzdHJlYW0gVmVyYSBTYW5zIgogICAgICAgZD0iTSAzMCw1IEwgMzAsNi40Mjg1NzE0IEwgMzAsNDMuNTcxNDI5IEwgMzAsNDUgTCAzMS40Mjg1NzEsNDUgTCA1MC40NzYxOSw0NSBDIDYxLjc0NDA5OCw0NSA3MC40NzYxOSwzNS45OTk5NTUgNzAuNDc2MTksMjUgQyA3MC40NzYxOSwxNC4wMDAwNDUgNjEuNzQ0MDk5LDUuMDAwMDAwMiA1MC40NzYxOSw1IEMgNTAuNDc2MTksNSA1MC40NzYxOSw1IDMxLjQyODU3MSw1IEwgMzAsNSB6IE0gMzIuODU3MTQzLDcuODU3MTQyOSBDIDQwLjgzNDI2NCw3Ljg1NzE0MjkgNDUuOTE4MzY4LDcuODU3MTQyOSA0OC4wOTUyMzgsNy44NTcxNDI5IEMgNDkuMjg1NzE0LDcuODU3MTQyOSA0OS44ODA5NTIsNy44NTcxNDI5IDUwLjE3ODU3MSw3Ljg1NzE0MjkgQyA1MC4zMjczODEsNy44NTcxNDI5IDUwLjQwOTIyNyw3Ljg1NzE0MjkgNTAuNDQ2NDI5LDcuODU3MTQyOSBDIDUwLjQ2NTAyOSw3Ljg1NzE0MjkgNTAuNDcxNTQzLDcuODU3MTQyOSA1MC40NzYxOSw3Ljg1NzE0MjkgQyA2MC4yMzY4NTMsNy44NTcxNDMgNjcuMTQyODU3LDE1LjQ5NzA5OCA2Ny4xNDI4NTcsMjUgQyA2Ny4xNDI4NTcsMzQuNTAyOTAyIDU5Ljc2MDY2Miw0Mi4xNDI4NTcgNTAsNDIuMTQyODU3IEwgMzIuODU3MTQzLDQyLjE0Mjg1NyBMIDMyLjg1NzE0Myw3Ljg1NzE0MjkgeiIKICAgICAgIGlkPSJwYXRoMjg4NCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2Njc2NjY2Nzc3Nzc2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDQwMDgiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return!(t&&e)}}),Dg=bg.define("logic.Xor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhPUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjUuNjU2ODU0MiIKICAgICBpbmtzY2FwZTpjeD0iMjUuOTM4MTE2IgogICAgIGlua3NjYXBlOmN5PSIxNy4yMzAwNSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzAuMzg1NzE3LDE1IEwgNC45OTk5OTk4LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5NzY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEuMzYyMDkxLDM1IEwgNC45OTk5OTk4LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPGcKICAgICAgIGlkPSJnMjU2MCIKICAgICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjYuNSwtMzkuNSkiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDM1MTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi4yNSw4MS41MDAwMDUgQyAtMy44NDczNzQsODQuMTQ0NDA1IC00LjUsODQuNTAwMDA1IC00LjUsODQuNTAwMDA1IEwgLTguMTU2MjUsODQuNTAwMDA1IEwgLTYuMTU2MjUsODIuMDYyNTA1IEMgLTYuMTU2MjUsODIuMDYyNTA1IC0wLjUsNzUuMDYyNDUxIC0wLjUsNjQuNSBDIC0wLjUsNTMuOTM3NTQ5IC02LjE1NjI1LDQ2LjkzNzUgLTYuMTU2MjUsNDYuOTM3NSBMIC04LjE1NjI1LDQ0LjUgTCAtNC41LDQ0LjUgQyAtMy43MTg3NSw0NS40Mzc1IC0zLjA3ODEyNSw0Ni4xNTYyNSAtMi4yODEyNSw0Ny41IEMgLTAuNDA4NTMxLDUwLjU5OTgxNSAyLjUsNTYuNTI2NjQ2IDIuNSw2NC41IEMgMi41LDcyLjQ1MDY1IC0wLjM5NjY5Nyw3OC4zNzk0MjUgLTIuMjUsODEuNTAwMDA1IHoiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY3NjY2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return(!t||e)&&(t||!e)}}),Lg=bg.define("logic.Xnor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhOT1IgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNTU3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTYuNjY2NjY3IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDI1IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI0IgogICAgIGlua3NjYXBlOmN4PSI5NS43MjM2NiIKICAgICBpbmtzY2FwZTpjeT0iLTI2Ljc3NTAyMyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjAwMDAwMDI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc4LjMzMzMzMiwyNSBDIDkxLjY2NjY2NiwyNSA5NSwyNSA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMC4zODU3MTcsMTUgTCA0Ljk5OTk5OTgsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk3NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMS4zNjIwOTEsMzUgTCA0Ljk5OTk5OTgsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzUxNiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjI1LDgxLjUwMDAwNSBDIC0zLjg0NzM3NCw4NC4xNDQ0MDUgLTQuNSw4NC41MDAwMDUgLTQuNSw4NC41MDAwMDUgTCAtOC4xNTYyNSw4NC41MDAwMDUgTCAtNi4xNTYyNSw4Mi4wNjI1MDUgQyAtNi4xNTYyNSw4Mi4wNjI1MDUgLTAuNSw3NS4wNjI0NTEgLTAuNSw2NC41IEMgLTAuNSw1My45Mzc1NDkgLTYuMTU2MjUsNDYuOTM3NSAtNi4xNTYyNSw0Ni45Mzc1IEwgLTguMTU2MjUsNDQuNSBMIC00LjUsNDQuNSBDIC0zLjcxODc1LDQ1LjQzNzUgLTMuMDc4MTI1LDQ2LjE1NjI1IC0yLjI4MTI1LDQ3LjUgQyAtMC40MDg1MzEsNTAuNTk5ODE1IDIuNSw1Ni41MjY2NDYgMi41LDY0LjUgQyAyLjUsNzIuNDUwNjUgLTAuMzk2Njk3LDc4LjM3OTQyNSAtMi4yNSw4MS41MDAwMDUgeiIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2Njc2NjY2NzYyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDM1NTEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return(!t||!e)&&(t||e)}}),Pg={Gate:Ig,IO:Ag,Input:Cg,Output:yg,Gate11:wg,Gate21:bg,Repeater:xg,Not:Ng,Or:Mg,And:Tg,Nor:Sg,Nand:kg,Xor:Dg,Xnor:Lg,Wire:pc.define("logic.Wire",{attrs:{".connection":{"stroke-width":2},".marker-vertex":{r:7}},router:{name:"orthogonal"},connector:{name:"rounded",args:{radius:10}}},{arrowheadMarkup:['','',""].join(""),vertexMarkup:['','','','','',"Remove vertex.","","",""].join("")})},zg={KingWhite:Zh.define("chess.KingWhite",{size:{width:42,height:38}},{markup:' '}),KingBlack:Zh.define("chess.KingBlack",{size:{width:42,height:38}},{markup:' '}),QueenWhite:Zh.define("chess.QueenWhite",{size:{width:42,height:38}},{markup:' '}),QueenBlack:Zh.define("chess.QueenBlack",{size:{width:42,height:38}},{markup:' '}),RookWhite:Zh.define("chess.RookWhite",{size:{width:32,height:34}},{markup:' '}),RookBlack:Zh.define("chess.RookBlack",{size:{width:32,height:34}},{markup:' '}),BishopWhite:Zh.define("chess.BishopWhite",{size:{width:38,height:38}},{markup:' '}),BishopBlack:Zh.define("chess.BishopBlack",{size:{width:38,height:38}},{markup:' '}),KnightWhite:Zh.define("chess.KnightWhite",{size:{width:38,height:37}},{markup:' '}),KnightBlack:Zh.define("chess.KnightBlack",{size:{width:38,height:37}},{markup:' '}),PawnWhite:Zh.define("chess.PawnWhite",{size:{width:28,height:33}},{markup:''}),PawnBlack:Zh.define("chess.PawnBlack",{size:{width:28,height:33}},{markup:''})},jg=Ac.define("erd.Entity",{size:{width:150,height:60},attrs:{".outer":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"100,0 100,60 0,60 0,0"},".inner":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"95,5 95,55 5,55 5,5",display:"none"},text:{text:"Entity","font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Og=jg.define("erd.WeakEntity",{attrs:{".inner":{display:"auto"},text:{text:"Weak Entity"}}}),Gg=Ac.define("erd.Relationship",{size:{width:80,height:80},attrs:{".outer":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,0 80,40 40,80 0,40"},".inner":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,5 75,40 40,75 5,40",display:"none"},text:{text:"Relationship","font-family":"Arial","font-size":12,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Eg=Gg.define("erd.IdentifyingRelationship",{attrs:{".inner":{display:"auto"},text:{text:"Identifying"}}}),Bg=Ac.define("erd.Attribute",{size:{width:100,height:50},attrs:{ellipse:{transform:"translate(50, 25)"},".outer":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:50,ry:25,fill:"#E67E22"},".inner":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:45,ry:20,fill:"#E67E22",display:"none"},text:{"font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Zg=Bg.define("erd.Multivalued",{attrs:{".inner":{display:"block"},text:{text:"multivalued"}}}),Rg=Bg.define("erd.Derived",{attrs:{".outer":{"stroke-dasharray":"3,5"},text:{text:"derived"}}}),Yg=Bg.define("erd.Key",{attrs:{ellipse:{"stroke-width":4},text:{text:"key","font-weight":"800","text-decoration":"underline"}}}),Wg=Bg.define("erd.Normal",{attrs:{text:{text:"Normal"}}}),Ug={Entity:jg,WeakEntity:Og,Relationship:Gg,IdentifyingRelationship:Eg,Attribute:Bg,Multivalued:Zg,Derived:Rg,Key:Yg,Normal:Wg,ISA:Ac.define("erd.ISA",{type:"erd.ISA",size:{width:100,height:50},attrs:{polygon:{points:"0,0 50,50 100,0",fill:"#F1C40F",stroke:"#F39C12","stroke-width":2},text:{text:"ISA","font-size":18,"ref-x":.5,"ref-y":.3,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Line:pc.define("erd.Line",{},{cardinality:function(t){this.set("labels",[{position:-20,attrs:{text:{dy:-8,text:t}}}])}})},Fg={State:Uh.define("fsa.State",{attrs:{circle:{"stroke-width":3},text:{"font-weight":"800"}}}),StartState:Ac.define("fsa.StartState",{size:{width:20,height:20},attrs:{circle:{transform:"translate(10, 10)",r:10,fill:"#000000"}}},{markup:''}),EndState:Ac.define("fsa.EndState",{size:{width:20,height:20},attrs:{".outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#000000"},".inner":{transform:"translate(10, 10)",r:6,fill:"#000000"}}},{markup:''}),Arrow:pc.define("fsa.Arrow",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}},smooth:!0})},Vg={Member:Ac.define("org.Member",{size:{width:180,height:70},attrs:{rect:{width:170,height:60},".card":{fill:"#FFFFFF",stroke:"#000000","stroke-width":2,"pointer-events":"visiblePainted",rx:10,ry:10},image:{width:48,height:48,ref:".card","ref-x":10,"ref-y":5},".rank":{"text-decoration":"underline",ref:".card","ref-x":.9,"ref-y":.2,"font-family":"Courier New","font-size":14,"text-anchor":"end"},".name":{"font-weight":"800",ref:".card","ref-x":.9,"ref-y":.6,"font-family":"Courier New","font-size":14,"text-anchor":"end"}}},{markup:''}),Arrow:pc.define("org.Arrow",{source:{selector:".card"},target:{selector:".card"},attrs:{".connection":{stroke:"#585858","stroke-width":3}},z:-1})},Xg={Place:Zh.define("pn.Place",{size:{width:50,height:50},attrs:{".root":{r:25,fill:"#ffffff",stroke:"#000000",transform:"translate(25, 25)"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:".root",fill:"#000000","font-size":12},".tokens > circle":{fill:"#000000",r:5},".tokens.one > circle":{transform:"translate(25, 25)"},".tokens.two > circle:nth-child(1)":{transform:"translate(19, 25)"},".tokens.two > circle:nth-child(2)":{transform:"translate(31, 25)"},".tokens.three > circle:nth-child(1)":{transform:"translate(18, 29)"},".tokens.three > circle:nth-child(2)":{transform:"translate(25, 19)"},".tokens.three > circle:nth-child(3)":{transform:"translate(32, 29)"},".tokens.alot > text":{transform:"translate(25, 18)","text-anchor":"middle",fill:"#000000"}}},{markup:''}),PlaceView:Ec.extend({presentationAttributes:Ec.addPresentationAttributes({tokens:["TOKENS"]}),initFlag:Ec.prototype.initFlag.concat(["TOKENS"]),confirmUpdate:function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];var i=(t=Ec.prototype.confirmUpdate).call.apply(t,[this].concat(e));return this.hasFlag(i,"TOKENS")&&(this.renderTokens(),this.update(),i=this.removeFlag(i,"TOKENS")),i},renderTokens:function(){var e=this.vel.findOne(".tokens").empty();["one","two","three","alot"].forEach(function(t){e.removeClass(t)});var t=this.model.get("tokens");if(t)switch(t){case 1:e.addClass("one"),e.append(Dr("circle"));break;case 2:e.addClass("two"),e.append([Dr("circle"),Dr("circle")]);break;case 3:e.addClass("three"),e.append([Dr("circle"),Dr("circle"),Dr("circle")]);break;default:e.addClass("alot"),e.append(Dr("text").text(t+""))}}}),Transition:Zh.define("pn.Transition",{size:{width:12,height:50},attrs:{rect:{width:12,height:50,fill:"#000000",stroke:"#000000"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:"rect",fill:"#000000","font-size":12}}},{markup:''}),Link:pc.define("pn.Link",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}}})},_g=Zh.define("uml.Class",{attrs:{rect:{width:200},".uml-class-name-rect":{stroke:"black","stroke-width":2,fill:"#3498db"},".uml-class-attrs-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-methods-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-name-text":{ref:".uml-class-name-rect","ref-y":.5,"ref-x":.5,"text-anchor":"middle","y-alignment":"middle","font-weight":"bold",fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-attrs-text":{ref:".uml-class-attrs-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-methods-text":{ref:".uml-class-methods-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"}},name:[],attributes:[],methods:[]},{markup:['','','',"",'',""].join(""),initialize:function(){this.on("change:name change:attributes change:methods",function(){this.updateRectangles(),this.trigger("uml-update")},this),this.updateRectangles(),Zh.prototype.initialize.apply(this,arguments)},getClassName:function(){return this.get("name")},updateRectangles:function(){var i=this.get("attrs"),t=[{type:"name",text:this.getClassName()},{type:"attrs",text:this.get("attributes")},{type:"methods",text:this.get("methods")}],r=0;t.forEach(function(t){var e=Array.isArray(t.text)?t.text:[t.text],n=20*e.length+20;i[".uml-class-"+t.type+"-text"].text=e.join("\n"),i[".uml-class-"+t.type+"-rect"].height=n,i[".uml-class-"+t.type+"-rect"].transform="translate(0,"+r+")",r+=n})}}),Hg=Ec.extend({initialize:function(){Ec.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"uml-update",function(){this.update(),this.resize()})}}),Jg=_g.define("uml.Abstract",{attrs:{".uml-class-name-rect":{fill:"#e74c3c"},".uml-class-attrs-rect":{fill:"#c0392b"},".uml-class-methods-rect":{fill:"#c0392b"}}},{getClassName:function(){return["<>",this.get("name")]}}),Qg=Hg,Kg=_g.define("uml.Interface",{attrs:{".uml-class-name-rect":{fill:"#f1c40f"},".uml-class-attrs-rect":{fill:"#f39c12"},".uml-class-methods-rect":{fill:"#f39c12"}}},{getClassName:function(){return["<>",this.get("name")]}}),qg={basic:$h,standard:dg,devs:vg,logic:Pg,chess:zg,erd:Ug,fsa:Fg,org:Vg,pn:Xg,uml:{Class:_g,ClassView:Hg,Abstract:Jg,AbstractView:Qg,Interface:Kg,InterfaceView:Hg,Generalization:pc.define("uml.Generalization",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"}}}),Implementation:pc.define("uml.Implementation",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"},".connection":{"stroke-dasharray":"3,3"}}}),Aggregation:pc.define("uml.Aggregation",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"white"}}}),Composition:pc.define("uml.Composition",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"black"}}}),Association:pc.define("uml.Association"),State:Zh.define("uml.State",{attrs:{".uml-state-body":{width:200,height:200,rx:10,ry:10,fill:"#ecf0f1",stroke:"#bdc3c7","stroke-width":3},".uml-state-separator":{stroke:"#bdc3c7","stroke-width":2},".uml-state-name":{ref:".uml-state-body","ref-x":.5,"ref-y":5,"text-anchor":"middle",fill:"#000000","font-family":"Courier New","font-size":14},".uml-state-events":{ref:".uml-state-separator","ref-x":5,"ref-y":5,fill:"#000000","font-family":"Courier New","font-size":14}},name:"State",events:[]},{markup:['','','',"",'','','',""].join(""),initialize:function(){this.on({"change:name":this.updateName,"change:events":this.updateEvents,"change:size":this.updatePath},this),this.updateName(),this.updateEvents(),this.updatePath(),Zh.prototype.initialize.apply(this,arguments)},updateName:function(){this.attr(".uml-state-name/text",this.get("name"))},updateEvents:function(){this.attr(".uml-state-events/text",this.get("events").join("\n"))},updatePath:function(){var t="M 0 20 L "+this.get("size").width+" 20";this.attr(".uml-state-separator/d",t,{silent:!0})}}),StartState:Uh.define("uml.StartState",{type:"uml.StartState",attrs:{circle:{fill:"#34495e",stroke:"#2c3e50","stroke-width":2,rx:1}}}),EndState:Zh.define("uml.EndState",{size:{width:20,height:20},attrs:{"circle.outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#2c3e50"},"circle.inner":{transform:"translate(10, 10)",r:6,fill:"#34495e"}}},{markup:''}),Transition:pc.define("uml.Transition",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z",fill:"#34495e",stroke:"#2c3e50"},".connection":{stroke:"#2c3e50"}}})}};function $g(t,e){if(0===e)return"0%";return Math.round(t/e*100*1e3)/1e3+"%"}function td(r){return function(t,e,n,i){return(e.isNodeConnection(n)?nd:ed)(r,t,e,n,i)}}function ed(t,e,n,i,r){var o=n.model.angle(),a=n.getNodeUnrotatedBBox(i),s=n.model.getBBox().center();r.rotate(s,o);var l=r.x-a.x,c=r.y-a.y;return t&&(l=$g(l,a.width),c=$g(c,a.height)),e.anchor={name:"topLeft",args:{dx:l,dy:c,rotate:!0}},e}function nd(t,e,n,i,r){var o=n.getConnection();if(!o)return e;var a=o.closestPointLength(r);if(t){var s=o.length();e.anchor={name:"connectionRatio",args:{ratio:a/s}}}else e.anchor={name:"connectionLength",args:{length:a}};return e}var id=Ll,rd=td(!1),od=td(!0),ad={useDefaults:id,pinAbsolute:rd,pinRelative:od},sd=bc.extend({tagName:"circle",svgElement:!0,className:"marker-vertex",events:{mousedown:"onPointerDown",touchstart:"onPointerDown",dblclick:"onDoubleClick",dbltap:"onDoubleClick"},documentEvents:{mousemove:"onPointerMove",touchmove:"onPointerMove",mouseup:"onPointerUp",touchend:"onPointerUp",touchcancel:"onPointerUp"},attributes:{r:6,fill:"#33334F",stroke:"#FFFFFF","stroke-width":2,cursor:"move"},position:function(t,e){var n=this.vel,i=this.options.scale,r=Dr.createSVGMatrix().translate(t,e);i&&(r=r.scale(i)),n.transform(r,{absolute:!0})},onPointerDown:function(t){this.options.guard(t)||(t.stopPropagation(),t.preventDefault(),this.options.paper.undelegateEvents(),this.delegateDocumentEvents(null,t.data),this.trigger("will-change",this,t))},onPointerMove:function(t){this.trigger("changing",this,t)},onDoubleClick:function(t){this.trigger("remove",this,t)},onPointerUp:function(t){this.trigger("changed",this,t),this.undelegateDocumentEvents(),this.options.paper.delegateEvents()}}),ld=jh.extend({name:"vertices",options:{handleClass:sd,snapRadius:20,redundancyRemoval:!0,vertexAdding:!0,stopPropagation:!0,scale:null},children:[{tagName:"path",selector:"connection",className:"joint-vertices-path",attributes:{fill:"none",stroke:"transparent","stroke-width":10,cursor:"cell"}}],handles:null,events:{"mousedown .joint-vertices-path":"onPathPointerDown","touchstart .joint-vertices-path":"onPathPointerDown"},onRender:function(){return this.options.vertexAdding&&(this.renderChildren(),this.updatePath()),this.resetHandles(),this.renderHandles(),this},update:function(){return this.relatedView.model.vertices().length===this.handles.length?this.updateHandles():(this.resetHandles(),this.renderHandles()),this.options.vertexAdding&&this.updatePath(),this},resetHandles:function(){var t=this.handles;if(this.handles=[],this.stopListening(),Array.isArray(t))for(var e=0,n=t.length;e= this.x && p.x <= this.x + this.width && p.y >= this.y && p.y <= this.y + this.height; }, @@ -4000,7 +4003,10 @@ var joint = (function (exports, Backbone, $) { if (points.length < 3) { return this; } // we need at least 3 points // TODO: we may also accept startIndex and endIndex to specify where to start and end simplification - var threshold = opt.threshold || 0; // = max distance of middle point from chord to be simplified + + // Due to the nature of the algorithm, we do not use 0 as the default value for `threshold` + // because of the rounding errors that can occur when comparing distances. + var threshold = opt.threshold || 1e-10; // = max distance of middle point from chord to be simplified // start at the beginning of the polyline and go forward var currentIndex = 0; @@ -8909,15 +8915,19 @@ var joint = (function (exports, Backbone, $) { */ VPrototype.removeAttr = function(name) { - var qualifiedName = V.qualifyAttr(name); + var trueName = attributeNames[name]; + + var ref = V.qualifyAttr(trueName); + var ns = ref.ns; + var local = ref.local; var el = this.node; - if (qualifiedName.ns) { - if (el.hasAttributeNS(qualifiedName.ns, qualifiedName.local)) { - el.removeAttributeNS(qualifiedName.ns, qualifiedName.local); + if (ns) { + if (el.hasAttributeNS(ns, local)) { + el.removeAttributeNS(ns, local); } - } else if (el.hasAttribute(name)) { - el.removeAttribute(name); + } else if (el.hasAttribute(trueName)) { + el.removeAttribute(trueName); } return this; }; @@ -8938,7 +8948,7 @@ var joint = (function (exports, Backbone, $) { } if (V.isString(name) && V.isUndefined(value)) { - return this.node.getAttribute(name); + return this.node.getAttribute(attributeNames[name]); } if (typeof name === 'object') { @@ -9514,16 +9524,18 @@ var joint = (function (exports, Backbone, $) { return this; } - var qualifiedName = V.qualifyAttr(name); + var trueName = attributeNames[name]; - if (qualifiedName.ns) { + var ref = V.qualifyAttr(trueName); + var ns = ref.ns; + if (ns) { // Attribute names can be namespaced. E.g. `image` elements // have a `xlink:href` attribute to set the source of the image. - el.setAttributeNS(qualifiedName.ns, name, value); - } else if (name === 'id') { + el.setAttributeNS(ns, trueName, value); + } else if (trueName === 'id') { el.id = value; } else { - el.setAttribute(name, value); + el.setAttribute(trueName, value); } return this; @@ -9632,6 +9644,100 @@ var joint = (function (exports, Backbone, $) { return xml; }; + // Create an empty object which does not inherit any properties from `Object.prototype`. + // This is useful when we want to use an object as a dictionary without having to + // worry about inherited properties such as `toString`, `valueOf` etc. + var _attributeNames = Object.create(null); + + // List of attributes for which not to split camel case words. + // It contains known SVG attribute names and may be extended with user-defined attribute names. + [ + 'baseFrequency', + 'baseProfile', + 'clipPathUnits', + 'contentScriptType', + 'contentStyleType', + 'diffuseConstant', + 'edgeMode', + 'externalResourcesRequired', + 'filterRes', // deprecated + 'filterUnits', + 'gradientTransform', + 'gradientUnits', + 'kernelMatrix', + 'kernelUnitLength', + 'keyPoints', + 'lengthAdjust', + 'limitingConeAngle', + 'markerHeight', + 'markerUnits', + 'markerWidth', + 'maskContentUnits', + 'maskUnits', + 'numOctaves', + 'pathLength', + 'patternContentUnits', + 'patternTransform', + 'patternUnits', + 'pointsAtX', + 'pointsAtY', + 'pointsAtZ', + 'preserveAlpha', + 'preserveAspectRatio', + 'primitiveUnits', + 'refX', + 'refY', + 'requiredExtensions', + 'requiredFeatures', + 'specularConstant', + 'specularExponent', + 'spreadMethod', + 'startOffset', + 'stdDeviation', + 'stitchTiles', + 'surfaceScale', + 'systemLanguage', + 'tableValues', + 'targetX', + 'targetY', + 'textLength', + 'viewBox', + 'viewTarget', // deprecated + 'xChannelSelector', + 'yChannelSelector', + 'zoomAndPan' // deprecated + ].forEach(function (name) { return _attributeNames[name] = name; }); + + var attributeNames = new Proxy(_attributeNames, { + get: function get(cache, name) { + // The cache is a dictionary of attribute names. See `_attributeNames` above. + // If the attribute name is not in the cache, it means that it is not + // a camel-case attribute name. In that case, we need to convert + // the attribute name to dash-separated words. + if (!V.supportCamelCaseAttributes) { return name; } + if (name in cache) { + return cache[name]; + } + // Convert camel case to dash-separated words. + return (cache[name] = name.replace(/[A-Z]/g, '-$&').toLowerCase()); + } + }); + + // Note: The `attributeNames` and `supportCamelCaseAttributes` properties are not enumerable + // in this version to avoid breaking changes. They will be made enumerable in the next major version. + + // Dictionary of attribute names + Object.defineProperty(V, 'attributeNames', { + value: attributeNames, + writable: false, + }); + + // Should camel case attributes be supported? + Object.defineProperty(V, 'supportCamelCaseAttributes', { + value: false, + writable: true, + }); + /** * @param {string} name * @returns {{ns: string|null, local: string}} namespace and attribute name @@ -13848,7 +13954,9 @@ var joint = (function (exports, Backbone, $) { var preserveSpaces = opt.preserveSpaces; var space = ' '; - var separator = opt.separator || space; + var separator = (opt.separator || opt.separator === '') ? opt.separator : space; + // If separator is a RegExp, we use the space character to join words together again (not ideal) + var separatorChar = (typeof separator === 'string') ? separator : space; var eol = opt.eol || '\n'; var hyphen = opt.hyphen ? new RegExp(opt.hyphen) : /[^\w\d]/; var maxLineCount = opt.maxLineCount; @@ -13898,9 +14006,9 @@ var joint = (function (exports, Backbone, $) { var data = (void 0); if (preserveSpaces) { - data = lines[l] !== undefined ? lines[l] + space + word : word; + data = lines[l] !== undefined ? lines[l] + separatorChar + word : word; } else { - data = lines[l] ? lines[l] + space + word : word; + data = lines[l] ? lines[l] + separatorChar + word : word; } textNode.data = data; @@ -13911,7 +14019,7 @@ var joint = (function (exports, Backbone, $) { lines[l] = data; if (p || h) { - // We were partitioning. Put rest of the word onto next line + // We were partitioning. Put rest of the word onto next line full[l++] = true; // cancel partitioning and splitting by hyphens @@ -14040,12 +14148,11 @@ var joint = (function (exports, Backbone, $) { var lastLine = lines[lastL]; if (!lastLine && !isEol) { break; } var k = lastLine.length; - var lastLineWithOmission, lastChar, separatorChar; + var lastLineWithOmission, lastChar; do { lastChar = lastLine[k]; lastLineWithOmission = lastLine.substring(0, k); if (!lastChar) { - separatorChar = (typeof separator === 'string') ? separator : ' '; lastLineWithOmission += separatorChar; } else if (lastChar.match(separator)) { lastLineWithOmission += lastChar; @@ -15392,38 +15499,50 @@ var joint = (function (exports, Backbone, $) { var $node = $(node); var cacheName = 'joint-text'; var cache = $node.data(cacheName); - var textAttrs = pick(attrs, 'lineHeight', 'annotations', 'textPath', 'x', 'textVerticalAnchor', 'eol', 'displayEmpty'); + var lineHeight = attrs.lineHeight; + var annotations = attrs.annotations; + var textVerticalAnchor = attrs.textVerticalAnchor; + var eol = attrs.eol; + var displayEmpty = attrs.displayEmpty; + var textPath = attrs.textPath; // eval `x` if using calc() - var x = textAttrs.x; + var x = attrs.x; if (isCalcAttribute(x)) { - textAttrs.x = evalCalcAttribute(x, refBBox); + x = evalCalcAttribute(x, refBBox); } - - var fontSizeAttr = attrs['font-size'] || attrs['fontSize']; - if (isCalcAttribute(fontSizeAttr)) { - fontSizeAttr = evalCalcAttribute(fontSizeAttr, refBBox); + // eval `font-size` if using calc() + var fontSize = attrs['font-size'] || attrs['fontSize']; + if (isCalcAttribute(fontSize)) { + fontSize = evalCalcAttribute(fontSize, refBBox); } - var fontSize = textAttrs.fontSize = fontSizeAttr; - var textHash = JSON.stringify([text, textAttrs]); // Update the text only if there was a change in the string // or any of its attributes. + var textHash = JSON.stringify([text, lineHeight, annotations, textVerticalAnchor, eol, displayEmpty, textPath, x, fontSize]); if (cache === undefined || cache !== textHash) { // Chrome bug: - // Tspans positions defined as `em` are not updated + // positions defined as `em` are not updated // when container `font-size` change. if (fontSize) { node.setAttribute('font-size', fontSize); } // Text Along Path Selector - var textPath = textAttrs.textPath; if (isObject$1(textPath)) { var pathSelector = textPath.selector; if (typeof pathSelector === 'string') { - var pathNode = this.findBySelector(pathSelector)[0]; + var ref = this.findBySelector(pathSelector); + var pathNode = ref[0]; if (pathNode instanceof SVGPathElement) { - textAttrs.textPath = assign({ 'xlink:href': '#' + pathNode.id }, textPath); + textPath = assign({ 'xlink:href': '#' + pathNode.id }, textPath); } } } - V(node).text('' + text, textAttrs); + V(node).text('' + text, { + lineHeight: lineHeight, + annotations: annotations, + textPath: textPath, + x: x, + textVerticalAnchor: textVerticalAnchor, + eol: eol, + displayEmpty: displayEmpty + }); $node.data(cacheName, textHash); } } @@ -15484,6 +15603,7 @@ var joint = (function (exports, Backbone, $) { svgDocument: this.paper.svg, ellipsis: value.ellipsis, hyphen: value.hyphen, + separator: value.separator, maxLineCount: value.maxLineCount, preserveSpaces: value.preserveSpaces }); @@ -16409,7 +16529,16 @@ var joint = (function (exports, Backbone, $) { options.rewrite = false; } - return this.set(merge({}, this.attributes, props), options); + // Create a new object containing only the changed attributes. + var changedAttributes = {}; + for (var key in props) { + // Merging the values of changed attributes with the current ones. + var ref = merge({}, { changedValue: this.attributes[key] }, { changedValue: props[key] }); + var changedValue = ref.changedValue; + changedAttributes[key] = changedValue; + } + + return this.set(changedAttributes, options); }, // A convenient way to unset nested properties @@ -25020,74 +25149,45 @@ var joint = (function (exports, Backbone, $) { var DEFINED_DIRECTIONS = [Directions.LEFT, Directions.RIGHT, Directions.TOP, Directions.BOTTOM]; - function getDirectionForLinkConnection(linkOrigin, connectionPoint, linkView) { - var tangent = linkView.getTangentAtLength(linkView.getClosestPointLength(connectionPoint)); - var roundedAngle = Math.round(tangent.angle() / 90) * 90; - - switch (roundedAngle) { - case 0: - case 360: - return linkOrigin.y < connectionPoint.y ? Directions.TOP : Directions.BOTTOM; - case 90: - return linkOrigin.x < connectionPoint.x ? Directions.LEFT : Directions.RIGHT; - case 180: - return linkOrigin.y < connectionPoint.y ? Directions.TOP : Directions.BOTTOM; - case 270: - return linkOrigin.x < connectionPoint.x ? Directions.LEFT : Directions.RIGHT; - } - } + var OPPOSITE_DIRECTIONS = {}; + OPPOSITE_DIRECTIONS[Directions.LEFT] = Directions.RIGHT; + OPPOSITE_DIRECTIONS[Directions.RIGHT] = Directions.LEFT; + OPPOSITE_DIRECTIONS[Directions.TOP] = Directions.BOTTOM; + OPPOSITE_DIRECTIONS[Directions.BOTTOM] = Directions.TOP; - function rightAngleRouter(_vertices, opt, linkView) { - var margin = opt.margin || 20; - var sourceDirection = opt.sourceDirection; if ( sourceDirection === void 0 ) sourceDirection = Directions.AUTO; - var targetDirection = opt.targetDirection; if ( targetDirection === void 0 ) targetDirection = Directions.AUTO; - - var sourceView = linkView.sourceView; - var targetView = linkView.targetView; - - var isSourcePort = !!linkView.model.source().port; - var isTargetPort = !!linkView.model.target().port; + var VERTICAL_DIRECTIONS = [Directions.TOP, Directions.BOTTOM]; - if (sourceDirection === Directions.AUTO) { - sourceDirection = isSourcePort ? Directions.MAGNET_SIDE : Directions.ANCHOR_SIDE; - } - - if (targetDirection === Directions.AUTO) { - targetDirection = isTargetPort ? Directions.MAGNET_SIDE : Directions.ANCHOR_SIDE; - } - - var sourceBBox = linkView.sourceBBox; - var targetBBox = linkView.targetBBox; - var sourcePoint = linkView.sourceAnchor; - var targetPoint = linkView.targetAnchor; - var ref = sourceView && sourceView.model.isElement() ? Rect.fromRectUnion(sourceBBox, sourceView.model.getBBox()) : linkView.sourceAnchor; - var sx0 = ref.x; - var sy0 = ref.y; - var sourceWidth = ref.width; if ( sourceWidth === void 0 ) sourceWidth = 0; - var sourceHeight = ref.height; if ( sourceHeight === void 0 ) sourceHeight = 0; - - var ref$1 = targetView && targetView.model.isElement() ? Rect.fromRectUnion(targetBBox, targetView.model.getBBox()) : linkView.targetAnchor; - var tx0 = ref$1.x; - var ty0 = ref$1.y; - var targetWidth = ref$1.width; if ( targetWidth === void 0 ) targetWidth = 0; - var targetHeight = ref$1.height; if ( targetHeight === void 0 ) targetHeight = 0; + var ANGLE_DIRECTION_MAP = { + 0: Directions.RIGHT, + 180: Directions.LEFT, + 270: Directions.TOP, + 90: Directions.BOTTOM + }; - var tx1 = tx0 + targetWidth; - var ty1 = ty0 + targetHeight; - var sx1 = sx0 + sourceWidth; - var sy1 = sy0 + sourceHeight; + function getSegmentAngle(line) { + // TODO: the angle() method is general and therefore unnecessarily heavy for orthogonal links + return line.angle(); + } - // Key coordinates including the margin - var smx0 = sx0 - margin; - var smx1 = sx1 + margin; - var smy0 = sy0 - margin; - var smy1 = sy1 + margin; - var tmx0 = tx0 - margin; - var tmx1 = tx1 + margin; - var tmy0 = ty0 - margin; - var tmy1 = ty1 + margin; + function simplifyPoints(points) { + // TODO: use own more efficient implementation (filter points that do not change direction). + // To simplify segments that are almost aligned (start and end points differ by e.g. 0.5px), use a threshold of 1. + return new Polyline(points).simplify({ threshold: 1 }).points; + } - var sourceOutsidePoint = sourcePoint.clone(); + function resolveSides(source, target) { + var sourcePoint = source.point; + var sx0 = source.x0; + var sy0 = source.y0; + var sourceView = source.view; + var sourceBBox = source.bbox; + var sourceDirection = source.direction; + var targetPoint = target.point; + var tx0 = target.x0; + var ty0 = target.y0; + var targetView = target.view; + var targetBBox = target.bbox; + var targetDirection = target.direction; var sourceSide; @@ -25104,26 +25204,8 @@ var joint = (function (exports, Backbone, $) { sourceSide = sourceDirection; } - switch (sourceSide) { - case 'left': - sourceOutsidePoint.x = smx0; - break; - case 'right': - sourceOutsidePoint.x = smx1; - break; - case 'top': - sourceOutsidePoint.y = smy0; - break; - case 'bottom': - sourceOutsidePoint.y = smy1; - break; - } - var targetOutsidePoint = targetPoint.clone(); - - var targetSide; - if (!targetView) { var targetLinkAnchorBBox = new Rect(tx0, ty0, 0, 0); targetSide = DEFINED_DIRECTIONS.includes(targetDirection) ? targetDirection : targetLinkAnchorBBox.sideNearestToPoint(sourcePoint); @@ -25137,21 +25219,319 @@ var joint = (function (exports, Backbone, $) { targetSide = targetDirection; } - switch (targetSide) { + return [sourceSide, targetSide]; + } + + function resolveForTopSourceSide(source, target, nextInLine) { + var sx0 = source.x0; + var sy0 = source.y0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx0 = sx0 - margin; + var smx1 = sx1 + margin; + var smy0 = sy0 - margin; + + var ax = anchor.x; + var tx = target.x0; + var ty = target.y0; + + if (tx === ax && ty < sy0) { return Directions.BOTTOM; } + if (tx < ax && ty < smy0) { return Directions.RIGHT; } + if (tx > ax && ty < smy0) { return Directions.LEFT; } + if (tx < smx0 && ty >= sy0) { return Directions.TOP; } + if (tx > smx1 && ty >= sy0) { return Directions.TOP; } + if (tx >= smx0 && tx <= ax && ty > sy1) { + if (nextInLine.point.x < tx) { + return Directions.RIGHT; + } + + return Directions.LEFT; + } + if (tx <= smx1 && tx >= ax && ty > sy1) { + if (nextInLine.point.x < tx) { + return Directions.RIGHT; + } + + return Directions.LEFT; + } + + return Directions.TOP; + } + + function resolveForBottomSourceSide(source, target, nextInLine) { + var sx0 = source.x0; + var sy0 = source.y0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx0 = sx0 - margin; + var smx1 = sx1 + margin; + var smy1 = sy1 + margin; + + var ax = anchor.x; + var tx = target.x0; + var ty = target.y0; + + if (tx === ax && ty > sy1) { return Directions.TOP; } + if (tx < ax && ty > smy1) { return Directions.RIGHT; } + if (tx > ax && ty > smy1) { return Directions.LEFT; } + if (tx < smx0 && ty <= sy1) { return Directions.BOTTOM; } + if (tx > smx1 && ty <= sy1) { return Directions.BOTTOM; } + if (tx >= smx0 && tx <= ax && ty < sy0) { + if (nextInLine.point.x < tx) { + return Directions.RIGHT; + } + + return Directions.LEFT; + } + if (tx <= smx1 && tx >= ax && ty < sy0) { + if (nextInLine.point.x < tx) { + return Directions.RIGHT; + } + + return Directions.LEFT; + } + + return Directions.BOTTOM; + } + + function resolveForLeftSourceSide(source, target, nextInLine) { + var sy0 = source.y0; + var sx0 = source.x0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx0 = sx0 - margin; + var smy0 = sy0 - margin; + var smy1 = sy1 + margin; + + var ax = anchor.x; + var ay = anchor.y; + var tx = target.x0; + var ty = target.y0; + + if (tx < ax && ty === ay) { return Directions.RIGHT; } + if (tx <= smx0 && ty < ay) { return Directions.BOTTOM; } + if (tx <= smx0 && ty > ay) { return Directions.TOP; } + if (tx >= sx0 && ty <= smy0) { return Directions.LEFT; } + if (tx >= sx0 && ty >= smy1) { return Directions.LEFT; } + if (tx > sx1 && ty >= smy0 && ty <= ay) { + if (nextInLine.point.y < ty) { + return Directions.BOTTOM; + } + + return Directions.TOP; + } + if (tx > sx1 && ty <= smy1 && ty >= ay) { + if (nextInLine.point.y < ty) { + return Directions.BOTTOM; + } + + return Directions.TOP; + } + + return Directions.LEFT; + } + + function resolveForRightSourceSide(source, target, nextInLine) { + var sy0 = source.y0; + var sx0 = source.x0; + var width = source.width; + var height = source.height; + var anchor = source.point; + var margin = source.margin; + var sx1 = sx0 + width; + var sy1 = sy0 + height; + var smx1 = sx1 + margin; + var smy0 = sy0 - margin; + var smy1 = sy1 + margin; + + var ax = anchor.x; + var ay = anchor.y; + var tx = target.x0; + var ty = target.y0; + + if (tx > ax && ty === ay) { return Directions.LEFT; } + if (tx >= smx1 && ty < ay) { return Directions.BOTTOM; } + if (tx >= smx1 && ty > ay) { return Directions.TOP; } + if (tx <= sx1 && ty <= smy0) { return Directions.RIGHT; } + if (tx <= sx1 && ty >= smy1) { return Directions.RIGHT; } + if (tx < sx0 && ty >= smy0 && ty <= ay) { + if (nextInLine.point.y < ty) { + return Directions.BOTTOM; + } + + return Directions.TOP; + } + if (tx < sx0 && ty <= smy1 && ty >= ay) { + if (nextInLine.point.y < ty) { + return Directions.BOTTOM; + } + + return Directions.TOP; + } + + return Directions.RIGHT; + } + + function resolveInitialDirection(source, target, nextInLine) { + var ref = resolveSides(source, target); + var sourceSide = ref[0]; + + switch (sourceSide) { + case Directions.TOP: + return resolveForTopSourceSide(source, target, nextInLine); + case Directions.RIGHT: + return resolveForRightSourceSide(source, target, nextInLine); + case Directions.BOTTOM: + return resolveForBottomSourceSide(source, target, nextInLine); + case Directions.LEFT: + return resolveForLeftSourceSide(source, target, nextInLine); + } + } + + function getDirectionForLinkConnection(linkOrigin, connectionPoint, linkView) { + var tangent = linkView.getTangentAtLength(linkView.getClosestPointLength(connectionPoint)); + var roundedAngle = Math.round(getSegmentAngle(tangent) / 90) * 90; + + if (roundedAngle % 180 === 0 && linkOrigin.y === connectionPoint.y) { + return linkOrigin.x < connectionPoint.x ? Directions.LEFT : Directions.RIGHT; + } else if (linkOrigin.x === connectionPoint.x) { + return linkOrigin.y < connectionPoint.y ? Directions.TOP : Directions.BOTTOM; + } + + switch (roundedAngle) { + case 0: + case 180: + case 360: + return linkOrigin.y < connectionPoint.y ? Directions.TOP : Directions.BOTTOM; + case 90: + case 270: + return linkOrigin.x < connectionPoint.x ? Directions.LEFT : Directions.RIGHT; + } + } + + function pointDataFromAnchor(view, point, bbox, direction, isPort, fallBackAnchor, margin) { + if (direction === Directions.AUTO) { + direction = isPort ? Directions.MAGNET_SIDE : Directions.ANCHOR_SIDE; + } + + var isElement = view && view.model.isElement(); + + var ref = isElement ? Rect.fromRectUnion(bbox, view.model.getBBox()) : fallBackAnchor; + var x0 = ref.x; + var y0 = ref.y; + var width = ref.width; if ( width === void 0 ) width = 0; + var height = ref.height; if ( height === void 0 ) height = 0; + + return { + point: point, + x0: x0, + y0: y0, + view: view, + bbox: bbox, + width: width, + height: height, + direction: direction, + margin: isElement ? margin : 0 + }; + } + + function pointDataFromVertex(ref) { + var x = ref.x; + var y = ref.y; + + var point = new Point(x, y); + + return { + point: point, + x0: point.x, + y0: point.y, + view: null, + bbox: new Rect(x, y, 0, 0), + width: 0, + height: 0, + direction: null, + margin: 0 + }; + } + + function getOutsidePoint(side, pointData, margin) { + var outsidePoint = pointData.point.clone(); + + var x0 = pointData.x0; + var y0 = pointData.y0; + var width = pointData.width; + var height = pointData.height; + + switch (side) { case 'left': - targetOutsidePoint.x = tmx0; + outsidePoint.x = x0 - margin; break; case 'right': - targetOutsidePoint.x = tmx1; + outsidePoint.x = x0 + width + margin; break; case 'top': - targetOutsidePoint.y = tmy0; + outsidePoint.y = y0 - margin; break; case 'bottom': - targetOutsidePoint.y = tmy1; + outsidePoint.y = y0 + height + margin; break; } + return outsidePoint; + } + + function routeBetweenPoints(source, target) { + var sourcePoint = source.point; + var sx0 = source.x0; + var sy0 = source.y0; + var sourceView = source.view; + var sourceWidth = source.width; + var sourceHeight = source.height; + var sourceMargin = source.margin; + var targetPoint = target.point; + var tx0 = target.x0; + var ty0 = target.y0; + var targetWidth = target.width; + var targetHeight = target.height; + var targetMargin = target.margin; + + var tx1 = tx0 + targetWidth; + var ty1 = ty0 + targetHeight; + var sx1 = sx0 + sourceWidth; + var sy1 = sy0 + sourceHeight; + + var isSourceEl = sourceView && sourceView.model.isElement(); + + // Key coordinates including the margin + var smx0 = sx0 - sourceMargin; + var smx1 = sx1 + sourceMargin; + var smy0 = sy0 - sourceMargin; + var smy1 = sy1 + sourceMargin; + + var tmx0 = tx0 - targetMargin; + var tmx1 = tx1 + targetMargin; + var tmy0 = ty0 - targetMargin; + var tmy1 = ty1 + targetMargin; + + var ref = resolveSides(source, target); + var sourceSide = ref[0]; + var targetSide = ref[1]; + + var sourceOutsidePoint = getOutsidePoint(sourceSide, { point: sourcePoint, x0: sx0, y0: sy0, width: sourceWidth, height: sourceHeight }, sourceMargin); + var targetOutsidePoint = getOutsidePoint(targetSide, { point: targetPoint, x0: tx0, y0: ty0, width: targetWidth, height: targetHeight }, targetMargin); + var sox = sourceOutsidePoint.x; var soy = sourceOutsidePoint.y; var tox = targetOutsidePoint.x; @@ -25164,7 +25544,7 @@ var joint = (function (exports, Backbone, $) { var middleOfHorizontalSides = (scy < tcy ? (sy1 + ty0) : (ty1 + sy0)) / 2; if (sourceSide === 'left' && targetSide === 'right') { - if (smx0 <= tx1) { + if (smx0 <= tmx1) { var y = middleOfHorizontalSides; if (sx1 <= tx0) { if (ty1 >= smy0 && toy < soy) { @@ -25187,7 +25567,7 @@ var joint = (function (exports, Backbone, $) { { x: x, y: toy } ]; } else if (sourceSide === 'right' && targetSide === 'left') { - if (smx1 >= tx0) { + if (smx1 >= tmx0) { var y$1 = middleOfHorizontalSides; if (sox > tx1) { if (ty1 >= smy0 && toy < soy) { @@ -25236,7 +25616,7 @@ var joint = (function (exports, Backbone, $) { { x: tox, y: y$3 } ]; } else if (sourceSide === 'bottom' && targetSide === 'top') { - if (soy - margin > toy) { + if (soy - sourceMargin > toy) { var x$3 = middleOfVerticalSides; var y$4 = soy; @@ -25268,8 +25648,8 @@ var joint = (function (exports, Backbone, $) { if (toy < soy) { if (sox >= tmx1 || sox <= tmx0) { return [ - { x: sox, y: Math.min(soy,toy) }, - { x: tox, y: Math.min(soy,toy) } + { x: sox, y: Math.min(soy, toy) }, + { x: tox, y: Math.min(soy, toy) } ]; } else if (tox > sox) { x$4 = Math.min(sox, tmx0); @@ -25279,8 +25659,8 @@ var joint = (function (exports, Backbone, $) { } else { if (tox >= smx1 || tox <= smx0) { return [ - { x: sox, y: Math.min(soy,toy) }, - { x: tox, y: Math.min(soy,toy) } + { x: sox, y: Math.min(soy, toy) }, + { x: tox, y: Math.min(soy, toy) } ]; } else if (tox >= sox) { x$4 = Math.max(tox, smx1); @@ -25296,34 +25676,31 @@ var joint = (function (exports, Backbone, $) { { x: tox, y: y1 } ]; } else if (sourceSide === 'bottom' && targetSide === 'bottom') { - if (tx0 >= sox + margin || tx1 <= sox - margin) { - return [ - { x: sox, y: Math.max(soy, toy) }, - { x: tox, y: Math.max(soy, toy) } - ]; - } - var x$5; - var y1$1; - var y2$1; + var y1$1 = Math.max((sy0 + ty1) / 2, toy); + var y2$1 = Math.max((sy1 + ty0) / 2, soy); if (toy > soy) { - y1$1 = Math.max((sy1 + ty0) / 2, toy); - y2$1 = Math.max((sy1 + ty0) / 2, soy); - - if (tox > sox) { + if (sox >= tmx1 || sox <= tmx0) { + return [ + { x: sox, y: Math.max(soy, toy) }, + { x: tox, y: Math.max(soy, toy) } + ]; + } else if (tox > sox) { x$5 = Math.min(sox, tmx0); } else { x$5 = Math.max(sox, tmx1); } } else { - y1$1 = Math.max((sy0 + ty1) / 2, toy); - y2$1 = Math.max((sy0 + ty1) / 2, soy); - - if (tox > sox) { - x$5 = Math.min(tox, smx0); - } else { + if (tox >= smx1 || tox <= smx0) { + return [ + { x: sox, y: Math.max(soy, toy) }, + { x: tox, y: Math.max(soy, toy) } + ]; + } else if (tox >= sox) { x$5 = Math.max(tox, smx1); + } else { + x$5 = Math.min(tox, smx0); } } @@ -25386,8 +25763,9 @@ var joint = (function (exports, Backbone, $) { } else if (sourceSide === 'top' && targetSide === 'right') { if (soy > toy) { if (sox < tox) { - var y$8 = (sy0 + ty1) / 2; - if (y$8 > tcy && y$8 < tmy1 && sox < tmx0) { + var y$8 = middleOfHorizontalSides; + + if ((y$8 > tcy || !isSourceEl) && y$8 < tmy1 && sox < tx0) { y$8 = tmy0; } return [ @@ -25396,37 +25774,41 @@ var joint = (function (exports, Backbone, $) { { x: tox, y: toy } ]; } + return [{ x: sox, y: toy }]; } - var x$6 = (sx0 + tx1) / 2; + var x$6 = Math.max(middleOfVerticalSides, tmx1); - if (sox > tox && sy1 >= toy) { + if (tox < sox && toy > sy0 && toy < sy1) { return [ { x: sox, y: soy }, { x: x$6, y: soy }, - { x: x$6, y: toy }]; + { x: x$6, y: toy } + ]; } - if (x$6 > smx0 && soy < ty1) { - var y$9 = Math.min(sy0, ty0) - margin; - var x$7 = Math.max(sx1, tx1) + margin; + if ((x$6 > smx0 && toy > sy0) || tx0 > sx1) { + var y$9 = Math.min(sy0 - sourceMargin, ty0 - targetMargin); + var x$7 = Math.max(sx1 + sourceMargin, tx1 + targetMargin); return [ { x: sox, y: y$9 }, { x: x$7, y: y$9 }, { x: x$7, y: toy } ]; } + return [ { x: sox, y: soy }, - { x: x$6, y: soy }, - { x: x$6, y: toy } + { x: Math.max(x$6, tox), y: soy }, + { x: Math.max(x$6, tox), y: toy } ]; } else if (sourceSide === 'top' && targetSide === 'left') { if (soy > toy) { if (sox > tox) { - var y$10 = (sy0 + ty1) / 2; - if (y$10 > tcy && y$10 < tmy1 && sox > tmx1) { + var y$10 = middleOfHorizontalSides; + + if ((y$10 > tcy || !isSourceEl) && y$10 < tmy1 && sox > tx1) { y$10 = tmy0; } return [ @@ -25438,7 +25820,7 @@ var joint = (function (exports, Backbone, $) { return [{ x: sox, y: toy }]; } - var x$8 = (sx1 + tx0) / 2; + var x$8 = Math.min(tmx0, middleOfVerticalSides); if (sox < tox && sy1 >= toy) { return [ @@ -25448,8 +25830,8 @@ var joint = (function (exports, Backbone, $) { } if (x$8 < smx1 && soy < ty1) { - var y$11 = Math.min(sy0, ty0) - margin; - var x$9 = Math.min(sx0, tx0) - margin; + var y$11 = Math.min(smy0, tmy0); + var x$9 = Math.min(smx0, tmx0); return [ { x: sox, y: y$11 }, { x: x$9, y: y$11 }, @@ -25464,8 +25846,9 @@ var joint = (function (exports, Backbone, $) { } else if (sourceSide === 'bottom' && targetSide === 'right') { if (soy < toy) { if (sox < tox) { - var y$12 = (sy1 + ty0) / 2; - if (y$12 < tcy && y$12 > tmy0 && sox < tmx0) { + var y$12 = middleOfHorizontalSides; + + if ((y$12 < tcy || !isSourceEl) && y$12 > tmy0 && sox < tx0) { y$12 = tmy1; } return [ @@ -25477,8 +25860,8 @@ var joint = (function (exports, Backbone, $) { return [{ x: sox, y: toy }]; } else { if (sx0 < tox) { - var y$13 = Math.max(sy1, ty1) + margin; - var x$10 = Math.max(sx1, tx1) + margin; + var y$13 = Math.max(smy1, tmy1); + var x$10 = Math.max(smx1, tmx1); return [ { x: sox, y: y$13 }, { x: x$10, y: y$13 }, @@ -25497,8 +25880,9 @@ var joint = (function (exports, Backbone, $) { } else if (sourceSide === 'bottom' && targetSide === 'left') { if (soy < toy) { if (sox > tox) { - var y$14 = (sy1 + ty0) / 2; - if (y$14 < tcy && y$14 > tmy0 && sox > tmx1) { + var y$14 = middleOfHorizontalSides; + + if ((y$14 < tcy || !isSourceEl) && y$14 > tmy0 && sox > tx1) { y$14 = tmy1; } return [ @@ -25510,8 +25894,8 @@ var joint = (function (exports, Backbone, $) { return [{ x: sox, y: toy }]; } else { if (sx1 > tox) { - var y$15 = Math.max(sy1, ty1) + margin; - var x$12 = Math.min(sx0, tx0) - margin; + var y$15 = Math.max(smy1, tmy1); + var x$12 = Math.min(smx0, tmx0); return [ { x: sox, y: y$15 }, { x: x$12, y: y$15 }, @@ -25527,13 +25911,15 @@ var joint = (function (exports, Backbone, $) { { x: x$13, y: soy }, { x: x$13, y: toy } ]; - } else if (sourceSide === 'left' && targetSide === 'bottom') { - if (sox > tox && soy >= tmy1) { + } + else if (sourceSide === 'left' && targetSide === 'bottom') { + if (sox >= tox && soy >= tmy1) { return [{ x: tox, y: soy }]; } if (sox >= tx1 && soy < toy) { - var x$14 = (sx1 + tx0) / 2; + var x$14 = middleOfVerticalSides; + return [ { x: x$14, y: soy }, { x: x$14, y: toy }, @@ -25542,7 +25928,7 @@ var joint = (function (exports, Backbone, $) { } if (tox < sx1 && ty1 <= sy0) { - var y$16 = (sy0 + ty1) / 2; + var y$16 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -25552,7 +25938,7 @@ var joint = (function (exports, Backbone, $) { } var x$15 = Math.min(tmx0, sox); - var y$17 = Math.max(sy1, ty1) + margin; + var y$17 = Math.max(smy1, tmy1); return [ { x: x$15, y: soy }, @@ -25566,7 +25952,8 @@ var joint = (function (exports, Backbone, $) { if (sox >= tx1) { if (soy > toy) { - var x$16 = (sx0 + tx1) / 2; + var x$16 = middleOfVerticalSides; + return [ { x: x$16, y: soy }, { x: x$16, y: toy }, @@ -25576,7 +25963,7 @@ var joint = (function (exports, Backbone, $) { } if (tox <= sx1 && toy > soy) { - var y$18 = (ty0 + sy1) / 2; + var y$18 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -25584,8 +25971,8 @@ var joint = (function (exports, Backbone, $) { { x: tox, y: y$18 } ]; } - var x$17 = toy < soy ? Math.min(sx0, tx0) - margin : smx0; - var y$19 = Math.min(sy0, ty0) - margin; + var x$17 = toy < soy ? Math.min(smx0, tmx0) : smx0; + var y$19 = Math.min(smy0, tmy0); return [ { x: x$17, y: soy }, @@ -25594,12 +25981,13 @@ var joint = (function (exports, Backbone, $) { ]; } else if (sourceSide === 'right' && targetSide === 'top') { - if (sox < tox && soy < tmy0) { + if (sox <= tox && soy < tmy0) { return [{ x: tox, y: soy }]; } if (sx1 < tx0 && soy > toy) { - var x$18 = (sx1 + tx0) / 2; + var x$18 = middleOfVerticalSides; + return [ { x: x$18, y: soy }, { x: x$18, y: toy }, @@ -25608,7 +25996,7 @@ var joint = (function (exports, Backbone, $) { } if (tox < sox && ty0 > sy1) { - var y$20 = (sy1 + ty0) / 2; + var y$20 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -25617,20 +26005,22 @@ var joint = (function (exports, Backbone, $) { ]; } - var x$19 = Math.max(sx1, tx1) + margin; - var y$21 = Math.min(sy0, ty0) - margin; + var x$19 = Math.max(smx1, tmx1); + var y$21 = Math.min(smy0, tmy0); + return [ { x: x$19, y: soy }, { x: x$19, y: y$21 }, { x: tox, y: y$21 } ]; } else if (sourceSide === 'right' && targetSide === 'bottom') { - if (sox < tox && soy >= tmy1) { + if (sox <= tox && soy >= tmy1) { return [{ x: tox, y: soy }]; } - if (sox <= tx0 && soy < toy) { - var x$20 = (sx1 + tx0) / 2; + if (sox <= tmx0 && soy < toy) { + var x$20 = middleOfVerticalSides; + return [ { x: x$20, y: soy }, { x: x$20, y: toy }, @@ -25639,7 +26029,7 @@ var joint = (function (exports, Backbone, $) { } if (tox > sx0 && ty1 < sy0) { - var y$22 = (sy0 + ty1) / 2; + var y$22 = middleOfHorizontalSides; return [ { x: sox, y: soy }, @@ -25649,7 +26039,7 @@ var joint = (function (exports, Backbone, $) { } var x$21 = Math.max(tmx1, sox); - var y$23 = Math.max(sy1, ty1) + margin; + var y$23 = Math.max(smy1, tmy1); return [ { x: x$21, y: soy }, @@ -25659,6 +26049,209 @@ var joint = (function (exports, Backbone, $) { } } + function rightAngleRouter(vertices, opt, linkView) { + var sourceDirection = opt.sourceDirection; if ( sourceDirection === void 0 ) sourceDirection = Directions.AUTO; + var targetDirection = opt.targetDirection; if ( targetDirection === void 0 ) targetDirection = Directions.AUTO; + var margin = opt.margin || 20; + var useVertices = opt.useVertices || false; + + var isSourcePort = !!linkView.model.source().port; + var sourcePoint = pointDataFromAnchor(linkView.sourceView, linkView.sourceAnchor, linkView.sourceBBox, sourceDirection, isSourcePort, linkView.sourceAnchor, margin); + + var isTargetPort = !!linkView.model.target().port; + var targetPoint = pointDataFromAnchor(linkView.targetView, linkView.targetAnchor, linkView.targetBBox, targetDirection, isTargetPort, linkView.targetAnchor, margin); + + var resultVertices = []; + + if (!useVertices || vertices.length === 0) { + return simplifyPoints(routeBetweenPoints(sourcePoint, targetPoint)); + } + + var verticesData = vertices.map(function (v) { return pointDataFromVertex(v); }); + var firstVertex = verticesData[0]; + + if (sourcePoint.view && sourcePoint.view.model.isElement() && sourcePoint.view.model.getBBox().inflate(margin).containsPoint(firstVertex.point)) { + var ref = resolveSides(sourcePoint, firstVertex); + var fromDirection = ref[0]; + var toDirection = fromDirection; + var dummySource = pointDataFromVertex(sourcePoint.point); + // Points do not usually have margin. Here we create a point with a margin. + dummySource.margin = margin; + dummySource.direction = fromDirection; + firstVertex.direction = toDirection; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(dummySource, firstVertex).concat( [firstVertex.point] )); + } else { + // The first point responsible for the initial direction of the route + var next = verticesData[1] || targetPoint; + var direction = resolveInitialDirection(sourcePoint, firstVertex, next); + firstVertex.direction = direction; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(sourcePoint, firstVertex).concat( [firstVertex.point] )); + } + + for (var i = 0; i < verticesData.length - 1; i++) { + var from = verticesData[i]; + var to = verticesData[i + 1]; + + var segment = new Line(from.point, to.point); + var segmentAngle = getSegmentAngle(segment); + if (segmentAngle % 90 === 0) { + // Since the segment is horizontal or vertical, we can skip the routing and just connect them with a straight line + var toDirection$1 = ANGLE_DIRECTION_MAP[segmentAngle]; + var accessDirection = OPPOSITE_DIRECTIONS[toDirection$1]; + + if (toDirection$1 !== from.direction) { + resultVertices.push(from.point, to.point); + to.direction = accessDirection; + } else { + var angle = normalizeAngle(segmentAngle - 90); + + var dx = 0; + var dy = 0; + + if (angle === 90) { + dy = -margin; + } else if (angle === 180) { + dx = -margin; + } else if (angle === 270) { + dy = margin; + } else if (angle === 0) { + dx = margin; + } + + var p1 = { x: from.point.x + dx, y: from.point.y + dy }; + var p2 = { x: to.point.x + dx, y: to.point.y + dy }; + + var segment2 = new Line(to.point, p2); + to.direction = ANGLE_DIRECTION_MAP[getSegmentAngle(segment2)]; + + // Constructing a loop + resultVertices.push(from.point, p1, p2, to.point); + } + + continue; + } + + var ref$1 = resolveDirection(from, to); + var fromDirection$1 = ref$1[0]; + var toDirection$2 = ref$1[1]; + + from.direction = fromDirection$1; + to.direction = toDirection$2; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(from, to).concat( [to.point] )); + } + + var lastVertex = verticesData[verticesData.length - 1]; + + if (targetPoint.view && targetPoint.view.model.isElement()) { + if (targetPoint.view.model.getBBox().inflate(margin).containsPoint(lastVertex.point)) { + var ref$2 = resolveDirection(lastVertex, targetPoint); + var fromDirection$2 = ref$2[0]; + var dummyTarget = pointDataFromVertex(targetPoint.point); + var ref$3 = resolveSides(lastVertex, targetPoint); + var toDirection$3 = ref$3[1]; + // we are creating a point that has a margin + dummyTarget.margin = margin; + dummyTarget.direction = toDirection$3; + lastVertex.direction = fromDirection$2; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(lastVertex, dummyTarget)); + } else { + // the last point of `simplified` array is the last defined vertex + // grab the penultimate point and construct a line segment from it to the last vertex + // this will ensure that the last segment continues in a straight line + + var simplified = simplifyPoints(resultVertices); + var segment$1 = new Line(simplified[simplified.length - 2], lastVertex.point); + var definedDirection = ANGLE_DIRECTION_MAP[Math.round(getSegmentAngle(segment$1))]; + lastVertex.direction = definedDirection; + + var lastSegmentRoute = routeBetweenPoints(lastVertex, targetPoint); + var ref$4 = simplifyPoints(lastSegmentRoute.concat( [targetPoint.point])); + var p1$1 = ref$4[0]; + var p2$1 = ref$4[1]; + + var lastSegment = new Line(p1$1, p2$1); + var roundedLastSegmentAngle = Math.round(getSegmentAngle(lastSegment)); + var lastSegmentDirection = ANGLE_DIRECTION_MAP[roundedLastSegmentAngle]; + + if (lastSegmentDirection !== definedDirection && definedDirection === OPPOSITE_DIRECTIONS[lastSegmentDirection]) { + lastVertex.margin = margin; + lastSegmentRoute = routeBetweenPoints(lastVertex, targetPoint); + } + + resultVertices.push.apply(resultVertices, lastSegmentRoute); + } + } else { + // since the target is only a point we can apply the same logic as if we connected two verticesData + var ref$5 = resolveDirection(lastVertex, targetPoint); + var vertexDirection = ref$5[0]; + lastVertex.direction = vertexDirection; + + resultVertices.push.apply(resultVertices, routeBetweenPoints(lastVertex, targetPoint)); + } + + return simplifyPoints(resultVertices); + } + + function resolveDirection(from, to) { + var accessDirection = from.direction; + var isDirectionVertical = VERTICAL_DIRECTIONS.includes(accessDirection); + + var sourceDirection = from.direction; + var targetDirection = to.direction; + + if (isDirectionVertical) { + var isToAbove = from.point.y > to.point.y; + var dx = to.point.x - from.point.x; + + if (accessDirection === Directions.BOTTOM) { + // If isToAbove === false and we need figure out if to go left or right + sourceDirection = isToAbove ? OPPOSITE_DIRECTIONS[accessDirection] : dx >= 0 ? Directions.RIGHT : Directions.LEFT; + + if (dx > 0) { + targetDirection = isToAbove ? Directions.LEFT : Directions.TOP; + } else if (dx < 0) { + targetDirection = isToAbove ? Directions.RIGHT : Directions.TOP; + } + } else { + // If isToAbove === true and we need figure out if to go left or right + sourceDirection = isToAbove ? dx >= 0 ? Directions.RIGHT : Directions.LEFT : OPPOSITE_DIRECTIONS[accessDirection]; + + if (dx > 0) { + targetDirection = isToAbove ? Directions.BOTTOM : Directions.LEFT; + } else if (dx < 0) { + targetDirection = isToAbove ? Directions.BOTTOM : Directions.RIGHT; + } + } + } else { + var isToLeft = from.point.x > to.point.x; + var dy = to.point.y - from.point.y; + + if (accessDirection === Directions.RIGHT) { + sourceDirection = isToLeft ? OPPOSITE_DIRECTIONS[accessDirection] : dy >= 0 ? Directions.BOTTOM : Directions.TOP; + + if (dy > 0) { + targetDirection = isToLeft ? Directions.TOP : Directions.LEFT; + } else if (dy < 0) { + targetDirection = isToLeft ? Directions.BOTTOM : Directions.LEFT; + } + } else { + sourceDirection = isToLeft ? dy >= 0 ? Directions.BOTTOM : Directions.TOP : OPPOSITE_DIRECTIONS[accessDirection]; + + if (dy > 0) { + targetDirection = isToLeft ? Directions.RIGHT : Directions.TOP; + } else if (dy < 0) { + targetDirection = isToLeft ? Directions.RIGHT : Directions.BOTTOM; + } + } + } + + return [sourceDirection, targetDirection]; + } + rightAngleRouter.Directions = Directions; var rightAngle = rightAngleRouter; @@ -26739,7 +27332,7 @@ var joint = (function (exports, Backbone, $) { case TangentDirections.LEFT: return new Point(-1, 0); case TangentDirections.RIGHT: - return new Point(0, 1); + return new Point(1, 0); case TangentDirections.AUTO: return getAutoTargetDirection(linkView, route, options); case TangentDirections.CLOSEST_POINT: @@ -28032,11 +28625,11 @@ var joint = (function (exports, Backbone, $) { toolPosition = this.getPointAtLength(connectionLength - doubleLinkToolsOffset); this._tool2Cache.attr('transform', 'translate(' + toolPosition.x + ', ' + toolPosition.y + ') ' + scale); - this._tool2Cache.attr('visibility', 'visible'); + this._tool2Cache.attr('display', 'inline'); } else if (this.options.doubleLinkTools) { - this._tool2Cache.attr('visibility', 'hidden'); + this._tool2Cache.attr('display', 'none'); } } @@ -35358,13 +35951,15 @@ var joint = (function (exports, Backbone, $) { tagName: 'path', selector: 'outline', attributes: { - 'fill': 'none' + 'fill': 'none', + 'cursor': 'pointer' } }, { tagName: 'path', selector: 'line', attributes: { - 'fill': 'none' + 'fill': 'none', + 'pointer-events': 'none' } }] }); @@ -35412,13 +36007,15 @@ var joint = (function (exports, Backbone, $) { tagName: 'path', selector: 'shadow', attributes: { - 'fill': 'none' + 'fill': 'none', + 'pointer-events': 'none' } }, { tagName: 'path', selector: 'line', attributes: { - 'fill': 'none' + 'fill': 'none', + 'cursor': 'pointer' } }] }); @@ -37264,6 +37861,11 @@ var joint = (function (exports, Backbone, $) { this.resetAnchor('target', data.targetAnchorDef); } } + if (vertices.some(function (v) { return !v; })) { + // This can happen when the link is using a smart routing and the number of + // vertices is not the same as the number of route points. + throw new Error('Segments: incompatible router in use'); + } link.vertices(vertices, { ui: true, tool: this.cid }); this.updateHandle(handle, vertex, nextVertex, offset); if (!options.stopPropagation) { relatedView.notifyPointermove(normalizedEvent, coords.x, coords.y); } @@ -38347,7 +38949,7 @@ var joint = (function (exports, Backbone, $) { Control: Control }); - var version = "3.7.5"; + var version = "3.7.6"; var Vectorizer = V; var layout = { PortLabel: PortLabel, Port: Port }; diff --git a/dist/joint.nowrap.min.js b/dist/joint.nowrap.min.js index b5e74f6a4..f3c4a67cc 100644 --- a/dist/joint.nowrap.min.js +++ b/dist/joint.nowrap.min.js @@ -1,8 +1,8 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -var joint=function(t,c,b){"use strict";c=c&&c.hasOwnProperty("default")?c.default:c,b=b&&b.hasOwnProperty("default")?b.default:b;var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function i(t,e){return t(e={exports:{}},e.exports),e.exports}var n=function(t){return t&&t.Math==Math&&t},u=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof e&&e)||function(){return this}()||Function("return this")(),a=function(t){try{return!!t()}catch(t){return!0}},s=!a(function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}),r={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,l={f:o&&!r.call({1:2},1)?function(t){var e=o(this,t);return!!e&&e.enumerable}:r},C=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}},h={}.toString,g=function(t){return h.call(t).slice(8,-1)},d="".split,y=a(function(){return!Object("z").propertyIsEnumerable(0)})?function(t){return"String"==g(t)?d.call(t,""):Object(t)}:Object,f=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t},p=function(t){return y(f(t))},m=function(t){return"object"==typeof t?null!==t:"function"==typeof t},v=function(t,e){if(!m(t))return t;var i,n;if(e&&"function"==typeof(i=t.toString)&&!m(n=i.call(t)))return n;if("function"==typeof(i=t.valueOf)&&!m(n=i.call(t)))return n;if(!e&&"function"==typeof(i=t.toString)&&!m(n=i.call(t)))return n;throw TypeError("Can't convert object to primitive value")},I={}.hasOwnProperty,A=function(t,e){return I.call(t,e)},w=u.document,x=m(w)&&m(w.createElement),N=function(t){return x?w.createElement(t):{}},M=!s&&!a(function(){return 7!=Object.defineProperty(N("div"),"a",{get:function(){return 7}}).a}),S=Object.getOwnPropertyDescriptor,T={f:s?S:function(t,e){if(t=p(t),e=v(e,!0),M)try{return S(t,e)}catch(t){}if(A(t,e))return C(!l.f.call(t,e),t[e])}},k=function(t){if(!m(t))throw TypeError(String(t)+" is not an object");return t},D=Object.defineProperty,L={f:s?D:function(t,e,i){if(k(t),e=v(e,!0),k(i),M)try{return D(t,e,i)}catch(t){}if("get"in i||"set"in i)throw TypeError("Accessors not supported");return"value"in i&&(t[e]=i.value),t}},P=s?function(t,e,i){return L.f(t,e,C(1,i))}:function(t,e,i){return t[e]=i,t},z=function(e,i){try{P(u,e,i)}catch(t){u[e]=i}return i},j="__core-js_shared__",O=u[j]||z(j,{}),G=Function.toString;"function"!=typeof O.inspectSource&&(O.inspectSource=function(t){return G.call(t)});var E,Z,B,R=O.inspectSource,Y=u.WeakMap,W="function"==typeof Y&&/native code/.test(R(Y)),U=i(function(t){(t.exports=function(t,e){return O[t]||(O[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.8.3",mode:"global",copyright:"\xa9 2021 Denis Pushkarev (zloirock.ru)"})}),F=0,V=Math.random(),X=function(t){return"Symbol("+String(void 0===t?"":t)+")_"+(++F+V).toString(36)},_=U("keys"),H=function(t){return _[t]||(_[t]=X(t))},J={},Q=u.WeakMap;if(W){var K=O.state||(O.state=new Q),q=K.get,$=K.has,tt=K.set;E=function(t,e){return e.facade=t,tt.call(K,t,e),e},Z=function(t){return q.call(K,t)||{}},B=function(t){return $.call(K,t)}}else{var et=H("state");J[et]=!0,E=function(t,e){return e.facade=t,P(t,et,e),e},Z=function(t){return A(t,et)?t[et]:{}},B=function(t){return A(t,et)}}var it,nt={set:E,get:Z,has:B,enforce:function(t){return B(t)?Z(t):E(t,{})},getterFor:function(i){return function(t){var e;if(!m(t)||(e=Z(t)).type!==i)throw TypeError("Incompatible receiver, "+i+" required");return e}}},rt=i(function(t){var e=nt.get,l=nt.enforce,c=String(String).split("String");(t.exports=function(t,e,i,n){var r,o=!!n&&!!n.unsafe,a=!!n&&!!n.enumerable,s=!!n&&!!n.noTargetGet;"function"==typeof i&&("string"!=typeof e||A(i,"name")||P(i,"name",e),(r=l(i)).source||(r.source=c.join("string"==typeof e?e:""))),t!==u?(o?!s&&t[e]&&(a=!0):delete t[e],a?t[e]=i:P(t,e,i)):a?t[e]=i:z(e,i)})(Function.prototype,"toString",function(){return"function"==typeof this&&e(this).source||R(this)})}),ot=u,at=function(t){return"function"==typeof t?t:void 0},st=function(t,e){return arguments.length<2?at(ot[t])||at(u[t]):ot[t]&&ot[t][e]||u[t]&&u[t][e]},lt=Math.ceil,ct=Math.floor,ut=function(t){return isNaN(t=+t)?0:(0r;)A(n,i=e[r++])&&(~vt(o,i)||o.push(i));return o},At=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ct=At.concat("length","prototype"),yt={f:Object.getOwnPropertyNames||function(t){return It(t,Ct)}},wt={f:Object.getOwnPropertySymbols},bt=st("Reflect","ownKeys")||function(t){var e=yt.f(k(t)),i=wt.f;return i?e.concat(i(t)):e},xt=function(t,e){for(var i=bt(e),n=L.f,r=T.f,o=0;o"+t+""},Ht=function(){try{it=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;Ht=it?function(t){t.write(_t("")),t.close();var e=t.parentWindow.Object;return t=null,e}(it):((e=N("iframe")).style.display="none",Wt.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(_t("document.F=Object")),t.close(),t.F);for(var i=At.length;i--;)delete Ht[Ut][At[i]];return Ht()};J[Vt]=!0;var Jt=Object.create||function(t,e){var i;return null!==t?(Xt[Ut]=k(t),i=new Xt,Xt[Ut]=null,i[Vt]=t):i=Ht(),void 0===e?i:Yt(i,e)},Qt=Bt("unscopables"),Kt=Array.prototype;null==Kt[Qt]&&L.f(Kt,Qt,{configurable:!0,value:Jt(null)});var qt=function(t){Kt[Qt][t]=!0},$t=Object.defineProperty,te={},ee=function(t){throw t},ie=function(t,e){if(A(te,t))return te[t];e||(e={});var i=[][t],n=!!A(e,"ACCESSORS")&&e.ACCESSORS,r=A(e,0)?e[0]:ee,o=A(e,1)?e[1]:void 0;return te[t]=!!i&&!a(function(){if(n&&!s)return!0;var t={length:-1};n?$t(t,1,{enumerable:!0,get:ee}):t[1]=1,i.call(t,r,o)})},ne=mt.includes,re=ie("indexOf",{ACCESSORS:!0,1:0});zt({target:"Array",proto:!0,forced:!re},{includes:function(t){return ne(this,t,1=i.length?{value:void 0,done:!0}:(t=Ve(i,n),e.index+=t.length,{value:t,done:!1})});var Je=function(e,t,i,n){try{return n?t(k(i)[0],i[1]):t(i)}catch(t){throw function(t){var e=t.return;if(void 0!==e)k(e.call(t)).value}(e),t}},Qe=Bt("iterator"),Ke=Array.prototype,qe=function(t,e,i){var n=v(e);n in t?L.f(t,n,C(0,i)):t[n]=i},$e={};$e[Bt("toStringTag")]="z";var ti="[object z]"===String($e),ei=Bt("toStringTag"),ii="Arguments"==g(function(){return arguments}()),ni=ti?g:function(t){var e,i,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(i=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),ei))?i:ii?g(e):"Object"==(n=g(e))&&"function"==typeof e.callee?"Arguments":n},ri=Bt("iterator"),oi=Bt("iterator"),ai=!1;try{var si=0,li={next:function(){return{done:!!si++}},return:function(){ai=!0}};li[oi]=function(){return this},Array.from(li,function(){throw 2})}catch(t){}var ci=!function(t,e){if(!e&&!ai)return!1;var i=!1;try{var n={};n[oi]=function(){return{next:function(){return{done:i=!0}}}},t(n)}catch(t){}return i}(function(t){Array.from(t)});zt({target:"Array",stat:!0,forced:ci},{from:function(t){var e,i,n,r,o,a,s,l=le(t),c="function"==typeof this?this:Array,u=arguments.length,h=1>8-r%1*8)){if(255<(i=n.charCodeAt(r+=.75)))throw new l("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");e=e<<8|i}return a}),t.atob||(t.atob=function(t){var e=String(t).replace(/=+$/,"");if(e.length%4==1)throw new l("'atob' failed: The string to be decoded is not correctly encoded.");for(var i,n,r=0,o=0,a="";n=e.charAt(o++);~n&&(i=r%4?64*i+n:n,r++%4)?a+=String.fromCharCode(255&i>>(-2*r&6)):0)n=s.indexOf(n);return a})}()});zt({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});ot.Number.isNaN;var fi=u.isFinite,pi=Number.isFinite||function(t){return"number"==typeof t&&fi(t)};zt({target:"Number",stat:!0},{isFinite:pi});ot.Number.isFinite;var mi=Bt("match"),vi=function(t){if(m(e=t)&&(void 0!==(i=e[mi])?i:"RegExp"==g(e)))throw TypeError("The method doesn't accept regular expressions");var e,i;return t},Ii=Bt("match"),Ai=function(e){var i=/./;try{"/./"[e](i)}catch(t){try{return i[Ii]=!1,"/./"[e](i)}catch(t){}}return!1};zt({target:"String",proto:!0,forced:!Ai("includes")},{includes:function(t){return!!~String(f(this)).indexOf(vi(t),1n)&&!(new dn(t,i).length()>n)},divideAt:function(t){var e=this.pointAt(t);return[new dn(this.start,e),new dn(e,this.end)]},divideAtLength:function(t){var e=this.pointAtLength(t);return[new dn(this.start,e),new dn(e,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,e){if(t&&t.intersectionWithLine){var i=t.intersectionWithLine(this,e);return i&&t instanceof dn&&(i=i[0]),i}return null},intersectionWithLine:function(t){var e=new cn(this.end.x-this.start.x,this.end.y-this.start.y),i=new cn(t.end.x-t.start.x,t.end.y-t.start.y),n=e.x*i.y-e.y*i.x,r=new cn(t.start.x-this.start.x,t.start.y-this.start.y),o=r.x*i.y-r.y*i.x,a=r.x*e.y-r.y*e.x;if(0===n||o*n<0||a*n<0)return null;if(0s.x+o/2,h=ns.x?r-30:r+30)-c)/(a*a*(n-l))+l:e=a*a/(r-c)-a*a*(n-l)*((i=r>s.y?n+30:n-30)-l)/(o*o*(r-c))+c,new cn(i,e).theta(t)},toString:function(){return new cn(this.x,this.y).toString()+" "+this.a+" "+this.b}};var An=In,Cn=Math.abs,yn=Math.cos,wn=Math.sin,bn=Math.min,xn=Math.max,Nn=Math.round,Mn=Math.pow,Sn=function(t,e,i,n){if(!(this instanceof Sn))return new Sn(t,e,i,n);Object(t)===t&&(e=t.y,i=t.width,n=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===e?0:e,this.width=void 0===i?0:i,this.height=void 0===n?0:n};Sn.fromEllipse=function(t){return t=new In(t),new Sn(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},Sn.fromPointUnion=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if(0===t.length)return null;var i,n,r,o,a=new cn;i=n=1/0,r=o=-1/0;for(var s=0;s=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var e=new Sn(this).normalize(),i=new Sn(t).normalize(),n=e.width,r=e.height,o=i.width,a=i.height;if(!(n&&r&&o&&a))return!1;var s=e.x,l=e.y,c=i.x,u=i.y;return o+=c,n+=s,a+=u,r+=l,s<=c&&o<=n&&l<=u&&a<=r},corner:function(){return new cn(this.x+this.width,this.y+this.height)},equals:function(t){var e=new Sn(this).normalize(),i=new Sn(t).normalize();return e.x===i.x&&e.y===i.y&&e.width===i.width&&e.height===i.height},inflate:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.x-=t,this.y-=e,this.width+=2*t,this.height+=2*e,this},intersect:function(t){var e=this.origin(),i=this.corner(),n=t.origin(),r=t.corner();if(r.x<=e.x||r.y<=e.y||n.x>=i.x||n.y>=i.y)return null;var o=xn(e.x,n.x),a=xn(e.y,n.y);return new Sn(o,a,bn(i.x,r.x)-o,bn(i.y,r.y)-a)},intersectionWithLine:function(t){var e,i,n=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],r=[],o=[],a=n.length;for(i=0;iu&&(n=(this.x+this.width-u)/(d.x-u)),d.y>h&&(s=(this.y+this.height-h)/(d.y-h));var f=t.topRight();f.x>u&&(r=(this.x+this.width-u)/(f.x-u)),f.yh&&(c=(this.y+this.height-h)/(p.y-h)),{sx:bn(i,n,r,o),sy:bn(a,s,l,c)}},maxRectUniformScaleToFit:function(t,e){var i=this.maxRectScaleToFit(t,e);return bn(i.sx,i.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,e=this.y,i=this.width,n=this.height;return this.width<0&&(t=this.x+this.width,i=-this.width),this.height<0&&(e=this.y+this.height,n=-this.height),this.x=t,this.y=e,this.width=i,this.height=n,this},offset:function(t,e){return cn.prototype.offset.call(this,t,e)},origin:function(){return new cn(this.x,this.y)},pointNearestToPoint:function(t){if(t=new cn(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new cn(this.x+this.width,t.y);case"left":return new cn(this.x,t.y);case"bottom":return new cn(t.x,this.y+this.height);case"top":return new cn(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new dn(this.topRight(),this.bottomRight())},rightMiddle:function(){return new cn(this.x+this.width,this.y+this.height/2)},round:function(t){var e=1;if(t)switch(t){case 1:e=10;break;case 2:e=100;break;case 3:e=1e3;break;default:e=Mn(10,t)}return this.x=Nn(this.x*e)/e,this.y=Nn(this.y*e)/e,this.width=Nn(this.width*e)/e,this.height=Nn(this.height*e)/e,this},scale:function(t,e,i){return i=this.origin().scale(t,e,i),this.x=i.x,this.y=i.y,this.width*=t,this.height*=e,this},sideNearestToPoint:function(t){var e=(t=new cn(t)).x-this.x,i=this.x+this.width-t.x,n=t.y-this.y,r=e,o="left";return in.x&&(n=t[e]);var a=[];for(e=0;eg.y||r>h.y&&r<=g.y){var d=h.x-n>g.x-n?h.x-n:g.x-n;0<=d&&(u.x=n+d,u.y=r,c.start=t,c.end=u,l.intersect(c)&&s++)}o=a}return s%2==1},close:function(){var t=this.start,e=this.end,i=this.points;return t&&e&&!t.equals(e)&&i.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new Pn(Ln(this.points))},equals:function(t){if(!t)return!1;var e=this.points,i=t.points,n=e.length;if(i.length!==n)return!1;for(var r=0;rr+a&&n.x>r+a||i.xo+s&&n.y>o+s||i.ye.x&&t.ye.y}function ar(t,e){return yr(t,e,{interior:!1})}function sr(t,e){return wr(t,e,{interior:!1})}function lr(t,e){return br(t,e,{interior:!1})}function cr(t,e){return Nr(t,e,{interior:!1})}function ur(t,e){return yr(t,e,{interior:!0})}function hr(t,e){return wr(t,e,{interior:!0})}function gr(t,e){return br(t,e,{interior:!0})}function dr(t,e){return Nr(t,e,{interior:!0})}function fr(t,e){return Mr(t,e,{interior:!0})}function pr(t,i,n){return t.getSubpaths().some(function(t){var e=t.toPolylines(n)[0];return"Z"===t.getSegment(-1).type?ur(e,i):ar(e,i)})}function mr(t,i,n){return t.getSubpaths().some(function(t){var e=t.toPolylines(n)[0];return"Z"===t.getSegment(-1).type?hr(e,i):sr(e,i)})}function vr(t,e,i){return Ar(t,$n.fromRect(e),i)}function Ir(t,e,i){return xr(t,e,i,{interior:!1})}function Ar(t,e,i){return xr(t,e,i,{interior:!0})}function Cr(t,i,n,r){return t.getSubpaths().some(function(t){var e=t.toPolylines(n)[0];return"Z"===t.getSegment(-1).type?Ar(i,e,r):Ir(i,e,r)})}function yr(t,e,i){void 0===i&&(i={});var n,r=i.interior;if(void 0===r&&(r=!1),r){if(t.containsPoint(e.start))return!0;var o=t.start,a=t.end,s=t.points;n=a.equals(o)?s:s.concat([o])}else n=t.points;for(var l=n.length,c=new dn,u=0;u'+t+"";return G.parseXML(e,{async:!1}).documentElement}var i=document.createElementNS(O.svg,"svg");return i.setAttributeNS(O.xmlns,"xmlns:xlink",O.xlink),i.setAttribute("version","1.1"),i},G.createSVGStyle=function(t){return G("style",{type:"text/css"},[G.createCDATASection(t)]).node},G.createCDATASection=function(t){return void 0===t&&(t=""),document.implementation.createDocument(null,"xml",null).createCDATASection(t)},G.idCounter=0,G.uniqueId=function(){return"v-"+ ++G.idCounter},G.toNode=function(t){return G.isV(t)?t.node:t.nodeName&&t||t[0]},G.ensureId=function(t){return(t=G.toNode(t)).id||(t.id=G.uniqueId())},G.sanitizeText=function(t){return(t||"").replace(/ /g,"\xa0")},G.isUndefined=function(t){return void 0===t},G.isString=function(t){return"string"==typeof t},G.isObject=function(t){return t&&"object"==typeof t},G.isArray=Array.isArray,G.parseXML=function(t,e){var i;e=e||{};try{var n=new DOMParser;G.isUndefined(e.async)||(n.async=e.async),i=n.parseFromString(t,"text/xml")}catch(t){i=void 0}if(!i||i.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+t);return i},G.qualifyAttr=function(t){if(-1===t.indexOf(":"))return{ns:null,local:t};var e=t.split(":");return{ns:O[e[0]],local:e[1]}},G.transformSeparatorRegex=/[ ,]+/,G.transformRegex=/\b\w+\([^()]+\)/g,G.transformFunctionRegex=/\b(\w+)\(([^()]+)\)/,G.transformTranslateRegex=/\btranslate\(([^()]+)\)/,G.transformRotateRegex=/\brotate\(([^()]+)\)/,G.transformScaleRegex=/\bscale\(([^()]+)\)/,G.transformStringToMatrix=function(t){var e=G.createSVGMatrix(),i=t&&t.match(G.transformRegex);if(!i)return e;for(var n=i.length,r=0;r=t.start&&et.start&&i<=t.end||t.start>=e&&t.end=e?t.end+=i:t.start>=e&&(t.start+=i,t.end+=i)}),t},G.convertLineToPathData=function(t){return["M",(t=G(t)).attr("x1"),t.attr("y1"),"L",t.attr("x2"),t.attr("y2")].join(" ")},G.convertPolygonToPathData=function(t){var e=G.getPointsFromSvgNode(t);return 0===e.length?null:G.svgPointsToPath(e)+" Z"},G.convertPolylineToPathData=function(t){var e=G.getPointsFromSvgNode(t);return 0===e.length?null:G.svgPointsToPath(e)},G.svgPointsToPath=function(t){for(var e=0,i=t.length;e=o[r]&&(a.push([e].concat(n.splice(0,o[r]))),o[r]););}),a}(t)),!t||!t.length)return[["M",0,0]];for(var e,i=[],n=0,r=0,o=0,a=0,s=t.length,l=0;lg){var M=x,S=l,T=c;f=t(l=y+n*V(x=b+g*(s&&bf)L=f-1;else if(void 0!==o){if(void 0===v&&""!==c.data)if("auto"===i.lineHeight)v=Al({value:1.5,unit:"em"},l);else v=Al(ml(i.lineHeight,["em","px",""]),l);v*C.length>o&&(L=Math.floor(o/v)-1)}if(null!==L){C.splice(L+1);var P=n.ellipsis;if(!P||L<0)break;"string"!=typeof P&&(P="\u2026");var z=C[L];if(!z&&!N)break;var j,O,G=z.length;do{if(O=z[G],j=z.substring(0,G),O?O.match(h)&&(j+=O):j+="string"==typeof h?h:" ",j+=P,c.data=j,s.getComputedTextLength()<=r){C[L]=j;break}G--}while(0<=G);break}}}return n.svgDocument?a.removeChild(l):document.body.removeChild(a),C.join(g)},yl=function(t){var e=b(b.parseHTML("
"+t+"
",null,!1));return e.find("*").each(function(){var i=this;b.each(i.attributes,function(){var t=this.name,e=this.value;(t.startsWith("on")||e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&b(i).removeAttr(t)})}),e.html()},wl=function(t,e){if(window.navigator.msSaveBlob)window.navigator.msSaveBlob(t,e);else{var i=window.URL.createObjectURL(t),n=document.createElement("a");n.href=i,n.download=e,document.body.appendChild(n),n.click(),document.body.removeChild(n),window.URL.revokeObjectURL(i)}},bl=function(t){t=t.replace(/\s/g,"");var e,i=(t=decodeURIComponent(t)).indexOf(","),n=t.slice(0,i),r=n.split(":")[1].split(";")[0],o=t.slice(i+1);e=0<=n.indexOf("base64")?atob(o):unescape(encodeURIComponent(o));for(var a=new Uint8Array(e.length),s=0;s')({color:t.color||"blue",opacity:Number.isFinite(t.opacity)?t.opacity:1,outerRadius:e+i,innerRadius:e})},highlight:function(t){return Dl('')({color:t.color||"red",width:Number.isFinite(t.width)?t.width:1,blur:Number.isFinite(t.blur)?t.blur:0,opacity:Number.isFinite(t.opacity)?t.opacity:1})},blur:function(t){var e=Number.isFinite(t.x)?t.x:2;return Dl('')({stdDeviation:Number.isFinite(t.y)?[e,t.y]:e})},dropShadow:function(t){var e="SVGFEDropShadowElement"in window?'':'';return Dl(e)({dx:t.dx||0,dy:t.dy||0,opacity:Number.isFinite(t.opacity)?t.opacity:1,color:t.color||"black",blur:Number.isFinite(t.blur)?t.blur:4})},grayscale:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({a:.2126+.7874*(1-e),b:.7152-.7152*(1-e),c:.0722-.0722*(1-e),d:.2126-.2126*(1-e),e:.7152+.2848*(1-e),f:.0722-.0722*(1-e),g:.2126-.2126*(1-e),h:.0722+.9278*(1-e)})},sepia:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({a:.393+.607*(1-e),b:.769-.769*(1-e),c:.189-.189*(1-e),d:.349-.349*(1-e),e:.686+.314*(1-e),f:.168-.168*(1-e),g:.272-.272*(1-e),h:.534-.534*(1-e),i:.131+.869*(1-e)})},saturate:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:1-e})},hueRotate:function(t){return Dl('')({angle:t.angle||0})},invert:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:e,amount2:1-e})},brightness:function(t){return Dl('')({amount:Number.isFinite(t.amount)?t.amount:1})},contrast:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:e,amount2:.5-e/2})}},kl={number:function(t,e,o){o=o||{currency:["$",""],decimal:".",thousands:",",grouping:[3]};var i=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i.exec(t),n=i[1]||" ",r=i[2]||">",a=i[3]||"",s=i[4]||"",l=i[5],c=+i[6],u=i[7],h=i[8],g=i[9],d=1,f="",p="",m=!1;switch(h&&(h=+h.substring(1)),(l||"0"===n&&"="===r)&&(l=n="0",r="=",u&&(c-=Math.floor((c-1)/4))),g){case"n":u=!0,g="g";break;case"%":d=100,p="%",g="f";break;case"p":d=100,p="%",g="r";break;case"b":case"o":case"x":case"X":"#"===s&&(f="0"+g.toLowerCase());break;case"c":case"d":m=!0,h=0;break;case"s":d=-1,g="r"}"$"===s&&(f=o.currency[0],p=o.currency[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):"e"!=g&&"f"!=g||(h=Math.max(0,Math.min(20,h))));var v=l&&u;if(m&&e%1)return"";var I=e<0||0===e&&1/e<0?(e=-e,"-"):a,A=p;if(d<0){var C=this.prefix(e,h);e=C.scale(e),A=C.symbol+p}else e*=d;var y=(e=this.convert(g,e,h)).lastIndexOf("."),w=y<0?e:e.substring(0,y),b=y<0?"":o.decimal+e.substring(y+1);function x(t){for(var e=t.length,i=[],n=0,r=o.grouping[0];0"===r?M+I+e:"^"===r?M.substring(0,N>>=1)+I+e+M.substring(N):I+(v?e:M+e))+A},string:function(t,e){for(var i,n="{",r=!1,o=[];-1!==(i=t.indexOf(n));){var a,s,l;if(a=t.slice(0,i),r){l=(s=a.split(":")).shift().split("."),a=e;for(var c=0;c|\$\{ ?([^{} ]+) ?\}|\{\{([^{} ]+)\}\}/g;return function(n){return n=n||{},t.replace(e,function(t){for(var e=Array.from(arguments).slice(1,4).find(function(t){return!!t}).split("."),i=n[e.shift()];void 0!==i&&e.length;)i=i[e.shift()];return void 0!==i?i:""})}},Ll=function(){};function Pl(t){t=Ms(t);var a=zs(t).reduce(function(t,e){return t[e.id]=e.clone(),t},{});return zs(t).forEach(function(t){var e=a[t.id];if(e.isLink()){var i=e.source(),n=e.target();i.id&&a[i.id]&&e.prop("source/id",a[i.id].id),n.id&&a[n.id]&&e.prop("target/id",a[n.id].id)}var r=t.get("parent");r&&a[r]&&e.set("parent",a[r].id);var o=zs(t.get("embeds")).reduce(function(t,e){return a[e]&&t.push(a[e].id),t},[]);ks(o)||e.set("embeds",o)}),a}var zl=["checked","selected","disabled","readOnly","contentEditable","value","indeterminate"].reduce(function(t,e){return t[e]=!0,t},{}),jl={qualify:function(t){return Ps(t)},set:function(e,t,n){Object.keys(e).forEach(function(t){if(zl[t]&&t in n){var i=e[t];"SELECT"===n.tagName&&Array.isArray(i)?Array.from(n.options).forEach(function(t,e){t.selected=i.includes(t.value)}):n[t]=i}})}};function Ol(o,a){return function(t,e){var i=pl(t);t=parseFloat(t),i&&(t/=100);var n={};if(isFinite(t)){var r=i||0<=t&&t<=1?t*e[a]:Math.max(t+e[a],0);n[o]=r}return n}}function Gl(a,s,l){return function(t,e){var i,n=pl(t);if(t=parseFloat(t),n&&(t/=100),isFinite(t)){var r=e[l]();i=n||0e.width?_l:Hl)(t,e)})},refRCircumscribed:{set:function(t,e){var i=pl(t);t=parseFloat(t),i&&(t/=100);var n,r=Math.sqrt(e.height*e.height+e.width*e.width);return isFinite(t)&&(n=i||0<=t&&t<=1?t*r:Math.max(t+r,0)),{r:n}}},refCx:{set:Ol("cx","width")},refCy:{set:Ol("cy","height")},xAlignment:{offset:El("x","width","right")},yAlignment:{offset:El("y","height","bottom")},resetOffset:{offset:function(t,e){return t?{x:-e.x,y:-e.y}:{x:0,y:0}}},refDResetOffset:{set:Bl({resetOffset:!0})},refDKeepOffset:{set:Bl({resetOffset:!1})},refPointsResetOffset:{set:Rl({resetOffset:!0})},refPointsKeepOffset:{set:Rl({resetOffset:!1})},connection:{qualify:Fl,set:function(t){var e,i=t.stubs;if(void 0===i&&(i=0),isFinite(i)&&0!==i){var n;n=i<0?(this.getConnectionLength()+i)/2:i;var r=this.getConnection(),o=this.getConnectionSubdivisions(),a=r.divideAtLength(n,{segmentSubdivisions:o}),s=r.divideAtLength(-n,{segmentSubdivisions:o});a&&s&&(e=a[0].serialize()+" "+s[1].serialize())}return{d:e||this.getSerializedConnection()}}},atConnectionLengthKeepGradient:{qualify:Fl,set:Yl("getTangentAtLength",{rotate:!0})},atConnectionLengthIgnoreGradient:{qualify:Fl,set:Yl("getTangentAtLength",{rotate:!1})},atConnectionRatioKeepGradient:{qualify:Fl,set:Yl("getTangentAtRatio",{rotate:!0})},atConnectionRatioIgnoreGradient:{qualify:Fl,set:Yl("getTangentAtRatio",{rotate:!1})}};Jl["xlink:href"]=Jl.xlinkHref,["transform","d","points","cx","cy","x1","x2","y1","y2","x","y","dx","dy"].forEach(function(n){Jl[n]={qualify:zi,set:function(t,e){var i;return(i={})[n]=Gi(t,e),i}}}),["width","height","r","rx","ry","font-size","stroke-width"].forEach(function(n){Jl[n]={qualify:zi,set:function(t,e){var i;return(i={})[n]=Math.max(0,Gi(t,e)),i}}}),Jl.refR=Jl.refRInscribed,Jl.refD=Jl.refDResetOffset,Jl.refPoints=Jl.refPointsResetOffset,Jl.atConnectionLength=Jl.atConnectionLengthKeepGradient,Jl.atConnectionRatio=Jl.atConnectionRatioKeepGradient,Jl.fontSize=Jl["font-size"],Jl.strokeWidth=Jl["stroke-width"],Jl.refX2=Jl.refX,Jl.refY2=Jl.refY,Jl.refWidth2=Jl.refWidth,Jl.refHeight2=Jl.refHeight,Jl["ref-x"]=Jl.refX,Jl["ref-y"]=Jl.refY,Jl["ref-dy"]=Jl.refDy,Jl["ref-dx"]=Jl.refDx,Jl["ref-width"]=Jl.refWidth,Jl["ref-height"]=Jl.refHeight,Jl["x-alignment"]=Jl.xAlignment,Jl["y-alignment"]=Jl.yAlignment;var Ql=Jl,Kl=c.Model.extend({constructor:function(t,e){var i,n=t||{};"function"==typeof this.preinitialize&&this.preinitialize.apply(this,arguments),this.cid=Qs("c"),this.attributes={},e&&e.collection&&(this.collection=e.collection),e&&e.parse&&(n=this.parse(n,e)||{}),(i=Fs(this,"defaults"))&&(n=Ks({},i,n)),this.set(n,e),this.changed={},this.initialize.apply(this,arguments)},translate:function(t,e,i){throw new Error("Must define a translate() method.")},toJSON:function(){var e=Fs(this.constructor.prototype,"defaults").attrs||{},t=this.attributes.attrs,o={};_s(t,function(t,n){var r=e[n];_s(t,function(t,i){ds(t)&&!Array.isArray(t)?_s(t,function(t,e){r&&r[i]&&Ds(r[i][e],t)||(o[n]=o[n]||{},(o[n][i]||(o[n][i]={}))[e]=t)}):r&&Ds(r[i],t)||(o[n]=o[n]||{},o[n][i]=t)})});var i=Ts(Vs(this.attributes,"attrs"));return i.attrs=o,i},initialize:function(t){var e=this.getIdAttribute();t&&void 0!==t[e]||this.set(e,this.generateId(),{silent:!0}),this._transitionIds={},this._scheduledTransitionIds={},this.processPorts(),this.on("change:attrs",this.processPorts,this)},getIdAttribute:function(){return this.idAttribute||"id"},generateId:function(){return sl()},processPorts:function(){var t=this.ports,i={};_s(this.get("attrs"),function(t,e){t&&t.port&&(void 0!==t.port.id?i[t.port.id]=t.port:i[t.port]={id:t.port})});var n={};(_s(t,function(t,e){i[e]||(n[e]=!0)}),this.graph&&!ks(n))&&(this.graph.getConnectedLinks(this,{inbound:!0}).forEach(function(t){n[t.get("target").port]&&t.remove()}),this.graph.getConnectedLinks(this,{outbound:!0}).forEach(function(t){n[t.get("source").port]&&t.remove()}));this.ports=i},remove:function(t){void 0===t&&(t={});var e=this.graph,i=this.collection;if(!e)return i&&i.remove(this,t),this;e.startBatch("remove");var n=this.getParentCell();n&&n.unembed(this,t);for(var r=this.getEmbeddedCells(),o=0,a=r.length;o";if(n.parseFromString(r.replace(/@/g,""),"application/xml").getElementsByTagName("parsererror")[0])throw new Error("Invalid SVG markup");return e=n.parseFromString(r,"text/html").querySelector("svg"),i=[],Array.from(e.children).forEach(function(t){i.push(function i(t){var e={},n=t.tagName,r=t.attributes,o=t.namespaceURI,a=t.style,s=t.childNodes;e.namespaceURI=o,e.tagName=o===Dr.namespace.xhtml?n.toLowerCase():n;for(var l={},c=a.length;c--;){var u=a[c];l[u]=a.getPropertyValue(u)}e.style=l;var h=r.getNamedItem("@selector");h&&(e.selector=h.value,r.removeNamedItem("@selector"));var g=r.getNamedItem("@group-selector");if(g){var d=g.value.split(",");e.groupSelector=d.map(function(t){return t.trim()}),r.removeNamedItem("@group-selector")}var f=r.getNamedItem("class");f&&(e.className=f.value);var p=[];s.forEach(function(t){switch(t.nodeType){case Node.TEXT_NODE:var e=t.data.replace(/\s\s+/g," ");e.trim()&&p.push(e);break;case Node.ELEMENT_NODE:p.push(i(t))}}),p.length&&(e.children=p);var m={};return Array.from(r).forEach(function(t){var e=t.name,i=t.value;m[e]=i}),0','','','','','','',''].join(""),toolMarkup:['','','','',"Remove link.","",'','','',"Link options.","",""].join(""),doubleToolMarkup:void 0,vertexMarkup:['','','','',"Remove vertex.","",""].join(""),arrowheadMarkup:['','',""].join(""),defaultLabel:void 0,labelMarkup:void 0,_builtins:{defaultLabel:{markup:[{tagName:"rect",selector:"rect"},{tagName:"text",selector:"text"}],attrs:{text:{fill:"#000000",fontSize:14,textAnchor:"middle",yAlignment:"middle",pointerEvents:"none"},rect:{ref:"text",fill:"#ffffff",rx:3,ry:3,refWidth:1,refHeight:1,refX:0,refY:0}},position:{distance:.5}}},defaults:{type:"link",source:{},target:{}},isLink:function(){return!0},disconnect:function(t){return this.set({source:{x:0,y:0},target:{x:0,y:0}},t)},source:function(t,e,i){return void 0===t?Ss(this.get("source")):(r=t instanceof Kl?((n=Ss(e)||{}).id=t.id,i):Ps(t)?(n=t,e):((n=Ss(e)||{}).x=t.x,n.y=t.y,i),this.set("source",n,r));var n,r},target:function(t,e,i){return void 0===t?Ss(this.get("target")):(r=t instanceof Kl?((n=Ss(e)||{}).id=t.id,i):Ps(t)?(n=t,e):((n=Ss(e)||{}).x=t.x,n.y=t.y,i),this.set("target",n,r));var n,r},router:function(t,e,i){if(void 0===t){var n=this.get("router");return n?"object"==typeof n?Ss(n):n:this.get("manhattan")?{name:"orthogonal"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},a=r?e:i;return this.set("router",o,a)},connector:function(t,e,i){if(void 0===t){var n=this.get("connector");return n?"object"==typeof n?Ss(n):n:this.get("smooth")?{name:"smooth"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},a=r?e:i;return this.set("connector",o,a)},label:function(t,e,i){var n=this.labels();return(t=isFinite(t)&&null!==t?0|t:0)<0&&(t=n.length+t),arguments.length<=1?this.prop(["labels",t]):this.prop(["labels",t],e,i)},labels:function(t,e){return 0===arguments.length?(t=this.get("labels"),Array.isArray(t)?t.slice():[]):(Array.isArray(t)||(t=[]),this.set("labels",t,e))},hasLabels:function(){var t=this.attributes.labels;return Array.isArray(t)&&0 "+e),i=this.getSelector(t.parentNode,i)}return i},addLinkFromMagnet:function(t,e,i){var n=this.paper,r=n.model,o=n.getDefaultLink(this,t);return o.set({source:this.getLinkEnd(t,e,i,o,"source"),target:{x:e,y:i}}).addTo(r,{async:!1,ui:!0}),o.findView(n)},getLinkEnd:function(t){for(var e,i=[],n=arguments.length-1;0r.options.clickThreshold||this.notify("element:magnet:pointerclick",t,e,i,n)}},{Flags:jc});ms(Ec.prototype,Ic);var Zc={N:"S",S:"N",E:"W",W:"E"},Bc={N:-Math.PI/2*3,S:-Math.PI/2,E:0,W:Math.PI};function Rc(t,e,i){var n=new cn(t.x,e.y);return i.containsPoint(n)&&(n=new cn(e.x,t.y)),n}function Yc(t,e){return t["W"===e||"E"===e?"width":"height"]}function Wc(t,e){return t.x===e.x?t.y>e.y?"N":"S":t.y===e.y?t.x>e.x?"W":"E":null}function Uc(t){return new Sn(t.x,t.y,0,0)}function Fc(t){var e=Nl(t.padding||t.elementPadding||20);return{x:-e.left,y:-e.top,width:e.left+e.right,height:e.top+e.bottom}}function Vc(t,e){return t.sourceBBox.clone().moveAndExpand(Fc(e))}function Xc(t,e){return t.targetBBox.clone().moveAndExpand(Fc(e))}function _c(t,e,i){var n=new cn(t.x,e.y),r=new cn(e.x,t.y),o=Wc(t,n),a=Wc(t,r),s=Zc[i],l=o===i||o!==s&&(a===s||a!==i)?n:r;return{points:[l],direction:Wc(l,e)}}function Hc(t,e,i){var n=Rc(t,e,i);return{points:[n],direction:Wc(n,e)}}function Jc(e,t,i,n){var r,o={},a=[new cn(e.x,t.y),new cn(t.x,e.y)],s=a.filter(function(t){return!i.containsPoint(t)}),l=s.filter(function(t){return Wc(t,e)!==n});if(0c.center().distance(t),h=u?e:t,g=u?t:e;return a=Rc(o=r?(o=cn.fromPolar(c.width+c.height,Bc[r],h),c.pointNearestToPoint(o).move(o,-1)):c.pointNearestToPoint(h).move(h,1),g,c),o.round().equals(a.round())?(a=cn.fromPolar(c.width+c.height,Ui(o.theta(h))+Math.PI/2,g),s=Rc(o,a=c.pointNearestToPoint(a).move(g,1).round(),c),l.points=u?[a,s,o]:[o,s,a]):l.points=u?[a,o]:[o,a],l.direction=Wc(u?o:a,e),l}function qc(t,e,i){var n,r,o,a,s,l=Vc(i,e),c=Xc(i,e),u=(r=e,(n=i).sourceAnchor?n.sourceAnchor:Vc(n,r).center()),h=(a=e,(o=i).targetAnchor?o.targetAnchor:Xc(o,a).center());l=l.union(Uc(u)),c=c.union(Uc(h)),(t=zs(t).map(cn)).unshift(u),t.push(h);for(var g=[],d=0,f=t.length-1;dn.maxAllowedDirectionChange)){var X=cu(Z.clone().offset(T.gridOffsetX,T.gridOffsetY),A,l),_=uu(X);if(!C.isClose(_)&&!i(X)){if(0<=j.indexOf(_))if(!X.equals(d))if(au(V,ou(X,d,z,A,n))>n.maxAllowedDirectionChange)continue;var H=R+T.cost+(W?0:n.penalties[k]);(!C.isOpen(_)||He[1].x?"right":"left";switch(n){case"left":o=new cn(-1,0);break;case"right":default:o=new cn(1,0)}i.rotate&&r&&o.rotate(null,-r);return o}(t,e,n);case Ou.VERTICAL:return function(t,e,i){var n,r,o,a=t.sourceBBox;if(t.sourceView)if(r=t.sourceView.model.angle(),i.rotate&&r){var s=t.sourceView.getNodeUnrotatedBBox(t.sourceView.el),l=e[0].clone();l.rotate(a.center(),r),n=s.sideNearestToPoint(l)}else n=a.sideNearestToPoint(e[0]);else n=a.y>e[1].y?"bottom":"top";switch(n){case"top":o=new cn(0,-1);break;case"bottom":default:o=new cn(0,1)}i.rotate&&r&&o.rotate(null,-r);return o}(t,e,n);case Ou.CLOSEST_POINT:return Ru(t,e,n);case Ou.OUTWARDS:return Wu(t,e,n);case Ou.AUTO:default:return Zu(t,e,n)}}(r,h,a,l),d=h[0].distance(h[1])*l.coeff,f=Vu(g,h[1].difference(h[0]).normalize());if(f>Math.PI/4){var p=d+(f-Math.PI/4)*l.angleTangentCoefficient;c=g.clone().scale(p,p)}else c=g.clone().scale(d,d)}if(l.targetTangent)u=l.targetTangent;else{var m=function(t,e,i,n){if(n.targetDirection)switch(n.targetDirection){case Gu.UP:return new cn(0,-1);case Gu.DOWN:return new cn(0,1);case Gu.LEFT:return new cn(-1,0);case Gu.RIGHT:return new cn(0,1);case Gu.AUTO:return Bu(t,e,n);case Gu.CLOSEST_POINT:return Yu(t,e,n);case Gu.OUTWARDS:return Uu(t,e,n);default:return n.targetDirection}switch(i){case Ou.HORIZONTAL:return function(t,e,i){var n,r,o,a=t.targetBBox;if(t.targetView)if(r=t.targetView.model.angle(),i.rotate&&r){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),l=e[e.length-1].clone();l.rotate(a.center(),r),n=s.sideNearestToPoint(l)}else n=a.sideNearestToPoint(e[e.length-1]);else n=a.x>e[e.length-2].x?"left":"right";switch(n){case"left":o=new cn(-1,0);break;case"right":default:o=new cn(1,0)}i.rotate&&r&&o.rotate(null,-r);return o}(t,e,n);case Ou.VERTICAL:return function(t,e,i){var n,r,o,a=t.targetBBox;if(t.targetView)if(r=t.targetView.model.angle(),i.rotate&&r){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),l=e[e.length-1].clone();l.rotate(a.center(),r),n=s.sideNearestToPoint(l)}else n=a.sideNearestToPoint(e[e.length-1]);else n=a.y>e[e.length-2].y?"top":"bottom";switch(n){case"top":o=new cn(0,-1);break;case"bottom":default:o=new cn(0,1)}i.rotate&&r&&o.rotate(null,-r);return o}(t,e,n);case Ou.CLOSEST_POINT:return Yu(t,e,n);case Ou.OUTWARDS:return Uu(t,e,n);case Ou.AUTO:default:return Bu(t,e,n)}}(r,h,a,l),v=h.length-1,I=h[v-1].distance(h[v])*l.coeff,A=Vu(m,h[v-1].difference(h[v]).normalize());if(A>Math.PI/4){var C=I+(A-Math.PI/4)*l.angleTangentCoefficient;u=m.clone().scale(C,C)}else u=m.clone().scale(I,I)}var y=function(t,e,i,n){for(var r=n.tau,o=n.coeff,a=[],s=[],l=[],c=t.length-1,u=0;u=Math.abs(t.y-e.y)){var c=(t.x+e.x)/2;l=Rn.createSegment("C",c,t.y,c,e.y,e.x,e.y),r.appendSegment(l)}else{var u=(t.y+e.y)/2;l=Rn.createSegment("C",t.x,u,e.x,u,e.x,e.y),r.appendSegment(l)}}return o?r:r.serialize()},curve:Eu},Hu={TOOLS:Pc.Flags.TOOLS,RENDER:"RENDER",UPDATE:"UPDATE",LEGACY_TOOLS:"LEGACY_TOOLS",LABELS:"LABELS",VERTICES:"VERTICES",SOURCE:"SOURCE",TARGET:"TARGET",CONNECTOR:"CONNECTOR"},Ju=Pc.extend({className:function(){var t=Pc.prototype.className.apply(this).split(" ");return t.push("link"),t.join(" ")},options:{shortLinkLength:105,doubleLinkTools:!1,longLinkLength:155,linkToolsOffset:40,doubleLinkToolsOffset:65,sampleInterval:50},_labelCache:null,_labelSelectors:null,_markerCache:null,_V:null,_dragData:null,metrics:null,decimalsRounding:2,initialize:function(){Pc.prototype.initialize.apply(this,arguments),this._labelCache={},this._labelSelectors={},this._markerCache={},this._V={},this.cleanNodesCache()},presentationAttributes:{markup:[Hu.RENDER],attrs:[Hu.UPDATE],router:[Hu.UPDATE],connector:[Hu.CONNECTOR],smooth:[Hu.UPDATE],manhattan:[Hu.UPDATE],toolMarkup:[Hu.LEGACY_TOOLS],labels:[Hu.LABELS],labelMarkup:[Hu.LABELS],vertices:[Hu.VERTICES,Hu.UPDATE],vertexMarkup:[Hu.VERTICES],source:[Hu.SOURCE,Hu.UPDATE],target:[Hu.TARGET,Hu.UPDATE]},initFlag:[Hu.RENDER,Hu.SOURCE,Hu.TARGET,Hu.TOOLS],UPDATE_PRIORITY:1,confirmUpdate:function(t,e){if(e||(e={}),this.hasFlag(t,Hu.SOURCE)){if(!this.updateEndProperties("source"))return t;t=this.removeFlag(t,Hu.SOURCE)}if(this.hasFlag(t,Hu.TARGET)){if(!this.updateEndProperties("target"))return t;t=this.removeFlag(t,Hu.TARGET)}var i=this.paper,n=this.sourceView,r=this.targetView;if(i&&(n&&!i.isViewMounted(n)||r&&!i.isViewMounted(r)))return t;if(this.hasFlag(t,Hu.RENDER))return this.render(),this.updateHighlighters(!0),this.updateTools(e),t=this.removeFlag(t,[Hu.RENDER,Hu.UPDATE,Hu.VERTICES,Hu.LABELS,Hu.TOOLS,Hu.LEGACY_TOOLS,Hu.CONNECTOR]);var o=!1;this.hasFlag(t,Hu.VERTICES)&&(this.renderVertexMarkers(),t=this.removeFlag(t,Hu.VERTICES));var a=this.model,s=a.attributes,l=this.hasFlag(t,Hu.LABELS),c=this.hasFlag(t,Hu.LEGACY_TOOLS);l&&(this.onLabelsChange(a,s.labels,e),t=this.removeFlag(t,Hu.LABELS),o=!0),c&&(this.renderTools(),t=this.removeFlag(t,Hu.LEGACY_TOOLS));var u=this.hasFlag(t,Hu.UPDATE),h=this.hasFlag(t,Hu.CONNECTOR);return(u||h)&&(u?e.translateBy&&a.isRelationshipEmbeddedIn(e.translateBy)?this.translate(e.tx,e.ty):this.update():(this.updatePath(),this.updateDOM()),this.updateTools(e),t=this.removeFlag(t,[Hu.UPDATE,Hu.TOOLS,Hu.CONNECTOR]),o=!(c=l=!1)),l&&this.updateLabelPositions(),c&&this.updateToolsPosition(),o&&this.updateHighlighters(),this.hasFlag(t,Hu.TOOLS)&&(this.updateTools(e),t=this.removeFlag(t,Hu.TOOLS)),t},requestConnectionUpdate:function(t){this.requestUpdate(this.getFlag(Hu.UPDATE),t)},isLabelsRenderRequired:function(t){void 0===t&&(t={});var e=this.model.previous("labels");if(!e)return!0;if("propertyPathArray"in t&&"propertyValue"in t){var i=t.propertyPathArray||[],n=i.length;if(1=this.options.longLinkLength){var r=this.options.doubleLinkToolsOffset||e;n=this.getPointAtLength(i-r),this._tool2Cache.attr("transform","translate("+n.x+", "+n.y+") "+t),this._tool2Cache.attr("visibility","visible")}else this.options.doubleLinkTools&&this._tool2Cache.attr("visibility","hidden")}return this},updateArrowheadMarkers:function(){if(!this._V.markerArrowheads)return this;if("none"===b.css(this._V.markerArrowheads.node,"display"))return this;var t=this.getConnectionLength()'}),kh=Ec.extend({presentationAttributes:Ec.addPresentationAttributes({attrs:["SCALE"]}),confirmUpdate:function(){var t=Ec.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"SCALE")&&(this.resize(),t=this.removeFlag(t,"SCALE")),t}}),Dh=Sh.define("basic.Text",{attrs:{text:{"font-size":18,fill:"#000000"}}},{markup:''}),Lh=Sh.define("basic.Circle",{size:{width:60,height:60},attrs:{circle:{fill:"#ffffff",stroke:"#000000",r:30,cx:30,cy:30},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Ph=Sh.define("basic.Ellipse",{size:{width:60,height:40},attrs:{ellipse:{fill:"#ffffff",stroke:"#000000",rx:30,ry:20,cx:30,cy:20},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),zh=Sh.define("basic.Polygon",{size:{width:60,height:40},attrs:{polygon:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),jh=Sh.define("basic.Polyline",{size:{width:60,height:40},attrs:{polyline:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Oh=Sh.define("basic.Image",{attrs:{text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Gh=Sh.define("basic.Path",{size:{width:60,height:60},attrs:{path:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle",ref:"path","ref-x":.5,"ref-dy":10,fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Eh=Gh.define("basic.Rhombus",{attrs:{path:{d:"M 30 0 L 60 30 30 60 0 30 z"},text:{"ref-y":.5,"ref-dy":null,"y-alignment":"middle"}}}),Zh=Mh.test("svgforeignobject"),Bh=Sh.define("basic.TextBlock",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:80,height:100},text:{fill:"#000000","font-size":14,"font-family":"Arial, helvetica, sans-serif"},".content":{text:"","ref-x":.5,"ref-y":.5,"y-alignment":"middle","x-alignment":"middle"}},content:""},{markup:['','',Zh?'
':'',""].join(""),initialize:function(){this.listenTo(this,"change:size",this.updateSize),this.listenTo(this,"change:content",this.updateContent),this.updateSize(this,this.get("size")),this.updateContent(this,this.get("content")),Sh.prototype.initialize.apply(this,arguments)},updateSize:function(t,e){this.attr({".fobj":ms({},e),div:{style:ms({},e)}})},updateContent:function(t,e){Zh?this.attr({".content":{html:yl(e)}}):this.attr({".content":{text:e}})},setForeignObjectSize:function(){this.updateSize.apply(this,arguments)},setDivContent:function(){this.updateContent.apply(this,arguments)}}),Rh=Ec.extend({presentationAttributes:Zh?Ec.prototype.presentationAttributes:Ec.addPresentationAttributes({content:["CONTENT"],size:["CONTENT"]}),initFlag:["RENDER","CONTENT"],confirmUpdate:function(){var t=Ec.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"CONTENT")&&(this.updateContent(this.model),t=this.removeFlag(t,"CONTENT")),t},update:function(t,e){var i=this.model;if(Zh)Ec.prototype.update.call(this,i,e);else{var n=Vs(e||i.get("attrs"),".content");Ec.prototype.update.call(this,i,n),e&&!Us(e,".content")||this.updateContent(i,e)}},updateContent:function(t,e){var i=Ks({},(e||t.get("attrs"))[".content"]);i=Vs(i,"text");var n=Cl(t.get("content"),t.get("size"),i,{svgDocument:this.paper.svg}),r=rl({},".content",i,"/");r[".content"].text=n,Ec.prototype.update.call(this,t,r)}}),Yh={Generic:Sh,Rect:Th,TextView:kh,Text:Dh,Circle:Lh,Ellipse:Ph,Polygon:zh,Polyline:jh,Image:Oh,Path:Gh,Rhombus:Eh,TextBlock:Bh,TextBlockView:Rh},Wh=Ac.define("standard.Rectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"text",selector:"label"}]}),Uh=Ac.define("standard.Circle",{attrs:{body:{refCx:"50%",refCy:"50%",refR:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"circle",selector:"body"},{tagName:"text",selector:"label"}]}),Fh=Ac.define("standard.Ellipse",{attrs:{body:{refCx:"50%",refCy:"50%",refRx:"50%",refRy:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"body"},{tagName:"text",selector:"label"}]}),Vh=Ac.define("standard.Path",{attrs:{body:{refD:"M 0 0 L 10 0 10 10 0 10 Z",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"text",selector:"label"}]}),Xh=Ac.define("standard.Polygon",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polygon",selector:"body"},{tagName:"text",selector:"label"}]}),_h=Ac.define("standard.Polyline",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10 0 0",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polyline",selector:"body"},{tagName:"text",selector:"label"}]}),Hh=Ac.define("standard.Image",{attrs:{image:{refWidth:"100%",refHeight:"100%"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),Jh=Ac.define("standard.BorderedImage",{attrs:{border:{refWidth:"100%",refHeight:"100%",stroke:"#333333",strokeWidth:2},background:{refWidth:-1,refHeight:-1,x:.5,y:.5,fill:"#FFFFFF"},image:{refWidth:-1,refHeight:-1,x:.5,y:.5},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"background",attributes:{stroke:"none"}},{tagName:"image",selector:"image"},{tagName:"rect",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),Qh=Ac.define("standard.EmbeddedImage",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#FFFFFF",strokeWidth:2},image:{refWidth:"30%",refHeight:-20,x:10,y:10,preserveAspectRatio:"xMidYMin"},label:{textVerticalAnchor:"top",textAnchor:"left",refX:"30%",refX2:20,refY:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),Kh=Ac.define("standard.InscribedImage",{attrs:{border:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",stroke:"#333333",strokeWidth:2},background:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",fill:"#FFFFFF"},image:{refWidth:"68%",refHeight:"68%",refX:"16%",refY:"16%",preserveAspectRatio:"xMidYMid"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"background"},{tagName:"image",selector:"image"},{tagName:"ellipse",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),qh=Ac.define("standard.HeaderedRectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},header:{refWidth:"100%",height:30,strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},headerText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:15,fontSize:16,fill:"#333333"},bodyText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"rect",selector:"header"},{tagName:"text",selector:"headerText"},{tagName:"text",selector:"bodyText"}]}),$h=Ac.define("standard.Cylinder",{attrs:{body:{lateralArea:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},top:{refCx:"50%",cy:10,refRx:"50%",ry:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"100%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"ellipse",selector:"top"},{tagName:"text",selector:"label"}],topRy:function(t,e){if(void 0===t)return this.attr("body/lateralArea");var i={lateralArea:t},n=pl(t)?{refCy:t,refRy:t,cy:null,ry:null}:{refCy:null,refRy:null,cy:t,ry:t};return this.attr({body:i,top:n},e)}},{attributes:{lateralArea:{set:function(t,e){var i=pl(t);i&&(t=parseFloat(t)/100);var n=e.x,r=e.y,o=e.width,a=e.height,s=o/2,l=i?a*t:t,c=Dr.KAPPA,u=c*s,h=c*(i?a*t:t),g=n+o/2,d=n+o,f=r+l,p=f-l,m=r+a-l,v=r+a;return{d:["M",n,f,"L",n,m,"C",n,m+h,g-u,v,g,v,"C",g+u,v,d,m+h,d,m,"L",d,f,"C",d,f-h,g+u,p,g,p,"C",g-u,p,n,f-h,n,f,"Z"].join(" ")}}}}}),tg=Mh.test("svgforeignobject")?{tagName:"foreignObject",selector:"foreignObject",attributes:{overflow:"hidden"},children:[{tagName:"div",namespaceURI:"http://www.w3.org/1999/xhtml",selector:"label",style:{width:"100%",height:"100%",position:"static",backgroundColor:"transparent",textAlign:"center",margin:0,padding:"0px 5px",boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center"}}]}:{tagName:"text",selector:"label",attributes:{"text-anchor":"middle"}},eg={Rectangle:Wh,Circle:Uh,Ellipse:Fh,Path:Vh,Polygon:Xh,Polyline:_h,Image:Hh,BorderedImage:Jh,EmbeddedImage:Qh,InscribedImage:Kh,HeaderedRectangle:qh,Cylinder:$h,TextBlock:Ac.define("standard.TextBlock",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#ffffff",strokeWidth:2},foreignObject:{refWidth:"100%",refHeight:"100%"},label:{style:{fontSize:14}}}},{markup:[{tagName:"rect",selector:"body"},tg]},{attributes:{text:{set:function(t,e,i,n){if(!(i instanceof HTMLElement)){var r=n.style||{},o={text:t,width:-5,height:"100%"},a=ms({textVerticalAnchor:"middle"},r);return Ql.textWrap.set.call(this,o,e,i,a),{fill:r.color||null}}i.textContent=t},position:function(t,e,i){if(i instanceof SVGElement)return e.center()}}}}),Link:pc.define("standard.Link",{attrs:{line:{connection:!0,stroke:"#333333",strokeWidth:2,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 10 -5 0 0 10 5 z"}},wrapper:{connection:!0,strokeWidth:10,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"wrapper",attributes:{fill:"none",cursor:"pointer",stroke:"transparent","stroke-linecap":"round"}},{tagName:"path",selector:"line",attributes:{fill:"none","pointer-events":"none"}}]}),DoubleLink:pc.define("standard.DoubleLink",{attrs:{line:{connection:!0,stroke:"#DDDDDD",strokeWidth:4,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"#000000",d:"M 10 -3 10 -10 -2 0 10 10 10 3"}},outline:{connection:!0,stroke:"#000000",strokeWidth:6,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"outline",attributes:{fill:"none"}},{tagName:"path",selector:"line",attributes:{fill:"none"}}]}),ShadowLink:pc.define("standard.ShadowLink",{attrs:{line:{connection:!0,stroke:"#FF0000",strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"none",d:"M 0 -10 -10 0 0 10 z"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}},shadow:{connection:!0,refX:3,refY:6,stroke:"#000000",strokeOpacity:.2,strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 0 -10 -10 0 0 10 z",stroke:"none"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}}}},{markup:[{tagName:"path",selector:"shadow",attributes:{fill:"none"}},{tagName:"path",selector:"line",attributes:{fill:"none"}}]})},ig=Sh.define("devs.Model",{inPorts:[],outPorts:[],size:{width:80,height:80},attrs:{".":{magnet:!1},".label":{text:"Model","ref-x":.5,"ref-y":10,"font-size":18,"text-anchor":"middle",fill:"#000"},".body":{"ref-width":"100%","ref-height":"100%",stroke:"#000"}},ports:{groups:{in:{position:{name:"left"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"left",args:{y:10}}}},out:{position:{name:"right"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"right",args:{y:10}}}}}}},{markup:'',portMarkup:'',portLabelMarkup:'',initialize:function(){Sh.prototype.initialize.apply(this,arguments),this.on("change:inPorts change:outPorts",this.updatePortItems,this),this.updatePortItems()},updatePortItems:function(t,e,i){var n=Ms(this.get("inPorts")),r=Ys(Ms(this.get("outPorts")),n),o=this.createPortItems("in",n),a=this.createPortItems("out",r);this.prop("ports/items",o.concat(a),ms({rewrite:!0},i))},createPortItem:function(t,e){return{id:e,group:t,attrs:{".port-label":{text:e}}}},createPortItems:function(t,e){return zs(e).map(this.createPortItem.bind(this,t))},_addGroupPort:function(t,e,i){var n=this.get(e);return this.set(e,Array.isArray(n)?n.concat(t):[t],i)},addOutPort:function(t,e){return this._addGroupPort(t,"outPorts",e)},addInPort:function(t,e){return this._addGroupPort(t,"inPorts",e)},_removeGroupPort:function(t,e,i){return this.set(e,Rs(this.get(e),t),i)},removeOutPort:function(t,e){return this._removeGroupPort(t,"outPorts",e)},removeInPort:function(t,e){return this._removeGroupPort(t,"inPorts",e)},_changeGroup:function(t,e,i){return this.prop("ports/groups/"+t,ds(e)?e:{},i)},changeInGroup:function(t,e){return this._changeGroup("in",t,e)},changeOutGroup:function(t,e){return this._changeGroup("out",t,e)}}),ng=ig.define("devs.Atomic",{size:{width:80,height:80},attrs:{".label":{text:"Atomic"}}}),rg=ig.define("devs.Coupled",{size:{width:200,height:300},attrs:{".label":{text:"Coupled"}}}),og={Model:ig,Atomic:ng,Coupled:rg,Link:pc.define("devs.Link",{attrs:{".connection":{"stroke-width":2}}})},ag=Sh.define("logic.Gate",{size:{width:80,height:40},attrs:{".":{magnet:!1},".body":{width:100,height:50},circle:{r:7,stroke:"black",fill:"transparent","stroke-width":2}}},{operation:function(){return!0}}),sg=ag.define("logic.IO",{size:{width:60,height:30},attrs:{".body":{fill:"white",stroke:"black","stroke-width":2},".wire":{ref:".body","ref-y":.5,stroke:"black"},text:{fill:"black",ref:".body","ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle","font-weight":"bold","font-variant":"small-caps","text-transform":"capitalize","font-size":"14px"}}},{markup:''}),lg=sg.define("logic.Input",{attrs:{".wire":{"ref-dx":0,d:"M 0 0 L 23 0"},circle:{ref:".body","ref-dx":30,"ref-y":.5,magnet:!0,class:"output",port:"out"},text:{text:"input"}}}),cg=sg.define("logic.Output",{attrs:{".wire":{"ref-x":0,d:"M 0 0 L -23 0"},circle:{ref:".body","ref-x":-30,"ref-y":.5,magnet:"passive",class:"input",port:"in"},text:{text:"output"}}}),ug=ag.define("logic.Gate11",{attrs:{".input":{ref:".body","ref-x":-2,"ref-y":.5,magnet:"passive",port:"in"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:''}),hg=ag.define("logic.Gate21",{attrs:{".input1":{ref:".body","ref-x":-2,"ref-y":.3,magnet:"passive",port:"in1"},".input2":{ref:".body","ref-x":-2,"ref-y":.7,magnet:"passive",port:"in2"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:''}),gg=ug.define("logic.Repeater",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzIuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t){return t}}),dg=ug.define("logic.Not",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzkuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDI2NzEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzYiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA4MCwyNSBBIDQsNCAwIDEgMSA3MiwyNSBBIDQsNCAwIDEgMSA4MCwyNSB6IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEsMCkiIC8+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t){return!t}}),fg=hg.define("logic.Or",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik9SIEFOU0kuc3ZnIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTAgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjcxNCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODA2IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODE5IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjM3Mi4wNDcyNCA6IDM1MC43ODczOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI3NDQuMDk0NDggOiA1MjYuMTgxMDkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzc3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49Ijc1IDogNDAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTUwIDogNjAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDYwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTMyNzUiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNTAgOiAzMy4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTAwIDogNTAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1MzMiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzIgOiAyMS4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNjQgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMzIgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjU1NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDE2LjY2NjY2NyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDI1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNCIKICAgICBpbmtzY2FwZTpjeD0iMTEzLjAwMDM5IgogICAgIGlua3NjYXBlOmN5PSIxMi44OTM3MzEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImcyNTYwIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTpncmlkLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1wb2ludHM9InRydWUiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAwMDAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMzk5IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijg3NCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMzciCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii00IgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gNzAsMjUgYyAyMCwwIDI1LDAgMjUsMCIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMSwxNSA1LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzIsMzUgNSwzNSIKICAgICAgIGlkPSJwYXRoMzk0NCIgLz4KICAgIDxnCiAgICAgICBpZD0iZzI1NjAiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2LjUsLTM5LjUpIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t,e){return t||e}}),pg=hg.define("logic.And",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkFORCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI4IgogICAgIGlua3NjYXBlOmN4PSI1Ni42OTgzNDgiCiAgICAgaW5rc2NhcGU6Y3k9IjI1LjMyNjg5OSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZvbnQtc2l6ZTptZWRpdW07Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7ZGlyZWN0aW9uOmx0cjtibG9jay1wcm9ncmVzc2lvbjp0Yjt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGU7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkJpdHN0cmVhbSBWZXJhIFNhbnMiCiAgICAgICBkPSJNIDMwLDUgTCAzMCw2LjQyODU3MTQgTCAzMCw0My41NzE0MjkgTCAzMCw0NSBMIDMxLjQyODU3MSw0NSBMIDUwLjQ3NjE5LDQ1IEMgNjEuNzQ0MDk4LDQ1IDcwLjQ3NjE5LDM1Ljk5OTk1NSA3MC40NzYxOSwyNSBDIDcwLjQ3NjE5LDE0LjAwMDA0NSA2MS43NDQwOTksNS4wMDAwMDAyIDUwLjQ3NjE5LDUgQyA1MC40NzYxOSw1IDUwLjQ3NjE5LDUgMzEuNDI4NTcxLDUgTCAzMCw1IHogTSAzMi44NTcxNDMsNy44NTcxNDI5IEMgNDAuODM0MjY0LDcuODU3MTQyOSA0NS45MTgzNjgsNy44NTcxNDI5IDQ4LjA5NTIzOCw3Ljg1NzE0MjkgQyA0OS4yODU3MTQsNy44NTcxNDI5IDQ5Ljg4MDk1Miw3Ljg1NzE0MjkgNTAuMTc4NTcxLDcuODU3MTQyOSBDIDUwLjMyNzM4MSw3Ljg1NzE0MjkgNTAuNDA5MjI3LDcuODU3MTQyOSA1MC40NDY0MjksNy44NTcxNDI5IEMgNTAuNDY1MDI5LDcuODU3MTQyOSA1MC40NzE1NDMsNy44NTcxNDI5IDUwLjQ3NjE5LDcuODU3MTQyOSBDIDYwLjIzNjg1Myw3Ljg1NzE0MyA2Ny4xNDI4NTcsMTUuNDk3MDk4IDY3LjE0Mjg1NywyNSBDIDY3LjE0Mjg1NywzNC41MDI5MDIgNTkuNzYwNjYyLDQyLjE0Mjg1NyA1MCw0Mi4xNDI4NTcgTCAzMi44NTcxNDMsNDIuMTQyODU3IEwgMzIuODU3MTQzLDcuODU3MTQyOSB6IgogICAgICAgaWQ9InBhdGgyODg0IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NzY2NjY3Nzc3NzY2NjIiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return t&&e}}),mg=hg.define("logic.Nor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjY3NzY0NCIKICAgICBpbmtzY2FwZTpjeT0iMjIuMTAyMzQ0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjM3IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItNCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc5LDI1IEMgOTksMjUgOTUsMjUgOTUsMjUiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBpZD0icGF0aDI2MDQiCiAgICAgICAgIHNvZGlwb2RpOmN4PSI3NSIKICAgICAgICAgc29kaXBvZGk6Y3k9IjI1IgogICAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgICAgc29kaXBvZGk6cnk9IjQiCiAgICAgICAgIGQ9Ik0gNzksMjUgQSA0LDQgMCAxIDEgNzEsMjUgQSA0LDQgMCAxIDEgNzksMjUgeiIKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI2LjUsMzkuNSkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return!(t||e)}}),vg=hg.define("logic.Nand",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5BTkQgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMTYiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjI4MzMwNyIKICAgICBpbmtzY2FwZTpjeT0iMTYuNDQyODQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzksMjUgQyA5MS44LDI1IDk1LDI1IDk1LDI1IgogICAgICAgaWQ9InBhdGgzMDU5IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMxLDE1IDUsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMiwzNSA1LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmb250LXNpemU6bWVkaXVtO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7dGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbjpub25lO2xpbmUtaGVpZ2h0Om5vcm1hbDtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2RpcmVjdGlvbjpsdHI7YmxvY2stcHJvZ3Jlc3Npb246dGI7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MzttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5OkJpdHN0cmVhbSBWZXJhIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpCaXRzdHJlYW0gVmVyYSBTYW5zIgogICAgICAgZD0iTSAzMCw1IEwgMzAsNi40Mjg1NzE0IEwgMzAsNDMuNTcxNDI5IEwgMzAsNDUgTCAzMS40Mjg1NzEsNDUgTCA1MC40NzYxOSw0NSBDIDYxLjc0NDA5OCw0NSA3MC40NzYxOSwzNS45OTk5NTUgNzAuNDc2MTksMjUgQyA3MC40NzYxOSwxNC4wMDAwNDUgNjEuNzQ0MDk5LDUuMDAwMDAwMiA1MC40NzYxOSw1IEMgNTAuNDc2MTksNSA1MC40NzYxOSw1IDMxLjQyODU3MSw1IEwgMzAsNSB6IE0gMzIuODU3MTQzLDcuODU3MTQyOSBDIDQwLjgzNDI2NCw3Ljg1NzE0MjkgNDUuOTE4MzY4LDcuODU3MTQyOSA0OC4wOTUyMzgsNy44NTcxNDI5IEMgNDkuMjg1NzE0LDcuODU3MTQyOSA0OS44ODA5NTIsNy44NTcxNDI5IDUwLjE3ODU3MSw3Ljg1NzE0MjkgQyA1MC4zMjczODEsNy44NTcxNDI5IDUwLjQwOTIyNyw3Ljg1NzE0MjkgNTAuNDQ2NDI5LDcuODU3MTQyOSBDIDUwLjQ2NTAyOSw3Ljg1NzE0MjkgNTAuNDcxNTQzLDcuODU3MTQyOSA1MC40NzYxOSw3Ljg1NzE0MjkgQyA2MC4yMzY4NTMsNy44NTcxNDMgNjcuMTQyODU3LDE1LjQ5NzA5OCA2Ny4xNDI4NTcsMjUgQyA2Ny4xNDI4NTcsMzQuNTAyOTAyIDU5Ljc2MDY2Miw0Mi4xNDI4NTcgNTAsNDIuMTQyODU3IEwgMzIuODU3MTQzLDQyLjE0Mjg1NyBMIDMyLjg1NzE0Myw3Ljg1NzE0MjkgeiIKICAgICAgIGlkPSJwYXRoMjg4NCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2Njc2NjY2Nzc3Nzc2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDQwMDgiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return!(t&&e)}}),Ig=hg.define("logic.Xor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhPUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjUuNjU2ODU0MiIKICAgICBpbmtzY2FwZTpjeD0iMjUuOTM4MTE2IgogICAgIGlua3NjYXBlOmN5PSIxNy4yMzAwNSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzAuMzg1NzE3LDE1IEwgNC45OTk5OTk4LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5NzY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEuMzYyMDkxLDM1IEwgNC45OTk5OTk4LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPGcKICAgICAgIGlkPSJnMjU2MCIKICAgICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjYuNSwtMzkuNSkiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDM1MTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi4yNSw4MS41MDAwMDUgQyAtMy44NDczNzQsODQuMTQ0NDA1IC00LjUsODQuNTAwMDA1IC00LjUsODQuNTAwMDA1IEwgLTguMTU2MjUsODQuNTAwMDA1IEwgLTYuMTU2MjUsODIuMDYyNTA1IEMgLTYuMTU2MjUsODIuMDYyNTA1IC0wLjUsNzUuMDYyNDUxIC0wLjUsNjQuNSBDIC0wLjUsNTMuOTM3NTQ5IC02LjE1NjI1LDQ2LjkzNzUgLTYuMTU2MjUsNDYuOTM3NSBMIC04LjE1NjI1LDQ0LjUgTCAtNC41LDQ0LjUgQyAtMy43MTg3NSw0NS40Mzc1IC0zLjA3ODEyNSw0Ni4xNTYyNSAtMi4yODEyNSw0Ny41IEMgLTAuNDA4NTMxLDUwLjU5OTgxNSAyLjUsNTYuNTI2NjQ2IDIuNSw2NC41IEMgMi41LDcyLjQ1MDY1IC0wLjM5NjY5Nyw3OC4zNzk0MjUgLTIuMjUsODEuNTAwMDA1IHoiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY3NjY2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return(!t||e)&&(t||!e)}}),Ag=hg.define("logic.Xnor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhOT1IgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNTU3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTYuNjY2NjY3IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDI1IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI0IgogICAgIGlua3NjYXBlOmN4PSI5NS43MjM2NiIKICAgICBpbmtzY2FwZTpjeT0iLTI2Ljc3NTAyMyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjAwMDAwMDI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc4LjMzMzMzMiwyNSBDIDkxLjY2NjY2NiwyNSA5NSwyNSA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMC4zODU3MTcsMTUgTCA0Ljk5OTk5OTgsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk3NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMS4zNjIwOTEsMzUgTCA0Ljk5OTk5OTgsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzUxNiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjI1LDgxLjUwMDAwNSBDIC0zLjg0NzM3NCw4NC4xNDQ0MDUgLTQuNSw4NC41MDAwMDUgLTQuNSw4NC41MDAwMDUgTCAtOC4xNTYyNSw4NC41MDAwMDUgTCAtNi4xNTYyNSw4Mi4wNjI1MDUgQyAtNi4xNTYyNSw4Mi4wNjI1MDUgLTAuNSw3NS4wNjI0NTEgLTAuNSw2NC41IEMgLTAuNSw1My45Mzc1NDkgLTYuMTU2MjUsNDYuOTM3NSAtNi4xNTYyNSw0Ni45Mzc1IEwgLTguMTU2MjUsNDQuNSBMIC00LjUsNDQuNSBDIC0zLjcxODc1LDQ1LjQzNzUgLTMuMDc4MTI1LDQ2LjE1NjI1IC0yLjI4MTI1LDQ3LjUgQyAtMC40MDg1MzEsNTAuNTk5ODE1IDIuNSw1Ni41MjY2NDYgMi41LDY0LjUgQyAyLjUsNzIuNDUwNjUgLTAuMzk2Njk3LDc4LjM3OTQyNSAtMi4yNSw4MS41MDAwMDUgeiIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2Njc2NjY2NzYyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDM1NTEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return(!t||!e)&&(t||e)}}),Cg={Gate:ag,IO:sg,Input:lg,Output:cg,Gate11:ug,Gate21:hg,Repeater:gg,Not:dg,Or:fg,And:pg,Nor:mg,Nand:vg,Xor:Ig,Xnor:Ag,Wire:pc.define("logic.Wire",{attrs:{".connection":{"stroke-width":2},".marker-vertex":{r:7}},router:{name:"orthogonal"},connector:{name:"rounded",args:{radius:10}}},{arrowheadMarkup:['','',""].join(""),vertexMarkup:['','','','','',"Remove vertex.","","",""].join("")})},yg={KingWhite:Sh.define("chess.KingWhite",{size:{width:42,height:38}},{markup:' '}),KingBlack:Sh.define("chess.KingBlack",{size:{width:42,height:38}},{markup:' '}),QueenWhite:Sh.define("chess.QueenWhite",{size:{width:42,height:38}},{markup:' '}),QueenBlack:Sh.define("chess.QueenBlack",{size:{width:42,height:38}},{markup:' '}),RookWhite:Sh.define("chess.RookWhite",{size:{width:32,height:34}},{markup:' '}),RookBlack:Sh.define("chess.RookBlack",{size:{width:32,height:34}},{markup:' '}),BishopWhite:Sh.define("chess.BishopWhite",{size:{width:38,height:38}},{markup:' '}),BishopBlack:Sh.define("chess.BishopBlack",{size:{width:38,height:38}},{markup:' '}),KnightWhite:Sh.define("chess.KnightWhite",{size:{width:38,height:37}},{markup:' '}),KnightBlack:Sh.define("chess.KnightBlack",{size:{width:38,height:37}},{markup:' '}),PawnWhite:Sh.define("chess.PawnWhite",{size:{width:28,height:33}},{markup:''}),PawnBlack:Sh.define("chess.PawnBlack",{size:{width:28,height:33}},{markup:''})},wg=Ac.define("erd.Entity",{size:{width:150,height:60},attrs:{".outer":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"100,0 100,60 0,60 0,0"},".inner":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"95,5 95,55 5,55 5,5",display:"none"},text:{text:"Entity","font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),bg=wg.define("erd.WeakEntity",{attrs:{".inner":{display:"auto"},text:{text:"Weak Entity"}}}),xg=Ac.define("erd.Relationship",{size:{width:80,height:80},attrs:{".outer":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,0 80,40 40,80 0,40"},".inner":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,5 75,40 40,75 5,40",display:"none"},text:{text:"Relationship","font-family":"Arial","font-size":12,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Ng=xg.define("erd.IdentifyingRelationship",{attrs:{".inner":{display:"auto"},text:{text:"Identifying"}}}),Mg=Ac.define("erd.Attribute",{size:{width:100,height:50},attrs:{ellipse:{transform:"translate(50, 25)"},".outer":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:50,ry:25,fill:"#E67E22"},".inner":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:45,ry:20,fill:"#E67E22",display:"none"},text:{"font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Sg=Mg.define("erd.Multivalued",{attrs:{".inner":{display:"block"},text:{text:"multivalued"}}}),Tg=Mg.define("erd.Derived",{attrs:{".outer":{"stroke-dasharray":"3,5"},text:{text:"derived"}}}),kg=Mg.define("erd.Key",{attrs:{ellipse:{"stroke-width":4},text:{text:"key","font-weight":"800","text-decoration":"underline"}}}),Dg=Mg.define("erd.Normal",{attrs:{text:{text:"Normal"}}}),Lg={Entity:wg,WeakEntity:bg,Relationship:xg,IdentifyingRelationship:Ng,Attribute:Mg,Multivalued:Sg,Derived:Tg,Key:kg,Normal:Dg,ISA:Ac.define("erd.ISA",{type:"erd.ISA",size:{width:100,height:50},attrs:{polygon:{points:"0,0 50,50 100,0",fill:"#F1C40F",stroke:"#F39C12","stroke-width":2},text:{text:"ISA","font-size":18,"ref-x":.5,"ref-y":.3,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Line:pc.define("erd.Line",{},{cardinality:function(t){this.set("labels",[{position:-20,attrs:{text:{dy:-8,text:t}}}])}})},Pg={State:Lh.define("fsa.State",{attrs:{circle:{"stroke-width":3},text:{"font-weight":"800"}}}),StartState:Ac.define("fsa.StartState",{size:{width:20,height:20},attrs:{circle:{transform:"translate(10, 10)",r:10,fill:"#000000"}}},{markup:''}),EndState:Ac.define("fsa.EndState",{size:{width:20,height:20},attrs:{".outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#000000"},".inner":{transform:"translate(10, 10)",r:6,fill:"#000000"}}},{markup:''}),Arrow:pc.define("fsa.Arrow",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}},smooth:!0})},zg={Member:Ac.define("org.Member",{size:{width:180,height:70},attrs:{rect:{width:170,height:60},".card":{fill:"#FFFFFF",stroke:"#000000","stroke-width":2,"pointer-events":"visiblePainted",rx:10,ry:10},image:{width:48,height:48,ref:".card","ref-x":10,"ref-y":5},".rank":{"text-decoration":"underline",ref:".card","ref-x":.9,"ref-y":.2,"font-family":"Courier New","font-size":14,"text-anchor":"end"},".name":{"font-weight":"800",ref:".card","ref-x":.9,"ref-y":.6,"font-family":"Courier New","font-size":14,"text-anchor":"end"}}},{markup:''}),Arrow:pc.define("org.Arrow",{source:{selector:".card"},target:{selector:".card"},attrs:{".connection":{stroke:"#585858","stroke-width":3}},z:-1})},jg={Place:Sh.define("pn.Place",{size:{width:50,height:50},attrs:{".root":{r:25,fill:"#ffffff",stroke:"#000000",transform:"translate(25, 25)"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:".root",fill:"#000000","font-size":12},".tokens > circle":{fill:"#000000",r:5},".tokens.one > circle":{transform:"translate(25, 25)"},".tokens.two > circle:nth-child(1)":{transform:"translate(19, 25)"},".tokens.two > circle:nth-child(2)":{transform:"translate(31, 25)"},".tokens.three > circle:nth-child(1)":{transform:"translate(18, 29)"},".tokens.three > circle:nth-child(2)":{transform:"translate(25, 19)"},".tokens.three > circle:nth-child(3)":{transform:"translate(32, 29)"},".tokens.alot > text":{transform:"translate(25, 18)","text-anchor":"middle",fill:"#000000"}}},{markup:''}),PlaceView:Ec.extend({presentationAttributes:Ec.addPresentationAttributes({tokens:["TOKENS"]}),initFlag:Ec.prototype.initFlag.concat(["TOKENS"]),confirmUpdate:function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];var n=(t=Ec.prototype.confirmUpdate).call.apply(t,[this].concat(e));return this.hasFlag(n,"TOKENS")&&(this.renderTokens(),this.update(),n=this.removeFlag(n,"TOKENS")),n},renderTokens:function(){var e=this.vel.findOne(".tokens").empty();["one","two","three","alot"].forEach(function(t){e.removeClass(t)});var t=this.model.get("tokens");if(t)switch(t){case 1:e.addClass("one"),e.append(Dr("circle"));break;case 2:e.addClass("two"),e.append([Dr("circle"),Dr("circle")]);break;case 3:e.addClass("three"),e.append([Dr("circle"),Dr("circle"),Dr("circle")]);break;default:e.addClass("alot"),e.append(Dr("text").text(t+""))}}}),Transition:Sh.define("pn.Transition",{size:{width:12,height:50},attrs:{rect:{width:12,height:50,fill:"#000000",stroke:"#000000"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:"rect",fill:"#000000","font-size":12}}},{markup:''}),Link:pc.define("pn.Link",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}}})},Og=Sh.define("uml.Class",{attrs:{rect:{width:200},".uml-class-name-rect":{stroke:"black","stroke-width":2,fill:"#3498db"},".uml-class-attrs-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-methods-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-name-text":{ref:".uml-class-name-rect","ref-y":.5,"ref-x":.5,"text-anchor":"middle","y-alignment":"middle","font-weight":"bold",fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-attrs-text":{ref:".uml-class-attrs-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-methods-text":{ref:".uml-class-methods-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"}},name:[],attributes:[],methods:[]},{markup:['','','',"",'',""].join(""),initialize:function(){this.on("change:name change:attributes change:methods",function(){this.updateRectangles(),this.trigger("uml-update")},this),this.updateRectangles(),Sh.prototype.initialize.apply(this,arguments)},getClassName:function(){return this.get("name")},updateRectangles:function(){var n=this.get("attrs"),t=[{type:"name",text:this.getClassName()},{type:"attrs",text:this.get("attributes")},{type:"methods",text:this.get("methods")}],r=0;t.forEach(function(t){var e=Array.isArray(t.text)?t.text:[t.text],i=20*e.length+20;n[".uml-class-"+t.type+"-text"].text=e.join("\n"),n[".uml-class-"+t.type+"-rect"].height=i,n[".uml-class-"+t.type+"-rect"].transform="translate(0,"+r+")",r+=i})}}),Gg=Ec.extend({initialize:function(){Ec.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"uml-update",function(){this.update(),this.resize()})}}),Eg=Og.define("uml.Abstract",{attrs:{".uml-class-name-rect":{fill:"#e74c3c"},".uml-class-attrs-rect":{fill:"#c0392b"},".uml-class-methods-rect":{fill:"#c0392b"}}},{getClassName:function(){return["<>",this.get("name")]}}),Zg=Gg,Bg=Og.define("uml.Interface",{attrs:{".uml-class-name-rect":{fill:"#f1c40f"},".uml-class-attrs-rect":{fill:"#f39c12"},".uml-class-methods-rect":{fill:"#f39c12"}}},{getClassName:function(){return["<>",this.get("name")]}}),Rg={basic:Yh,standard:eg,devs:og,logic:Cg,chess:yg,erd:Lg,fsa:Pg,org:zg,pn:jg,uml:{Class:Og,ClassView:Gg,Abstract:Eg,AbstractView:Zg,Interface:Bg,InterfaceView:Gg,Generalization:pc.define("uml.Generalization",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"}}}),Implementation:pc.define("uml.Implementation",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"},".connection":{"stroke-dasharray":"3,3"}}}),Aggregation:pc.define("uml.Aggregation",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"white"}}}),Composition:pc.define("uml.Composition",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"black"}}}),Association:pc.define("uml.Association"),State:Sh.define("uml.State",{attrs:{".uml-state-body":{width:200,height:200,rx:10,ry:10,fill:"#ecf0f1",stroke:"#bdc3c7","stroke-width":3},".uml-state-separator":{stroke:"#bdc3c7","stroke-width":2},".uml-state-name":{ref:".uml-state-body","ref-x":.5,"ref-y":5,"text-anchor":"middle",fill:"#000000","font-family":"Courier New","font-size":14},".uml-state-events":{ref:".uml-state-separator","ref-x":5,"ref-y":5,fill:"#000000","font-family":"Courier New","font-size":14}},name:"State",events:[]},{markup:['','','',"",'','','',""].join(""),initialize:function(){this.on({"change:name":this.updateName,"change:events":this.updateEvents,"change:size":this.updatePath},this),this.updateName(),this.updateEvents(),this.updatePath(),Sh.prototype.initialize.apply(this,arguments)},updateName:function(){this.attr(".uml-state-name/text",this.get("name"))},updateEvents:function(){this.attr(".uml-state-events/text",this.get("events").join("\n"))},updatePath:function(){var t="M 0 20 L "+this.get("size").width+" 20";this.attr(".uml-state-separator/d",t,{silent:!0})}}),StartState:Lh.define("uml.StartState",{type:"uml.StartState",attrs:{circle:{fill:"#34495e",stroke:"#2c3e50","stroke-width":2,rx:1}}}),EndState:Sh.define("uml.EndState",{size:{width:20,height:20},attrs:{"circle.outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#2c3e50"},"circle.inner":{transform:"translate(10, 10)",r:6,fill:"#34495e"}}},{markup:''}),Transition:pc.define("uml.Transition",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z",fill:"#34495e",stroke:"#2c3e50"},".connection":{stroke:"#2c3e50"}}})}};function Yg(t,e){if(0===e)return"0%";return Math.round(t/e*100*1e3)/1e3+"%"}function Wg(r){return function(t,e,i,n){return(e.isNodeConnection(i)?Fg:Ug)(r,t,e,i,n)}}function Ug(t,e,i,n,r){var o=i.model.angle(),a=i.getNodeUnrotatedBBox(n),s=i.model.getBBox().center();r.rotate(s,o);var l=r.x-a.x,c=r.y-a.y;return t&&(l=Yg(l,a.width),c=Yg(c,a.height)),e.anchor={name:"topLeft",args:{dx:l,dy:c,rotate:!0}},e}function Fg(t,e,i,n,r){var o=i.getConnection();if(!o)return e;var a=o.closestPointLength(r);if(t){var s=o.length();e.anchor={name:"connectionRatio",args:{ratio:a/s}}}else e.anchor={name:"connectionLength",args:{length:a}};return e}var Vg=Ll,Xg=Wg(!1),_g=Wg(!0),Hg={useDefaults:Vg,pinAbsolute:Xg,pinRelative:_g},Jg=bc.extend({tagName:"circle",svgElement:!0,className:"marker-vertex",events:{mousedown:"onPointerDown",touchstart:"onPointerDown",dblclick:"onDoubleClick",dbltap:"onDoubleClick"},documentEvents:{mousemove:"onPointerMove",touchmove:"onPointerMove",mouseup:"onPointerUp",touchend:"onPointerUp",touchcancel:"onPointerUp"},attributes:{r:6,fill:"#33334F",stroke:"#FFFFFF","stroke-width":2,cursor:"move"},position:function(t,e){var i=this.vel,n=this.options.scale,r=Dr.createSVGMatrix().translate(t,e);n&&(r=r.scale(n)),i.transform(r,{absolute:!0})},onPointerDown:function(t){this.options.guard(t)||(t.stopPropagation(),t.preventDefault(),this.options.paper.undelegateEvents(),this.delegateDocumentEvents(null,t.data),this.trigger("will-change",this,t))},onPointerMove:function(t){this.trigger("changing",this,t)},onDoubleClick:function(t){this.trigger("remove",this,t)},onPointerUp:function(t){this.trigger("changed",this,t),this.undelegateDocumentEvents(),this.options.paper.delegateEvents()}}),Qg=wh.extend({name:"vertices",options:{handleClass:Jg,snapRadius:20,redundancyRemoval:!0,vertexAdding:!0,stopPropagation:!0,scale:null},children:[{tagName:"path",selector:"connection",className:"joint-vertices-path",attributes:{fill:"none",stroke:"transparent","stroke-width":10,cursor:"cell"}}],handles:null,events:{"mousedown .joint-vertices-path":"onPathPointerDown","touchstart .joint-vertices-path":"onPathPointerDown"},onRender:function(){return this.options.vertexAdding&&(this.renderChildren(),this.updatePath()),this.resetHandles(),this.renderHandles(),this},update:function(){return this.relatedView.model.vertices().length===this.handles.length?this.updateHandles():(this.resetHandles(),this.renderHandles()),this.options.vertexAdding&&this.updatePath(),this},resetHandles:function(){var t=this.handles;if(this.handles=[],this.stopListening(),Array.isArray(t))for(var e=0,i=t.length;er;)A(i,n=e[r++])&&(~vt(o,n)||o.push(n));return o},At=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],Ct=At.concat("length","prototype"),yt={f:Object.getOwnPropertyNames||function(t){return It(t,Ct)}},wt={f:Object.getOwnPropertySymbols},bt=st("Reflect","ownKeys")||function(t){var e=yt.f(k(t)),n=wt.f;return n?e.concat(n(t)):e},xt=function(t,e){for(var n=bt(e),i=L.f,r=S.f,o=0;o"+t+""},Ht=function(){try{nt=document.domain&&new ActiveXObject("htmlfile")}catch(t){}var t,e;Ht=nt?function(t){t.write(_t("")),t.close();var e=t.parentWindow.Object;return t=null,e}(nt):((e=N("iframe")).style.display="none",Wt.appendChild(e),e.src=String("javascript:"),(t=e.contentWindow.document).open(),t.write(_t("document.F=Object")),t.close(),t.F);for(var n=At.length;n--;)delete Ht[Ut][At[n]];return Ht()};J[Vt]=!0;var Jt=Object.create||function(t,e){var n;return null!==t?(Xt[Ut]=k(t),n=new Xt,Xt[Ut]=null,n[Vt]=t):n=Ht(),void 0===e?n:Yt(n,e)},Qt=Zt("unscopables"),Kt=Array.prototype;null==Kt[Qt]&&L.f(Kt,Qt,{configurable:!0,value:Jt(null)});var qt=function(t){Kt[Qt][t]=!0},$t=Object.defineProperty,te={},ee=function(t){throw t},ne=function(t,e){if(A(te,t))return te[t];e||(e={});var n=[][t],i=!!A(e,"ACCESSORS")&&e.ACCESSORS,r=A(e,0)?e[0]:ee,o=A(e,1)?e[1]:void 0;return te[t]=!!n&&!a(function(){if(i&&!s)return!0;var t={length:-1};i?$t(t,1,{enumerable:!0,get:ee}):t[1]=1,n.call(t,r,o)})},ie=mt.includes,re=ne("indexOf",{ACCESSORS:!0,1:0});zt({target:"Array",proto:!0,forced:!re},{includes:function(t){return ie(this,t,1=n.length?{value:void 0,done:!0}:(t=Ve(n,i),e.index+=t.length,{value:t,done:!1})});var Je=function(e,t,n,i){try{return i?t(k(n)[0],n[1]):t(n)}catch(t){throw function(t){var e=t.return;if(void 0!==e)k(e.call(t)).value}(e),t}},Qe=Zt("iterator"),Ke=Array.prototype,qe=function(t,e,n){var i=v(e);i in t?L.f(t,i,C(0,n)):t[i]=n},$e={};$e[Zt("toStringTag")]="z";var tn="[object z]"===String($e),en=Zt("toStringTag"),nn="Arguments"==g(function(){return arguments}()),rn=tn?g:function(t){var e,n,i;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),en))?n:nn?g(e):"Object"==(i=g(e))&&"function"==typeof e.callee?"Arguments":i},on=Zt("iterator"),an=Zt("iterator"),sn=!1;try{var ln=0,cn={next:function(){return{done:!!ln++}},return:function(){sn=!0}};cn[an]=function(){return this},Array.from(cn,function(){throw 2})}catch(t){}var un=!function(t,e){if(!e&&!sn)return!1;var n=!1;try{var i={};i[an]=function(){return{next:function(){return{done:n=!0}}}},t(i)}catch(t){}return n}(function(t){Array.from(t)});zt({target:"Array",stat:!0,forced:un},{from:function(t){var e,n,i,r,o,a,s,l=le(t),c="function"==typeof this?this:Array,u=arguments.length,h=1>8-r%1*8)){if(255<(n=i.charCodeAt(r+=.75)))throw new l("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");e=e<<8|n}return a}),t.atob||(t.atob=function(t){var e=String(t).replace(/=+$/,"");if(e.length%4==1)throw new l("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,i,r=0,o=0,a="";i=e.charAt(o++);~i&&(n=r%4?64*n+i:i,r++%4)?a+=String.fromCharCode(255&n>>(-2*r&6)):0)i=s.indexOf(i);return a})}()});zt({target:"Number",stat:!0},{isNaN:function(t){return t!=t}});ot.Number.isNaN;var pn=u.isFinite,mn=Number.isFinite||function(t){return"number"==typeof t&&pn(t)};zt({target:"Number",stat:!0},{isFinite:mn});ot.Number.isFinite;var vn=Zt("match"),In=function(t){if(m(e=t)&&(void 0!==(n=e[vn])?n:"RegExp"==g(e)))throw TypeError("The method doesn't accept regular expressions");var e,n;return t},An=Zt("match"),Cn=function(e){var n=/./;try{"/./"[e](n)}catch(t){try{return n[An]=!1,"/./"[e](n)}catch(t){}}return!1};zt({target:"String",proto:!0,forced:!Cn("includes")},{includes:function(t){return!!~String(f(this)).indexOf(In(t),1i)&&!(new di(t,n).length()>i)},divideAt:function(t){var e=this.pointAt(t);return[new di(this.start,e),new di(e,this.end)]},divideAtLength:function(t){var e=this.pointAtLength(t);return[new di(this.start,e),new di(e,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,e){if(t&&t.intersectionWithLine){var n=t.intersectionWithLine(this,e);return n&&t instanceof di&&(n=n[0]),n}return null},intersectionWithLine:function(t){var e=new ci(this.end.x-this.start.x,this.end.y-this.start.y),n=new ci(t.end.x-t.start.x,t.end.y-t.start.y),i=e.x*n.y-e.y*n.x,r=new ci(t.start.x-this.start.x,t.start.y-this.start.y),o=r.x*n.y-r.y*n.x,a=r.x*e.y-r.y*e.x;if(0===i||o*i<0||a*i<0)return null;if(0s.x+o/2,h=is.x?r-30:r+30)-c)/(a*a*(i-l))+l:e=a*a/(r-c)-a*a*(i-l)*((n=r>s.y?i+30:i-30)-l)/(o*o*(r-c))+c,new ci(n,e).theta(t)},toString:function(){return new ci(this.x,this.y).toString()+" "+this.a+" "+this.b}};var Ai=Ii,Ci=Math.abs,yi=Math.cos,wi=Math.sin,bi=Math.min,xi=Math.max,Ni=Math.round,Mi=Math.pow,Ti=function(t,e,n,i){if(!(this instanceof Ti))return new Ti(t,e,n,i);Object(t)===t&&(e=t.y,n=t.width,i=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===e?0:e,this.width=void 0===n?0:n,this.height=void 0===i?0:i};Ti.fromEllipse=function(t){return t=new Ii(t),new Ti(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},Ti.fromPointUnion=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if(0===t.length)return null;var n,i,r,o,a=new ci;n=i=1/0,r=o=-1/0;for(var s=0;s=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var e=new Ti(this).normalize(),n=new Ti(t).normalize(),i=e.width,r=e.height,o=n.width,a=n.height;if(!(i&&r&&o&&a))return!1;var s=e.x,l=e.y,c=n.x,u=n.y;return o+=c,i+=s,a+=u,r+=l,s<=c&&o<=i&&l<=u&&a<=r},corner:function(){return new ci(this.x+this.width,this.y+this.height)},equals:function(t){var e=new Ti(this).normalize(),n=new Ti(t).normalize();return e.x===n.x&&e.y===n.y&&e.width===n.width&&e.height===n.height},inflate:function(t,e){return void 0===t&&(t=0),void 0===e&&(e=t),this.x-=t,this.y-=e,this.width+=2*t,this.height+=2*e,this},intersect:function(t){var e=this.origin(),n=this.corner(),i=t.origin(),r=t.corner();if(r.x<=e.x||r.y<=e.y||i.x>=n.x||i.y>=n.y)return null;var o=xi(e.x,i.x),a=xi(e.y,i.y);return new Ti(o,a,bi(n.x,r.x)-o,bi(n.y,r.y)-a)},intersectionWithLine:function(t){var e,n,i=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],r=[],o=[],a=i.length;for(n=0;nu&&(i=(this.x+this.width-u)/(d.x-u)),d.y>h&&(s=(this.y+this.height-h)/(d.y-h));var f=t.topRight();f.x>u&&(r=(this.x+this.width-u)/(f.x-u)),f.yh&&(c=(this.y+this.height-h)/(p.y-h)),{sx:bi(n,i,r,o),sy:bi(a,s,l,c)}},maxRectUniformScaleToFit:function(t,e){var n=this.maxRectScaleToFit(t,e);return bi(n.sx,n.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,e=this.y,n=this.width,i=this.height;return this.width<0&&(t=this.x+this.width,n=-this.width),this.height<0&&(e=this.y+this.height,i=-this.height),this.x=t,this.y=e,this.width=n,this.height=i,this},offset:function(t,e){return ci.prototype.offset.call(this,t,e)},origin:function(){return new ci(this.x,this.y)},pointNearestToPoint:function(t){if(t=new ci(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new ci(this.x+this.width,t.y);case"left":return new ci(this.x,t.y);case"bottom":return new ci(t.x,this.y+this.height);case"top":return new ci(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new di(this.topRight(),this.bottomRight())},rightMiddle:function(){return new ci(this.x+this.width,this.y+this.height/2)},round:function(t){var e=1;if(t)switch(t){case 1:e=10;break;case 2:e=100;break;case 3:e=1e3;break;default:e=Mi(10,t)}return this.x=Ni(this.x*e)/e,this.y=Ni(this.y*e)/e,this.width=Ni(this.width*e)/e,this.height=Ni(this.height*e)/e,this},scale:function(t,e,n){return n=this.origin().scale(t,e,n),this.x=n.x,this.y=n.y,this.width*=t,this.height*=e,this},sideNearestToPoint:function(t){var e=(t=new ci(t)).x-this.x,n=this.x+this.width-t.x,i=t.y-this.y,r=e,o="left";return ni.x&&(i=t[e]);var a=[];for(e=0;eg.y||r>h.y&&r<=g.y){var d=h.x-i>g.x-i?h.x-i:g.x-i;0<=d&&(u.x=i+d,u.y=r,c.start=t,c.end=u,l.intersect(c)&&s++)}o=a}return s%2==1},close:function(){var t=this.start,e=this.end,n=this.points;return t&&e&&!t.equals(e)&&n.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new Pi(Li(this.points))},equals:function(t){if(!t)return!1;var e=this.points,n=t.points,i=e.length;if(n.length!==i)return!1;for(var r=0;rr+a&&i.x>r+a||n.xo+s&&i.y>o+s||n.ye.x&&t.ye.y}function ar(t,e){return yr(t,e,{interior:!1})}function sr(t,e){return wr(t,e,{interior:!1})}function lr(t,e){return br(t,e,{interior:!1})}function cr(t,e){return Nr(t,e,{interior:!1})}function ur(t,e){return yr(t,e,{interior:!0})}function hr(t,e){return wr(t,e,{interior:!0})}function gr(t,e){return br(t,e,{interior:!0})}function dr(t,e){return Nr(t,e,{interior:!0})}function fr(t,e){return Mr(t,e,{interior:!0})}function pr(t,n,i){return t.getSubpaths().some(function(t){var e=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?ur(e,n):ar(e,n)})}function mr(t,n,i){return t.getSubpaths().some(function(t){var e=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?hr(e,n):sr(e,n)})}function vr(t,e,n){return Ar(t,$i.fromRect(e),n)}function Ir(t,e,n){return xr(t,e,n,{interior:!1})}function Ar(t,e,n){return xr(t,e,n,{interior:!0})}function Cr(t,n,i,r){return t.getSubpaths().some(function(t){var e=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?Ar(n,e,r):Ir(n,e,r)})}function yr(t,e,n){void 0===n&&(n={});var i,r=n.interior;if(void 0===r&&(r=!1),r){if(t.containsPoint(e.start))return!0;var o=t.start,a=t.end,s=t.points;i=a.equals(o)?s:s.concat([o])}else i=t.points;for(var l=i.length,c=new di,u=0;u'+t+"";return G.parseXML(e,{async:!1}).documentElement}var n=document.createElementNS(O.svg,"svg");return n.setAttributeNS(O.xmlns,"xmlns:xlink",O.xlink),n.setAttribute("version","1.1"),n},G.createSVGStyle=function(t){return G("style",{type:"text/css"},[G.createCDATASection(t)]).node},G.createCDATASection=function(t){return void 0===t&&(t=""),document.implementation.createDocument(null,"xml",null).createCDATASection(t)},G.idCounter=0,G.uniqueId=function(){return"v-"+ ++G.idCounter},G.toNode=function(t){return G.isV(t)?t.node:t.nodeName&&t||t[0]},G.ensureId=function(t){return(t=G.toNode(t)).id||(t.id=G.uniqueId())},G.sanitizeText=function(t){return(t||"").replace(/ /g,"\xa0")},G.isUndefined=function(t){return void 0===t},G.isString=function(t){return"string"==typeof t},G.isObject=function(t){return t&&"object"==typeof t},G.isArray=Array.isArray,G.parseXML=function(t,e){var n;e=e||{};try{var i=new DOMParser;G.isUndefined(e.async)||(i.async=e.async),n=i.parseFromString(t,"text/xml")}catch(t){n=void 0}if(!n||n.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+t);return n};var i=Object.create(null);["baseFrequency","baseProfile","clipPathUnits","contentScriptType","contentStyleType","diffuseConstant","edgeMode","externalResourcesRequired","filterRes","filterUnits","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].forEach(function(t){return i[t]=t});var s=new Proxy(i,{get:function(t,e){return G.supportCamelCaseAttributes?e in t?t[e]:t[e]=e.replace(/[A-Z]/g,"-$&").toLowerCase():e}});Object.defineProperty(G,"attributeNames",{value:s,writable:!1}),Object.defineProperty(G,"supportCamelCaseAttributes",{value:!1,writable:!0}),G.qualifyAttr=function(t){if(-1===t.indexOf(":"))return{ns:null,local:t};var e=t.split(":");return{ns:O[e[0]],local:e[1]}},G.transformSeparatorRegex=/[ ,]+/,G.transformRegex=/\b\w+\([^()]+\)/g,G.transformFunctionRegex=/\b(\w+)\(([^()]+)\)/,G.transformTranslateRegex=/\btranslate\(([^()]+)\)/,G.transformRotateRegex=/\brotate\(([^()]+)\)/,G.transformScaleRegex=/\bscale\(([^()]+)\)/,G.transformStringToMatrix=function(t){var e=G.createSVGMatrix(),n=t&&t.match(G.transformRegex);if(!n)return e;for(var i=n.length,r=0;r=t.start&&et.start&&n<=t.end||t.start>=e&&t.end=e?t.end+=n:t.start>=e&&(t.start+=n,t.end+=n)}),t},G.convertLineToPathData=function(t){return["M",(t=G(t)).attr("x1"),t.attr("y1"),"L",t.attr("x2"),t.attr("y2")].join(" ")},G.convertPolygonToPathData=function(t){var e=G.getPointsFromSvgNode(t);return 0===e.length?null:G.svgPointsToPath(e)+" Z"},G.convertPolylineToPathData=function(t){var e=G.getPointsFromSvgNode(t);return 0===e.length?null:G.svgPointsToPath(e)},G.svgPointsToPath=function(t){for(var e=0,n=t.length;e=o[r]&&(a.push([e].concat(i.splice(0,o[r]))),o[r]););}),a}(t)),!t||!t.length)return[["M",0,0]];for(var e,n=[],i=0,r=0,o=0,a=0,s=t.length,l=0;lg){var M=x,T=l,S=c;f=t(l=y+i*V(x=b+g*(s&&bp)P=p-1;else if(void 0!==o){if(void 0===I&&""!==c.data)if("auto"===n.lineHeight)I=Al({value:1.5,unit:"em"},l);else I=Al(ml(n.lineHeight,["em","px",""]),l);I*y.length>o&&(P=Math.floor(o/I)-1)}if(null!==P){y.splice(P+1);var z=i.ellipsis;if(!z||P<0)break;"string"!=typeof z&&(z="\u2026");var j=y[P];if(!j&&!M)break;var O,G,E=j.length;do{if(G=j[E],O=j.substring(0,E),G?G.match(h)&&(O+=G):O+=g,O+=z,c.data=O,s.getComputedTextLength()<=r){y[P]=O;break}E--}while(0<=E);break}}}return i.svgDocument?a.removeChild(l):document.body.removeChild(a),y.join(d)},yl=function(t){var e=b(b.parseHTML("
"+t+"
",null,!1));return e.find("*").each(function(){var n=this;b.each(n.attributes,function(){var t=this.name,e=this.value;(t.startsWith("on")||e.startsWith("javascript:")||e.startsWith("data:")||e.startsWith("vbscript:"))&&b(n).removeAttr(t)})}),e.html()},wl=function(t,e){if(window.navigator.msSaveBlob)window.navigator.msSaveBlob(t,e);else{var n=window.URL.createObjectURL(t),i=document.createElement("a");i.href=n,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),window.URL.revokeObjectURL(n)}},bl=function(t){t=t.replace(/\s/g,"");var e,n=(t=decodeURIComponent(t)).indexOf(","),i=t.slice(0,n),r=i.split(":")[1].split(";")[0],o=t.slice(n+1);e=0<=i.indexOf("base64")?atob(o):unescape(encodeURIComponent(o));for(var a=new Uint8Array(e.length),s=0;s')({color:t.color||"blue",opacity:Number.isFinite(t.opacity)?t.opacity:1,outerRadius:e+n,innerRadius:e})},highlight:function(t){return Dl('')({color:t.color||"red",width:Number.isFinite(t.width)?t.width:1,blur:Number.isFinite(t.blur)?t.blur:0,opacity:Number.isFinite(t.opacity)?t.opacity:1})},blur:function(t){var e=Number.isFinite(t.x)?t.x:2;return Dl('')({stdDeviation:Number.isFinite(t.y)?[e,t.y]:e})},dropShadow:function(t){var e="SVGFEDropShadowElement"in window?'':'';return Dl(e)({dx:t.dx||0,dy:t.dy||0,opacity:Number.isFinite(t.opacity)?t.opacity:1,color:t.color||"black",blur:Number.isFinite(t.blur)?t.blur:4})},grayscale:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({a:.2126+.7874*(1-e),b:.7152-.7152*(1-e),c:.0722-.0722*(1-e),d:.2126-.2126*(1-e),e:.7152+.2848*(1-e),f:.0722-.0722*(1-e),g:.2126-.2126*(1-e),h:.0722+.9278*(1-e)})},sepia:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({a:.393+.607*(1-e),b:.769-.769*(1-e),c:.189-.189*(1-e),d:.349-.349*(1-e),e:.686+.314*(1-e),f:.168-.168*(1-e),g:.272-.272*(1-e),h:.534-.534*(1-e),i:.131+.869*(1-e)})},saturate:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:1-e})},hueRotate:function(t){return Dl('')({angle:t.angle||0})},invert:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:e,amount2:1-e})},brightness:function(t){return Dl('')({amount:Number.isFinite(t.amount)?t.amount:1})},contrast:function(t){var e=Number.isFinite(t.amount)?t.amount:1;return Dl('')({amount:e,amount2:.5-e/2})}},kl={number:function(t,e,o){o=o||{currency:["$",""],decimal:".",thousands:",",grouping:[3]};var n=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i.exec(t),i=n[1]||" ",r=n[2]||">",a=n[3]||"",s=n[4]||"",l=n[5],c=+n[6],u=n[7],h=n[8],g=n[9],d=1,f="",p="",m=!1;switch(h&&(h=+h.substring(1)),(l||"0"===i&&"="===r)&&(l=i="0",r="=",u&&(c-=Math.floor((c-1)/4))),g){case"n":u=!0,g="g";break;case"%":d=100,p="%",g="f";break;case"p":d=100,p="%",g="r";break;case"b":case"o":case"x":case"X":"#"===s&&(f="0"+g.toLowerCase());break;case"c":case"d":m=!0,h=0;break;case"s":d=-1,g="r"}"$"===s&&(f=o.currency[0],p=o.currency[1]),"r"!=g||h||(g="g"),null!=h&&("g"==g?h=Math.max(1,Math.min(21,h)):"e"!=g&&"f"!=g||(h=Math.max(0,Math.min(20,h))));var v=l&&u;if(m&&e%1)return"";var I=e<0||0===e&&1/e<0?(e=-e,"-"):a,A=p;if(d<0){var C=this.prefix(e,h);e=C.scale(e),A=C.symbol+p}else e*=d;var y=(e=this.convert(g,e,h)).lastIndexOf("."),w=y<0?e:e.substring(0,y),b=y<0?"":o.decimal+e.substring(y+1);function x(t){for(var e=t.length,n=[],i=0,r=o.grouping[0];0"===r?M+I+e:"^"===r?M.substring(0,N>>=1)+I+e+M.substring(N):I+(v?e:M+e))+A},string:function(t,e){for(var n,i="{",r=!1,o=[];-1!==(n=t.indexOf(i));){var a,s,l;if(a=t.slice(0,n),r){l=(s=a.split(":")).shift().split("."),a=e;for(var c=0;c|\$\{ ?([^{} ]+) ?\}|\{\{([^{} ]+)\}\}/g;return function(i){return i=i||{},t.replace(e,function(t){for(var e=Array.from(arguments).slice(1,4).find(function(t){return!!t}).split("."),n=i[e.shift()];void 0!==n&&e.length;)n=n[e.shift()];return void 0!==n?n:""})}},Ll=function(){};function Pl(t){t=Ms(t);var a=zs(t).reduce(function(t,e){return t[e.id]=e.clone(),t},{});return zs(t).forEach(function(t){var e=a[t.id];if(e.isLink()){var n=e.source(),i=e.target();n.id&&a[n.id]&&e.prop("source/id",a[n.id].id),i.id&&a[i.id]&&e.prop("target/id",a[i.id].id)}var r=t.get("parent");r&&a[r]&&e.set("parent",a[r].id);var o=zs(t.get("embeds")).reduce(function(t,e){return a[e]&&t.push(a[e].id),t},[]);ks(o)||e.set("embeds",o)}),a}var zl=["checked","selected","disabled","readOnly","contentEditable","value","indeterminate"].reduce(function(t,e){return t[e]=!0,t},{}),jl={qualify:function(t){return Ps(t)},set:function(e,t,i){Object.keys(e).forEach(function(t){if(zl[t]&&t in i){var n=e[t];"SELECT"===i.tagName&&Array.isArray(n)?Array.from(i.options).forEach(function(t,e){t.selected=n.includes(t.value)}):i[t]=n}})}};function Ol(o,a){return function(t,e){var n=pl(t);t=parseFloat(t),n&&(t/=100);var i={};if(isFinite(t)){var r=n||0<=t&&t<=1?t*e[a]:Math.max(t+e[a],0);i[o]=r}return i}}function Gl(a,s,l){return function(t,e){var n,i=pl(t);if(t=parseFloat(t),i&&(t/=100),isFinite(t)){var r=e[l]();n=i||0e.width?_l:Hl)(t,e)})},refRCircumscribed:{set:function(t,e){var n=pl(t);t=parseFloat(t),n&&(t/=100);var i,r=Math.sqrt(e.height*e.height+e.width*e.width);return isFinite(t)&&(i=n||0<=t&&t<=1?t*r:Math.max(t+r,0)),{r:i}}},refCx:{set:Ol("cx","width")},refCy:{set:Ol("cy","height")},xAlignment:{offset:El("x","width","right")},yAlignment:{offset:El("y","height","bottom")},resetOffset:{offset:function(t,e){return t?{x:-e.x,y:-e.y}:{x:0,y:0}}},refDResetOffset:{set:Zl({resetOffset:!0})},refDKeepOffset:{set:Zl({resetOffset:!1})},refPointsResetOffset:{set:Rl({resetOffset:!0})},refPointsKeepOffset:{set:Rl({resetOffset:!1})},connection:{qualify:Fl,set:function(t){var e,n=t.stubs;if(void 0===n&&(n=0),isFinite(n)&&0!==n){var i;i=n<0?(this.getConnectionLength()+n)/2:n;var r=this.getConnection(),o=this.getConnectionSubdivisions(),a=r.divideAtLength(i,{segmentSubdivisions:o}),s=r.divideAtLength(-i,{segmentSubdivisions:o});a&&s&&(e=a[0].serialize()+" "+s[1].serialize())}return{d:e||this.getSerializedConnection()}}},atConnectionLengthKeepGradient:{qualify:Fl,set:Yl("getTangentAtLength",{rotate:!0})},atConnectionLengthIgnoreGradient:{qualify:Fl,set:Yl("getTangentAtLength",{rotate:!1})},atConnectionRatioKeepGradient:{qualify:Fl,set:Yl("getTangentAtRatio",{rotate:!0})},atConnectionRatioIgnoreGradient:{qualify:Fl,set:Yl("getTangentAtRatio",{rotate:!1})}};Jl["xlink:href"]=Jl.xlinkHref,["transform","d","points","cx","cy","x1","x2","y1","y2","x","y","dx","dy"].forEach(function(i){Jl[i]={qualify:jn,set:function(t,e){var n;return(n={})[i]=En(t,e),n}}}),["width","height","r","rx","ry","font-size","stroke-width"].forEach(function(i){Jl[i]={qualify:jn,set:function(t,e){var n;return(n={})[i]=Math.max(0,En(t,e)),n}}}),Jl.refR=Jl.refRInscribed,Jl.refD=Jl.refDResetOffset,Jl.refPoints=Jl.refPointsResetOffset,Jl.atConnectionLength=Jl.atConnectionLengthKeepGradient,Jl.atConnectionRatio=Jl.atConnectionRatioKeepGradient,Jl.fontSize=Jl["font-size"],Jl.strokeWidth=Jl["stroke-width"],Jl.refX2=Jl.refX,Jl.refY2=Jl.refY,Jl.refWidth2=Jl.refWidth,Jl.refHeight2=Jl.refHeight,Jl["ref-x"]=Jl.refX,Jl["ref-y"]=Jl.refY,Jl["ref-dy"]=Jl.refDy,Jl["ref-dx"]=Jl.refDx,Jl["ref-width"]=Jl.refWidth,Jl["ref-height"]=Jl.refHeight,Jl["x-alignment"]=Jl.xAlignment,Jl["y-alignment"]=Jl.yAlignment;var Ql=Jl,Kl=c.Model.extend({constructor:function(t,e){var n,i=t||{};"function"==typeof this.preinitialize&&this.preinitialize.apply(this,arguments),this.cid=Qs("c"),this.attributes={},e&&e.collection&&(this.collection=e.collection),e&&e.parse&&(i=this.parse(i,e)||{}),(n=Fs(this,"defaults"))&&(i=Ks({},n,i)),this.set(i,e),this.changed={},this.initialize.apply(this,arguments)},translate:function(t,e,n){throw new Error("Must define a translate() method.")},toJSON:function(){var e=Fs(this.constructor.prototype,"defaults").attrs||{},t=this.attributes.attrs,o={};_s(t,function(t,i){var r=e[i];_s(t,function(t,n){ds(t)&&!Array.isArray(t)?_s(t,function(t,e){r&&r[n]&&Ds(r[n][e],t)||(o[i]=o[i]||{},(o[i][n]||(o[i][n]={}))[e]=t)}):r&&Ds(r[n],t)||(o[i]=o[i]||{},o[i][n]=t)})});var n=Ss(Vs(this.attributes,"attrs"));return n.attrs=o,n},initialize:function(t){var e=this.getIdAttribute();t&&void 0!==t[e]||this.set(e,this.generateId(),{silent:!0}),this._transitionIds={},this._scheduledTransitionIds={},this.processPorts(),this.on("change:attrs",this.processPorts,this)},getIdAttribute:function(){return this.idAttribute||"id"},generateId:function(){return sl()},processPorts:function(){var t=this.ports,n={};_s(this.get("attrs"),function(t,e){t&&t.port&&(void 0!==t.port.id?n[t.port.id]=t.port:n[t.port]={id:t.port})});var i={};(_s(t,function(t,e){n[e]||(i[e]=!0)}),this.graph&&!ks(i))&&(this.graph.getConnectedLinks(this,{inbound:!0}).forEach(function(t){i[t.get("target").port]&&t.remove()}),this.graph.getConnectedLinks(this,{outbound:!0}).forEach(function(t){i[t.get("source").port]&&t.remove()}));this.ports=n},remove:function(t){void 0===t&&(t={});var e=this.graph,n=this.collection;if(!e)return n&&n.remove(this,t),this;e.startBatch("remove");var i=this.getParentCell();i&&i.unembed(this,t);for(var r=this.getEmbeddedCells(),o=0,a=r.length;o";if(i.parseFromString(r.replace(/@/g,""),"application/xml").getElementsByTagName("parsererror")[0])throw new Error("Invalid SVG markup");return e=i.parseFromString(r,"text/html").querySelector("svg"),n=[],Array.from(e.children).forEach(function(t){n.push(function n(t){var e={},i=t.tagName,r=t.attributes,o=t.namespaceURI,a=t.style,s=t.childNodes;e.namespaceURI=o,e.tagName=o===Dr.namespace.xhtml?i.toLowerCase():i;for(var l={},c=a.length;c--;){var u=a[c];l[u]=a.getPropertyValue(u)}e.style=l;var h=r.getNamedItem("@selector");h&&(e.selector=h.value,r.removeNamedItem("@selector"));var g=r.getNamedItem("@group-selector");if(g){var d=g.value.split(",");e.groupSelector=d.map(function(t){return t.trim()}),r.removeNamedItem("@group-selector")}var f=r.getNamedItem("class");f&&(e.className=f.value);var p=[];s.forEach(function(t){switch(t.nodeType){case Node.TEXT_NODE:var e=t.data.replace(/\s\s+/g," ");e.trim()&&p.push(e);break;case Node.ELEMENT_NODE:p.push(n(t))}}),p.length&&(e.children=p);var m={};return Array.from(r).forEach(function(t){var e=t.name,n=t.value;m[e]=n}),0','','','','','','',''].join(""),toolMarkup:['','','','',"Remove link.","",'','','',"Link options.","",""].join(""),doubleToolMarkup:void 0,vertexMarkup:['','','','',"Remove vertex.","",""].join(""),arrowheadMarkup:['','',""].join(""),defaultLabel:void 0,labelMarkup:void 0,_builtins:{defaultLabel:{markup:[{tagName:"rect",selector:"rect"},{tagName:"text",selector:"text"}],attrs:{text:{fill:"#000000",fontSize:14,textAnchor:"middle",yAlignment:"middle",pointerEvents:"none"},rect:{ref:"text",fill:"#ffffff",rx:3,ry:3,refWidth:1,refHeight:1,refX:0,refY:0}},position:{distance:.5}}},defaults:{type:"link",source:{},target:{}},isLink:function(){return!0},disconnect:function(t){return this.set({source:{x:0,y:0},target:{x:0,y:0}},t)},source:function(t,e,n){return void 0===t?Ts(this.get("source")):(r=t instanceof Kl?((i=Ts(e)||{}).id=t.id,n):Ps(t)?(i=t,e):((i=Ts(e)||{}).x=t.x,i.y=t.y,n),this.set("source",i,r));var i,r},target:function(t,e,n){return void 0===t?Ts(this.get("target")):(r=t instanceof Kl?((i=Ts(e)||{}).id=t.id,n):Ps(t)?(i=t,e):((i=Ts(e)||{}).x=t.x,i.y=t.y,n),this.set("target",i,r));var i,r},router:function(t,e,n){if(void 0===t){var i=this.get("router");return i?"object"==typeof i?Ts(i):i:this.get("manhattan")?{name:"orthogonal"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},a=r?e:n;return this.set("router",o,a)},connector:function(t,e,n){if(void 0===t){var i=this.get("connector");return i?"object"==typeof i?Ts(i):i:this.get("smooth")?{name:"smooth"}:null}var r="object"==typeof t||"function"==typeof t,o=r?t:{name:t,args:e},a=r?e:n;return this.set("connector",o,a)},label:function(t,e,n){var i=this.labels();return(t=isFinite(t)&&null!==t?0|t:0)<0&&(t=i.length+t),arguments.length<=1?this.prop(["labels",t]):this.prop(["labels",t],e,n)},labels:function(t,e){return 0===arguments.length?(t=this.get("labels"),Array.isArray(t)?t.slice():[]):(Array.isArray(t)||(t=[]),this.set("labels",t,e))},hasLabels:function(){var t=this.attributes.labels;return Array.isArray(t)&&0 "+e),n=this.getSelector(t.parentNode,n)}return n},addLinkFromMagnet:function(t,e,n){var i=this.paper,r=i.model,o=i.getDefaultLink(this,t);return o.set({source:this.getLinkEnd(t,e,n,o,"source"),target:{x:e,y:n}}).addTo(r,{async:!1,ui:!0}),o.findView(i)},getLinkEnd:function(t){for(var e,n=[],i=arguments.length-1;0r.options.clickThreshold||this.notify("element:magnet:pointerclick",t,e,n,i)}},{Flags:jc});ms(Ec.prototype,Ic);var Bc={N:"S",S:"N",E:"W",W:"E"},Zc={N:-Math.PI/2*3,S:-Math.PI/2,E:0,W:Math.PI};function Rc(t,e,n){var i=new ci(t.x,e.y);return n.containsPoint(i)&&(i=new ci(e.x,t.y)),i}function Yc(t,e){return t["W"===e||"E"===e?"width":"height"]}function Wc(t,e){return t.x===e.x?t.y>e.y?"N":"S":t.y===e.y?t.x>e.x?"W":"E":null}function Uc(t){return new Ti(t.x,t.y,0,0)}function Fc(t){var e=Nl(t.padding||t.elementPadding||20);return{x:-e.left,y:-e.top,width:e.left+e.right,height:e.top+e.bottom}}function Vc(t,e){return t.sourceBBox.clone().moveAndExpand(Fc(e))}function Xc(t,e){return t.targetBBox.clone().moveAndExpand(Fc(e))}function _c(t,e,n){var i=new ci(t.x,e.y),r=new ci(e.x,t.y),o=Wc(t,i),a=Wc(t,r),s=Bc[n],l=o===n||o!==s&&(a===s||a!==n)?i:r;return{points:[l],direction:Wc(l,e)}}function Hc(t,e,n){var i=Rc(t,e,n);return{points:[i],direction:Wc(i,e)}}function Jc(e,t,n,i){var r,o={},a=[new ci(e.x,t.y),new ci(t.x,e.y)],s=a.filter(function(t){return!n.containsPoint(t)}),l=s.filter(function(t){return Wc(t,e)!==i});if(0c.center().distance(t),h=u?e:t,g=u?t:e;return a=Rc(o=r?(o=ci.fromPolar(c.width+c.height,Zc[r],h),c.pointNearestToPoint(o).move(o,-1)):c.pointNearestToPoint(h).move(h,1),g,c),o.round().equals(a.round())?(a=ci.fromPolar(c.width+c.height,Fn(o.theta(h))+Math.PI/2,g),s=Rc(o,a=c.pointNearestToPoint(a).move(g,1).round(),c),l.points=u?[a,s,o]:[o,s,a]):l.points=u?[a,o]:[o,a],l.direction=Wc(u?o:a,e),l}function qc(t,e,n){var i,r,o,a,s,l=Vc(n,e),c=Xc(n,e),u=(r=e,(i=n).sourceAnchor?i.sourceAnchor:Vc(i,r).center()),h=(a=e,(o=n).targetAnchor?o.targetAnchor:Xc(o,a).center());l=l.union(Uc(u)),c=c.union(Uc(h)),(t=zs(t).map(ci)).unshift(u),t.push(h);for(var g=[],d=0,f=t.length-1;di.maxAllowedDirectionChange)){var X=cu(B.clone().offset(S.gridOffsetX,S.gridOffsetY),A,l),_=uu(X);if(!C.isClose(_)&&!n(X)){if(0<=j.indexOf(_))if(!X.equals(d))if(au(V,ou(X,d,z,A,i))>i.maxAllowedDirectionChange)continue;var H=R+S.cost+(W?0:i.penalties[k]);(!C.isOpen(_)||He.point.y,s=e.point.x-t.point.x;n===Au.BOTTOM?(r=a?yu[n]:0<=s?Au.RIGHT:Au.LEFT,0e.point.x,c=e.point.y-t.point.y;n===Au.RIGHT?(r=l?yu[n]:0<=c?Au.BOTTOM:Au.TOP,0e[1].x?"right":"left";switch(i){case"left":o=new ci(-1,0);break;case"right":default:o=new ci(1,0)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case _u.VERTICAL:return function(t,e,n){var i,r,o,a=t.sourceBBox;if(t.sourceView)if(r=t.sourceView.model.angle(),n.rotate&&r){var s=t.sourceView.getNodeUnrotatedBBox(t.sourceView.el),l=e[0].clone();l.rotate(a.center(),r),i=s.sideNearestToPoint(l)}else i=a.sideNearestToPoint(e[0]);else i=a.y>e[1].y?"bottom":"top";switch(i){case"top":o=new ci(0,-1);break;case"bottom":default:o=new ci(0,1)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case _u.CLOSEST_POINT:return qu(t,e,i);case _u.OUTWARDS:return th(t,e,i);case _u.AUTO:default:return Qu(t,e,i)}}(r,h,a,l),d=h[0].distance(h[1])*l.coeff,f=ih(g,h[1].difference(h[0]).normalize());if(f>Math.PI/4){var p=d+(f-Math.PI/4)*l.angleTangentCoefficient;c=g.clone().scale(p,p)}else c=g.clone().scale(d,d)}if(l.targetTangent)u=l.targetTangent;else{var m=function(t,e,n,i){if(i.targetDirection)switch(i.targetDirection){case Hu.UP:return new ci(0,-1);case Hu.DOWN:return new ci(0,1);case Hu.LEFT:return new ci(-1,0);case Hu.RIGHT:return new ci(1,0);case Hu.AUTO:return Ku(t,e,i);case Hu.CLOSEST_POINT:return $u(t,e,i);case Hu.OUTWARDS:return eh(t,e,i);default:return i.targetDirection}switch(n){case _u.HORIZONTAL:return function(t,e,n){var i,r,o,a=t.targetBBox;if(t.targetView)if(r=t.targetView.model.angle(),n.rotate&&r){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),l=e[e.length-1].clone();l.rotate(a.center(),r),i=s.sideNearestToPoint(l)}else i=a.sideNearestToPoint(e[e.length-1]);else i=a.x>e[e.length-2].x?"left":"right";switch(i){case"left":o=new ci(-1,0);break;case"right":default:o=new ci(1,0)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case _u.VERTICAL:return function(t,e,n){var i,r,o,a=t.targetBBox;if(t.targetView)if(r=t.targetView.model.angle(),n.rotate&&r){var s=t.targetView.getNodeUnrotatedBBox(t.targetView.el),l=e[e.length-1].clone();l.rotate(a.center(),r),i=s.sideNearestToPoint(l)}else i=a.sideNearestToPoint(e[e.length-1]);else i=a.y>e[e.length-2].y?"top":"bottom";switch(i){case"top":o=new ci(0,-1);break;case"bottom":default:o=new ci(0,1)}n.rotate&&r&&o.rotate(null,-r);return o}(t,e,i);case _u.CLOSEST_POINT:return $u(t,e,i);case _u.OUTWARDS:return eh(t,e,i);case _u.AUTO:default:return Ku(t,e,i)}}(r,h,a,l),v=h.length-1,I=h[v-1].distance(h[v])*l.coeff,A=ih(m,h[v-1].difference(h[v]).normalize());if(A>Math.PI/4){var C=I+(A-Math.PI/4)*l.angleTangentCoefficient;u=m.clone().scale(C,C)}else u=m.clone().scale(I,I)}var y=function(t,e,n,i){for(var r=i.tau,o=i.coeff,a=[],s=[],l=[],c=t.length-1,u=0;u=Math.abs(t.y-e.y)){var c=(t.x+e.x)/2;l=Ri.createSegment("C",c,t.y,c,e.y,e.x,e.y),r.appendSegment(l)}else{var u=(t.y+e.y)/2;l=Ri.createSegment("C",t.x,u,e.x,u,e.x,e.y),r.appendSegment(l)}}return o?r:r.serialize()},curve:Ju},ah={TOOLS:Pc.Flags.TOOLS,RENDER:"RENDER",UPDATE:"UPDATE",LEGACY_TOOLS:"LEGACY_TOOLS",LABELS:"LABELS",VERTICES:"VERTICES",SOURCE:"SOURCE",TARGET:"TARGET",CONNECTOR:"CONNECTOR"},sh=Pc.extend({className:function(){var t=Pc.prototype.className.apply(this).split(" ");return t.push("link"),t.join(" ")},options:{shortLinkLength:105,doubleLinkTools:!1,longLinkLength:155,linkToolsOffset:40,doubleLinkToolsOffset:65,sampleInterval:50},_labelCache:null,_labelSelectors:null,_markerCache:null,_V:null,_dragData:null,metrics:null,decimalsRounding:2,initialize:function(){Pc.prototype.initialize.apply(this,arguments),this._labelCache={},this._labelSelectors={},this._markerCache={},this._V={},this.cleanNodesCache()},presentationAttributes:{markup:[ah.RENDER],attrs:[ah.UPDATE],router:[ah.UPDATE],connector:[ah.CONNECTOR],smooth:[ah.UPDATE],manhattan:[ah.UPDATE],toolMarkup:[ah.LEGACY_TOOLS],labels:[ah.LABELS],labelMarkup:[ah.LABELS],vertices:[ah.VERTICES,ah.UPDATE],vertexMarkup:[ah.VERTICES],source:[ah.SOURCE,ah.UPDATE],target:[ah.TARGET,ah.UPDATE]},initFlag:[ah.RENDER,ah.SOURCE,ah.TARGET,ah.TOOLS],UPDATE_PRIORITY:1,confirmUpdate:function(t,e){if(e||(e={}),this.hasFlag(t,ah.SOURCE)){if(!this.updateEndProperties("source"))return t;t=this.removeFlag(t,ah.SOURCE)}if(this.hasFlag(t,ah.TARGET)){if(!this.updateEndProperties("target"))return t;t=this.removeFlag(t,ah.TARGET)}var n=this.paper,i=this.sourceView,r=this.targetView;if(n&&(i&&!n.isViewMounted(i)||r&&!n.isViewMounted(r)))return t;if(this.hasFlag(t,ah.RENDER))return this.render(),this.updateHighlighters(!0),this.updateTools(e),t=this.removeFlag(t,[ah.RENDER,ah.UPDATE,ah.VERTICES,ah.LABELS,ah.TOOLS,ah.LEGACY_TOOLS,ah.CONNECTOR]);var o=!1;this.hasFlag(t,ah.VERTICES)&&(this.renderVertexMarkers(),t=this.removeFlag(t,ah.VERTICES));var a=this.model,s=a.attributes,l=this.hasFlag(t,ah.LABELS),c=this.hasFlag(t,ah.LEGACY_TOOLS);l&&(this.onLabelsChange(a,s.labels,e),t=this.removeFlag(t,ah.LABELS),o=!0),c&&(this.renderTools(),t=this.removeFlag(t,ah.LEGACY_TOOLS));var u=this.hasFlag(t,ah.UPDATE),h=this.hasFlag(t,ah.CONNECTOR);return(u||h)&&(u?e.translateBy&&a.isRelationshipEmbeddedIn(e.translateBy)?this.translate(e.tx,e.ty):this.update():(this.updatePath(),this.updateDOM()),this.updateTools(e),t=this.removeFlag(t,[ah.UPDATE,ah.TOOLS,ah.CONNECTOR]),o=!(c=l=!1)),l&&this.updateLabelPositions(),c&&this.updateToolsPosition(),o&&this.updateHighlighters(),this.hasFlag(t,ah.TOOLS)&&(this.updateTools(e),t=this.removeFlag(t,ah.TOOLS)),t},requestConnectionUpdate:function(t){this.requestUpdate(this.getFlag(ah.UPDATE),t)},isLabelsRenderRequired:function(t){void 0===t&&(t={});var e=this.model.previous("labels");if(!e)return!0;if("propertyPathArray"in t&&"propertyValue"in t){var n=t.propertyPathArray||[],i=n.length;if(1=this.options.longLinkLength){var r=this.options.doubleLinkToolsOffset||e;i=this.getPointAtLength(n-r),this._tool2Cache.attr("transform","translate("+i.x+", "+i.y+") "+t),this._tool2Cache.attr("display","inline")}else this.options.doubleLinkTools&&this._tool2Cache.attr("display","none")}return this},updateArrowheadMarkers:function(){if(!this._V.markerArrowheads)return this;if("none"===b.css(this._V.markerArrowheads.node,"display"))return this;var t=this.getConnectionLength()'}),Yh=Ec.extend({presentationAttributes:Ec.addPresentationAttributes({attrs:["SCALE"]}),confirmUpdate:function(){var t=Ec.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"SCALE")&&(this.resize(),t=this.removeFlag(t,"SCALE")),t}}),Wh=Zh.define("basic.Text",{attrs:{text:{"font-size":18,fill:"#000000"}}},{markup:''}),Uh=Zh.define("basic.Circle",{size:{width:60,height:60},attrs:{circle:{fill:"#ffffff",stroke:"#000000",r:30,cx:30,cy:30},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Fh=Zh.define("basic.Ellipse",{size:{width:60,height:40},attrs:{ellipse:{fill:"#ffffff",stroke:"#000000",rx:30,ry:20,cx:30,cy:20},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-y":.5,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Vh=Zh.define("basic.Polygon",{size:{width:60,height:40},attrs:{polygon:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Xh=Zh.define("basic.Polyline",{size:{width:60,height:40},attrs:{polyline:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),_h=Zh.define("basic.Image",{attrs:{text:{"font-size":14,text:"","text-anchor":"middle","ref-x":.5,"ref-dy":20,"y-alignment":"middle",fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Hh=Zh.define("basic.Path",{size:{width:60,height:60},attrs:{path:{fill:"#ffffff",stroke:"#000000"},text:{"font-size":14,text:"","text-anchor":"middle",ref:"path","ref-x":.5,"ref-dy":10,fill:"#000000","font-family":"Arial, helvetica, sans-serif"}}},{markup:''}),Jh=Hh.define("basic.Rhombus",{attrs:{path:{d:"M 30 0 L 60 30 30 60 0 30 z"},text:{"ref-y":.5,"ref-dy":null,"y-alignment":"middle"}}}),Qh=Bh.test("svgforeignobject"),Kh=Zh.define("basic.TextBlock",{attrs:{rect:{fill:"#ffffff",stroke:"#000000",width:80,height:100},text:{fill:"#000000","font-size":14,"font-family":"Arial, helvetica, sans-serif"},".content":{text:"","ref-x":.5,"ref-y":.5,"y-alignment":"middle","x-alignment":"middle"}},content:""},{markup:['','',Qh?'
':'',""].join(""),initialize:function(){this.listenTo(this,"change:size",this.updateSize),this.listenTo(this,"change:content",this.updateContent),this.updateSize(this,this.get("size")),this.updateContent(this,this.get("content")),Zh.prototype.initialize.apply(this,arguments)},updateSize:function(t,e){this.attr({".fobj":ms({},e),div:{style:ms({},e)}})},updateContent:function(t,e){Qh?this.attr({".content":{html:yl(e)}}):this.attr({".content":{text:e}})},setForeignObjectSize:function(){this.updateSize.apply(this,arguments)},setDivContent:function(){this.updateContent.apply(this,arguments)}}),qh=Ec.extend({presentationAttributes:Qh?Ec.prototype.presentationAttributes:Ec.addPresentationAttributes({content:["CONTENT"],size:["CONTENT"]}),initFlag:["RENDER","CONTENT"],confirmUpdate:function(){var t=Ec.prototype.confirmUpdate.apply(this,arguments);return this.hasFlag(t,"CONTENT")&&(this.updateContent(this.model),t=this.removeFlag(t,"CONTENT")),t},update:function(t,e){var n=this.model;if(Qh)Ec.prototype.update.call(this,n,e);else{var i=Vs(e||n.get("attrs"),".content");Ec.prototype.update.call(this,n,i),e&&!Us(e,".content")||this.updateContent(n,e)}},updateContent:function(t,e){var n=Ks({},(e||t.get("attrs"))[".content"]);n=Vs(n,"text");var i=Cl(t.get("content"),t.get("size"),n,{svgDocument:this.paper.svg}),r=rl({},".content",n,"/");r[".content"].text=i,Ec.prototype.update.call(this,t,r)}}),$h={Generic:Zh,Rect:Rh,TextView:Yh,Text:Wh,Circle:Uh,Ellipse:Fh,Polygon:Vh,Polyline:Xh,Image:_h,Path:Hh,Rhombus:Jh,TextBlock:Kh,TextBlockView:qh},tg=Ac.define("standard.Rectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"text",selector:"label"}]}),eg=Ac.define("standard.Circle",{attrs:{body:{refCx:"50%",refCy:"50%",refR:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"circle",selector:"body"},{tagName:"text",selector:"label"}]}),ng=Ac.define("standard.Ellipse",{attrs:{body:{refCx:"50%",refCy:"50%",refRx:"50%",refRy:"50%",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"body"},{tagName:"text",selector:"label"}]}),ig=Ac.define("standard.Path",{attrs:{body:{refD:"M 0 0 L 10 0 10 10 0 10 Z",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"text",selector:"label"}]}),rg=Ac.define("standard.Polygon",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polygon",selector:"body"},{tagName:"text",selector:"label"}]}),og=Ac.define("standard.Polyline",{attrs:{body:{refPoints:"0 0 10 0 10 10 0 10 0 0",strokeWidth:2,stroke:"#333333",fill:"#FFFFFF"},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",fontSize:14,fill:"#333333"}}},{markup:[{tagName:"polyline",selector:"body"},{tagName:"text",selector:"label"}]}),ag=Ac.define("standard.Image",{attrs:{image:{refWidth:"100%",refHeight:"100%"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),sg=Ac.define("standard.BorderedImage",{attrs:{border:{refWidth:"100%",refHeight:"100%",stroke:"#333333",strokeWidth:2},background:{refWidth:-1,refHeight:-1,x:.5,y:.5,fill:"#FFFFFF"},image:{refWidth:-1,refHeight:-1,x:.5,y:.5},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"background",attributes:{stroke:"none"}},{tagName:"image",selector:"image"},{tagName:"rect",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),lg=Ac.define("standard.EmbeddedImage",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#FFFFFF",strokeWidth:2},image:{refWidth:"30%",refHeight:-20,x:10,y:10,preserveAspectRatio:"xMidYMin"},label:{textVerticalAnchor:"top",textAnchor:"left",refX:"30%",refX2:20,refY:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"image",selector:"image"},{tagName:"text",selector:"label"}]}),cg=Ac.define("standard.InscribedImage",{attrs:{border:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",stroke:"#333333",strokeWidth:2},background:{refRx:"50%",refRy:"50%",refCx:"50%",refCy:"50%",fill:"#FFFFFF"},image:{refWidth:"68%",refHeight:"68%",refX:"16%",refY:"16%",preserveAspectRatio:"xMidYMid"},label:{textVerticalAnchor:"top",textAnchor:"middle",refX:"50%",refY:"100%",refY2:10,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"ellipse",selector:"background"},{tagName:"image",selector:"image"},{tagName:"ellipse",selector:"border",attributes:{fill:"none"}},{tagName:"text",selector:"label"}]}),ug=Ac.define("standard.HeaderedRectangle",{attrs:{body:{refWidth:"100%",refHeight:"100%",strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},header:{refWidth:"100%",height:30,strokeWidth:2,stroke:"#000000",fill:"#FFFFFF"},headerText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:15,fontSize:16,fill:"#333333"},bodyText:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"50%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"rect",selector:"body"},{tagName:"rect",selector:"header"},{tagName:"text",selector:"headerText"},{tagName:"text",selector:"bodyText"}]}),hg=Ac.define("standard.Cylinder",{attrs:{body:{lateralArea:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},top:{refCx:"50%",cy:10,refRx:"50%",ry:10,fill:"#FFFFFF",stroke:"#333333",strokeWidth:2},label:{textVerticalAnchor:"middle",textAnchor:"middle",refX:"50%",refY:"100%",refY2:15,fontSize:14,fill:"#333333"}}},{markup:[{tagName:"path",selector:"body"},{tagName:"ellipse",selector:"top"},{tagName:"text",selector:"label"}],topRy:function(t,e){if(void 0===t)return this.attr("body/lateralArea");var n={lateralArea:t},i=pl(t)?{refCy:t,refRy:t,cy:null,ry:null}:{refCy:null,refRy:null,cy:t,ry:t};return this.attr({body:n,top:i},e)}},{attributes:{lateralArea:{set:function(t,e){var n=pl(t);n&&(t=parseFloat(t)/100);var i=e.x,r=e.y,o=e.width,a=e.height,s=o/2,l=n?a*t:t,c=Dr.KAPPA,u=c*s,h=c*(n?a*t:t),g=i+o/2,d=i+o,f=r+l,p=f-l,m=r+a-l,v=r+a;return{d:["M",i,f,"L",i,m,"C",i,m+h,g-u,v,g,v,"C",g+u,v,d,m+h,d,m,"L",d,f,"C",d,f-h,g+u,p,g,p,"C",g-u,p,i,f-h,i,f,"Z"].join(" ")}}}}}),gg=Bh.test("svgforeignobject")?{tagName:"foreignObject",selector:"foreignObject",attributes:{overflow:"hidden"},children:[{tagName:"div",namespaceURI:"http://www.w3.org/1999/xhtml",selector:"label",style:{width:"100%",height:"100%",position:"static",backgroundColor:"transparent",textAlign:"center",margin:0,padding:"0px 5px",boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center"}}]}:{tagName:"text",selector:"label",attributes:{"text-anchor":"middle"}},dg={Rectangle:tg,Circle:eg,Ellipse:ng,Path:ig,Polygon:rg,Polyline:og,Image:ag,BorderedImage:sg,EmbeddedImage:lg,InscribedImage:cg,HeaderedRectangle:ug,Cylinder:hg,TextBlock:Ac.define("standard.TextBlock",{attrs:{body:{refWidth:"100%",refHeight:"100%",stroke:"#333333",fill:"#ffffff",strokeWidth:2},foreignObject:{refWidth:"100%",refHeight:"100%"},label:{style:{fontSize:14}}}},{markup:[{tagName:"rect",selector:"body"},gg]},{attributes:{text:{set:function(t,e,n,i){if(!(n instanceof HTMLElement)){var r=i.style||{},o={text:t,width:-5,height:"100%"},a=ms({textVerticalAnchor:"middle"},r);return Ql.textWrap.set.call(this,o,e,n,a),{fill:r.color||null}}n.textContent=t},position:function(t,e,n){if(n instanceof SVGElement)return e.center()}}}}),Link:pc.define("standard.Link",{attrs:{line:{connection:!0,stroke:"#333333",strokeWidth:2,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 10 -5 0 0 10 5 z"}},wrapper:{connection:!0,strokeWidth:10,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"wrapper",attributes:{fill:"none",cursor:"pointer",stroke:"transparent","stroke-linecap":"round"}},{tagName:"path",selector:"line",attributes:{fill:"none","pointer-events":"none"}}]}),DoubleLink:pc.define("standard.DoubleLink",{attrs:{line:{connection:!0,stroke:"#DDDDDD",strokeWidth:4,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"#000000",d:"M 10 -3 10 -10 -2 0 10 10 10 3"}},outline:{connection:!0,stroke:"#000000",strokeWidth:6,strokeLinejoin:"round"}}},{markup:[{tagName:"path",selector:"outline",attributes:{fill:"none",cursor:"pointer"}},{tagName:"path",selector:"line",attributes:{fill:"none","pointer-events":"none"}}]}),ShadowLink:pc.define("standard.ShadowLink",{attrs:{line:{connection:!0,stroke:"#FF0000",strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",stroke:"none",d:"M 0 -10 -10 0 0 10 z"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}},shadow:{connection:!0,refX:3,refY:6,stroke:"#000000",strokeOpacity:.2,strokeWidth:20,strokeLinejoin:"round",targetMarker:{type:"path",d:"M 0 -10 -10 0 0 10 z",stroke:"none"},sourceMarker:{type:"path",stroke:"none",d:"M -10 -10 0 0 -10 10 0 10 0 -10 z"}}}},{markup:[{tagName:"path",selector:"shadow",attributes:{fill:"none","pointer-events":"none"}},{tagName:"path",selector:"line",attributes:{fill:"none",cursor:"pointer"}}]})},fg=Zh.define("devs.Model",{inPorts:[],outPorts:[],size:{width:80,height:80},attrs:{".":{magnet:!1},".label":{text:"Model","ref-x":.5,"ref-y":10,"font-size":18,"text-anchor":"middle",fill:"#000"},".body":{"ref-width":"100%","ref-height":"100%",stroke:"#000"}},ports:{groups:{in:{position:{name:"left"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"left",args:{y:10}}}},out:{position:{name:"right"},attrs:{".port-label":{fill:"#000"},".port-body":{fill:"#fff",stroke:"#000",r:10,magnet:!0}},label:{position:{name:"right",args:{y:10}}}}}}},{markup:'',portMarkup:'',portLabelMarkup:'',initialize:function(){Zh.prototype.initialize.apply(this,arguments),this.on("change:inPorts change:outPorts",this.updatePortItems,this),this.updatePortItems()},updatePortItems:function(t,e,n){var i=Ms(this.get("inPorts")),r=Ys(Ms(this.get("outPorts")),i),o=this.createPortItems("in",i),a=this.createPortItems("out",r);this.prop("ports/items",o.concat(a),ms({rewrite:!0},n))},createPortItem:function(t,e){return{id:e,group:t,attrs:{".port-label":{text:e}}}},createPortItems:function(t,e){return zs(e).map(this.createPortItem.bind(this,t))},_addGroupPort:function(t,e,n){var i=this.get(e);return this.set(e,Array.isArray(i)?i.concat(t):[t],n)},addOutPort:function(t,e){return this._addGroupPort(t,"outPorts",e)},addInPort:function(t,e){return this._addGroupPort(t,"inPorts",e)},_removeGroupPort:function(t,e,n){return this.set(e,Rs(this.get(e),t),n)},removeOutPort:function(t,e){return this._removeGroupPort(t,"outPorts",e)},removeInPort:function(t,e){return this._removeGroupPort(t,"inPorts",e)},_changeGroup:function(t,e,n){return this.prop("ports/groups/"+t,ds(e)?e:{},n)},changeInGroup:function(t,e){return this._changeGroup("in",t,e)},changeOutGroup:function(t,e){return this._changeGroup("out",t,e)}}),pg=fg.define("devs.Atomic",{size:{width:80,height:80},attrs:{".label":{text:"Atomic"}}}),mg=fg.define("devs.Coupled",{size:{width:200,height:300},attrs:{".label":{text:"Coupled"}}}),vg={Model:fg,Atomic:pg,Coupled:mg,Link:pc.define("devs.Link",{attrs:{".connection":{"stroke-width":2}}})},Ig=Zh.define("logic.Gate",{size:{width:80,height:40},attrs:{".":{magnet:!1},".body":{width:100,height:50},circle:{r:7,stroke:"black",fill:"transparent","stroke-width":2}}},{operation:function(){return!0}}),Ag=Ig.define("logic.IO",{size:{width:60,height:30},attrs:{".body":{fill:"white",stroke:"black","stroke-width":2},".wire":{ref:".body","ref-y":.5,stroke:"black"},text:{fill:"black",ref:".body","ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle","font-weight":"bold","font-variant":"small-caps","text-transform":"capitalize","font-size":"14px"}}},{markup:''}),Cg=Ag.define("logic.Input",{attrs:{".wire":{"ref-dx":0,d:"M 0 0 L 23 0"},circle:{ref:".body","ref-dx":30,"ref-y":.5,magnet:!0,class:"output",port:"out"},text:{text:"input"}}}),yg=Ag.define("logic.Output",{attrs:{".wire":{"ref-x":0,d:"M 0 0 L -23 0"},circle:{ref:".body","ref-x":-30,"ref-y":.5,magnet:"passive",class:"input",port:"in"},text:{text:"output"}}}),wg=Ig.define("logic.Gate11",{attrs:{".input":{ref:".body","ref-x":-2,"ref-y":.5,magnet:"passive",port:"in"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:''}),bg=Ig.define("logic.Gate21",{attrs:{".input1":{ref:".body","ref-x":-2,"ref-y":.3,magnet:"passive",port:"in1"},".input2":{ref:".body","ref-x":-2,"ref-y":.7,magnet:"passive",port:"in2"},".output":{ref:".body","ref-dx":2,"ref-y":.5,magnet:!0,port:"out"}}},{markup:''}),xg=wg.define("logic.Repeater",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzIuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t){return t}}),Ng=wg.define("logic.Not",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PVCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijg0LjY4NTM1MiIKICAgICBpbmtzY2FwZTpjeT0iMTUuMjg4NjI4IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzkuMTU2OTEsMjUgTCA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAyOS4wNDM0NzgsMjUgTCA1LjA0MzQ3ODEsMjUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgZD0iTSAyOC45Njg3NSwyLjU5Mzc1IEwgMjguOTY4NzUsNSBMIDI4Ljk2ODc1LDQ1IEwgMjguOTY4NzUsNDcuNDA2MjUgTCAzMS4xMjUsNDYuMzQzNzUgTCA3Mi4xNTYyNSwyNi4zNDM3NSBMIDcyLjE1NjI1LDIzLjY1NjI1IEwgMzEuMTI1LDMuNjU2MjUgTCAyOC45Njg3NSwyLjU5Mzc1IHogTSAzMS45Njg3NSw3LjQwNjI1IEwgNjguMDkzNzUsMjUgTCAzMS45Njg3NSw0Mi41OTM3NSBMIDMxLjk2ODc1LDcuNDA2MjUgeiIKICAgICAgIGlkPSJwYXRoMjYzOCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2NjY2NjY2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDI2NzEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzYiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA4MCwyNSBBIDQsNCAwIDEgMSA3MiwyNSBBIDQsNCAwIDEgMSA4MCwyNSB6IgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEsMCkiIC8+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t){return!t}}),Mg=bg.define("logic.Or",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik9SIEFOU0kuc3ZnIgogICBpbmtzY2FwZTpvdXRwdXRfZXh0ZW5zaW9uPSJvcmcuaW5rc2NhcGUub3V0cHV0LnN2Zy5pbmtzY2FwZSI+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTAgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjcxNCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iMSA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMC41IDogMC4zMzMzMzMzMyA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODA2IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyODE5IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjM3Mi4wNDcyNCA6IDM1MC43ODczOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI3NDQuMDk0NDggOiA1MjYuMTgxMDkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzc3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49Ijc1IDogNDAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTUwIDogNjAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDYwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTMyNzUiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNTAgOiAzMy4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iMTAwIDogNTAgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDUwIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTU1MzMiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzIgOiAyMS4zMzMzMzMgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNjQgOiAzMiA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMzIgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjU1NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDE2LjY2NjY2NyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDI1IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAyNSA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iNCIKICAgICBpbmtzY2FwZTpjeD0iMTEzLjAwMDM5IgogICAgIGlua3NjYXBlOmN5PSIxMi44OTM3MzEiCiAgICAgaW5rc2NhcGU6ZG9jdW1lbnQtdW5pdHM9InB4IgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImcyNTYwIgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTpncmlkLWJib3g9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1wb2ludHM9InRydWUiCiAgICAgZ3JpZHRvbGVyYW5jZT0iMTAwMDAiCiAgICAgaW5rc2NhcGU6d2luZG93LXdpZHRoPSIxMzk5IgogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9Ijg3NCIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMzciCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii00IgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Im0gNzAsMjUgYyAyMCwwIDI1LDAgMjUsMCIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMSwxNSA1LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzIsMzUgNSwzNSIKICAgICAgIGlkPSJwYXRoMzk0NCIgLz4KICAgIDxnCiAgICAgICBpZD0iZzI1NjAiCiAgICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2LjUsLTM5LjUpIj4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPgo="}}},{operation:function(t,e){return t||e}}),Tg=bg.define("logic.And",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IkFORCBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI4IgogICAgIGlua3NjYXBlOmN4PSI1Ni42OTgzNDgiCiAgICAgaW5rc2NhcGU6Y3k9IjI1LjMyNjg5OSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZvbnQtc2l6ZTptZWRpdW07Zm9udC1zdHlsZTpub3JtYWw7Zm9udC12YXJpYW50Om5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHJldGNoOm5vcm1hbDt0ZXh0LWluZGVudDowO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7bGluZS1oZWlnaHQ6bm9ybWFsO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7ZGlyZWN0aW9uOmx0cjtibG9jay1wcm9ncmVzc2lvbjp0Yjt3cml0aW5nLW1vZGU6bHItdGI7dGV4dC1hbmNob3I6c3RhcnQ7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDozO21hcmtlcjpub25lO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGU7Zm9udC1mYW1pbHk6Qml0c3RyZWFtIFZlcmEgU2FuczstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOkJpdHN0cmVhbSBWZXJhIFNhbnMiCiAgICAgICBkPSJNIDMwLDUgTCAzMCw2LjQyODU3MTQgTCAzMCw0My41NzE0MjkgTCAzMCw0NSBMIDMxLjQyODU3MSw0NSBMIDUwLjQ3NjE5LDQ1IEMgNjEuNzQ0MDk4LDQ1IDcwLjQ3NjE5LDM1Ljk5OTk1NSA3MC40NzYxOSwyNSBDIDcwLjQ3NjE5LDE0LjAwMDA0NSA2MS43NDQwOTksNS4wMDAwMDAyIDUwLjQ3NjE5LDUgQyA1MC40NzYxOSw1IDUwLjQ3NjE5LDUgMzEuNDI4NTcxLDUgTCAzMCw1IHogTSAzMi44NTcxNDMsNy44NTcxNDI5IEMgNDAuODM0MjY0LDcuODU3MTQyOSA0NS45MTgzNjgsNy44NTcxNDI5IDQ4LjA5NTIzOCw3Ljg1NzE0MjkgQyA0OS4yODU3MTQsNy44NTcxNDI5IDQ5Ljg4MDk1Miw3Ljg1NzE0MjkgNTAuMTc4NTcxLDcuODU3MTQyOSBDIDUwLjMyNzM4MSw3Ljg1NzE0MjkgNTAuNDA5MjI3LDcuODU3MTQyOSA1MC40NDY0MjksNy44NTcxNDI5IEMgNTAuNDY1MDI5LDcuODU3MTQyOSA1MC40NzE1NDMsNy44NTcxNDI5IDUwLjQ3NjE5LDcuODU3MTQyOSBDIDYwLjIzNjg1Myw3Ljg1NzE0MyA2Ny4xNDI4NTcsMTUuNDk3MDk4IDY3LjE0Mjg1NywyNSBDIDY3LjE0Mjg1NywzNC41MDI5MDIgNTkuNzYwNjYyLDQyLjE0Mjg1NyA1MCw0Mi4xNDI4NTcgTCAzMi44NTcxNDMsNDIuMTQyODU3IEwgMzIuODU3MTQzLDcuODU3MTQyOSB6IgogICAgICAgaWQ9InBhdGgyODg0IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2NjY2NzY2NjY3Nzc3NzY2NjIiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return t&&e}}),Sg=bg.define("logic.Nor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5PUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjEiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjY3NzY0NCIKICAgICBpbmtzY2FwZTpjeT0iMjIuMTAyMzQ0IgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjM3IgogICAgIGlua3NjYXBlOndpbmRvdy15PSItNCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc5LDI1IEMgOTksMjUgOTUsMjUgOTUsMjUiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEsMTUgNSwxNSIKICAgICAgIGlkPSJwYXRoMzA2MSIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoxLjk5OTk5OTg4O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMyLDM1IDUsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHNvZGlwb2RpOnR5cGU9ImFyYyIKICAgICAgICAgc3R5bGU9ImZpbGw6bm9uZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWpvaW46bWl0ZXI7bWFya2VyOm5vbmU7c3Ryb2tlLW9wYWNpdHk6MTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlIgogICAgICAgICBpZD0icGF0aDI2MDQiCiAgICAgICAgIHNvZGlwb2RpOmN4PSI3NSIKICAgICAgICAgc29kaXBvZGk6Y3k9IjI1IgogICAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgICAgc29kaXBvZGk6cnk9IjQiCiAgICAgICAgIGQ9Ik0gNzksMjUgQSA0LDQgMCAxIDEgNzEsMjUgQSA0LDQgMCAxIDEgNzksMjUgeiIKICAgICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTI2LjUsMzkuNSkiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return!(t||e)}}),kg=bg.define("logic.Nand",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Ik5BTkQgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogIDwvZGVmcz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9ImJhc2UiCiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEuMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiCiAgICAgaW5rc2NhcGU6em9vbT0iMTYiCiAgICAgaW5rc2NhcGU6Y3g9Ijc4LjI4MzMwNyIKICAgICBpbmtzY2FwZTpjeT0iMTYuNDQyODQzIgogICAgIGlua3NjYXBlOmRvY3VtZW50LXVuaXRzPSJweCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJsYXllcjEiCiAgICAgc2hvd2dyaWQ9InRydWUiCiAgICAgaW5rc2NhcGU6Z3JpZC1iYm94PSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtcG9pbnRzPSJ0cnVlIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwMDAwIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM5OSIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NzQiCiAgICAgaW5rc2NhcGU6d2luZG93LXg9IjMzIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOnNuYXAtYmJveD0idHJ1ZSI+CiAgICA8aW5rc2NhcGU6Z3JpZAogICAgICAgaWQ9IkdyaWRGcm9tUHJlMDQ2U2V0dGluZ3MiCiAgICAgICB0eXBlPSJ4eWdyaWQiCiAgICAgICBvcmlnaW54PSIwcHgiCiAgICAgICBvcmlnaW55PSIwcHgiCiAgICAgICBzcGFjaW5neD0iMXB4IgogICAgICAgc3BhY2luZ3k9IjFweCIKICAgICAgIGNvbG9yPSIjMDAwMGZmIgogICAgICAgZW1wY29sb3I9IiMwMDAwZmYiCiAgICAgICBvcGFjaXR5PSIwLjIiCiAgICAgICBlbXBvcGFjaXR5PSIwLjQiCiAgICAgICBlbXBzcGFjaW5nPSI1IgogICAgICAgdmlzaWJsZT0idHJ1ZSIKICAgICAgIGVuYWJsZWQ9InRydWUiIC8+CiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNyI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGcKICAgICBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSIKICAgICBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIgogICAgIGlkPSJsYXllcjEiPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gNzksMjUgQyA5MS44LDI1IDk1LDI1IDk1LDI1IgogICAgICAgaWQ9InBhdGgzMDU5IgogICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDMxLDE1IDUsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMiwzNSA1LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmb250LXNpemU6bWVkaXVtO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtdmFyaWFudDpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3RyZXRjaDpub3JtYWw7dGV4dC1pbmRlbnQ6MDt0ZXh0LWFsaWduOnN0YXJ0O3RleHQtZGVjb3JhdGlvbjpub25lO2xpbmUtaGVpZ2h0Om5vcm1hbDtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt0ZXh0LXRyYW5zZm9ybTpub25lO2RpcmVjdGlvbjpsdHI7YmxvY2stcHJvZ3Jlc3Npb246dGI7d3JpdGluZy1tb2RlOmxyLXRiO3RleHQtYW5jaG9yOnN0YXJ0O2ZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MzttYXJrZXI6bm9uZTt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTtlbmFibGUtYmFja2dyb3VuZDphY2N1bXVsYXRlO2ZvbnQtZmFtaWx5OkJpdHN0cmVhbSBWZXJhIFNhbnM7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjpCaXRzdHJlYW0gVmVyYSBTYW5zIgogICAgICAgZD0iTSAzMCw1IEwgMzAsNi40Mjg1NzE0IEwgMzAsNDMuNTcxNDI5IEwgMzAsNDUgTCAzMS40Mjg1NzEsNDUgTCA1MC40NzYxOSw0NSBDIDYxLjc0NDA5OCw0NSA3MC40NzYxOSwzNS45OTk5NTUgNzAuNDc2MTksMjUgQyA3MC40NzYxOSwxNC4wMDAwNDUgNjEuNzQ0MDk5LDUuMDAwMDAwMiA1MC40NzYxOSw1IEMgNTAuNDc2MTksNSA1MC40NzYxOSw1IDMxLjQyODU3MSw1IEwgMzAsNSB6IE0gMzIuODU3MTQzLDcuODU3MTQyOSBDIDQwLjgzNDI2NCw3Ljg1NzE0MjkgNDUuOTE4MzY4LDcuODU3MTQyOSA0OC4wOTUyMzgsNy44NTcxNDI5IEMgNDkuMjg1NzE0LDcuODU3MTQyOSA0OS44ODA5NTIsNy44NTcxNDI5IDUwLjE3ODU3MSw3Ljg1NzE0MjkgQyA1MC4zMjczODEsNy44NTcxNDI5IDUwLjQwOTIyNyw3Ljg1NzE0MjkgNTAuNDQ2NDI5LDcuODU3MTQyOSBDIDUwLjQ2NTAyOSw3Ljg1NzE0MjkgNTAuNDcxNTQzLDcuODU3MTQyOSA1MC40NzYxOSw3Ljg1NzE0MjkgQyA2MC4yMzY4NTMsNy44NTcxNDMgNjcuMTQyODU3LDE1LjQ5NzA5OCA2Ny4xNDI4NTcsMjUgQyA2Ny4xNDI4NTcsMzQuNTAyOTAyIDU5Ljc2MDY2Miw0Mi4xNDI4NTcgNTAsNDIuMTQyODU3IEwgMzIuODU3MTQzLDQyLjE0Mjg1NyBMIDMyLjg1NzE0Myw3Ljg1NzE0MjkgeiIKICAgICAgIGlkPSJwYXRoMjg4NCIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY2Njc2NjY2Nzc3Nzc2NjYyIgLz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDQwMDgiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return!(t&&e)}}),Dg=bg.define("logic.Xor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhPUiBBTlNJLnN2ZyIKICAgaW5rc2NhcGU6b3V0cHV0X2V4dGVuc2lvbj0ib3JnLmlua3NjYXBlLm91dHB1dC5zdmcuaW5rc2NhcGUiPgogIDxkZWZzCiAgICAgaWQ9ImRlZnM0Ij4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSI1MCA6IDE1IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIyNSA6IDEwIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3MTQiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEgOiAwLjUgOiAxIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjAuNSA6IDAuMzMzMzMzMzMgOiAxIgogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgwNiIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjgxOSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzNzIuMDQ3MjQgOiAzNTAuNzg3MzkgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNzQ0LjA5NDQ4IDogNTI2LjE4MTA5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MjYuMTgxMDkgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMjc3NyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI3NSA6IDQwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjE1MCA6IDYwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA2MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUzMjc1IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjUwIDogMzMuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjEwMCA6IDUwIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiA1MCA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmU1NTMzIgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjMyIDogMjEuMzMzMzMzIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjY0IDogMzIgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDMyIDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI1NTciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxNi42NjY2NjcgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAyNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMjUgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICA8L2RlZnM+CiAgPHNvZGlwb2RpOm5hbWVkdmlldwogICAgIGlkPSJiYXNlIgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOnpvb209IjUuNjU2ODU0MiIKICAgICBpbmtzY2FwZTpjeD0iMjUuOTM4MTE2IgogICAgIGlua3NjYXBlOmN5PSIxNy4yMzAwNSIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJtIDcwLDI1IGMgMjAsMCAyNSwwIDI1LDAiCiAgICAgICBpZD0icGF0aDMwNTkiCiAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5ODg7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzAuMzg1NzE3LDE1IEwgNC45OTk5OTk4LDE1IgogICAgICAgaWQ9InBhdGgzMDYxIiAvPgogICAgPHBhdGgKICAgICAgIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjEuOTk5OTk5NzY7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgIGQ9Ik0gMzEuMzYyMDkxLDM1IEwgNC45OTk5OTk4LDM1IgogICAgICAgaWQ9InBhdGgzOTQ0IiAvPgogICAgPGcKICAgICAgIGlkPSJnMjU2MCIKICAgICAgIGlua3NjYXBlOmxhYmVsPSJMYXllciAxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjYuNSwtMzkuNSkiPgogICAgICA8cGF0aAogICAgICAgICBpZD0icGF0aDM1MTYiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi4yNSw4MS41MDAwMDUgQyAtMy44NDczNzQsODQuMTQ0NDA1IC00LjUsODQuNTAwMDA1IC00LjUsODQuNTAwMDA1IEwgLTguMTU2MjUsODQuNTAwMDA1IEwgLTYuMTU2MjUsODIuMDYyNTA1IEMgLTYuMTU2MjUsODIuMDYyNTA1IC0wLjUsNzUuMDYyNDUxIC0wLjUsNjQuNSBDIC0wLjUsNTMuOTM3NTQ5IC02LjE1NjI1LDQ2LjkzNzUgLTYuMTU2MjUsNDYuOTM3NSBMIC04LjE1NjI1LDQ0LjUgTCAtNC41LDQ0LjUgQyAtMy43MTg3NSw0NS40Mzc1IC0zLjA3ODEyNSw0Ni4xNTYyNSAtMi4yODEyNSw0Ny41IEMgLTAuNDA4NTMxLDUwLjU5OTgxNSAyLjUsNTYuNTI2NjQ2IDIuNSw2NC41IEMgMi41LDcyLjQ1MDY1IC0wLjM5NjY5Nyw3OC4zNzk0MjUgLTIuMjUsODEuNTAwMDA1IHoiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NjY3NjY2Njc2MiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjM7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7c3Ryb2tlLW9wYWNpdHk6MSIKICAgICAgICAgZD0iTSAtMi40MDYyNSw0NC41IEwgLTAuNDA2MjUsNDYuOTM3NSBDIC0wLjQwNjI1LDQ2LjkzNzUgNS4yNSw1My45Mzc1NDkgNS4yNSw2NC41IEMgNS4yNSw3NS4wNjI0NTEgLTAuNDA2MjUsODIuMDYyNSAtMC40MDYyNSw4Mi4wNjI1IEwgLTIuNDA2MjUsODQuNSBMIDAuNzUsODQuNSBMIDE0Ljc1LDg0LjUgQyAxNy4xNTgwNzYsODQuNTAwMDAxIDIyLjQzOTY5OSw4NC41MjQ1MTQgMjguMzc1LDgyLjA5Mzc1IEMgMzQuMzEwMzAxLDc5LjY2Mjk4NiA0MC45MTE1MzYsNzQuNzUwNDg0IDQ2LjA2MjUsNjUuMjE4NzUgTCA0NC43NSw2NC41IEwgNDYuMDYyNSw2My43ODEyNSBDIDM1Ljc1OTM4Nyw0NC43MTU1OSAxOS41MDY1NzQsNDQuNSAxNC43NSw0NC41IEwgMC43NSw0NC41IEwgLTIuNDA2MjUsNDQuNSB6IE0gMy40Njg3NSw0Ny41IEwgMTQuNzUsNDcuNSBDIDE5LjQzNDE3Myw0Ny41IDMzLjAzNjg1LDQ3LjM2OTc5MyA0Mi43MTg3NSw2NC41IEMgMzcuOTUxOTY0LDcyLjkyOTA3NSAzMi4xOTc0NjksNzcuMTgzOTEgMjcsNzkuMzEyNSBDIDIxLjYzOTMzOSw4MS41MDc5MjQgMTcuMTU4MDc1LDgxLjUwMDAwMSAxNC43NSw4MS41IEwgMy41LDgxLjUgQyA1LjM3MzU4ODQsNzguMzkxNTY2IDguMjUsNzIuNDUwNjUgOC4yNSw2NC41IEMgOC4yNSw1Ni41MjY2NDYgNS4zNDE0Njg2LDUwLjU5OTgxNSAzLjQ2ODc1LDQ3LjUgeiIKICAgICAgICAgaWQ9InBhdGg0OTczIgogICAgICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNjc2NjY2NzY2NjY2NjY2Njc2Njc2MiIC8+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K"}}},{operation:function(t,e){return(!t||e)&&(t||!e)}}),Lg=bg.define("logic.Xnor",{attrs:{image:{"xlink:href":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHdpZHRoPSIxMDAiCiAgIGhlaWdodD0iNTAiCiAgIGlkPSJzdmcyIgogICBzb2RpcG9kaTp2ZXJzaW9uPSIwLjMyIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ2IgogICB2ZXJzaW9uPSIxLjAiCiAgIHNvZGlwb2RpOmRvY25hbWU9IlhOT1IgQU5TSS5zdmciCiAgIGlua3NjYXBlOm91dHB1dF9leHRlbnNpb249Im9yZy5pbmtzY2FwZS5vdXRwdXQuc3ZnLmlua3NjYXBlIj4KICA8ZGVmcwogICAgIGlkPSJkZWZzNCI+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogMTUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfej0iNTAgOiAxNSA6IDEiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMjUgOiAxMCA6IDEiCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNzE0IiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDAuNSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxIDogMC41IDogMSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIwLjUgOiAwLjMzMzMzMzMzIDogMSIKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MDYiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI4MTkiCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iMzcyLjA0NzI0IDogMzUwLjc4NzM5IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9Ijc0NC4wOTQ0OCA6IDUyNi4xODEwOSA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTI2LjE4MTA5IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgICA8aW5rc2NhcGU6cGVyc3BlY3RpdmUKICAgICAgIGlkPSJwZXJzcGVjdGl2ZTI3NzciCiAgICAgICBpbmtzY2FwZTpwZXJzcDNkLW9yaWdpbj0iNzUgOiA0MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxNTAgOiA2MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNjAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlMzI3NSIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSI1MCA6IDMzLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSIxMDAgOiA1MCA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF95PSIwIDogMTAwMCA6IDAiCiAgICAgICBpbmtzY2FwZTp2cF94PSIwIDogNTAgOiAxIgogICAgICAgc29kaXBvZGk6dHlwZT0iaW5rc2NhcGU6cGVyc3AzZCIgLz4KICAgIDxpbmtzY2FwZTpwZXJzcGVjdGl2ZQogICAgICAgaWQ9InBlcnNwZWN0aXZlNTUzMyIKICAgICAgIGlua3NjYXBlOnBlcnNwM2Qtb3JpZ2luPSIzMiA6IDIxLjMzMzMzMyA6IDEiCiAgICAgICBpbmtzY2FwZTp2cF96PSI2NCA6IDMyIDogMSIKICAgICAgIGlua3NjYXBlOnZwX3k9IjAgOiAxMDAwIDogMCIKICAgICAgIGlua3NjYXBlOnZwX3g9IjAgOiAzMiA6IDEiCiAgICAgICBzb2RpcG9kaTp0eXBlPSJpbmtzY2FwZTpwZXJzcDNkIiAvPgogICAgPGlua3NjYXBlOnBlcnNwZWN0aXZlCiAgICAgICBpZD0icGVyc3BlY3RpdmUyNTU3IgogICAgICAgaW5rc2NhcGU6cGVyc3AzZC1vcmlnaW49IjI1IDogMTYuNjY2NjY3IDogMSIKICAgICAgIGlua3NjYXBlOnZwX3o9IjUwIDogMjUgOiAxIgogICAgICAgaW5rc2NhcGU6dnBfeT0iMCA6IDEwMDAgOiAwIgogICAgICAgaW5rc2NhcGU6dnBfeD0iMCA6IDI1IDogMSIKICAgICAgIHNvZGlwb2RpOnR5cGU9Imlua3NjYXBlOnBlcnNwM2QiIC8+CiAgPC9kZWZzPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBpZD0iYmFzZSIKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMS4wIgogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp6b29tPSI0IgogICAgIGlua3NjYXBlOmN4PSI5NS43MjM2NiIKICAgICBpbmtzY2FwZTpjeT0iLTI2Ljc3NTAyMyIKICAgICBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0icHgiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ibGF5ZXIxIgogICAgIHNob3dncmlkPSJ0cnVlIgogICAgIGlua3NjYXBlOmdyaWQtYmJveD0idHJ1ZSIKICAgICBpbmtzY2FwZTpncmlkLXBvaW50cz0idHJ1ZSIKICAgICBncmlkdG9sZXJhbmNlPSIxMDAwMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEzOTkiCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iODc0IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzMyIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTpzbmFwLWJib3g9InRydWUiPgogICAgPGlua3NjYXBlOmdyaWQKICAgICAgIGlkPSJHcmlkRnJvbVByZTA0NlNldHRpbmdzIgogICAgICAgdHlwZT0ieHlncmlkIgogICAgICAgb3JpZ2lueD0iMHB4IgogICAgICAgb3JpZ2lueT0iMHB4IgogICAgICAgc3BhY2luZ3g9IjFweCIKICAgICAgIHNwYWNpbmd5PSIxcHgiCiAgICAgICBjb2xvcj0iIzAwMDBmZiIKICAgICAgIGVtcGNvbG9yPSIjMDAwMGZmIgogICAgICAgb3BhY2l0eT0iMC4yIgogICAgICAgZW1wb3BhY2l0eT0iMC40IgogICAgICAgZW1wc3BhY2luZz0iNSIKICAgICAgIHZpc2libGU9InRydWUiCiAgICAgICBlbmFibGVkPSJ0cnVlIiAvPgogIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogIDxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTciPgogICAgPHJkZjpSREY+CiAgICAgIDxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj4KICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD4KICAgICAgICA8ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+CiAgICAgIDwvY2M6V29yaz4KICAgIDwvcmRmOlJERj4KICA8L21ldGFkYXRhPgogIDxnCiAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpZD0ibGF5ZXIxIj4KICAgIDxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyLjAwMDAwMDI0O3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1vcGFjaXR5OjEiCiAgICAgICBkPSJNIDc4LjMzMzMzMiwyNSBDIDkxLjY2NjY2NiwyNSA5NSwyNSA5NSwyNSIKICAgICAgIGlkPSJwYXRoMzA1OSIKICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2MiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk4ODtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMC4zODU3MTcsMTUgTCA0Ljk5OTk5OTgsMTUiCiAgICAgICBpZD0icGF0aDMwNjEiIC8+CiAgICA8cGF0aAogICAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MS45OTk5OTk3NjtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgZD0iTSAzMS4zNjIwOTEsMzUgTCA0Ljk5OTk5OTgsMzUiCiAgICAgICBpZD0icGF0aDM5NDQiIC8+CiAgICA8ZwogICAgICAgaWQ9ImcyNTYwIgogICAgICAgaW5rc2NhcGU6bGFiZWw9IkxheWVyIDEiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNi41LC0zOS41KSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGlkPSJwYXRoMzUxNiIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjI1LDgxLjUwMDAwNSBDIC0zLjg0NzM3NCw4NC4xNDQ0MDUgLTQuNSw4NC41MDAwMDUgLTQuNSw4NC41MDAwMDUgTCAtOC4xNTYyNSw4NC41MDAwMDUgTCAtNi4xNTYyNSw4Mi4wNjI1MDUgQyAtNi4xNTYyNSw4Mi4wNjI1MDUgLTAuNSw3NS4wNjI0NTEgLTAuNSw2NC41IEMgLTAuNSw1My45Mzc1NDkgLTYuMTU2MjUsNDYuOTM3NSAtNi4xNTYyNSw0Ni45Mzc1IEwgLTguMTU2MjUsNDQuNSBMIC00LjUsNDQuNSBDIC0zLjcxODc1LDQ1LjQzNzUgLTMuMDc4MTI1LDQ2LjE1NjI1IC0yLjI4MTI1LDQ3LjUgQyAtMC40MDg1MzEsNTAuNTk5ODE1IDIuNSw1Ni41MjY2NDYgMi41LDY0LjUgQyAyLjUsNzIuNDUwNjUgLTAuMzk2Njk3LDc4LjM3OTQyNSAtMi4yNSw4MS41MDAwMDUgeiIKICAgICAgICAgc29kaXBvZGk6bm9kZXR5cGVzPSJjY2Njc2NjY2NzYyIgLz4KICAgICAgPHBhdGgKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MztzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxIgogICAgICAgICBkPSJNIC0yLjQwNjI1LDQ0LjUgTCAtMC40MDYyNSw0Ni45Mzc1IEMgLTAuNDA2MjUsNDYuOTM3NSA1LjI1LDUzLjkzNzU0OSA1LjI1LDY0LjUgQyA1LjI1LDc1LjA2MjQ1MSAtMC40MDYyNSw4Mi4wNjI1IC0wLjQwNjI1LDgyLjA2MjUgTCAtMi40MDYyNSw4NC41IEwgMC43NSw4NC41IEwgMTQuNzUsODQuNSBDIDE3LjE1ODA3Niw4NC41MDAwMDEgMjIuNDM5Njk5LDg0LjUyNDUxNCAyOC4zNzUsODIuMDkzNzUgQyAzNC4zMTAzMDEsNzkuNjYyOTg2IDQwLjkxMTUzNiw3NC43NTA0ODQgNDYuMDYyNSw2NS4yMTg3NSBMIDQ0Ljc1LDY0LjUgTCA0Ni4wNjI1LDYzLjc4MTI1IEMgMzUuNzU5Mzg3LDQ0LjcxNTU5IDE5LjUwNjU3NCw0NC41IDE0Ljc1LDQ0LjUgTCAwLjc1LDQ0LjUgTCAtMi40MDYyNSw0NC41IHogTSAzLjQ2ODc1LDQ3LjUgTCAxNC43NSw0Ny41IEMgMTkuNDM0MTczLDQ3LjUgMzMuMDM2ODUsNDcuMzY5NzkzIDQyLjcxODc1LDY0LjUgQyAzNy45NTE5NjQsNzIuOTI5MDc1IDMyLjE5NzQ2OSw3Ny4xODM5MSAyNyw3OS4zMTI1IEMgMjEuNjM5MzM5LDgxLjUwNzkyNCAxNy4xNTgwNzUsODEuNTAwMDAxIDE0Ljc1LDgxLjUgTCAzLjUsODEuNSBDIDUuMzczNTg4NCw3OC4zOTE1NjYgOC4yNSw3Mi40NTA2NSA4LjI1LDY0LjUgQyA4LjI1LDU2LjUyNjY0NiA1LjM0MTQ2ODYsNTAuNTk5ODE1IDMuNDY4NzUsNDcuNSB6IgogICAgICAgICBpZD0icGF0aDQ5NzMiCiAgICAgICAgIHNvZGlwb2RpOm5vZGV0eXBlcz0iY2NzY2NjY3NjY2NjY2NjY2NzY2NzYyIgLz4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgICBzb2RpcG9kaTp0eXBlPSJhcmMiCiAgICAgICBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozO3N0cm9rZS1saW5lam9pbjptaXRlcjttYXJrZXI6bm9uZTtzdHJva2Utb3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTtkaXNwbGF5OmlubGluZTtvdmVyZmxvdzp2aXNpYmxlO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiCiAgICAgICBpZD0icGF0aDM1NTEiCiAgICAgICBzb2RpcG9kaTpjeD0iNzUiCiAgICAgICBzb2RpcG9kaTpjeT0iMjUiCiAgICAgICBzb2RpcG9kaTpyeD0iNCIKICAgICAgIHNvZGlwb2RpOnJ5PSI0IgogICAgICAgZD0iTSA3OSwyNSBBIDQsNCAwIDEgMSA3MSwyNSBBIDQsNCAwIDEgMSA3OSwyNSB6IiAvPgogIDwvZz4KPC9zdmc+Cg=="}}},{operation:function(t,e){return(!t||!e)&&(t||e)}}),Pg={Gate:Ig,IO:Ag,Input:Cg,Output:yg,Gate11:wg,Gate21:bg,Repeater:xg,Not:Ng,Or:Mg,And:Tg,Nor:Sg,Nand:kg,Xor:Dg,Xnor:Lg,Wire:pc.define("logic.Wire",{attrs:{".connection":{"stroke-width":2},".marker-vertex":{r:7}},router:{name:"orthogonal"},connector:{name:"rounded",args:{radius:10}}},{arrowheadMarkup:['','',""].join(""),vertexMarkup:['','','','','',"Remove vertex.","","",""].join("")})},zg={KingWhite:Zh.define("chess.KingWhite",{size:{width:42,height:38}},{markup:' '}),KingBlack:Zh.define("chess.KingBlack",{size:{width:42,height:38}},{markup:' '}),QueenWhite:Zh.define("chess.QueenWhite",{size:{width:42,height:38}},{markup:' '}),QueenBlack:Zh.define("chess.QueenBlack",{size:{width:42,height:38}},{markup:' '}),RookWhite:Zh.define("chess.RookWhite",{size:{width:32,height:34}},{markup:' '}),RookBlack:Zh.define("chess.RookBlack",{size:{width:32,height:34}},{markup:' '}),BishopWhite:Zh.define("chess.BishopWhite",{size:{width:38,height:38}},{markup:' '}),BishopBlack:Zh.define("chess.BishopBlack",{size:{width:38,height:38}},{markup:' '}),KnightWhite:Zh.define("chess.KnightWhite",{size:{width:38,height:37}},{markup:' '}),KnightBlack:Zh.define("chess.KnightBlack",{size:{width:38,height:37}},{markup:' '}),PawnWhite:Zh.define("chess.PawnWhite",{size:{width:28,height:33}},{markup:''}),PawnBlack:Zh.define("chess.PawnBlack",{size:{width:28,height:33}},{markup:''})},jg=Ac.define("erd.Entity",{size:{width:150,height:60},attrs:{".outer":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"100,0 100,60 0,60 0,0"},".inner":{fill:"#2ECC71",stroke:"#27AE60","stroke-width":2,points:"95,5 95,55 5,55 5,5",display:"none"},text:{text:"Entity","font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Og=jg.define("erd.WeakEntity",{attrs:{".inner":{display:"auto"},text:{text:"Weak Entity"}}}),Gg=Ac.define("erd.Relationship",{size:{width:80,height:80},attrs:{".outer":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,0 80,40 40,80 0,40"},".inner":{fill:"#3498DB",stroke:"#2980B9","stroke-width":2,points:"40,5 75,40 40,75 5,40",display:"none"},text:{text:"Relationship","font-family":"Arial","font-size":12,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Eg=Gg.define("erd.IdentifyingRelationship",{attrs:{".inner":{display:"auto"},text:{text:"Identifying"}}}),Bg=Ac.define("erd.Attribute",{size:{width:100,height:50},attrs:{ellipse:{transform:"translate(50, 25)"},".outer":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:50,ry:25,fill:"#E67E22"},".inner":{stroke:"#D35400","stroke-width":2,cx:0,cy:0,rx:45,ry:20,fill:"#E67E22",display:"none"},text:{"font-family":"Arial","font-size":14,"ref-x":.5,"ref-y":.5,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Zg=Bg.define("erd.Multivalued",{attrs:{".inner":{display:"block"},text:{text:"multivalued"}}}),Rg=Bg.define("erd.Derived",{attrs:{".outer":{"stroke-dasharray":"3,5"},text:{text:"derived"}}}),Yg=Bg.define("erd.Key",{attrs:{ellipse:{"stroke-width":4},text:{text:"key","font-weight":"800","text-decoration":"underline"}}}),Wg=Bg.define("erd.Normal",{attrs:{text:{text:"Normal"}}}),Ug={Entity:jg,WeakEntity:Og,Relationship:Gg,IdentifyingRelationship:Eg,Attribute:Bg,Multivalued:Zg,Derived:Rg,Key:Yg,Normal:Wg,ISA:Ac.define("erd.ISA",{type:"erd.ISA",size:{width:100,height:50},attrs:{polygon:{points:"0,0 50,50 100,0",fill:"#F1C40F",stroke:"#F39C12","stroke-width":2},text:{text:"ISA","font-size":18,"ref-x":.5,"ref-y":.3,"y-alignment":"middle","text-anchor":"middle"}}},{markup:''}),Line:pc.define("erd.Line",{},{cardinality:function(t){this.set("labels",[{position:-20,attrs:{text:{dy:-8,text:t}}}])}})},Fg={State:Uh.define("fsa.State",{attrs:{circle:{"stroke-width":3},text:{"font-weight":"800"}}}),StartState:Ac.define("fsa.StartState",{size:{width:20,height:20},attrs:{circle:{transform:"translate(10, 10)",r:10,fill:"#000000"}}},{markup:''}),EndState:Ac.define("fsa.EndState",{size:{width:20,height:20},attrs:{".outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#000000"},".inner":{transform:"translate(10, 10)",r:6,fill:"#000000"}}},{markup:''}),Arrow:pc.define("fsa.Arrow",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}},smooth:!0})},Vg={Member:Ac.define("org.Member",{size:{width:180,height:70},attrs:{rect:{width:170,height:60},".card":{fill:"#FFFFFF",stroke:"#000000","stroke-width":2,"pointer-events":"visiblePainted",rx:10,ry:10},image:{width:48,height:48,ref:".card","ref-x":10,"ref-y":5},".rank":{"text-decoration":"underline",ref:".card","ref-x":.9,"ref-y":.2,"font-family":"Courier New","font-size":14,"text-anchor":"end"},".name":{"font-weight":"800",ref:".card","ref-x":.9,"ref-y":.6,"font-family":"Courier New","font-size":14,"text-anchor":"end"}}},{markup:''}),Arrow:pc.define("org.Arrow",{source:{selector:".card"},target:{selector:".card"},attrs:{".connection":{stroke:"#585858","stroke-width":3}},z:-1})},Xg={Place:Zh.define("pn.Place",{size:{width:50,height:50},attrs:{".root":{r:25,fill:"#ffffff",stroke:"#000000",transform:"translate(25, 25)"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:".root",fill:"#000000","font-size":12},".tokens > circle":{fill:"#000000",r:5},".tokens.one > circle":{transform:"translate(25, 25)"},".tokens.two > circle:nth-child(1)":{transform:"translate(19, 25)"},".tokens.two > circle:nth-child(2)":{transform:"translate(31, 25)"},".tokens.three > circle:nth-child(1)":{transform:"translate(18, 29)"},".tokens.three > circle:nth-child(2)":{transform:"translate(25, 19)"},".tokens.three > circle:nth-child(3)":{transform:"translate(32, 29)"},".tokens.alot > text":{transform:"translate(25, 18)","text-anchor":"middle",fill:"#000000"}}},{markup:''}),PlaceView:Ec.extend({presentationAttributes:Ec.addPresentationAttributes({tokens:["TOKENS"]}),initFlag:Ec.prototype.initFlag.concat(["TOKENS"]),confirmUpdate:function(){for(var t,e=[],n=arguments.length;n--;)e[n]=arguments[n];var i=(t=Ec.prototype.confirmUpdate).call.apply(t,[this].concat(e));return this.hasFlag(i,"TOKENS")&&(this.renderTokens(),this.update(),i=this.removeFlag(i,"TOKENS")),i},renderTokens:function(){var e=this.vel.findOne(".tokens").empty();["one","two","three","alot"].forEach(function(t){e.removeClass(t)});var t=this.model.get("tokens");if(t)switch(t){case 1:e.addClass("one"),e.append(Dr("circle"));break;case 2:e.addClass("two"),e.append([Dr("circle"),Dr("circle")]);break;case 3:e.addClass("three"),e.append([Dr("circle"),Dr("circle"),Dr("circle")]);break;default:e.addClass("alot"),e.append(Dr("text").text(t+""))}}}),Transition:Zh.define("pn.Transition",{size:{width:12,height:50},attrs:{rect:{width:12,height:50,fill:"#000000",stroke:"#000000"},".label":{"text-anchor":"middle","ref-x":.5,"ref-y":-20,ref:"rect",fill:"#000000","font-size":12}}},{markup:''}),Link:pc.define("pn.Link",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z"}}})},_g=Zh.define("uml.Class",{attrs:{rect:{width:200},".uml-class-name-rect":{stroke:"black","stroke-width":2,fill:"#3498db"},".uml-class-attrs-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-methods-rect":{stroke:"black","stroke-width":2,fill:"#2980b9"},".uml-class-name-text":{ref:".uml-class-name-rect","ref-y":.5,"ref-x":.5,"text-anchor":"middle","y-alignment":"middle","font-weight":"bold",fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-attrs-text":{ref:".uml-class-attrs-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"},".uml-class-methods-text":{ref:".uml-class-methods-rect","ref-y":5,"ref-x":5,fill:"black","font-size":12,"font-family":"Times New Roman"}},name:[],attributes:[],methods:[]},{markup:['','','',"",'',""].join(""),initialize:function(){this.on("change:name change:attributes change:methods",function(){this.updateRectangles(),this.trigger("uml-update")},this),this.updateRectangles(),Zh.prototype.initialize.apply(this,arguments)},getClassName:function(){return this.get("name")},updateRectangles:function(){var i=this.get("attrs"),t=[{type:"name",text:this.getClassName()},{type:"attrs",text:this.get("attributes")},{type:"methods",text:this.get("methods")}],r=0;t.forEach(function(t){var e=Array.isArray(t.text)?t.text:[t.text],n=20*e.length+20;i[".uml-class-"+t.type+"-text"].text=e.join("\n"),i[".uml-class-"+t.type+"-rect"].height=n,i[".uml-class-"+t.type+"-rect"].transform="translate(0,"+r+")",r+=n})}}),Hg=Ec.extend({initialize:function(){Ec.prototype.initialize.apply(this,arguments),this.listenTo(this.model,"uml-update",function(){this.update(),this.resize()})}}),Jg=_g.define("uml.Abstract",{attrs:{".uml-class-name-rect":{fill:"#e74c3c"},".uml-class-attrs-rect":{fill:"#c0392b"},".uml-class-methods-rect":{fill:"#c0392b"}}},{getClassName:function(){return["<>",this.get("name")]}}),Qg=Hg,Kg=_g.define("uml.Interface",{attrs:{".uml-class-name-rect":{fill:"#f1c40f"},".uml-class-attrs-rect":{fill:"#f39c12"},".uml-class-methods-rect":{fill:"#f39c12"}}},{getClassName:function(){return["<>",this.get("name")]}}),qg={basic:$h,standard:dg,devs:vg,logic:Pg,chess:zg,erd:Ug,fsa:Fg,org:Vg,pn:Xg,uml:{Class:_g,ClassView:Hg,Abstract:Jg,AbstractView:Qg,Interface:Kg,InterfaceView:Hg,Generalization:pc.define("uml.Generalization",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"}}}),Implementation:pc.define("uml.Implementation",{attrs:{".marker-target":{d:"M 20 0 L 0 10 L 20 20 z",fill:"white"},".connection":{"stroke-dasharray":"3,3"}}}),Aggregation:pc.define("uml.Aggregation",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"white"}}}),Composition:pc.define("uml.Composition",{attrs:{".marker-target":{d:"M 40 10 L 20 20 L 0 10 L 20 0 z",fill:"black"}}}),Association:pc.define("uml.Association"),State:Zh.define("uml.State",{attrs:{".uml-state-body":{width:200,height:200,rx:10,ry:10,fill:"#ecf0f1",stroke:"#bdc3c7","stroke-width":3},".uml-state-separator":{stroke:"#bdc3c7","stroke-width":2},".uml-state-name":{ref:".uml-state-body","ref-x":.5,"ref-y":5,"text-anchor":"middle",fill:"#000000","font-family":"Courier New","font-size":14},".uml-state-events":{ref:".uml-state-separator","ref-x":5,"ref-y":5,fill:"#000000","font-family":"Courier New","font-size":14}},name:"State",events:[]},{markup:['','','',"",'','','',""].join(""),initialize:function(){this.on({"change:name":this.updateName,"change:events":this.updateEvents,"change:size":this.updatePath},this),this.updateName(),this.updateEvents(),this.updatePath(),Zh.prototype.initialize.apply(this,arguments)},updateName:function(){this.attr(".uml-state-name/text",this.get("name"))},updateEvents:function(){this.attr(".uml-state-events/text",this.get("events").join("\n"))},updatePath:function(){var t="M 0 20 L "+this.get("size").width+" 20";this.attr(".uml-state-separator/d",t,{silent:!0})}}),StartState:Uh.define("uml.StartState",{type:"uml.StartState",attrs:{circle:{fill:"#34495e",stroke:"#2c3e50","stroke-width":2,rx:1}}}),EndState:Zh.define("uml.EndState",{size:{width:20,height:20},attrs:{"circle.outer":{transform:"translate(10, 10)",r:10,fill:"#ffffff",stroke:"#2c3e50"},"circle.inner":{transform:"translate(10, 10)",r:6,fill:"#34495e"}}},{markup:''}),Transition:pc.define("uml.Transition",{attrs:{".marker-target":{d:"M 10 0 L 0 5 L 10 10 z",fill:"#34495e",stroke:"#2c3e50"},".connection":{stroke:"#2c3e50"}}})}};function $g(t,e){if(0===e)return"0%";return Math.round(t/e*100*1e3)/1e3+"%"}function td(r){return function(t,e,n,i){return(e.isNodeConnection(n)?nd:ed)(r,t,e,n,i)}}function ed(t,e,n,i,r){var o=n.model.angle(),a=n.getNodeUnrotatedBBox(i),s=n.model.getBBox().center();r.rotate(s,o);var l=r.x-a.x,c=r.y-a.y;return t&&(l=$g(l,a.width),c=$g(c,a.height)),e.anchor={name:"topLeft",args:{dx:l,dy:c,rotate:!0}},e}function nd(t,e,n,i,r){var o=n.getConnection();if(!o)return e;var a=o.closestPointLength(r);if(t){var s=o.length();e.anchor={name:"connectionRatio",args:{ratio:a/s}}}else e.anchor={name:"connectionLength",args:{length:a}};return e}var id=Ll,rd=td(!1),od=td(!0),ad={useDefaults:id,pinAbsolute:rd,pinRelative:od},sd=bc.extend({tagName:"circle",svgElement:!0,className:"marker-vertex",events:{mousedown:"onPointerDown",touchstart:"onPointerDown",dblclick:"onDoubleClick",dbltap:"onDoubleClick"},documentEvents:{mousemove:"onPointerMove",touchmove:"onPointerMove",mouseup:"onPointerUp",touchend:"onPointerUp",touchcancel:"onPointerUp"},attributes:{r:6,fill:"#33334F",stroke:"#FFFFFF","stroke-width":2,cursor:"move"},position:function(t,e){var n=this.vel,i=this.options.scale,r=Dr.createSVGMatrix().translate(t,e);i&&(r=r.scale(i)),n.transform(r,{absolute:!0})},onPointerDown:function(t){this.options.guard(t)||(t.stopPropagation(),t.preventDefault(),this.options.paper.undelegateEvents(),this.delegateDocumentEvents(null,t.data),this.trigger("will-change",this,t))},onPointerMove:function(t){this.trigger("changing",this,t)},onDoubleClick:function(t){this.trigger("remove",this,t)},onPointerUp:function(t){this.trigger("changed",this,t),this.undelegateDocumentEvents(),this.options.paper.delegateEvents()}}),ld=jh.extend({name:"vertices",options:{handleClass:sd,snapRadius:20,redundancyRemoval:!0,vertexAdding:!0,stopPropagation:!0,scale:null},children:[{tagName:"path",selector:"connection",className:"joint-vertices-path",attributes:{fill:"none",stroke:"transparent","stroke-width":10,cursor:"cell"}}],handles:null,events:{"mousedown .joint-vertices-path":"onPathPointerDown","touchstart .joint-vertices-path":"onPathPointerDown"},onRender:function(){return this.options.vertexAdding&&(this.renderChildren(),this.updatePath()),this.resetHandles(),this.renderHandles(),this},update:function(){return this.relatedView.model.vertices().length===this.handles.length?this.updateHandles():(this.resetHandles(),this.renderHandles()),this.options.vertexAdding&&this.updatePath(),this},resetHandles:function(){var t=this.handles;if(this.handles=[],this.stopListening(),Array.isArray(t))for(var e=0,n=t.length;e= this.x && p.x <= this.x + this.width && p.y >= this.y && p.y <= this.y + this.height; }, @@ -2230,7 +2233,10 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. if (points.length < 3) { return this; } // we need at least 3 points // TODO: we may also accept startIndex and endIndex to specify where to start and end simplification - var threshold = opt.threshold || 0; // = max distance of middle point from chord to be simplified + + // Due to the nature of the algorithm, we do not use 0 as the default value for `threshold` + // because of the rounding errors that can occur when comparing distances. + var threshold = opt.threshold || 1e-10; // = max distance of middle point from chord to be simplified // start at the beginning of the polyline and go forward var currentIndex = 0; @@ -7136,15 +7142,19 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. */ VPrototype.removeAttr = function(name) { - var qualifiedName = V.qualifyAttr(name); + var trueName = attributeNames[name]; + + var ref = V.qualifyAttr(trueName); + var ns = ref.ns; + var local = ref.local; var el = this.node; - if (qualifiedName.ns) { - if (el.hasAttributeNS(qualifiedName.ns, qualifiedName.local)) { - el.removeAttributeNS(qualifiedName.ns, qualifiedName.local); + if (ns) { + if (el.hasAttributeNS(ns, local)) { + el.removeAttributeNS(ns, local); } - } else if (el.hasAttribute(name)) { - el.removeAttribute(name); + } else if (el.hasAttribute(trueName)) { + el.removeAttribute(trueName); } return this; }; @@ -7165,7 +7175,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. } if (V.isString(name) && V.isUndefined(value)) { - return this.node.getAttribute(name); + return this.node.getAttribute(attributeNames[name]); } if (typeof name === 'object') { @@ -7741,16 +7751,18 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return this; } - var qualifiedName = V.qualifyAttr(name); + var trueName = attributeNames[name]; - if (qualifiedName.ns) { + var ref = V.qualifyAttr(trueName); + var ns = ref.ns; + if (ns) { // Attribute names can be namespaced. E.g. `image` elements // have a `xlink:href` attribute to set the source of the image. - el.setAttributeNS(qualifiedName.ns, name, value); - } else if (name === 'id') { + el.setAttributeNS(ns, trueName, value); + } else if (trueName === 'id') { el.id = value; } else { - el.setAttribute(name, value); + el.setAttribute(trueName, value); } return this; @@ -7859,6 +7871,100 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/. return xml; }; + // Create an empty object which does not inherit any properties from `Object.prototype`. + // This is useful when we want to use an object as a dictionary without having to + // worry about inherited properties such as `toString`, `valueOf` etc. + var _attributeNames = Object.create(null); + + // List of attributes for which not to split camel case words. + // It contains known SVG attribute names and may be extended with user-defined attribute names. + [ + 'baseFrequency', + 'baseProfile', + 'clipPathUnits', + 'contentScriptType', + 'contentStyleType', + 'diffuseConstant', + 'edgeMode', + 'externalResourcesRequired', + 'filterRes', // deprecated + 'filterUnits', + 'gradientTransform', + 'gradientUnits', + 'kernelMatrix', + 'kernelUnitLength', + 'keyPoints', + 'lengthAdjust', + 'limitingConeAngle', + 'markerHeight', + 'markerUnits', + 'markerWidth', + 'maskContentUnits', + 'maskUnits', + 'numOctaves', + 'pathLength', + 'patternContentUnits', + 'patternTransform', + 'patternUnits', + 'pointsAtX', + 'pointsAtY', + 'pointsAtZ', + 'preserveAlpha', + 'preserveAspectRatio', + 'primitiveUnits', + 'refX', + 'refY', + 'requiredExtensions', + 'requiredFeatures', + 'specularConstant', + 'specularExponent', + 'spreadMethod', + 'startOffset', + 'stdDeviation', + 'stitchTiles', + 'surfaceScale', + 'systemLanguage', + 'tableValues', + 'targetX', + 'targetY', + 'textLength', + 'viewBox', + 'viewTarget', // deprecated + 'xChannelSelector', + 'yChannelSelector', + 'zoomAndPan' // deprecated + ].forEach(function (name) { return _attributeNames[name] = name; }); + + var attributeNames = new Proxy(_attributeNames, { + get: function get(cache, name) { + // The cache is a dictionary of attribute names. See `_attributeNames` above. + // If the attribute name is not in the cache, it means that it is not + // a camel-case attribute name. In that case, we need to convert + // the attribute name to dash-separated words. + if (!V.supportCamelCaseAttributes) { return name; } + if (name in cache) { + return cache[name]; + } + // Convert camel case to dash-separated words. + return (cache[name] = name.replace(/[A-Z]/g, '-$&').toLowerCase()); + } + }); + + // Note: The `attributeNames` and `supportCamelCaseAttributes` properties are not enumerable + // in this version to avoid breaking changes. They will be made enumerable in the next major version. + + // Dictionary of attribute names + Object.defineProperty(V, 'attributeNames', { + value: attributeNames, + writable: false, + }); + + // Should camel case attributes be supported? + Object.defineProperty(V, 'supportCamelCaseAttributes', { + value: false, + writable: true, + }); + /** * @param {string} name * @returns {{ns: string|null, local: string}} namespace and attribute name diff --git a/dist/vectorizer.min.js b/dist/vectorizer.min.js index 31a7dd201..05599ae59 100644 --- a/dist/vectorizer.min.js +++ b/dist/vectorizer.min.js @@ -1,8 +1,8 @@ -/*! JointJS v3.7.5 (2023-08-02) - JavaScript diagramming library +/*! JointJS v3.7.6 (2023-10-20) - JavaScript diagramming library This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -if(function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).V=n()}(this,function(){"use strict";var e=Math.round,i=Math.floor,r=Math.PI,a=function(t){return t%360+(t<0?360:0)},s=function(t,n){return n*e(t/n)},c=function(t){return 180*t/r%360},l=function(t,n){return(t=(n=n||!1)?t:t%360)*r/180},o=function(t,n){if(void 0===n)n=void 0===t?1:t,t=0;else if(ni)&&!(new N(t,e).length()>i)},divideAt:function(t){var n=this.pointAt(t);return[new N(this.start,n),new N(n,this.end)]},divideAtLength:function(t){var n=this.pointAtLength(t);return[new N(this.start,n),new N(n,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,n){if(t&&t.intersectionWithLine){var e=t.intersectionWithLine(this,n);return e&&t instanceof N&&(e=e[0]),e}return null},intersectionWithLine:function(t){var n=new L(this.end.x-this.start.x,this.end.y-this.start.y),e=new L(t.end.x-t.start.x,t.end.y-t.start.y),i=n.x*e.y-n.y*e.x,r=new L(t.start.x-this.start.x,t.start.y-this.start.y),s=r.x*e.y-r.y*e.x,o=r.x*n.y-r.y*n.x;if(0===i||s*i<0||o*i<0)return null;if(0a.x+s/2,l=ia.x?r-30:r+30)-u)/(o*o*(i-h))+h:n=o*o/(r-u)-o*o*(i-h)*((e=r>a.y?i+30:i-30)-h)/(s*s*(r-u))+u,new L(e,n).theta(t)},toString:function(){return new L(this.x,this.y).toString()+" "+this.a+" "+this.b}};var F=D,q=Math.abs,V=Math.cos,z=Math.sin,k=Math.min,j=Math.max,G=Math.round,W=Math.pow,B=function(t,n,e,i){if(!(this instanceof B))return new B(t,n,e,i);Object(t)===t&&(n=t.y,e=t.width,i=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===n?0:n,this.width=void 0===e?0:e,this.height=void 0===i?0:i};B.fromEllipse=function(t){return t=new D(t),new B(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},B.fromPointUnion=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];if(0===t.length)return null;var e,i,r,s,o=new L;e=i=1/0,r=s=-1/0;for(var a=0;a=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var n=new B(this).normalize(),e=new B(t).normalize(),i=n.width,r=n.height,s=e.width,o=e.height;if(!(i&&r&&s&&o))return!1;var a=n.x,h=n.y,u=e.x,c=e.y;return s+=u,i+=a,o+=c,r+=h,a<=u&&s<=i&&h<=c&&o<=r},corner:function(){return new L(this.x+this.width,this.y+this.height)},equals:function(t){var n=new B(this).normalize(),e=new B(t).normalize();return n.x===e.x&&n.y===e.y&&n.width===e.width&&n.height===e.height},inflate:function(t,n){return void 0===t&&(t=0),void 0===n&&(n=t),this.x-=t,this.y-=n,this.width+=2*t,this.height+=2*n,this},intersect:function(t){var n=this.origin(),e=this.corner(),i=t.origin(),r=t.corner();if(r.x<=n.x||r.y<=n.y||i.x>=e.x||i.y>=e.y)return null;var s=j(n.x,i.x),o=j(n.y,i.y);return new B(s,o,k(e.x,r.x)-s,k(e.y,r.y)-o)},intersectionWithLine:function(t){var n,e,i=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],r=[],s=[],o=i.length;for(e=0;ec&&(i=(this.x+this.width-c)/(d.x-c)),d.y>l&&(a=(this.y+this.height-l)/(d.y-l));var g=t.topRight();g.x>c&&(r=(this.x+this.width-c)/(g.x-c)),g.yl&&(u=(this.y+this.height-l)/(v.y-l)),{sx:k(e,i,r,s),sy:k(o,a,h,u)}},maxRectUniformScaleToFit:function(t,n){var e=this.maxRectScaleToFit(t,n);return k(e.sx,e.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,n=this.y,e=this.width,i=this.height;return this.width<0&&(t=this.x+this.width,e=-this.width),this.height<0&&(n=this.y+this.height,i=-this.height),this.x=t,this.y=n,this.width=e,this.height=i,this},offset:function(t,n){return L.prototype.offset.call(this,t,n)},origin:function(){return new L(this.x,this.y)},pointNearestToPoint:function(t){if(t=new L(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new L(this.x+this.width,t.y);case"left":return new L(this.x,t.y);case"bottom":return new L(t.x,this.y+this.height);case"top":return new L(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new N(this.topRight(),this.bottomRight())},rightMiddle:function(){return new L(this.x+this.width,this.y+this.height/2)},round:function(t){var n=1;if(t)switch(t){case 1:n=10;break;case 2:n=100;break;case 3:n=1e3;break;default:n=W(10,t)}return this.x=G(this.x*n)/n,this.y=G(this.y*n)/n,this.width=G(this.width*n)/n,this.height=G(this.height*n)/n,this},scale:function(t,n,e){return e=this.origin().scale(t,n,e),this.x=e.x,this.y=e.y,this.width*=t,this.height*=n,this},sideNearestToPoint:function(t){var n=(t=new L(t)).x-this.x,e=this.x+this.width-t.x,i=t.y-this.y,r=n,s="left";return ei.x&&(i=t[n]);var o=[];for(n=0;nf.y||r>l.y&&r<=f.y){var d=l.x-i>f.x-i?l.x-i:f.x-i;0<=d&&(c.x=i+d,c.y=r,u.start=t,u.end=c,h.intersect(u)&&a++)}s=o}return a%2==1},close:function(){var t=this.start,n=this.end,e=this.points;return t&&n&&!t.equals(n)&&e.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new X(Y(this.points))},equals:function(t){if(!t)return!1;var n=this.points,e=t.points,i=n.length;if(e.length!==i)return!1;for(var r=0;rr+o&&i.x>r+o||e.xs+a&&i.y>s+a||e.yn.x&&t.yn.y}function St(t,n){return Vt(t,n,{interior:!1})}function Pt(t,n){return zt(t,n,{interior:!1})}function At(t,n){return kt(t,n,{interior:!1})}function Tt(t,n){return Gt(t,n,{interior:!1})}function Lt(t,n){return Vt(t,n,{interior:!0})}function Et(t,n){return zt(t,n,{interior:!0})}function Ct(t,n){return kt(t,n,{interior:!0})}function Nt(t,n){return Gt(t,n,{interior:!0})}function It(t,n){return Wt(t,n,{interior:!0})}function Mt(t,e,i){return t.getSubpaths().some(function(t){var n=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?Lt(n,e):St(n,e)})}function Rt(t,e,i){return t.getSubpaths().some(function(t){var n=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?Et(n,e):Pt(n,e)})}function Ot(t,n,e){return Ft(t,vt.fromRect(n),e)}function Dt(t,n,e){return jt(t,n,e,{interior:!1})}function Ft(t,n,e){return jt(t,n,e,{interior:!0})}function qt(t,e,i,r){return t.getSubpaths().some(function(t){var n=t.toPolylines(i)[0];return"Z"===t.getSegment(-1).type?Ft(e,n,r):Dt(e,n,r)})}function Vt(t,n,e){void 0===e&&(e={});var i,r=e.interior;if(void 0===r&&(r=!1),r){if(t.containsPoint(n.start))return!0;var s=t.start,o=t.end,a=t.points;i=o.equals(s)?a:a.concat([s])}else i=t.points;for(var h=i.length,u=new N,c=0;c'+t+"";return q.parseXML(n,{async:!1}).documentElement}var e=document.createElementNS(F.svg,"svg");return e.setAttributeNS(F.xmlns,"xmlns:xlink",F.xlink),e.setAttribute("version","1.1"),e},q.createSVGStyle=function(t){return q("style",{type:"text/css"},[q.createCDATASection(t)]).node},q.createCDATASection=function(t){return void 0===t&&(t=""),document.implementation.createDocument(null,"xml",null).createCDATASection(t)},q.idCounter=0,q.uniqueId=function(){return"v-"+ ++q.idCounter},q.toNode=function(t){return q.isV(t)?t.node:t.nodeName&&t||t[0]},q.ensureId=function(t){return(t=q.toNode(t)).id||(t.id=q.uniqueId())},q.sanitizeText=function(t){return(t||"").replace(/ /g,"\xa0")},q.isUndefined=function(t){return void 0===t},q.isString=function(t){return"string"==typeof t},q.isObject=function(t){return t&&"object"==typeof t},q.isArray=Array.isArray,q.parseXML=function(t,n){var e;n=n||{};try{var i=new DOMParser;q.isUndefined(n.async)||(i.async=n.async),e=i.parseFromString(t,"text/xml")}catch(t){e=void 0}if(!e||e.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+t);return e},q.qualifyAttr=function(t){if(-1===t.indexOf(":"))return{ns:null,local:t};var n=t.split(":");return{ns:F[n[0]],local:n[1]}},q.transformSeparatorRegex=/[ ,]+/,q.transformRegex=/\b\w+\([^()]+\)/g,q.transformFunctionRegex=/\b(\w+)\(([^()]+)\)/,q.transformTranslateRegex=/\btranslate\(([^()]+)\)/,q.transformRotateRegex=/\brotate\(([^()]+)\)/,q.transformScaleRegex=/\bscale\(([^()]+)\)/,q.transformStringToMatrix=function(t){var n=q.createSVGMatrix(),e=t&&t.match(q.transformRegex);if(!e)return n;for(var i=e.length,r=0;r=t.start&&nt.start&&e<=t.end||t.start>=n&&t.end=n?t.end+=e:t.start>=n&&(t.start+=e,t.end+=e)}),t},q.convertLineToPathData=function(t){return["M",(t=q(t)).attr("x1"),t.attr("y1"),"L",t.attr("x2"),t.attr("y2")].join(" ")},q.convertPolygonToPathData=function(t){var n=q.getPointsFromSvgNode(t);return 0===n.length?null:q.svgPointsToPath(n)+" Z"},q.convertPolylineToPathData=function(t){var n=q.getPointsFromSvgNode(t);return 0===n.length?null:q.svgPointsToPath(n)},q.svgPointsToPath=function(t){for(var n=0,e=t.length;n=s[r]&&(o.push([n].concat(i.splice(0,s[r]))),s[r]););}),o}(t)),!t||!t.length)return[["M",0,0]];for(var n,e=[],i=0,r=0,s=0,o=0,a=t.length,h=0;hf){var L=A,E=h,C=u;g=t(h=b+i*U(A=P+f*(a&&Pr)&&!(new N(t,e).length()>r)},divideAt:function(t){var n=this.pointAt(t);return[new N(this.start,n),new N(n,this.end)]},divideAtLength:function(t){var n=this.pointAtLength(t);return[new N(this.start,n),new N(n,this.end)]},equals:function(t){return!!t&&this.start.x===t.start.x&&this.start.y===t.start.y&&this.end.x===t.end.x&&this.end.y===t.end.y},intersect:function(t,n){if(t&&t.intersectionWithLine){var e=t.intersectionWithLine(this,n);return e&&t instanceof N&&(e=e[0]),e}return null},intersectionWithLine:function(t){var n=new L(this.end.x-this.start.x,this.end.y-this.start.y),e=new L(t.end.x-t.start.x,t.end.y-t.start.y),r=n.x*e.y-n.y*e.x,i=new L(t.start.x-this.start.x,t.start.y-this.start.y),s=i.x*e.y-i.y*e.x,o=i.x*n.y-i.y*n.x;if(0===r||s*r<0||o*r<0)return null;if(0a.x+s/2,l=ra.x?i-30:i+30)-u)/(o*o*(r-h))+h:n=o*o/(i-u)-o*o*(r-h)*((e=i>a.y?r+30:r-30)-h)/(s*s*(i-u))+u,new L(e,n).theta(t)},toString:function(){return new L(this.x,this.y).toString()+" "+this.a+" "+this.b}};var F=D,q=Math.abs,k=Math.cos,V=Math.sin,z=Math.min,j=Math.max,G=Math.round,W=Math.pow,B=function(t,n,e,r){if(!(this instanceof B))return new B(t,n,e,r);Object(t)===t&&(n=t.y,e=t.width,r=t.height,t=t.x),this.x=void 0===t?0:t,this.y=void 0===n?0:n,this.width=void 0===e?0:e,this.height=void 0===r?0:r};B.fromEllipse=function(t){return t=new D(t),new B(t.x-t.a,t.y-t.b,2*t.a,2*t.b)},B.fromPointUnion=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];if(0===t.length)return null;var e,r,i,s,o=new L;e=r=1/0,i=s=-1/0;for(var a=0;a=this.x&&t.x<=this.x+this.width&&t.y>=this.y&&t.y<=this.y+this.height},containsRect:function(t){var n=new B(this).normalize(),e=new B(t).normalize(),r=n.width,i=n.height,s=e.width,o=e.height;if(!(r&&i&&s&&o))return!1;var a=n.x,h=n.y,u=e.x,c=e.y;return s+=u,r+=a,o+=c,i+=h,a<=u&&s<=r&&h<=c&&o<=i},corner:function(){return new L(this.x+this.width,this.y+this.height)},equals:function(t){var n=new B(this).normalize(),e=new B(t).normalize();return n.x===e.x&&n.y===e.y&&n.width===e.width&&n.height===e.height},inflate:function(t,n){return void 0===t&&(t=0),void 0===n&&(n=t),this.x-=t,this.y-=n,this.width+=2*t,this.height+=2*n,this},intersect:function(t){var n=this.origin(),e=this.corner(),r=t.origin(),i=t.corner();if(i.x<=n.x||i.y<=n.y||r.x>=e.x||r.y>=e.y)return null;var s=j(n.x,r.x),o=j(n.y,r.y);return new B(s,o,z(e.x,i.x)-s,z(e.y,i.y)-o)},intersectionWithLine:function(t){var n,e,r=[this.topLine(),this.rightLine(),this.bottomLine(),this.leftLine()],i=[],s=[],o=r.length;for(e=0;ec&&(r=(this.x+this.width-c)/(d.x-c)),d.y>l&&(a=(this.y+this.height-l)/(d.y-l));var g=t.topRight();g.x>c&&(i=(this.x+this.width-c)/(g.x-c)),g.yl&&(u=(this.y+this.height-l)/(v.y-l)),{sx:z(e,r,i,s),sy:z(o,a,h,u)}},maxRectUniformScaleToFit:function(t,n){var e=this.maxRectScaleToFit(t,n);return z(e.sx,e.sy)},moveAndExpand:function(t){return this.x+=t.x||0,this.y+=t.y||0,this.width+=t.width||0,this.height+=t.height||0,this},normalize:function(){var t=this.x,n=this.y,e=this.width,r=this.height;return this.width<0&&(t=this.x+this.width,e=-this.width),this.height<0&&(n=this.y+this.height,r=-this.height),this.x=t,this.y=n,this.width=e,this.height=r,this},offset:function(t,n){return L.prototype.offset.call(this,t,n)},origin:function(){return new L(this.x,this.y)},pointNearestToPoint:function(t){if(t=new L(t),this.containsPoint(t))switch(this.sideNearestToPoint(t)){case"right":return new L(this.x+this.width,t.y);case"left":return new L(this.x,t.y);case"bottom":return new L(t.x,this.y+this.height);case"top":return new L(t.x,this.y)}return t.adhereToRect(this)},rightLine:function(){return new N(this.topRight(),this.bottomRight())},rightMiddle:function(){return new L(this.x+this.width,this.y+this.height/2)},round:function(t){var n=1;if(t)switch(t){case 1:n=10;break;case 2:n=100;break;case 3:n=1e3;break;default:n=W(10,t)}return this.x=G(this.x*n)/n,this.y=G(this.y*n)/n,this.width=G(this.width*n)/n,this.height=G(this.height*n)/n,this},scale:function(t,n,e){return e=this.origin().scale(t,n,e),this.x=e.x,this.y=e.y,this.width*=t,this.height*=n,this},sideNearestToPoint:function(t){var n=(t=new L(t)).x-this.x,e=this.x+this.width-t.x,r=t.y-this.y,i=n,s="left";return er.x&&(r=t[n]);var o=[];for(n=0;nf.y||i>l.y&&i<=f.y){var d=l.x-r>f.x-r?l.x-r:f.x-r;0<=d&&(c.x=r+d,c.y=i,u.start=t,u.end=c,h.intersect(u)&&a++)}s=o}return a%2==1},close:function(){var t=this.start,n=this.end,e=this.points;return t&&n&&!t.equals(n)&&e.push(t.clone()),this},lengthPoints:function(){return this.points},convexHull:function(){return new X(Y(this.points))},equals:function(t){if(!t)return!1;var n=this.points,e=t.points,r=n.length;if(e.length!==r)return!1;for(var i=0;ii+o&&r.x>i+o||e.xs+a&&r.y>s+a||e.yn.x&&t.yn.y}function St(t,n){return kt(t,n,{interior:!1})}function Pt(t,n){return Vt(t,n,{interior:!1})}function At(t,n){return zt(t,n,{interior:!1})}function Tt(t,n){return Gt(t,n,{interior:!1})}function Lt(t,n){return kt(t,n,{interior:!0})}function Et(t,n){return Vt(t,n,{interior:!0})}function Ct(t,n){return zt(t,n,{interior:!0})}function Nt(t,n){return Gt(t,n,{interior:!0})}function It(t,n){return Wt(t,n,{interior:!0})}function Mt(t,e,r){return t.getSubpaths().some(function(t){var n=t.toPolylines(r)[0];return"Z"===t.getSegment(-1).type?Lt(n,e):St(n,e)})}function Rt(t,e,r){return t.getSubpaths().some(function(t){var n=t.toPolylines(r)[0];return"Z"===t.getSegment(-1).type?Et(n,e):Pt(n,e)})}function Ot(t,n,e){return Ft(t,vt.fromRect(n),e)}function Dt(t,n,e){return jt(t,n,e,{interior:!1})}function Ft(t,n,e){return jt(t,n,e,{interior:!0})}function qt(t,e,r,i){return t.getSubpaths().some(function(t){var n=t.toPolylines(r)[0];return"Z"===t.getSegment(-1).type?Ft(e,n,i):Dt(e,n,i)})}function kt(t,n,e){void 0===e&&(e={});var r,i=e.interior;if(void 0===i&&(i=!1),i){if(t.containsPoint(n.start))return!0;var s=t.start,o=t.end,a=t.points;r=o.equals(s)?a:a.concat([s])}else r=t.points;for(var h=r.length,u=new N,c=0;c'+t+"";return q.parseXML(n,{async:!1}).documentElement}var e=document.createElementNS(F.svg,"svg");return e.setAttributeNS(F.xmlns,"xmlns:xlink",F.xlink),e.setAttribute("version","1.1"),e},q.createSVGStyle=function(t){return q("style",{type:"text/css"},[q.createCDATASection(t)]).node},q.createCDATASection=function(t){return void 0===t&&(t=""),document.implementation.createDocument(null,"xml",null).createCDATASection(t)},q.idCounter=0,q.uniqueId=function(){return"v-"+ ++q.idCounter},q.toNode=function(t){return q.isV(t)?t.node:t.nodeName&&t||t[0]},q.ensureId=function(t){return(t=q.toNode(t)).id||(t.id=q.uniqueId())},q.sanitizeText=function(t){return(t||"").replace(/ /g,"\xa0")},q.isUndefined=function(t){return void 0===t},q.isString=function(t){return"string"==typeof t},q.isObject=function(t){return t&&"object"==typeof t},q.isArray=Array.isArray,q.parseXML=function(t,n){var e;n=n||{};try{var r=new DOMParser;q.isUndefined(n.async)||(r.async=n.async),e=r.parseFromString(t,"text/xml")}catch(t){e=void 0}if(!e||e.getElementsByTagName("parsererror").length)throw new Error("Invalid XML: "+t);return e};var r=Object.create(null);["baseFrequency","baseProfile","clipPathUnits","contentScriptType","contentStyleType","diffuseConstant","edgeMode","externalResourcesRequired","filterRes","filterUnits","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].forEach(function(t){return r[t]=t});var a=new Proxy(r,{get:function(t,n){return q.supportCamelCaseAttributes?n in t?t[n]:t[n]=n.replace(/[A-Z]/g,"-$&").toLowerCase():n}});Object.defineProperty(q,"attributeNames",{value:a,writable:!1}),Object.defineProperty(q,"supportCamelCaseAttributes",{value:!1,writable:!0}),q.qualifyAttr=function(t){if(-1===t.indexOf(":"))return{ns:null,local:t};var n=t.split(":");return{ns:F[n[0]],local:n[1]}},q.transformSeparatorRegex=/[ ,]+/,q.transformRegex=/\b\w+\([^()]+\)/g,q.transformFunctionRegex=/\b(\w+)\(([^()]+)\)/,q.transformTranslateRegex=/\btranslate\(([^()]+)\)/,q.transformRotateRegex=/\brotate\(([^()]+)\)/,q.transformScaleRegex=/\bscale\(([^()]+)\)/,q.transformStringToMatrix=function(t){var n=q.createSVGMatrix(),e=t&&t.match(q.transformRegex);if(!e)return n;for(var r=e.length,i=0;i=t.start&&nt.start&&e<=t.end||t.start>=n&&t.end=n?t.end+=e:t.start>=n&&(t.start+=e,t.end+=e)}),t},q.convertLineToPathData=function(t){return["M",(t=q(t)).attr("x1"),t.attr("y1"),"L",t.attr("x2"),t.attr("y2")].join(" ")},q.convertPolygonToPathData=function(t){var n=q.getPointsFromSvgNode(t);return 0===n.length?null:q.svgPointsToPath(n)+" Z"},q.convertPolylineToPathData=function(t){var n=q.getPointsFromSvgNode(t);return 0===n.length?null:q.svgPointsToPath(n)},q.svgPointsToPath=function(t){for(var n=0,e=t.length;n=s[i]&&(o.push([n].concat(r.splice(0,s[i]))),s[i]););}),o}(t)),!t||!t.length)return[["M",0,0]];for(var n,e=[],r=0,i=0,s=0,o=0,a=t.length,h=0;hf){var L=A,E=h,C=u;g=t(h=b+r*H(A=P+f*(a&&P