/**
 * @license GoJS
 * GoJS v4.0.0 JavaScript Library for Interactive Diagrams, https://gojs.net
 * GoJS and Northwoods Software are registered trademarks of Northwoods Software Corporation, https://nwoods.com.
 * Copyright 1998-2026 by Northwoods Software Corporation.  All Rights Reserved.
 * THIS SOFTWARE IS LICENSED.  THE LICENSE AGREEMENT IS AT: https://gojs.net/4.0.0/license.html.
 * DO NOT MODIFY THIS FILE.  DO NOT DISTRIBUTE A MODIFIED COPY OF THE CONTENTS OF THIS FILE.
 */
(function() {const root=typeof globalThis=="object"&&globalThis||typeof global=="object"&&global.global===global&&global||typeof self=="object"&&self.self===self&&self||{};root.requestAnimationFrame===void 0&&(root.setImmediate===void 0?root.requestAnimationFrame=w=>root.setTimeout(w,0):root.requestAnimationFrame=root.setImmediate);class U{static yr=root.navigator!==void 0&&root.navigator.platform!==void 0&&root.navigator.platform.match(/(iPhone|iPod|iPad|Mac)/i)!==null;static UP(t,e,i){let s=-1;return function(){const n=this,o=arguments;s!==-1&&U.Dc(s),s=U.yn(()=>{s=-1,i||t.apply(n,o)},e),i&&!s&&t.apply(n,o)}}static yn(t,e){return root.setTimeout(t,e)}static Dc(t){root.clearTimeout(t)}static Li(t){return root.document.createElement(t)}static n(t){throw new Error(t)}static L(t,e){let i="The object is frozen, so its properties cannot be set: "+t.toString();e!==void 0&&(i+="  to value: "+e),U.n(i)}static le(t,e,i,s){}static s(t,e,i,s){}static QU(t,e,i){}static Fc(t,e,i){if(t===null||typeof t!="object"){let s=U.eL(e);i!==void 0&&(s+="."+i),U.ri(t,"object",s)}}static S(t,e,i){U.s(t,"function",e,i)}static _U(t,e,i){}static ri(t,e,i,s){}static $(t,e,i,s){let n=U.eL(i);s!==void 0&&(n+="."+s),U.n(n+" is not in the range "+e+": "+t)}static Hi(t){}static wr(t,e){}static jt(t){root.console&&root.console.log(t)}static Z(t){return t!==null&&typeof t=="object"}static nt(t){return typeof t=="function"}static BP=[];static ot(){const t=U.BP.pop();return t===void 0?[]:t}static _(t){t.length=0,U.BP.push(t)}static tB=Object.freeze([]);static eL(t){return t===null?"*":typeof t=="string"?t:U.nt(t)?t.name:""}static Jn(t){return U.nt(t)?t.className?t.className:t.name:U.Z(t)&&t.constructor?U.Jn(t.constructor):typeof t}static oh(t,e){return e==null||e===""?null:U.Z(t)&&e in t||t[e]?t[e]:null}static toString(t){let e=t;return U.Z(t)&&(t.text?e=t.text:t.name?e=t.name:t.key!==void 0?e=t.key:t.id!==void 0?e=t.id:t.constructor===Object&&(t.Text?e=t.Text:t.Name?e=t.Name:t.Key!==void 0?e=t.Key:t.Id!==void 0?e=t.Id:t.ID!==void 0&&(e=t.ID))),e===void 0?"undefined":e===null?"null":e.toString()}static ex(t,e){if(t.hasOwnProperty(e))return!0;let i=Object.getPrototypeOf(t);for(;i&&i!==Function;){if(i.hasOwnProperty(e))return!0;const s=i.eB;if(s&&s[e])return!0;i=Object.getPrototypeOf(i)}return!1}static pR(t){const e=[];let i=0;for(i=0;i<256;i++)e[i]=i;let s=0,n=0;for(i=0;i<256;i++)s=(s+e[i]+119)%256,n=e[i],e[i]=e[s],e[s]=n;i=0,s=0;let o="";for(let r=0;r<t.length;r++)i=(i+1)%256,s=(s+e[i])%256,n=e[i],e[i]=e[s],e[s]=n,o+=String.fromCharCode(t.charCodeAt(r)^e[(e[i]+e[s])%256]);return o}static yR(t){const e="0123456789abcdef",i=[];for(let r=0;r<256;r++)i[e.charAt(r>>4)+e.charAt(r&15)]=String.fromCharCode(r);t.length%2&&(t="0"+t);const s=[];let n=0;for(let r=0;r<t.length;r+=2)s[n++]=i[t.substring(r,r+2)];const o=s.join("");return o===""?"0":o}static we(t){return U.pR(U.yR(t))}static color1="@COLOR1";static color2="@COLOR2";static ix="32ab5ff3b26f42dc0ed90f21422913b5";static um(){const t=new Uint32Array(1);return root.crypto.getRandomValues(t),t[0]/4294967296}}U.vfo="2ee646fdb3";class StringBuilder{VP;constructor(){this.VP=[]}toString(){return this.VP.join("")}add(t){t!==""&&this.VP.push(t)}}class PropertyCollection{}const Figures={None:"None",Rectangle:"Rectangle",Square:"Square",RoundedRectangle:"RoundedRectangle",Border:"Border",RoundedTopRectangle:"RoundedTopRectangle",RoundedBottomRectangle:"RoundedBottomRectangle",RoundedLeftRectangle:"RoundedLeftRectangle",RoundedRightRectangle:"RoundedRightRectangle",Ellipse:"Ellipse",Circle:"Circle",TriangleRight:"TriangleRight",TriangleDown:"TriangleDown",TriangleLeft:"TriangleLeft",TriangleUp:"TriangleUp",Triangle:"Triangle",Diamond:"Diamond",LineH:"LineH",LineV:"LineV",BarH:"BarH",BarV:"BarV",MinusLine:"MinusLine",PlusLine:"PlusLine",XLine:"XLine",LineRight:"LineRight",LineDown:"LineDown",LineLeft:"LineLeft",LineUp:"LineUp",Capsule:"Capsule",Borders:"Borders"},Arrowheads={Standard:"Standard",Backward:"Backward",Triangle:"Triangle",BackwardTriangle:"BackwardTriangle",Boomerang:"Boomerang",BackwardBoomerang:"BackwardBoomerang",SidewaysV:"SidewaysV",BackwardV:"BackwardV",OpenTriangle:"OpenTriangle",BackwardOpenTriangle:"BackwardOpenTriangle",OpenTriangleLine:"OpenTriangleLine",BackwardOpenTriangleLine:"BackwardOpenTriangleLine",OpenTriangleTop:"OpenTriangleTop",BackwardOpenTriangleTop:"BackwardOpenTriangleTop",OpenTriangleBottom:"OpenTriangleBottom",BackwardOpenTriangleBottom:"BackwardOpenTriangleBottom",HalfTriangleTop:"HalfTriangleTop",BackwardHalfTriangleTop:"BackwardHalfTriangleTop",HalfTriangleBottom:"HalfTriangleBottom",BackwardHalfTriangleBottom:"BackwardHalfTriangleBottom",ForwardSemiCircle:"ForwardSemiCircle",BackwardSemiCircle:"BackwardSemiCircle",Feather:"Feather",BackwardFeather:"BackwardFeather",DoubleFeathers:"DoubleFeathers",BackwardDoubleFeathers:"BackwardDoubleFeathers",TripleFeathers:"TripleFeathers",BackwardTripleFeathers:"BackwardTripleFeathers",ForwardSlash:"ForwardSlash",BackSlash:"BackSlash",DoubleForwardSlash:"DoubleForwardSlash",DoubleBackSlash:"DoubleBackSlash",TripleForwardSlash:"TripleForwardSlash",TripleBackSlash:"TripleBackSlash",Fork:"Fork",BackwardFork:"BackwardFork",LineFork:"LineFork",BackwardLineFork:"BackwardLineFork",CircleFork:"CircleFork",BackwardCircleFork:"BackwardCircleFork",CircleLineFork:"CircleLineFork",BackwardCircleLineFork:"BackwardCircleLineFork",Circle:"Circle",Block:"Block",StretchedDiamond:"StretchedDiamond",Diamond:"Diamond",Chevron:"Chevron",StretchedChevron:"StretchedChevron",NormalArrow:"NormalArrow",X:"X",TailedNormalArrow:"TailedNormalArrow",DoubleTriangle:"DoubleTriangle",BigEndArrow:"BigEndArrow",ConcaveTailArrow:"ConcaveTailArrow",RoundedTriangle:"RoundedTriangle",SimpleArrow:"SimpleArrow",AccelerationArrow:"AccelerationArrow",BoxArrow:"BoxArrow",TriangleLine:"TriangleLine",CircleEndedArrow:"CircleEndedArrow",DynamicWidthArrow:"DynamicWidthArrow",EquilibriumArrow:"EquilibriumArrow",FastForward:"FastForward",Kite:"Kite",HalfArrowTop:"HalfArrowTop",HalfArrowBottom:"HalfArrowBottom",OpposingDirectionDoubleArrow:"OpposingDirectionDoubleArrow",PartialDoubleTriangle:"PartialDoubleTriangle",LineCircle:"LineCircle",DoubleLineCircle:"DoubleLineCircle",TripleLineCircle:"TripleLineCircle",CircleLine:"CircleLine",DiamondCircle:"DiamondCircle",PlusCircle:"PlusCircle",OpenRightTriangleTop:"OpenRightTriangleTop",OpenRightTriangleBottom:"OpenRightTriangleBottom",Line:"Line",DoubleLine:"DoubleLine",TripleLine:"TripleLine",PentagonArrow:"PentagonArrow"},PanelTypes={Position:"Position",Horizontal:"Horizontal",Vertical:"Vertical",Spot:"Spot",Auto:"Auto",Table:"Table",Viewbox:"Viewbox",TableRow:"TableRow",TableColumn:"TableColumn",Link:"Link",Grid:"Grid",Graduated:"Graduated"},ToolNames={Action:"Action",Relinking:"Relinking",LinkReshaping:"LinkReshaping",Rotating:"Rotating",Resizing:"Resizing",Linking:"Linking",Dragging:"Dragging",DragSelecting:"DragSelecting",Panning:"Panning",ContextMenu:"ContextMenu",TextEditing:"TextEditing",ClickCreating:"ClickCreating",ClickSelecting:"ClickSelecting"},Builders={Button:"Button",TreeExpanderButton:"TreeExpanderButton",SubGraphExpanderButton:"SubGraphExpanderButton",ToolTip:"ToolTip",ContextMenu:"ContextMenu",ContextMenuButton:"ContextMenuButton",PanelExpanderButton:"PanelExpanderButton",CheckBoxButton:"CheckBoxButton",CheckBox:"CheckBox",AutoRepeatButton:"AutoRepeatButton",ToggleSwitch:"ToggleSwitch",Toggle:"Toggle"},LayerNames={Grid:"Grid",ViewportBackground:"ViewportBackground",Background:"Background",Default:"",Foreground:"Foreground",ViewportForeground:"ViewportForeground",Adornment:"Adornment",Tool:"Tool"};class EmptyIterator{p;constructor(){this.p=[]}[Symbol.iterator](){return this.p.values()}key;value;get iterator(){return this}reset(){}next(){return!1}hasNext(){return!1}first(){return null}any(){return!1}all(){return!0}each(){return this}map(t){return this}filter(){return this}get count(){return 0}Ol(){}toString(){return"EmptyIterator"}static instance=new EmptyIterator}class SingletonIterator{constructor(t){this.key=-1,this.value=t}[Symbol.iterator](){return[this.value].values()}key;value;get iterator(){return this}reset(){this.key=-1}next(){return this.key===-1?(this.key=0,!0):!1}hasNext(){return this.next()}first(){return this.key=0,this.value}any(t){return this.key=-1,t(this.value)}all(t){return this.key=-1,t(this.value)}each(t){return this.key=-1,t(this.value),this}map(t){return new SingletonIterator(t(this.value))}filter(t){return t(this.value)?new SingletonIterator(this.value):EmptyIterator.instance}get count(){return 1}Ol(){this.value=null}toString(){return"SingletonIterator("+this.value+")"}}class ListIterator{Jt;qs;Kt;Ft;constructor(t){this.Jt=t,this.qs=null,t.xr=null,this.Kt=t.at,this.Ft=-1}[Symbol.iterator](){return this.qs===null?this.Jt.r.values():this.Jt.r.filter(this.qs).values()}key;value;get iterator(){return this}get predicate(){return this.qs}set predicate(t){this.qs=t}reset(){const t=this.Jt;t.xr=null,this.Kt=t.at,this.Ft=-1}next(){const t=this.Jt;if(t.at!==this.Kt){if(this.key<0)return!1;U.Hi(t)}const e=t.r,i=e.length;let s=++this.Ft;const n=this.qs;if(n!==null)for(;s<i;){const o=e[s];if(n(o))return this.Ft=s,this.key=s,this.value=o,!0;s++}else{if(s<i)return this.key=s,this.value=e[s],!0;this.Ol()}return!1}hasNext(){return this.next()}first(){const t=this.Jt;this.Kt=t.at,this.Ft=0;const e=t.r,i=e.length,s=this.qs;if(s!==null){let n=0;for(;n<i;){const o=e[n];if(s(o))return this.Ft=n,this.key=n,this.value=o,o;n++}return null}else if(i>0){const n=e[0];return this.key=0,this.value=n,n}else return null}any(t){const e=this.Jt;e.xr=null;const i=e.at;this.Ft=-1;const s=e.r,n=s.length,o=this.qs;for(let r=0;r<n;r++){const l=s[r];if(!(o!==null&&!o(l))){if(t(l))return!0;e.at!==i&&U.Hi(e)}}return!1}all(t){const e=this.Jt;e.xr=null;const i=e.at;this.Ft=-1;const s=e.r,n=s.length,o=this.qs;for(let r=0;r<n;r++){const l=s[r];if(!(o!==null&&!o(l))){if(!t(l))return!1;e.at!==i&&U.Hi(e)}}return!0}each(t){const e=this.Jt;e.xr=null;const i=e.at;this.Ft=-1;const s=e.r,n=s.length,o=this.qs;for(let r=0;r<n;r++){const l=s[r];o!==null&&!o(l)||(t(l),e.at!==i&&U.Hi(e))}return this}map(t){const e=this.Jt;e.xr=null;const i=e.at;this.Ft=-1;const s=[],n=e.r,o=n.length,r=this.qs;for(let a=0;a<o;a++){const h=n[a];r!==null&&!r(h)||(s.push(t(h)),e.at!==i&&U.Hi(e))}const l=new List;return l.r=s,l.qi(),l.iterator}filter(t){const e=this.Jt;e.xr=null;const i=e.at;this.Ft=-1;const s=[],n=e.r,o=n.length,r=this.qs;for(let a=0;a<o;a++){const h=n[a];r!==null&&!r(h)||(t(h)&&s.push(h),e.at!==i&&U.Hi(e))}const l=new List;return l.r=s,l.qi(),l.iterator}get count(){const t=this.qs;if(t!==null){let e=0;const i=this.Jt.r,s=i.length;for(let n=0;n<s;n++)t(i[n])&&e++;return e}else return this.Jt.r.length}Ol(){this.key=-1,this.value=null,this.Kt=-1,this.qs=null,this.Jt.xr=this}toString(){return"ListIterator@"+this.Ft+"/"+this.Jt.count}}class ListIteratorBackwards{Jt;Kt;Ft;constructor(t){this.Jt=t,t.br=null,this.Kt=t.at,this.Ft=t.r.length}[Symbol.iterator](){return this.Jt.r.reverse().values()}key;value;get iterator(){return this}reset(){const t=this.Jt;t.br=null,this.Kt=t.at,this.Ft=t.r.length}next(){const t=this.Jt;if(t.at!==this.Kt){if(this.key<0)return!1;U.Hi(t)}const e=--this.Ft;return e>=0?(this.key=e,this.value=t.r[e],!0):(this.Ol(),!1)}hasNext(){return this.next()}first(){const t=this.Jt;this.Kt=t.at;const e=t.r,i=e.length-1;if(this.Ft=i,i>=0){const s=e[i];return this.key=i,this.value=s,s}else return null}any(t){const e=this.Jt;e.br=null;const i=e.at,s=e.r,n=s.length;this.Ft=n;for(let o=n-1;o>=0;o--){const r=s[o];if(t(r))return!0;e.at!==i&&U.Hi(e)}return!1}all(t){const e=this.Jt;e.br=null;const i=e.at,s=e.r,n=s.length;this.Ft=n;for(let o=n-1;o>=0;o--){const r=s[o];if(!t(r))return!1;e.at!==i&&U.Hi(e)}return!0}each(t){const e=this.Jt;e.br=null;const i=e.at,s=e.r,n=s.length;this.Ft=n;for(let o=n-1;o>=0;o--){const r=s[o];t(r),e.at!==i&&U.Hi(e)}return this}map(t){const e=this.Jt;e.br=null;const i=e.at,s=[],n=e.r,o=n.length;this.Ft=o;for(let l=o-1;l>=0;l--){const a=n[l];s.push(t(a)),e.at!==i&&U.Hi(e)}const r=new List;return r.r=s,r.qi(),r.iterator}filter(t){const e=this.Jt;e.br=null;const i=e.at,s=[],n=e.r,o=n.length;this.Ft=o;for(let l=o-1;l>=0;l--){const a=n[l];t(a)&&s.push(a),e.at!==i&&U.Hi(e)}const r=new List;return r.r=s,r.qi(),r.iterator}get count(){return this.Jt.r.length}Ol(){this.key=-1,this.value=null,this.Kt=-1,this.Jt.br=this}toString(){return"ListIteratorBackwards("+this.Ft+"/"+this.Jt.count+")"}}class List{u;r;at;xr;br;constructor(t){GSet._e(this),this.u=!1,this.r=[],this.at=0,this.xr=null,this.br=null,t!==void 0&&this.addAll(t)}[Symbol.iterator](){return this.r.values()}qi(){let t=this.at;t++,t>999999999&&(t=0),this.at=t}b(){return this.u=!0,this}_t(){return this.u=!1,this}toString(){return"List()#"+GSet.ks(this)}add(t){return this.u&&U.L(this,t),this.r.push(t),this.qi(),this}push(t){this.add(t)}addAll(t){if(t===null)return this;this.u&&U.L(this);const e=this.r;if(t.first){const i=t.iterator;for(;i.next();)e.push(i.value)}else for(const i of t)e.push(i);return this.qi(),this}clear(){this.u&&U.L(this),this.r.length=0,this.qi()}contains(t){return this.has(t)}has(t){return t===null?!1:this.r.indexOf(t)!==-1}indexOf(t){return t===null?-1:this.r.indexOf(t)}elt(t){const e=this.r;return(t<0||t>=e.length)&&U.$(t,"0 <= i < length",List,"elt:i"),e[t]}get(t){return this.elt(t)}setElt(t,e){const i=this.r;(t<0||t>=i.length)&&U.$(t,"0 <= i < length",List,"setElt:i"),this.u&&U.L(this,t),i[t]=e}set(t,e){this.setElt(t,e)}first(){const t=this.r;return t.length===0?null:t[0]}last(){const t=this.r,e=t.length;return e>0?t[e-1]:null}pop(){this.u&&U.L(this);const t=this.r;if(t.length>0){const e=t.pop();return e===void 0?null:e}return null}any(t){const e=this.r,i=this.at,s=e.length;for(let n=0;n<s;n++){if(t(e[n]))return!0;this.at!==i&&U.Hi(this)}return!1}all(t){const e=this.r,i=this.at,s=e.length;for(let n=0;n<s;n++){if(!t(e[n]))return!1;this.at!==i&&U.Hi(this)}return!0}each(t){const e=this.r,i=this.at,s=e.length;for(let n=0;n<s;n++)t(e[n]),this.at!==i&&U.Hi(this);return this}map(t){const e=new List,i=[],s=this.r,n=this.at,o=s.length;for(let r=0;r<o;r++)i.push(t(s[r])),this.at!==n&&U.Hi(this);return e.r=i,e.qi(),e}filter(t){const e=new List,i=[],s=this.r,n=this.at,o=s.length;for(let r=0;r<o;r++){const l=s[r];t(l)&&i.push(l),this.at!==n&&U.Hi(this)}return e.r=i,e.qi(),e}insertAt(t,e){t<0&&U.$(t,">= 0",List,"insertAt:i"),this.u&&U.L(this,t);const i=this.r;t>=i.length?i.push(e):i.splice(t,0,e),this.qi()}remove(t){return this.delete(t)}delete(t){if(t===null)return!1;this.u&&U.L(this,t);const e=this.r,i=e.indexOf(t);return i===-1?!1:(i===e.length-1?e.pop():e.splice(i,1),this.qi(),!0)}removeAt(t){const e=this.r;(t<0||t>=e.length)&&U.$(t,"0 <= i < length",List,"removeAt:i"),this.u&&U.L(this,t),t===e.length-1?e.pop():e.splice(t,1),this.qi()}removeRange(t,e){const i=this.r,s=i.length;if(t<0)t=0;else if(t>=s)return this;if(e<0)return this;if(e>=s&&(e=s-1),t>e)return this;this.u&&U.L(this);let n=t,o=e+1;for(;o<s;)i[n++]=i[o++];return i.length=s-(e-t+1),this.qi(),this}copy(){const t=new List,e=this.r;return e.length>0&&(t.r=Array.prototype.slice.call(e)),t}toArray(){const t=this.r,e=this.count,i=new Array(e);for(let s=0;s<e;s++)i[s]=t[s];return i}get iL(){return this.r}toSet(){const t=new GSet,e=this.r,i=this.count;for(let s=0;s<i;s++)t.add(e[s]);return t}sort(t){return this.u&&U.L(this),this.r.sort(t),this.qi(),this}sortRange(t,e,i){const s=this.r,n=s.length;e===void 0&&(e=0),i===void 0&&(i=n),this.u&&U.L(this);const o=i-e;if(o<=1)return this;if((e<0||e>=n-1)&&U.$(e,"0 <= from < length",List,"sortRange:from"),o===2){const r=s[e],l=s[e+1];return t(r,l)>0&&(s[e]=l,s[e+1]=r,this.qi()),this}if(e===0)if(i>=n)s.sort(t);else{const r=s.slice(0,i);r.sort(t);for(let l=0;l<i;l++)s[l]=r[l]}else if(i>=n){const r=s.slice(e);r.sort(t);for(let l=e;l<n;l++)s[l]=r[l-e]}else{const r=s.slice(e,i);r.sort(t);for(let l=e;l<i;l++)s[l]=r[l-e]}return this.qi(),this}reverse(){return this.u&&U.L(this),this.r.reverse(),this.qi(),this}get count(){return this.r.length}get size(){return this.r.length}get length(){return this.r.length}get iterator(){if(this.r.length<=0)return EmptyIterator.instance;const t=this.xr;return t!==null?(t.reset(),t):new ListIterator(this)}get iteratorBackwards(){if(this.r.length<=0)return EmptyIterator.instance;const t=this.br;return t!==null?(t.reset(),t):new ListIteratorBackwards(this)}}class SetIterator{Oo;ae;constructor(t){this.Oo=t,this.ae=t.p.values()}[Symbol.iterator](){return this.Oo.p.values()}key;value;get iterator(){return this}reset(){const t=this.Oo;this.ae=t.p.values()}next(){const t=this.ae.next();return this.value=t.value,this.key=t.value,!t.done}hasNext(){return this.next()}first(){return this.Oo.p.size===0?null:(this.ae=this.Oo.p.values(),this.ae.next().value)}any(t){return this.Oo.any(t)}all(t){return this.Oo.all(t)}each(t){return this.Oo.each(t),this}map(t){const e=new List;return this.Oo.p.forEach(i=>e.add(t(i))),e.iterator}filter(t){const e=new List;return this.Oo.p.forEach(i=>{t(i)&&e.add(i)}),e.iterator}get count(){return this.Oo.count}Ol(){this.key=null,this.value=null,this.ae=null}toString(){return"SetIterator"}}class GSet{u;p;constructor(t){this.u=!1,this.p=new Set,t!==void 0&&this.addAll(t)}[Symbol.iterator](){return this.p.values()}values(){return this.p.values()}b(){return this.u=!0,this}_t(){return this.u=!1,this}toString(){return"Set()#"+GSet.ks(this)}add(t){return t===null?this:(this.p.add(t),this)}addAll(t){if(t===null)return this;if(this.u&&U.L(this),t.first){const e=t.iterator;for(;e.next();)this.p.add(e.value)}else for(const e of t)this.p.add(e);return this}has(t){return this.p.has(t)}contains(t){return this.has(t)}containsAll(t){if(t===null)return!0;if(t.first){const e=t.iterator;for(;e.next();)if(!this.has(e.value))return!1}else for(const e of t)if(!this.has(e))return!1;return!0}containsAny(t){if(t===null)return!0;if(t.first){const e=t.iterator;for(;e.next();)if(this.has(e.value))return!0}else for(const e of t)if(this.has(e))return!0;return!1}first(){return this.p.size===0?null:this.p.values().next().value}any(t){for(const e of this.p)if(t(e))return!0;return!1}all(t){for(const e of this.p)if(!t(e))return!1;return!0}each(t){for(const e of this.p)t(e);return this}map(t){const e=new GSet;for(const i of this.p)e.add(t(i));return e}filter(t){const e=new GSet;for(const i of this.p)t(i)&&e.add(i);return e}delete(t){return this.u&&U.L(this),this.p.delete(t)}remove(t){return this.delete(t)}removeAll(t){if(t===null)return this;if(this.u&&U.L(this),t.first){const e=t.iterator;for(;e.next();)this.delete(e.value)}else for(const e of t)this.delete(e);return this}retainAll(t){if(t===null)return this;if(this.count===0)return this;this.u&&U.L(this);const e=new GSet;e.addAll(t);const i=[];if(t.first){const s=t.iterator;for(;s.next();){const n=s.value;e.has(n)||i.push(n)}}else for(const s of t)e.has(s)||i.push(s);return this.removeAll(i),this}clear(){this.u&&U.L(this),this.p.clear()}copy(){const t=new GSet;return this.p.forEach(e=>t.add(e)),t}toArray(){return Array.from(this.p)}toList(){const t=new List;return this.p.forEach(e=>t.add(e)),t}get count(){return this.p.size}get size(){return this.p.size}get iterator(){return this.p.size<=0?EmptyIterator.instance:new SetIterator(this)}entries(){return this.p.entries()}keys(){return this.p.keys()}forEach(t,e){return this.p.forEach(t,e)}static nx=1;static _e(t){t.__gohashid=GSet.nx++}static ks(t){return t.__gohashid}}class MapKeySetIterator{W;ae;constructor(t){this.W=t,this.ae=t.p.keys()}[Symbol.iterator](){return this.W.p.keys()}key;value;get iterator(){return this}reset(){const t=this.W;this.ae=t.p.keys()}next(){const t=this.ae.next();return this.value=t.value,this.key=t.value,!t.done}hasNext(){return this.next()}first(){return this.W.p.size===0?null:(this.ae=this.W.p.keys(),this.ae.next().value)}any(t){for(const e of this.W.p)if(t(e[0]))return!0;return!1}all(t){for(const e of this.W.p)if(!t(e[0]))return!1;return!0}each(t){for(const e of this.W.p)t(e[0]);return this}map(t){const e=this.W,i=new List;for(const s of e.p)i.add(t(s[0]));return i.iterator}filter(t){const e=this.W,i=new List;for(const s of e.p){const n=s[0];t(n)&&i.add(n)}return i.iterator}get count(){return this.W.size}Ol(){this.key=null,this.value=null,this.ae=null}toString(){return"MapKeySetIterator"}}class MapKeySet extends GSet{W;constructor(t){super(),GSet._e(this),this.u=!0,this.W=t}[Symbol.iterator](){return this.p.keys()}values(){return this.p.keys()}b(){return this}_t(){return this}toString(){return"MapKeySet("+this.W.toString()+")"}add(t){U.n("This Set is read-only: "+this.toString())}has(t){return this.W.has(t)}contains(t){return this.has(t)}delete(t){U.n("This Set is read-only: "+this.toString())}remove(t){return this.delete(t)}clear(){U.n("This Set is read-only: "+this.toString())}first(){return this.W.p.size===0?null:this.W.p.keys().next().value}any(t){for(const e of this.W.p)if(t(e[0]))return!0;return!1}all(t){for(const e of this.W.p)if(!t(e[0]))return!1;return!0}each(t){for(const e of this.W.p)t(e[0]);return this}map(t){const e=new GSet;for(const i of this.W.p)e.add(t(i[0]));return e}filter(t){const e=new GSet;for(const i of this.W.p){const s=i[0];t(s)&&e.add(s)}return e}copy(){return new MapKeySet(this.W)}toSet(){const t=new GSet,e=this.W.p;for(const i of e)t.add(i[0]);return t}toArray(){const t=this.W.p,e=new Array(t.size);let i=0;for(const s of t)e[i]=s[0],i++;return e}toList(){const t=new List,e=this.W.p;for(const i of e)t.add(i[0]);return t}get count(){return this.W.size}get size(){return this.W.size}get iterator(){return this.W.size<=0?EmptyIterator.instance:new MapKeySetIterator(this.W)}}class MapValueSetIterator{W;ae;constructor(t){this.W=t,this.ae=t.p.values()}[Symbol.iterator](){return this.W.p.values()}key;value;get iterator(){return this}reset(){const t=this.W;this.ae=t.p.values()}next(){const t=this.ae.next();return this.value=t.value,this.key=t.value,!t.done}hasNext(){return this.next()}first(){return this.W.p.size===0?null:(this.ae=this.W.p.values(),this.ae.next().value)}any(t){for(const e of this.W.p)if(t(e[1]))return!0;return!1}all(t){for(const e of this.W.p)if(!t(e[1]))return!1;return!0}each(t){for(const e of this.W.p)t(e[1]);return this}map(t){const e=this.W,i=new List;for(const s of e.p)i.add(t(s[1]));return i.iterator}filter(t){const e=this.W,i=new List;for(const s of e.p){const n=s[1];t(n)&&i.add(n)}return i.iterator}get count(){return this.W.size}Ol(){this.key=null,this.value=null,this.ae=null}toString(){return"MapValueSetIterator"}}class KeyValuePair{constructor(t,e){this.key=t,this.value=e}toString(){return"{"+this.key+":"+this.value+"}"}key;value}class MapIterator{W;ae;constructor(t){this.W=t,this.ae=t.p.entries()}[Symbol.iterator](){return this.W.p.entries()}key;value;get iterator(){return this}reset(){const t=this.W;this.ae=t.p.entries()}next(){const t=this.ae.next();return t.done?(this.key=null,this.value=null,!1):(this.key=t.value[0],this.value=t.value[1],!0)}hasNext(){return this.next()}first(){if(this.W.p.size===0)return null;this.ae=this.W.p.entries();const t=this.ae.next().value;return this.key=t[0],this.value=t[1],new KeyValuePair(t[0],t[1])}any(t){return this.W.any(t)}all(t){return this.W.all(t)}each(t){return this.W.each(t),this}map(t){const e=new List;let i=null;return this.W.p.forEach((s,n)=>{i===null?i=new KeyValuePair(n,s):(i.key=n,i.value=s),e.add(t(i))}),e.iterator}filter(t){const e=new List;let i=null;return this.W.p.forEach((s,n)=>{i===null?i=new KeyValuePair(n,s):(i.key=n,i.value=s),t(i)&&(e.add(i),i=null)}),e.iterator}get count(){return this.W.size}Ol(){this.key=null,this.value=null,this.ae=null}toString(){return"MapIterator"}}class GMap{u;p;constructor(t){GSet._e(this),this.u=!1,this.p=new Map,t!==void 0&&this.addAll(t)}[Symbol.iterator](){return this.p.entries()}entries(){return this.p.entries()}b(){return this.u=!0,this}_t(){return this.u=!1,this}toString(){return"Map()#"+GSet.ks(this)}set(t,e){return this.u&&U.L(this,t),this.p.set(t,e),this}add(t,e){return this.set(t,e)}addAll(t){if(t===null)return this;if(this.u&&U.L(this),t instanceof GMap){const e=t.iterator;for(;e.next();)this.p.set(e.key,e.value)}else if(t.first){const e=t.iterator;for(;e.next();){const i=e.value;this.p.set(i.key,i.value)}}else for(const e of t){const i=e;Array.isArray(i)?this.p.set(i[0],i[1]):this.p.set(i.key,i.value)}return this}first(){if(this.p.size===0)return null;const t=this.p.entries().next().value;return t?new KeyValuePair(t[0],t[1]):null}any(t){let e=null;for(const[i,s]of this.p)if(e===null?e=new KeyValuePair(i,s):(e.key=i,e.value=s),t(e))return!0;return!1}all(t){let e=null;for(const[i,s]of this.p)if(e===null?e=new KeyValuePair(i,s):(e.key=i,e.value=s),!t(e))return!1;return!0}each(t){let e=null;for(const[i,s]of this.p)e===null?e=new KeyValuePair(i,s):(e.key=i,e.value=s),t(e);return this}map(t){const e=new GMap;let i=null;for(const[s,n]of this.p)i===null?i=new KeyValuePair(s,n):(i.key=s,i.value=n),e.set(s,t(i));return e}filter(t){const e=new GMap;let i=null;for(const[s,n]of this.p)i===null?i=new KeyValuePair(s,n):(i.key=s,i.value=n),t(i)&&e.set(s,n);return e}has(t){return this.p.has(t)}contains(t){return this.has(t)}get(t){const e=this.p.get(t);return e===void 0?null:e}getValue(t){return this.get(t)}delete(t){return t===null?!1:(this.u&&U.L(this,t),this.p.delete(t))}remove(t){return this.delete(t)}clear(){this.u&&U.L(this),this.p.clear()}copy(){const t=new GMap;return t.p=new Map(this.p),t}toArray(){const t=this.p,e=new Array(t.size);let i=0;for(const s of t)e[i]=new KeyValuePair(s[0],s[1]),i++;return e}toKeySet(){return new MapKeySet(this)}get count(){return this.p.size}get size(){return this.p.size}get iterator(){return this.p.size<=0?EmptyIterator.instance:new MapIterator(this)}get iteratorKeys(){return this.count<=0?EmptyIterator.instance:new MapKeySetIterator(this)}keys(){return this.p.keys()}get iteratorValues(){return this.count<=0?EmptyIterator.instance:new MapValueSetIterator(this)}values(){return this.p.values()}forEach(t,e){return this.p.forEach(t,e)}}class Point{px;py;u;constructor(t,e){t===void 0?(this.px=0,this.py=0):typeof t=="number"&&typeof e=="number"?(this.px=t,this.py=e):U.n("Invalid arguments to Point constructor: "+t+", "+e),this.u=!1}h(t){return this.px=t.px,this.py=t.py,this}e(t,e){return this.px=t,this.py=e,this}setTo(t,e){return this.px=t,this.py=e,this}set(t){return this.px=t.px,this.py=t.py,this}copy(){const t=new Point;return t.px=this.px,t.py=this.py,t}Pt(){return this.u=!0,Object.freeze(this),this}C(){return this.u||Object.isFrozen(this)?this:this.copy().b()}b(){return this.u||(this.u=!0),this}lx(t){}static parse(t){if(typeof t=="string"){const e=t.split(" ");let i=0,s=0;for(;e[i]==="";)i++;let n=e[i++];n&&(s=parseFloat(n));let o=0;for(;e[i]==="";)i++;return n=e[i++],n&&(o=parseFloat(n)),new Point(s,o)}else return new Point}static stringify(t){return t.x.toString()+" "+t.y.toString()}static stringifyFixed(t){return U.s(t,"number",Point,"stringifyFixed:digits"),e=>e.x.toFixed(t)+" "+e.y.toFixed(t)}toString(){return"Point("+this.x+","+this.y+")"}equals(t){return t instanceof Point?this.px===t.x&&this.py===t.y:!1}equalTo(t,e){return this.px===t&&this.py===e}equalsApprox(t){return G.c(this.px,t.x)&&G.c(this.py,t.y)}add(t){return this.px+=t.x,this.py+=t.y,this}subtract(t){return this.px-=t.x,this.py-=t.y,this}offset(t,e){return this.px+=t,this.py+=e,this}rotate(t){if(t===0)return this;const e=this.px,i=this.py;if(e===0&&i===0)return this;let s=0,n=0;if(t=G.ze(t),t===90)s=0,n=1;else if(t===180)s=-1,n=0;else if(t===270)s=0,n=-1;else{const o=t*Math.PI/180;s=Math.cos(o),n=Math.sin(o)}return this.px=s*e-n*i,this.py=n*e+s*i,this}scale(t,e){return this.px*=t,this.py*=e,this}distanceSquaredPoint(t){const e=t.x-this.px,i=t.y-this.py;return e*e+i*i}distanceSquared(t,e){const i=t-this.px,s=e-this.py;return i*i+s*s}normalize(){const t=this.px,e=this.py,i=Math.sqrt(t*t+e*e);return i>0&&(this.px=t/i,this.py=e/i),this}directionPoint(t){return this.sL(t.x-this.px,t.y-this.py)}direction(t,e){return this.sL(t-this.px,e-this.py)}sL(t,e){if(t===0)return e>0?90:e<0?270:0;if(e===0)return t>0?0:180;{if(isNaN(t)||isNaN(e))return 0;let i=Math.atan(Math.abs(e/t))*180/Math.PI;return t<0?e<0?i+=180:i=180-i:e<0&&(i=360-i),i}}static compareWithLineSegment(t,e,i,s,n,o){return G.Du(t,e,i,s,n,o)}compareWithLineSegmentPoint(t,e){return G.Du(t.x,t.y,e.x,e.y,this.x,this.y)}static intersectingLineSegments(t,e,i,s,n,o,r,l){return G.kr(t,e,i,s,n,o,r,l)}projectOntoLineSegment(t,e,i,s){return G.Il(t,e,i,s,this.px,this.py,this),this}projectOntoLineSegmentPoint(t,e){return G.Il(t.x,t.y,e.x,e.y,this.px,this.py,this),this}snapToGrid(t,e,i,s){return G.dm(this.px,this.py,t,e,i,s,this),this}snapToGridPoint(t,e){return G.dm(this.px,this.py,t.x,t.y,e.width,e.height,this),this}setRectSpot(t,e){return this.px=t.x+e.x*t.width+e.offsetX,this.py=t.y+e.y*t.height+e.offsetY,this}setSpot(t,e,i,s,n){return this.px=t+n.x*i+n.offsetX,this.py=e+n.y*s+n.offsetY,this}T(t){return t.wt(this),this}Ai(t){return t.Di(this),this}static distanceLineSegmentSquared(t,e,i,s,n,o){let r=n-i,l=o-s;const a=r*r+l*l,h=i-t,c=s-e,f=-h*r-c*l;if(f<=0||f>=a)return r=n-t,l=o-e,Math.min(h*h+c*c,r*r+l*l);{const u=r*c-l*h;return u*u/a}}static distanceSquared(t,e,i,s){const n=i-t,o=s-e;return n*n+o*o}static direction(t,e,i,s){const n=i-t,o=s-e;if(n===0)return o>0?90:o<0?270:0;if(o===0)return n>0?0:180;{if(isNaN(n)||isNaN(o))return 0;let r=Math.atan(Math.abs(o/n))*180/Math.PI;return n<0?o<0?r+=180:r=180-r:o<0&&(r=360-r),r}}get x(){return this.px}set x(t){this.px=t}get y(){return this.py}set y(t){this.py=t}isReal(){return isFinite(this.x)&&isFinite(this.y)}static wn=new Point(0,0).Pt();static nL=new Point(-1/0,-1/0).Pt();static oL=new Point(1/0,1/0).Pt();static rL=new Point(6,6).Pt();static xn=new Point(NaN,NaN).Pt();static hx=[];static l(){const t=Point.hx.pop();return t===void 0?new Point:t}static ji(t){const e=Point.hx.pop();return e===void 0?t.copy():e.h(t)}static O(t,e){const i=Point.hx.pop();return i===void 0?new Point(t,e):(i.x=t,i.y=e,i)}static i(t){Point.hx.push(t)}}class Size{sw;sh;u;constructor(t,e){t===void 0?(this.sw=0,this.sh=0):typeof t=="number"&&(t>=0||isNaN(t))&&typeof e=="number"&&(e>=0||isNaN(e))?(this.sw=t,this.sh=e):U.n("Invalid arguments to Size constructor: "+t+", "+e),this.u=!1}h(t){return this.sw=t.sw,this.sh=t.sh,this}e(t,e){return this.sw=t,this.sh=e,this}setTo(t,e){return this.sw=t,this.sh=e,this}set(t){return this.sw=t.sw,this.sh=t.sh,this}copy(){const t=new Size;return t.sw=this.sw,t.sh=this.sh,t}Pt(){return this.u=!0,Object.freeze(this),this}C(){return this.u||Object.isFrozen(this)?this:this.copy().b()}b(){return this.u||(this.u=!0),this}lx(t){}static parse(t){if(typeof t=="string"){const e=t.split(" ");let i=0,s=0;for(;e[i]==="";)i++;let n=e[i++];n&&(s=parseFloat(n));let o=0;for(;e[i]==="";)i++;return n=e[i++],n&&(o=parseFloat(n)),new Size(s,o)}else return new Size}static stringify(t){return t.width.toString()+" "+t.height.toString()}static stringifyFixed(t){return U.s(t,"number",Size,"stringifyFixed:digits"),e=>e.width.toFixed(t)+" "+e.height.toFixed(t)}toString(){return"Size("+this.width+","+this.height+")"}equals(t){return t instanceof Size?this.sw===t.width&&this.sh===t.height:!1}equalTo(t,e){return this.sw===t&&this.sh===e}equalsApprox(t){return G.c(this.sw,t.width)&&G.c(this.sh,t.height)}inflate(t,e){const i=this.width+t;this.sw=i>=0?i:0;const s=this.height+e;return this.sh=s>=0?s:0,this}get width(){return this.sw}set width(t){t<0&&U.$(t,">= 0",Size,"width"),this.sw=t}get height(){return this.sh}set height(t){t<0&&U.$(t,">= 0",Size,"height"),this.sh=t}isReal(){return isFinite(this.width)&&isFinite(this.height)}static vc=new Size(0,0).Pt();static zP=new Size(1,1).Pt();static lL=new Size(6,6).Pt();static Fu=new Size(8,8).Pt();static aL=new Size(10,10).Pt();static XP=new Size(1/0,1/0).Pt();static cx=new Size(NaN,NaN).Pt();static hL=[];static l(){const t=Size.hL.pop();return t===void 0?new Size:t}static i(t){Size.hL.push(t)}}class Rect{rx;ry;rw;rh;u;constructor(t,e,i,s){if(t===void 0)this.rx=0,this.ry=0,this.rw=0,this.rh=0;else if(typeof t=="number"&&typeof e=="number"&&typeof i=="number"&&(i>=0||isNaN(i))&&typeof s=="number"&&(s>=0||isNaN(s)))this.rx=t,this.ry=e,this.rw=i,this.rh=s;else if(t instanceof Point){const n=t.x,o=t.y;if(e instanceof Point){const r=e.x,l=e.y;this.rx=Math.min(n,r),this.ry=Math.min(o,l),this.rw=Math.abs(n-r),this.rh=Math.abs(o-l)}else e instanceof Size?(this.rx=n,this.ry=o,this.rw=e.width,this.rh=e.height):U.n("Incorrect second argument supplied to Rect constructor "+e)}else U.n("Invalid arguments to Rect constructor: "+t+", "+e+", "+i+", "+s);this.u=!1}h(t){return this.rx=t.rx,this.ry=t.ry,this.rw=t.rw,this.rh=t.rh,this}e(t,e,i,s){return this.rx=t,this.ry=e,this.rw=i,this.rh=s,this}$n(t,e){return this.rw=t,this.rh=e,this}setTo(t,e,i,s){return this.rx=t,this.ry=e,this.rw=i,this.rh=s,this}set(t){return this.rx=t.rx,this.ry=t.ry,this.rw=t.rw,this.rh=t.rh,this}setPoint(t){return this.rx=t.x,this.ry=t.y,this}setSize(t){return this.rw=t.width,this.rh=t.height,this}copy(){const t=new Rect;return t.rx=this.rx,t.ry=this.ry,t.rw=this.rw,t.rh=this.rh,t}Pt(){return this.u=!0,Object.freeze(this),this}C(){return this.u||Object.isFrozen(this)?this:this.copy().b()}b(){return this.u||(this.u=!0),this}_t(){return this.u&&(Object.isFrozen(this)&&U.n("cannot thaw constant: "+this),this.u=!1),this}lx(t){}static parse(t){if(typeof t=="string"){const e=t.split(" ");let i=0,s=0;for(;e[i]==="";)i++;let n=e[i++];n&&(s=parseFloat(n));let o=0;for(;e[i]==="";)i++;n=e[i++],n&&(o=parseFloat(n));let r=0;for(;e[i]==="";)i++;n=e[i++],n&&(r=parseFloat(n));let l=0;for(;e[i]==="";)i++;return n=e[i++],n&&(l=parseFloat(n)),new Rect(s,o,r,l)}else return new Rect}static stringify(t){return t.x.toString()+" "+t.y.toString()+" "+t.width.toString()+" "+t.height.toString()}static stringifyFixed(t){return U.s(t,"number",Rect,"stringifyFixed:digits"),e=>e.x.toFixed(t)+" "+e.y.toFixed(t)+" "+e.width.toFixed(t)+" "+e.height.toFixed(t)}toString(){return"Rect("+this.x+","+this.y+","+this.width+","+this.height+")"}equals(t){return t instanceof Rect?this.rx===t.x&&this.ry===t.y&&this.rw===t.width&&this.rh===t.height:!1}equalTo(t,e,i,s){return this.rx===t&&this.ry===e&&this.rw===i&&this.rh===s}equalsApprox(t){return G.c(this.rx,t.x)&&G.c(this.ry,t.y)&&G.c(this.rw,t.width)&&G.c(this.rh,t.height)}equalsApproxTo(t,e,i,s){return G.c(this.rx,t)&&G.c(this.ry,e)&&G.c(this.rw,i)&&G.c(this.rh,s)}equalsApproxClose(t){return G.G(this.rx,t.x)&&G.G(this.ry,t.y)&&G.G(this.rw,t.width)&&G.G(this.rh,t.height)}containsPoint(t){return this.rx<=t.x&&this.rx+this.rw>=t.x&&this.ry<=t.y&&this.ry+this.rh>=t.y}containsRect(t){return this.rx<=t.x&&t.x+t.width<=this.rx+this.rw&&this.ry<=t.y&&t.y+t.height<=this.ry+this.rh}contains(t,e,i,s){return i===void 0&&(i=0),s===void 0&&(s=0),this.rx<=t&&t+i<=this.rx+this.rw&&this.ry<=e&&e+s<=this.ry+this.rh}offset(t,e){return this.rx+=t,this.ry+=e,this}inflate(t,e){return this.fx(e,t,e,t)}addMargin(t){return this.fx(t.top,t.right,t.bottom,t.left)}subtractMargin(t){return this.fx(-t.top,-t.right,-t.bottom,-t.left)}grow(t,e,i,s){return this.fx(t,e,i,s)}fx(t,e,i,s){const n=this.rw;e+s<=-n?(this.rx+=n/2,this.rw=0):(this.rx-=s,this.rw+=e+s);const o=this.rh;return t+i<=-o?(this.ry+=o/2,this.rh=0):(this.ry-=t,this.rh+=t+i),this}intersectRect(t){return this.cL(t.x,t.y,t.width,t.height)}intersect(t,e,i,s){return this.cL(t,e,i,s)}cL(t,e,i,s){const n=Math.max(this.rx,t),o=Math.max(this.ry,e),r=Math.min(this.rx+this.rw,t+i),l=Math.min(this.ry+this.rh,e+s);return this.rx=n,this.ry=o,this.rw=Math.max(0,r-n),this.rh=Math.max(0,l-o),this}intersectsRect(t){return this.intersects(t.x,t.y,t.width,t.height)}intersects(t,e,i,s){let n=this.rw;const o=this.rx;if(n!==1/0&&i!==1/0&&(n+=o,i+=t,isNaN(i)||isNaN(n)||o>i||t>n))return!1;let r=this.rh;const l=this.ry;return!(r!==1/0&&s!==1/0&&(r+=l,s+=e,isNaN(s)||isNaN(r)||l>s||e>r))}fL(t,e){let i=this.rw,s=t.width+e+e;const n=this.rx,o=t.x-e;if(i+=n,s+=o,n>s||o>i)return!1;let r=this.rh,l=t.height+e+e;const a=this.ry,h=t.y-e;return r+=a,l+=h,!(a>l||h>r)}unionPoint(t){return this.he(t.x,t.y,0,0)}unionRect(t){return this.he(t.rx,t.ry,t.rw,t.rh)}union(t,e,i,s){return i===void 0&&(i=0),s===void 0&&(s=0),this.he(t,e,i,s)}he(t,e,i,s){const n=Math.min(this.rx,t),o=Math.min(this.ry,e),r=Math.max(this.rx+this.rw,t+i),l=Math.max(this.ry+this.rh,e+s);return this.rx=n,this.ry=o,this.rw=r-n,this.rh=l-o,this}setSpot(t,e,i){return this.rx=t-i.offsetX-i.x*this.rw,this.ry=e-i.offsetY-i.y*this.rh,this}nearestSideDirection(t,e){return G.ux(this,t,e,!0)}nearestSideDirectionPoint(t){return G.ux(this,t.x,t.y,!0)}static contains(t,e,i,s,n,o,r,l){return r===void 0&&(r=0),l===void 0&&(l=0),t<=n&&n+r<=t+i&&e<=o&&o+l<=e+s}static intersects(t,e,i,s,n,o,r,l){let a=i,h=r;const c=t,f=n;if(a+=c,h+=f,c>h||f>a)return!1;let u=s,d=l;const m=e,g=o;return u+=m,d+=g,!(m>d||g>u)}static intersectsLineSegment(t,e,i,s,n,o,r,l){return G.uL(t,e,i,s,n,o,r,l)}get x(){return this.rx}set x(t){this.rx=t}get y(){return this.ry}set y(t){this.ry=t}get width(){return this.rw}set width(t){t<0&&U.$(t,">= 0",Rect,"width"),this.rw=t}get height(){return this.rh}set height(t){t<0&&U.$(t,">= 0",Rect,"height"),this.rh=t}get left(){return this.rx}set left(t){this.rx=t}get top(){return this.ry}set top(t){this.ry=t}get right(){return this.rx+this.rw}set right(t){this.rx+=t-(this.rx+this.rw)}get bottom(){return this.ry+this.rh}set bottom(t){this.ry+=t-(this.ry+this.rh)}get position(){return new Point(this.rx,this.ry)}set position(t){this.rx=t.x,this.ry=t.y}get size(){return new Size(this.rw,this.rh)}set size(t){this.rw=t.width,this.rh=t.height}get center(){return new Point(this.rx+this.rw/2,this.ry+this.rh/2)}set center(t){this.rx=t.x-this.rw/2,this.ry=t.y-this.rh/2}get centerX(){return this.rx+this.rw/2}set centerX(t){this.rx=t-this.rw/2}get centerY(){return this.ry+this.rh/2}set centerY(t){this.ry=t-this.rh/2}isReal(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)}isEmpty(){return this.width===0&&this.height===0}static gm=new Rect(0,0,0,0).Pt();static wR=new Rect(NaN,NaN,NaN,NaN).Pt();static gx=[];static l(){const t=Rect.gx.pop();return t===void 0?new Rect:t}static ji(t){const e=Rect.gx.pop();return e===void 0?t.copy():e.h(t)}static O(t,e,i,s){const n=Rect.gx.pop();return n===void 0?new Rect(t,e,i,s):n.e(t,e,i,s)}static i(t){Rect.gx.push(t)}}class Margin{mt;mr;mb;ml;constructor(t,e,i,s){t===void 0?(this.mt=0,this.mr=0,this.mb=0,this.ml=0):e===void 0?(e=t,i=t,s=t,this.mt=t,this.mr=e,this.mb=i,this.ml=s):i===void 0?(i=t,s=e,this.mt=t,this.mr=e,this.mb=i,this.ml=s):s!==void 0?(this.mt=t,this.mr=e,this.mb=i,this.ml=s):U.n("Invalid arguments to Margin constructor: "+t+", "+e+", "+i+", "+s)}setTo(t,e,i,s){return this.mt=t,this.mr=e,this.mb=i,this.ml=s,this}set(t){return this.mt=t.mt,this.mr=t.mr,this.mb=t.mb,this.ml=t.ml,this}copy(){const t=new Margin;return t.mt=this.mt,t.mr=this.mr,t.mb=this.mb,t.ml=this.ml,t}Pt(){return Object.freeze(this),this}C(){return Object.isFrozen(this)?this:this.copy().Pt()}lx(t){}static parse(t){if(typeof t=="string"){const e=t.split(" ");let i=0,s=NaN;for(;e[i]==="";)i++;let n=e[i++];if(n&&(s=parseFloat(n)),isNaN(s))return new Margin;let o=NaN;for(;e[i]==="";)i++;if(n=e[i++],n&&(o=parseFloat(n)),isNaN(o))return new Margin(s);let r=NaN;for(;e[i]==="";)i++;if(n=e[i++],n&&(r=parseFloat(n)),isNaN(r))return new Margin(s,o);let l=NaN;for(;e[i]==="";)i++;return n=e[i++],n&&(l=parseFloat(n)),isNaN(l)?new Margin(s,o):new Margin(s,o,r,l)}else return new Margin}static stringify(t){return t.top.toString()+" "+t.right.toString()+" "+t.bottom.toString()+" "+t.left.toString()}static stringifyFixed(t){return U.s(t,"number",Margin,"stringifyFixed:digits"),e=>e.top.toFixed(t)+" "+e.right.toFixed(t)+" "+e.bottom.toFixed(t)+" "+e.left.toFixed(t)}toString(){return"Margin("+this.top+","+this.right+","+this.bottom+","+this.left+")"}equals(t){return t instanceof Margin?this.mt===t.top&&this.mr===t.right&&this.mb===t.bottom&&this.ml===t.left:!1}equalTo(t,e,i,s){return this.mt===t&&this.mr===e&&this.mb===i&&this.ml===s}equalsApprox(t){return G.c(this.mt,t.top)&&G.c(this.mr,t.right)&&G.c(this.mb,t.bottom)&&G.c(this.ml,t.left)}get top(){return this.mt}set top(t){this.mt=t}get right(){return this.mr}set right(t){this.mr=t}get bottom(){return this.mb}set bottom(t){this.mb=t}get left(){return this.ml}set left(t){this.ml=t}isReal(){return isFinite(this.top)&&isFinite(this.right)&&isFinite(this.bottom)&&isFinite(this.left)}static mm=new Margin(0,0,0,0).Pt();static dL=new Margin(2,2,2,2).Pt()}class Spot{sx;sy;ox;oy;constructor(t,e,i,s){t===void 0?(this.sx=0,this.sy=0,this.ox=0,this.oy=0):(e===void 0&&(e=0),i===void 0&&(i=0),s===void 0&&(s=0),this.sx=t,this.sy=e,this.ox=i,this.oy=s)}setTo(t,e,i,s){return this.sx=t,this.sy=e,this.ox=i,this.oy=s,this}set(t){return this.sx=t.sx,this.sy=t.sy,this.ox=t.ox,this.oy=t.oy,this}copy(){const t=new Spot;return t.sx=this.sx,t.sy=this.sy,t.ox=this.ox,t.oy=this.oy,t}Pt(){return Object.freeze(this),this}C(){return Object.isFrozen(this)?this:this.copy().Pt()}lx(t){}Wi(t){return this.sx=NaN,this.sy=NaN,this.ox=t,this.Pt()}iB(t,e){(isNaN(t)||t>1||t<0)&&U.$(t,"0 <= "+e+" <= 1",Spot,e)}sB(t,e){(isNaN(t)||t===1/0||t===-1/0)&&U.$(t,"real number, not NaN or Infinity",Spot,e)}static parse(t){if(typeof t=="string"){if(t=t.trim(),t==="None")return Spot.None;if(t==="TopLeft")return Spot.TopLeft;if(t==="Top"||t==="TopCenter"||t==="MiddleTop")return Spot.TopCenter;if(t==="TopRight")return Spot.TopRight;if(t==="Left"||t==="LeftCenter"||t==="MiddleLeft")return Spot.LeftCenter;if(t==="Center")return Spot.Center;if(t==="Right"||t==="RightCenter"||t==="MiddleRight")return Spot.RightCenter;if(t==="BottomLeft")return Spot.BottomLeft;if(t==="Bottom"||t==="BottomCenter"||t==="MiddleBottom")return Spot.BottomCenter;if(t==="BottomRight")return Spot.BottomRight;if(t==="TopSide")return Spot.TopSide;if(t==="LeftSide")return Spot.LeftSide;if(t==="RightSide")return Spot.RightSide;if(t==="BottomSide")return Spot.BottomSide;if(t==="TopBottomSides")return Spot.TopBottomSides;if(t==="LeftRightSides")return Spot.LeftRightSides;if(t==="TopLeftSides")return Spot.TopLeftSides;if(t==="TopRightSides")return Spot.TopRightSides;if(t==="BottomLeftSides")return Spot.BottomLeftSides;if(t==="BottomRightSides")return Spot.BottomRightSides;if(t==="NotTopSide")return Spot.NotTopSide;if(t==="NotLeftSide")return Spot.NotLeftSide;if(t==="NotRightSide")return Spot.NotRightSide;if(t==="NotBottomSide")return Spot.NotBottomSide;if(t==="AllSides")return Spot.AllSides;if(t==="Default")return Spot.Default;const e=t.split(" ");let i=0,s=0;for(;e[i]==="";)i++;let n=e[i++];n!==void 0&&n.length>0&&(s=parseFloat(n));let o=0;for(;e[i]==="";)i++;n=e[i++],n!==void 0&&n.length>0&&(o=parseFloat(n));let r=0;for(;e[i]==="";)i++;n=e[i++],n!==void 0&&n.length>0&&(r=parseFloat(n));let l=0;for(;e[i]==="";)i++;return n=e[i++],n!==void 0&&n.length>0&&(l=parseFloat(n)),new Spot(s,o,r,l)}else return new Spot}static stringify(t){return t.isSpot()?t.x.toString()+" "+t.y.toString()+" "+t.offsetX.toString()+" "+t.offsetY.toString():t.toString()}static stringifyFixed(t){return U.s(t,"number",Spot,"stringifyFixed:digits"),e=>e.x.toFixed(t)+" "+e.y.toFixed(t)+" "+e.offsetX.toFixed(t)+" "+e.offsetY.toFixed(t)}toString(){return this.isSpot()?this.ox===0&&this.oy===0?"Spot("+this.x+","+this.y+")":"Spot("+this.x+","+this.y+","+this.offsetX+","+this.offsetY+")":this.equals(Spot.None)?"None":this.equals(Spot.TopLeft)?"TopLeft":this.equals(Spot.TopCenter)?"Top":this.equals(Spot.TopRight)?"TopRight":this.equals(Spot.LeftCenter)?"Left":this.equals(Spot.Center)?"Center":this.equals(Spot.RightCenter)?"Right":this.equals(Spot.BottomLeft)?"BottomLeft":this.equals(Spot.BottomCenter)?"Bottom":this.equals(Spot.BottomRight)?"BottomRight":this.equals(Spot.TopSide)?"TopSide":this.equals(Spot.LeftSide)?"LeftSide":this.equals(Spot.RightSide)?"RightSide":this.equals(Spot.BottomSide)?"BottomSide":this.equals(Spot.TopBottomSides)?"TopBottomSides":this.equals(Spot.LeftRightSides)?"LeftRightSides":this.equals(Spot.TopLeftSides)?"TopLeftSides":this.equals(Spot.TopRightSides)?"TopRightSides":this.equals(Spot.BottomLeftSides)?"BottomLeftSides":this.equals(Spot.BottomRightSides)?"BottomRightSides":this.equals(Spot.NotTopSide)?"NotTopSide":this.equals(Spot.NotLeftSide)?"NotLeftSide":this.equals(Spot.NotRightSide)?"NotRightSide":this.equals(Spot.NotBottomSide)?"NotBottomSide":this.equals(Spot.AllSides)?"AllSides":this.equals(Spot.Default)?"Default":"None"}equals(t){return t instanceof Spot?(this.sx===t.x||isNaN(this.sx)&&isNaN(t.x))&&(this.sy===t.y||isNaN(this.sy)&&isNaN(t.y))&&this.ox===t.offsetX&&this.oy===t.offsetY:!1}opposite(){return new Spot(.5-(this.sx-.5),.5-(this.sy-.5),-this.ox,-this.oy)}includesSide(t){if(!this.isSide())return!1;if(!t.isSide())if(t.equals(Spot.Left))t=Spot.LeftSide;else if(t.equals(Spot.Right))t=Spot.RightSide;else if(t.equals(Spot.Top))t=Spot.TopSide;else if(t.equals(Spot.Bottom))t=Spot.BottomSide;else return!1;const e=this.oy,i=t.offsetY;return(e&i)===i}get x(){return this.sx}set x(t){this.sx=t}get y(){return this.sy}set y(t){this.sy=t}get offsetX(){return this.ox}set offsetX(t){this.ox=t}get offsetY(){return this.oy}set offsetY(t){this.oy=t}isSpot(){return!isNaN(this.x)&&!isNaN(this.y)}isNoSpot(){return isNaN(this.x)||isNaN(this.y)}isSide(){return isNaN(this.x)&&isNaN(this.y)&&this.offsetX===1&&this.offsetY!==0}isNone(){return isNaN(this.x)&&isNaN(this.y)&&this.offsetX===0&&this.offsetY===0}isDefault(){return isNaN(this.x)&&isNaN(this.y)&&this.offsetX===-1&&this.offsetY===0}static None=new Spot(0,0,0,0).Wi(0);static Default=new Spot(0,0,-1,0).Wi(-1);static TopLeft=new Spot(0,0,0,0).Pt();static TopCenter=new Spot(.5,0,0,0).Pt();static TopRight=new Spot(1,0,0,0).Pt();static LeftCenter=new Spot(0,.5,0,0).Pt();static Center=new Spot(.5,.5,0,0).Pt();static RightCenter=new Spot(1,.5,0,0).Pt();static BottomLeft=new Spot(0,1,0,0).Pt();static BottomCenter=new Spot(.5,1,0,0).Pt();static BottomRight=new Spot(1,1,0,0).Pt();static MiddleTop=Spot.TopCenter;static MiddleLeft=Spot.LeftCenter;static MiddleRight=Spot.RightCenter;static MiddleBottom=Spot.BottomCenter;static Top=Spot.TopCenter;static Left=Spot.LeftCenter;static Right=Spot.RightCenter;static Bottom=Spot.BottomCenter;static TopSide=new Spot(0,0,1,1).Wi(1);static LeftSide=new Spot(0,0,1,2).Wi(1);static RightSide=new Spot(0,0,1,4).Wi(1);static BottomSide=new Spot(0,0,1,8).Wi(1);static TopBottomSides=new Spot(0,0,1,9).Wi(1);static LeftRightSides=new Spot(0,0,1,6).Wi(1);static TopLeftSides=new Spot(0,0,1,3).Wi(1);static TopRightSides=new Spot(0,0,1,5).Wi(1);static BottomLeftSides=new Spot(0,0,1,10).Wi(1);static BottomRightSides=new Spot(0,0,1,12).Wi(1);static NotTopSide=new Spot(0,0,1,14).Wi(1);static NotLeftSide=new Spot(0,0,1,13).Wi(1);static NotRightSide=new Spot(0,0,1,11).Wi(1);static NotBottomSide=new Spot(0,0,1,7).Wi(1);static AllSides=new Spot(0,0,1,15).Wi(1);static GP=new Spot(.156,.156).Pt();static YP=new Spot(.844,.844).Pt()}class Transform{m11;m12;m21;m22;dx;dy;constructor(){this.m11=1,this.m12=0,this.m21=0,this.m22=1,this.dx=0,this.dy=0}set(t){return this.m11=t.m11,this.m12=t.m12,this.m21=t.m21,this.m22=t.m22,this.dx=t.dx,this.dy=t.dy,this}setTo(t,e,i,s,n,o){return this.m11=t,this.m12=e,this.m21=i,this.m22=s,this.dx=n,this.dy=o,this}copy(){const t=new Transform;return t.m11=this.m11,t.m12=this.m12,t.m21=this.m21,t.m22=this.m22,t.dx=this.dx,t.dy=this.dy,t}toString(){return"Transform("+this.m11+","+this.m12+","+this.m21+","+this.m22+","+this.dx+","+this.dy+")"}equals(t){return this.m11===t.m11&&this.m12===t.m12&&this.m21===t.m21&&this.m22===t.m22&&this.dx===t.dx&&this.dy===t.dy}KP(){return this.dx===0&&this.dy===0&&this.m11===1&&this.m12===0&&this.m21===0&&this.m22===1}Xe(){return this.m11=1,this.m12=0,this.m21=0,this.m22=1,this.dx=0,this.dy=0,this}Rc(t){const e=this.m11*t.m11+this.m21*t.m12,i=this.m12*t.m11+this.m22*t.m12,s=this.m11*t.m21+this.m21*t.m22,n=this.m12*t.m21+this.m22*t.m22;return this.dx=this.m11*t.dx+this.m21*t.dy+this.dx,this.dy=this.m12*t.dx+this.m22*t.dy+this.dy,this.m11=e,this.m12=i,this.m21=s,this.m22=n,this}gL(t){const e=1/(t.m11*t.m22-t.m12*t.m21),i=t.m22*e,s=-t.m12*e,n=-t.m21*e,o=t.m11*e,r=e*(t.m21*t.dy-t.m22*t.dx),l=e*(t.m12*t.dx-t.m11*t.dy),a=this.m11*i+this.m21*s,h=this.m12*i+this.m22*s,c=this.m11*n+this.m21*o,f=this.m12*n+this.m22*o;return this.dx=this.m11*r+this.m21*l+this.dx,this.dy=this.m12*r+this.m22*l+this.dy,this.m11=a,this.m12=h,this.m21=c,this.m22=f,this}mx(){const t=1/(this.m11*this.m22-this.m12*this.m21),e=this.m22*t,i=-this.m12*t,s=-this.m21*t,n=this.m11*t,o=t*(this.m21*this.dy-this.m22*this.dx),r=t*(this.m12*this.dx-this.m11*this.dy);return this.m11=e,this.m12=i,this.m21=s,this.m22=n,this.dx=o,this.dy=r,this}Ps(t,e,i){if(t=G.ze(t),t===0)return this;this.js(e,i);let s=0,n=0;if(t===90)s=0,n=1;else if(t===180)s=-1,n=0;else if(t===270)s=0,n=-1;else{const h=t*Math.PI/180;s=Math.cos(h),n=Math.sin(h)}const o=this.m11*s+this.m21*n,r=this.m12*s+this.m22*n,l=this.m11*-n+this.m21*s,a=this.m12*-n+this.m22*s;return this.m11=o,this.m12=r,this.m21=l,this.m22=a,this.js(-e,-i),this}js(t,e){return this.dx+=this.m11*t+this.m21*e,this.dy+=this.m12*t+this.m22*e,this}it(t,e){return e===void 0&&(e=t),this.m11*=t,this.m12*=t,this.m21*=e,this.m22*=e,this}xR(){if(this.m11===1&&this.m12===0)return 0;let t=Math.atan2(this.m12,this.m11)*180/Math.PI;return t<0&&(t+=360),t}wt(t){const e=t.x,i=t.y;return t.e(e*this.m11+i*this.m21+this.dx,e*this.m12+i*this.m22+this.dy)}Di(t){const e=1/(this.m11*this.m22-this.m12*this.m21),i=this.m22*e,s=-this.m12*e,n=-this.m21*e,o=this.m11*e,r=t.x-this.dx,l=t.y-this.dy;return t.e(r*i+l*n,r*s+l*o)}vu(t){const e=1/(this.m11*this.m22-this.m12*this.m21),i=this.m22*e,s=-this.m12*e,n=-this.m21*e,o=this.m11*e,r=e*(this.m21*this.dy-this.m22*this.dx),l=e*(this.m12*this.dx-this.m11*this.dy),a=t.x*1.25,h=t.y*1.2;return t.e(a*i+h*n+r,a*s+h*o+l)}pm(t){const e=t.x,i=t.y,s=e+t.width,n=i+t.height,o=this.m11,r=this.m12,l=this.m21,a=this.m22,h=this.dx,c=this.dy,f=e*o+i*l+h,u=e*r+i*a+c,d=s*o+i*l+h,m=s*r+i*a+c,g=e*o+n*l+h,p=e*r+n*a+c,y=s*o+n*l+h,x=s*r+n*a+c;let b=f,k=f,P=u,S=u;return b=Math.min(b,d),k=Math.max(k,d),P=Math.min(P,m),S=Math.max(S,m),b=Math.min(b,g),k=Math.max(k,g),P=Math.min(P,p),S=Math.max(S,p),b=Math.min(b,y),k=Math.max(k,y),P=Math.min(P,x),S=Math.max(S,x),t.e(b,P,k-b,S-P),t}static mL=[];static l(){const t=Transform.mL.pop();return t===void 0?new Transform:t}static i(t){Transform.mL.push(t)}static HP="54a702f3e53909c447824c6706603faf4c"}class Quadtree{$t;El;Ru;Pr;Ss;Lt;Ul;Ou;constructor(t,e,i,s,n=10,o=4,r=0){this.$t=new Rect(t,e,i,s),this.El=n,this.Ru=o,this.Pr=r,this.Ss=new Map,this.Lt=[],this.Ul=null,this.Ou=null}get bounds(){return this.$t}get objects(){return this.Ss}get level(){return this.Pr}get subTrees(){return this.Lt}get isLeaf(){return this.Lt.length===0}get aggregates(){return this.Ou}clear(){this.Ss.clear();for(let t=0;t<this.Lt.length;t++)this.Lt[t].clear();this.Lt=[],this.Ou=null}reinitialize(t=10){if(this.El===t)return;this.El=t,this.Ul===null&&(this.Ul=new Map);const e=this.toMap(this.Ul);this.Ss.clear();for(let i=0;i<this.Lt.length;i++)this.Lt[i].clear();this.Lt=[];for(const i of e)this.set(i[0],i[1]);this.Ul.clear()}resize(t,e=200){this.level!==0&&U.n("Quadtree.resize called on a non-root Quadtree"),this.Ul===null&&(this.Ul=new Map);const i=this.toMap(this.Ul);this.$t.e(t.x-e,t.y-e,t.width+e*2,t.height+e*2),this.Ss.clear(),this.Lt=[];for(const s of i)this.set(s[0],s[1]);this.Ul.clear()}yx(t,e,i,s){const n=this.$t,o=n.x+n.width/2,r=n.y+n.height/2,l=e<=r,a=t<=o,h=t+i>=o,c=e+s>=r;let f=0;return l&&h&&(f|=1),a&&l&&(f|=2),a&&c&&(f|=4),h&&c&&(f|=8),f}bR(){const t=this.Pr+1,e=this.$t.width/2,i=this.$t.height/2,s=this.$t.x,n=this.$t.y;this.Lt[0]=new Quadtree(s+e,n,e,i,this.El,this.Ru,t),this.Lt[1]=new Quadtree(s,n,e,i,this.El,this.Ru,t),this.Lt[2]=new Quadtree(s,n+i,e,i,this.El,this.Ru,t),this.Lt[3]=new Quadtree(s+e,n+i,e,i,this.El,this.Ru,t)}pL(){let t=new Map(this.Ss);for(let e=0;e<this.Lt.length;e++){const i=this.Lt[e].pL();for(const s of i)t.set(s[0],s[1])}if(t.size<=this.El){this.Ss=t;for(let e=0;e<this.Lt.length;e++)this.Lt[e].Ss.clear();this.Lt=[]}return t}set(t,e){if(this.Lt.length){const n=this.yx(e.x,e.y,e.width,e.height);for(let o=0;o<4;o++)n&1<<o&&this.Lt[o].set(t,e);return}const i=this.Ss,s=i.get(t);if(!(s!==void 0&&s.equals(e))&&(i.set(t,e),i.size>this.El&&this.Pr<this.Ru)){this.Lt.length||this.bR();for(const n of i){const o=n[1],r=this.yx(o.x,o.y,o.width,o.height);for(let l=0;l<4;l++)r&1<<l&&this.Lt[l].set(n[0],o)}this.Ss.clear()}}add(t,e){this.set(t,e)}setTo(t,e,i,s=0,n=0){this.set(t,new Rect(e,i,s,n))}find(t,e=new Set){return this.findIn(t.x,t.y,t.width,t.height,e)}findIn(t,e,i=0,s=0,n=new Set){const o=this.yx(t,e,i,s);for(const r of this.Ss.keys())n.add(r);if(this.Lt.length)for(let r=0;r<4;r++)o&1<<r&&this.Lt[r].findIn(t,e,i,s,n);return n}findInArray(t,e,i=0,s=0,n){const o=this.yx(t,e,i,s);for(const r of this.Ss.keys())n.indexOf(r)===-1&&n.push(r);if(this.Lt.length)for(let r=0;r<4;r++)o&1<<r&&this.Lt[r].findInArray(t,e,i,s,n);return n}delete(t,e=!1){const i=this.Ss.delete(t);for(let s=0;s<this.Lt.length;s++)this.Lt[s].delete(t);return this.Pr===0&&!e&&this.pL(),i}remove(t,e=!1){return this.delete(t,e)}move(t,e,i=!1){this.delete(t,i),this.set(t,e)}moveTo(t,e,i,s,n,o=!1){this.delete(t,o),this.set(t,new Rect(e,i,s,n))}toMap(t=new Map){for(const[e,i]of this.Ss)t.set(e,i);for(let e=0;e<this.Lt.length;e++)this.Lt[e].toMap(t);return t}computeAggregates(t,e){if(this.Lt.length===0)this.Ou=t(this.Ss,this.$t);else{const i=[];for(let s=0;s<this.Lt.length;s++)i.push(this.Lt[s].computeAggregates(t,e));this.Ou=e(i,this.$t)}return this.Ou}dump(){for(let t=0;t<this.Lt.length;t++)this.Lt[t].dump();U.jt(`level ${this.level} - ${this.objects.size} objs, ${this.bounds.toString()}`)}}const G={kR:"7da71ca0ad381e90",Zn:4*((Math.sqrt(2)-1)/3),c:(w,t)=>{const e=w-t;return e<.5&&e>-.5},G:(w,t)=>{const e=w-t;return e<5e-8&&e>-5e-8},Ge:(w,t,e,i,s,n,o)=>{s<=0&&(s=1e-6);let r=0,l=0,a=0,h=0;if(w<e?(l=w,r=e):(l=e,r=w),t<i?(h=t,a=i):(h=i,a=t),w===e)return h<=o&&o<=a&&w-s<=n&&n<=w+s;if(t===i)return l<=n&&n<=r&&t-s<=o&&o<=t+s;const c=r+s,f=l-s;if(f<=n&&n<=c){const u=a+s,d=h-s;if(d<=o&&o<=u)if(c-f>u-d)if(w-e>s||e-w>s){const g=(i-t)/(e-w)*(n-w)+t;if(g-s<=o&&o<=g+s)return!0}else return!0;else if(t-i>s||i-t>s){const g=(e-w)/(i-t)*(o-t)+w;if(g-s<=n&&n<=g+s)return!0}else return!0}return!1},wx:(w,t,e,i,s,n,o,r,l,a,h,c)=>{if(!G.Ge(w,t,o,r,c,e,i)||!G.Ge(w,t,o,r,c,s,n)){const f=(w+e)/2,u=(t+i)/2,d=(e+s)/2,m=(i+n)/2,g=(s+o)/2,p=(n+r)/2,y=(f+d)/2,x=(u+m)/2,b=(d+g)/2,k=(m+p)/2,P=(y+b)/2,S=(x+k)/2;return G.wx(w,t,f,u,y,x,P,S,l,a,h,c)||G.wx(P,S,b,k,g,p,o,r,l,a,h,c)}else return G.Ge(w,t,o,r,c,a,h)},yL:(w,t,e,i,s,n,o,r,l)=>{const a=(w+e)/2,h=(t+i)/2,c=(e+s)/2,f=(i+n)/2,u=(s+o)/2,d=(n+r)/2,m=(a+c)/2,g=(h+f)/2,p=(c+u)/2,y=(f+d)/2;return l.e((m+p)/2,(g+y)/2),l},PR:(w,t,e,i,s,n,o,r)=>{const l=(w+e)/2,a=(t+i)/2,h=(e+s)/2,c=(i+n)/2,f=(s+o)/2,u=(n+r)/2,d=(l+h)/2,m=(a+c)/2,g=(h+f)/2,p=(c+u)/2;return Point.direction(d,m,g,p)},Iu:(w,t,e,i,s,n,o,r,l,a)=>{if(!G.Ge(w,t,o,r,l,e,i)||!G.Ge(w,t,o,r,l,s,n)){const h=(w+e)/2,c=(t+i)/2,f=(e+s)/2,u=(i+n)/2,d=(s+o)/2,m=(n+r)/2,g=(h+f)/2,p=(c+u)/2,y=(f+d)/2,x=(u+m)/2,b=(g+y)/2,k=(p+x)/2;G.Iu(w,t,h,c,g,p,b,k,l,a),G.Iu(b,k,y,x,d,m,o,r,l,a)}else a.he(w,t,0,0),a.he(o,r,0,0);return a},Qn:(w,t,e,i,s,n,o,r,l,a)=>{if(!G.Ge(w,t,o,r,l,e,i)||!G.Ge(w,t,o,r,l,s,n)){const h=(w+e)/2,c=(t+i)/2,f=(e+s)/2,u=(i+n)/2,d=(s+o)/2,m=(n+r)/2,g=(h+f)/2,p=(c+u)/2,y=(f+d)/2,x=(u+m)/2,b=(g+y)/2,k=(p+x)/2;G.Qn(w,t,h,c,g,p,b,k,l,a),G.Qn(b,k,y,x,d,m,o,r,l,a)}else a.length===0&&(a.push(w),a.push(t)),a.push(o),a.push(r);return a},qP:(w,t,e,i,s,n,o,r,l,a)=>{if(G.Ge(w,t,s,n,a,e,i))return G.Ge(w,t,s,n,a,r,l);{const h=(w+e)/2,c=(t+i)/2,f=(e+s)/2,u=(i+n)/2,d=(h+f)/2,m=(c+u)/2;return G.qP(w,t,h,c,d,m,o,r,l,a)||G.qP(d,m,f,u,s,n,o,r,l,a)}},jP:(w,t,e,i,s,n,o,r)=>{if(G.Ge(w,t,s,n,o,e,i))r.he(w,t,0,0),r.he(s,n,0,0);else{const l=(w+e)/2,a=(t+i)/2,h=(e+s)/2,c=(i+n)/2,f=(l+h)/2,u=(a+c)/2;G.jP(w,t,l,a,f,u,o,r),G.jP(f,u,h,c,s,n,o,r)}return r},ym:(w,t,e,i,s,n,o,r)=>{if(G.Ge(w,t,s,n,o,e,i))r.length===0&&(r.push(w),r.push(t)),r.push(s),r.push(n);else{const l=(w+e)/2,a=(t+i)/2,h=(e+s)/2,c=(i+n)/2,f=(l+h)/2,u=(a+c)/2;G.ym(w,t,l,a,f,u,o,r),G.ym(f,u,h,c,s,n,o,r)}return r},wm:(w,t,e,i,s,n,o,r,l,a,h,c,f,u)=>{if(!G.Ge(w,t,o,r,f,e,i)||!G.Ge(w,t,o,r,f,s,n)){const d=(w+e)/2,m=(t+i)/2,g=(e+s)/2,p=(i+n)/2,y=(s+o)/2,x=(n+r)/2,b=(d+g)/2,k=(m+p)/2,P=(g+y)/2,S=(p+x)/2,T=(b+P)/2,N=(k+S)/2;let M=1/0,C=!1,L=0,A=0;if(G.wm(w,t,d,m,b,k,T,N,l,a,h,c,f,u)){const D=(u.x-l)**2+(u.y-a)**2;D<M&&(M=D,C=!0,L=u.x,A=u.y)}if(G.wm(T,N,P,S,y,x,o,r,l,a,h,c,f,u)){const D=(u.x-l)**2+(u.y-a)**2;D<M&&(M=D,C=!0,L=u.x,A=u.y)}return C&&(u.x=L,u.y=A),C}else{if(!G.kr(w,t,o,r,l,a,h,c))return!1;const d=(w-o)*(a-c)-(t-r)*(l-h);if(d===0)return!1;const m=((w*r-t*o)*(l-h)-(w-o)*(l*c-a*h))/d,g=((w*r-t*o)*(a-c)-(t-r)*(l*c-a*h))/d;return u.e(m,g),!0}},xm:(w,t,e,i,s,n,o,r,l,a,h,c,f)=>{let u=0;if(!G.Ge(w,t,o,r,f,e,i)||!G.Ge(w,t,o,r,f,s,n)){const d=(w+e)/2,m=(t+i)/2,g=(e+s)/2,p=(i+n)/2,y=(s+o)/2,x=(n+r)/2,b=(d+g)/2,k=(m+p)/2,P=(g+y)/2,S=(p+x)/2,T=(b+P)/2,N=(k+S)/2;u+=G.xm(w,t,d,m,b,k,T,N,l,a,h,c,f),u+=G.xm(T,N,P,S,y,x,o,r,l,a,h,c,f)}else{const d=(w-o)*(a-c)-(t-r)*(l-h);if(d===0)return u;const m=((w*r-t*o)*(l-h)-(w-o)*(l*c-a*h))/d,g=((w*r-t*o)*(a-c)-(t-r)*(l*c-a*h))/d;if(m>=h)return u;let p=0,y=0;if((l>h?l-h:h-l)<(a>c?a-c:c-a)){if(t<r?(p=t,y=r):(p=r,y=t),g<p||g>y)return u}else if(w<o?(p=w,y=o):(p=o,y=w),m<p||m>y)return u;d>0?u++:d<0&&u--}return u},Il:(w,t,e,i,s,n,o)=>{if(G.G(w,e)){let r=0,l=0;t<i?(r=t,l=i):(r=i,l=t);const a=n;return a<r?(o.e(w,r),!1):a>l?(o.e(w,l),!1):(o.e(w,a),!0)}else if(G.G(t,i)){let r=0,l=0;w<e?(r=w,l=e):(r=e,l=w);const a=s;return a<r?(o.e(r,t),!1):a>l?(o.e(l,t),!1):(o.e(a,t),!0)}else{const r=(e-w)**2+(i-t)**2,l=((w-s)*(w-e)+(t-n)*(t-i))/r;if(l<-5e-6)return o.e(w,t),!1;if(l>1.000005)return o.e(e,i),!1;{const a=w+l*(e-w),h=t+l*(i-t);return o.e(a,h),!0}}},Ms:(w,t,e,i,s,n,o,r,l)=>{if(G.c(w,e)&&G.c(t,i))return l.e(w,t),!1;if(G.G(s,o)){if(G.G(w,e))return G.Il(w,t,e,i,s,n,l),!1;{const h=(i-t)/(e-w)*(s-w)+t;return G.Il(w,t,e,i,s,h,l)}}else{const a=(r-n)/(o-s);if(G.G(w,e)){const h=a*(w-s)+n;let c=0,f=0;return t<i?(c=t,f=i):(c=i,f=t),h<c?(l.e(w,c),!1):h>f?(l.e(w,f),!1):(l.e(w,h),!0)}else{const h=(i-t)/(e-w);if(G.G(a,h))return G.Il(w,t,e,i,s,n,l),!1;{const c=(h*w-a*s+n-t)/(h-a);if(G.G(h,0)){let f=0,u=0;return w<e?(f=w,u=e):(f=e,u=w),c<f?(l.e(f,t),!1):c>u?(l.e(u,t),!1):(l.e(c,t),!0)}else{const f=h*(c-w)+t;return G.Il(w,t,e,i,c,f,l)}}}}},Bl:(w,t,e,i,s,n,o,r,l)=>{let a=1e21,h=w,c=t;if(G.Ms(w,t,w,i,s,n,o,r,l)){const f=(l.x-s)**2+(l.y-n)**2;f<a&&(a=f,h=l.x,c=l.y)}if(G.Ms(e,t,e,i,s,n,o,r,l)){const f=(l.x-s)**2+(l.y-n)**2;f<a&&(a=f,h=l.x,c=l.y)}if(G.Ms(w,t,e,t,s,n,o,r,l)){const f=(l.x-s)**2+(l.y-n)**2;f<a&&(a=f,h=l.x,c=l.y)}if(G.Ms(w,i,e,i,s,n,o,r,l)){const f=(l.x-s)**2+(l.y-n)**2;f<a&&(a=f,h=l.x,c=l.y)}return l.e(h,c),a<1e21},xx:(w,t,e)=>G.uL(w.x,w.y,w.width,w.height,t.x,t.y,e.x,e.y),uL:(w,t,e,i,s,n,o,r)=>{const l=w,a=w+e,h=t,c=t+i;if(s===o){let f=0,u=0;return n<r?(f=n,u=r):(f=r,u=n),l<=s&&s<=a&&f<=c&&u>=h}if(n===r){let f=0,u=0;return s<o?(f=s,u=o):(f=o,u=s),h<=n&&n<=c&&f<=a&&u>=l}return!!(Rect.contains(w,t,e,i,s,n)||Rect.contains(w,t,e,i,o,r)||G.kr(l,h,a,h,s,n,o,r)||G.kr(a,h,a,c,s,n,o,r)||G.kr(a,c,l,c,s,n,o,r)||G.kr(l,c,l,h,s,n,o,r))},kr:(w,t,e,i,s,n,o,r)=>w===e&&t===i&&s===o&&n===r?w===s&&t===n:G.Du(w,t,e,i,s,n)*G.Du(w,t,e,i,o,r)<=0&&G.Du(s,n,o,r,w,t)*G.Du(s,n,o,r,e,i)<=0,Du:(w,t,e,i,s,n)=>{const o=e-w,r=i-t;let l=s-w,a=n-t,h=l*r-a*o;return h===0&&(h=l*o+a*r,h>0&&(l-=o,a-=r,h=l*o+a*r,h<0&&(h=0))),h},ux(w,t,e,i){i===void 0&&(i=!1);let s=0;const n=w===null?t:(t-w.x)/(w.width>0?w.width:1),o=w===null?e:(e-w.y)/(w.height>0?w.height:1);return n>o?n>1-o||(i||n<1-o?s=270:s=315):i||n<o?n>1-o?s=90:i||n<1-o?s=180:s=135:n<.5?s=225:n>.5&&(s=45),s},ze:w=>(w>=360?w-=360:w<0&&(w+=360),w),SR:(w,t)=>w>t?Math.min(w-t,Math.abs(w-360-t)):t>w?Math.min(t-w,Math.abs(w-(t-360))):0,wL:(w,t,e,i,s,n)=>{const o=Math.PI;n||(i=i*(o/180),s=s*(o/180));const r=i>s?-1:1,l=1e-5,a=o*2,h=[],c=o/2;let f=i,u=Math.min(a,Math.abs(s-i));if(u<l){const d=f+r*Math.min(u,c),m=w+e*Math.cos(f),g=t+e*Math.sin(f),p=w+e*Math.cos(d),y=t+e*Math.sin(d),x=(m+p)/2,b=(g+y)/2;return h.push([m,g,x,b,x,b,p,y]),h}for(;u>l;){const d=f+r*Math.min(u,c);h.push(G.MR(e,f,d,w,t)),u-=Math.abs(d-f),f=d}return h},MR:(w,t,e,i,s)=>{const n=(e-t)/2,o=w*Math.cos(n),r=w*Math.sin(n),l=o,a=-r,h=l*l+a*a,c=h+l*o+a*r,f=4/3*(Math.sqrt(2*h*c)-c)/(l*r-a*o),u=l-f*a,d=a+f*l,m=u,g=-d,p=n+t,y=Math.cos(p),x=Math.sin(p);return[i+w*Math.cos(t),s+w*Math.sin(t),i+u*y-d*x,s+u*x+d*y,i+m*y-g*x,s+m*x+g*y,i+w*Math.cos(e),s+w*Math.sin(e)]},dm:(w,t,e,i,s,n,o)=>{const r=s,l=n,a=Math.floor((w-e)/r)*r+e,h=Math.floor((t-i)/l)*l+i;let c=a;a+r-w<r/2&&(c=a+r);let f=h;return h+l-t<l/2&&(f=h+l),o.e(c,f),o},xL:(w,t)=>{let e=Math.max(w,t),i=Math.min(w,t),s=1,n=1;do s=e%i,n=i,e=i,i=s;while(s>0);return n},CR:(w,t,e,i)=>{const s=e<0,n=i<0;let o=0,r=0,l=0;w<t?(r=1,l=0):(r=0,l=1);let a=0,h=0,c=0,f=0;return o=r,a=o===0?w:t,c=o===0?e:i,(o===0?s:n)&&(c=-c),o=l,h=o===0?w:t,f=o===0?e:i,(o===0?s:n)&&(f=-f),G.NR(a,h,c,f,0,0)},NR:(w,t,e,i,s,n)=>{let o=0;if(i>0)if(e>0){const r=w*w,l=t*t,a=w*e,h=t*i;let c=-l+h,f=-l+Math.sqrt(a*a+h*h),u=c;const d=9999999999;for(let p=0;p<d&&(u=.5*(c+f),!(u===c||u===f));++p){const y=a/(u+r),x=h/(u+l),b=y*y+x*x-1;if(b>0)c=u;else if(b<0)f=u;else break}s=r*e/(u+r),n=l*i/(u+l);const m=s-e,g=n-i;o=Math.sqrt(m*m+g*g)}else s=0,n=t,o=Math.abs(i-t);else{const r=w*w-t*t,l=w*e;if(l<r){const a=l/r,h=a*a;s=w*a,n=t*Math.sqrt(Math.abs(1-h));const c=s-e;o=Math.sqrt(c*c+n*n)}else s=w,n=0,o=Math.abs(e-w)}return o},_n:{},bm:new PropertyCollection,Sr:new PropertyCollection,Mr:0,km:100};G.za=G.kR;var GeometryType=(w=>(w[w.Line=1]="Line",w[w.Rectangle=2]="Rectangle",w[w.Ellipse=3]="Ellipse",w[w.Path=4]="Path",w))(GeometryType||{}),GeometryStretch=(w=>(w[w.None=0]="None",w[w.Default=1]="Default",w[w.Fill=2]="Fill",w[w.Uniform=6]="Uniform",w))(GeometryStretch||{});class Geometry{o;Pm;Sm;Oc;Eu;Uu;to;eo;io;J;Fi;vi;li;ai;Ws;Ic;Ec;constructor(t,e){GSet._e(this),this.o=2,t===void 0&&(t=4),this.J=t,this.Fi=0,this.vi=0,this.li=0,this.ai=0,t===4?this.Ws=new List:this.Ws=Geometry.kx,this.Pm=this.Ws.at,this.Sm=new Rect,this.Oc=null,this.Eu=null,this.Uu=NaN,this.to=Spot.TopLeft,this.eo=Spot.BottomRight,this.Ic=NaN,this.Ec=NaN,this.io=2,e&&Object.assign(this,e)}copy(){const t=new Geometry;if(t.o=this.o&-2,t.J=this.J,t.Fi=this.Fi,t.vi=this.vi,t.li=this.li,t.ai=this.ai,this.J===4){const e=this.Ws.r,i=t.Ws;for(let s=0;s<e.length;s++){const n=e[s];i.add(n.copy())}t.Ws=i}else t.Ws=this.Ws;return t.Pm=this.Pm,t.Sm.h(this.Sm),t.Oc=this.Oc,t.Eu=this.Eu,t.Uu=this.Uu,t.to=this.to.C(),t.eo=this.eo.C(),t.Ic=this.Ic,t.Ec=this.Ec,t.io=this.io,t}static Line=1;static Rectangle=2;static Ellipse=3;static Path=4;static kx=new List().b();get u(){return(this.o&1)!==0}set u(t){t?this.o|=1:this.o&=-2}get xt(){return(this.o&2)!==0}set xt(t){t?this.o|=2:this.o&=-3}b(){if(this.u=!0,this.type!==4)return this;const t=this.figures;t.b();for(const e of t)e.b();return this}equalsApprox(t){if(!(t instanceof Geometry))return!1;if(this.type!==t.type)return this.type===1&&t.type===4?this.bL(t):t.type===1&&this.type===4?t.bL(this):!1;if(this.type===4){const e=this.figures.r,i=t.figures.r,s=e.length;if(s!==i.length)return!1;for(let n=0;n<s;n++){const o=e[n],r=i[n];if(!o.equalsApprox(r))return!1}return!0}else return G.c(this.startX,t.startX)&&G.c(this.startY,t.startY)&&G.c(this.endX,t.endX)&&G.c(this.endY,t.endY)}bL(t){if(this.type!==1||t.type!==4)return!1;if(t.figures.count===1){const e=t.figures.elt(0);if(e.segments.count===1&&G.c(this.startX,e.startX)&&G.c(this.startY,e.startY)){const i=e.segments.elt(0);if(i.type===2&&G.c(this.endX,i.endX)&&G.c(this.endY,i.endY))return!0}}return!1}static stringify(t){return t.toString()}static stringifyFixed(t){return U.s(t,"number",Geometry,"stringifyFixed:digits"),e=>e.toString(t)}ge(t){t in GeometryType?this.type=t:U.wr(this,t)}toString(t){t===void 0&&(t=-1);const e=s=>s===0?"0":s.toFixed(t);let i;switch(this.type){case 1:return t<0?"M"+this.startX.toString()+" "+this.startY.toString()+"L"+this.endX.toString()+" "+this.endY.toString():"M"+e(this.startX)+" "+e(this.startY)+"L"+e(this.endX)+" "+e(this.endY);case 2:return i=new Rect(this.startX,this.startY,0,0),i.union(this.endX,this.endY,0,0),t<0?"M"+i.x.toString()+" "+i.y.toString()+"H"+i.right.toString()+"V"+i.bottom.toString()+"H"+i.left.toString()+"z":"M"+e(i.x)+" "+e(i.y)+"H"+e(i.right)+"V"+e(i.bottom)+"H"+e(i.left)+"z";case 3:if(i=new Rect(this.startX,this.startY,0,0),i.union(this.endX,this.endY,0,0),t<0){const r=i.left.toString()+" "+(i.y+i.height/2).toString(),l=i.right.toString()+" "+(i.y+i.height/2).toString();return"M"+r+"A"+(i.width/2).toString()+" "+(i.height/2).toString()+" 0 0 1 "+l+"A"+(i.width/2).toString()+" "+(i.height/2).toString()+" 0 0 1 "+r}else{const r=e(i.left)+" "+e(i.y+i.height/2),l=e(i.right)+" "+e(i.y+i.height/2);return"M"+r+"A"+e(i.width/2)+" "+e(i.height/2)+" 0 0 1 "+l+"A"+e(i.width/2)+" "+e(i.height/2)+" 0 0 1 "+r}case 4:let s="";const n=this.figures.r,o=n.length;for(let r=0;r<o;r++){const l=n[r];r>0&&(s+=" x "),l.isFilled&&(s+="F "),s+=l.toString(t)}return s;default:return GeometryType[this.type]}}static fillPath(t){typeof t!="string"&&U.ri(t,"string",Geometry,"fillPath:str");const e=t.split(/[Xx]/),i=e.length;let s="";for(let n=0;n<i;n++){const o=e[n];if(o.match(/[Ff]/)!==null){n===0?s+=o:s+="X"+(o[0]===" "?"":" ")+o;continue}s+=(n===0?"":"X ")+"F"+(o[0]===" "?"":" ")+o}return s}static Mm="UuBbMmZzLlHhVvCcSsQqTtAaFfXx";static parse(t,e){e===void 0&&(e=!1),typeof t!="string"&&U.ri(t,"string",Geometry,"parse:str");const i=new RegExp("(["+Geometry.Mm+"])(["+Geometry.Mm+"])","gm"),s=new RegExp("(["+Geometry.Mm+"])([^s])","gm"),n=new RegExp("([^s])(["+Geometry.Mm+"])","gm");t=t.replace(/,/gm," "),t=t.replace(i,"$1 $2"),t=t.replace(i,"$1 $2"),t=t.replace(s,"$1 $2"),t=t.replace(n,"$1 $2"),t=t.replace(/([0-9])([+\-])/gm,"$1 $2"),t=t.replace(/[\s\r\t\n]+/gm," "),t=t.replace(/^\s+|\s+$/g,"");const o=t.split(" ");for(let L=0;L<o.length;L++){const A=o[L];if(A.match(/(\.[0-9]*)(\.)/gm)!==null){const D=U.ot();let F="",v=!1;for(let R=0;R<A.length;R++){const O=A[R];O==="."&&!v?(v=!0,F+=O):O==="."?(D.push(F),F="."):F+=O}D.push(F),o.splice(L,1);for(let R=0;R<D.length;R++)o.splice(L+R,0,D[R]);L+=D.length-1,U._(D)}}let r=-1,l="",a="";const h=new Point(0,0),c=new Point(0,0),f=new Point(0,0);let u=!0;function d(){return r>=b-1||o[r+1].match(M)!==null?!0:(u=!1,!1)}function m(){return r++,o[r]}function g(L){let A=parseFloat(m()),D=parseFloat(m());l===l.toLowerCase()&&(A=f.x+A,D=f.y+D),L.e(A,D)}function p(){return g(f),f}function y(){return g(c),c}function x(){const L=a.toLowerCase();return L==="c"||L==="s"||L==="q"||L==="t"?new Point(2*f.x-c.x,2*f.y-c.y):new Point(f.x,f.y)}const b=o.length,k=GeoStream.kL(null);let P=!1,S=!1,T=!1,N=!0;const M=new RegExp("["+Geometry.Mm+"]");for(;!(r>=b-1);){if(a=l,l=m(),l==="")continue;u=!0;let L=!1;switch(l.toUpperCase()){case"X":N=!0,P=!1,S=!1;break;case"M":const A=p();for(k.De===null||N===!0?(k.Bu(A.x,A.y,P,!1,!S,T),N=!1):k.TR(A.x,A.y),h.h(f);!d();){const D=p();k.Js(D.x,D.y)}break;case"L":for(;!d();){const D=p();k.Js(D.x,D.y)}u&&(L=!0);break;case"H":for(;!d();)f.e((l===l.toLowerCase()?f.x:0)+parseFloat(m()),f.y),k.Js(f.x,f.y);break;case"V":for(;!d();)f.e(f.x,(l===l.toLowerCase()?f.y:0)+parseFloat(m())),k.Js(f.x,f.y);u&&(L=!0);break;case"C":for(;!d();){const D=new Point;g(D);const F=y(),v=p();k.Cr(D.x,D.y,F.x,F.y,v.x,v.y)}u&&(L=!0);break;case"S":for(;!d();){const D=x(),F=y(),v=p();k.Cr(D.x,D.y,F.x,F.y,v.x,v.y)}u&&(L=!0);break;case"Q":for(;!d();){const D=y(),F=p();k.Vu(D.x,D.y,F.x,F.y)}u&&(L=!0);break;case"T":for(;!d();){const D=x();c.h(D);const F=p();k.Vu(D.x,D.y,F.x,F.y),c.h(F)}u&&(L=!0);break;case"B":for(;!d();){const D=parseFloat(m()),F=parseFloat(m());let v=parseFloat(m()),R=parseFloat(m());const O=parseFloat(m());let z=O,X=!1;d()||(z=parseFloat(m()),d()||(X=parseFloat(m())!==0)),l===l.toLowerCase()&&(v+=f.x,R+=f.y),k.LR(D,F,v,R,O,z,X)}u&&(L=!0);break;case"A":for(;!d();){const D=Math.abs(parseFloat(m())),F=Math.abs(parseFloat(m())),v=parseFloat(m());let R=!1,O=!1,z=0,X=0;const E=m();E.length===1?(R=!!parseFloat(E),O=!!parseFloat(m()),z=parseFloat(m()),X=parseFloat(m())):E.length===2?(R=!!parseFloat(E[0]),O=!!parseFloat(E[1]),z=parseFloat(m()),X=parseFloat(m())):(R=!!parseFloat(E[0]),O=!!parseFloat(E[1]),z=parseFloat(E.slice(2)),X=parseFloat(m())),l===l.toLowerCase()&&(z=f.x+z,X=f.y+X),f.e(z,X),k.AR(D,F,v,R,O,z,X)}u&&(L=!0);break;case"Z":k.DR(),f.h(h);break;case"F":{let D="",F=1;for(;o[r+F];){if(o[r+F]==="0"){T=!0,F++;continue}if(o[r+F].match(/[Uu]/)!==null){F++;continue}if(o[r+F].match(M)===null){F++;continue}D=o[r+F];break}D.match(/[Mm]/)?P=!0:k.FR();break}case"U":{let D="",F=1;for(;o[r+F];){if(o[r+F].match(/[Ff]/)!==null){F++;continue}if(o[r+F].match(M)===null){F++;continue}D=o[r+F];break}D.match(/[Mm]/)?S=!0:k.vR(!1);break}default:if(l==="0"||l==="1")break;U.jt("Unknown geometry command: "+l);break}if(L){U.jt(`Bad geometry command: ${l}, next token: ${m()},
string: ${t}`);break}}const C=k.Cm;if(GeoStream.PL(k),e){const L=C.figures.iterator;for(;L.next();){const A=L.value;A.isFilled=!0}}return C}static SL(t,e){const i=t.length,s=Point.l();for(let n=0;n<i;n++){const o=t[n];s.x=o[0],s.y=o[1],e.wt(s),o[0]=s.x,o[1]=s.y,s.x=o[2],s.y=o[3],e.wt(s),o[2]=s.x,o[3]=s.y,s.x=o[4],s.y=o[5],e.wt(s),o[4]=s.x,o[5]=s.y,s.x=o[6],s.y=o[7],e.wt(s),o[6]=s.x,o[7]=s.y}Point.i(s)}WP(){if(this.xt)return!0;if(this.type===4){const t=this.figures;if(this.Pm!==t.at)return!0;const e=this.figures.r,i=e.length;for(let s=0;s<i;s++)if(e[s].WP())return!0}return!1}Px(){if(this.xt=!1,this.Oc=null,this.Eu=null,this.Uu=NaN,this.type===4){const e=this.figures;this.Pm=e.at;const i=this.figures.r,s=i.length;for(let n=0;n<s;n++)i[n].RR()}const t=this.Sm;isNaN(this.Ic)||isNaN(this.Ec)?t.e(0,0,0,0):t.e(0,0,this.Ic,this.Ec),this.ML(t,!1),t.he(0,0,0,0)}computeBoundsWithoutOrigin(t){return t===void 0&&(t=new Rect),this.ML(t,!0),t}ML(t,e){switch(this.type){case 1:case 2:case 3:e?t.e(this.Fi,this.vi,0,0):t.he(this.Fi,this.vi,0,0),t.he(this.li,this.ai,0,0);break;case 4:const i=this.figures,s=i.r,n=i.length;for(let o=0;o<n;o++){const r=s[o];e&&o===0?t.e(r.startX,r.startY,0,0):t.he(r.startX,r.startY,0,0);const a=r.segments.r,h=a.length;let c=r.startX,f=r.startY;for(let u=0;u<h;u++){const d=a[u];switch(d.type){case 2:case 1:c=d.endX,f=d.endY,t.he(c,f,0,0);break;case 3:G.Iu(c,f,d.point1X,d.point1Y,d.point2X,d.point2Y,d.endX,d.endY,.5,t),c=d.endX,f=d.endY;break;case 4:G.jP(c,f,d.point1X,d.point1Y,d.endX,d.endY,.5,t),c=d.endX,f=d.endY;break;case 5:case 6:const m=d.type===5?d.Io(r):d.lh(r,c,f),g=m.length;if(g===0){c=d.type===5?d.centerX:d.endX,f=d.type===5?d.centerY:d.endY,t.he(c,f,0,0);break}let p=null;for(let y=0;y<g;y++)p=m[y],G.Iu(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],.5,t);p!==null&&(c=p[6],f=p[7]);break;default:U.n("Unknown Segment type: "+d.type)}}}break;default:U.n("Unknown Geometry type: "+this.type)}}OR(t,e){const i=this.bounds;let s=t/i.width,n=e/i.height;return isFinite(s)||(s=1),isFinite(n)||(n=1),s===1&&n===1?this:this.copy().scale(s,n)}normalize(){this.u&&U.L(this);const t=this.computeBoundsWithoutOrigin();return this.offset(-t.x,-t.y),new Point(-t.x,-t.y)}offset(t,e){return this.u&&U.L(this),this.T(1,0,0,1,t,e),this}scale(t,e){return this.u&&U.L(this),this.T(t,0,0,e,0,0),this}rotate(t,e,i){this.u&&U.L(this),e===void 0&&(e=0),i===void 0&&(i=0);const s=Transform.l();return s.Xe(),s.Ps(t,e,i),this.T(s.m11,s.m12,s.m21,s.m22,s.dx,s.dy),Transform.i(s),this}T(t,e,i,s,n,o){let r=0,l=0;switch(this.type){case 1:case 2:case 3:r=this.Fi,l=this.vi,this.Fi=r*t+l*i+n,this.vi=r*e+l*s+o,r=this.li,l=this.ai,this.li=r*t+l*i+n,this.ai=r*e+l*s+o;break;case 4:const h=this.figures.r,c=h.length;for(let f=0;f<c;f++){const u=h[f];r=u.startX,l=u.startY,u.startX=r*t+l*i+n,u.startY=r*e+l*s+o;const m=u.segments.r,g=m.length;for(let p=0;p<g;p++){const y=m[p];switch(y.type){case 2:case 1:r=y.endX,l=y.endY,y.endX=r*t+l*i+n,y.endY=r*e+l*s+o;break;case 3:r=y.point1X,l=y.point1Y,y.point1X=r*t+l*i+n,y.point1Y=r*e+l*s+o,r=y.point2X,l=y.point2Y,y.point2X=r*t+l*i+n,y.point2Y=r*e+l*s+o,r=y.endX,l=y.endY,y.endX=r*t+l*i+n,y.endY=r*e+l*s+o;break;case 4:r=y.point1X,l=y.point1Y,y.point1X=r*t+l*i+n,y.point1Y=r*e+l*s+o,r=y.endX,l=y.endY,y.endX=r*t+l*i+n,y.endY=r*e+l*s+o;break;case 5:if(r=y.centerX,l=y.centerY,y.centerX=r*t+l*i+n,y.centerY=r*e+l*s+o,e!==0){let x=Math.atan2(e,t)*180/Math.PI;x<0&&(x+=360),y.startAngle+=x}t<0&&(y.startAngle=180-y.startAngle,y.sweepAngle=-y.sweepAngle),s<0&&(y.startAngle=-y.startAngle,y.sweepAngle=-y.sweepAngle),y.radiusX*=Math.sqrt(t*t+i*i),y.radiusY!==void 0&&(y.radiusY*=Math.sqrt(e*e+s*s));break;case 6:if(r=y.endX,l=y.endY,y.endX=r*t+l*i+n,y.endY=r*e+l*s+o,y.radiusX===0||y.radiusY===0)break;if(e!==0){let x=Math.atan2(e,t)*180/Math.PI;x<0&&(x+=360),y.xAxisRotation+=x}t<0&&(y.xAxisRotation=180-y.xAxisRotation,y.isClockwiseArc=!y.isClockwiseArc),s<0&&(y.xAxisRotation=-y.xAxisRotation,y.isClockwiseArc=!y.isClockwiseArc),y.radiusX*=Math.sqrt(t*t+i*i),y.radiusY*=Math.sqrt(e*e+s*s);break;default:U.n("Unknown Segment type: "+y.type)}}}break}return this.xt=!0,this}containsPoint(t,e){e===void 0&&(e=0);const i=this.Fi,s=this.vi,n=this.li,o=this.ai;switch(this.type){case 1:return G.Ge(i,s,n,o,e,t.x,t.y);case 2:{const r=Math.min(i,n)-e,l=Math.min(s,o)-e,a=Math.abs(n-i)+e*2,h=Math.abs(o-s)+e*2,c=Rect.O(r,l,a,h),f=c.containsPoint(t);return Rect.i(c),f}case 3:{let r=Math.min(i,n)-e,l=Math.min(s,o)-e;const a=Math.abs(n-i)+e*2,h=Math.abs(o-s)+e*2,c=a/2,f=h/2;return c<=0||f<=0?!1:(r=t.x-(r+c),l=t.y-(l+f),r*r/(c*c)+l*l/(f*f)<=1)}case 4:return this.JP(t,e,!0,!1);default:return!1}}JP(t,e,i,s){const n=t.x,o=t.y,r=this.bounds.x-20,l=o;let a=0,h=0,c=0,f=0,u=0,d=0;const m=this.figures.r,g=m.length;for(let p=0;p<g;p++){const y=m[p],x=!y.isEvenOdd;if(y.isFilled){if(i&&y.$P(n,o,e))return!0}else{if(y.$P(n,o,s?e:e+2))return!0;continue}const b=y.segments;h=y.startX,c=y.startY;let k=h,P=c;const S=b.r;let T=S[0];for(let N=0;N<=b.length;N++){let M;switch(N!==b.length?(T=S[N],M=T.type,u=T.endX,d=T.endY):(M=2,u=k,d=P),M){case 1:{const C=this.Sx(n,o,r,l,h,c,k,P);if(isNaN(C))return!0;a+=C,k=u,P=d;break}case 2:{const C=this.Sx(n,o,r,l,h,c,u,d);if(isNaN(C))return!0;a+=C;break}case 3:f=G.xm(h,c,T.point1X,T.point1Y,T.point2X,T.point2Y,u,d,r,l,n,o,.5),a+=f;break;case 4:{const C=(h+2*T.point1X)/3,L=(c+2*T.point1Y)/3,A=(T.point1X*2+u)/3,D=(T.point1Y*2+d)/3;f=G.xm(h,c,C,L,A,D,u,d,r,l,n,o,.5),a+=f;break}case 5:case 6:{const C=T.type===5?T.Io(y):T.lh(y,h,c),L=C.length;if(L===0){const D=this.Sx(n,o,r,l,h,c,T.type===5?T.centerX:T.endX,T.type===5?T.centerY:T.endY);if(isNaN(D))return!0;a+=D;break}let A=null;for(let D=0;D<L;D++){if(A=C[D],D===0){const F=this.Sx(n,o,r,l,h,c,A[0],A[1]);if(isNaN(F))return!0;a+=F}f=G.xm(A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7],r,l,n,o,.5),a+=f}A!==null&&(u=A[6],d=A[7]);break}default:U.n("Unknown Segment type: "+T.type)}h=u,c=d}if(x){if(a!==0)return!0}else if(a%2!==0)return!0;a=0}return!1}Sx(t,e,i,s,n,o,r,l){if(G.Ge(n,o,r,l,.05,t,e))return NaN;const a=(t-i)*(o-l);if(a===0)return 0;const h=((t*s-e*i)*(n-r)-(t-i)*(n*l-o*r))/a,c=(t*s-e*i)*(o-l)/a;if(h>=t)return 0;if((n>r?n-r:r-n)<(o>l?o-l:l-o)){if(o<l){if(c<o||c>l)return 0}else if(c<l||c>o)return 0}else if(n<r){if(h<n||h>r)return 0}else if(h<r||h>n)return 0;return a>0?1:-1}CL(t,e,i){const s=this.figures.r,n=s.length;for(let o=0;o<n;o++)if(s[o].$P(t,e,i))return!0;return!1}getPointAlongPath(t,e){if(t<0?t=0:t>1&&(t=1),e===void 0&&(e=new Point),this.type===1)return e.e(this.startX+t*(this.endX-this.startX),this.startY+t*(this.endY-this.startY)),e;const i=this.flattenedSegments,s=this.flattenedLengths,n=this.flattenedTotalLength,o=i.length,r=n*t;let l=0;for(let a=0;a<o;a++){const h=s[a],c=h.length;for(let f=0;f<c;f++){const u=h[f];if(l+u>=r){const d=r-l,m=u===0?0:d/u,g=i[a],p=g[f*2],y=g[f*2+1],x=g[f*2+2],b=g[f*2+3];return e.e(p+(x-p)*m,y+(b-y)*m),e}l+=u}}return e}getAngleAlongPath(t){if(t<0?t=0:t>1&&(t=1),this.type===1)return Math.atan2(this.endY-this.startY,this.endX-this.startX)*180/Math.PI;const e=this.flattenedSegments,i=this.flattenedLengths,s=this.flattenedTotalLength,n=e.length,o=s*t;let r=0;for(let l=0;l<n;l++){const a=i[l],h=a.length;for(let c=0;c<h;c++){const f=a[c];if(r+f>=o){const u=e[l],d=u[c*2],m=u[c*2+1],g=u[c*2+2],p=u[c*2+3];return Math.abs(g-d)<1&&Math.abs(p-m)<1?0:Math.abs(g-d)<1?p-m>=0?90:270:Math.abs(p-m)<1?g-d>=0?0:180:Math.atan2(p-m,g-d)*180/Math.PI}r+=f}}return NaN}getPointAndAngleAlongPath(t,e){if(t<0?t=0:t>1&&(t=1),e===void 0&&(e=[]),e.length=3,this.type===1)return e[0]=this.startX+t*(this.endX-this.startX),e[1]=this.startY+t*(this.endY-this.startY),e[2]=Math.atan2(this.endY-this.startY,this.endX-this.startX)*180/Math.PI,e;const i=this.flattenedSegments,s=this.flattenedLengths,n=this.flattenedTotalLength,o=i.length,r=n*t;let l=0;for(let a=0;a<o;a++){const h=s[a],c=h.length;for(let f=0;f<c;f++){const u=h[f];if(l+u>=r){const d=r-l,m=u===0?0:d/u,g=i[a],p=g[f*2],y=g[f*2+1],x=g[f*2+2],b=g[f*2+3];e[0]=p+(x-p)*m,e[1]=y+(b-y)*m;let k;return Math.abs(x-p)<1&&Math.abs(b-y)<1?k=0:Math.abs(x-p)<1?k=b-y>=0?90:270:Math.abs(b-y)<1?k=x-p>=0?0:180:k=Math.atan2(b-y,x-p)*180/Math.PI,e[2]=k,e}l+=u}}return e}getFractionForPoint(t){if(this.type===1){const e=this.startX,i=this.startY,s=this.endX,n=this.endY;if(e===s&&i===n)return 0;{const o=t.x,r=t.y;let l=0,a=0;if(e===s)return i<n?(l=i,a=n):(l=n,a=i),r<=l?l===i?0:1:r>=a?a===i?0:1:Math.abs(r-i)/(a-l);if(i===n)return e<s?(l=e,a=s):(l=s,a=e),o<=l?l===e?0:1:o>=a?a===e?0:1:Math.abs(o-e)/(a-l);{const h=(s-e)**2+(n-i)**2,c=Point.l();G.Il(e,i,s,n,o,r,c);const f=c.x,u=c.y;return Point.i(c),Math.sqrt(((f-e)**2+(u-i)**2)/h)}}}else if(this.type===2){const e=this.startX,i=this.startY,s=this.endX,n=this.endY;if(e===s&&i===n)return 0;{const o=s-e,r=n-i,l=o*2+r*2;let a=t.x,h=t.y;a=Math.min(Math.max(a,e),s),h=Math.min(Math.max(h,i),n);const c=Math.abs(a-e),f=Math.abs(a-s),u=Math.abs(h-i),d=Math.abs(h-n),m=Math.min(c,f,u,d);if(m===u)return a/l;if(m===f)return(o+h)/l;if(m===d)return(o*2+r-a)/l;if(m===c)return(o*2+r*2-h)/l}}else{const e=this.flattenedSegments,i=this.flattenedLengths,s=this.flattenedTotalLength,n=Point.l();let o=1/0,r=0,l=0;const a=e.length;let h=0,c=0;for(let u=0;u<a;u++){const d=e[u],m=i[u],g=d.length;for(let p=0;p<g;p+=2){const y=d[p],x=d[p+1];if(p===0){h=y,c=x;continue}G.Il(h,c,y,x,t.x,t.y,n);const b=(n.x-t.x)**2+(n.y-t.y)**2;b<o&&(o=b,r=l,r+=Math.sqrt((n.x-h)**2+(n.y-c)**2)),l+=m[(p-2)/2],h=y,c=x}}Point.i(n);const f=r/s;return f<0?0:f>1?1:f}return 0}get flattenedSegments(){return this.NL(),this.Oc}NL(){if(this.Oc===null){const t=this.Oc=[],e=this.Eu=[];this.IR(t,e)}}get flattenedLengths(){return this.NL(),this.Eu}get flattenedTotalLength(){let t=this.Uu;if(isNaN(t)){if(this.type===1){const e=Math.abs(this.endX-this.startX),i=Math.abs(this.endY-this.startY);t=Math.sqrt(e*e+i*i)}else if(this.type===2){const e=Math.abs(this.endX-this.startX),i=Math.abs(this.endY-this.startY);t=e*2+i*2}else{const e=this.flattenedLengths,i=e.length;t=0;for(let s=0;s<i;s++){const n=e[s],o=n.length;for(let r=0;r<o;r++)t+=n[r]}}this.Uu=t}return t}ZP(t){const e=[];let i=0,s=0;const n=t.length;for(let o=0;o<n;o+=2){const r=t[o],l=t[o+1];if(o===0){i=r,s=l;continue}const a=Math.sqrt(Point.distanceSquared(i,s,r,l));e.push(a),i=r,s=l}return e}IR(t,e){let i=[];const s=[];if(this.type===1)i.push(this.startX),i.push(this.startY),i.push(this.endX),i.push(this.endY),t.push(i),s.push(Math.sqrt((this.startX-this.endX)**2+(this.startY-this.endY)**2)),e.push(s);else if(this.type===2)i.push(this.startX),i.push(this.startY),i.push(this.endX),i.push(this.startY),i.push(this.endX),i.push(this.endY),i.push(this.startX),i.push(this.endY),i.push(this.startX),i.push(this.startY),t.push(i),s.push(Math.abs(this.startX-this.endX)),s.push(Math.abs(this.startY-this.endY)),s.push(Math.abs(this.startX-this.endX)),s.push(Math.abs(this.startY-this.endY)),e.push(s);else if(this.type===3){const n=new PathFigure;n.startX=this.endX,n.startY=(this.startY+this.endY)/2;const o=new PathSegment(5);o.startAngle=0,o.sweepAngle=360,o.centerX=(this.startX+this.endX)/2,o.centerY=(this.startY+this.endY)/2,o.radiusX=Math.abs(this.startX-this.endX)/2,o.radiusY=Math.abs(this.startY-this.endY)/2,n.add(o);const r=o.Io(n),l=r.length;if(l===0)i.push(o.centerX),i.push(o.centerY);else{let a=n.startX,h=n.startY;for(let c=0;c<l;c++){const f=r[c];G.Qn(a,h,f[2],f[3],f[4],f[5],f[6],f[7],.5,i),a=f[6],h=f[7]}}t.push(i),e.push(this.ZP(i))}else{const n=this.figures.iterator;for(;n.next();){const o=n.value;i=[],i.push(o.startX),i.push(o.startY);let r=o.startX,l=o.startY,a=r,h=l;const c=o.segments.r,f=c.length;for(let u=0;u<f;u++){const d=c[u];switch(d.type){case 1:i.length>=4&&(t.push(i),e.push(this.ZP(i))),i=[],i.push(d.endX),i.push(d.endY),r=d.endX,l=d.endY,a=r,h=l;break;case 2:i.push(d.endX),i.push(d.endY),r=d.endX,l=d.endY;break;case 3:G.Qn(r,l,d.point1X,d.point1Y,d.point2X,d.point2Y,d.endX,d.endY,.5,i),r=d.endX,l=d.endY;break;case 4:G.ym(r,l,d.point1X,d.point1Y,d.endX,d.endY,.5,i),r=d.endX,l=d.endY;break;case 5:{const m=d.Io(o),g=m.length;if(g===0){i.push(d.centerX),i.push(d.centerY),r=d.centerX,l=d.centerY;break}for(let p=0;p<g;p++){const y=m[p];G.Qn(r,l,y[2],y[3],y[4],y[5],y[6],y[7],.5,i),r=y[6],l=y[7]}break}case 6:{const m=d.lh(o,r,l),g=m.length,p=d.endX,y=d.endY;if(g===0){i.push(p),i.push(y),r=p,l=y;break}for(let x=0;x<g;x++){const b=m[x];G.Qn(r,l,b[2],b[3],b[4],b[5],b[6],b[7],.5,i),r=b[6],l=b[7]}break}default:U.n("Segment not of valid type: "+d.type)}d.isClosed&&(i.push(a),i.push(h))}i.length>=4&&(t.push(i),e.push(this.ZP(i)))}}}get type(){return this.J}set type(t){this.J!==t&&(this.u&&U.L(this,t),this.J=t,t===4?this.Ws=new List:(Geometry.kx===null&&(Geometry.kx=new List().b()),this.Ws=Geometry.kx),this.xt=!0)}get startX(){return this.Fi}set startX(t){this.Fi!==t&&(this.u&&U.L(this,t),this.Fi=t,this.xt=!0)}get startY(){return this.vi}set startY(t){this.vi!==t&&(this.u&&U.L(this,t),this.vi=t,this.xt=!0)}get endX(){return this.li}set endX(t){this.li!==t&&(this.u&&U.L(this,t),this.li=t,this.xt=!0)}get endY(){return this.ai}set endY(t){this.ai!==t&&(this.u&&U.L(this,t),this.ai=t,this.xt=!0)}get figures(){return this.Ws}set figures(t){this.Ws!==t&&(this.u&&U.L(this,t),this.Ws=t,this.xt=!0)}add(t){return this.Ws.add(t),this}setSpots(t,e,i,s,n,o,r,l){return this.u&&U.L(this),this.to=new Spot(t,e,n,o),this.eo=new Spot(i,s,r,l),this}get spot1(){return this.to}set spot1(t){this.u&&U.L(this,t),this.to=t.C()}get spot2(){return this.eo}set spot2(t){this.u&&U.L(this,t),this.eo=t.C()}get defaultStretch(){return this.io}set defaultStretch(t){this.io=t}get bounds(){return this.WP()&&this.Px(),this.Sm}polygonClosestSegment(t,e){if(e===void 0&&(e=10),this.type!==4)return null;const i=t.x,s=t.y;let n=1/0,o=0,r=0,l=0,a=0,h=0,c=0,f=0,u=0;return this.figures.each(d=>{let m=d.startX,g=d.startY;d.segments.each(p=>{let y=p.endX,x=p.endY,b=0;if(p.type===2)b=Point.distanceLineSegmentSquared(i,s,m,g,y,x);else{m=p.endX,g=p.endY;return}b<n&&(n=b,o=l,r=a,h=m,c=g,f=y,u=x),m=y,g=x,a++,p.isClosed&&(y=d.startX,x=d.startY,b=Point.distanceLineSegmentSquared(i,s,m,g,y,x),b<n&&(n=b,o=l,r=a,h=m,c=g,f=y,u=x),a++)}),l++,a=0}),n<e*e?{figi:o,segi:r,ax:h,ay:c,bx:f,by:u}:null}get polygonArea(){if(this.type===4){const t=this.figures.iterator;let e=0,i=0,s=0,n=0,o=0;for(;t.next();){const r=t.value;if(!r.isFilled)continue;e=r.startX,i=r.startY;const l=r.segments.iterator;for(;l.next();){const a=l.value;s=a.endX,n=a.endY,a.type===1||a.type!==5&&(o+=e*n-i*s),e=s,i=n}o+=e*r.startY-i*r.startX}return Math.abs(o)/2}else if(this.type===2){const t=Math.abs(this.startX-this.endX),e=Math.abs(this.startY-this.endY);return t*e}else if(this.type===3){const t=Math.abs(this.startX-this.endX),e=Math.abs(this.startY-this.endY);return Math.PI*t/2*e/2}else return 0}get polygonLength(){if(this.type===4){const t=this.figures.iterator;let e=0,i=0,s=0,n=0,o=0;for(;t.next();){const r=t.value;e=r.startX,i=r.startY;const l=r.segments.iterator;for(;l.next();){const h=l.value;s=h.endX,n=h.endY,h.type===1||h.type!==5&&(o+=Math.sqrt((s-e)*(s-e)+(n-i)*(n-i))),e=s,i=n}const a=r.segments.last();a&&a.isClosed&&(s=r.startX,n=r.startY,o+=Math.sqrt((s-e)*(s-e)+(n-i)*(n-i)))}return o}else if(this.type===2){const t=Math.abs(this.startX-this.endX),e=Math.abs(this.startY-this.endY);return t*2+e*2}else if(this.type===3){const t=Math.abs(this.startX-this.endX)/2,e=Math.abs(this.startY-this.endY)/2;if(t+e===0)return 0;const i=(t-e)*(t-e)/((t+e)*(t+e));let s=i,n=1+s/4;return s*=i,n+=s/64,s*=i,n+=s/256,s*=i,n+=s*25/16384,s*=i,n+=s*49/65536,s*=i,n+=s*441/1048576,Math.PI*(t+e)*n}else{const t=this.startX,e=this.startY,i=this.endX,s=this.endY;return Math.sqrt((i-t)*(i-t)+(s-e)*(s-e))}}static computeConvexHull(t){t.sort((s,n)=>s.x===n.x?n.y-s.y:n.x-s.x);const e=[];for(let s=0;s<t.length;s++){for(;e.length>=2&&t[s].compareWithLineSegmentPoint(e[e.length-2],e[e.length-1])>=0;)e.pop();e.push(t[s])}e.pop();const i=[];for(let s=t.length-1;s>=0;s--){for(;i.length>=2&&t[s].compareWithLineSegmentPoint(i[i.length-2],i[i.length-1])>=0;)i.pop();i.push(t[s])}return i.pop(),e.concat(i)}static generatePolygon(t,e,i){e===void 0&&(e=0),i===void 0&&(i=!0);const s=new Geometry;if(t.length>1)if(e>0)if(i){t.push(t[0]),t.push(t[1]);let n=!0;const o=new PathFigure(0,0,i,!1);for(let l=1;l<t.length;l++){const a=(t[l-1].x+t[l].x)/2,h=(t[l-1].y+t[l].y)/2,c=t[l-1].distanceSquaredPoint(t[l]),f=.5*e/Math.sqrt(c);if(f<.5){const u=t[l-1].x+(t[l].x-t[l-1].x)*f,d=t[l-1].y+(t[l].y-t[l-1].y)*f;if(n?(n=!1,o.startX=u,o.startY=d):o.add(new PathSegment(3,u,d,t[l-1].x,t[l-1].y,t[l-1].x,t[l-1].y)),l<t.length-1){const m=t[l].x+(t[l-1].x-t[l].x)*f,g=t[l].y+(t[l-1].y-t[l].y)*f;o.add(new PathSegment(2,m,g))}}else n?(n=!1,o.startX=a,o.startY=h):o.add(new PathSegment(3,a,h,t[l-1].x,t[l-1].y,t[l-1].x,t[l-1].y))}const r=o.segments.last();r&&r.close(),s.add(o)}else{const n=new PathFigure(t[0].x,t[0].y,!1,!1);for(let o=1;o<t.length;o++){const r=(t[o-1].x+t[o].x)/2,l=(t[o-1].y+t[o].y)/2,a=t[o-1].distanceSquaredPoint(t[o]),h=.5*e/Math.sqrt(a);if(h<.5){if(o>1){const u=t[o-1].x+(t[o].x-t[o-1].x)*h,d=t[o-1].y+(t[o].y-t[o-1].y)*h;n.add(new PathSegment(3,u,d,t[o-1].x,t[o-1].y,t[o-1].x,t[o-1].y))}const c=t[o].x+(t[o-1].x-t[o].x)*h,f=t[o].y+(t[o-1].y-t[o].y)*h;n.add(new PathSegment(2,c,f))}else o>1&&n.add(new PathSegment(3,r,l,t[o-1].x,t[o-1].y,t[o-1].x,t[o-1].y));o===t.length-1&&n.add(new PathSegment(2,t[o].x,t[o].y))}s.add(n)}else{const n=new PathFigure(t[0].x,t[0].y,i,!1);for(let o=1;o<t.length;o++)n.add(new PathSegment(2,t[o].x,t[o].y));if(i){const o=n.segments.last();o&&o.close()}s.add(n)}return s}}Geometry.stringify=Geometry.stringify;Geometry.stringifyFixed=Geometry.stringifyFixed;Geometry.fillPath=Geometry.fillPath;Geometry.parse=Geometry.parse;class PathFigure{o;Fi;vi;Uc;Nm;Ji;constructor(t,e,i,s,n){i===void 0&&(i=!0),s===void 0&&(s=!0),n===void 0&&(n=!1),this.o=2|(i?4:0)|(s?8:0)|(n?16:0),t!==void 0?this.Fi=t:this.Fi=0,e!==void 0?this.vi=e:this.vi=0,this.Uc=new List,this.Nm=this.Uc.at,this.Ji=null}copy(){const t=new PathFigure;t.o=this.o&-2,t.Fi=this.Fi,t.vi=this.vi;const e=this.Uc.r,i=e.length,s=t.Uc;for(let n=0;n<i;n++){const r=e[n].copy();s.add(r)}return t.Nm=this.Nm,t.Ji=this.Ji,t}equalsApprox(t){if(!(t instanceof PathFigure)||!G.c(this.startX,t.startX)||!G.c(this.startY,t.startY))return!1;const e=this.segments.r,i=t.segments.r,s=e.length;if(s!==i.length)return!1;for(let n=0;n<s;n++){const o=e[n],r=i[n];if(!o.equalsApprox(r))return!1}return!0}toString(t){t===void 0&&(t=-1);let e="";if(t<0)e="M"+this.startX.toString()+" "+this.startY.toString();else{const n=o=>o===0?"0":o.toFixed(t);e="M"+n(this.startX)+" "+n(this.startY)}const i=this.segments.r,s=i.length;for(let n=0;n<s;n++){const o=i[n];e+=" "+o.toString(t)}return e}get u(){return(this.o&1)!==0}set u(t){t?this.o|=1:this.o&=-2}get xt(){return(this.o&2)!==0}set xt(t){t?this.o|=2:this.o&=-3}b(){this.u=!0;const t=this.segments;t.b();const e=t.r,i=t.length;for(let s=0;s<i;s++)e[s].b();return this}WP(){if(this.xt)return!0;const t=this.segments;if(this.Nm!==t.at)return!0;for(const e of t)if(e.xt)return!0;return!1}RR(){this.xt=!1,this.Ji=null;const t=this.segments;this.Nm=t.at;for(const e of t)e.xt=!1,e.$s=null}get isFilled(){return(this.o&4)!==0}set isFilled(t){this.u&&U.L(this,t),t?this.o|=4:this.o&=-5}get isShadowed(){return(this.o&8)!==0}set isShadowed(t){this.u&&U.L(this,t),t?this.o|=8:this.o&=-9}get isEvenOdd(){return(this.o&16)!==0}set isEvenOdd(t){this.u&&U.L(this,t),t?this.o|=16:this.o&=-17}get startX(){return this.Fi}set startX(t){this.u&&U.L(this,t),this.Fi=t,this.Ji=null,this.xt=!0}get startY(){return this.vi}set startY(t){this.u&&U.L(this,t),this.vi=t,this.Ji=null,this.xt=!0}get segments(){return this.Uc}set segments(t){this.u&&U.L(this,t),this.Uc=t,this.Ji=null,this.xt=!0}add(t){return this.Uc.add(t),this.Ji=null,this}$P(t,e,i){const s=this;let n=s.startX,o=s.startY,r=n,l=o;const a=s.segments.r,h=a.length;for(let c=0;c<h;c++){const f=a[c];switch(f.type){case 1:r=f.endX,l=f.endY,n=f.endX,o=f.endY;break;case 2:if(G.Ge(n,o,f.endX,f.endY,i,t,e))return!0;n=f.endX,o=f.endY;break;case 3:if(G.wx(n,o,f.point1X,f.point1Y,f.point2X,f.point2Y,f.endX,f.endY,.5,t,e,i))return!0;n=f.endX,o=f.endY;break;case 4:if(G.qP(n,o,f.point1X,f.point1Y,f.endX,f.endY,.5,t,e,i))return!0;n=f.endX,o=f.endY;break;case 5:case 6:const u=f.type===5?f.Io(s):f.lh(s,n,o),d=u.length,m=f.type===5?f.centerX:f.endX,g=f.type===5?f.centerY:f.endY;if(d===0){if(G.Ge(n,o,m,g,i,t,e))return!0;n=m,o=g;break}let p=null;for(let y=0;y<d;y++)if(p=u[y],y===0&&G.Ge(n,o,p[0],p[1],i,t,e)||G.wx(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7],.5,t,e,i))return!0;p!==null&&(n=p[6],o=p[7]);break;default:U.n("Unknown Segment type: "+f.type)}if(f.isClosed&&(n!==r||o!==l)&&G.Ge(n,o,r,l,i,t,e))return!0}return!1}}var SegmentType=(w=>(w[w.Move=1]="Move",w[w.Line=2]="Line",w[w.Bezier=3]="Bezier",w[w.QuadraticBezier=4]="QuadraticBezier",w[w.Arc=5]="Arc",w[w.SvgArc=6]="SvgArc",w))(SegmentType||{});class PathSegment{J;o;li;ai;bn;Vl;zl;Nr;$s;constructor(t,e,i,s,n,o,r,l){if(GSet._e(this),t===void 0&&(t=2),this.J=t,this.o=2,e!==void 0?this.li=e:this.li=0,i!==void 0?this.ai=i:this.ai=0,s===void 0&&(s=0),n===void 0&&(n=0),o===void 0&&(o=0),r===void 0&&(r=0),t===6){let a=o;a=a%360,a<0&&(a+=360),this.bn=a,this.Vl=0,this.zl=Math.max(s,0),this.Nr=Math.max(n,0),typeof r=="boolean"?r&&(this.isLargeArc=!0):typeof r=="number"&&r&&(this.isLargeArc=!0),l&&(this.isClockwiseArc=!0)}else this.bn=s,this.Vl=n,t===5&&(o=Math.max(o,0)),this.zl=o,typeof r=="number"?(t===5&&(r=Math.max(r,0)),this.Nr=r):this.Nr=0;this.$s=null}copy(){const t=new PathSegment;return t.J=this.J,t.o=this.o&-2,t.li=this.li,t.ai=this.ai,t.bn=this.bn,t.Vl=this.Vl,t.zl=this.zl,t.Nr=this.Nr,t}equalsApprox(t){if(!(t instanceof PathSegment)||this.type!==t.type||this.isClosed!==t.isClosed)return!1;switch(this.type){case 1:case 2:return G.c(this.endX,t.endX)&&G.c(this.endY,t.endY);case 3:return G.c(this.endX,t.endX)&&G.c(this.endY,t.endY)&&G.c(this.point1X,t.point1X)&&G.c(this.point1Y,t.point1Y)&&G.c(this.point2X,t.point2X)&&G.c(this.point2Y,t.point2Y);case 4:return G.c(this.endX,t.endX)&&G.c(this.endY,t.endY)&&G.c(this.point1X,t.point1X)&&G.c(this.point1Y,t.point1Y);case 5:return G.c(this.startAngle,t.startAngle)&&G.c(this.sweepAngle,t.sweepAngle)&&G.c(this.centerX,t.centerX)&&G.c(this.centerY,t.centerY)&&G.c(this.radiusX,t.radiusX)&&G.c(this.radiusY,t.radiusY);case 6:return this.isClockwiseArc===t.isClockwiseArc&&this.isLargeArc===t.isLargeArc&&G.c(this.xAxisRotation,t.xAxisRotation)&&G.c(this.endX,t.endX)&&G.c(this.endY,t.endY)&&G.c(this.radiusX,t.radiusX)&&G.c(this.radiusY,t.radiusY);default:return!1}}ge(t){t in SegmentType?this.type=t:U.wr(this,t)}toString(t){t===void 0&&(t=-1);const e=s=>s===0?"0":s.toFixed(t);let i="";switch(this.type){case 1:t<0?i="M"+this.endX.toString()+" "+this.endY.toString():i="M"+e(this.endX)+" "+e(this.endY);break;case 2:t<0?i="L"+this.endX.toString()+" "+this.endY.toString():i="L"+e(this.endX)+" "+e(this.endY);break;case 3:t<0?i="C"+this.point1X.toString()+" "+this.point1Y.toString()+" "+this.point2X.toString()+" "+this.point2Y.toString()+" "+this.endX.toString()+" "+this.endY.toString():i="C"+e(this.point1X)+" "+e(this.point1Y)+" "+e(this.point2X)+" "+e(this.point2Y)+" "+e(this.endX)+" "+e(this.endY);break;case 4:t<0?i="Q"+this.point1X.toString()+" "+this.point1Y.toString()+" "+this.endX.toString()+" "+this.endY.toString():i="Q"+e(this.point1X)+" "+e(this.point1Y)+" "+e(this.endX)+" "+e(this.endY);break;case 5:t<0?i="B"+this.startAngle.toString()+" "+this.sweepAngle.toString()+" "+this.centerX.toString()+" "+this.centerY.toString()+" "+this.radiusX.toString()+" "+this.radiusY.toString():i="B"+e(this.startAngle)+" "+e(this.sweepAngle)+" "+e(this.centerX)+" "+e(this.centerY)+" "+e(this.radiusX)+" "+e(this.radiusY);break;case 6:t<0?i="A"+this.radiusX.toString()+" "+this.radiusY.toString()+" "+this.xAxisRotation.toString()+" "+(this.isLargeArc?1:0)+" "+(this.isClockwiseArc?1:0)+" "+this.endX.toString()+" "+this.endY.toString():i="A"+e(this.radiusX)+" "+e(this.radiusY)+" "+e(this.xAxisRotation)+" "+(this.isLargeArc?1:0)+" "+(this.isClockwiseArc?1:0)+" "+e(this.endX)+" "+e(this.endY);break;default:i=SegmentType[this.type]}return i+(this.isClosed?"z":"")}static Move=1;static Line=2;static Bezier=3;static QuadraticBezier=4;static Arc=5;static SvgArc=6;get u(){return(this.o&1)!==0}set u(t){t?this.o|=1:this.o&=-2}get xt(){return(this.o&2)!==0}set xt(t){t?this.o|=2:this.o&=-3}b(){return this.u=!0,this}close(){return this.isClosed=!0,this}Io(t){if(this.$s!==null&&t.xt===!1)return this.$s;const e=this.radiusX;let i=this.radiusY;if(i===void 0&&(i=e),e===0||i===0)return this.$s=[],this.$s;const s=this.bn,n=this.Vl,o=G.wL(0,0,e<i?e:i,this.startAngle,this.startAngle+this.sweepAngle,!1);if(e!==i){const l=Transform.l();l.Xe(),e<i?l.it(1,i/e):l.it(e/i,1),Geometry.SL(o,l),Transform.i(l)}const r=o.length;for(let l=0;l<r;l++){const a=o[l];a[0]+=s,a[1]+=n,a[2]+=s,a[3]+=n,a[4]+=s,a[5]+=n,a[6]+=s,a[7]+=n}return this.$s=o,this.$s}lh(t,e,i){if(this.$s!==null&&t.xt===!1)return this.$s;if(this.radiusX===0||this.radiusY===0)return this.$s=[],this.$s;const s=e,n=i;let o=this.zl,r=this.Nr;o===0&&(o=1e-4),r===0&&(r=1e-4);const l=this.bn*(Math.PI/180),a=this.isLargeArc,h=this.isClockwiseArc,c=this.li,f=this.ai,u=Math.cos(l),d=Math.sin(l),m=u*(s-c)/2+d*(n-f)/2,g=-d*(s-c)/2+u*(n-f)/2,p=m*m/(o*o)+g*g/(r*r);p>1&&(o*=Math.sqrt(p),r*=Math.sqrt(p));let y=(a===h?-1:1)*Math.sqrt((o*o*r*r-o*o*g*g-r*r*m*m)/(o*o*g*g+r*r*m*m));isNaN(y)&&(y=0);let x=y*o*g/r,b=y*-r*m/o;isNaN(x)&&(x=0),isNaN(b)&&(b=0);const k=(s+c)/2+u*x-d*b,P=(n+f)/2+d*x+u*b,S=(Y,V)=>Math.sqrt(Y*Y+V*V),T=(Y,V,H,q)=>(Y*H+V*q)/(S(Y,V)*S(H,q)),N=(Y,V,H,q)=>(Y*q<V*H?-1:1)*Math.acos(T(Y,V,H,q)),M=N(1,0,(m-x)/o,(g-b)/r),C=(m-x)/o,L=(g-b)/r,A=(-m-x)/o,D=(-g-b)/r;let F=N(C,L,A,D);const v=T(C,L,A,D);v<=-1?F=Math.PI:v>=1&&(F=0),!h&&F>0&&(F=F-2*Math.PI),h&&F<0&&(F=F+2*Math.PI);const R=o>r?o:r,O=o>r?1:o/r,z=o>r?r/o:1,X=G.wL(0,0,R,M,M+F,!0),E=Transform.l();return E.Xe(),E.js(k,P),E.Ps(this.bn,0,0),E.it(O,z),Geometry.SL(X,E),Transform.i(E),this.$s=X,this.$s}get isClosed(){return(this.o&8)!==0}set isClosed(t){this.isClosed!==t&&(t?this.o|=8:this.o&=-9,this.xt=!0)}get type(){return this.J}set type(t){this.u&&U.L(this,t),this.J=t,this.xt=!0}get endX(){return this.li}set endX(t){this.u&&U.L(this,t),this.li=t,this.xt=!0}get endY(){return this.ai}set endY(t){this.u&&U.L(this,t),this.ai=t,this.xt=!0}get point1X(){return this.bn}set point1X(t){this.u&&U.L(this,t),this.bn=t,this.xt=!0}get point1Y(){return this.Vl}set point1Y(t){this.u&&U.L(this,t),this.Vl=t,this.xt=!0}get point2X(){return this.zl}set point2X(t){this.u&&U.L(this,t),this.zl=t,this.xt=!0}get point2Y(){return this.Nr}set point2Y(t){this.u&&U.L(this,t),this.Nr=t,this.xt=!0}get centerX(){return this.bn}set centerX(t){this.u&&U.L(this,t),this.bn=t,this.xt=!0}get centerY(){return this.Vl}set centerY(t){this.u&&U.L(this,t),this.Vl=t,this.xt=!0}get radiusX(){return this.zl}set radiusX(t){t<0&&U.$(t,">= zero",PathSegment,"radiusX"),this.u&&U.L(this,t),this.zl=t,this.xt=!0}get radiusY(){return this.Nr}set radiusY(t){t<0&&U.$(t,">= zero",PathSegment,"radiusY"),this.u&&U.L(this,t),this.Nr=t,this.xt=!0}get startAngle(){return this.li}set startAngle(t){this.u&&U.L(this,t),t=t%360,t<0&&(t+=360),this.li=t,this.xt=!0}get sweepAngle(){return this.ai}set sweepAngle(t){this.u&&U.L(this,t),t>360&&(t=360),t<-360&&(t=-360),this.ai=t,this.xt=!0}get isClockwiseArc(){return(this.o&4)!==0}set isClockwiseArc(t){this.u&&U.L(this,t),t?this.o|=4:this.o&=-5,this.xt=!0}get isLargeArc(){return(this.o&16)!==0}set isLargeArc(t){this.u&&U.L(this,t),t?this.o|=16:this.o&=-17,this.xt=!0}get xAxisRotation(){return this.bn}set xAxisRotation(t){this.u&&U.L(this,t),t=t%360,t<0&&(t+=360),this.bn=t,this.xt=!0}}class InputEvent{a;Mx;Cx;Tm;Lm;Am;Dm;Fm;vm;Rm;Om;Im;Em;Um;Xl;Bm;Vm;Cs;Ri;constructor(){this.a=null,this.Mx=new Point(0,0).b(),this.Cx=new Point(0,0).b(),this.Tm=0,this.Lm=0,this.Am=1,this.Dm="",this.Fm="",this.vm=!1,this.Rm=!1,this.Om=0,this.Im=0,this.Em=!1,this.Um=!1,this.Xl=!1,this.Bm=null,this.Vm=0,this.Cs=null,this.Ri=null}copy(){const t=new InputEvent;return this.clone(t)}clone(t){return t.a=this.a,t.Mx.h(this.viewPoint),t.Cx.h(this.documentPoint),t.Tm=this.Tm,t.Lm=this.Lm,t.Am=this.Am,t.Dm=this.Dm,t.Fm=this.Fm,t.vm=this.vm,t.Rm=this.Rm,t.Om=this.Om,t.Im=this.Im,t.Em=this.Em,t.Um=this.Um,t.Xl=this.Xl,t.Bm=this.Bm,t.Vm=this.Vm,t.Cs=this.Cs,t.Ri=this.Ri,t}toString(){let t="^";return this.modifiers!==0&&(t+="M:"+this.modifiers),this.button!==0&&(t+="B:"+this.button),this.key!==""&&(t+="K:"+this.key),this.clickCount!==0&&(t+="C:"+this.clickCount),this.delta!==0&&(t+="D:"+this.delta),this.handled&&(t+="h"),this.bubbles&&(t+="b"),this.documentPoint!==null&&(t+="@"+this.documentPoint.toString()),t}get diagram(){return this.a}set diagram(t){this.a=t}get viewPoint(){return this.Mx}set viewPoint(t){this.Mx.h(t)}get documentPoint(){return this.Cx}set documentPoint(t){this.Cx.h(t)}getMultiTouchViewPoint(t,e){const i=this.diagram;return i===null||i.TL(this.event,t,e),e}getMultiTouchDocumentPoint(t,e){const i=this.diagram;return i===null||(i.TL(this.event,t,e),e.h(i.transformViewToDoc(e))),e}LL(t){if(this.diagram===null)return t;const i=this.getMultiTouchDocumentPoint(0,Point.O(NaN,NaN)),s=this.getMultiTouchDocumentPoint(1,Point.O(NaN,NaN));return t.e((Math.min(s.x,i.x)+Math.max(s.x,i.x))/2,(Math.min(s.y,i.y)+Math.max(s.y,i.y))/2),Point.i(i),Point.i(s),t}nB(t){if(this.diagram===null)return t;const i=this.getMultiTouchViewPoint(0,Point.O(NaN,NaN)),s=this.getMultiTouchViewPoint(1,Point.O(NaN,NaN));return t.e((Math.min(s.x,i.x)+Math.max(s.x,i.x))/2,(Math.min(s.y,i.y)+Math.max(s.y,i.y))/2),Point.i(i),Point.i(s),t}get modifiers(){return this.Tm}set modifiers(t){this.Tm=t}get button(){return this.Lm}set button(t){if(this.Lm=t,this.event===null)switch(t){case 0:this.buttons=1;return;case 1:this.buttons=4;return;case 2:this.buttons=2;return}}get buttons(){return this.Am}set buttons(t){this.Am=t}get key(){return this.Dm}set key(t){this.Dm=t}get code(){return this.Fm}set code(t){this.Fm=t}get down(){return this.vm}set down(t){this.vm=t}get up(){return this.Rm}set up(t){this.Rm=t}get clickCount(){return this.Om}set clickCount(t){this.Om=t}get delta(){return this.Im}set delta(t){this.Im=t}get isMultiTouch(){return this.Em}set isMultiTouch(t){this.Em=t}get handled(){return this.Um}set handled(t){this.Um=t}get bubbles(){return this.Xl}set bubbles(t){this.Xl=t}get event(){return this.Bm}set event(t){this.Bm=t}get isTouchEvent(){const t=this.event;return t===null?!1:t.pointerType==="touch"||t.pointerType==="pen"}get timestamp(){return this.Vm}set timestamp(t){this.Vm=t}get targetDiagram(){return this.Cs}set targetDiagram(t){this.Cs=t}get targetObject(){return this.Ri}set targetObject(t){this.Ri=t}get control(){return(this.modifiers&1)!==0}set control(t){this.modifiers=t?this.modifiers|1:this.modifiers&-2}get shift(){return(this.modifiers&4)!==0}set shift(t){this.modifiers=t?this.modifiers|4:this.modifiers&-5}get alt(){return(this.modifiers&2)!==0}set alt(t){this.modifiers=t?this.modifiers|2:this.modifiers&-3}get meta(){return(this.modifiers&8)!==0}set meta(t){this.modifiers=t?this.modifiers|8:this.modifiers&-9}get left(){const t=this.event;return t!==null&&(t.type==="mousedown"||t.type==="mouseup"||t.type==="pointerdown"||t.type==="pointerup")?this.button===0:(this.buttons&1)!==0}set left(t){t?this.buttons|=1:this.buttons&=-2}get right(){const t=this.event;return t!==null&&(t.type==="mousedown"||t.type==="mouseup"||t.type==="pointerdown"||t.type==="pointerup")?this.button===2:(this.buttons&2)!==0}set right(t){t?this.buttons|=2:this.buttons&=-3}get middle(){const t=this.event;return t!==null&&(t.type==="mousedown"||t.type==="mouseup"||t.type==="pointerdown"||t.type==="pointerup")?this.button===1:(this.buttons&4)!==0}set middle(t){t?this.buttons|=4:this.buttons&=-5}get commandKey(){const t=this.code,e=this.key;return"cxvyzagCXVYZAG".includes(e)?e.toLowerCase():t==="KeyC"?"c":t==="KeyX"?"x":t==="KeyV"?"v":t==="KeyY"?"y":t==="KeyZ"?"z":t==="KeyA"?"a":t==="KeyG"?"g":t!==""?t:e}}class DiagramEvent{a;St;zm;Xm;constructor(){this.a=null,this.St="",this.zm=null,this.Xm=null}copy(){const t=new DiagramEvent;return t.a=this.a,t.St=this.St,t.zm=this.zm,t.Xm=this.Xm,t}toString(){let t="*"+this.name;return this.subject!==null&&(t+=":"+this.subject.toString()),this.parameter!==null&&(t+="("+this.parameter.toString()+")"),t}get diagram(){return this.a}set diagram(t){this.a=t}get name(){return this.St}set name(t){this.St=t}get subject(){return this.zm}set subject(t){this.zm=t}get parameter(){return this.Xm}set parameter(t){this.Xm=t}}var ChangeType=(w=>(w[w.Transaction=1]="Transaction",w[w.Property=2]="Property",w[w.Insert=3]="Insert",w[w.Remove=4]="Remove",w))(ChangeType||{});class ChangedEvent{zu;Gm;kn;Fe;a;Xu;Bc;Vc;zc;Xc;constructor(){this.zu=2,this.Gm="",this.kn="",this.Fe=null,this.a=null,this.Xu=null,this.Bc=null,this.Vc=null,this.zc=null,this.Xc=null}static Transaction=1;static Property=2;static Insert=3;static Remove=4;clear(){this.Fe=null,this.a=null,this.Xu=null,this.Bc=null,this.Vc=null,this.zc=null,this.Xc=null}copy(){const t=new ChangedEvent;t.zu=this.zu,t.Gm=this.Gm,t.kn=this.kn,t.Fe=this.Fe,t.a=this.a,t.Xu=this.Xu;let e=this.Bc;return U.Z(e)&&U.nt(e.copyFrozen)?t.Bc=e.copyFrozen():t.Bc=e,e=this.Vc,U.Z(e)&&U.nt(e.copyFrozen)?t.Vc=e.copyFrozen():t.Vc=e,e=this.zc,U.Z(e)&&U.nt(e.copyFrozen)?t.zc=e.copyFrozen():t.zc=e,e=this.Xc,U.Z(e)&&U.nt(e.copyFrozen)?t.Xc=e.copyFrozen():t.Xc=e,t}ge(t){t in ChangeType?this.change=t:U.wr(this,t)}toString(){let t="";return this.change===1?t+="* ":this.change===2?t+=this.model!==null?"!m":"!d":t+=(this.model!==null?"!m":"!d")+this.change,this.propertyName&&typeof this.propertyName=="string"&&(t+=" "+this.propertyName),this.modelChange&&this.modelChange!==this.propertyName&&(t+=" "+this.modelChange),t+=": ",this.change===1?this.oldValue!==null&&(t+=" "+this.oldValue):(this.object!==null&&(t+=U.toString(this.object)),this.oldValue!==null&&(t+="  old: "+U.toString(this.oldValue)),this.oldParam!==null&&(t+=" "+this.oldParam),this.newValue!==null&&(t+="  new: "+U.toString(this.newValue)),this.newParam!==null&&(t+=" "+this.newParam)),t}getValue(t){return t?this.oldValue:this.newValue}getParam(t){return t?this.oldParam:this.newParam}canUndo(){return this.model!==null||this.diagram!==null}undo(){this.canUndo()&&(this.model!==null?this.model.changeState(this,!0):this.diagram!==null&&this.diagram.AL(this,!0))}canRedo(){return this.model!==null||this.diagram!==null}redo(){this.canRedo()&&(this.model!==null?this.model.changeState(this,!1):this.diagram!==null&&this.diagram.AL(this,!1))}get model(){return this.Fe}set model(t){this.Fe=t}get diagram(){return this.a}set diagram(t){this.a=t}get change(){return this.zu}set change(t){this.zu=t}get modelChange(){return this.Gm}set modelChange(t){this.Gm=t}get propertyName(){return this.kn}set propertyName(t){this.kn=t}get isTransactionFinished(){return this.zu===1&&(this.kn==="CommittedTransaction"||this.kn==="FinishedUndo"||this.kn==="FinishedRedo")}get object(){return this.Xu}set object(t){this.Xu=t}get oldValue(){return this.Bc}set oldValue(t){this.Bc=t}get oldParam(){return this.Vc}set oldParam(t){this.Vc=t}get newValue(){return this.zc}set newValue(t){this.zc=t}get newParam(){return this.Xc}set newParam(t){this.Xc=t}}class Transaction{DL;St;QP;constructor(){this.DL=new List().b(),this.St="",this.QP=!1}toString(t){let e="Transaction: "+this.name+" "+this.changes.count.toString()+(this.isComplete?"":", incomplete");if(t!==void 0&&t>0){const i=this.changes.count;for(let s=0;s<i;s++){const n=this.changes.elt(s);n!==null&&(e+=`
  `+n.toString())}}return e}clear(){const t=this.changes;t._t();for(let e=t.count-1;e>=0;e--){const i=t.elt(e);i!==null&&i.clear()}t.clear(),t.b()}canUndo(){return this.isComplete}undo(){if(this.canUndo())for(let t=this.changes.count-1;t>=0;t--){const e=this.changes.elt(t);e!==null&&e.undo()}}canRedo(){return this.isComplete}redo(){if(!this.canRedo())return;const t=this.changes.count;for(let e=0;e<t;e++){const i=this.changes.elt(e);i!==null&&i.redo()}}ER(t){const e=this.changes;for(let i=e.count-1;i>=t;i--){const s=e.elt(i);s!==null&&s.undo(),e._t(),e.removeAt(i)}e.b()}UR(t){const e=this.changes;e._t(),e.addAll(t),e.b()}thaw(){this.changes._t()}optimize(){if(!this.isComplete)return;const t=this.changes;t._t();const e=new Map;for(let s=0;s<t.count;s++){const n=t.elt(s);if(n===null||n.change!==2||!n.object)continue;let o=e.get(n.object);o||(o=new Map,e.set(n.object,o));const r=o.get(n.propertyName);r===void 0?o.set(n.propertyName,-1):(r>0&&t.setElt(r,null),o.set(n.propertyName,s))}let i=0;for(let s=0;s<t.count;s++){const n=t.elt(s);n!==null&&(s>i&&t.setElt(i,n),i++)}for(;t.length>i;)t.pop();t.b()}get changes(){return this.DL}get name(){return this.St}set name(t){this.St=t}get isComplete(){return this.QP}set isComplete(t){this.QP=!!t}}class UndoManager{Nx;Ye;FL;Ns;_P;Ym;Gl;tS;eS;Pn;Gc;Tx;Zs;Lx;Ax;Km;Dx;constructor(t){this.Nx=new GSet,this.Ye=!1,this.FL=new List().b(),this.Ns=-1,this._P=999,this.Zs=!1,this.Ym=null,this.Gl=0,this.tS=!1,this.eS=23,this.Pn=new List().b(),this.Gc=new List,this.Tx=!0,this.Lx=!1,this.Ax=!1,this.Km=!1,this.Dx=!1,t&&Object.assign(this,t)}toString(t){let e="UndoManager "+this.historyIndex+"<"+this.history.count+"<="+this.maxHistoryLength;e+="[";let i=this.nestedTransactionNames.count;for(let s=0;s<i;s++)s>0&&(e+=" "),e+=this.nestedTransactionNames.elt(s);if(e+="]",t!==void 0&&t>0){i=this.history.count;for(let s=0;s<i;s++)e+=`
 `+this.history.elt(s).toString(t-1)}return e}clear(){const t=this.history;t._t();for(let e=t.count-1;e>=0;e--){const i=t.elt(e);i!==null&&i.clear()}t.clear(),this.Ns=-1,t.b(),this.Zs=!1,this.Ym=null,this.Gl=0,this.Pn._t(),this.Pn.clear(),this.Pn.b(),this.Gc.clear(),this.Lx=!1,this.Ax=!1,this.Km=!1,this.Dx=!1}copyProperties(t){this.isEnabled=t.isEnabled,this.maxHistoryLength=t.maxHistoryLength,this.checksTransactionLevel=t.checksTransactionLevel}addModel(t){this.Nx.add(t)}removeModel(t){this.Nx.delete(t)}startTransaction(t){if(t===void 0&&(t=""),t===null&&(t=""),this.isUndoingRedoing)return!1;this.Tx===!0&&(this.Tx=!1,this.Gl++,this.Yl||this.Kl("StartingFirstTransaction",t,this.currentTransaction),this.Gl>0&&this.Gl--),this.isEnabled&&(this.Pn._t(),this.Pn.add(t),this.Pn.b(),this.currentTransaction===null?this.Gc.add(0):this.Gc.add(this.currentTransaction.changes.count)),this.Gl++;const e=this.transactionLevel===1;return e&&(this.Yl||this.Kl("StartedTransaction",t,this.currentTransaction)),e}commitTransaction(t){return t===void 0&&(t=""),this.vL(!0,t)}rollbackTransaction(){return this.vL(!1,"")}vL(t,e){if(this.isUndoingRedoing)return!1;this.checksTransactionLevel&&this.transactionLevel<1&&U.jt("Ending transaction without having started a transaction: "+e);const i=this.transactionLevel===1;let s=this.currentTransaction;i&&t&&(this.Yl||this.Kl("CommittingTransaction",e,s));let n=0;if(this.transactionLevel>0&&(this.Gl--,this.isEnabled)){const o=this.Pn.count;o>0&&(e===""&&(e=this.Pn.elt(0)),this.Pn._t(),this.Pn.removeAt(o-1),this.Pn.b());const r=this.Gc.count;r>0&&(n=this.Gc.elt(r-1),this.Gc.removeAt(r-1))}if(i){if(t){if(this.Km=!1,s===null&&e!==""&&(s=this.currentTransaction),this.isEnabled&&s!==null){const o=s;o.isComplete||(o.isComplete=!0,o.name=e),this.discardHistoryAfterIndex();const r=this.history;r._t();const l=this.maxHistoryLength;if(l>=0){if(l===0)r.clear();else if(r.count>=l){const a=r.elt(0);a!==null&&a.clear(),r.removeAt(0),this.Ns--}}l!==0&&(r.count===0||r.get(r.count-1)!==o)&&(r.add(o),this.Ns++),r.b(),s=o}this.Yl||this.Kl("CommittedTransaction",e,s)}else{this.Zs=!0;try{this.isEnabled&&s!==null&&(s.isComplete=!0,s.undo())}finally{this.Yl||this.Kl("RolledBackTransaction",e,s),this.Zs=!1}s!==null&&s.clear()}return this.Ym=null,this.Fx&&this.clear(),this.Fx=!1,this.vx=!1,!0}else return this.isEnabled&&!t&&s!==null&&s.ER(n),!1}discardHistoryAfterIndex(){if(this.isUndoingRedoing||!this.canRedo())return;const t=this.history;t._t();for(let e=t.count-1;e>this.historyIndex;e--){const i=t.elt(e);i!==null&&i.clear(),t.removeAt(e),this.Km=!0}t.b()}combineTransactions(t){if(this.isUndoingRedoing)return;const e=this.history;if(e.count<2)return;e._t();let i=-1;t?(i=e.indexOf(t),i<0&&U.n("combineTransactions given unknown Transaction: "+t),i++):(t=e.elt(e.count-2),i=e.count-1);const s=e.elt(i);t.UR(s.changes),e.removeAt(i),this.historyIndex>=e.count&&this.Ns--,e.b()}thaw(){this.history._t()}canUndo(){if(!this.isEnabled||this.transactionLevel>0)return!1;const t=this.transactionToUndo;return!!(t!==null&&t.canUndo())}undo(){if(!this.canUndo())return;const t=this.transactionToUndo;if(t!==null)try{this.Zs=!0,this.Kl("StartingUndo","Undo",t),this.Ns--,t.undo()}catch(e){U.jt("undo error: "+e.toString())}finally{this.Kl("FinishedUndo","Undo",t),this.Zs=!1}}canRedo(){if(!this.isEnabled||this.transactionLevel>0)return!1;const t=this.transactionToRedo;return!!(t!==null&&t.canRedo())}redo(){if(!this.canRedo())return;const t=this.transactionToRedo;if(t!==null)try{this.Zs=!0,this.Kl("StartingRedo","Redo",t),this.Ns++,t.redo()}catch(e){U.jt("redo error: "+e.toString())}finally{this.Kl("FinishedRedo","Redo",t),this.Zs=!1}}Kl(t,e,i){const s=new ChangedEvent;s.change=1,s.propertyName=t,s.object=i,s.oldValue=e;const n=this.models;for(;n.next();){const o=n.value;s.model=o,o.BR(s)}}handleChanged(t){if(!this.isEnabled||this.isUndoingRedoing||this.skipsEvent(t))return;let e=this.currentTransaction;e===null&&(e=new Transaction,this.Ym=e);const i=t.copy(),s=e.changes;if(s._t(),s.add(i),s.b(),this.checksTransactionLevel&&this.eS>0&&this.transactionLevel<=0&&!this.Tx){const n=t.diagram;if(n!==null&&n.ah===!1)return;U.jt("Change not within a transaction: "+i.toString()),this.eS--}}skipsEvent(t){if(t===null||t.change===1)return!0;const e=t.object;if(e===null)return!1;if(e.layer!==void 0){const i=e.layer;if(i!==null&&i.isTemporary)return!0}else if(e.isTemporary)return!0;return!1}get models(){return this.Nx.iterator}get isEnabled(){return this.Ye}set isEnabled(t){this.Ye=!!t}get transactionToUndo(){return this.historyIndex>=0&&this.historyIndex<=this.history.count-1?this.history.elt(this.historyIndex):null}get transactionToRedo(){return this.historyIndex<this.history.count-1?this.history.elt(this.historyIndex+1):null}get isUndoingRedoing(){return this.Zs}get history(){return this.FL}get maxHistoryLength(){return this._P}set maxHistoryLength(t){typeof t!="number"||isNaN(t)||(this._P=t)}get historyIndex(){return this.Ns}get currentTransaction(){return this.Ym}get transactionLevel(){return this.Gl}get isInTransaction(){return this.Gl>0}get nestedTransactionNames(){return this.Pn}get checksTransactionLevel(){return this.tS}set checksTransactionLevel(t){this.tS=t}get Fx(){return this.Lx}set Fx(t){this.Lx=t}get vx(){return this.Ax}set vx(t){this.Ax=t}get Yl(){return this.Dx}set Yl(t){this.Dx=t}get isJustDiscarded(){return this.Km}}class Tool{a;St;Ye;iS;sS;Hm;RL;constructor(){GSet._e(this),this.a=Diagram.qm(),this.St="",this.Ye=!0,this.iS=!1,this.sS=null,this.RL=new InputEvent,this.Hm=-1}get diagram(){return this.a}set diagram(t){t instanceof Diagram&&(this.a=t)}toString(){return this.name!==""?this.name+" Tool":U.Jn(this.constructor)}updateAdornments(t){}canStart(){return this.isEnabled}canStartButton(){return this.diagram.lastInput.left}doStart(){}doActivate(){this.isActive=!0}doDeactivate(){this.isActive=!1}doStop(){}doCancel(){this.transactionResult=null,this.stopTool()}stopTool(){const t=this.diagram;t.currentTool===this&&(t.currentTool=null,t.currentCursor="")}doMouseDown(){!this.isActive&&this.canStart()&&this.doActivate()}doMouseMove(){}doMouseUp(){this.stopTool()}doMouseWheel(){}canStartMultiTouch(){return!0}standardPinchZoomStart(){const t=this.diagram,e=t.lastInput,i=e.getMultiTouchViewPoint(0,Point.O(NaN,NaN)),s=e.getMultiTouchViewPoint(1,Point.O(NaN,NaN));if(!i.isReal()||!s.isReal()){Point.i(i),Point.i(s);return}if(this.doCancel(),t.getInputOption("hasGestureZoom")){t.nS=t.scale;const n=s.x-i.x,o=s.y-i.y,r=Math.sqrt(n*n+o*o);t.oS=r,e.bubbles=!1}Point.i(i),Point.i(s)}standardPinchZoomMove(){const t=this.diagram,e=t.lastInput,i=e.getMultiTouchViewPoint(0,Point.O(NaN,NaN)),s=e.getMultiTouchViewPoint(1,Point.O(NaN,NaN));if(!i.isReal()||!s.isReal()){Point.i(i),Point.i(s);return}if(this.doCancel(),t.getInputOption("hasGestureZoom")){const n=s.x-i.x,o=s.y-i.y,l=Math.sqrt(n*n+o*o)/t.oS,a=new Point((Math.min(s.x,i.x)+Math.max(s.x,i.x))/2,(Math.min(s.y,i.y)+Math.max(s.y,i.y))/2),h=t.nS*l,c=t.commandHandler;if(h!==t.scale&&c.canResetZoom(h)){const f=t.zoomPoint;t.zoomPoint=a,c.resetZoom(h),t.zoomPoint=f}e.bubbles=!1}Point.i(i),Point.i(s)}doKeyDown(){this.diagram.lastInput.code==="Escape"&&this.doCancel()}doKeyUp(){}startTransaction(t){return t===void 0&&(t=this.name),this.transactionResult=null,this.diagram.startTransaction(t)}stopTransaction(){const t=this.diagram;return this.transactionResult===null?t.rollbackTransaction():t.commitTransaction(this.transactionResult)}standardMouseSelect(){const t=this.diagram;if(!t.allowSelect)return;const e=t.lastInput,i=t.findPartAt(e.documentPoint,!1);if(i!==null){if(U.yr?e.meta:e.control){t.D("ChangingSelection",t.selection);let s=i;for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!s.isSelected),t.D("ChangedSelection",t.selection)}else if(e.shift){if(!i.isSelected){t.D("ChangingSelection",t.selection);let s=i;for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!0),t.D("ChangedSelection",t.selection)}}else if(!i.isSelected){let s=i;for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&t.select(s)}}else this.canStartButton()&&!(U.yr?e.meta:e.control)&&!e.shift&&t.clearSelection()}standardMouseClick(t,e){t===void 0&&(t=null),e===void 0&&(e=o=>!o.layer?.isTemporary);const i=this.diagram,s=i.lastInput,n=i.findObjectAt(s.documentPoint,t,e);return s.targetObject=n,this.OL(n,s,i)}OL(t,e,i){if(e.handled=!1,t!==null&&!t.isEnabledObject())return!1;let s=0;e.left?e.clickCount===1?s=1:e.clickCount===2?s=2:s=1:e.right&&e.clickCount===1&&(s=3);let n="ObjectSingleClicked";if(t!==null){switch(s){case 1:n="ObjectSingleClicked";break;case 2:n="ObjectDoubleClicked";break;case 3:n="ObjectContextClicked";break}s!==0&&i.D(n,t)}else{switch(s){case 1:n="BackgroundSingleClicked";break;case 2:n="BackgroundDoubleClicked";break;case 3:n="BackgroundContextClicked";break}s!==0&&i.D(n)}if(t!==null)for(;t!==null;){let o=null;switch(s){case 1:o=t.click;break;case 2:o=t.doubleClick?t.doubleClick:t.click;break;case 3:o=t.contextClick;break}if(o!==null&&(o(e,t),e.handled))break;t=t.panel}else{let o=null;switch(s){case 1:o=i.click;break;case 2:o=i.doubleClick?i.doubleClick:i.click;break;case 3:o=i.contextClick;break}o!==null&&o(e)}return e.handled}standardMouseOver(){const t=this.diagram,e=t.lastInput;if(t.animationManager.Ne===!0)return;const i=t.skipsUndoManager;t.skipsUndoManager=!0;let s=t.viewportBounds.containsPoint(e.documentPoint)?t.findObjectAt(e.documentPoint,null,null):null;e.event&&(e.event.type==="pointercancel"||e.event.type==="pointerout")&&(s=null),e.targetObject=s;let n=!1;if(s!==t.Yc){let o=t.Yc;const r=o;for(t.Yc=s,this.IL(o,s),e.handled=!1;o!==null;){const l=o.mouseLeave;if(l!==null&&(s===o||s!==null&&s.isContainedBy(o)||(l(e,o,s),n=!0,e.handled)))break;o=o.panel}for(o=r,e.handled=!1;s!==null;){const l=s.mouseEnter;if(l!==null&&(o===s||o!==null&&o.isContainedBy(s)||(l(e,s,o),n=!0,e.handled)))break;s=s.panel}s=t.Yc}if(s!==null){let o=s,r="";for(;o!==null&&(r=o.cursor,r==="");)o=o.panel;for(t.currentCursor=r,e.handled=!1,o=s;o!==null;){const l=o.mouseOver;if(l!==null&&(l(e,o),n=!0,e.handled))break;o=o.panel}}else{this.doUpdateCursor(null);const o=t.mouseOver;o!==null&&(o(e),n=!0)}n&&t.requestUpdate(),t.skipsUndoManager=i}doUpdateCursor(t){const e=this.diagram;e&&(e.currentCursor="")}IL(t,e){}standardMouseWheel(){const t=this.diagram,e=t.lastInput;let i=e.delta;if(i===0||!t.documentBounds.isReal())return;const s=t.commandHandler,n=t.toolManager.mouseWheelBehavior;if(s!==null&&(n===2&&!e.shift||n===1&&e.control)){if(i>0?s.canIncreaseZoom():s.canDecreaseZoom()){const o=t.zoomPoint;t.zoomPoint=e.viewPoint,i>0?s.increaseZoom():s.decreaseZoom(),t.zoomPoint=o}e.bubbles=!1}else if(n===2&&e.shift||n===1&&!e.control){const o=t.position.copy(),r=e.event,l=r.deltaMode;let a=r.deltaX,h=r.deltaY,c="pixel";if((a!==0||h!==0)&&!e.shift){switch(l){case 0:c="pixel";break;case 1:c="line";break;case 2:c="page";break}if(a!==0&&t.allowHorizontalScroll){const f=t.scrollHorizontalLineChange;a=a*(f/16),t.scroll(c,a>0?"right":"left",Math.abs(a))}if(h!==0&&t.allowVerticalScroll){const f=t.scrollVerticalLineChange;h=h*(f/16),t.scroll(c,h>0?"down":"up",Math.abs(h))}}else!e.shift&&t.allowVerticalScroll?(i=i*3*t.scrollVerticalLineChange,t.scroll(c,i>0?"up":"down",Math.abs(i))):e.shift&&t.allowHorizontalScroll&&(i=i*3*t.scrollHorizontalLineChange,t.scroll(c,i>0?"left":"right",Math.abs(i)));this.doWheelChange(t,o,e)}}doWheelChange(t,e,i){(!t.position.equals(e)||i.event.wheelDeltaX!==0)&&(i.bubbles=!1)}standardWaitAfter(t,e){e===void 0&&(e=this.diagram.lastInput),this.cancelWaitAfter();const i=this,s=e.clone(this.RL);this.Hm=U.yn(()=>i.doWaitAfter(s),t)}cancelWaitAfter(){this.Hm!==-1&&U.Dc(this.Hm),this.Hm=-1}doWaitAfter(t){}findToolHandleAt(t,e){const s=this.diagram.findObjectAt(t,n=>{for(;n!==null&&!(n.panel instanceof Adornment);)n=n.panel;return n});return s===null?null:s.part.category===e?s:null}isBeyondDragSize(t,e){const i=this.diagram;t===void 0&&(t=i.firstInput.viewPoint),e===void 0&&(e=i.lastInput.viewPoint);const s=i.toolManager.dragSize;let n=s.width,o=s.height;return i.firstInput.isTouchEvent&&(n+=6,o+=6),Math.abs(e.x-t.x)>n||Math.abs(e.y-t.y)>o}get name(){return this.St}set name(t){U.s(t,"string",Tool,"name"),this.St=t}get isEnabled(){return this.Ye}set isEnabled(t){U.s(t,"boolean",Tool,"isEnabled"),this.Ye=t}get isActive(){return this.iS}set isActive(t){U.s(t,"boolean",Tool,"isActive"),this.iS=t}get transactionResult(){return this.sS}set transactionResult(t){t!==null&&U.s(t,"string",Tool,"transactionResult"),this.sS=t}}var WheelMode=(w=>(w[w.Scroll=1]="Scroll",w[w.Zoom=2]="Zoom",w[w.None=3]="None",w))(WheelMode||{}),GestureMode=(w=>(w[w.Zoom=1]="Zoom",w[w.Cancel=2]="Cancel",w[w.None=3]="None",w))(GestureMode||{});class ToolManager extends Tool{EL;UL;BL;rS;lS;aS;hS;cS;fS;uS;jm;hh;constructor(t){super(),this.name="ToolManager",this.EL=new List,this.UL=new List,this.BL=new List,this.rS=850,this.lS=850,this.aS=new Size(2,2).Pt(),this.hS=5e3,this.cS=1,this.fS=1,this.uS=null,this.jm=null,this.hh=-1,t&&Object.assign(this,t)}static WheelScroll=1;static WheelZoom=2;static WheelNone=3;static GestureZoom=1;static GestureCancel=2;static GestureNone=3;get mouseWheelBehavior(){return this.cS}set mouseWheelBehavior(t){this.cS=t}get gestureBehavior(){return this.fS}set gestureBehavior(t){if(this.diagram&&this.diagram.st){const e=this.diagram.st;t===1?e.gt.style.touchAction="none":t===3?e.gt.style.touchAction="pinch-zoom":t===2&&(e.gt.style.touchAction="none")}this.fS=t}initializeStandardTools(){return this}updateAdornments(t){const e=this.currentToolTip;if(e instanceof Adornment&&this.jm===t){const i=e.adornedObject;(t!==null?i!==null&&i.part===t:i===null)?this.showToolTip(e,i):this.hideToolTip()}}doMouseDown(){const t=this.diagram,e=t.lastInput;if(e.isTouchEvent&&this.gestureBehavior===2&&(e.bubbles=!1),e.isMultiTouch){if(this.cancelWaitAfter(),this.gestureBehavior===3){e.bubbles=!0;return}if(this.gestureBehavior===2)return}const i=t.undoManager,s=this.mouseDownTools.length;for(let n=0;n<s;n++){const o=this.mouseDownTools.elt(n);if(o.diagram=this.diagram,o.canStart()){t.doFocus(),t.currentTool=o,t.currentTool===o&&(o.isActive||o.doActivate(),o.doMouseDown());return}}t.lastInput.button===1&&(this.mouseWheelBehavior===1?this.mouseWheelBehavior=2:this.mouseWheelBehavior===2&&(this.mouseWheelBehavior=1)),this.doActivate(),this.standardWaitAfter(this.holdDelay,e)}doMouseMove(){const t=this.diagram,e=t.lastInput;if(e.isMultiTouch){if(this.gestureBehavior===3){e.bubbles=!0;return}if(this.gestureBehavior===2)return}if(this.isActive){const s=this.mouseMoveTools.length;for(let n=0;n<s;n++){const o=this.mouseMoveTools.elt(n);if(o.diagram=this.diagram,o.canStart()){t.doFocus(),t.currentTool=o,t.currentTool===o&&(o.isActive||o.doActivate(),o.doMouseMove());return}}}this.VL(t);const i=e.event;i!==null&&(i.type==="pointermove"||!i.cancelable)&&(e.bubbles=!0)}VL(t){this.standardMouseOver(),this.isBeyondDragSize()&&this.standardWaitAfter(this.isActive?this.holdDelay:this.hoverDelay,t.lastInput)}IL(t,e){const i=this.currentToolTip;i!==null&&(e!==null&&i instanceof Adornment&&(e===i||e.isContainedBy(i))||this.hideToolTip())}doWaitAfter(t){const e=this.diagram;if(!e.VR())return;const i=e.lastInput;if(e.lastInput=t,this.doMouseHover(),this.isActive||this.doToolTip(),t.isTouchEvent&&!e.lastInput.handled){const s=t.copy();s.button=2,e.lastInput=s,e.Rx=!0,e.doMouseUp()}e.lastInput=i}doMouseHover(){const t=this.diagram,e=t.lastInput;e.targetObject===null&&(e.targetObject=t.findObjectAt(e.documentPoint,null,null));let i=e.targetObject;if(i!==null)for(e.handled=!1;i!==null;){const s=this.isActive?i.mouseHold:i.mouseHover;if(s!==null&&(s(e,i),e.handled))break;i=i.panel}else{const s=this.isActive?t.mouseHold:t.mouseHover;s!==null&&s(e)}}doToolTip(){const t=this.diagram,e=t.lastInput;e.targetObject===null&&(e.targetObject=t.findObjectAt(e.documentPoint,null,null));let i=e.targetObject;if(i!==null){const s=this.currentToolTip;if(s instanceof Adornment&&(i===s||i.isContainedBy(s)))return;for(;i!==null;){const n=i.toolTip;if(n!==null){this.showToolTip(n,i);return}i=i.panel}this.hideToolTip()}else{const s=t.toolTip;s!==null?this.showToolTip(s,null):this.hideToolTip()}}showToolTip(t,e){e!==null&&U.le(e,GraphObject,ToolManager,"showToolTip:obj");const i=this.diagram;if(t!==this.currentToolTip&&this.hideToolTip(),t instanceof Adornment){t.layerName="Tool",t.selectable=!1,t.scale=1/i.scale,t.category="ToolTip",t.hasPlaceholder()&&(t.placeholder.scale=i.scale);const s=t.diagram;s!==null&&s!==i&&s.remove(t),i.add(t),e!==null?t.adornedObject=e:t.data=i.model,t.ensureBounds(),this.positionToolTip(t,e)}else t instanceof HTMLInfo&&t!==this.currentToolTip&&t.show!==null&&t.show(e,i,this);this.currentToolTip=t,this.extendToolTip(this.toolTipDuration)}positionToolTip(t,e){if(t.hasPlaceholder())return;const i=t,s=this.diagram,n=s.lastInput.documentPoint.copy(),o=i.measuredBounds,r=s.viewportBounds;s.lastInput.isTouchEvent&&(n.x-=o.width),n.x+o.width>r.right&&(n.x-=o.width+5/s.scale),n.x<r.x&&(n.x=r.x),n.y+20/s.scale+o.height>r.bottom?n.y-=o.height+5/s.scale:n.y+=20/s.scale,n.y<r.y&&(n.y=r.y),i.position=n}extendToolTip(t){t===void 0&&(t=3e3),this.currentToolTip!==null&&(this.hh!==-1&&(U.Dc(this.hh),this.hh=-1),t>0&&t!==1/0&&(this.hh=U.yn(()=>this.hideToolTip(),t)))}hideToolTip(){this.hh!==-1&&(U.Dc(this.hh),this.hh=-1);const t=this.diagram,e=this.currentToolTip;e!==null&&(e instanceof Adornment?(t.remove(e),this.jm!==null&&this.jm.removeAdornment(e.category),e.data=null,e.adornedObject=null):e instanceof HTMLInfo&&e.hide!==null&&e.hide(t,this),this.currentToolTip=null)}get currentToolTip(){return this.uS}set currentToolTip(t){this.uS=t,this.jm=t!==null&&t instanceof Adornment?t.adornedPart:null}doMouseUp(){this.cancelWaitAfter();const t=this.diagram;if(this.isActive){const e=this.mouseUpTools.length;for(let i=0;i<e;i++){const s=this.mouseUpTools.elt(i);if(s.diagram=this.diagram,s.canStart()){t.doFocus(),t.currentTool=s,t.currentTool===s&&(s.isActive||s.doActivate(),s.doMouseUp());return}}}t.doFocus(),this.doDeactivate()}doMouseWheel(){this.standardMouseWheel()}doKeyDown(){const t=this.diagram;t.commandHandler!==null&&t.commandHandler.doKeyDown()}doKeyUp(){const t=this.diagram;t.commandHandler!==null&&t.commandHandler.doKeyUp()}findTool(t){U.s(t,"string",ToolManager,"findTool:name");let e=this.mouseDownTools.length;for(let i=0;i<e;i++){const s=this.mouseDownTools.elt(i);if(s.name===t)return s}e=this.mouseMoveTools.length;for(let i=0;i<e;i++){const s=this.mouseMoveTools.elt(i);if(s.name===t)return s}e=this.mouseUpTools.length;for(let i=0;i<e;i++){const s=this.mouseUpTools.elt(i);if(s.name===t)return s}return null}replaceTool(t,e){U.s(t,"string",ToolManager,"replaceTool:name"),e!==null&&(e.diagram=this.diagram);let i=this.mouseDownTools.length;for(let s=0;s<i;s++){const n=this.mouseDownTools.elt(s);if(n.name===t)return e!==null?this.mouseDownTools.setElt(s,e):this.mouseDownTools.removeAt(s),n}i=this.mouseMoveTools.length;for(let s=0;s<i;s++){const n=this.mouseMoveTools.elt(s);if(n.name===t)return e!==null?this.mouseMoveTools.setElt(s,e):this.mouseMoveTools.removeAt(s),n}i=this.mouseUpTools.length;for(let s=0;s<i;s++){const n=this.mouseUpTools.elt(s);if(n.name===t)return e!==null?this.mouseUpTools.setElt(s,e):this.mouseUpTools.removeAt(s),n}return null}replaceStandardTool(t,e,i){this.te(t,e,i)}te(t,e,i){U.s(t,"string",ToolManager,"replaceStandardTool:name"),e!==null&&(e.name=t,e.diagram=this.diagram),this.findTool(t)?this.replaceTool(t,e):e!==null&&i.add(e)}get mouseDownTools(){return this.EL}get mouseMoveTools(){return this.UL}get mouseUpTools(){return this.BL}get hoverDelay(){return this.rS}set hoverDelay(t){U.s(t,"number",ToolManager,"hoverDelay"),this.rS=t}get holdDelay(){return this.lS}set holdDelay(t){U.s(t,"number",ToolManager,"holdDelay"),this.lS=t}get dragSize(){return this.aS}set dragSize(t){this.aS=t.C()}get toolTipDuration(){return this.hS}set toolTipDuration(t){U.s(t,"number",ToolManager,"toolTipDuration"),this.hS=t}get actionTool(){return this.findTool("Action")}set actionTool(t){this.te("Action",t,this.mouseDownTools)}get relinkingTool(){return this.findTool("Relinking")}set relinkingTool(t){this.te("Relinking",t,this.mouseDownTools)}get linkReshapingTool(){return this.findTool("LinkReshaping")}set linkReshapingTool(t){this.te("LinkReshaping",t,this.mouseDownTools)}get resizingTool(){return this.findTool("Resizing")}set resizingTool(t){this.te("Resizing",t,this.mouseDownTools)}get rotatingTool(){return this.findTool("Rotating")}set rotatingTool(t){this.te("Rotating",t,this.mouseDownTools)}get linkingTool(){return this.findTool("Linking")}set linkingTool(t){this.te("Linking",t,this.mouseMoveTools)}get draggingTool(){return this.findTool("Dragging")}set draggingTool(t){this.te("Dragging",t,this.mouseMoveTools)}get dragSelectingTool(){return this.findTool("DragSelecting")}set dragSelectingTool(t){this.te("DragSelecting",t,this.mouseMoveTools)}get panningTool(){return this.findTool("Panning")}set panningTool(t){this.te("Panning",t,this.mouseMoveTools)}get contextMenuTool(){return this.findTool("ContextMenu")}set contextMenuTool(t){this.te("ContextMenu",t,this.mouseUpTools)}get textEditingTool(){return this.findTool("TextEditing")}set textEditingTool(t){this.te("TextEditing",t,this.mouseUpTools)}get clickCreatingTool(){return this.findTool("ClickCreating")}set clickCreatingTool(t){this.te("ClickCreating",t,this.mouseUpTools)}get clickSelectingTool(){return this.findTool("ClickSelecting")}set clickSelectingTool(t){this.te("ClickSelecting",t,this.mouseUpTools)}}class DraggingTool extends Tool{dS;gS;Sn;mS;pS;yS;wS;Kc;Wm;xS;ch;Tr;zL;bS;Gu;Yu;kS;PS;SS;MS;static Ox=new List;static ce=null;static fh=null;constructor(t){super(),this.name="Dragging",this.dS=!0,this.MS=!0,this.gS=!0,this.Sn=null,this.mS=null,this.pS=null,this.yS=null,this.wS=!1,this.Gu=!1,this.Kc=new Point(NaN,NaN),this.Wm=new Point,this.xS=!0,this.ch=100,this.Tr=[],this.zL=new GSet().b(),this.bS=new DraggingOptions,this.Yu=null,this.kS="copy",this.PS="",this.SS="no-drop",t&&Object.assign(this,t)}get isCopyEnabled(){return this.dS}set isCopyEnabled(t){U.s(t,"boolean",DraggingTool,"isCopyEnabled"),this.dS=t}get copiesEffectiveCollection(){return this.gS}set copiesEffectiveCollection(t){U.s(t,"boolean",DraggingTool,"copiesEffectiveCollection"),this.gS=t}get dragOptions(){return this.bS}set dragOptions(t){this.bS=t}get isGridSnapEnabled(){return this.dragOptions.isGridSnapEnabled}set isGridSnapEnabled(t){U.s(t,"boolean",DraggingTool,"isGridSnapEnabled"),this.dragOptions.isGridSnapEnabled=t}get isComplexRoutingRealtime(){return this.xS}set isComplexRoutingRealtime(t){this.xS=t;const e=this.diagram.findRouter("AvoidsLinks");e!==null&&(e.isRealtime=t)}get isGridSnapRealtime(){return this.dragOptions.isGridSnapRealtime}set isGridSnapRealtime(t){U.s(t,"boolean",DraggingTool,"isGridSnapRealtime"),this.dragOptions.isGridSnapRealtime=t}get gridSnapCellSize(){return this.dragOptions.gridSnapCellSize}set gridSnapCellSize(t){this.dragOptions.gridSnapCellSize.equals(t)||(t=t.C(),this.dragOptions.gridSnapCellSize=t)}get gridSnapCellSpot(){return this.dragOptions.gridSnapCellSpot}set gridSnapCellSpot(t){this.dragOptions.gridSnapCellSpot.equals(t)||(t=t.C(),this.dragOptions.gridSnapCellSpot=t)}get gridSnapOrigin(){return this.dragOptions.gridSnapOrigin}set gridSnapOrigin(t){this.dragOptions.gridSnapOrigin.equals(t)||(t=t.C(),this.dragOptions.gridSnapOrigin=t)}get dragsLink(){return this.dragOptions.dragsLink}set dragsLink(t){U.s(t,"boolean",DraggingTool,"dragsLink"),this.dragOptions.dragsLink=t}get dragsTree(){return this.dragOptions.dragsTree}set dragsTree(t){U.s(t,"boolean",DraggingTool,"dragsTree"),this.dragOptions.dragsTree=t}get copyCursor(){return this.kS}set copyCursor(t){this.kS=t}get moveCursor(){return this.PS}set moveCursor(t){this.PS=t}get nodropCursor(){return this.SS}set nodropCursor(t){this.SS=t}get currentPart(){return this.mS}set currentPart(t){t!==null&&U.le(t,Part,DraggingTool,"currentPart"),this.mS=t}get copiedParts(){return this.yS}set copiedParts(t){this.yS=t}get draggedParts(){return this.pS}set draggedParts(t){this.pS=t}get draggingParts(){return this.copiedParts!==null?this.copiedParts.toKeySet():this.draggedParts!==null?this.draggedParts.toKeySet():this.zL}get draggedLink(){return this.diagram.draggedLink}set draggedLink(t){t!==null&&U.le(t,Link,DraggingTool,"draggedLink"),this.diagram.draggedLink=t}get isDragOutStarted(){return this.wS}set isDragOutStarted(t){this.wS=t}get startPoint(){return this.Wm}set startPoint(t){this.Wm.equals(t)||this.Wm.h(t)}get delay(){return this.ch}set delay(t){U.s(t,"number",DraggingTool,"delay"),this.ch=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t===null||t.isReadOnly&&!t.allowDragOut||!t.allowMove&&!t.allowCopy&&!t.allowDragOut||!t.allowSelect||!this.canStartButton())return!1;if(t.currentTool!==this){if(!this.isBeyondDragSize())return!1;const i=t.lastInput;if(i.isTouchEvent&&i.timestamp-t.firstInput.timestamp<this.ch)return!1}return this.findDraggablePart()!==null}findDraggablePart(){const t=this.diagram;let e=t.findPartAt(t.firstInput.documentPoint,!1);if(e===null)return null;for(;e!==null&&!e.canSelect();)e=e.containingGroup;return e!==null&&(e.canMove()||e.canCopy())?e:null}standardMouseSelect(){const t=this.diagram;if(!t.allowSelect)return;let e=t.findPartAt(t.firstInput.documentPoint,!1);if(e!==null){for(;e!==null&&!e.canSelect();)e=e.containingGroup;if(this.currentPart=e,this.currentPart!==null&&!this.currentPart.isSelected){t.D("ChangingSelection",t.selection);const i=t.lastInput;!(U.yr?i.meta:i.control)&&!i.shift&&t.clearSelection(!0),this.currentPart.isSelected=!0,t.D("ChangedSelection",t.selection)}}}doActivate(){const t=this.diagram;this.Yu=null,this.currentPart===null&&this.standardMouseSelect();const e=this.currentPart;if(e===null||!e.canMove()&&!e.canCopy())return;t.cacheGroupExternalLinks(!0),DraggingTool.ce=null,this.isActive=!0,this.Kc.set(t.position),this.CS(t.selection),this.Tr.length=0,t.animationManager.stopAnimation();const i=this.computeEffectiveCollection(t.selection,this.dragOptions);this.draggedParts=i,this.MS=!!this.diagram.layout.isRealtime,this.diagram.layout.isRealtime=!1,t.Ku=!0,t.XL(this.draggedParts),t.Hu=!0,this.startTransaction("Drag"),this.startPoint=t.firstInput.documentPoint,t.isMouseCaptured=!0,t.allowDragOut&&this.zR()}CS(t){if(!this.dragsLink)return;const e=this.diagram,i=e.model.NS(),s=t.first();i&&t.count===1&&s instanceof Link&&this.mayDragLink(s)?(this.draggedLink=s,this.draggedLink.canRelinkFrom()&&this.draggedLink.canRelinkTo()&&this.draggedLink.clearAdornments(),this.Sn=e.toolManager.findTool("Relinking"),this.Sn===null&&(this.Sn=new RelinkingTool,this.Sn.diagram=e),this.Sn.originalLink=this.draggedLink):(this.draggedLink=null,this.Sn=null)}mayDragLink(t){const e=this.diagram;return e!==null&&e.allowRelink}computeEffectiveCollection(t,e){return this.diagram.commandHandler.computeEffectiveCollection(t,e)}Qs(t){return t===void 0?new DraggingInfo(Point.wn):this.isGridSnapEnabled?new DraggingInfo(new Point(Math.round(t.x*1e3)/1e3,Math.round(t.y*1e3)/1e3)):new DraggingInfo(t.copy())}doDeactivate(){this.isActive=!1;const t=this.diagram;this.diagram.layout.isRealtime=this.MS,t.Hu=!1,t.Hl=!0,t.cacheGroupExternalLinks(!1),t.stopAutoScroll(),this.TS(),t.LS(this.draggedParts),this.Yu=null,this.currentPart=null,this.draggedParts=null,this.isDragOutStarted=!1,this.Gu=!1,DraggingTool.XR(),this.GL(),this.Kc.e(NaN,NaN),DraggingTool.fh!==null&&(DraggingTool.fh.currentCursor=""),DraggingTool.fh=null,DraggingTool.ce=null,this.ql(),t.isMouseCaptured=!1,t.currentCursor="",t.Ku=!1,this.stopTransaction()}stopTransaction(){const t=this.diagram,e=super.stopTransaction();return e&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),e}TS(){const t=this.diagram,e=t.skipsUndoManager;t.skipsUndoManager=!0;const i=t.lastInput;this.YL(i,null),t.skipsUndoManager=e,this.Tr.length=0}KL(){this.ql(),this.AS();const t=this.diagram;this.Kc.isReal()&&(t.position=this.Kc),t.stopAutoScroll()}doCancel(){this.ql(),this.AS();const t=this.diagram;this.Kc.isReal()&&(t.position=this.Kc),this.stopTool()}doKeyDown(){const t=this.diagram;if(!this.isActive)return;const e=t.lastInput,i=t.previousInput;e.code==="Escape"?this.doCancel():(e.code!==i.code||e.modifiers!==i.modifiers)&&this.doMouseMove()}doKeyUp(){this.isActive&&this.doMouseMove()}GR(t,e){let i=1/0,s=1/0,n=-1/0,o=-1/0;const r=t.iterator;for(;r.next();){const l=r.value;if(!l.isVisible())continue;const a=l.location,h=a.x,c=a.y;isNaN(h)||isNaN(c)||(h<i&&(i=h),c<s&&(s=c),h>n&&(n=h),c>o&&(o=c))}return i===1/0?e.e(0,0,0,0):e.e(i,s,n-i,o-s),e}DS(t){if(this.copiedParts!==null)return;const e=this.diagram;if(t&&(e.isReadOnly||e.isModelReadOnly)||this.draggedParts===null)return;const i=e.undoManager;i.isEnabled&&i.isInTransaction?i.currentTransaction!==null&&i.currentTransaction.changes.count>0&&(e.undoManager.rollbackTransaction(),e.startTransaction("Drag")):this.AS(),e.skipsUndoManager=!t,e.partManager.addsToTemporaryLayer=!t,this.startPoint=e.firstInput.documentPoint;const s=this.copiesEffectiveCollection?this.draggedParts.toKeySet():e.selection,n=e.copyParts(s,e,!0);e.commandHandler.Hc(n);const o=new GMap,r=this.draggedParts.iterator;for(;r.next();){const a=r.key;if(a.Oi()&&a.canCopy()){const h=n.get(a);if(h===null)continue;h.location=a.location,h.ensureBounds(),o.set(h,this.Qs(h.location))}}const l=n.iterator;for(;l.next();){const a=l.value;a instanceof Link&&a.canCopy()&&o.set(a,this.Qs())}if(this.copiedParts=o,this.CS(o.toKeySet()),this.draggedLink!==null){const a=this.draggedLink,h=a.routeBounds;a.Lr(this.startPoint.x-(h.x+h.width/2),this.startPoint.y-(h.y+h.height/2))}this.doUpdateCursor(null)}ql(){const t=this.diagram;if(this.copiedParts!==null){if(t.removeParts(this.copiedParts.toKeySet(),!1),this.copiedParts=null,this.draggedParts!==null){const e=this.draggedParts.iterator;for(;e.next();)if(e.key instanceof Link){const s=e.value;s.point=new Point(0,0)}}this.doUpdateCursor(null)}t.skipsUndoManager=!1,t.partManager.addsToTemporaryLayer=!1,this.startPoint=t.firstInput.documentPoint}GL(){this.draggedLink!==null&&(this.dragsLink&&this.Sn!==null&&(this.Sn.stopDraggingMouseMove(),this.Sn.originalLink=null),this.draggedLink=null,this.Sn=null)}qc(t,e){if(t===null)return;const i=this.diagram,s=this.startPoint,n=Point.l();n.h(i.lastInput.documentPoint),this.moveParts(t,n.subtract(s),e),Point.i(n)}moveParts(t,e,i){i===void 0&&(i=!1);const s=this.diagram;s!==null&&s.Ix(t,e,this.dragOptions,i)}AS(){if(this.draggedParts===null)return;const t=this.diagram;let e=this.draggedParts.iterator;for(;e.next();){const i=e.key;i.Oi()&&(i.location=e.value.point)}for(e=this.draggedParts.iterator;e.next();){const i=e.key;if(i instanceof Link&&i.suspendsRouting){const s=e.value.point;this.draggedParts.set(i,this.Qs()),i.Lr(-s.x,-s.y)}}t.maybeUpdate()}YR(t){if(t===null)return!0;const e=t.part;return!!(e===null||e instanceof Adornment||e.layer?.isTemporary||this.draggedParts&&this.draggedParts.has(e)||this.copiedParts&&this.copiedParts.has(e))}FS(t){const e=this.diagram;this.dragsLink&&(this.draggedLink!==null&&(this.draggedLink.fromNode=null,this.draggedLink.toNode=null),this.HL(!1));const i=this.findDragOverObject(t),s=e.lastInput;s.targetObject=i,this.doUpdateCursor(i);const n=e.skipsUndoManager;let o=!1;try{if(e.skipsUndoManager=!0,o=this.YL(s,i),!this.isActive&&DraggingTool.ce===null)return;const r=i!==null?i.part:null;if(r===null||e.handlesDragDropForTopLevelParts&&r.isTopLevel&&!(r instanceof Group)){const l=e.mouseDragOver;l!==null&&(l(s),o=!0)}if(!this.isActive&&DraggingTool.ce===null||(this.doDragOver(t,i),!this.isActive&&DraggingTool.ce===null))return}finally{e.skipsUndoManager=n,o&&e.maybeUpdate()}this.Yu=i,!e.isReadOnly&&(e.allowMove||e.allowCopy)&&(e.allowHorizontalScroll||e.allowVerticalScroll)&&e.doAutoScroll(s.viewPoint)}findDragOverObject(t){return this.diagram.vS(t,null,e=>!this.YR(e))}doUpdateCursor(t){const e=this.diagram;(t===null||this.Yu!==t)&&(!this.diagram.currentTool.isActive||this.mayCopy()?e.currentCursor=this.copyCursor:this.mayMove()?e.currentCursor=this.moveCursor:this.mayDragOut()&&(e.currentCursor=this.nodropCursor))}YL(t,e){let i=!1,s=this.Tr.length;const n=s>0?this.Tr[0]:null;if(e===n)return!1;t.handled=!1;for(let r=0;r<s;r++){const l=this.Tr[r],a=l.mouseDragLeave;if(a!==null&&(a(t,l,e),i=!0,t.handled))break}if(this.Tr.length=0,!this.isActive&&DraggingTool.ce===null||e===null)return i;t.handled=!1;let o=e;for(;o!==null;)this.Tr.push(o),o=this.qL(o);s=this.Tr.length;for(let r=0;r<s;r++){const l=this.Tr[r],a=l.mouseDragEnter;if(a!==null&&(a(t,l,n),i=!0,t.handled))break}return i}oB(t,e){return t===null?!1:!!(t===e||t.isContainedBy(e)||e instanceof Group&&!(t instanceof Group)&&e.handlesDragDropForMembers&&t.part?.isMemberOf(e))}qL(t){const e=t.panel;if(e!==null)return e;if(t instanceof Part&&!(t instanceof Group)){const i=t.containingGroup;if(i!==null&&i.handlesDragDropForMembers)return i}return null}jL(t,e){const i=this.diagram,s=this.Sn;if(s===null)return null;const n=s.portGravity,o=i.findObjectsNear(t,n,h=>s.findValidLinkablePort(h,e)),r=Point.l();let l=1/0,a=null;for(const h=o.iterator;h.next();){const c=h.value;if(c.part===null)continue;const u=c.getDocumentPoint(Spot.Center,r),d=t.distanceSquaredPoint(u);d<l&&(a=c,l=d)}return Point.i(r),a}HL(t){const e=this.draggedLink;if(e!==null){if(e.pointsCount<2)return;const i=this.diagram;if(i.isReadOnly)return;const s=this.Sn;if(s===null)return;let n=null,o=null;e.fromNode===null&&(n=this.jL(e.getPoint(0),!1),n!==null&&(o=n.part));let r=null,l=null;e.toNode===null&&(r=this.jL(e.getPoint(e.pointsCount-1),!0),r!==null&&(l=r.part)),s.isValidLink(o,n,l,r)?t?(e.defaultFromPoint=e.getPoint(0),e.defaultToPoint=e.getPoint(e.pointsCount-1),e.suspendsRouting=!1,e.fromNode=o,n!==null&&(e.fromPortId=n.portId),e.toNode=l,r!==null&&(e.toPortId=r.portId),e.fromPort!==i.RS&&i.D("LinkRelinked",e,i.RS),e.toPort!==i.OS&&i.D("LinkRelinked",e,i.OS)):s.doDraggingMouseMove(o,n,l,r):s.doDraggingMouseMove(null,null,null,null)}}doDragOver(t,e){}WL(t){const e=this.diagram;this.dragsLink&&this.HL(!0),this.TS();const i=this.findDragOverObject(t),s=e.lastInput;if(s.targetObject=i,i!==null){s.handled=!1;let l=i;for(;l!==null;){const a=l.mouseDrop;if(a!==null&&(a(s,l),s.handled))break;this.KR(s,l),l=this.qL(l)}}else{const l=e.mouseDrop;l!==null&&l(s)}if(!this.isActive&&DraggingTool.ce===null)return;const n=this.copiedParts||this.draggedParts;if(n!==null){const l=n.iterator;for(;l.next();){const a=l.key;a instanceof Node&&a.linksConnected.each(h=>h.suspendsRouting=!1)}}if(this.doDropOnto(t,i),!this.isActive&&DraggingTool.ce===null)return;const o=Rect.l(),r=e.selection.iterator;for(;r.next();){const l=r.value;l instanceof Node&&this.HR(e,l,o)}Rect.i(o)}KR(t,e){const i=this.diagram,s=e.part;if(i.handlesDragDropForTopLevelParts&&s!==null&&s.isTopLevel&&!(s instanceof Group)){const n=i.mouseDrop;n!==null&&n(t)}}HR(t,e,i){if(!e.canAvoid())return;let s=!1;i=e.getAvoidableRect(i),t.viewportBounds.containsRect(i)&&(s=!0);const n=this.copiedParts||this.draggedParts;if(n===null)return;const o=t.IS(i,l=>l.part,l=>l instanceof Link,!0,l=>l instanceof Link,s);if(o.count===0)return;const r=o.iterator;for(;r.next();){const l=r.value;n.has(l)&&n.has(e)||!l.isMemberOf(e)&&l.isAvoiding&&l.ee()}}doDropOnto(t,e){}doMouseMove(){if(!this.isActive)return;const t=this.diagram,e=t.lastInput;if(this.simulatedMouseMove(e.event,e.documentPoint,e.targetDiagram))return;this.currentPart!==null&&this.draggedParts!==null&&(this.mayCopy()?(this.DS(!1),this.qc(this.copiedParts,!1)):this.mayMove()?(this.ql(),this.qc(this.draggedParts,!0)):this.mayDragOut()?(this.DS(!1),this.qc(this.copiedParts,!1)):this.ql(),this.FS(t.lastInput.documentPoint))}doMouseUp(){if(!this.isActive)return;const t=this.diagram,e=t.lastInput;if(this.simulatedMouseUp(e.event,e.documentPoint,e.targetDiagram))return;let i=!1;const s=this.mayCopy();if(s&&this.copiedParts!==null?(this.ql(),this.DS(!0),this.qc(this.copiedParts,!1),this.copiedParts!==null&&(t.D("ChangingSelection",t.selection),t.clearSelection(!0),this.copiedParts.iteratorKeys.each(n=>{n.isSelected=!0}))):(i=!0,this.ql(),this.mayMove()&&(this.qc(this.draggedParts,!0),this.FS(t.lastInput.documentPoint))),this.Gu=!0,this.WL(t.lastInput.documentPoint),this.isActive){const n=s&&this.copiedParts,o=n?this.copiedParts?.toKeySet():this.draggedParts?this.draggedParts.toKeySet():null;this.copiedParts=null,i&&this.qR(),t.invalidateDocumentBounds(),t.LS(this.draggedParts),this.transactionResult=n?"Copy":"Move",t.D(n?"SelectionCopied":"SelectionMoved",o)}this.stopTool(),s&&t.D("ChangedSelection",t.selection)}simulatedMouseMove(t,e,i){if(DraggingTool.ce===null)return!1;const s=DraggingTool.ce.diagram;i instanceof Diagram||(i=null);const n=DraggingTool.fh;if(i!==n){if(n!==null&&n!==s){n.stopAutoScroll(),DraggingTool.ce.isDragOutStarted=!1;const r=n.toolManager.findTool("Dragging");r!==null&&r.doSimulatedDragLeave()}if(DraggingTool.fh=i,i!==null&&i!==s){DraggingTool.ce.KL();const r=i.toolManager.findTool("Dragging");r!==null&&(r.JL(),r.doSimulatedDragEnter())}this.doUpdateCursor(null)}if(i===null||i===s||!i.allowDrop||i.isReadOnly||!i.allowInsert)return!1;const o=i.toolManager.findTool("Dragging");if(o!==null){let r=e;t!==null&&(t.targetTouches!==void 0&&(t.targetTouches.length>0?t=t.targetTouches[0]:t.changedTouches.length>0&&(t=t.changedTouches[0])),r=i.getMouse(t)),i.lastInput.documentPoint=r,i.lastInput.viewPoint=i.transformDocToView(r),i.lastInput.down=!1,i.lastInput.up=!1,o.doSimulatedDragOver()}return!0}simulatedMouseUp(t,e,i){if(DraggingTool.ce===null)return!1;const s=DraggingTool.fh,n=DraggingTool.ce.diagram;if(i===null)return DraggingTool.ce.doCancel(),!0;if(i!==s){if(s!==null){const r=s.toolManager.findTool("Dragging");if(s!==null&&s!==n&&r!==null)return s.stopAutoScroll(),DraggingTool.ce.isDragOutStarted=!1,r.doSimulatedDragLeave(),!1}DraggingTool.fh=i;const o=i.toolManager.findTool("Dragging");o!==null&&(DraggingTool.ce.KL(),o.JL(),o.doSimulatedDragEnter())}if(i!==this.diagram){let o=e;t!==null?(t.targetTouches!==void 0&&(t.targetTouches.length>0?t=t.targetTouches[0]:t.changedTouches.length>0&&(t=t.changedTouches[0])),o=i.getMouse(t)):o===null&&(o=new Point),i.lastInput.documentPoint=o,i.lastInput.viewPoint=i.transformDocToView(o),i.lastInput.down=!1,i.lastInput.up=!0;const r=i.toolManager.findTool("Dragging");r!==null&&r.doSimulatedDrop();const l=DraggingTool.ce;if(l!==null){const a=l.mayCopy();l.transactionResult=a?"Copy":"Move",l.stopTool()}return!0}return!1}qR(){if(this.draggedParts===null)return;const t=this.draggedParts.iterator;for(;t.next();){const e=t.key;if(e instanceof Node){const i=e.containingGroup;i!==null&&i.hasPlaceholder()&&!this.draggedParts.has(i)&&i.placeholder.f()}}}mayCopy(){if(!this.isCopyEnabled)return!1;const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowInsert||!t.allowCopy||!(U.yr?t.lastInput.alt:t.lastInput.control))return!1;const e=t.selection.iterator;for(;e.next();)if(e.value.canCopy())return!0;return!!(this.draggedLink!==null&&this.dragsLink&&this.draggedLink.canCopy())}mayDragOut(){if(!this.isCopyEnabled)return!1;const t=this.diagram;if(!t.allowDragOut||!t.allowCopy||t.allowMove)return!1;const e=t.selection.iterator;for(;e.next();)if(e.value.canCopy())return!0;return!!(this.draggedLink!==null&&this.dragsLink&&this.draggedLink.canCopy())}mayMove(){const t=this.diagram;if(t.isReadOnly||!t.allowMove)return!1;const e=t.selection.iterator;for(;e.next();)if(e.value.canMove())return!0;return!!(this.draggedLink!==null&&this.dragsLink&&this.draggedLink.canMove())}JL(){DraggingTool.Ox.has(this)||DraggingTool.Ox.add(this)}static XR(){if(DraggingTool.Ox.count>0){const t=DraggingTool.Ox,e=t.length;for(let i=0;i<e;i++){const s=t.elt(i);s.GL(),s.ql(),s.TS(),s.diagram.stopAutoScroll()}t.clear()}}jR(t,e,i){return!this.Gu&&this.draggedParts!==null&&!this.draggedParts.has(t)?(i.h(e),!0):!1}get draggingSource(){return DraggingTool.ce}mayDragIn(){const t=this.diagram;if(!t.allowDrop||t.isReadOnly||t.isModelReadOnly||!t.allowInsert)return!1;const e=DraggingTool.ce;return!(e===null||e.diagram.model.dataFormat!==t.model.dataFormat)}doSimulatedDragEnter(){if(!this.mayDragIn())return;const t=this.diagram;t.animationManager.stopAnimation(),t.Ar(),t.animationManager.stopAnimation();const e=DraggingTool.ce;e!==null&&(this.diagram.Ku=!0,t.lastInput.event===null&&(t.lastInput.event=e.diagram.lastInput.event)),this.doUpdateCursor(null)}doSimulatedDragLeave(){const t=DraggingTool.ce;t!==null&&t.doSimulatedDragOut(),this.diagram.Ku=!1,this.doCancel()}doSimulatedDragOver(){const t=this.diagram;t.animationManager.qu=!0;const e=DraggingTool.ce;if(e!==null&&e.draggedParts!==null){if(!this.mayDragIn())return;this.$L(e.draggedParts.toKeySet(),!1,t.firstInput),this.qc(this.copiedParts,!1),this.FS(t.lastInput.documentPoint)}t.animationManager.qu=!1}doSimulatedDrop(){const t=this.diagram,e=DraggingTool.ce;if(e!==null){const i=e.diagram;if(e.Gu=!0,this.ql(),e.draggedParts===null||!this.mayDragIn())return;t.animationManager.qu=!0,t.D("ChangingSelection",t.selection),this.startTransaction("Drop"),this.$L(e.draggedParts.toKeySet(),!0,t.lastInput),this.qc(this.copiedParts,!1);const s=new GSet;this.copiedParts!==null&&(t.clearSelection(!0),this.copiedParts.iteratorKeys.each(n=>{n.isSelected=!0,s.add(n)})),this.WL(t.lastInput.documentPoint),t.invalidateDocumentBounds(),this.copiedParts!==null&&(this.transactionResult="ExternalCopy"),this.copiedParts=null,t.doFocus(),t.Ku=!1,t.D("ExternalObjectsDropped",s,i),this.stopTransaction(),t.D("ChangedSelection",t.selection)}t.animationManager.qu=!1}$L(t,e,i){if(this.copiedParts!==null)return;const s=this.diagram;if(s.isReadOnly||s.isModelReadOnly)return;s.skipsUndoManager=!e,s.partManager.addsToTemporaryLayer=!e,this.startPoint=i.documentPoint;const n=s.copyParts(t,s,!0);s.commandHandler.Hc(n);const o=Rect.l();this.GR(t,o);const r=o.x+o.width/2,l=o.y+o.height/2;Rect.i(o);const a=this.Wm,h=new GMap,c=Point.l(),f=t.iterator;for(;f.next();){const d=f.value;if(d instanceof Link&&d.canCopy()){const m=n.get(d);if(m===null)continue;m.points=d.points,m.Lr(a.x-r,a.y-l),m.suspendsRouting=!0,h.set(m,this.Qs())}}const u=t.iterator;for(;u.next();){const d=u.value;if(d.Oi()&&d.canCopy()){const m=n.get(d);if(m===null)continue;const g=d.location;c.e(a.x-(r-g.x),a.y-(l-g.y)),m.location=c,m.ensureBounds(),h.set(m,this.Qs(c))}}if(Point.i(c),this.copiedParts=h,this.CS(h.toKeySet()),this.draggedLink!==null){const d=this.draggedLink,m=d.routeBounds;d.Lr(this.startPoint.x-(m.x+m.width/2),this.startPoint.y-(m.y+m.height/2))}this.doUpdateCursor(null)}zR(){this.isDragOutStarted=!0,this.Gu=!1,DraggingTool.ce=this,DraggingTool.fh=this.diagram,this.doSimulatedDragOut()}doSimulatedDragOut(){const t=this.diagram;!this.mayCopy()&&!this.mayMove()?t.currentCursor=this.nodropCursor:t.currentCursor="",this.Yu=null}computeMove(t,e,i,s){const n=this.diagram;return n!==null?n.computeMove(t,e,this.dragOptions,s):new Point}}ToolManager.prototype.doCancel=function(){DraggingTool.ce!==null&&DraggingTool.ce.doCancel(),Tool.prototype.doCancel.call(this)};class LinkingBaseTool extends Tool{ES;US;jl;BS;VS;uh;zS;dh;XS;GS;YS;KS;HS;qS;ZL;jS;Wl;WS;constructor(){super(),this.ES=100,this.US=!1,this.jl="pointer",this.BS=new Link({layerName:"Tool"}).add(new Shape({isPanelMain:!0,stroke:"blue"}).theme("stroke","tempLink"),new Shape({toArrow:"Standard",fill:"blue",stroke:"blue"}).theme("fill","tempLink").theme("stroke","tempLink")).Ut(),this.uh=new Shape("Rectangle",{portId:"",fill:null,stroke:"magenta",strokeWidth:2,desiredSize:Size.zP}).theme("stroke","tempPort"),this.VS=new Node({selectable:!1,layerName:"Tool"}).add(this.uh).Ut(),this.dh=new Shape("Rectangle",{portId:"",fill:null,stroke:"magenta",strokeWidth:2,desiredSize:Size.zP}).theme("stroke","tempPort"),this.zS=new Node({selectable:!1,layerName:"Tool"}).add(this.dh).Ut(),this.XS=null,this.GS=null,this.YS=null,this.KS=null,this.HS=null,this.qS=!0,this.ZL=new GMap,this.jS=null,this.Wl=null,this.WS=null}doStop(){this.diagram.stopAutoScroll(),this.originalLink=null,this.originalFromNode=null,this.originalFromPort=null,this.originalToNode=null,this.originalToPort=null,this.validPortsCache.clear(),this.targetPort=null}get portGravity(){return this.ES}set portGravity(t){U.s(t,"number",LinkingBaseTool,"portGravity"),t>=0&&(this.ES=t)}get isUnconnectedLinkValid(){return this.US}set isUnconnectedLinkValid(t){U.s(t,"boolean",LinkingBaseTool,"isUnconnectedLinkValid"),this.US=t}get linkingCursor(){return this.jl}set linkingCursor(t){this.jl=t}get temporaryLink(){return this.BS}set temporaryLink(t){t.Ut(),this.BS=t}get temporaryFromNode(){return this.VS}set temporaryFromNode(t){t.Ut(),this.VS=t,t&&(this.uh=t.port)}get temporaryFromPort(){return this.uh}set temporaryFromPort(t){if(this.uh!==null){const e=this.uh.panel;if(e!==null){const i=e.F.indexOf(this.uh);e.removeAt(i),e.insertAt(i,t)}}this.uh=t}get temporaryToNode(){return this.zS}set temporaryToNode(t){t.Ut(),this.zS=t,t&&(this.dh=t.port)}get temporaryToPort(){return this.dh}set temporaryToPort(t){if(this.dh!==null){const e=this.dh.panel;if(e!==null){const i=e.F.indexOf(this.dh);e.removeAt(i),e.insertAt(i,t)}}this.dh=t}get originalLink(){return this.XS}set originalLink(t){t!==null&&U.le(t,Link,LinkingBaseTool,"originalLink"),this.XS=t}get originalFromNode(){return this.GS}set originalFromNode(t){t!==null&&U.le(t,Node,LinkingBaseTool,"originalFromNode"),this.GS=t}get originalFromPort(){return this.YS}set originalFromPort(t){t!==null&&U.le(t,GraphObject,LinkingBaseTool,"originalFromPort"),this.YS=t}get originalToNode(){return this.KS}set originalToNode(t){t!==null&&U.le(t,Node,LinkingBaseTool,"originalToNode"),this.KS=t}get originalToPort(){return this.HS}set originalToPort(t){t!==null&&U.le(t,GraphObject,LinkingBaseTool,"originalToPort"),this.HS=t}get isForwards(){return this.qS}set isForwards(t){this.qS=t}get validPortsCache(){return this.ZL}get targetPort(){return this.jS}set targetPort(t){t!==null&&U.le(t,GraphObject,LinkingBaseTool,"targetPort"),this.jS=t}copyPortProperties(t,e,i,s,n){if(t===null||e===null||i===null||s===null)return;const o=e.getDocumentScale(),r=Size.l();r.width=e.naturalBounds.width*o,r.height=e.naturalBounds.height*o,s.desiredSize=r,Size.i(r),n?(s.toSpot=e.toSpot,s.toEndSegmentLength=e.toEndSegmentLength):(s.fromSpot=e.fromSpot,s.fromEndSegmentLength=e.fromEndSegmentLength),i.locationSpot=Spot.Center;const l=Point.l();i.location=e.getDocumentPoint(Spot.Center,l),Point.i(l),s.angle=e.getDocumentAngle(),this.portTargeted!==null&&this.portTargeted(t,e,i,s,n)}setNoTargetPortProperties(t,e,i){e!==null&&(e.desiredSize=Size.zP,e.fromSpot=Spot.None,e.toSpot=Spot.None),t!==null&&(t.location=this.diagram.lastInput.documentPoint),this.portTargeted!==null&&this.portTargeted(null,null,t,e,i)}doMouseDown(){this.isActive&&this.doMouseMove()}doMouseMove(){if(this.isActive){const t=this.diagram;if(this.targetPort=this.findTargetPort(this.isForwards),this.targetPort!==null&&this.targetPort.part instanceof Node){const e=this.targetPort.part;this.isForwards?this.copyPortProperties(e,this.targetPort,this.temporaryToNode,this.temporaryToPort,!0):this.copyPortProperties(e,this.targetPort,this.temporaryFromNode,this.temporaryFromPort,!1)}else this.isForwards?this.setNoTargetPortProperties(this.temporaryToNode,this.temporaryToPort,!0):this.setNoTargetPortProperties(this.temporaryFromNode,this.temporaryFromPort,!1);(t.allowHorizontalScroll||t.allowVerticalScroll)&&t.doAutoScroll(t.lastInput.viewPoint)}}findValidLinkablePort(t,e){if(t===null)return null;const i=t.part;if(!(i instanceof Node))return null;for(;t!==null;){const s=e?t.toLinkable:t.fromLinkable;if(s===!0&&(t.portId!==null||t instanceof Node)&&(e?this.isValidTo(i,t):this.isValidFrom(i,t)))return t;if(s===!1)return null;t=t.panel}return null}findTargetPort(t){const e=this.diagram,i=e.lastInput.documentPoint;let s=this.portGravity;const n=e.findObjectsNear(i,s,a=>this.findValidLinkablePort(a,t),null,!0);let o=1/0,r=null;const l=n.iterator;for(;l.next();){const a=l.value,h=a.part;if(!(h instanceof Node))continue;const c=a.getDocumentPoint(Spot.Center,Point.l()),f=i.x-c.x,u=i.y-c.y;Point.i(c);const d=f*f+u*u;if(d<o){const m=this.validPortsCache.get(a);m!==null?m&&(r=a,o=d):t&&this.isValidLink(this.originalFromNode,this.originalFromPort,h,a)||!t&&this.isValidLink(h,a,this.originalToNode,this.originalToPort)?(this.validPortsCache.set(a,!0),r=a,o=d):this.validPortsCache.set(a,!1)}}if(r!==null){const a=r.part;if(a instanceof Node&&(a.layer===null||a.layer.allowLink))return r}return null}isValidFrom(t,e){if(t===null||e===null)return this.isUnconnectedLinkValid;if(this.diagram.currentTool===this&&(t.layer!==null&&!t.layer.allowLink||e.fromLinkable!==!0))return!1;const i=e.fromMaxLinks;if(i<1/0){if(this.originalLink!==null&&t===this.originalFromNode&&e===this.originalFromPort)return!0;let s=e.portId;if(s===null&&(s=""),t.findLinksOutOf(s).count>=i)return!1}return!0}isValidTo(t,e){if(t===null||e===null)return this.isUnconnectedLinkValid;if(this.diagram.currentTool===this&&(t.layer!==null&&!t.layer.allowLink||e.toLinkable!==!0))return!1;const i=e.toMaxLinks;if(i<1/0){if(this.originalLink!==null&&t===this.originalToNode&&e===this.originalToPort)return!0;let s=e.portId;if(s===null&&(s=""),t.findLinksInto(s).count>=i)return!1}return!0}isInSameNode(t,e){if(t===null||e===null)return!1;if(t===e)return!0;const i=t.part,s=e.part;return i!==null&&i===s}isLinked(t,e){if(t===null||e===null)return!1;const i=t.part;if(!(i instanceof Node))return!1;let s=t.portId;s===null&&(s="");const n=e.part;if(!(n instanceof Node))return!1;let o=e.portId;o===null&&(o="");const r=n.findLinksInto(o);for(;r.next();){const l=r.value;if(l.fromNode===i&&l.fromPortId===s)return!0}return!1}isValidLink(t,e,i,s){if(!this.isValidFrom(t,e)||!this.isValidTo(i,s)||e!==null&&s!==null&&(!(e.fromLinkableSelfNode&&s.toLinkableSelfNode)&&this.isInSameNode(e,s)||!(e.fromLinkableDuplicates&&s.toLinkableDuplicates)&&this.isLinked(e,s))||this.originalLink!==null&&(t!==null&&this.isLabelDependentOnLink(t,this.originalLink)||i!==null&&this.isLabelDependentOnLink(i,this.originalLink))||t!==null&&i!==null&&(t.data===null&&i.data!==null||t.data!==null&&i.data===null)||!this.isValidCycle(t,i,this.originalLink))return!1;let n;return t!==null&&e!==null&&(n=t.linkValidation,n!==null&&!n(t,e,i,s,this.originalLink))||i!==null&&s!==null&&(n=i.linkValidation,n!==null&&!n(t,e,i,s,this.originalLink))?!1:(n=this.linkValidation,n!==null?n(t,e,i,s,this.originalLink):!0)}isLabelDependentOnLink(t,e){if(t===null)return!1;const i=t.labeledLink;if(i===null)return!1;if(i===e)return!0;const s=new GSet;return s.add(t),this.JS(i,e,s)}JS(t,e,i){if(t===e)return!0;const s=t.fromNode;if(s!==null&&s.labeledLink&&(i.add(s),this.JS(s.labeledLink,e,i)))return!0;const n=t.toNode;return!!(n!==null&&n.labeledLink&&(i.add(n),this.JS(n.labeledLink,e,i)))}isValidCycle(t,e,i){if(i===void 0&&(i=null),t===null||e===null)return this.isUnconnectedLinkValid;const s=this.diagram;let n=1;if(s&&(s.model.Ex()?n=s.isTreePathToChildren?5:6:n=s.validCycle),n===1)return!0;if(n===5){const o=i||this.temporaryLink;if(o!==null&&!o.isTreeLink)return!0;const r=e.linksConnected;for(;r.next();){const l=r.value;if(l!==i&&l.isTreeLink&&l.toNode===e)return!1}return!this.ju(t,e,i,!0)}else if(n===6){const o=i||this.temporaryLink;if(o!==null&&!o.isTreeLink)return!0;const r=t.linksConnected;for(;r.next();){const l=r.value;if(l!==i&&l.isTreeLink&&l.fromNode===t)return!1}return!this.ju(t,e,i,!0)}else{if(n===2)return!this.WR(t,e,i);if(n===3)return!this.ju(t,e,i,!1);if(n===4)return!this.JR(t,e,i)}return!0}ju(t,e,i,s){if(t===e)return!0;if(t===null||e===null)return!1;const n=t.linksConnected;for(;n.next();){const o=n.value;if(o===i||s&&!o.isTreeLink||o.toNode!==t)continue;const r=o.fromNode;if(!(r===t||r===null)&&this.ju(r,e,i,s))return!0}return!1}WR(t,e,i){if(t===e)return!0;const s=new Set;return s.add(e),this.QL(s,t,e,i)}QL(t,e,i,s){if(e===i)return!0;if(e===null||i===null||t.has(e))return!1;t.add(e);const n=e.linksConnected;for(;n.next();){const o=n.value;if(o===s||o.toNode!==e)continue;const r=o.fromNode;if(!(r===e||r===null)&&this.QL(t,r,i,s))return!0}return!1}JR(t,e,i){if(t===e)return!0;const s=new Set;return s.add(e),this._L(s,t,e,i)}_L(t,e,i,s){if(e===i)return!0;if(e===null||i===null||t.has(e))return!1;t.add(e);const n=e.linksConnected;for(;n.next();){const o=n.value;if(o===s)continue;const r=o.fromNode,l=o.toNode,a=r===e?l:r;if(!(a===e||a===null)&&this._L(t,a,i,s))return!0}return!1}get linkValidation(){return this.Wl}set linkValidation(t){t!==null&&U.S(t,LinkingBaseTool,"linkValidation"),this.Wl=t}get portTargeted(){return this.WS}set portTargeted(t){t!==null&&U.S(t,LinkingBaseTool,"portTargeted"),this.WS=t}}var LinkingDirection=(w=>(w[w.Either=1]="Either",w[w.ForwardsOnly=2]="ForwardsOnly",w[w.BackwardsOnly=3]="BackwardsOnly",w))(LinkingDirection||{});class LinkingTool extends LinkingBaseTool{$S;ZS;k;QS;constructor(t){super(),this.name="Linking",this.$S={},this.ZS=null,this.k=1,this.QS=null,t&&Object.assign(this,t)}static Either=1;static ForwardsOnly=2;static BackwardsOnly=3;get archetypeLinkData(){return this.$S}set archetypeLinkData(t){t!==null&&U.Fc(t,LinkingTool,"archetypeLinkData"),t instanceof GraphObject&&U.le(t,Link,LinkingTool,"archetypeLinkData"),this.$S=t}get archetypeLabelNodeData(){return this.ZS}set archetypeLabelNodeData(t){t!==null&&U.Fc(t,LinkingTool,"archetypeLabelNodeData"),t instanceof GraphObject&&U.le(t,Node,LinkingTool,"archetypeLabelNodeData"),this.ZS=t}get direction(){return this.k}set direction(t){this.k=t}get startObject(){return this.QS}set startObject(t){t!==null&&U.le(t,GraphObject,LinkingTool,"startObject"),this.QS=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||t.isModelReadOnly||!t.allowLink||!t.model.Ux()||!this.canStartButton()||t.currentTool!==this&&!this.isBeyondDragSize()?!1:this.findLinkablePort()!==null}findLinkablePort(){const t=this.diagram;let e=this.startObject;if(e===null&&(e=t.findObjectAt(t.firstInput.documentPoint,null,null)),e===null)return null;const i=e.part;if(!(i instanceof Node))return null;const s=this.direction;if(s===1||s===2){const n=this.findValidLinkablePort(e,!1);if(n!==null)return this.isForwards=!0,n;if(this.startObject===i){const o=i.port;if(this.findValidLinkablePort(o,!1))return this.isForwards=!0,o}}if(s===1||s===3){const n=this.findValidLinkablePort(e,!0);if(n!==null)return this.isForwards=!1,n;if(this.startObject===i){const o=i.port;if(this.findValidLinkablePort(o,!0))return this.isForwards=!1,o}}return null}doActivate(){const t=this.diagram,e=this.findLinkablePort();if(e===null){this.stopTool();return}if(this.startTransaction(this.name),t.isMouseCaptured=!0,t.currentCursor=this.linkingCursor,this.isForwards){this.temporaryToNode!==null&&(this.temporaryToNode.location=t.lastInput.documentPoint),this.originalFromPort=e;const i=this.originalFromPort.part;i instanceof Node&&(this.originalFromNode=i),this.copyPortProperties(this.originalFromNode,this.originalFromPort,this.temporaryFromNode,this.temporaryFromPort,!1)}else{this.temporaryFromNode!==null&&(this.temporaryFromNode.location=t.lastInput.documentPoint),this.originalToPort=e;const i=this.originalToPort.part;i instanceof Node&&(this.originalToNode=i),this.copyPortProperties(this.originalToNode,this.originalToPort,this.temporaryToNode,this.temporaryToPort,!0)}t.add(this.temporaryFromNode),this.temporaryFromNode&&this.temporaryFromNode.ensureBounds(),t.add(this.temporaryToNode),this.temporaryToNode&&this.temporaryToNode.ensureBounds(),this.temporaryLink!==null&&(this.temporaryFromNode!==null&&(this.temporaryLink.fromNode=this.temporaryFromNode),this.temporaryToNode!==null&&(this.temporaryLink.toNode=this.temporaryToNode),this.temporaryLink.isTreeLink=this.isNewTreeLink(),this.temporaryLink.ee(),t.add(this.temporaryLink)),this.isActive=!0}doDeactivate(){this.isActive=!1;const t=this.diagram;t.remove(this.temporaryLink),t.remove(this.temporaryFromNode),t.remove(this.temporaryToNode),t.isMouseCaptured=!1,t.currentCursor="",this.stopTransaction()}doStop(){super.doStop(),this.startObject=null}doMouseUp(){if(this.isActive){const t=this.diagram;this.transactionResult=null;let e=null,i=null,s=null,n=null,o=null;try{this.targetPort=this.findTargetPort(this.isForwards);const r=this.targetPort;if(r!==null){const l=r.part;l instanceof Node&&(this.isForwards?(this.originalFromNode!==null&&(e=this.originalFromNode,i=this.originalFromPort),s=l,n=r):(e=l,i=r,this.originalToNode!==null&&(s=this.originalToNode,n=this.originalToPort)))}else this.isForwards?this.originalFromNode!==null&&this.isUnconnectedLinkValid&&(e=this.originalFromNode,i=this.originalFromPort):this.originalToNode!==null&&this.isUnconnectedLinkValid&&(s=this.originalToNode,n=this.originalToPort);e!==null||s!==null?(o=this.insertLink(e,i,s,n),o!==null?(r===null&&(this.isForwards?o.defaultToPoint=t.lastInput.documentPoint:o.defaultFromPoint=t.lastInput.documentPoint),t.allowSelect&&(t.D("ChangingSelection",t.selection),t.clearSelection(!0),o.isSelected=!0),this.transactionResult=this.name,t.D("LinkDrawn",o)):this.doNoLink(e,i,s,n)):this.isForwards?this.doNoLink(this.originalFromNode,this.originalFromPort,null,null):this.doNoLink(null,null,this.originalToNode,this.originalToPort)}finally{this.stopTool(),o&&t.allowSelect&&t.D("ChangedSelection",t.selection)}}}isNewTreeLink(){const t=this.archetypeLinkData;if(t===null)return!0;if(t instanceof Link)return t.isTreeLink;const e=this.diagram;if(e===null)return!0;const i=e.partManager.getLinkCategoryForData(t),s=e.partManager.findLinkTemplateForCategory(i);return s!==null?s.isTreeLink:!0}insertLink(t,e,i,s){return this.diagram.partManager.insertLink(t,e,i,s)}doNoLink(t,e,i,s){}}class RelinkingTool extends LinkingBaseTool{tA=null;eA=null;_S=null;tM=null;Ts;eM;constructor(t){super(),this.name="Relinking",this.fromHandleArchetype=new Shape("Diamond",{desiredSize:Size.Fu,fill:"lightblue",stroke:"dodgerblue",cursor:this.linkingCursor,segmentIndex:0}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.toHandleArchetype=new Shape("Diamond",{desiredSize:Size.Fu,fill:"lightblue",stroke:"dodgerblue",cursor:this.linkingCursor,segmentIndex:-1}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.Ts=null,this.eM=new Rect,t&&Object.assign(this,t)}updateAdornments(t){if(t===null||!(t instanceof Link))return;let e="RelinkFrom",i=null;if(t.isSelected&&!this.diagram.isReadOnly){const s=t.selectionObject;s!==null&&t.canRelinkFrom()&&t.actualBounds.isReal()&&t.isVisible()&&s.actualBounds.isReal()&&s.isVisibleObject()&&(i=t.findAdornment(e),i===null&&(i=this.makeAdornment(s,!1),t.addAdornment(e,i)))}if(i===null&&t.removeAdornment(e),e="RelinkTo",i=null,t.isSelected&&!this.diagram.isReadOnly){const s=t.selectionObject;s!==null&&t.canRelinkTo()&&t.actualBounds.isReal()&&t.isVisible()&&s.actualBounds.isReal()&&s.isVisibleObject()&&(i=t.findAdornment(e),i===null?(i=this.makeAdornment(s,!0),t.addAdornment(e,i)):i.f())}i===null&&t.removeAdornment(e)}makeAdornment(t,e){let i=e?this.tM:this._S;return i&&(i=i.copy(),i.adornedObject=t),i}get fromHandleArchetype(){return this.tA}set fromHandleArchetype(t){t!==null&&U.le(t,GraphObject,RelinkingTool,"fromHandleArchetype"),this.tA=t,t!==null?this._S=new Adornment(Panel.Link).add(t).Ut():this._S=null}get toHandleArchetype(){return this.eA}set toHandleArchetype(t){t!==null&&U.le(t,GraphObject,RelinkingTool,"toHandleArchetype"),this.eA=t,t!==null?this.tM=new Adornment(Panel.Link).add(t).Ut():this.tM=null}get handle(){return this.Ts}set handle(t){t!==null&&(t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.Ts=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowRelink||!t.model.Ux()||!this.canStartButton())return!1;let i=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkFrom");return i===null&&(i=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkTo")),i!==null}doActivate(){const t=this.diagram;if(this.originalLink===null){let i=this.handle;if(i===null&&(i=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkFrom"),i===null&&(i=this.findToolHandleAt(t.firstInput.documentPoint,"RelinkTo"))),i===null)return;const s=i.part;if(!(s instanceof Adornment)||!(s.adornedPart instanceof Link))return;this.handle=i,this.isForwards=s===null||s.category==="RelinkTo",this.originalLink=s.adornedPart}const e=this.originalLink;e!==null&&(this.startTransaction(this.name),t.isMouseCaptured=!0,t.currentCursor=this.linkingCursor,this.originalFromPort=e.fromPort,this.originalFromNode=e.fromNode,this.originalToPort=e.toPort,this.originalToNode=e.toNode,this.eM.set(e.actualBounds),e.pointsCount>0&&(e.fromNode===null&&(this.temporaryFromPort!==null&&(this.temporaryFromPort.desiredSize=Size.vc),this.temporaryFromNode!==null&&(this.temporaryFromNode.location=e.getPoint(0))),e.toNode===null&&(this.temporaryToPort!==null&&(this.temporaryToPort.desiredSize=Size.vc),this.temporaryToNode!==null&&(this.temporaryToNode.location=e.getPoint(e.pointsCount-1)))),this.copyPortProperties(this.originalFromNode,this.originalFromPort,this.temporaryFromNode,this.temporaryFromPort,!1),this.copyPortProperties(this.originalToNode,this.originalToPort,this.temporaryToNode,this.temporaryToPort,!0),t.add(this.temporaryFromNode),t.add(this.temporaryToNode),this.temporaryLink!==null&&(this.temporaryFromNode!==null&&(this.temporaryLink.fromNode=this.temporaryFromNode),this.temporaryToNode!==null&&(this.temporaryLink.toNode=this.temporaryToNode),this.copyLinkProperties(e,this.temporaryLink),this.temporaryLink.ee(),t.add(this.temporaryLink)),this.isActive=!0)}copyLinkProperties(t,e){if(t===null||e===null)return;e.adjusting=t.adjusting,e.corner=t.corner;let i=t.curve;(i===11||i===10)&&(i=0),e.curve=i,e.curviness=t.curviness,e.isTreeLink=t.isTreeLink,e.points=t.points,e.routing=t.routing,e.smoothness=t.smoothness,e.fromSpot=t.fromSpot,e.fromEndSegmentLength=t.fromEndSegmentLength,e.fromShortLength=t.fromShortLength,e.toSpot=t.toSpot,e.toEndSegmentLength=t.toEndSegmentLength,e.toShortLength=t.toShortLength}doDeactivate(){this.isActive=!1;const t=this.diagram;t.remove(this.temporaryLink),t.remove(this.temporaryFromNode),t.remove(this.temporaryToNode),t.isMouseCaptured=!1,t.currentCursor="",this.stopTransaction()}doStop(){super.doStop(),this.handle=null}doMouseUp(){if(this.isActive){const t=this.diagram;this.transactionResult=null;let e=this.originalFromNode,i=this.originalFromPort,s=this.originalToNode,n=this.originalToPort,o=this.originalLink;try{if(this.targetPort=this.findTargetPort(this.isForwards),this.targetPort!==null){const r=this.targetPort.part;r instanceof Node&&(this.isForwards?(s=r,n=this.targetPort):(e=r,i=this.targetPort))}else this.isUnconnectedLinkValid?this.isForwards?(s=null,n=null):(e=null,i=null):o=null;o!==null?(this.reconnectLink(o,this.isForwards?s:e,this.isForwards?n:i,this.isForwards),this.targetPort===null&&(this.isForwards?o.defaultToPoint=t.lastInput.documentPoint:o.defaultFromPoint=t.lastInput.documentPoint,o.ee()),this.transactionResult=this.name,t.D("LinkRelinked",o,this.isForwards?this.originalToPort:this.originalFromPort)):this.originalLink!==null&&this.doNoRelink(this.originalLink,this.isForwards),this.originalLink!==null&&this.originalLink.invalidateOtherJumpOvers(this.eM)}finally{this.stopTool()}}}reconnectLink(t,e,i,s){const n=i!==null&&i.portId!==null?i.portId:"";return s?(t.toNode=e,t.toPortId=n):(t.fromNode=e,t.fromPortId=n),!0}doNoRelink(t,e){}doDraggingMouseMove(t,e,i,s){t!==null?(this.copyPortProperties(t,e,this.temporaryFromNode,this.temporaryFromPort,!1),this.diagram.add(this.temporaryFromNode)):this.diagram.remove(this.temporaryFromNode),i!==null?(this.copyPortProperties(i,s,this.temporaryToNode,this.temporaryToPort,!0),this.diagram.add(this.temporaryToNode)):this.diagram.remove(this.temporaryToNode)}stopDraggingMouseMove(){this.diagram.remove(this.temporaryFromNode),this.diagram.remove(this.temporaryToNode)}}var ReshapingBehavior=(w=>(w[w.None=0]="None",w[w.Horizontal=1]="Horizontal",w[w.Vertical=2]="Vertical",w[w.All=3]="All",w))(ReshapingBehavior||{});class LinkReshapingTool extends Tool{Dr;iM;sM;Ts;Bx;Vx;Wu;constructor(t){super(),this.name="LinkReshaping",this.Dr=new Shape("Rectangle",{desiredSize:Size.lL,fill:"lightblue",stroke:"dodgerblue"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.iM=new Shape("Diamond",{desiredSize:Size.Fu,fill:"lightblue",stroke:"dodgerblue",cursor:"move"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.sM=3,this.Ts=null,this.Bx=null,this.Vx=new Point,this.Wu=new List,t&&Object.assign(this,t)}static None=0;static Horizontal=1;static Vertical=2;static All=3;getReshapingBehavior(t){return t?t.Fr:0}setReshapingBehavior(t,e){t.Fr=e}updateAdornments(t){if(t===null||!(t instanceof Link))return;let e=null;if(t.isSelected&&!this.diagram.isReadOnly){const i=t.path;i!==null&&t.canReshape()&&t.actualBounds.isReal()&&t.isVisible()&&i.actualBounds.isReal()&&i.isVisibleObject()&&(e=t.findAdornment(this.name),(e===null||e.nM!==t.pointsCount||e.oM!==t.resegmentable)&&(e=this.makeAdornment(i),e!==null&&(e.nM=t.pointsCount,e.oM=t.resegmentable,t.addAdornment(this.name,e))))}e===null&&t.removeAdornment(this.name)}makeAdornment(t){const e=t.part;let i=null;if(e.pointsCount>1){i=new Adornment,i.type=Panel.Link;const s=e.firstPickIndex,n=e.lastPickIndex,o=e.isOrthogonal?1:0;if(e.resegmentable&&(e.computeCurve()!==9||e.isOrthogonal))for(let a=s+o;a<n-o;a++){const h=this.makeResegmentHandle(t,a);h!==null&&(h.segmentIndex=a,h.segmentFraction=.5,h.fromMaxLinks=999,i.add(h))}let r=s+1,l=n-1;for(;r<=l;)if(r<l)this.rM(t,i,s,n,r),this.rM(t,i,s,n,l),r++,l--;else if(r===l){this.rM(t,i,s,n,r);break}i.adornedObject=t}return i}rM(t,e,i,s,n){const o=t.part,r=o.isOrthogonal,l=this.makeHandle(t,n);if(l!==null){if(l.segmentIndex=n,n!==i)if(n===i+1&&r){const a=o.getPoint(i);let h=o.getPoint(i+1);G.c(a.x,h.x)&&G.c(a.y,h.y)?(h=o.getPoint(i-1),G.c(a.x,h.x)?(this.setReshapingBehavior(l,2),l.cursor="n-resize"):G.c(a.y,h.y)&&(this.setReshapingBehavior(l,1),l.cursor="w-resize")):G.c(a.x,h.x)?(this.setReshapingBehavior(l,2),l.cursor="n-resize"):G.c(a.y,h.y)&&(this.setReshapingBehavior(l,1),l.cursor="w-resize")}else if(n===s-1&&r){let a=o.getPoint(s-1);const h=o.getPoint(s);G.c(a.x,h.x)&&G.c(a.y,h.y)?(a=o.getPoint(s+1),G.c(a.x,h.x)?(this.setReshapingBehavior(l,2),l.cursor="n-resize"):G.c(a.y,h.y)&&(this.setReshapingBehavior(l,1),l.cursor="w-resize")):G.c(a.x,h.x)?(this.setReshapingBehavior(l,2),l.cursor="n-resize"):G.c(a.y,h.y)&&(this.setReshapingBehavior(l,1),l.cursor="w-resize")}else n===s||(this.setReshapingBehavior(l,3),l.cursor="move");e.add(l)}}makeHandle(t,e){const i=this.handleArchetype;return i===null?null:i.copy().lM()}get handleArchetype(){return this.Dr}set handleArchetype(t){t!==null&&U.le(t,GraphObject,LinkReshapingTool,"handleArchetype"),this.Dr=t}makeResegmentHandle(t,e){const i=this.midHandleArchetype;return i===null?null:i.copy().lM()}get midHandleArchetype(){return this.iM}set midHandleArchetype(t){t!==null&&U.le(t,GraphObject,LinkReshapingTool,"midHandleArchetype"),this.iM=t}get handle(){return this.Ts}set handle(t){t!==null&&(t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.Ts=t}get adornedLink(){return this.Bx}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||!t.allowReshape||!this.canStartButton()?!1:this.findToolHandleAt(t.firstInput.documentPoint,this.name)!==null}doActivate(){const t=this.diagram;if(this.handle===null&&(this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name)),this.handle===null)return;const e=this.handle.part.adornedPart;if(e instanceof Link){if(this.Bx=e,t.isMouseCaptured=!0,this.startTransaction(this.name),e.resegmentable&&this.handle.fromMaxLinks===999){const i=e.points.copy(),s=this.getResegmentingPoint();if(i.insertAt(this.handle.segmentIndex+1,s),e.isOrthogonal&&i.insertAt(this.handle.segmentIndex+1,s),e.points=i,e.invalidateAdornments(),e.updateAdornments(),this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name),this.handle===null){this.doDeactivate();return}}this.Vx=e.getPoint(this.handle.segmentIndex),this.Wu=e.points.copy(),this.isActive=!0}}doDeactivate(){this.stopTransaction(),this.handle=null,this.Bx=null;const t=this.diagram;t.isMouseCaptured=!1,this.isActive=!1}stopTransaction(){const t=this.diagram,e=super.stopTransaction();return e&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),e}doCancel(){const t=this.adornedLink;t!==null&&(t.points=this.Wu),this.stopTool()}getResegmentingPoint(){return this.handle===null?this.diagram.lastInput.documentPoint:this.handle.getDocumentPoint(Spot.Center)}doMouseMove(){const t=this.diagram;if(this.isActive){const e=this.computeReshape(t.lastInput.documentPoint);this.reshape(e)}}doMouseUp(){const t=this.diagram;if(this.isActive){const e=this.computeReshape(t.lastInput.documentPoint);this.reshape(e);const i=this.adornedLink;if(i!==null&&i.resegmentable&&this.handle!==null&&(i.computeCurve()!==9||i.isOrthogonal)){const s=this.handle.segmentIndex,n=i.getPoint(s-1),o=i.getPoint(s),r=i.getPoint(s+1);if(i.isOrthogonal){if(s>i.firstPickIndex+1&&s<i.lastPickIndex-1){let l=i.getPoint(s-2);if(this.isWithinResegmentingDistance(n,o)&&(this.isInLineOrtho(l,n,o,r,!0)||this.isInLineOrtho(l,n,o,r,!1))){const a=i.points.copy();this.isInLineOrtho(l,n,o,r,!0)?(a.setElt(s-2,new Point(l.x,(r.y+l.y)/2)),a.setElt(s+1,new Point(r.x,(r.y+l.y)/2))):(a.setElt(s-2,new Point((r.x+l.x)/2,l.y)),a.setElt(s+1,new Point((r.x+l.x)/2,r.y))),a.removeAt(s),a.removeAt(s-1),i.points=a,i.invalidateAdornments()}else if(l=i.getPoint(s+2),this.isWithinResegmentingDistance(o,r)&&(this.isInLineOrtho(n,o,r,l,!0)||this.isInLineOrtho(n,o,r,l,!1))){const a=i.points.copy();this.isInLineOrtho(n,o,r,l,!0)?(a.setElt(s-1,new Point(n.x,(n.y+l.y)/2)),a.setElt(s+2,new Point(l.x,(n.y+l.y)/2))):(a.setElt(s-1,new Point((n.x+l.x)/2,n.y)),a.setElt(s+2,new Point((n.x+l.x)/2,l.y))),a.removeAt(s+1),a.removeAt(s),i.points=a,i.invalidateAdornments()}}}else{const l=Point.l();if(G.Il(n.x,n.y,r.x,r.y,o.x,o.y,l)&&l.distanceSquaredPoint(o)<this.resegmentingDistance*this.resegmentingDistance){const a=i.points.copy();a.removeAt(s),i.points=a,i.invalidateAdornments()}Point.i(l)}}t.invalidateDocumentBounds(),this.transactionResult=this.name,t.D("LinkReshaped",this.adornedLink,this.Wu)}this.stopTool()}isWithinResegmentingDistance(t,e){return Math.abs(t.x-e.x)<this.resegmentingDistance&&Math.abs(t.y-e.y)<this.resegmentingDistance}isInLineOrtho(t,e,i,s,n){return n?Math.abs(t.y-e.y)<this.resegmentingDistance&&Math.abs(e.y-i.y)<this.resegmentingDistance&&Math.abs(i.y-s.y)<this.resegmentingDistance:Math.abs(t.x-e.x)<this.resegmentingDistance&&Math.abs(e.x-i.x)<this.resegmentingDistance&&Math.abs(i.x-s.x)<this.resegmentingDistance}get resegmentingDistance(){return this.sM}set resegmentingDistance(t){U.s(t,"number",LinkReshapingTool,"resegmentingDistance"),this.sM=t}reshape(t){const e=this.adornedLink;if(e===null)return;const i=this.handle;if(i===null)return;e.startRoute();let s=i.segmentIndex;const n=this.getReshapingBehavior(i);if(e.isOrthogonal)if(s===e.firstPickIndex+1){const o=e.firstPickIndex+1;n===2?(e.setPointAt(o,e.getPoint(o-1).x,t.y),e.setPointAt(o+1,e.getPoint(o+2).x,t.y)):n===1&&(e.setPointAt(o,t.x,e.getPoint(o-1).y),e.setPointAt(o+1,t.x,e.getPoint(o+2).y))}else if(s===e.lastPickIndex-1){const o=e.lastPickIndex-1;n===2?(e.setPointAt(o-1,e.getPoint(o-2).x,t.y),e.setPointAt(o,e.getPoint(o+1).x,t.y)):n===1&&(e.setPointAt(o-1,t.x,e.getPoint(o-2).y),e.setPointAt(o,t.x,e.getPoint(o+1).y))}else{let o=s;const r=e.getPoint(o);if(!t.equalsApprox(r)){const l=e.getPoint(o-2),a=e.getPoint(o-1),h=e.getPoint(o+1),c=e.getPoint(o+2);G.c(a.x,r.x)&&G.c(r.y,h.y)?(G.c(a.x,l.x)&&!G.c(a.y,l.y)&&!G.c(t.x,r.x)?(e.insertPointAt(o,t.x,a.y),s++,o++):e.setPointAt(o-1,t.x,a.y),G.c(h.y,c.y)&&!G.c(h.x,c.x)&&!G.c(t.y,r.y)?e.insertPointAt(o+1,h.x,t.y):e.setPointAt(o+1,h.x,t.y)):G.c(a.y,r.y)&&G.c(r.x,h.x)?(G.c(a.y,l.y)&&!G.c(a.x,l.x)&&!G.c(t.y,r.y)?(e.insertPointAt(o,a.x,t.y),s++,o++):e.setPointAt(o-1,a.x,t.y),G.c(h.x,c.x)&&!G.c(h.y,c.y)&&!G.c(t.x,r.x)?e.insertPointAt(o+1,t.x,h.y):e.setPointAt(o+1,t.x,h.y)):G.c(a.x,r.x)&&G.c(r.x,h.x)?(G.c(a.x,l.x)&&!G.c(a.y,l.y)&&!G.c(t.x,r.x)?(e.insertPointAt(o,t.x,a.y),s++,o++):e.setPointAt(o-1,t.x,a.y),G.c(h.x,c.x)&&!G.c(h.y,c.y)&&!G.c(t.x,r.x)?e.insertPointAt(o+1,t.x,h.y):e.setPointAt(o+1,t.x,h.y)):G.c(a.y,r.y)&&G.c(r.y,h.y)&&(G.c(a.y,l.y)&&!G.c(a.x,l.x)&&!G.c(t.y,r.y)?(e.insertPointAt(o,a.x,t.y),s++,o++):e.setPointAt(o-1,a.x,t.y),G.c(h.y,c.y)&&!G.c(h.x,c.x)&&!G.c(t.y,r.y)?e.insertPointAt(o+1,h.x,t.y):e.setPointAt(o+1,h.x,t.y)),e.setPointAt(s,t.x,t.y)}}else{e.setPointAt(s,t.x,t.y);let o=e.fromNode,r=e.fromPort;if(o!==null){const h=o.findVisibleNode();h!==null&&h!==o&&(o=h,r=o.port)}if(s===1&&r!==null&&e.computeSpot(!0,r).isNoSpot()){const h=r.getDocumentPoint(Spot.Center,Point.l()),c=e.getLinkPointFromPoint(o,r,h,t,!0,Point.l());e.setPointAt(0,c.x,c.y),Point.i(h),Point.i(c)}let l=e.toNode,a=e.toPort;if(l!==null){const h=l.findVisibleNode();h!==null&&h!==l&&(l=h,a=l.port)}if(s===e.pointsCount-2&&a!==null&&e.computeSpot(!1,a).isNoSpot()){const h=a.getDocumentPoint(Spot.Center,Point.l()),c=e.getLinkPointFromPoint(l,a,h,t,!1,Point.l());e.setPointAt(e.pointsCount-1,c.x,c.y),Point.i(h),Point.i(c)}}e.commitRoute()}computeReshape(t){const e=this.adornedLink;if(e===null)return t;const i=this.handle;if(i===null)return t;const s=i.segmentIndex;switch(this.getReshapingBehavior(i)){case 3:return t;case 2:{const n=e.getPoint(s);return new Point(n.x,t.y)}case 1:{const n=e.getPoint(s);return new Point(t.x,n.y)}default:case 0:return e.getPoint(s)}}get originalPoint(){return this.Vx}set originalPoint(t){this.Vx=t.copy()}get originalPoints(){return this.Wu}set originalPoints(t){this.Wu=t.copy()}}class ResizingTool extends Tool{vr;Rr;Eo;jc;aM;Ls;Dr;Ts;Jm;zx;Or;Xx;Gx;Yx;constructor(t){super(),this.name="Resizing",this.vr=new Size(1,1).b(),this.Rr=new Size(9999,9999).b(),this.Eo=new Size(NaN,NaN).b(),this.jc=!1,this.aM=!0,this.Ls=null,this.Dr=new Shape("Rectangle",{alignmentFocus:Spot.Center,desiredSize:Size.lL,fill:"lightblue",stroke:"dodgerblue",strokeWidth:1,cursor:"pointer"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.Ts=null,this.Jm=new Point,this.zx=new Size,this.Or=new Point,this.Xx=new Size(0,0),this.Gx=new Size(1/0,1/0),this.Yx=new Size(1,1),t&&Object.assign(this,t)}updateAdornments(t){if(t!==null){if(t.isSelected&&!this.diagram.isReadOnly){const e=t.resizeObject;if(t.Ir()&&(e===t||e===t.path||e.isPanelMain))return;let i=t.findAdornment(this.name);if(e!==null&&t.canResize()&&t.actualBounds.isReal()&&t.isVisible()&&e.actualBounds.isReal()&&e.isVisibleObject()&&((i===null||i.adornedObject!==e)&&(i=this.makeAdornment(e)),i!==null)){const s=e.getDocumentAngle();t.Wc()&&this.updateResizeHandles(i,s),t.addAdornment(this.name,i);return}}t.removeAdornment(this.name)}}makeAdornment(t){let e=null;const i=t.part?.resizeAdornmentTemplate;if(i){if(e=i.copy(),e===null)return null}else{e=new Adornment,e.type=Panel.Spot,e.locationSpot=Spot.Center;const s=new Placeholder;s.isPanelMain=!0,e.add(s);let n=this.makeHandle(t,Spot.TopLeft);n!==null&&e.add(n),n=this.makeHandle(t,Spot.TopRight),n!==null&&e.add(n),n=this.makeHandle(t,Spot.BottomRight),n!==null&&e.add(n),n=this.makeHandle(t,Spot.BottomLeft),n!==null&&e.add(n),n=this.makeHandle(t,Spot.MiddleTop),n!==null&&e.add(n),n=this.makeHandle(t,Spot.MiddleRight),n!==null&&e.add(n),n=this.makeHandle(t,Spot.MiddleBottom),n!==null&&e.add(n),n=this.makeHandle(t,Spot.MiddleLeft),n!==null&&e.add(n)}return e.adornedObject=t,e}makeHandle(t,e){const i=this.handleArchetype;if(i===null)return null;const s=i.copy().lM();return s.alignment=e,s}updateResizeHandles(t,e){if(t!==null){if(!t.alignment.isDefault()&&(t.cursor==="pointer"||t.cursor.indexOf("resize")>0))this.$R(t,e);else if(t instanceof Panel){const i=t.elements;for(;i.next();){const s=i.value;this.updateResizeHandles(s,e)}}}}$R(t,e){let i=t.alignment;i.isNoSpot()&&(i=Spot.Center);let s=e;if(i.x<=0)i.y<=0?s+=225:i.y>=1?s+=135:s+=180;else if(i.x>=1)i.y<=0?s+=315:i.y>=1&&(s+=45);else if(i.y<=0)s+=270;else if(i.y>=1)s+=90;else return;s=G.ze(s),s<22.5?t.cursor="e-resize":s<67.5?t.cursor="se-resize":s<112.5?t.cursor="s-resize":s<157.5?t.cursor="sw-resize":s<202.5?t.cursor="w-resize":s<247.5?t.cursor="nw-resize":s<292.5?t.cursor="n-resize":s<337.5?t.cursor="ne-resize":t.cursor="e-resize"}get handleArchetype(){return this.Dr}set handleArchetype(t){t!==null&&U.le(t,GraphObject,ResizingTool,"handleArchetype"),this.Dr=t}get handle(){return this.Ts}set handle(t){t!==null&&(t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.Ts=t}get adornedObject(){return this.Ls}set adornedObject(t){t!==null&&t.part instanceof Adornment&&U.n("new handle must not be in an Adornment: "+t),this.Ls=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||!t.allowResize||!this.canStartButton()?!1:this.findToolHandleAt(t.firstInput.documentPoint,this.name)!==null}doActivate(){const t=this.diagram;this.handle===null&&(this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name)),this.handle!==null&&(this.adornedObject=this.handle.part.adornedObject,this.adornedObject!==null&&this.adornedObject.part!==null&&(t.isMouseCaptured=!0,t.animationManager.stopAnimation(),t.Hu=!0,this.startTransaction(this.name),this.Jm.set(this.adornedObject.getDocumentPoint(this.handle.alignment.opposite())),this.Or.set(this.adornedObject.part.location),this.zx.set(this.adornedObject.desiredSize),this.Yx=this.computeCellSize(),this.Xx=this.computeMinSize(),this.Gx=this.computeMaxSize(),this.isActive=!0))}doDeactivate(){const t=this.diagram;t.Hu=!1,t.Hl=!0,this.stopTransaction(),this.handle=null,this.Ls=null,t.isMouseCaptured=!1,this.isActive=!1}stopTransaction(){const t=this.diagram,e=super.stopTransaction();return e&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),e}doCancel(){this.adornedObject!==null&&this.adornedObject.part!==null&&(this.adornedObject.desiredSize=this.originalDesiredSize,this.adornedObject.part.location=this.originalLocation),this.stopTool()}doMouseMove(){const t=this.diagram;if(!this.isActive||this.adornedObject===null||this.handle===null)return;const e=this.Xx,i=this.Gx,s=this.Yx,n=t.lastInput.documentPoint,o=this.adornedObject.getLocalPoint(n,Point.l()),r=this.computeReshape(),l=this.computeResize(o,this.handle.alignment,e,i,s,r);this.resize(l),t.maybeUpdate(),Point.i(o)}doMouseUp(){const t=this.diagram;if(this.isActive&&this.adornedObject!==null&&this.handle!==null){const e=this.Xx,i=this.Gx,s=this.Yx,n=this.adornedObject.getLocalPoint(t.lastInput.documentPoint,Point.l()),o=this.computeReshape(),r=this.computeResize(n,this.handle.alignment,e,i,s,o);this.resize(r),Point.i(n),t.invalidateDocumentBounds(),this.transactionResult=this.name,t.D("PartResized",this.adornedObject,this.originalDesiredSize)}this.stopTool()}resize(t){const e=this.diagram,i=this.adornedObject;if(i===null)return;i.desiredSize=t.size;const s=i.part;if(s===null||this.handle===null)return;s.ensureBounds();const n=i.getDocumentPoint(this.handle.alignment.opposite());if(s instanceof Group){const o=new List;o.add(s);let r;!this.dragsMembers&&!s.hasPlaceholder()&&(r=new DraggingOptions,r.dragsMembers=!1),e.moveParts(o,this.oppositePoint.copy().subtract(n),!0,r)}else s.location=s.location.copy().subtract(n).add(this.oppositePoint);e.maybeUpdate()}computeResize(t,e,i,s,n,o){if(this.adornedObject===null)return Rect.gm;e.isNoSpot()&&(e=Spot.Center);const r=this.adornedObject.naturalBounds,l=r.x,a=r.y,h=r.x+r.width,c=r.y+r.height;let f=1;if(!o){let m=r.width,g=r.height;m<=0&&(m=1),g<=0&&(g=1),f=g/m}const u=Point.l();G.dm(t.x,t.y,l,a,n.width,n.height,u);const d=r.copy();return e.x<=0?e.y<=0?(d.x=Math.max(u.x,h-s.width),d.x=Math.min(d.x,h-i.width),d.width=Math.max(h-d.x,i.width),d.y=Math.max(u.y,c-s.height),d.y=Math.min(d.y,c-i.height),d.height=Math.max(c-d.y,i.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(f*d.width,s.height),i.height),d.width=d.height/f):(d.width=Math.max(Math.min(d.height/f,s.width),i.width),d.height=f*d.width),d.x=h-d.width,d.y=c-d.height)):e.y>=1?(d.x=Math.max(u.x,h-s.width),d.x=Math.min(d.x,h-i.width),d.width=Math.max(h-d.x,i.width),d.height=Math.max(Math.min(u.y-a,s.height),i.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(f*d.width,s.height),i.height),d.width=d.height/f):(d.width=Math.max(Math.min(d.height/f,s.width),i.width),d.height=f*d.width),d.x=h-d.width)):(d.x=Math.max(u.x,h-s.width),d.x=Math.min(d.x,h-i.width),d.width=h-d.x,o||(d.height=Math.max(Math.min(f*d.width,s.height),i.height),d.width=d.height/f,d.y=a+.5*(c-a-d.height))):e.x>=1?e.y<=0?(d.width=Math.max(Math.min(u.x-l,s.width),i.width),d.y=Math.max(u.y,c-s.height),d.y=Math.min(d.y,c-i.height),d.height=Math.max(c-d.y,i.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(f*d.width,s.height),i.height),d.width=d.height/f):(d.width=Math.max(Math.min(d.height/f,s.width),i.width),d.height=f*d.width),d.y=c-d.height)):e.y>=1?(d.width=Math.max(Math.min(u.x-l,s.width),i.width),d.height=Math.max(Math.min(u.y-a,s.height),i.height),o||(d.height/d.width>=1?(d.height=Math.max(Math.min(f*d.width,s.height),i.height),d.width=d.height/f):(d.width=Math.max(Math.min(d.height/f,s.width),i.width),d.height=f*d.width))):(d.width=Math.max(Math.min(u.x-l,s.width),i.width),o||(d.height=Math.max(Math.min(f*d.width,s.height),i.height),d.width=d.height/f,d.y=a+.5*(c-a-d.height))):e.y<=0?(d.y=Math.max(u.y,c-s.height),d.y=Math.min(d.y,c-i.height),d.height=c-d.y,o||(d.width=Math.max(Math.min(d.height/f,s.width),i.width),d.height=f*d.width,d.x=l+.5*(h-l-d.width))):e.y>=1&&(d.height=Math.max(Math.min(u.y-a,s.height),i.height),o||(d.width=Math.max(Math.min(d.height/f,s.width),i.width),d.height=f*d.width,d.x=l+.5*(h-l-d.width))),Point.i(u),d}computeReshape(){let t=0;return this.adornedObject instanceof Shape&&(t=this.adornedObject.hM()),!(t===6||this.diagram.lastInput.shift)}computeMinSize(){if(this.adornedObject===null)return Size.vc;const t=this.adornedObject.minSize.copy(),e=this.minSize;return!isNaN(e.width)&&e.width>t.width&&(t.width=e.width),!isNaN(e.height)&&e.height>t.height&&(t.height=e.height),t}computeMaxSize(){if(this.adornedObject===null)return Size.XP;const t=this.adornedObject.maxSize.copy(),e=this.maxSize;return!isNaN(e.width)&&e.width<t.width&&(t.width=e.width),!isNaN(e.height)&&e.height<t.height&&(t.height=e.height),t}computeCellSize(){const t=new Size(NaN,NaN),e=this.adornedObject?.part;if(e){const n=e.resizeCellSize;!isNaN(n.width)&&n.width>0&&(t.width=n.width),!isNaN(n.height)&&n.height>0&&(t.height=n.height)}let i=this.cellSize;isNaN(t.width)&&!isNaN(i.width)&&i.width>0&&(t.width=i.width),isNaN(t.height)&&!isNaN(i.height)&&i.height>0&&(t.height=i.height);const s=this.diagram;if((isNaN(t.width)||isNaN(t.height))&&s){const n=s.grid;n!==null&&n.visible&&this.isGridSnapEnabled&&(i=n.gridCellSize,isNaN(t.width)&&!isNaN(i.width)&&i.width>0&&(t.width=i.width),isNaN(t.height)&&!isNaN(i.height)&&i.height>0&&(t.height=i.height))}return(isNaN(t.width)||t.width===0||t.width===1/0)&&(t.width=1),(isNaN(t.height)||t.height===0||t.height===1/0)&&(t.height=1),t}get minSize(){return this.vr}set minSize(t){if(!this.vr.equals(t)){let i=t.width;isNaN(i)&&(i=0);let s=t.height;isNaN(s)&&(s=0),this.vr.e(i,s)}}get maxSize(){return this.Rr}set maxSize(t){if(!this.Rr.equals(t)){let i=t.width;isNaN(i)&&(i=1/0);let s=t.height;isNaN(s)&&(s=1/0),this.Rr.e(i,s)}}get cellSize(){return this.Eo}set cellSize(t){this.Eo.equals(t)||this.Eo.h(t)}get isGridSnapEnabled(){return this.jc}set isGridSnapEnabled(t){U.s(t,"boolean",ResizingTool,"isGridSnapEnabled"),this.jc=t}get dragsMembers(){return this.aM}set dragsMembers(t){U.s(t,"boolean",ResizingTool,"dragsMembers"),this.aM=t}get oppositePoint(){return this.Jm}set oppositePoint(t){this.Jm.equals(t)||this.Jm.h(t)}get originalDesiredSize(){return this.zx}set originalDesiredSize(t){this.zx=t.copy()}get originalLocation(){return this.Or}set originalLocation(t){this.Or=t.copy()}}class RotatingTool extends Tool{cM;fM;Ls=null;Dr=null;Kx=null;Ts=null;gh;$m;Or;uM;dM;constructor(t){super(),this.name="Rotating",this.cM=45,this.fM=2,this.Or=new Point,this.Ls=null,this.handleArchetype=new Shape("Ellipse",{desiredSize:Size.Fu,fill:"lightblue",stroke:"dodgerblue",strokeWidth:1,cursor:"pointer"}).theme("fill","adornmentFill").theme("stroke","adornmentStroke"),this.Ts=null,this.gh=0,this.$m=new Point(NaN,NaN),this.uM=0,this.dM=50,t&&Object.assign(this,t)}updateAdornments(t){if(t!==null){if(t.Ir()){const e=t.rotateObject;if(e===t||e===t.path||e.isPanelMain)return}if(t.isSelected&&!this.diagram.isReadOnly){const e=t.rotateObject;if(e!==null&&t.canRotate()&&t.actualBounds.isReal()&&t.isVisible()&&e.actualBounds.isReal()&&e.isVisibleObject()){let i=t.findAdornment(this.name);if((i===null||i.adornedObject!==e)&&(i=this.makeAdornment(e)),i!==null){i.angle=e.getDocumentAngle(),i.hasPlaceholder()||(i.location=this.computeAdornmentLocation(e)),t.addAdornment(this.name,i);return}}}t.removeAdornment(this.name)}}makeAdornment(t){let e=null;const i=t.part?.rotateAdornmentTemplate;return i?e=i.copy():this.Kx!==null&&(e=this.Kx.copy()),e===null?null:(e.adornedObject=t,e)}get handleArchetype(){return this.Dr}set handleArchetype(t){t!==null&&U.le(t,GraphObject,RotatingTool,"handleArchetype"),this.Dr=t,t!==null?this.Kx=new Adornment(Panel.Position,{locationSpot:Spot.Center}).add(t).Ut():this.Kx=null}get handle(){return this.Ts}set handle(t){t!==null&&(t.part instanceof Adornment||U.n("new handle is not in an Adornment: "+t)),this.Ts=t}get adornedObject(){return this.Ls}set adornedObject(t){t!==null&&t.part instanceof Adornment&&U.n("new handle must not be in an Adornment: "+t),this.Ls=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return t.isReadOnly||!t.allowRotate||!this.canStartButton()?!1:this.findToolHandleAt(t.firstInput.documentPoint,this.name)!==null}doActivate(){const t=this.diagram;if(this.adornedObject===null){if(this.handle===null&&(this.handle=this.findToolHandleAt(t.firstInput.documentPoint,this.name)),this.handle===null)return;this.adornedObject=this.handle.part.adornedObject}this.adornedObject===null||this.adornedObject.part===null||(t.isMouseCaptured=!0,t.delaysLayout=!0,this.startTransaction(this.name),this.gh=this.adornedObject.angle,this.$m=this.computeRotationPoint(this.adornedObject),this.Or=this.adornedObject.part.location.copy(),this.isActive=!0)}computeRotationPoint(t){const e=t.part;if(e!==null){const i=e.locationObject;if(e.rotationSpot.isSpot())return t.getDocumentPoint(e.rotationSpot);if(t===e||t===i)return i.getDocumentPoint(e.locationSpot)}return t.getDocumentPoint(Spot.Center)}computeAdornmentLocation(t){let e=this.rotationPoint;e.isReal()||(e=this.computeRotationPoint(t));const i=t.getLocalPoint(e);let s=this.handleAngle;const n=this.handleDistance;if(s===0)i.x=t.naturalBounds.width+n;else if(s===90)i.y=t.naturalBounds.height+n;else if(s===180)i.x=-n;else if(s===270)i.y=-n;else{const o=Rect.ji(t.naturalBounds).inflate(n,n),r=i.x,l=i.y,a=Point.O(Math.max(o.width,o.height)*2,0).rotate(s).offset(r,l);G.kr(o.x,o.y,o.right,o.y,a.x,a.y,r,l)?G.Ms(o.x,o.y,o.right,o.y,a.x,a.y,r,l,i):G.kr(o.right,o.y,o.right,o.bottom,a.x,a.y,r,l)?G.Ms(o.right,o.y,o.right,o.bottom,a.x,a.y,r,l,i):G.kr(o.right,o.bottom,o.x,o.bottom,a.x,a.y,r,l)?G.Ms(o.right,o.bottom,o.x,o.bottom,a.x,a.y,r,l,i):G.kr(o.x,o.bottom,o.x,o.y,a.x,a.y,r,l)?G.Ms(o.x,o.bottom,o.x,o.y,a.x,a.y,r,l,i):(i.x=t.naturalBounds.width+n,i.y=l),Point.i(a),Rect.i(o)}return t.getDocumentPoint(i)}doDeactivate(){const t=this.diagram;this.stopTransaction(),this.handle=null,this.Ls=null,this.$m=new Point(NaN,NaN),t.isMouseCaptured=!1,this.isActive=!1}stopTransaction(){const t=this.diagram,e=super.stopTransaction();return e&&t.undoManager.transactionToUndo!==null&&t.undoManager.transactionToUndo.optimize(),e}doCancel(){const t=this.diagram;t.delaysLayout=!1,this.rotate(this.originalAngle),this.stopTool()}doMouseMove(){const t=this.diagram;if(this.isActive){const e=this.computeRotate(t.lastInput.documentPoint);this.rotate(e)}}doMouseUp(){const t=this.diagram;if(this.isActive){t.delaysLayout=!1;const e=this.computeRotate(t.lastInput.documentPoint);this.rotate(e),t.invalidateDocumentBounds(),this.transactionResult=this.name,t.D("PartRotated",this.adornedObject,this.originalAngle)}this.stopTool()}rotate(t){const e=this.adornedObject;if(e===null||e.part===null)return;e.angle=t,t=e.angle;const i=e.part;i.ensureBounds();const s=i.locationObject,n=i.rotateObject;if(s===n||s.isContainedBy(n)){const o=Point.ji(this.Or);i.location=o.subtract(this.rotationPoint).rotate(t-this.originalAngle).add(this.rotationPoint),Point.i(o)}this.diagram.maybeUpdate()}computeRotate(t){let e=this.rotationPoint.directionPoint(t)-this.handleAngle;const i=this.adornedObject?.panel;i&&(e-=i.getDocumentAngle()),e=G.ze(e);const s=Math.min(Math.abs(this.snapAngleMultiple),180),n=Math.min(Math.abs(this.snapAngleEpsilon),s/2);return!this.diagram.lastInput.shift&&s>0&&n>0&&(e%s<n?e=Math.floor(e/s)*s:e%s>s-n&&(e=(Math.floor(e/s)+1)*s)),G.ze(e)}get snapAngleMultiple(){return this.cM}set snapAngleMultiple(t){U.s(t,"number",RotatingTool,"snapAngleMultiple"),this.cM=t}get snapAngleEpsilon(){return this.fM}set snapAngleEpsilon(t){U.s(t,"number",RotatingTool,"snapAngleEpsilon"),this.fM=t}get originalAngle(){return this.gh}set originalAngle(t){this.gh=t}get originalLocation(){return this.Or}set originalLocation(t){this.Or=t.copy()}get rotationPoint(){return this.$m}set rotationPoint(t){this.$m=t.copy()}get handleAngle(){return this.uM}set handleAngle(t){U.s(t,"number",RotatingTool,"handleAngle"),this.uM=G.ze(t)}get handleDistance(){return this.dM}set handleDistance(t){U.s(t,"number",RotatingTool,"handleDistance"),this.dM=t}}class PanningTool extends Tool{gM;mM;gh;Xl;pM;yM;wM;xM;bM;Hx;Zm;kM;PM;SM;MM;CM;NM;constructor(t){super(),this.name="Panning",this.gM=new Point,this.mM=1,this.gh=0,this.Xl=!1,this.pM=0,this.yM=25,this.wM=100,this.xM=10;const e=this;this.bM=()=>{const i=e.diagram;i!==null&&i.ve(root.document,"scroll",e.bM,!1),e.stopTool()},this.Hx=!1,this.Zm=new Point,this.kM=new Point,this.PM=0,this.SM=0,this.MM=!1,this.CM=!1,this.NM=!1,t&&Object.assign(this,t)}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return!(!t.allowHorizontalScroll&&!t.allowVerticalScroll||!this.canStartButton()||t.currentTool!==this&&!this.isBeyondDragSize()&&!t.lastInput.isMultiTouch)}doActivate(){const t=this.diagram;t!==null&&(this.bubbles?(t.lastInput.bubbles=!0,t.Bt(root.document,"scroll",this.bM,!1)):(t.currentCursor="move",t.isMouseCaptured=!0,this.originalPosition.h(t.position),this.originalScale=t.scale,this.originalAngle=0,this.startedPanning=!1,this.startedScaling=!1,this.startedRotating=!1,this.setInitial()),this.isActive=!0)}setInitial(){const t=this.diagram;if(t===null)return;const e=t.lastInput;if(e.isMultiTouch){e.LL(this.Zm);const i=e.getMultiTouchViewPoint(0,Point.l()),s=e.getMultiTouchViewPoint(1,Point.l());this.initialPosition.x=(i.x+s.x)/2,this.initialPosition.y=(i.y+s.y)/2;const n=s.x-i.x,o=s.y-i.y;this.initialDistance=Math.sqrt(n*n+o*o),this.initialAngle=i.directionPoint(s),Point.i(i),Point.i(s)}else this.Zm.h(t.firstInput.documentPoint),this.initialPosition.x=e.viewPoint.x,this.initialPosition.y=e.viewPoint.y,this.initialDistance=0,this.initialAngle=0}doDeactivate(){const t=this.diagram;t!==null&&(t.currentCursor="",t.isMouseCaptured=!1,this.isActive=!1)}doCancel(){const t=this.diagram;t!==null&&(t.position=this.originalPosition,t.scale=this.originalScale,this.stopTool())}doMouseDown(){this.setInitial()}doMouseMove(){this.iA()}doMouseUp(){this.iA(),this.stopTool()}iA(){const t=this.diagram;if(!this.isActive||!t)return;if(this.bubbles){t.lastInput.bubbles=!0;return}const e=t.lastInput,i=t.position,s=Point.O(e.documentPoint.x,e.documentPoint.y);e.isMultiTouch?(e.LL(s),this.Hx=!0):(this.Hx&&this.Zm.h(s),this.Hx=!1),Point.i(s);const n=this.Zm;let o=i.x+n.x-s.x,r=i.y+n.y-s.y;t.allowHorizontalScroll||(o=i.x),t.allowVerticalScroll||(r=i.y);const l=Point.O(o,r);!this.startedPanning&&Math.sqrt(l.distanceSquaredPoint(i))>this.positionDistanceThreshold/t.scale&&(this.startedPanning=!0);let a=t.scale,h=0,c=0,f=0,u=Point.O(e.viewPoint.x,e.viewPoint.y);if(e.isMultiTouch){const d=e.getMultiTouchViewPoint(0,Point.l()),m=e.getMultiTouchViewPoint(1,Point.l()),g=m.x-d.x,p=m.y-d.y;if(c=Math.sqrt(g*g+p*p),f=d.directionPoint(m),u.x=(m.x+d.x)/2,u.y=(m.y+d.y)/2,Point.i(d),Point.i(m),this.startedScaling||Math.abs(c-this.initialDistance)>this.scaleDifferenceThreshold){this.startedScaling=!0;const x=c/this.initialDistance;a=this.originalScale*x}const y=f-this.initialAngle;(this.startedRotating||Math.abs(y)>this.angleThreshold)&&(this.startedRotating=!0,h=this.originalAngle+y)}this.pan(l,a,h,c,f,u),Point.i(l)}pan(t,e,i,s,n,o){const r=this.diagram;if(r&&(r.position=t,s>this.scaleMinimumThreshold&&e!==r.scale)){const l=r.zoomPoint;r.zoomPoint=o,r.scale=e,r.zoomPoint=l}}get bubbles(){return this.Xl}set bubbles(t){U.s(t,"boolean",PanningTool,"bubbles"),this.Xl=t}get originalPosition(){return this.gM}set originalPosition(t){this.gM.set(t)}get initialPosition(){return this.kM}set initialPosition(t){this.kM.set(t)}get positionDistanceThreshold(){return this.pM}set positionDistanceThreshold(t){this.pM=t}get startedPanning(){return this.MM}set startedPanning(t){this.MM=t}get originalScale(){return this.mM}set originalScale(t){t>0&&(this.mM=t)}get initialDistance(){return this.PM}set initialDistance(t){this.PM=t}get scaleDifferenceThreshold(){return this.yM}set scaleDifferenceThreshold(t){this.yM=t}get scaleMinimumThreshold(){return this.wM}set scaleMinimumThreshold(t){this.wM=t}get startedScaling(){return this.CM}set startedScaling(t){this.CM=t}get originalAngle(){return this.gh}set originalAngle(t){this.gh=t}get initialAngle(){return this.SM}set initialAngle(t){this.SM=t}get angleThreshold(){return this.xM}set angleThreshold(t){this.xM=t}get startedRotating(){return this.NM}set startedRotating(t){this.NM=t}}class ClickSelectingTool extends Tool{constructor(t){super(),this.name="ClickSelecting",t&&Object.assign(this,t)}canStart(){return!(!this.isEnabled||this.isBeyondDragSize())}doMouseUp(){this.isActive&&(this.standardMouseSelect(),this.standardMouseClick()||this.diagram.lastInput.isTouchEvent&&this.diagram.toolManager.doToolTip()),this.stopTool()}}class ActionTool extends Tool{Jc;constructor(t){super(),this.name="Action",this.Jc=null,t&&Object.assign(this,t)}canStart(){if(!this.isEnabled)return!1;const t=this.diagram,e=t.lastInput,i=t.findObjectAt(e.documentPoint,s=>{for(;s.panel!==null;){if(s.isActionable)return s;s=s.panel}return s});return i!==null&&i.isActionable?(this.Jc=i,t.Yc=t.findObjectAt(e.documentPoint,null,null),!0):!1}doMouseDown(){if(!this.isActive)this.canStart()&&this.doActivate();else{const e=this.diagram.lastInput,i=this.Jc;if(i===null)return;e.targetObject=i,i.actionDown!==null&&i.actionDown(e,i)}}doMouseMove(){if(this.isActive){const e=this.diagram.lastInput,i=this.Jc;if(i===null)return;e.targetObject=i,i.actionMove!==null&&i.actionMove(e,i)}}doMouseUp(){if(this.isActive){const e=this.diagram.lastInput,i=this.Jc;if(i===null)return;e.targetObject=i,i.actionUp!==null&&i.actionUp(e,i),this.standardMouseClick(s=>{for(;s.panel!==null;){if(s.isActionable&&s===i)return s;s=s.panel}return s},s=>s===i)}this.stopTool()}doCancel(){const e=this.diagram.lastInput,i=this.Jc;i!==null&&(e.targetObject=i,i.actionCancel!==null&&i.actionCancel(e,i),this.stopTool())}doStop(){this.Jc=null}}class ClickCreatingTool extends Tool{Jl;TM;jc;LM;constructor(t){super(),this.name="ClickCreating",this.Jl=null,this.TM=!0,this.jc=!1,this.LM=new Point(0,0),t&&Object.assign(this,t)}canStart(){if(!this.isEnabled||this.archetypeNodeData===null)return!1;const t=this.diagram;if(t.isReadOnly||t.isModelReadOnly||!t.allowInsert||!this.canStartButton()||this.isBeyondDragSize())return!1;if(this.isDoubleClick){if(t.lastInput.clickCount===1&&(this.LM=t.lastInput.viewPoint.copy()),t.lastInput.clickCount!==2||this.isBeyondDragSize(this.LM))return!1}else if(t.lastInput.clickCount!==1)return!1;return!(t.currentTool!==this&&t.findPartAt(t.lastInput.documentPoint,!0)!==null)}doMouseUp(){const t=this.diagram;this.isActive&&this.insertPart(t.lastInput.documentPoint),this.stopTool()}insertPart(t){const e=this.diagram,i=this.archetypeNodeData;if(i===null)return null;let s=null;try{if(e.D("ChangingSelection",e.selection),this.startTransaction(this.name),i instanceof Part)i.Oi()&&(i.Ut(),s=i.copy(),s!==null&&e.add(s));else if(i!==null){const n=e.model.copyNodeData(i);e.model.addNodeData(n),s=e.findPartForData(n)}if(s!==null){const n=Point.O(t.x,t.y);this.isGridSnapEnabled&&this.diagram.AM(s,t,n),s.location=n,e.allowSelect&&(e.clearSelection(!0),s.isSelected=!0),Point.i(n)}e.invalidateDocumentBounds(),this.transactionResult=this.name,e.D("PartCreated",s)}finally{this.stopTransaction(),e.D("ChangedSelection",e.selection)}return s}get archetypeNodeData(){return this.Jl}set archetypeNodeData(t){t!==null&&U.Fc(t,ClickCreatingTool,"archetypeNodeData"),this.Jl=t}get isDoubleClick(){return this.TM}set isDoubleClick(t){U.s(t,"boolean",ClickCreatingTool,"isDoubleClick"),this.TM=t}get isGridSnapEnabled(){return this.jc}set isGridSnapEnabled(t){U.s(t,"boolean",ClickCreatingTool,"isGridSnapEnabled"),this.jc=t}}class DragSelectingTool extends Tool{ch;DM;$l;constructor(t){super(),this.name="DragSelecting",this.ch=175,this.DM=!1,this.$l=new Part({layerName:"Tool",selectable:!1}).add(new Shape("Rectangle",{name:"SHAPE",fill:null,stroke:"magenta"}).theme("stroke","dragSelect")).Ut(),t&&Object.assign(this,t)}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(!t.allowSelect||!this.canStartButton())return!1;if(t.currentTool!==this){if(!this.isBeyondDragSize())return!1;const e=t.lastInput;if(e.timestamp-t.firstInput.timestamp<this.delay||t.findPartAt(e.documentPoint,!0)!==null)return!1}return!0}doActivate(){const t=this.diagram;this.isActive=!0,t.isMouseCaptured=!0,t.skipsUndoManager=!0,this.box&&t.add(this.box),this.doMouseMove()}doDeactivate(){const t=this.diagram;t.stopAutoScroll(),this.box&&t.remove(this.box),t.skipsUndoManager=!1,t.isMouseCaptured=!1,this.isActive=!1}doMouseMove(){const t=this.diagram;if(this.isActive&&this.box!==null){const e=this.computeBoxBounds();let i=this.box.findObject("SHAPE");i===null&&(i=this.box.findMainElement());const s=Size.l().e(e.width,e.height);i!==null&&(i.desiredSize=s),this.box.$c(e.x,e.y,!1),Size.i(s),(t.allowHorizontalScroll||t.allowVerticalScroll)&&t.doAutoScroll(t.lastInput.viewPoint)}}doMouseUp(){if(this.isActive){const t=this.diagram;this.box&&t.remove(this.box);try{t.currentCursor="wait",t.D("ChangingSelection",t.selection),this.selectInRect(this.computeBoxBounds()),t.D("ChangedSelection",t.selection)}finally{t.currentCursor=""}}this.stopTool()}computeBoxBounds(){const t=this.diagram;return new Rect(t.firstInput.documentPoint,t.lastInput.documentPoint)}findInRect(t){return this.diagram.findPartsIn(t,this.isPartialInclusion)}selectInRect(t){const e=this.diagram,i=e.lastInput,s=this.findInRect(t);if(U.yr?i.meta:i.control)if(i.shift){const n=s.iterator;for(;n.next();){const o=n.value;o.isSelected&&(o.isSelected=!1)}}else{const n=s.iterator;for(;n.next();){const o=n.value;o.isSelected=!o.isSelected}}else if(i.shift){const n=s.iterator;for(;n.next();){const o=n.value;o.isSelected||(o.isSelected=!0)}}else{const n=new List,o=e.selection.iterator;for(;o.next();){const a=o.value;s.has(a)||n.add(a)}const r=n.iterator;for(;r.next();){const a=r.value;a.isSelected=!1}const l=s.iterator;for(;l.next();){const a=l.value;a.isSelected||(a.isSelected=!0)}}}get delay(){return this.ch}set delay(t){U.s(t,"number",DragSelectingTool,"delay"),this.ch=t}get isPartialInclusion(){return this.DM}set isPartialInclusion(t){U.s(t,"boolean",DragSelectingTool,"isPartialInclusion"),this.DM=t}get box(){return this.$l}set box(t){t!==null&&t.Ut(),this.$l=t}}class HTMLInfo{qx;jx;FM;vM;constructor(t){this.qx=null,this.jx=null,this.FM=null,this.vM=null,t&&Object.assign(this,t)}get mainElement(){return this.FM}set mainElement(t){t!==null&&U.le(t,HTMLElement,HTMLInfo,"mainElement"),this.FM=t}get show(){return this.qx}set show(t){this.qx!==t&&(t!==null&&U.S(t,HTMLInfo,"show"),this.qx=t)}get hide(){return this.jx}set hide(t){this.jx!==t&&(t!==null&&U.S(t,HTMLInfo,"hide"),this.jx=t)}get valueFunction(){return this.vM}set valueFunction(t){this.vM=t}}class ContextMenuButtonInfo{me;Wx;Zc;constructor(t,e,i){this.me=t,this.Wx=e,this.Zc=i}}class ContextMenuTool extends Tool{RM;Jx;OM;IM;$x;Zx;Qm;constructor(t){super(),this.name="ContextMenu",this.RM=null,this.Jx=null,this.OM=null,this.IM=new Point,this.$x=null,this.Qm=!1;const e=this;this.Zx=()=>e.stopTool(),t&&Object.assign(this,t)}ZR(){const t=new HTMLInfo;t.show=(r,l,a)=>a.showDefaultContextMenu(),t.hide=(r,l)=>l.hideDefaultContextMenu(),ContextMenuTool.Ju=t;const e=this;this.Zx=()=>e.stopTool();const i=U.Li("div"),s=U.Li("div");i.style.cssText="top: 0px;z-index:10002;position: fixed;display: none;text-align: center;left: 25%;width: 50%;background-color: #F5F5F5;padding: 16px;border: 16px solid #444;border-radius: 10px;margin-top: 10px",s.style.cssText="z-index:10001;position: fixed;display: none;top: 0;left: 0;width: 100%;height: 100%;background-color: black;opacity: 0.8;";const n=U.Li("style");root.document.getElementsByTagName("head")[0].appendChild(n),n.sheet.insertRule(".goCXul { list-style: none; }",0),n.sheet.insertRule(".goCXli {font:700 1.5em Helvetica, Arial, sans-serif;position: relative;min-width: 60px; }",0),n.sheet.insertRule(".goCXa {color: #444;display: inline-block;padding: 4px;text-decoration: none;margin: 2px;border: 1px solid gray;border-radius: 10px; }",0);const o=this.diagram;o!==null&&(o.Bt(i,"contextmenu",ContextMenuTool.mh,!1),o.Bt(i,"selectstart",ContextMenuTool.mh,!1),o.Bt(s,"contextmenu",ContextMenuTool.mh,!1)),i.className="goCXforeground",s.className="goCXbackground",root.document.body&&(root.document.body.appendChild(i),root.document.body.appendChild(s)),ContextMenuTool._m=i,ContextMenuTool.tp=s,ContextMenuTool.EM=!0}static Ju=null;static EM=!1;static tp;static _m;static mh(t){return t.preventDefault(),!1}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;return this.isBeyondDragSize()||!t.lastInput.right||t.lastInput.clickCount>1?!1:!!(t.lastInput.isTouchEvent&&this.defaultTouchContextMenu!==null||this.findObjectWithContextMenu()!==null)}doStart(){const t=this.diagram;this.IM.set(t.firstInput.documentPoint)}doStop(){this.hideContextMenu(),this.currentObject=null,this.Qm=!1}findObjectWithContextMenu(t){t===void 0&&(t=null);const e=this.diagram,i=e.lastInput;let s=null;if(t instanceof Diagram||(t instanceof GraphObject?s=t:s=e.findObjectAt(i.documentPoint,null,n=>!n.layer?.isTemporary)),s!==null){let n=s;for(;n!==null;){if(n.contextMenu!==null)return n;n=n.panel}if(e.lastInput.isTouchEvent&&this.defaultTouchContextMenu)return s.part}else if(e.contextMenu!==null)return e;return null}doActivate(){}doMouseDown(){if(super.doMouseDown(),this.isActive&&this.currentContextMenu instanceof Adornment){const t=this.diagram.toolManager.findTool("Action");t!==null&&t.canStart()&&(t.doActivate(),t.doMouseDown(),t.doDeactivate())}this.diagram.toolManager.mouseDownTools.has(this)&&this.doContextClick()}doMouseUp(){if(this.isActive&&this.currentContextMenu instanceof Adornment){const t=this.diagram.toolManager.findTool("Action");t!==null&&t.canStart()&&(t.doActivate(),t.doCancel(),t.doDeactivate())}this.doContextClick()}doContextClick(){const t=this.diagram;if(!this.isActive)this.canStart()&&(this.openMenu(!0),this.isActive||this.stopTool());else{const e=this.currentContextMenu;if(e===null)return;let i=null;e instanceof HTMLInfo||(i=t.findObjectAt(t.lastInput.documentPoint,null,null),i!==null&&i.isContainedBy(e)&&this.standardMouseClick(null,null)),this.maybeStopTool(i)}}maybeStopTool(t){this.stopTool(),this.canStart()&&(this.diagram.currentTool=this,this.doMouseUp())}openMenu(t,e){if(e===void 0&&(e=null),this.Qm)return;this.Qm=!0;let i=!1;if(e instanceof Diagram){const s=this.diagram.lastInput;s.targetObject=null,i=this.OL(null,s,this.diagram)}else t&&this.standardMouseSelect(),i=this.standardMouseClick();if(this.Qm=!1,!i){this.isActive=!0;const s=ContextMenuTool.Ju;if(e===null&&(e=this.findObjectWithContextMenu()),e!==null){const n=e.contextMenu;n!==null?(this.currentObject=e instanceof GraphObject?e:null,this.showContextMenu(n,this.currentObject)):s!==null&&this.showContextMenu(s,this.currentObject)}else s!==null&&this.showContextMenu(s,null);this.currentContextMenu instanceof Adornment&&!this.currentContextMenu.visible&&this.stopTool()}}doMouseMove(){const t=this.diagram.toolManager.findTool("Action");t!==null&&t.doMouseMove(),this.isActive&&this.diagram.toolManager.doMouseMove()}showContextMenu(t,e){e!==null&&U.le(e,GraphObject,ContextMenuTool,"showContextMenu:obj");const i=this.diagram;if(t!==this.currentContextMenu&&this.hideContextMenu(),t instanceof Adornment){const s=t;s.layerName="Tool",s.selectable=!1,s.scale=1/i.scale,s.category=this.name,s.hasPlaceholder()&&(s.placeholder.scale=i.scale);const n=s.diagram;n!==null&&n!==i&&n.remove(s),i.add(s),e!==null?s.adornedObject=e:s.data=i.model,s.ensureBounds(),this.positionContextMenu(s,e)}else t instanceof HTMLInfo&&t.show!==null&&t.show(e,i,this);this.currentContextMenu=t}positionContextMenu(t,e){if(t.hasPlaceholder())return;const i=t,s=this.diagram,n=s.lastInput.documentPoint.copy(),o=i.measuredBounds,r=s.viewportBounds;s.lastInput.isTouchEvent&&(n.x-=o.width),n.x+o.width>r.right&&(n.x-=o.width+5/s.scale),n.x<r.x&&(n.x=r.x),n.y+o.height>r.bottom&&(n.y-=o.height+5/s.scale),n.y<r.y&&(n.y=r.y),i.position=n}hideContextMenu(){const t=this.diagram,e=this.currentContextMenu;e!==null&&(e instanceof Adornment?(t.remove(e),this.Jx!==null&&this.Jx.removeAdornment(e.category),e.data=null,e.adornedObject=null):e instanceof HTMLInfo&&(e.hide!==null?e.hide(t,this):e.mainElement!==null&&(e.mainElement.style.display="none")),this.currentContextMenu=null,this.standardMouseOver())}QR(){const t=this,e=new List;return e.add(new ContextMenuButtonInfo("Copy",i=>i.commandHandler.copySelection(),i=>i.commandHandler.canCopySelection())),e.add(new ContextMenuButtonInfo("Cut",i=>i.commandHandler.cutSelection(),i=>i.commandHandler.canCutSelection())),e.add(new ContextMenuButtonInfo("Delete",i=>i.commandHandler.deleteSelection(),i=>i.commandHandler.canDeleteSelection())),e.add(new ContextMenuButtonInfo("Paste",i=>i.commandHandler.pasteSelection(t.mouseDownPoint),i=>i.commandHandler.canPasteSelection(t.mouseDownPoint))),e.add(new ContextMenuButtonInfo("Select All",i=>i.commandHandler.selectAll(),i=>i.commandHandler.canSelectAll())),e.add(new ContextMenuButtonInfo("Undo",i=>i.commandHandler.undo(),i=>i.commandHandler.canUndo())),e.add(new ContextMenuButtonInfo("Redo",i=>i.commandHandler.redo(),i=>i.commandHandler.canRedo())),e.add(new ContextMenuButtonInfo("Scroll To Part",i=>i.commandHandler.scrollToPart(),i=>i.commandHandler.canScrollToPart())),e.add(new ContextMenuButtonInfo("Zoom To Fit",i=>i.commandHandler.zoomToFit(),i=>i.commandHandler.canZoomToFit())),e.add(new ContextMenuButtonInfo("Reset Zoom",i=>i.commandHandler.resetZoom(),i=>i.commandHandler.canResetZoom())),e.add(new ContextMenuButtonInfo("Group Selection",i=>i.commandHandler.groupSelection(),i=>i.commandHandler.canGroupSelection())),e.add(new ContextMenuButtonInfo("Ungroup Selection",i=>i.commandHandler.ungroupSelection(),i=>i.commandHandler.canUngroupSelection())),e.add(new ContextMenuButtonInfo("Edit Text",i=>i.commandHandler.editTextBlock(),i=>i.commandHandler.canEditTextBlock())),e}showDefaultContextMenu(){const t=this.diagram;this.$x===null&&(this.$x=this.QR()),ContextMenuTool._m.innerHTML="",ContextMenuTool.tp.addEventListener("pointerdown",this.Zx,!1);const e=this,i=U.Li("ul");i.className="goCXul",ContextMenuTool._m.appendChild(i),i.innerHTML="";const s=this.$x.iterator;for(;s.next();){const n=s.value,o=n.Wx,r=n.Zc;if(!U.nt(o)||U.nt(r)&&!r(t))continue;const l=U.Li("li");l.className="goCXli";const a=U.Li("a");a.className="goCXa",a.href="#",a.Wx=o,a.addEventListener("pointerdown",function(h){return this.Wx(t),e.stopTool(),h.preventDefault(),!1},!1),a.textContent=n.me,l.appendChild(a),i.appendChild(l)}ContextMenuTool._m.style.display="block",ContextMenuTool.tp.style.display="block"}hideDefaultContextMenu(){if(this.currentContextMenu===null||this.currentContextMenu!==ContextMenuTool.Ju)return;ContextMenuTool._m.style.display="none",ContextMenuTool.tp.style.display="none";const t=this.diagram;t!==null&&t.ve(ContextMenuTool.tp,"pointerdown",this.Zx,!1),this.currentContextMenu=null}doMouseWheel(){this.standardMouseWheel()}get currentContextMenu(){return this.RM}set currentContextMenu(t){this.RM=t,this.Jx=t instanceof Adornment?t.adornedPart:null}get defaultTouchContextMenu(){return ContextMenuTool.EM===!1&&ContextMenuTool.Ju===null&&Diagram.isUsingDOM()&&this.ZR(),ContextMenuTool.Ju}set defaultTouchContextMenu(t){t===null&&(ContextMenuTool.EM=!0),ContextMenuTool.Ju=t}get currentObject(){return this.OM}set currentObject(t){t!==null&&U.le(t,GraphObject,ContextMenuTool,"currentObject"),this.OM=t}get mouseDownPoint(){return this.IM}}var TextEditingAccept=(w=>(w[w.LostFocus=1]="LostFocus",w[w.MouseDown=2]="MouseDown",w[w.Tab=3]="Tab",w[w.Enter=4]="Enter",w))(TextEditingAccept||{}),TextEditingStarting=(w=>(w[w.SingleClick=1]="SingleClick",w[w.SingleClickSelected=2]="SingleClickSelected",w[w.DoubleClick=3]="DoubleClick",w))(TextEditingStarting||{}),TextEditingState=(w=>(w[w.None=1]="None",w[w.Active=2]="Active",w[w.Editing=3]="Editing",w[w.Validating=4]="Validating",w[w.Invalid=5]="Invalid",w[w.Validated=6]="Validated",w))(TextEditingState||{});class TextEditingTool extends Tool{Ii;UM;BM;Zl;Kt;VM;zM;XM;Qx;_x;constructor(t){super(),this.name="TextEditing",this.Ii=new TextBlock,this.UM=null,this.BM=2,this.Zl=null,this.Kt=1,this.VM=1,this.zM=!0,this.XM=null,this.Qx=new HTMLInfo,this._x=null,this._R(this.Qx),t&&Object.assign(this,t)}static LostFocus=1;static MouseDown=2;static Tab=3;static Enter=4;static SingleClick=1;static SingleClickSelected=2;static DoubleClick=3;static StateNone=1;static StateActive=2;static StateEditing=3;static StateValidating=4;static StateInvalid=5;static StateValidated=6;_R(t){if(!Diagram.isUsingDOM())return;const e=U.Li("textarea");this._x=e;const i=this;e.addEventListener("input",function(s){if(i.textBlock===null)return;const n=i.measureTemporaryTextBlock(this.value),o=this.textScale;this.style.width=20+Math.max(i.textBlock.measuredBounds.width,n.measuredBounds.width)*o+"px",this.rows=Math.max(i.textBlock.lineCount,n.lineCount)},!1),e.addEventListener("keydown",function(s){if(s.isComposing||i.textBlock===null)return;const n=s.key;if(n==="Enter"){i.textBlock.isMultiline===!1&&s.preventDefault(),i.acceptText(4);return}else if(n==="Tab"){i.acceptText(3),s.preventDefault();return}else n==="Escape"&&(i.doCancel(),i.diagram!==null&&i.diagram.doFocus())},!1),e.addEventListener("focus",function(s){i.tO(s)},!1),e.addEventListener("blur",function(s){i.eO(s)},!1),t.valueFunction=()=>e.value,t.mainElement=e,t.show=(s,n,o)=>{if(!(s instanceof TextBlock)||!n||!n.div||!(o instanceof TextEditingTool))return;if(o.state===5){e.style.border="3px solid red",e.focus();return}const r=s.getDocumentPoint(Spot.Center),l=n.position,a=n.scale;let h=s.getDocumentScale()*a;h<o.minimumEditorScale&&(h=o.minimumEditorScale);const c=s.naturalBounds.width*h+6,f=s.naturalBounds.height*h+2,u=(r.x-l.x)*a,d=(r.y-l.y)*a,m=s.verticalAlignment,p=(s.lineHeight+s.spacingAbove+s.spacingBelow)*s.lineCount*h,y=.5*f-.5*p,x=m.y*f-m.y*p+m.offsetY-y-p/2;e.value=s.text,n.div.style.font=s.font;const b=1;e.style.position="absolute",e.style.zIndex="100",e.style.font="inherit",e.style.fontSize=h*100+"%",e.style.lineHeight="normal",e.style.width=c+"px",e.style.left=(u-c/2|0)-b+"px",e.style.top=(d+x|0)-b+"px",e.style.textAlign=s.textAlign,e.style.margin="0",e.style.padding=b+"px",e.style.border="0",e.style.outline="none",e.style.whiteSpace="pre-wrap",e.style.overflow="hidden",e.rows=s.lineCount,e.textScale=h,e.className="goTXarea",n.div.appendChild(e),e.focus(),o.selectsTextOnActivate&&(e.select(),e.setSelectionRange(0,9999))},t.hide=(s,n)=>{s.div&&s.div.removeChild(e)}}get textBlock(){return this.UM}set textBlock(t){t!==null&&U.le(t,TextBlock,TextEditingTool,"textBlock"),this.UM=t}get currentTextEditor(){return this.XM}set currentTextEditor(t){this.XM=t}get defaultTextEditor(){return this.Qx}set defaultTextEditor(t){this.Qx=t}get starting(){return this.BM}set starting(t){this.BM=t}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t===null||t.isReadOnly||TextEditingTool.Qc&&TextEditingTool.Qc!==this&&(TextEditingTool.Qc.acceptText(2),TextEditingTool.Qc&&TextEditingTool.Qc!==this)||!this.canStartButton()||this.isBeyondDragSize())return!1;const e=t.lastInput.documentPoint,i=t.findObjectAt(e);if(i===null||!(i instanceof TextBlock)||!i.editable||i.part===null||!i.part.canEdit())return!1;const s=i.part;return!(s===null||this.starting===2&&!s.isSelected||this.starting===3&&t.lastInput.clickCount<2)}doStart(){TextEditingTool.Qc=this,this.textBlock!==null&&this.doActivate()}doActivate(){if(this.isActive)return;const t=this.diagram;if(t===null)return;let e=this.textBlock;if(e===null&&(e=t.findObjectAt(t.lastInput.documentPoint)),e===null||!(e instanceof TextBlock)||(this.textBlock=e,e.part===null))return;t.animationManager.stopAnimation(),this.isActive=!0,this.Kt=2;let s=this.defaultTextEditor;e.textEditor!==null&&(s=e.textEditor),this.Ii=this.textBlock.copy();const n=new Rect(this.textBlock.getDocumentPoint(Spot.TopLeft),this.textBlock.getDocumentPoint(Spot.BottomRight));t.scrollToRect(n),s!==null&&s.show!==null&&s.show(e,t,this),this.currentTextEditor=s}doCancel(){this.stopTool()}doMouseUp(){this.canStart()&&this.doActivate()}doMouseDown(){this.isActive&&this.acceptText(2)}acceptText(t){switch(t){case 2:this.Kt===6?this.currentTextEditor instanceof HTMLElement&&this.currentTextEditor.focus():(this.Kt===2||this.Kt===5||this.Kt===3)&&(this.Kt=4,this.sA());break;case 1:case 4:case 3:if(t===4&&this.textBlock!==null&&this.textBlock.isMultiline===!0)return;(this.Kt===2||this.Kt===5||this.Kt===3)&&(this.Kt=4,this.sA());break}}sA(){const t=this.textBlock,e=this.diagram,i=this.currentTextEditor;if(t!==null&&i!==null){const s=t.text;let n="";if(i.valueFunction!==null&&(n=i.valueFunction()),!this.isValidText(t,s,n)){this.Kt=5,this.doError(s,n);return}this.startTransaction(this.name),this.Kt=6,this.transactionResult=this.name,t.text=n,this.doSuccess(s,n),e!==null&&e.D("TextEdited",t,s),this.stopTransaction(),this.stopTool(),e!==null&&e.doFocus()}}doError(t,e){const i=this.textBlock;if(i===null)return;i.errorFunction!==null&&i.errorFunction(this,t,e);const s=this.currentTextEditor;s!==null&&s.show!==null&&s.show(i,this.diagram,this)}doSuccess(t,e){const i=this.textBlock;i!==null&&i.textEdited!==null&&i.textEdited(i,t,e)}doDeactivate(){const t=this.diagram;if(t!==null){if(this.Kt=1,this.currentTextEditor!==null){const e=this.currentTextEditor;e!==null&&e.hide!==null&&e.hide(t,this)}this.textBlock=null,this.isActive=!1}}doStop(){TextEditingTool.Qc=null}tO(t){if(this.currentTextEditor===null||this.state===1)return;const e=this._x;this.Kt===2&&(this.Kt=3),U.nt(e.select)&&this.selectsTextOnActivate&&(e.select(),e.setSelectionRange(0,9999))}eO(t){if(this.currentTextEditor===null||this.state===1)return;const e=this._x;U.nt(e.focus)&&e.focus(),U.nt(e.select)&&this.selectsTextOnActivate&&(e.select(),e.setSelectionRange(0,9999))}isValidText(t,e,i){const s=this.textValidation;if(s!==null&&!s(t,e,i))return!1;const n=t.textValidation;return!(n!==null&&!n(t,e,i))}get textValidation(){return this.Zl}set textValidation(t){t!==null&&U.S(t,TextEditingTool,"textValidation"),this.Zl=t}get minimumEditorScale(){return this.VM}set minimumEditorScale(t){t!==null&&U.s(t,"number",TextEditingTool,"minimumEditorScale"),this.VM=t}get selectsTextOnActivate(){return this.zM}set selectsTextOnActivate(t){t!==null&&U.s(t,"boolean",TextEditingTool,"selectsTextOnActivate"),this.zM=t}get state(){return this.Kt}set state(t){this.Kt!==t&&(this.Kt=t)}measureTemporaryTextBlock(t){const e=this.Ii;return e.text=t,this.textBlock!==null&&e.ct(this.textBlock.Ql,1/0),e}static Qc=null}var AnimationStyle=(w=>(w[w.Default=1]="Default",w[w.AnimateLocations=2]="AnimateLocations",w[w.None=3]="None",w))(AnimationStyle||{});class AnimationManager{a;Re;Ye;Er;so;Uo;GM;YM;ep;tb;Ne;_c;Mn;ip;ph;eb;sp;ib;tf;qu;np;constructor(t){this.a=Diagram.qm(),this.Re=!1,this.ep=!1,this.tb=!1,this.Ne=!1,this._c=!1,this.ib=!0,this.tf=1,this.qu=!1,this.Ye=!0,this.Er=!1,this.Uo=600,this.GM=!1,this.YM=!1,this.so=new GSet,this.Mn=new Animation,this.ip=new Animation,this.Mn.As=this,this.ph=new GSet,this.eb=new GSet,this.sp=new GSet,this.np=new GSet,t&&Object.assign(this,t)}Bo(t){this.a=t}rB(){return this.a}canStart(t){return!0}_l(t){return!this.Ye||!this.canStart(t)?!1:(this.so.add(t),this.defaultAnimation.isAnimating&&this.stopAnimation(),this.a.Oe(),this.Ne=!0,!0)}getBundleAnimation(){return this.ip}KM(){if(!this.Ye||(this.ip.bi.count>0&&this.ip.start(),!this.Ne))return;const t=this.Mn,e=this.a,i=this.so.has("Model");if(i&&(this._c=!0,this.tf===1?(t.isViewportUnconstrained=!0,t.bi.clear(),t.add(e,"position",e.position.copy().offset(0,-200),e.position),t.add(e,"opacity",0,1)):this.tf===3&&t.bi.clear(),this.tf===2&&e.sb.equals(e.ft)?this.ib=!0:this.ib=!1,e.D("InitialAnimationStarting",this)),i&&!this.Er||t.bi.count===0){this.so.clear(),this.Ne=!1,t.bi.clear(),t.nb(e),this._c=!1,e.N();return}this.so.clear(),e.Ur=!1;const s=t.bi.get(e);e.autoScale!==1&&s!==null&&(delete s.fe.scale,delete s.Ds.scale);const n=this;root.requestAnimationFrame(()=>{n.Ne===!1||t.Re||(e.HM(),n.Ne=!1,t.start(),t.Re&&(n.$u(),e.invalidateDocumentBounds(),t.nA(0),e.Ar(!0),n.Zu(),e.D("AnimationStarting",n)))})}qM(){return this.so.has("Trigger")&&this.so.count===1}oA(t,e,i,s){this.isTicking||this.qM()||t instanceof Link&&(t.fromNode!==null||t.toNode!==null)||this.Mn.add(t,"position",e,i,s)}ob(t){return this.Mn.ob(t)}jM(t){return this.Mn.jM(t)}iO(t){const e=this.ph,i=this;function s(){if(i.sp.count>0&&(e.addAll(i.sp),i.sp.clear(),i.Re=!0),i.Re===!1||e.count===0){i.tb=!1;return}i.eb.addAll(e);const n=i.eb.iterator;for(;n.next();){const o=n.value;o.Re!==!1&&(o.sO()?o.rA(!1):o.ef=!0)}if(i.eb.clear(),i.Re===!1){root.requestAnimationFrame(s);return}i.$u(),i.a.Ar(),i.Zu(),root.requestAnimationFrame(s)}this.Re?this.lA(t):(this.Re=!0,this.tb?this.lA(t):(this.tb=!0,e.add(t),root.requestAnimationFrame(()=>s())))}lA(t){this.sp.add(t)}nO(){const t=this.ph.iterator;for(;t.next();)t.value.ef=!1}$u(){if(this.ep)return;const t=this.a;this.GM=t.skipsUndoManager,this.YM=t.ki,t.skipsUndoManager=!0,t.ki=!0,this.ep=!0}Zu(){const t=this.a;t.skipsUndoManager=this.GM,t.ki=this.YM,this.ep=!1}stopAnimation(t){const e=this.Mn;if(this.Ne===!0&&(this.Ne=!1,this._c=!1,this.so.clear(),e.oO()&&this.a.requestUpdate()),!this.Re){e.bi.clear(),e.nb(this.a);return}if(e.Qu(!0),e.nb(null),t===!0){const i=this.ph.toArray();for(let s=0;s<i.length;s++)i[s].Qu(!0)}}Qu(t){this.ph.delete(t),this.ph.count===0&&(this.Re=!1,this.a.requestUpdate()),t===this.defaultAnimation&&this.a.D("AnimationFinished",this)}sf(t,e){this.Ne&&(!this.so.has("Expand Tree")&&!this.so.has("Expand SubGraph")||(this.Mn.sf(t,e),this.aA(t)))}nf(t,e){this.Ne&&(!this.so.has("Collapse Tree")&&!this.so.has("Collapse SubGraph")||(this.Mn.nf(t,e),this.Mn.WM(e,"position",e.position,e.position),this.aA(t)))}hA(t,e){!this.Ne||t.equals(e)||this.qM()||(this.a.ah||(t=e.copy()),this.Mn.WM(this.a,"position",t,e))}cA(t,e){this.Ne&&(this.qM()||this.Mn.add(this.a,"scale",t,e))}JM(t,e){t.$i&&(t.Br=e,this.np.add(t))}aA(t){const e=t.findLinksConnected();for(;e.next();){const i=e.value;i.$i&&(i.Br=i.points.copy(),this.np.add(i))}}get isEnabled(){return this.Ye}set isEnabled(t){U.s(t,"boolean",AnimationManager,"isEnabled"),this.Ye=t,t&&this.ph.each(e=>{!e.isAnimating&&e.runCount===1/0&&e.start()})}get duration(){return this.Uo}set duration(t){U.s(t,"number",AnimationManager,"duration"),t<1&&U.$(t,">= 1",AnimationManager,"duration"),this.Uo=t}get isAnimating(){return this.Re}get isTicking(){return this.ep}get isInitial(){return this.Er}set isInitial(t){U.s(t,"boolean",AnimationManager,"isInitial"),this.Er=t}get defaultAnimation(){return this.Mn}get activeAnimations(){return this.ph}get initialAnimationStyle(){return this.tf}set initialAnimationStyle(t){this.tf=t}static rb=new GMap;static defineAnimationEffect(t,e){AnimationManager.rb.set(t,e)}static $M(t,e,i,s,n){t===null&&(t=[0,0,0,0]),e===null&&(e=[0,0,0,0]);let o=t[0],r=t[1];const l=t[2],a=t[3];let h=e[0],c=e[1];const f=e[2],u=e[3];l===0||l===100?(o=h,r=c):(f===0||f===100)&&(h=o,c=r),Math.abs(h-o)>180&&(h>o?o+=360:h+=360);const d=n(i,o,h-o,s)%360,m=n(i,r,c-r,s),g=n(i,l,f-l,s),p=n(i,a,u-a,s);return"hsla("+d+", "+m+"%, "+g+"%, "+p+")"}static Default=1;static AnimateLocations=2;static None=3}{const w=AnimationManager.rb,t=(e,i,s,n,o,r)=>{e.position=new Point(n(o,i.x,s.x-i.x,r),n(o,i.y,s.y-i.y,r))};w.set("position:diagram",t),w.set("position",t),w.set("position:part",(e,i,s,n,o,r)=>{o<r?e.$c(n(o,i.x,s.x-i.x,r),n(o,i.y,s.y-i.y,r),!1):e.position=new Point(n(o,i.x,s.x-i.x,r),n(o,i.y,s.y-i.y,r))}),w.set("location",(e,i,s,n,o,r)=>{o<r?e.$c(n(o,i.x,s.x-i.x,r),n(o,i.y,s.y-i.y,r),!0):e.location=new Point(n(o,i.x,s.x-i.x,r),n(o,i.y,s.y-i.y,r))}),w.set("position:placeholder",(e,i,s,n,o,r)=>{o<r?e.$c(n(o,i.x,s.x-i.x,r),n(o,i.y,s.y-i.y,r),!1):e.position=new Point(n(o,i.x,s.x-i.x,r),n(o,i.y,s.y-i.y,r))}),w.set("position:nodeCollapse",(e,i,s,n,o,r)=>{const l=e.actualBounds,a=s.actualBounds,h=a.x+a.width/2-l.width/2,c=a.y+a.height/2-l.height/2;o<r?e.$c(n(o,i.x,h-i.x,r),n(o,i.y,c-i.y,r),!1):e.position=new Point(n(o,i.x,h-i.x,r),n(o,i.y,c-i.y,r))}),w.set("desiredSize",(e,i,s,n,o,r)=>{e.desiredSize=new Size(n(o,i.width,s.width-i.width,r),n(o,i.height,s.height-i.height,r))}),w.set("width",(e,i,s,n,o,r)=>{e.width=n(o,i,s-i,r)}),w.set("height",(e,i,s,n,o,r)=>{e.height=n(o,i,s-i,r)}),w.set("fill",(e,i,s,n,o,r)=>{e.fill=AnimationManager.$M(i,s,o,r,n)}),w.set("stroke",(e,i,s,n,o,r)=>{e.stroke=AnimationManager.$M(i,s,o,r,n)}),w.set("strokeWidth",(e,i,s,n,o,r)=>{e.strokeWidth=n(o,i,s-i,r)}),w.set("strokeDashOffset",(e,i,s,n,o,r)=>{e.strokeDashOffset=n(o,i,s-i,r)}),w.set("background",(e,i,s,n,o,r)=>{e.background=AnimationManager.$M(i,s,o,r,n)}),w.set("opacity",(e,i,s,n,o,r)=>{e.opacity=n(o,i,s-i,r)}),w.set("scale",(e,i,s,n,o,r)=>{e.scale=n(o,i,s-i,r)}),w.set("angle",(e,i,s,n,o,r)=>{e.angle=n(o,i,s-i,r)})}class Animation{lb;op;Re;_u;Uo;Fs;fA;of;bi;ab;fe;no;td;rf;hb;cb;ef;ZM;fb;As;a;QM;_M;t2;constructor(t){this.a=null,this.As=null,this.ZM=null,this.fb=null,this.QM=!1,this.Re=!1,this.ef=!1,this.fe=0,this.no=0,this.lb=Animation.EaseInOutQuad,this.op=Animation.EaseInOutQuad,this.td=!1,this.rf=!1,this.hb=1,this.cb=0,this.Uo=NaN,this.Fs=NaN,this._M=0,this._u=null,this.fA=Point.wn,this.bi=new GMap,this.ab=new GMap,this.of=new GSet,this.t2=1,t&&Object.assign(this,t)}suspend(){this.ef=!0}advanceTo(t,e){e&&(this.ef=!1),this.td&&t>=this.Fs&&(this.rf=!0,t=t-this.Fs),this._M=t,this.rA(!0),this.As.$u(),this.a.Ar(),this.As.Zu(),this.a.redraw()}nb(t){if(this.ab.clear(),this.rf=!1,this.cb=0,this.Fs=NaN,this.of.count>0&&this.of.clear(),t!==null){const e=t.links;for(;e.next();)e.value.Br=null}}oO(){return this.bi.count>0}start(){if(this.bi.count===0)return this;if(this.Re)return this;let t=this.a;const e=this.bi.iterator;for(;e.next();){const s=e.key;t===null&&(s instanceof Diagram?t=s:s instanceof GraphObject&&(t=s.diagram))}if(t!==null)this.a=t,this.As=t.animationManager;else return this;const i=this.As;return i.isEnabled===!1?this:(this.Fs=isNaN(this.Uo)?i.duration:this.Uo,this.op=this.lb,i._c&&i.tf===1&&this===i.defaultAnimation&&(this.op=Animation.EaseOutExpo,this.Fs=isNaN(this.Uo)?i.duration===600?900:i.duration:this.Uo),this.t2=t.scrollMode,this.isViewportUnconstrained&&(t.yh=2),i.$u(),this.of.each(s=>{s.data=null,t.add(s)}),i.Zu(),this.Re=!0,this.fe=+new Date,this.no=this.fe+this.Fs,i.iO(this),this)}addTemporaryPart(t,e){return t.Oi()?(this.of.add(t),this.a=e,this):this}add(t,e,i,s,n){if(this.a===null&&(t instanceof Diagram?this.a=t:t instanceof GraphObject&&t.diagram!==null&&(this.a=t.diagram)),t instanceof Part){if(!t.isAnimated)return this;e==="position"&&(e="position:part")}return this.WM(t,e,i,s,n),this}WM(t,e,i,s,n){const o=this.bi;let r,l,a;if(t instanceof Diagram&&e==="position"&&(e="position:diagram"),(e==="fill"||e==="stroke"||e==="background")&&(Brush.Vo(i),Brush.e2(),i=[Brush.Ke.n0,Brush.Ke.n1,Brush.Ke.n2,Brush.Ke.n3],Brush.Vo(s),Brush.e2(),s=[Brush.Ke.n0,Brush.Ke.n1,Brush.Ke.n2,Brush.Ke.n3]),o.has(t))r=o.get(t),l=r.fe,a=r.Ds,l[e]===void 0&&(l[e]=this.ed(i)),a[e]=this.ed(s);else{if(e==="position"&&i.equalsApprox(s))return;l={},a={},l[e]=this.ed(i),a[e]=this.ed(s),r=new AnimationState(l,a,n),o.set(t,r)}const h=l[e];h instanceof Point&&!h.isReal()&&h.h(this.fA),n&&e.indexOf("position:")===0&&t instanceof Part?r.ub.location=this.ed(t.location):n&&(r.ub[e]=this.ed(i))}ed(t){return t instanceof Point||t instanceof Size?t.copy():t}rO(t){const e=this.bi;if(e.has(t)){const i=e.get(t);i.db=!0}}ob(t){if(!this.Re)return!1;const e=this.bi.get(t);return e!==null&&e.db}jM(t){if(!this.Re)return!1;const e=this.bi.get(t);return e!==null&&!!(e.fe.position||e.fe["position:part"]||e.fe.location)}sO(){if(this.of.count>0)return!0;const t=this.bi.iterator;for(;t.next();){const e=t.key;if(e instanceof GraphObject&&e.diagram!==null||e instanceof Diagram)return!0}return!1}rA(t){if(this.ef&&!t)return;const e=this.As;if(this.Re===!1)return;const i=+new Date;let s=i>this.no?this.Fs:i-this.fe;t&&(s=this._M,s<this.Fs?(this.fe=+new Date-s,this.no=this.fe+this.Fs):s=this.Fs),e.$u(),this.nA(s),this.a.Ar(!0),e.Zu(),i>this.no&&(this.td&&!this.rf?(this.fe=+new Date,this.no=this.fe+this.Fs,this.rf=!0):this.Qu(!1))}nA(t){const e=this.Fs,i=this.bi.iterator,s=this.rf;for(;i.next();){const n=i.key;if(n instanceof GraphObject&&n.diagram===null)continue;const o=i.value,r=s?o.Ds:o.fe,l=s?o.fe:o.Ds,a=AnimationManager.rb;for(const h in l)h==="position"&&(l["position:placeholder"]||l["position:nodeCollapse"])||a.get(h)!==null&&a.get(h)(n,r[h],l[h],this.op,t,e,this)}}stop(){return this.Re?(this.Qu(!0),this):this}Qu(t){if(this.fb!==null&&this.fb.lO(this.ZM),!this.Re)return;const e=this.a,i=this.As;i._c=!1,this.Re=!1,this.ef=!1,i.$u();const s=this.bi,n=this.of.iterator;for(;n.next();)e.remove(n.value);const o=this.td,r=s.iterator,l=AnimationManager.rb;for(;r.next();){const h=r.key,c=r.value,f=o?c.Ds:c.fe,u=o?c.fe:c.Ds,d=c.ub;for(const m in u)if(l.get(m)!==null){let g=m;c.gb&&(g==="position:nodeCollapse"||g==="position:placeholder")&&(g="position"),l.get(g)(h,f[m],d[m]!==void 0?d[m]:c.gb?f[m]:u[m],this.op,this.Fs,this.Fs,this)}c.gb&&d.location!==void 0&&h instanceof Part&&(h.location=d.location),c.db&&h instanceof Part&&h.He(!1)}this.cb++;const a=!t&&this.hb>this.cb;if(!a&&(this===i.ip||this===i.defaultAnimation)&&this.bi.clear(),e.pb.clear(),e.invalidateDocumentBounds(),e.N(),e.Ar(!0),i.defaultAnimation===this){const h=i.np.iterator;for(;h.next();)h.value.aO();i.np.clear()}if(e.Ar(!0),this.isViewportUnconstrained&&(e.scrollMode=this.t2),i.Zu(),a){this.rf=!1,this.start();return}this.nb(null),e.uA(),i.Qu(this),this._u&&this._u(this),e.requestUpdate()}sf(t,e){const i=e.actualBounds;let s=null;if(e instanceof Group&&(s=e.placeholder),s!==null&&s.visible){const n=s.getDocumentPoint(Spot.TopLeft),o=s.padding;n.x+=o.left,n.y+=o.top,this.add(t,"position",n,t.position,!1)}else this.add(t,"position",new Point(i.x+i.width/2,i.y+i.height/2),t.position,!1);this.add(t,"scale",.01,t.scale,!1),t instanceof Group&&this.hO(t,e)}hO(t,e){const i=t.memberParts;for(;i.next();){const s=i.value;s instanceof Node&&this.sf(s,e)}}nf(t,e){if(!t.isVisible())return;let i=null;if(e instanceof Group&&(i=e.placeholder),i!==null&&i.visible){const s=i.getDocumentPoint(Spot.TopLeft),n=i.padding;s.x+=n.left,s.y+=n.top,this.add(t,"position:placeholder",t.position,s,!0)}else this.add(t,"position:nodeCollapse",t.position,e,!0);this.add(t,"scale",t.scale,.01,!0),this.rO(t),t instanceof Group&&this.cO(t,e)}cO(t,e){const i=t.memberParts;for(;i.next();){const s=i.value;s instanceof Node&&this.nf(s,e)}}get duration(){return this.Uo}set duration(t){U.s(t,"number",Animation,"duration"),t<1&&U.$(t,">= 1",Animation,"duration"),this.Uo=t}get reversible(){return this.td}set reversible(t){this.td=t}get runCount(){return this.hb}set runCount(t){t>0?this.hb=t:U.n("Animation.runCount value must be a positive integer.")}get finished(){return this._u}set finished(t){this._u!==t&&(t!==null&&U.S(t,Animation,"finished"),this._u=t)}get easing(){return this.lb}set easing(t){this.lb=t}get isViewportUnconstrained(){return this.QM}set isViewportUnconstrained(t){this.QM=t}get isAnimating(){return this.Re}getTemporaryState(t){let e=this.ab.get(t);return e===null&&(e={},this.ab.set(t,e)),e}static EaseLinear=(t,e,i,s)=>i*t/s+e;static EaseInOutQuad=(t,e,i,s)=>(t/=s/2,t<1?i/2*t*t+e:-i/2*(--t*(t-2)-1)+e);static EaseInQuad=(t,e,i,s)=>i*(t/=s)*t+e;static EaseOutQuad=(t,e,i,s)=>-i*(t/=s)*(t-2)+e;static EaseInExpo=(t,e,i,s)=>t===0?e:i*Math.pow(2,10*(t/s-1))+e;static EaseOutExpo=(t,e,i,s)=>t===s?e+i:i*(-Math.pow(2,-10*t/s)+1)+e}class AnimationState{fe;Ds;ub;gb;db;constructor(t,e,i){this.fe=t,this.Ds=e,this.ub={},this.gb=i,this.db=!1}}var TriggerStart=(w=>(w[w.Default=1]="Default",w[w.Immediate=2]="Immediate",w[w.Bundled=3]="Bundled",w))(TriggerStart||{});class AnimationTrigger{Ri;kn;sd;lf;constructor(t,e,i){this.Ri=null,this.kn=t,this.sd=i||1,this.lf=null,e!==void 0&&(this.lf=e,i===void 0&&(this.sd=2))}copy(){const t=new AnimationTrigger(this.kn);t.sd=this.sd;const e=this.lf;if(e!==null){const i={};e.duration!==void 0&&(i.duration=e.duration),e.finished!==void 0&&(i.finished=e.finished),e.easing!==void 0&&(i.easing=e.easing),t.lf=i}return t}get propertyName(){return this.kn}set propertyName(t){this.kn=t}get animationSettings(){return this.lf}set animationSettings(t){this.lf=t}fO(t){const e=this.lf;e!==null&&(e.duration&&(t.duration=e.duration),e.finished&&(t.finished=e.finished),e.easing&&(t.easing=e.easing))}get startCondition(){return this.sd}set startCondition(t){this.sd=t}static Default=1;static Immediate=2;static Bundled=3}class Layer{a;St;ie;Vr;ta;ea;ia;sa;na;oa;ra;la;aa;ha;ca;fa;Zc;ua;yb;rp;nd;Vt;zr;i2;s2;af;wb;constructor(t){GSet._e(this),this.a=null,this.Vt=new List,this.af=new Set,this.wb=[],this.zr=new Quadtree(-1e3,-1e3,2e3,2e3,1/0),this.i2=!1,this.s2=[],this.St="",this.ie=1,this.Vr=!1,this.ta=!0,this.ea=!0,this.ia=!0,this.sa=!0,this.na=!0,this.oa=!0,this.ra=!0,this.la=!0,this.aa=!0,this.ha=!0,this.ca=!0,this.fa=!0,this.Zc=!0,this.ua=!0,this.yb=!0,this.rp=!1,this.nd=[],t&&Object.assign(this,t)}uO(){const t=this.Vt.r;for(let e=0;e<t.length;e++)t[e].o2(null),t[e].Xr=-1;this.Vt.clear(),this.nd.length=0,this.zr.clear(),this.s2.length=0}Bo(t){this.a=t}toString(t){t===void 0&&(t=0);const e='Layer "'+this.name+'"';if(t<=0)return e;let i=0,s=0,n=0,o=0,r=0;const l=this.Vt.iterator;for(;l.next();){const h=l.value;h instanceof Group?n++:h instanceof Node?s++:h instanceof Link?o++:h instanceof Adornment?r++:i++}let a="";if(i>0&&(a+=i+" Parts "),s>0&&(a+=s+" Nodes "),n>0&&(a+=n+" Groups "),o>0&&(a+=o+" Links "),r>0&&(a+=r+" Adornments "),t>1){const h=this.Vt.iterator;for(;h.next();){const c=h.value;a+=`
    `+c.toString();const f=c.data;f!==null&&GSet.ks(f)&&(a+=" #"+GSet.ks(f)),c instanceof Node?a+=" "+U.toString(f):c instanceof Link&&(a+=" "+U.toString(c.fromNode)+" "+U.toString(c.toNode))}}return e+" "+this.Vt.count+": "+a}lp(t,e,i,s){const n=this.s2;return n.length=0,this.zr.findInArray(t,e,i,s,n),n.sort((o,r)=>o.Xr-r.Xr)}findObjectAt(t,e,i){if(e===void 0&&(e=null),i===void 0&&(i=null),this.ua===!1||this.Vt.length===0)return null;const s=this.lp(t.x,t.y,0,0),n=Point.l(),o=s.length;for(let r=o;r--;){const l=s[r];if(!l.isVisible())continue;n.h(t),n.Ai(l._s);let a=l.dA(n,e,i);if(a!==null&&(e!==null&&(a=e(a)),a!==null&&(i===null||i(a))))return Point.i(n),a}return Point.i(n),null}findObjectsAt(t,e,i,s){if(e===void 0&&(e=null),i===void 0&&(i=null),!(s instanceof List)&&!(s instanceof GSet)&&(s=new GSet),this.ua===!1)return s;const n=Point.l(),o=this.lp(t.x,t.y,0,0),r=o.length;for(let l=r;l--;){const a=o[l];if(!a.isVisible())continue;n.h(t),n.Ai(a._s);let h=a;a.gA(n,e,i,s)&&(e!==null&&(h=e(h)),h!==null&&(i===null||i(h))&&s.add(h))}return Point.i(n),s}findObjectsIn(t,e,i,s,n){if(e===void 0&&(e=null),i===void 0&&(i=null),s===void 0&&(s=!1),!(n instanceof List)&&!(n instanceof GSet)&&(n=new GSet),this.ua===!1)return n;let o=!1;this.diagram!==null&&this.diagram.viewportBounds.containsRect(t)&&(o=!0);const r=this.lp(t.x,t.y,t.width,t.height),l=r.length;for(let a=l;a--;){const h=r[a];if(o===!0&&h.Wc()===!1||!h.isVisible())continue;let c=h;h.ap(t,e,i,s,n)&&(e!==null&&(c=e(c)),c!==null&&(i===null||i(c))&&n.add(c))}return n}IS(t,e,i,s,n,o,r){if(this.ua===!1)return n;const l=this.lp(t.x,t.y,t.width,t.height),a=l.length;for(let h=a;h--;){const c=l[h];if(r===!0&&c.Wc()===!1||!o(c)||!c.isVisible())continue;let f=c;c.ap(t,e,i,s,n)&&(e!==null&&(f=e(f)),f!==null&&(i===null||i(f))&&n.add(f))}return n}findObjectsNear(t,e,i,s,n,o){if(i===void 0&&(i=null),s===void 0&&(s=null),n===void 0&&(n=!0),n!==!1&&n!==!0&&((n instanceof List||n instanceof GSet)&&(o=n),n=!0),!(o instanceof List)&&!(o instanceof GSet)&&(o=new GSet),this.ua===!1)return o;let r=!1;this.diagram!==null&&this.diagram.viewportBounds.containsPoint(t)&&(r=!0);const l=Point.l(),a=Point.l(),h=this.lp(t.x,t.y,0,0),c=h.length;for(let f=c;f--;){const u=h[f];if(r===!0&&u.Wc()===!1||!u.isVisible())continue;l.h(t),l.Ai(u._s),a.e(t.x+e,t.y),a.Ai(u._s);let d=u;u.mA(l,a,i,s,n,o)&&(i!==null&&(d=i(d)),d!==null&&(s===null||s(d))&&o.add(d))}return Point.i(l),Point.i(a),o}l2(){return this.Vt.r}Cn(t,e){if(!this.visible)return;const i=this.Vt.r,s=i.length;if(s===0){this.wb.length=0;return}const n=U.ot(),o=U.ot();for(let h=0;h<s;h++)i[h].Xr=h;this.af.clear();const r=this.zr.findIn(e.x,e.y,e.width,e.height,this.af),l=this.wb;l.length=0;for(const h of r){const c=h.actualBounds;h.isVisible()&&c.fL(e,10)&&(l.push(h),n.push(h))}l.sort((h,c)=>h.Xr-c.Xr);const a=this.af;for(const h of a)!r.has(h)&&h.adornments!==null&&h.adornments.count>0&&o.push(h);for(let h=0;h<n.length;h++){const c=n[h];c.a2();const f=c.adornments;for(;f.next();){const u=f.value;u.ct(1/0,1/0),u.zt(),r.add(u)}}for(let h=0;h<o.length;h++)o[h].a2();U._(n),U._(o)}h2(t){this.zr.bounds.containsRect(t)||this.zr.resize(t)}od(t){let e=1;return this.ie!==1&&(e=t.globalAlpha,t.globalAlpha=e*this.ie),e}pA(t,e){for(let i=0;i<e;i++)t[i].hf()}qe(t,e,i){if(!this.visible||this.ie===0||(i===void 0&&(i=!0),!i&&this.isTemporary))return;const s=this.wb,n=s.length;if(n===0)return;t.Vr&&this.pA(s,n);const o=this.od(t),r=this.nd;r.length=0;const l=e.scale,a=Rect.l();for(let h=0;h<n;h++){const c=s[h];this.hp(t,c,e,r,l,a,!0)}Rect.i(a),t.Vr&&this.pA(s,n),t.globalAlpha=o}lB(t,e,i){if(!this.visible||this.ie===0)return;const s=this.Vt.r,n=s.length;if(n===0)return;const o=this.od(t),r=this.nd;r.length=0;const l=e.scale,a=Rect.l();for(let h=0;h<n;h++){const c=s[h];i.has(c)||this.hp(t,c,e,r,l,a,!0)}Rect.i(a),t.globalAlpha=o}dO(t,e,i,s){if(!this.visible||this.ie===0||!s&&this.isTemporary)return;const n=this.Vt.r,o=n.length;if(o===0)return;const r=this.od(t),l=this.nd;l.length=0;const a=e.scale,h=Rect.l();for(let c=0;c<o;c++){const f=n[c];i.has(f)&&this.hp(t,f,e,l,a,h,!1)}Rect.i(h),t.globalAlpha=r}gO(t,e,i,s,n){if(!this.visible||this.opacity===0)return;const o=this.diagram.grid.part;if(!s&&this.isTemporary){if(n&&o.layer===this){const r=this.od(t);o.qe(t,i),t.globalAlpha=r}}else{const r=this.od(t),l=i.scale,a=Rect.l(),h=this.Vt.r,c=h.length;for(let f=0;f<c;f++){const u=h[f];!n&&u===o||this.hp(t,u,i,null,l,a,!1)}Rect.i(a),t.globalAlpha=r}}aB(t,e,i){if(!this.visible||this.ie===0)return;const s=this.od(t),n=this.nd;n.length=0;const o=e.scale,r=Rect.l(),l=this.Vt.r,a=l.length,h=i.length;for(let c=0;c<a;c++){const f=l[c],u=f.wh(f.actualBounds);this.mO(u,i,h,o)&&this.hp(t,f,e,n,o,r,!0)}Rect.i(r),t.globalAlpha=s}hp(t,e,i,s,n,o,r){if(r&&!e.Wc()){t.removePartFromView(e);return}if(s!==null&&e instanceof Link&&(e.isOrthogonal&&s.push(e),e.$i===!1)){t.removePartFromView(e);return}let l=!1,a=e.containingGroup;for(;a!==null;)l?a.ue!==null&&o.intersectRect(a.ue):a.ue!==null&&(l=!0,o.h(a.ue)),a=a.containingGroup;const h=e.actualBounds;let c=!1;if(l&&e.isVisible()){if(!o.intersectsRect(h)){t.removePartFromView(e);return}c=!o.containsRect(h)}c&&(t.save(),t instanceof SVGContext?t.partClipRect=o.copy():(t.beginPath(),t.rect(o.x,o.y,o.width,o.height),t.clip())),h.width*n>i.cp||h.height*n>i.cp?e.qe(t,i):this.pO(t,e,i),c&&(t.restore(),t.clearContextCache(!0))}pO(t,e,i){if(t instanceof SVGContext){e.qe(t,i);return}const s=e.actualBounds,n=e.naturalBounds;if(s.width===0||s.height===0||isNaN(s.x)||isNaN(s.y)||!e.isVisible())return;const o=e.T;if(e.background===null){e.Nn(t,"rgba(0,0,0,0.3)",!0,!1,n,s),t.fillRect(s.x,s.y,s.width,s.height);return}if(t.transform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),e.Nn(t,e.background,!0,!1,n,s),t.fillRect(0,0,n.width/2,n.height/2),!o.KP()){const r=1/(o.m11*o.m22-o.m12*o.m21);t.transform(o.m22*r,-o.m12*r,-o.m21*r,o.m11*r,r*(o.m21*o.dy-o.m22*o.dx),r*(o.m12*o.dx-o.m11*o.dy))}}mO(t,e,i,s){const n=2/s,o=4/s;for(let r=0;r<i;r++){const l=e[r];if(!(l.width===0||l.height===0)&&t.intersects(l.x-n,l.y-n,l.width+o,l.height+o))return!0}return!1}t(t,e,i,s,n){const o=this.diagram;o!==null&&o.raiseChangedEvent(2,t,this,e,i,s,n)}xh(t,e,i){const s=this.Vt;if(e.o2(this),t>=s.count)t=s.count;else if(s.elt(t)===e)return-1;s.insertAt(t,e),e.Xr=t,e.fp(i),e.actualBounds.isReal()&&this.zr.set(e,e.actualBounds.copy());const n=this.diagram;return n!==null&&(i?n.N():n.xh(e)),this.xb(t,e),t}hi(t,e,i){if(!i&&e.layer!==this&&e.layer!==null)return e.layer.hi(t,e,i);const s=this.Vt;if(t<0||t>=s.length){if(t=s.indexOf(e),t<0)return-1}else if(s.elt(t)!==e&&(t=s.indexOf(e),t<0))return-1;e.dp(i),s.removeAt(t),e.Xr=-1,this.zr.delete(e,!0),this.i2=!0;const n=this.diagram;return n!==null&&(i?n.N():n.hi(e)),e.o2(null),t}xb(t,e){t=this.yO(t,e),e instanceof Group&&this.wO(t,e),e.svg!==null&&e.svg.remove()}yO(t,e){const i=e.zOrder;if(isNaN(i))return t;const s=this.Vt,n=s.count;if(n<=1)return t;if(t<0&&(t=s.indexOf(e)),t<0)return-1;let o=t-1,r=NaN;for(;o>=0&&(r=s.elt(o).zOrder,!!isNaN(r));)o--;let l=t+1,a=NaN;for(;l<n&&(a=s.elt(l).zOrder,!!isNaN(a));)l++;if(!isNaN(r)&&r>i)for(;;){if(o===-1||r<=i)return o++,o===t?t:(s.removeAt(t),s.insertAt(o,e),o);for(r=NaN;--o>=0&&(r=s.elt(o).zOrder,!!isNaN(r)););}else if(!isNaN(a)&&a<i)for(;;){if(l===n||a>=i)return l--,l===t?t:(s.removeAt(t),s.insertAt(l,e),l);for(a=NaN;++l<n&&(a=s.elt(l).zOrder,!!isNaN(a)););}return t}wO(t,e){if(e===null||!isNaN(e.zOrder))return;this.xO(t,e);const i=e.containingGroup;i!==null&&this.xb(-1,i)}xO(t,e){if(e.memberParts.count===0)return;let i=-1;const s=this.Vt.r,n=s.length;for(let o=0;o<n;o++){const r=s[o];if(r===e&&(t=o,i>=0)||i<0&&r.containingGroup===e&&(i=o,t>=0))break}if(!(i<0)&&i<t){const o=this.Vt;o.removeAt(t),o.insertAt(i,e);for(let r=i;r<=t;r++)s[r].Xr=r}}get parts(){return this.Vt.iterator}get partsBackwards(){return this.Vt.iteratorBackwards}get diagram(){return this.a}get name(){return this.St}set name(t){U.s(t,"string",Layer,"name");const e=this.St;if(e!==t){const i=this.diagram;if(i!==null){e===""&&U.n("Cannot rename default Layer to: "+t);const n=i.layers;for(;n.next();)n.value.name===t&&U.n("Layer.name is already present in this diagram: "+t)}this.St=t,this.t("name",e,t);const s=this.Vt.iterator;for(;s.next();){const n=s.value;n.layerName=this.St}}}get opacity(){return this.ie}set opacity(t){const e=this.ie;if(e!==t){U.s(t,"number",Layer,"opacity"),(t<0||t>1)&&U.$(t,"0 <= value <= 1",Layer,"opacity"),this.ie=t;const i=this.diagram;i!==null&&i.N(),this.t("opacity",e,t)}}get isViewportAligned(){return this.rp}set isViewportAligned(t){const e=this.rp;e!==t&&(this.rp=t,this.diagram&&(this.yA(),this.diagram.N()),this.t("isViewportAligned",e,t),t&&(this.isInDocumentBounds=!1))}yA(){if(!this.rp)return;const t=this.diagram;if(t===null)return;const e=this.Vt.r,i=e.length,s=t.bt,n=t.kt;for(let o=0;o<i;o++){const r=e[o],l=r.naturalBounds.width,a=r.naturalBounds.height;let h=r.alignment;(h.isDefault()||!h.isSpot())&&(h=Spot.BottomRight);let c=r.alignmentFocus;c.isDefault()&&(c=new Spot(h.x,h.y));const f=h.x*s+h.offsetX-(c.x*l+c.offsetX),u=h.y*n+h.offsetY-(c.y*a+c.offsetY),d=Point.O(f,u);t.bO(d),r.$c(d.x,d.y,!0),Point.i(d),r.it=1/t.scale}}get isTemporary(){return this.Vr}set isTemporary(t){const e=this.Vr;e!==t&&(U.s(t,"boolean",Layer,"isTemporary"),this.Vr=t,this.t("isTemporary",e,t))}get visible(){return this.Zc}set visible(t){const e=this.Zc;if(e!==t){U.s(t,"boolean",Layer,"visible"),this.Zc=t;const i=this.Vt.iterator;for(;i.next();)i.value.He(t);const s=this.diagram;s!==null&&s.N(),this.t("visible",e,t)}}get pickable(){return this.ua}set pickable(t){const e=this.ua;e!==t&&(U.s(t,"boolean",Layer,"pickable"),this.ua=t,this.t("pickable",e,t))}get isInDocumentBounds(){return this.yb}set isInDocumentBounds(t){const e=this.yb;e!==t&&(this.yb=t,this.diagram!==null&&this.diagram.invalidateDocumentBounds(),this.t("isInDocumentBounds",e,t))}get allowCopy(){return this.ta}set allowCopy(t){const e=this.ta;e!==t&&(U.s(t,"boolean",Layer,"allowCopy"),this.ta=t,this.t("allowCopy",e,t))}get allowDelete(){return this.ea}set allowDelete(t){const e=this.ea;e!==t&&(U.s(t,"boolean",Layer,"allowDelete"),this.ea=t,this.t("allowDelete",e,t))}get allowTextEdit(){return this.ia}set allowTextEdit(t){const e=this.ia;e!==t&&(U.s(t,"boolean",Layer,"allowTextEdit"),this.ia=t,this.t("allowTextEdit",e,t))}get allowGroup(){return this.sa}set allowGroup(t){const e=this.sa;e!==t&&(U.s(t,"boolean",Layer,"allowGroup"),this.sa=t,this.t("allowGroup",e,t))}get allowUngroup(){return this.na}set allowUngroup(t){const e=this.na;e!==t&&(U.s(t,"boolean",Layer,"allowUngroup"),this.na=t,this.t("allowUngroup",e,t))}get allowLink(){return this.oa}set allowLink(t){const e=this.oa;e!==t&&(U.s(t,"boolean",Layer,"allowLink"),this.oa=t,this.t("allowLink",e,t))}get allowRelink(){return this.ra}set allowRelink(t){const e=this.ra;e!==t&&(U.s(t,"boolean",Layer,"allowRelink"),this.ra=t,this.t("allowRelink",e,t))}get allowMove(){return this.la}set allowMove(t){const e=this.la;e!==t&&(U.s(t,"boolean",Layer,"allowMove"),this.la=t,this.t("allowMove",e,t))}get allowReshape(){return this.aa}set allowReshape(t){const e=this.aa;e!==t&&(U.s(t,"boolean",Layer,"allowReshape"),this.aa=t,this.t("allowReshape",e,t))}get allowResize(){return this.ha}set allowResize(t){const e=this.ha;e!==t&&(U.s(t,"boolean",Layer,"allowResize"),this.ha=t,this.t("allowResize",e,t))}get allowRotate(){return this.ca}set allowRotate(t){const e=this.ca;e!==t&&(U.s(t,"boolean",Layer,"allowRotate"),this.ca=t,this.t("allowRotate",e,t))}get allowSelect(){return this.fa}set allowSelect(t){const e=this.fa;e!==t&&(U.s(t,"boolean",Layer,"allowSelect"),this.fa=t,this.t("allowSelect",e,t))}}var AutoScale=(w=>(w[w.None=1]="None",w[w.Uniform=2]="Uniform",w[w.UniformToFill=3]="UniformToFill",w))(AutoScale||{}),CycleMode=(w=>(w[w.All=1]="All",w[w.NotDirected=2]="NotDirected",w[w.NotDirectedFast=3]="NotDirectedFast",w[w.NotUndirected=4]="NotUndirected",w[w.DestinationTree=5]="DestinationTree",w[w.SourceTree=6]="SourceTree",w))(CycleMode||{}),ScrollMode=(w=>(w[w.Document=1]="Document",w[w.Infinite=2]="Infinite",w))(ScrollMode||{}),CollapsePolicy=(w=>(w[w.TreeParent=1]="TreeParent",w[w.AllParents=2]="AllParents",w[w.AnyParents=3]="AnyParents",w))(CollapsePolicy||{});class Diagram{As;Zt;c2;bb;Gr;rd;kb;Pb;Sb;Mb;Cb;Nb;bh;yh;Tb;Lb;Ab;da;cf;Yr;gp;Db;Fb;ld;Tn;Kr;kh;zo;mp;ff;pp;uf;ad;Hr;oo;f2;u2;vb;Rb;d2;Ob;g2;m2;p2;Ib;yp;qr;jr;Wr;Jr;$r;Zr;Eb;Qr;Ub;_r;tl;el;il;Bb;w2;Xo;b2;Vb;zb;k2;Fe;P2;df;S2;Ns;Go;Ye;Xb;ta;ea;Gb;Yb;ia;sa;na;Kb;oa;ra;la;aa;ha;ca;fa;Hb;qb;M2;hd;cd;jb;Wb;Jb;$b;wp;Zb;Qb;_b;se;wA;t1;xA;fd;Ln;ro;ci;lo;bA;ga;C2;N2;xp;e1;ud;bp;i1;sl;ma;Ph;T2;L2;kp;s1;o1;cs;gf;Pp;dd;Yo;mf;Sp;nl;Sh;A2;Mp;Wt;T;Zi;Ur;je;vs;D2;pa;ol;Hl;rl;Mh;gd;F2;md;Ch;pd;At;ya;ft;it;yd;bt;kt;st;pf;Rx;l1;Nh;wd;a1;h1;Cp;We;cp;Np;v2;R2;kA;Tp;c1;Th;wa;Lh;Ah;Dh;Fh;f1;mh;Qt;Ct;yf;nS;oS;Yc;ie;static u1=null;static PA=new GMap;static O2;static I2=null;Hu;d1;g1;xd;m1;p1;Lp;Ap;sb;E2;U2;wf;Dp;Fp;constructor(t,e){if(Diagram.ix||(Diagram.HP(),Diagram.ix=!0),GSet._e(this),Diagram.SA(this),this.Wt=!0,this.Ct=null,this.bt=0,this.kt=0,this.st=null,Diagram.isUsingDOM()){const s=this,n=()=>{s.ve(root.document,"DOMContentLoaded",n,!1),s.setRTL()};root.document.body!==null?this.setRTL():s.Bt(root.document,"DOMContentLoaded",n,!1)}this.pf=null,Diagram.B2("Model",PartManager);const i=this;return this.P2=s=>i.partManager.doModelDataChanged(s),this.df=s=>i.partManager.doModelChanged(s),this.a1=null,this.h1=null,this.MA(),this.model=Model.V2(),this.themeManager=new ThemeManager,this.Xo=!0,this.CA(),this.layout=new Layout,this.Xo=!1,this.c1=null,this.Th=null,this.wa=null,this.Lh=null,this.Ah=null,this.Dh=null,this.Fh=null,this.f1=()=>{},this.mh=null,this.dd=!1,this.yf=new DiagramHelper(this),t!==void 0&&(typeof t=="string"||root.Element&&t instanceof Element?this.z2(t):e=t),e&&this.setProperties(e),this.Wt=!1,this.requestUpdate(),this}VR(){return this.st!==null}get renderer(){return this.mf}set renderer(t){if(this instanceof Overview)return;t===""&&(t="default");const e=t.toLowerCase(),i=this.mf;if(e===i)return;this.mf=e;let s=null;if(e==="default"||e==="canvas"){s=this.Yo.get("svg"),s!==null&&s.gt.remove(),this.st&&(this.Qt=this.st.de,this.Qt.clearContextCache(!0));const n=this.At.length;for(let o=0;o<n;o++)this.At.r[o].parts.each(l=>{l.svg!==null&&l.svg.parentNode!==null&&l.svg.remove()})}else e==="svg"?(this.Yo.has("svg")?s=this.Yo.get("svg"):(s=new SVGSurface(this,root.document),this.addRenderer("svg",s)),this.div!==null&&(s.gt.role="img",this.div.appendChild(s.gt)),this.st&&(this.Qt=s.de,this.st.de.setTransform(this.We,0,0,this.We,0,0),this.st.de.clearRect(0,0,this.bt,this.kt))):e==="debug"&&(this.Yo.has("SVG")||(s=new SVGSurface(this,root.document),this.addRenderer("SVG",s),s.gt.style.backgroundColor="whitesmoke",this.div!==null&&this.div.after(s.gt)));this.Wt||this.redraw()}MA(){if(this.wf=new List,this.setupRouters(),this.As=new AnimationManager,this.As.Bo(this),this.Zt=17,this.c2=!1,this.yd=!1,this.bb="default",this.At=new List,this.Yo){const t=this.Yo.get("svg");t!==null&&t.gt.remove(),this.st&&(this.Qt=this.st.de,this.Qt.clearContextCache(!0))}this.Yo=new GMap,this.mf="default",this.resetRenderingHints(),this.kO(),this.ie=1,this.ft=new Point(NaN,NaN).b(),this.sb=new Point(NaN,NaN),this.it=1,this.Mp=1,this.kb=new Point(NaN,NaN).b(),this.Pb=NaN,this.Sb=1e-4,this.Mb=100,this.T=new Transform,this.Cb=new Point(NaN,NaN).b(),this.Nb=new Rect(NaN,NaN,NaN,NaN).b(),this.bh=new Margin(0,0,0,0).Pt(),this.yh=1,this.Tb=!1,this.Lb=null,this.Ab=null,this.da=1,this.cf=Spot.Default,this.Yr=1,this.gp=Spot.Default,this.Db=Spot.None,this.Fb=Spot.None,this.Zi=!0,this.ld=!1,this.Tn=new Set,this.Kr=new GSet,this.kh=new GSet,this.zo=!1,this.ya=new GMap,this.md=!0,this.mp=250,this.ff=-1,this.pp=new Margin(16,16,16,16).Pt(),this.Ur=!1,this.uf=!1,this.ad=!0,this.Sp=new InputEvent,this.Sp.diagram=this,this.nl=new InputEvent,this.nl.diagram=this,this.Sh=new InputEvent,this.Sh.diagram=this,this.Hr=null,this.oo=null,this.Rx=!1,this.PO(),this.rl=new GSet,this.vb=!0,this.Rb=1,this.d2=!1,this.Ob=1,this.Ib="auto",this.yp="auto",this.qr=null,this.jr=null,this.Wr=null,this.Jr=null,this.$r=null,this.Zr=null,this.Eb=null,this.Qr=null,this.Ub=!1,this._r=null,this.tl=null,this.el=null,this.il=null,this.Bb=!1,this.l1={},this.Nh=[null,null],this.Xo=!1,this.b2=!1,this.Vb=!1,this.zb=!1,this.k2=!0,this.vs=!1,this.Ch=!1,this.S2=!0,this.Ns=-2,this.pa=new GMap,this.pd=new List,this.Go=!1,this.Ye=!0,this.Xb=!0,this.ta=!0,this.ea=!0,this.Gb=!1,this.Yb=!0,this.ia=!0,this.sa=!0,this.na=!0,this.Kb=!0,this.oa=!0,this.ra=!0,this.la=!0,this.aa=!0,this.ha=!0,this.ca=!0,this.fa=!0,this.Hb=!0,this.qb=!0,this.M2=!1,this.wd=!1,this.hd=!0,this.cd=!0,this.jb=!0,this.Wb=!0,this.Jb=16,this.$b=16,this.wp=!1,this.Zb=!1,this.Qb=0,this._b=0,this.se=new Margin(5).Pt(),this.wA=new GSet().b(),this.t1=999999999,this.xA=new GSet().b(),this.Mh=!0,this.fd=!0,this.gd=!0,this.Ln=!1,this.ro=!1,this.ol=!0,this.Hl=!1,this.lo=!1,this.bA=new GSet,this.F2=new GSet,this.ga=null,this.C2=new Size(Link.NA,Link.TA),this.N2=999,this.xp=!1,this.nS=1,this.oS=0,this.je={scale:1,position:new Point,bounds:new Rect,canvasSize:new Size,newCanvasSize:new Size,isScroll:!1},this.je.canvasSize=this.je.canvasSize,this.je.newCanvasSize=this.je.newCanvasSize,this.je.isScroll=!1,this.e1=new Rect(NaN,NaN,NaN,NaN).b(),this.ud=new Size(NaN,NaN).b(),this.bp=new Rect(NaN,NaN,NaN,NaN).b(),this.i1=!1,this.Dp=null,this.Fp=null,this.SO(),this.cs=null,this.gf=!1,this.Yc=null,this.partManager=new PartManager,this.toolManager=new ToolManager,this.toolManager.initializeStandardTools(),this.defaultTool=this.toolManager,this.currentTool=this.defaultTool,this.g1=null,this.xd=new DraggingOptions,this.m1=null,this.p1=null,this.d1=!1,this.Hu=!1,this.commandHandler=new CommandHandler,this.Lp=null,this.Ap=Point.xn,this.E2=!1,this.We=1,this.cp=1,this.Np=1,this.v2=0,this.R2=new Point,this.kA=500,this.Pp=new Point,this.Tp=!1}static LA=root.document!==void 0;static isUsingDOM(){return Diagram.LA}static setDocument(t){root.document=t}static useDOM(t){Diagram.LA=t?root.document!==void 0:!1}static Qi=new WeakMap;clear(){this.animationManager.stopAnimation(),this.model.clear(),Diagram.AA(),this.DA(!1),this.pd.clear(),this.FA(),this.ga=null,this.invalidateDocumentBounds(),this.ensureBounds(),this.N()}DA(t){this.animationManager.stopAnimation(!0),this.clearSelection(),this.clearHighlighteds();const e=this.skipsUndoManager,i=this.Fe!==null&&this.Fe!==void 0;i&&(this.skipsUndoManager=!0);let s=null;this.cs!==null&&(s=this.cs.part,s!==null&&this.remove(s));const n=[],o=this.At.length;if(t){for(let r=0;r<o;r++){const a=this.At.r[r].parts;for(;a.next();){const h=a.value;h!==s&&h.data===null&&n.push(h)}}for(let r=0;r<n.length;r++){const l=n[r];this.remove(l)}}for(let r=0;r<o;r++)this.At.r[r].uO();return this.partManager.clear(),this.Tn.clear(),this.Kr.clear(),this.kh.clear(),this.ya.clear(),this.rl.clear(),this.Yc=null,this.pd.clear(),this.FA(),U.BP=[],s!==null&&(this.add(s),this.partManager.parts.delete(s)),i&&(this.skipsUndoManager=e),n}static vp=null;static w1="";static AA(){Diagram.vp=null,Diagram.w1=""}static hB(){return null}reset(){this.clear(),this.Wt=!0,this.MA(),this.themeManager=new ThemeManager,this.xa(),this.Xo=!0,this.CA(),this.layout=new Layout,this.Xo=!1,this.model=Model.V2(),this.model.undoManager=new UndoManager,this.dd=!1,this.Wt=!1,this.N()}SO(){this.sl=new GMap,this.T2=new Node().add(new TextBlock({stroke:"black",font:"10pt sans-serif"}).bind("text","",U.toString).theme("stroke","text").theme("font","normal")),this.sl.set("",this.T2),this.sl.set("Comment",new Node().add(new TextBlock({stroke:"brown",font:"10pt sans-serif"}).bind("text","",U.toString).theme("stroke","comment").theme("font","normal"))),this.sl.set("LinkLabel",new Node({selectable:!1,avoidable:!1}).add(new Shape("Ellipse",{fill:"black",stroke:null,desiredSize:new Size(3,3).Pt()}).theme("fill","link"))),this.Ph=new GMap,this.D2=new Group(Panel.Vertical,{selectionObjectName:"GROUPPANEL"}).add(new TextBlock({stroke:"black",font:"bold 12pt sans-serif"}).bind("text","",U.toString).theme("stroke","text").theme("font","bold"),new Panel(Panel.Auto,{name:"GROUPPPANEL"}).add(new Shape({fill:"rgba(128,128,128,0.2)",stroke:"black",strokeWidth:1}).theme("fill","group").theme("stroke","outline").theme("strokeWidth","group"),new Placeholder({padding:5}).theme("padding","group"))),this.Ph.set("",this.D2),this.ma=new GMap,this.L2=new Link().add(new Shape({isPanelMain:!0,stroke:"black"}).theme("stroke","link"),new Shape({toArrow:"Standard",fill:"black",stroke:null,strokeWidth:0}).theme("toArrow").theme("fill","link")),this.ma.set("",this.L2),this.ma.set("Comment",new Link().add(new Shape({isPanelMain:!0,stroke:"brown"}).theme("stroke","comment"))),this.kp=new Adornment(Panel.Auto).add(new Shape({fill:null,stroke:"dodgerblue",strokeWidth:3}).theme("stroke","selection").theme("strokeWidth","selection"),new Placeholder({margin:1.5}).theme("margin","selection","numbers",null,t=>t?new Margin(t/2):1.5)).freezeBindings(),this.s1=this.kp,this.o1=new Adornment(Panel.Link).add(new Shape({isPanelMain:!0,fill:null,stroke:"dodgerblue",strokeWidth:3}).theme("stroke","selection").theme("strokeWidth","selection")).freezeBindings()}setRTL(t){let e=t===void 0?this.div:t;e===null&&(e=root.document.body);const i=U.Li("div");i.dir="rtl",i.style.cssText="font-size: 14px; width: 1px; height: 1px; position: absolute; top: -1000px; overflow: scroll;",i.textContent="A",e.appendChild(i);let s="reverse";i.scrollLeft>0?s="default":(i.scrollLeft=1,i.scrollLeft===0&&(s="negative")),e.removeChild(i),this.bb=s}setScrollWidth(t){let e=t===void 0?this.div:t;e===null&&(e=root.document.body);let i=0;if(Diagram.isUsingDOM()){let s=Diagram.I2,n=Diagram.O2;s===null&&(Diagram.I2=U.Li("p"),s=Diagram.I2,s.style.width="100%",s.style.height="200px",s.style.boxSizing="content-box",Diagram.O2=U.Li("div"),n=Diagram.O2,n.style.position="absolute",n.style.visibility="hidden",n.style.width="200px",n.style.height="150px",n.style.boxSizing="content-box",n.appendChild(s)),n.style.overflow="hidden",e.appendChild(n);const o=s.offsetWidth;n.style.overflow="scroll";let r=s.offsetWidth;o===r&&(r=n.clientWidth),e.removeChild(n),i=o-r,i===0&&!U.yr&&(i=11)}this.Zt=i,this.c2=!0}ge(t){t in AutoScale?this.autoScale=t:U.wr(this,t)}toString(t){t===void 0&&(t=0);let e="";this.div&&this.div.id&&(e=this.div.id);let i='Diagram "'+e+'"';if(t<=0)return i;const s=this.At.iterator;for(;s.next();){const n=s.value;i+=`
  `+n.toString(t-1)}return i}static SA(t){Diagram.u1=t}static qm(){return Diagram.u1}static fromDiv(t){let e=t;if(typeof t=="string"&&(e=root.document.getElementById(t)),e instanceof HTMLDivElement){const i=Diagram.Qi.get(e);if(i)return i}return null}get div(){return this.Ct}set div(t){if(t!==null&&U.le(t,HTMLDivElement,Diagram,"div"),this.Ct!==t){const e=this.Ct;if(e!==null){if(Diagram.Qi.delete(e),e.goDiagram=void 0,e.go=void 0,e.innerHTML="",this.st!==null){const s=this.st.gt;this.ve(s,"pointermove",this.Lh,!1),this.ve(s,"pointerdown",this.wa,!1),this.ve(s,"pointerup",this.Ah,!1),this.ve(s,"pointerout",this.Dh,!1),this.ve(s,"pointercancel",this.Fh,!1),this.st.dispose()}this.pf&&(this.pf.disconnect(),this.pf=null);const i=this.toolManager;i!==null&&(i.mouseDownTools.each(s=>s.cancelWaitAfter()),i.mouseMoveTools.each(s=>s.cancelWaitAfter()),i.mouseUpTools.each(s=>s.cancelWaitAfter())),i.cancelWaitAfter(),this.currentTool.doCancel(),this.st=null,this.ve(root,"resize",this.c1,!1),this.ve(root,"wheel",this.Th,!0),Diagram.qm()===this&&Diagram.SA(null)}else this.wa===null&&(this.lo=!1);if(this.Ct=null,t!==null){const i=Diagram.Qi.get(t);i&&(i.div=null),this.z2(t),this.f1(),this.themeManager&&this.themeManager.MO()}else this.themeManager&&this.themeManager.CO()}}setupRouters(){this.wf.push(new AvoidsNodesRouter)}z2(t){const e=this;if(!Diagram.isUsingDOM())return;t==null&&U.n("Diagram setup requires an argument DIV."),e.Ct!==null&&U.n("Diagram has already completed setup."),typeof t=="string"?e.Ct=root.document.getElementById(t):t instanceof HTMLDivElement?e.Ct=t:U.n("No DIV or DIV id supplied: "+t),e.Ct===null&&U.n("Invalid DIV id; could not get element with id: "+t);const i=Diagram.Qi.get(e.Ct);if(i&&i!==this&&U.n("Invalid div id; div already has a Diagram associated with it."),!e.pf&&root.ResizeObserver){const c=root.ResizeObserver,f=U.UP(()=>e.requestUpdate(),250,!1);e.pf=new c(()=>f()),e.pf.observe(e.Ct)}root.getComputedStyle(e.Ct,null).position==="static"&&(e.Ct.style.position="relative");let s=5;const n="rgba(2"+s+"5, 255, 255, 0)";s--,e.Ct.style["-webkit-tap-highlight-color"]=n,e.Ct.innerHTML="",Diagram.Qi.set(e.Ct,e),e.Ct.goDiagram=e,e.Ct.go=root.go;const o=new CanvasSurface(e);o.style!==void 0&&(o.style.position="absolute",o.style.top="0px",o.style.left="0px",root.getComputedStyle(e.Ct,null).getPropertyValue("direction")==="rtl"&&(e.yd=!0),o.style.zIndex="2",o.style.userSelect="none",o.style.MozUserSelect="none",o.style.touchAction="none",this.toolManager.gestureBehavior===3&&(o.style.touchAction="pinch-zoom"),o.style.letterSpacing="normal !important",o.style.wordSpacing="normal !important",o.style.lang="unknown"),o.gt.setAttribute("role","application"),e.st=o,e.Qt=o.de;const r=e.Qt;e.We=e.computePixelRatio(),e.viewSize.isReal()||(e.bt=e.Ct.clientWidth||1,e.kt=e.Ct.clientHeight||1),e.vA(e.bt,e.kt);const l=e;e.Ct.insertBefore(o.gt,e.Ct.firstChild);const a=new CanvasSurface(null);if(a.width=1,a.height=1,Diagram.isUsingDOM()){const c=U.Li("div"),f=U.Li("div");c.style.position="absolute",c.style.overflow="auto",c.style.width=e.bt+"px",c.style.height=e.kt+"px",c.style.zIndex="1",f.style.position="absolute",f.style.width="1px",f.style.height="1px",e.Ct.appendChild(c),c.appendChild(f),c.onscroll=Diagram.NO,c.addEventListener("pointerdown",Diagram.TO),c.a=e,c.LO=!0,c.AO=!0,e.a1=c,e.h1=f}e.f1=U.UP(()=>{e.N()},300,!1),e.c1=U.UP(()=>{e.HM()},250,!1),e.mh=c=>(c.preventDefault(),!1),e.Th=c=>{if(!l.isEnabled)return;const f=l.bd(c,!0);f.bubbles=!0;let u=0,d=0;f.delta=0,c.deltaX!==void 0?(c.deltaX!==0&&(u=c.deltaX>0?1:-1),c.deltaY!==0&&(d=c.deltaY>0?1:-1),f.delta=Math.abs(c.deltaX)>Math.abs(c.deltaY)?-u:-d):c.wheelDeltaX!==void 0?(c.wheelDeltaX!==0&&(u=c.wheelDeltaX>0?-1:1),c.wheelDeltaY!==0&&(d=c.wheelDeltaY>0?-1:1),f.delta=Math.abs(c.wheelDeltaX)>Math.abs(c.wheelDeltaY)?-u:-d):c.wheelDelta!==void 0&&c.wheelDelta!==0&&(f.delta=c.wheelDelta>0?1:-1),l.doMouseWheel(),l.vh(f,c)},e.wa=c=>{if(!l.isEnabled)return;e.wd=!0;const f=l.l1;f[c.pointerId]===void 0&&(f[c.pointerId]=c);const u=l.Nh;let d=!1;if(u[0]!==null&&(u[0].pointerId===c.pointerId||u[0].pointerType!==c.pointerType))u[0]=c;else if(u[1]!==null&&u[1].pointerId===c.pointerId)u[1]=c,d=!0;else if(u[0]===null)u[0]=c;else if(u[1]===null)u[1]=c,d=!0;else{c.preventDefault();return}const m=c.pointerType==="touch"||c.pointerType==="pen";m&&(l.Rx=!1,l.Tp=!0);const g=l.DO(c,c,d),p=l.R2,y=m?25:10;if(c.timeStamp-l.v2<l.kA&&!(Math.abs(p.x-c.screenX)>y||Math.abs(p.y-c.screenY)>y)?l.Np++:l.Np=1,g.clickCount=l.Np,l.v2=c.timeStamp,l.R2.setTo(c.screenX,c.screenY),l.doMouseDown(),c.button===1){c.preventDefault();return}l.vh(g,c)},e.Lh=c=>{if(!l.isEnabled)return;e.wd=!0;const f=l.Nh;if(f[0]!==null&&(f[0].pointerId===c.pointerId||f[0].pointerType!==c.pointerType))f[0]=c;else if(f[1]!==null&&f[1].pointerId===c.pointerId){f[1]=c;return}else if(f[0]===null)f[0]=c;else return;if(f[0].pointerId!==c.pointerId)return;const u=l.FO(c,c,f[1]!==null);l.doMouseMove(),l.vh(u,c)},e.Ah=c=>{if(!l.isEnabled)return;e.wd=!0;const f=c.pointerType==="touch"||c.pointerType==="pen",u=l.l1;if(f&&l.Rx){delete u[c.pointerId],c.preventDefault();return}const d=l.Nh;if(d[0]!==null&&(d[0].pointerId===c.pointerId||d[0].pointerType!==c.pointerType))d[0]=null;else if(d[1]!==null&&d[1].pointerId===c.pointerId){d[1]=null;return}else return;const m=l.X2(c,!1,!0,!1,!0,!1);let g=root.document.elementFromPoint(c.clientX,c.clientY)||null;g!==null&&g.shadowRoot&&(g=g.shadowRoot.elementFromPoint(c.clientX,c.clientY)||null),g!==null&&g.a instanceof Diagram&&g.a!==l&&g.a.Rp(c,m),g===null&&(g=c.target),l.Rp(c,m),m.clickCount=l.Np,m.targetDiagram=l.b1(c,g),m.targetObject=null,l.doMouseUp(),l.vh(m,c),f&&(l.Tp=!1)},e.Dh=c=>{if(!l.isEnabled)return;e.wd=!1;const f=l.l1;f[c.pointerId]&&delete f[c.pointerId];const u=l.Nh;if(u[0]!==null&&u[0].pointerId===c.pointerId&&(u[0]=null),u[1]!==null&&u[1].pointerId===c.pointerId&&(u[1]=null),c.pointerType==="touch"||c.pointerType==="pen")return;const d=l.currentTool;d.cancelWaitAfter(),d.standardMouseOver()},e.Fh=c=>{const f=l.Nh;f[0]!==null&&f[0].pointerId===c.pointerId?(f[0]=null,l.Tp=!1):f[1]!==null&&f[1].pointerId===c.pointerId&&(f[1]=null)};const h=r;if(e.Cp=h.v[U.we("7eba17a4ca3b1a8346")][U.we("78a118b7")](h.v,Diagram.Rh,s,s),r.clearContextCache(!0),e.vO(),this.mf==="svg"){const c=this.Yo.get("svg");this.Ct&&this.Ct.appendChild(c.gt),this.Qt=c.de}}addEventListener(t,e,i,s){t.addEventListener(e,i,{capture:s,passive:!1})}Bt(t,e,i,s){t.addEventListener(e,i,{capture:s,passive:!1})}removeEventListener(t,e,i,s){t.removeEventListener(e,i,{capture:s})}ve(t,e,i,s){t.removeEventListener(e,i,{capture:s})}vO(){const t=this;let e=this.st.gt;e instanceof HTMLCanvasElement||(e=t.div),this.Bt(e,"pointerdown",t.wa,!1),this.Bt(e,"pointermove",t.Lh,!1),this.Bt(e,"pointerup",t.Ah,!1),this.Bt(e,"pointerout",t.Dh,!1),this.Bt(e,"pointercancel",t.Fh,!1),this.Bt(e,"pointerenter",t.RO,!1),this.Bt(e,"pointerleave",t.OO,!1),this.Bt(e,"wheel",t.Th,!1),this.Bt(e,"keydown",t.IO,!1),this.Bt(e,"keyup",t.EO,!1),this.Bt(e,"blur",t.UO,!1),this.Bt(e,"focus",t.BO,!1),this.Bt(e,"selectstart",i=>(i.preventDefault(),!1),!1),this.Bt(e,"contextmenu",i=>(i.preventDefault(),!1),!1),this.Bt(root,"resize",t.c1,!1)}computePixelRatio(){return root.devicePixelRatio||1}doMouseDown(){this.currentTool.doMouseDown()}doMouseMove(){this.currentTool.doMouseMove()}doMouseUp(){this.currentTool.doMouseUp()}doMouseWheel(){this.currentTool.doMouseWheel()}doKeyDown(){const t=this.commandHandler;if(!this.toggleKeyboardControl()){if((t.isFocusEnabled||t.isVirtualPointerEnabled)&&t.doVirtualFocusKeyDown()){const e=this.lastInput;e.bubbles=!1;const i=e.event;i&&(i.stopPropagation&&i.stopPropagation(),i.cancelable!==!1&&i.preventDefault());return}this.currentTool.doKeyDown()}}toggleKeyboardControl(){const t=this.lastInput,e=t.commandKey;if((t.control||t.meta)&&t.alt&&(e==="Enter"||e==="NumpadEnter")){const i=this.commandHandler,s=i.isFocusEnabled||i.isVirtualPointerEnabled;return i.isFocusEnabled=!s,i.isVirtualPointerEnabled=!s,i.focus=i.findFirstFocus(),this.D("FocusOrVirtualPointerEnabledChanged"),!0}return!1}doKeyUp(){const t=this.commandHandler;if((t.isFocusEnabled||t.isVirtualPointerEnabled)&&t.doVirtualFocusKeyUp()){const e=this.lastInput;e.bubbles=!1;const i=e.event;i&&(i.stopPropagation&&i.stopPropagation(),i.cancelable!==!1&&i.preventDefault());return}this.currentTool.doKeyUp()}kd(t,e){if(e)for(const i in e)i!=="sourceDiagram"&&(t[i]=e[i])}emitMouseDown(t,e,i,s){i===void 0&&(i=0);let n=this;if(s&&s.sourceDiagram&&(n=s.sourceDiagram,!(n instanceof Diagram)))return this;if(!n.isEnabled)return this;const o=new InputEvent;return o.diagram=n,o.documentPoint=new Point(t,e),o.viewPoint=n.transformDocToView(o.documentPoint),o.timestamp=i,o.down=!0,this.kd(o,s),n.lastInput=o,n.firstInput=o.copy(),n.doMouseDown(),this}emitMouseMove(t,e,i,s){i===void 0&&(i=0);let n=this;if(s&&s.sourceDiagram&&(n=s.sourceDiagram,!(n instanceof Diagram)))return this;if(!n.isEnabled)return this;const o=new InputEvent;return o.diagram=n,o.documentPoint=new Point(t,e),o.viewPoint=n.transformDocToView(o.documentPoint),o.timestamp=i,this.kd(o,s),n.lastInput=o,n.doMouseMove(),this}emitMouseUp(t,e,i,s){i===void 0&&(i=0);let n=this;if(s&&s.sourceDiagram&&(n=s.sourceDiagram,!(n instanceof Diagram)))return this;if(!n.isEnabled)return this;const o=new InputEvent;return o.diagram=n,o.documentPoint=new Point(t,e),o.viewPoint=n.transformDocToView(o.documentPoint),o.timestamp=i,o.up=!0,n.firstInput.documentPoint.equals(o.documentPoint)&&(o.clickCount=1),this.kd(o,s),n.lastInput=o,n.doMouseUp(),this}emitMouseWheel(t,e,i){e===void 0&&(e=0);const s=this;if(!s.isEnabled)return this;const n=new InputEvent;return n.diagram=s,n.documentPoint=s.lastInput.documentPoint,n.viewPoint=s.lastInput.viewPoint,n.delta=t,n.timestamp=e,this.kd(n,i),s.lastInput=n,s.doMouseWheel(),this}emitKeyDown(t,e,i){e===void 0&&(e=0);const s=this;if(!s.isEnabled)return this;const n=new InputEvent;return n.diagram=s,n.documentPoint=s.lastInput.documentPoint,n.viewPoint=s.lastInput.viewPoint,typeof t=="string"?n.key=t:typeof t=="number"&&(n.key=String.fromCharCode(t)),n.timestamp=e,n.down=!0,this.kd(n,i),s.lastInput=n,s.doKeyDown(),this}emitKeyUp(t,e,i){e===void 0&&(e=0);const s=this;if(!s.isEnabled)return this;const n=new InputEvent;return n.diagram=s,n.documentPoint=s.lastInput.documentPoint,n.viewPoint=s.lastInput.viewPoint,typeof t=="string"?n.key=t:typeof t=="number"&&(n.key=String.fromCharCode(t)),n.timestamp=e,n.up=!0,this.kd(n,i),s.lastInput=n,s.doKeyUp(),this}doFocus(){this.focus()}focus(){if(this.st)if(this.scrollsPageOnFocus)this.st.focus();else{const t=root.scrollX,e=root.scrollY;this.st.focus(),root.scrollTo(t,e)}}BO(t){const e=Diagram.Qi.get(this);e&&e.D("GainedFocus")}UO(t){const e=Diagram.Qi.get(this);e&&e.D("LostFocus")}HM(){if(this.st===null)return;const e=this.Ct;if(e===null||e.clientWidth===0||e.clientHeight===0)return;this.c2||this.setScrollWidth();const i=this.ro?this.Zt:0,s=this.Ln?this.Zt:0,n=this.We;if(this.We=this.computePixelRatio(),this.We!==n&&(this.ld=!0,this.requestUpdate()),e.clientWidth!==this.bt+i||e.clientHeight!==this.kt+s){this.Oh(),this.Zi=!0;const o=this.layout;o!==null&&o.isViewportSized&&this.autoScale===1&&(this.uf=!0,o.g()),this.vs||this.requestUpdate()}}CA(){let t=0,e=new Layer;e.name="Grid",e.allowSelect=!1,e.pickable=!1,e.isTemporary=!0,e.isInDocumentBounds=!1,this.ll(e,t++),e=new Layer,e.name="ViewportBackground",e.isViewportAligned=!0,e.isTemporary=!0,e.isInDocumentBounds=!1,this.ll(e,t++),e=new Layer,e.name="Background",this.ll(e,t++),e=new Layer,e.name="",this.ll(e,t++),e=new Layer,e.name="Foreground",this.ll(e,t++),e=new Layer,e.name="ViewportForeground",e.isViewportAligned=!0,e.isTemporary=!0,e.isInDocumentBounds=!1,this.ll(e,t++),e=new Layer,e.name="Adornment",e.isTemporary=!0,e.isInDocumentBounds=!1,this.ll(e,t++),e=new Layer,e.name="Tool",e.isTemporary=!0,e.isInDocumentBounds=!0,this.ll(e,t++)}RA(){const t=new Panel(Panel.Grid,{name:"GRID"}).add(new Shape("LineH",{stroke:"lightgray",strokeWidth:.5,interval:1}).theme("stroke","gridMinor"),new Shape("LineV",{stroke:"lightgray",strokeWidth:.5,interval:1}).theme("stroke","gridMinor"),new Shape("LineH",{stroke:"gray",strokeWidth:.5,interval:5}).theme("stroke","gridMajor"),new Shape("LineV",{stroke:"gray",strokeWidth:.5,interval:5}).theme("stroke","gridMajor"),new Shape("LineH",{stroke:"gray",strokeWidth:1,interval:10}).theme("stroke","gridMajor"),new Shape("LineV",{stroke:"gray",strokeWidth:1,interval:10}).theme("stroke","gridMajor")),e=new Part({layerName:"Grid",zOrder:0,isInDocumentBounds:!1,isAnimated:!1,pickable:!1,locationObjectName:"GRID"}).add(t);return this.add(e),this.partManager.parts.delete(e),t.visible=!1,t}static NO(){const t=Diagram.Qi.get(this.parentElement||this);if(t){if(t.Zb){t.Zb=!1;return}if(!t.isEnabled){t.OA();return}t.diagramScroll(this)}}static TO(t){if(!this.a.isEnabled){this.a.updateScroll();return}this.a.Qb=t.target.scrollTop,this.a._b=t.target.scrollLeft}diagramScroll(t){if(this.st===null)return;const e=this.a1,i=this.h1;this.wp=!0;let s=this.documentBounds,n=this.viewportBounds;const o=this.bh;let r=s.x-o.left,l=s.y-o.top;const a=s.width+o.left+o.right,h=s.height+o.top+o.bottom;let c=s.right+o.right,f=s.bottom+o.bottom,u=n.x,d=n.y;const m=n.width,g=n.height;let p=n.right,y=n.bottom;const x=this.scale;let b,k=t.scrollLeft;if(this.yd)switch(this.bb){case"negative":k=k+t.scrollWidth-t.clientWidth;break;case"reverse":k=t.scrollWidth-k-t.clientWidth;break}const P=k;if(m<a||g<h){b=Point.O(this.position.x,this.position.y),this.allowHorizontalScroll&&this._b!==P&&(b.x=P/x+r,this._b=P),this.allowVerticalScroll&&this.Qb!==t.scrollTop&&(b.y=t.scrollTop/x+l,this.Qb=t.scrollTop),this.position=b,Point.i(b),this.wp=!1,this.fd=!1;return}if(b=Point.l(),t.LO&&this.allowHorizontalScroll&&(r<u&&(this.position=b.e(P+r,this.position.y)),c>p)){const S=e.scrollWidth-this.bt;this.position=b.e(-S+P-this.bt/x+c,this.position.y)}if(t.AO&&this.allowVerticalScroll&&(l<d&&(this.position=b.e(this.position.x,t.scrollTop+l)),f>y)){const S=e.scrollHeight-this.kt;this.position=b.e(this.position.x,-S+t.scrollTop-this.kt/x+f)}Point.i(b),this.Rs(),this.wp=!1,this.fd=!1,s=this.documentBounds,n=this.viewportBounds,c=s.right,p=n.right,f=s.bottom,y=n.bottom,r=s.x,u=n.x,l=s.y,d=n.y,m>=a&&r>=u&&c<=p&&(i.style.width="1px"),g>=h&&l>=d&&f<=y&&(i.style.height="1px")}computeBounds(t){return t===void 0&&(t=new Rect),this.Oe(),this.IA(t)}IA(t){if(this.fixedBounds.isReal())return t.h(this.fixedBounds),t.addMargin(this.se),t;let e=!0;const i=this.At.r,s=i.length;for(let n=0;n<s;n++){const o=i[n];if(!o.visible||!o.isInDocumentBounds)continue;const r=o.Vt.r,l=r.length;for(let a=0;a<l;a++){const h=r[a];if(!h.isInDocumentBounds||!h.isVisible())continue;const c=h.actualBounds;c.isReal()&&(e?(e=!1,t.h(c)):t.unionRect(c))}}return e&&t.e(0,0,0,0),t.addMargin(this.se),t}computePartsBounds(t,e){e===void 0&&(e=!1);let i;if(Array.isArray(t))for(let s=0;s<t.length;s++){const n=t[s];!e&&n instanceof Link||(n.ensureBounds(),i===void 0?i=n.actualBounds.copy():i.unionRect(n.actualBounds))}else{const s=t.iterator;for(;s.next();){const n=s.value;!e&&n instanceof Link||(n.ensureBounds(),i===void 0?i=n.actualBounds.copy():i.unionRect(n.actualBounds))}}return i===void 0?new Rect(NaN,NaN,0,0):i}tn(t){if(!t&&!this.lo||this.Wt||this.st===null||!this.documentBounds.isReal())return;if(this.Wt=!0,t){const f=this.initialPosition;if(f.isReal()){this.Wt=!1,this.position=f;return}let u=this.initialDocumentSpot,d=this.initialViewportSpot;u.isNoSpot()&&(u=Spot.TopLeft),d.isNoSpot()&&(d=Spot.TopLeft);const m=Point.l();m.setRectSpot(this.documentBounds,u);const g=this.viewportBounds,p=Rect.O(0,0,g.width,g.height),y=Point.l();y.setRectSpot(p,d),y.e(m.x-y.x,m.y-y.y),this.Wt=!1,this.position=y,Rect.i(p),Point.i(y)}let e=this.da;t&&this.Yr!==1&&(e=this.Yr);const i=e!==1?this.Pd(e):this.scale,s=this.ft.x,n=this.ft.y,o=this.bt/i,r=this.kt/i;let l=this.cf;const a=this.gp;if(t&&!l.isSpot()&&(a.isSpot()||a.isDefault())){const f=this.initialDocumentSpot.isSpot()&&this.initialViewportSpot.isSpot();l=a.isDefault()&&!f?Spot.Center:a}this.G2(this.documentBounds,o,r,l,t);const h=this.scale;this.scale=i,this.Wt=!1;const c=this.viewportBounds;c.equalsApproxTo(s,n,o,r)||this.onViewportBoundsChanged(new Rect(s,n,o,r),c,h,!1)}Pd(t){const e=this.Mp;if(this.st===null)return e;if(t===1)return this.scale;this.ensureBounds();const i=this.documentBounds;if(!i.isReal())return e;const s=i.width,n=i.height,o=this.bt+(this.ro?this.Zt:0),r=this.kt+(this.Ln?this.Zt:0);let l=o/s,a=r/n;const h=this.bh,c=h.left+h.right!==0,f=h.top+h.bottom!==0;(c||f)&&(a===l?(a=(r-this.Zt)/n,l=(o-this.Zt)/s):a>l?a=(r-this.Zt)/n:l=(o-this.Zt)/s);let u=0;return t===2?u=Math.min(a,l):t===3&&(a>l?u=(r-this.Zt)/n:u=(o-this.Zt)/s),u>e&&(u=e),u<this.minScale&&(u=this.minScale),u>this.maxScale&&(u=this.maxScale),u}zoomToFit(){const t=this.yh;this.yh=1,this.scale=this.Pd(2),this.alignDocument(Spot.Center,Spot.Center),t!==1&&(this.tn(!1),this.G2(this.documentBounds,this.bt/this.it,this.kt/this.it,this.cf,!1)),this.yh=t}zoomToRect(t,e){e===void 0&&(e=2);const i=t.width,s=t.height;if(i===0||s===0||isNaN(i)&&isNaN(s))return;let n=1;if(e===2||e===3)if(isNaN(i))n=this.viewportBounds.height*this.scale/s;else if(isNaN(s))n=this.viewportBounds.width*this.scale/i;else{const o=this.bt,r=this.kt;e===3?r/s>o/i?n=(r-(this.Ln?this.Zt:0))/s:n=(o-(this.ro?this.Zt:0))/i:n=Math.min(r/s,o/i)}this.scale=n,this.position=new Point(t.x,t.y)}get VO(){return this.Wt}set VO(t){this.Wt=t}alignDocument(t,e){this.ensureBounds();const i=this.documentBounds,s=this.viewportBounds;this.position=new Point(i.x+(t.x*i.width+t.offsetX)-(e.x*s.width-e.offsetX),i.y+(t.y*i.height+t.offsetY)-(e.y*s.height-e.offsetY))}focusObject(t){if(t instanceof GraphObject){this.Lp=t;const e=Point.l();this.Ap=this.transformDocToView(t.getDocumentPoint(Spot.TopLeft,e)),Point.i(e)}else this.Lp=null,this.Ap=Point.xn}G2(t,e,i,s,n){const o=Point.O(this.ft.x,this.ft.y);let r=o.x,l=o.y;if(this.Lp!==null){let a=Point.l();a=this.Lp.getDocumentPoint(Spot.TopLeft,a),r=a.x-this.Ap.x/this.scale,l=a.y-this.Ap.y/this.scale,s=Spot.None,Point.i(a)}if(n||this.scrollMode===1){s.isSpot()&&(e>t.width&&(r=t.x+(s.x*t.width+s.offsetX)-(s.x*e-s.offsetX)),i>t.height&&(l=t.y+(s.y*t.height+s.offsetY)-(s.y*i-s.offsetY)));const a=this.bh,h=e-t.width;if(e<t.width+a.left+a.right){let f=r+e/2;f=Math.min(f,t.right+Math.max(h,a.right)-e/2),f=Math.max(f,t.left-Math.max(h,a.left)+e/2),r=f-e/2}else r>t.left?r=t.left:r<t.right-e&&(r=t.right-e);const c=i-t.height;if(i<t.height+a.top+a.bottom){let f=l+i/2;f=Math.min(f,t.bottom+Math.max(c,a.bottom)-i/2),f=Math.max(f,t.top-Math.max(c,a.top)+i/2),l=f-i/2}else l>t.top?l=t.top:l<t.bottom-i&&(l=t.bottom-i)}if(o.x=isFinite(r)?r:-this.se.left,o.y=isFinite(l)?l:-this.se.top,this.positionComputation!==null){const a=this.positionComputation(this,o);o.x=a.x,o.y=a.y}this.As.hA(this.ft,o),this.ft.e(o.x,o.y),this.Op(),this.xa(),this.Y2(),Point.i(o)}findPartAt(t,e){if(e===void 0&&(e=!0),e){const i=this.vS(t,s=>s.part,s=>s.canSelect());if(i instanceof Part)return i}else{const i=this.vS(t,s=>s.part);if(i instanceof Part)return i}return null}findObjectAt(t,e,i){e===void 0&&(e=null),i===void 0&&(i=null),this.Oe();const s=this.At.iteratorBackwards;for(;s.next();){const n=s.value;if(!n.visible)continue;const o=n.findObjectAt(t,e,i);if(o!==null)return o}return null}vS(t,e,i){e===void 0&&(e=null),i===void 0&&(i=null),this.Oe();const s=this.At.iteratorBackwards;for(;s.next();){const n=s.value;if(!n.visible||n.isTemporary)continue;const o=n.findObjectAt(t,e,i);if(o!==null)return o}return null}findPartsAt(t,e,i){return e===void 0&&(e=!0),this.zO(t,s=>s.part,e?s=>s instanceof Part&&s.canSelect():null,i)}zO(t,e,i,s){e===void 0&&(e=null),i===void 0&&(i=null),!(s instanceof List)&&!(s instanceof GSet)&&(s=new GSet),this.Oe();const n=this.At.iteratorBackwards;for(;n.next();){const o=n.value;!o.visible||o.isTemporary||o.parts.count===0||o.findObjectsAt(t,e,i,s)}return s}findObjectsAt(t,e,i,s){e===void 0&&(e=null),i===void 0&&(i=null),!(s instanceof List)&&!(s instanceof GSet)&&(s=new GSet),this.Oe();const n=this.At.iteratorBackwards;for(;n.next();){const o=n.value;!o.visible||o.parts.count===0||o.findObjectsAt(t,e,i,s)}return s}findPartsIn(t,e,i,s){return e===void 0&&(e=!1),i===void 0&&(i=!0),this.XO(t,null,n=>n instanceof Part&&(!i||n.canSelect()),e,s)}findObjectsIn(t,e,i,s,n){e===void 0&&(e=null),i===void 0&&(i=null),s===void 0&&(s=!1),!(n instanceof List)&&!(n instanceof GSet)&&(n=new GSet),this.Oe();const o=this.At.iteratorBackwards;for(;o.next();){const r=o.value;!r.visible||r.parts.count===0||r.findObjectsIn(t,e,i,s,n)}return n}IS(t,e,i,s,n,o){const r=new GSet;this.Oe();const l=this.At.iteratorBackwards;for(;l.next();){const a=l.value;!a.visible||a.parts.count===0||a.IS(t,e,i,s,r,n,o)}return r}XO(t,e,i,s,n){e===void 0&&(e=null),i===void 0&&(i=null),s===void 0&&(s=!1),!(n instanceof List)&&!(n instanceof GSet)&&(n=new GSet),this.Oe();const o=this.At.iteratorBackwards;for(;o.next();){const r=o.value;!r.visible||r.isTemporary||r.parts.count===0||r.findObjectsIn(t,e,i,s,n)}return n}findPartsNear(t,e,i,s,n){return i===void 0&&(i=!0),s===void 0&&(s=!0),this.GO(t,e,null,o=>o instanceof Part&&(!s||o.canSelect()),i,n)}findObjectsNear(t,e,i,s,n,o){i===void 0&&(i=null),s===void 0&&(s=null),n===void 0&&(n=!0),n!==!1&&n!==!0&&((n instanceof List||n instanceof GSet)&&(o=n),n=!0),!(o instanceof List)&&!(o instanceof GSet)&&(o=new GSet),this.Oe();const r=this.At.iteratorBackwards;for(;r.next();){const l=r.value;l.visible&&l.findObjectsNear(t,e,i,s,n,o)}return o}GO(t,e,i,s,n,o){i===void 0&&(i=null),s===void 0&&(s=null),n===void 0&&(n=!0),n!==!1&&n!==!0&&((n instanceof List||n instanceof GSet)&&(o=n),n=!0),!(o instanceof List)&&!(o instanceof GSet)&&(o=new GSet),this.Oe();const r=this.At.iteratorBackwards;for(;r.next();){const l=r.value;!l.visible||l.isTemporary||l.findObjectsNear(t,e,i,s,n,o)}return o}acceptEvent(t){return this.bd(t,t instanceof MouseEvent)}bd(t,e){const i=this.nl;this.nl=this.Sh,this.Sh=i,i.diagram=this,i.event=t,e?this.Rp(t,i):(i.viewPoint=this.nl.viewPoint,i.documentPoint=this.nl.documentPoint);let s=0;const n=t;return n.ctrlKey&&(s+=1),n.altKey&&(s+=2),n.shiftKey&&(s+=4),n.metaKey&&(s+=8),i.modifiers=s,i.button=n.button,n.buttons!==void 0&&(i.buttons=n.buttons),U.yr&&n.button===0&&n.ctrlKey&&(i.button=2),i.down=!1,i.up=!1,i.clickCount=1,i.delta=0,i.handled=!1,i.bubbles=!1,i.timestamp=t.timeStamp,i.isMultiTouch=!1,i.targetDiagram=this.b1(t,t.target),i.targetObject=null,i}b1(t,e){if(e===null)return null;const i=Diagram.Qi.get(e);if(i)return i;let s=t.path;if(!s&&U.nt(t.composedPath)&&(s=t.composedPath()),s&&s[0]){const n=Diagram.Qi.get(s[0]);if(n)return n}return null}DO(t,e,i){const s=this.X2(t,!0,!1,!1,!0,i);return this.Rp(e,s),s.targetDiagram=this.b1(t,t.target),s.targetObject=null,i||s.clone(this.Sp),s}FO(t,e,i){const s=this.X2(t,!1,!1,!1,!1,i);let n=root.document.elementFromPoint(e.clientX,e.clientY)||null;n!==null&&n.shadowRoot&&(n=n.shadowRoot.elementFromPoint(e.clientX,e.clientY)||null);let o=this,r=t;if(n){const l=this.b1(t,n);l&&(r=e,o=l)}return s.targetDiagram=o,this.Rp(r,s),s.targetObject=null,s}X2(t,e,i,s,n,o){const r=this.nl;this.nl=this.Sh,this.Sh=r,r.diagram=this,r.clickCount=1,r.delta=0;let l=0;return t.ctrlKey&&(l+=1),t.altKey&&(l+=2),t.shiftKey&&(l+=4),t.metaKey&&(l+=8),r.modifiers=l,r.event=t,r.timestamp=t.timeStamp,r.button=i?this.firstInput.button:t.button,r.buttons=t.buttons,U.yr&&t.button===0&&t.ctrlKey&&(r.button=2),r.down=e,r.up=i,r.handled=s,r.bubbles=n,r.isMultiTouch=o,r}vh(t,e){return t.bubbles?!0:(e.stopPropagation!==void 0&&e.stopPropagation(),e.cancelable!==!1&&e.preventDefault(),e.cancelBubble=!0,!1)}IO(t){const e=Diagram.Qi.get(this);if(!e||!e.isEnabled)return!1;const i=e.bd(t,!1);return i.key=t.key,i.code=t.code,i.down=!0,e.doKeyDown(),e.vh(i,t)}EO(t){const e=Diagram.Qi.get(this);if(!e||!e.isEnabled)return!1;const i=e.bd(t,!1);return i.key=t.key,i.code=t.code,i.up=!0,e.doKeyUp(),e.vh(i,t)}RO(t){const e=Diagram.Qi.get(this);if(!e||!e.isEnabled)return!1;const i=e.bd(t,!0);return e.mouseEnter!==null&&e.mouseEnter(i),e.currentTool.standardMouseOver(),e.vh(i,t)}OO(t){const e=Diagram.Qi.get(this);if(!e||!e.isEnabled)return!1;const i=e.bd(t,!0);return e.mouseLeave!==null&&e.mouseLeave(i),e.vh(i,t)}getMouse(t){const e=this.st;if(e===null)return new Point(0,0);const i=e.getBoundingClientRect(),s=(t.clientX-i.left)*(this.bt/i.width),n=(t.clientY-i.top)*(this.kt/i.height);return new Point(s,n).Ai(this.T)}Rp(t,e){const i=this.st;let s=0,n=0;if(i!==null){const r=i.getBoundingClientRect();s=(t.clientX-r.left)*(this.bt/r.width),n=(t.clientY-r.top)*(this.kt/r.height)}e.viewPoint.e(s,n);const o=Point.O(s,n);this.T.Di(o),e.documentPoint.h(o),Point.i(o)}TL(t,e,i){let s;if(this.Nh[0]===null)return;s=this.Nh[e],s===void 0&&U.n("non-multi-touch");const n=this.st;if(n!==null){const o=n.getBoundingClientRect();i.e((s.clientX-o.left)*(this.bt/o.width),(s.clientY-o.top)*(this.kt/o.height))}}invalidateDocumentBounds(){this.Mh||(this.Mh=!0,this.requestUpdate(!1))}YO(){this.vs||this.Oe(),this.ensureBounds()}redraw(){this.Wt||this.vs||(this.N(),this.maybeUpdate())}isUpdateRequested(){return this.Ur}delayInitialization(t){t===void 0&&(t=null);const e=this.animationManager,i=e.isEnabled;e.stopAnimation(),e.isEnabled=!1,this.Ar(),this.lo=!1,this.sb=new Point(NaN,NaN),e.isEnabled=i,this.vs=!0;const s=this;t!==null&&U.yn(()=>{s.vs=!1,e._l("Model"),t(s)},1)}requestUpdate(t){if(t===void 0&&(t=!1),this.Ur===!0||this.Wt||t===!1&&this.vs)return;this.Ur=!0;const e=this;root.requestAnimationFrame(()=>{e.Ur&&e.maybeUpdate()})}maybeUpdate(){this.ad&&!this.Ur||(this.ad&&(this.ad=!1),this.Ar())}K2(t,e){!this.fd||this.Wt||this.animationManager.defaultAnimation.isAnimating||this.OA()||(t&&this.Oe(),e&&this.tn(!1))}Ar(t){if(this.vs||(this.Ur=!1,this.Ct===null&&!this.ud.isReal()))return;this.vs=!0;const e=this.animationManager,i=this.pd;if(!e.isAnimating&&i.length!==0){const c=i.r,f=c.length;for(let u=0;u<f;u++){const d=c[u];d.Pi(!1),d.f()}i.clear()}const s=this.F2;s.count>0&&(s.each(c=>c.H2()),s.clear());let n=!1,o=!1;e.defaultAnimation.isAnimating&&(o=!0,n=this.skipsUndoManager,this.skipsUndoManager=!0),e.Ne||this.HM(),t||this.K2(!1,!0);const r=!this.undoManager.isUndoingRedoing&&(this.Hl||this.wf.count!==0&&this.Kr.size!==0),l=!this.lo||this.ol;this.Oe(!0);let a=!1;(l||r)&&(this.lo?this.q2(!this.uf,r):(this.startTransaction("Initial Layout"),e.isEnabled===!1&&e.stopAnimation(),this.q2(!1,r)),a=l),this.uf=!1,this.Hl=!1,this.Oe(),this.Vb||this.YO(),t||this.K2(!0,!1);let h=!1;if(a){const c=Rect.l();c.h(this.viewportBounds),this.lo||(this.lo=!0,h=!0,this.skipsUndoManager||(this.undoManager.Fx=!0),this.undoManager.vx=!0,this.KO()),this.HO(),this.Oe(!1),t||this.K2(!0,!0),Rect.i(c)}else if(e._c&&e.ib){if(this.Yr!==1)this.scale=this.Pd(this.Yr);else if(this.da!==1)this.scale=this.Pd(this.da);else{const c=this.initialScale;isFinite(c)&&c>0&&(this.scale=c)}this.tn(!0)}a&&h&&this.commitTransaction("Initial Layout"),this.cs!==null&&(this.cs.visible&&!this.gf&&(this.j2(),this.gf=!0),!this.cs.visible&&this.gf&&(this.gf=!1)),t||this.qe(this.Qt),o&&(this.skipsUndoManager=n),this.vs=!1}get ah(){return this.lo}KO(){if(this.Yr!==1)this.scale=this.Pd(this.Yr);else if(this.da!==1)this.scale=this.Pd(this.da);else{const e=this.initialScale;isFinite(e)&&e>0&&(this.scale=e)}this.tn(!0);const t=this.At.r;this.Cn(t,t.length,this,this.viewportBounds);for(let e=0;e<t.length;e++){const i=t[e];i.name===""&&i.zr.reinitialize()}this.D("InitialLayoutCompleted"),this.sb.h(this.ft),this.Sd()}HO(){this.D("LayoutCompleted")}Ip(t){this.Tn.add(t)}addInvalidRoute(t){this.zo?this.kh.add(t):this.Kr.add(t)}Oe(t){if(this.Tn.size===0||!this.vs&&this.animationManager.isTicking)return;this.vs||(this.Hl=!0);let e=!1;for(const i of this.Tn){const s=i.layer;if(s!==null&&s.isViewportAligned){e=!0;break}}if(t){this.EA(this.Tn),e&&this.Y2();return}for(let i=0;i<23&&this.Tn.size!==0;i++){const s=new Set(this.Tn);this.Tn.clear(),this.H2(s,this.Tn)}this.nodes.each(i=>{i instanceof Group&&i.UA(!1)}),e&&this.Y2()}EA(t,e){for(const i of t)!i.Oi()||i instanceof Group||(i.al()?(i.ct(1/0,1/0),i.zt()):e&&e.add(i));for(const i of t)if(i instanceof Group){if(!i.isVisible())continue;this.k1(i)}}H2(t,e){this.EA(t,e);for(const i of t){if(!(i instanceof Link))continue;const s=i;s.isVisible()&&(s.al()?(s.ct(1/0,1/0),s.zt()):e.add(s))}for(const i of t)i instanceof Adornment&&i.isVisible()&&(i.al()?(i.ct(1/0,1/0),i.zt()):e.add(i))}Md(t){const e=t instanceof Diagram,i=e?t.links:t.memberParts,s=this.Tn;if(e)this.Oe(!0);else{for(;i.next();){const n=i.value;s.has(n)&&(!n.Oi()||n instanceof Group||n.al()&&(n.ct(1/0,1/0),n.zt()))}for(i.reset();i.next();){const n=i.value;if(s.has(n)&&n instanceof Group){if(!n.isVisible())continue;this.k1(n)}}i.reset()}for(;i.next();){const n=i.value;n instanceof Link&&s.has(n)&&n.isVisible()&&n.al()&&(n.ct(1/0,1/0),n.zt())}}k1(t){const e=U.ot(),i=U.ot(),s=t.memberParts;for(;s.next();){const o=s.value;o.isVisible()&&(o instanceof Group?(o.Ko()||o.fs()||o.ba())&&this.k1(o):o instanceof Link?o.fromNode===t||o.toNode===t?i.push(o):e.push(o):(o.ct(1/0,1/0),o.zt()))}let n=e.length;for(let o=0;o<n;o++){const r=e[o];r.ct(1/0,1/0),r.zt()}U._(e),t.ct(1/0,1/0),t.zt(),n=i.length;for(let o=0;o<n;o++){const r=i[o];r.ct(1/0,1/0),r.zt()}U._(i)}Cn(t,e,i,s){if(!(!this.gd&&!this.animationManager.isAnimating)){for(let n=0;n<e;n++)t[n].Cn(i,s);this.Oe()}}qe(t){if(this.Ct===null)return;this.st===null&&U.n("No canvas specified"),this.mf==="svg"?this.qO(t):this.jO(t)}jO(t){const e=this.animationManager;if(e.Ne||e.isAnimating&&!e.isTicking||(this.Ep(),this.Ct&&this.Ct.style.opacity==="0"))return;const i=t!==this.Qt,s=this.At.r,n=s.length,o=this;if(this.Cn(s,n,o,o.viewportBounds),i)t.clearContextCache(!0),this.Rs();else if(!this.Zi&&!e.isAnimating)return;const r=this.T,l=this.We;t.setTransform(l,0,0,l,0,0),t.clearRect(0,0,this.bt,this.kt),this.ie!==1&&(t.globalAlpha=this.ie),this.W2(t);for(let h=0;h<n;h++)t.setTransform(l,0,0,l,0,0),t.transform(r.m11,r.m12,r.m21,r.m22,r.dx,r.dy),t.commitTransform(),s[h].qe(t,o);let a=!1;this.yf?this.yf.Rh(this,t)&&(a=this.Cp()):a=!0,a&&(Transform.prototype.Di=Transform.prototype.vu),i?(this.Qt.clearContextCache(!0),this.Rs()):(this.gd=!1,this.Zi=!1),this.ie!==1&&(t.globalAlpha=1)}WO(t,e){const i=this.T,s=this.We;e.setTransform(s,0,0,s,0,0),e.transform(i.m11,i.m12,i.m21,i.m22,i.dx,i.dy),e.commitTransform();const n=this.viewportBounds,o=n.position,r=new Point(n.right,n.bottom);if(e.fillStyle="red",e.fillRect(o.x-15,o.y-15,30,30),e.fillStyle="blue",e.fillRect(r.x-15,r.y-15,30,30),t.isLeaf){e.strokeStyle="rgba(255,125,212,0.55)",e.lineWidth=3,e.beginPath();const l=t.bounds;e.rect(l.x,l.y,l.width,l.height),e.stroke()}else for(let l=0;l<t.subTrees.length;l++)this.WO(t.subTrees[l],e);e.clearContextCache(!0)}qO(t){if(this.Ct===null)return;const e=this.animationManager;if(e.Ne||e.isAnimating&&!e.isTicking)return;this.Ep();const i=this.bt,s=this.kt;t.surface.resize(i,s,i,s);const o=this.At.r,r=o.length,l=this;if(this.Cn(o,r,l,l.viewportBounds),!this.Zi&&!e.isAnimating)return;const a=this.T;t.lastDrawnPart=null,t.setDiagramPosScale(a.m11,a.m12,a.m21,a.m22,a.dx,a.dy),this.ie!==1&&(t.globalAlpha=this.ie),this.W2(t);const h=this.We,c=this.st.de;c.setTransform(h,0,0,h,0,0),c.clearRect(0,0,this.bt,this.kt);for(let u=0;u<r;u++)o[u].qe(t,l);let f=!1;this.yf?this.yf.Rh(this,c)&&(f=this.Cp()):f=!0,f&&(Transform.prototype.Di=Transform.prototype.vu),this.gd=!1,this.Zi=!1}P1(t,e,i,s,n,o,r,l,a){o===void 0&&(o=null),r===void 0&&(r=null),l===void 0&&(l=!1),a===void 0&&(a=!1),this.Ep(),t.clearContextCache(!0),this.Rs(),this.Ch=!0;const h=this.it;this.it=s;const c=this,f=this.At.r,u=f.length;try{const d=new Rect(n.x,n.y,i.width/s,i.height/s),m=d.copy();m.addMargin(e),this.j2(m),this.Oe(),this.Cn(f,u,c,d),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,i.width,i.height),r!==null&&r!==""&&(t.fillStyle=r,t.fillBackground(0,0,i.width,i.height));const g=Transform.l();g.Xe(),g.js(e.left,e.top),g.it(s),(n.x!==0||n.y!==0)&&g.js(-n.x,-n.y),t.setTransform(g.m11,g.m12,g.m21,g.m22,g.dx,g.dy),t.commitTransform(),t instanceof SVGContext&&t.setDiagramPosScale(g.m11,g.m12,g.m21,g.m22,g.dx,g.dy),Transform.i(g),this.W2(t),t.globalAlpha=this.ie;const p=this.findLayer("Grid");if(o){const y=new GSet,x=o.iterator;for(x.reset();x.next();){const b=x.value;b instanceof Part&&(!a&&b.layer===p||(b.hf(),y.add(b)))}for(let b=0;b<u;b++)f[b].dO(t,c,y,l);y.each(b=>b.hf())}else for(let y=0;y<u;y++){const x=f[y];x===p?a&&x.qe(t,c,!0):x.qe(t,c,l)}this.Ch=!1,this.yf&&this.Qt&&this.yf.Rh(this,this.Qt)&&this.Cp()}finally{this.it=h,t.clearContextCache(!0),this.Rs(),this.Cn(f,u,c,c.viewportBounds),this.Sd(),this.Qt instanceof SVGContext&&(this.Qt.diagramGroup.replaceChildren(),this.redraw())}}getRenderingHint(t){return this.Gr[t]}setRenderingHint(t,e){t==="minDrawingLength"&&(this.cp=e),this.Gr[t]=e,this.redraw()}resetRenderingHints(){this.Gr=new PropertyCollection,this.Gr.drawShadows=!0,this.Gr.textGreeking=!0,this.Gr.viewportOptimizations=!U.yr,this.Gr.temporaryPixelRatio=!0,this.Gr.pictureRatioOptimization=!0,this.Gr.minDrawingLength=1,this.cp=1}W2(t){const e=this.Gr;if(e===null)return;if(e.imageSmoothingEnabled!==void 0){const s=!!e.imageSmoothingEnabled;t.setImageSmoothingEnabled(s)}const i=e.defaultFont;i!=null&&(t.font=i)}getInputOption(t){return this.rd[t]}setInputOption(t,e){this.rd[t]=e}kO(){this.rd=new PropertyCollection,this.rd.extraTouchArea=10,this.rd.extraTouchThreshold=10,this.rd.hasGestureZoom=!0}set(t){return t?(Object.assign(this,t),this):this}attach(t){return this.setProperties(t)}setProperties(t){return Diagram.Up(this,t),this}static Up(t,e){if(!e)return;const i=t instanceof Panel,s=t instanceof Diagram;for(const n in e){n===""&&U.n("Setting properties requires non-empty property names");let o=t,r=n;if(i||s){const a=n.indexOf(".");if(a>0){const h=n.substring(0,a);i?o=t.findObject(h):(o=t[h],o==null&&(o=t.toolManager[h])),U.Z(o)?r=n.substring(a+1):U.n("Unable to find object named: "+h+" in "+t.toString()+" when trying to set property: "+n)}}if(r[0]!=="_"&&!U.ex(o,r))if(s&&r==="ModelChanged"){t.addModelChangedListener(e[r]);continue}else if(s&&r==="Changed"){t.addChangedListener(e[r]);continue}else if(s&&U.ex(t.toolManager,r))o=t.toolManager;else if(s&&t.BA(r)){t.addDiagramListener(r,e[r]);continue}else if(t instanceof Model&&r==="Changed"){t.addChangedListener(e[r]);continue}else U.n('Trying to set undefined property "'+r+'" on object: '+o.toString());const l=e[n];o[r]=l,r[0]==="_"&&o instanceof GraphObject&&o.addCopyProperty(r)}}uA(){if(this.ya.count!==0&&!(this.undoManager.transactionLevel>1)){for(;this.ya.count>0;){const t=this.ya;this.ya=new GMap;const e=t.iterator;for(;e.next();){const i=e.key;i.invalidateOtherJumpOvers(e.value),i.fi()}}this.N()}}N(t){if(t===void 0)this.Zi=!0,this.requestUpdate();else{const e=this.viewportBounds;t.isReal()&&e.intersectsRect(t)&&(this.Zi=!0,this.requestUpdate())}this.D("InvalidateDraw")}invalidateViewport(t,e){if(this.Zi!==!0){if(this.Zi=!0,this.mf==="svg"){this.maybeUpdate();return}this.maybeUpdate()}}Oh(){this.fd=!0}Rs(){this.gd=!0}Ep(){this.ld!==!1&&(this.ld=!1,this.vA(this.bt,this.kt))}vA(t,e){this.xa();const i=this.We,s=t*i,n=e*i;this.st.resize(s,n,t,e)&&(this.Zi=!0,this.Qt.clearContextCache(!0))}OA(){const t=this.st;if(t===null||this.ud.isReal())return!0;const e=this.bt,i=this.kt,s=this.Ct;let n=!1,o=this.ro?this.Zt:0,r=this.Ln?this.Zt:0,l=s.clientWidth||e+o,a=s.clientHeight||i+r;const h=this.viewportBounds,c=h.x,f=h.y,u=h.width,d=h.height;if((l!==e+o||a!==i+r)&&(this.ro=!1,this.Ln=!1,o=0,r=0,this.bt=l,this.kt=a,this.ld=!0,n=!0,this.xa()),!this.lo||!this.viewportBounds.isReal())return!0;const m=this.a1,g=this.h1;if(this.fd=!1,!n&&!this.ro&&!this.Ln&&!this.hd&&!this.cd)return!0;const p=this.documentBounds;let y=0,x=0,b=0,k=0;const P=h.width,S=h.height,T=this.bh;this.contentAlignment.isSpot()?(p.width>P&&(y=T.left,x=T.right),p.height>S&&(b=T.top,k=T.bottom)):(y=T.left,x=T.right,b=T.top,k=T.bottom);const N=p.width+y+x,M=p.height+b+k,C=this.scale,L=C;let A=N>l/C,D=M>a/C;if(!n&&!this.ro&&!this.Ln&&!A&&!D)return!0;const F=p.x-y,v=h.x,R=p.right+x;let O=h.right+o;const z=p.y-b,X=h.y,E=p.bottom+k;let Y=h.bottom+r,V="1px",H="1px";if(this.scrollMode===1&&(A||D)){if(A&&this.hasHorizontalScrollbar&&this.allowHorizontalScroll){let B=1;F+1<v&&(B=Math.max((v-F)*C+this.bt,B)),R>O+1&&(B=Math.max((R-O)*C+this.bt,B)),P+o+1<N&&(B=Math.max((N-P)*C+this.bt,B)),V=B.toString()+"px"}if(D&&this.hasVerticalScrollbar&&this.allowVerticalScroll){let B=1;z+1<X&&(B=Math.max((X-z)*C+this.kt,B)),E>Y+1&&(B=Math.max((E-Y)*C+this.kt,B)),S+r+1<M&&(B=Math.max((M-S)*C+this.kt,B)),H=B.toString()+"px"}}let q=V!=="1px",W=H!=="1px";if(!(q&&W)&&(q||W)){if(A=!(N<P+o),D=!(M<S+r),W&&(O-=this.Zt),q&&(Y-=this.Zt),A&&this.hasHorizontalScrollbar&&this.allowHorizontalScroll){let $=1;F+1<v&&($=Math.max((v-F)*C+this.bt,$)),R>O+1&&($=Math.max((R-O)*C+this.bt,$)),P+1<N&&($=Math.max((N-P)*C+this.bt,$)),V=$.toString()+"px"}q=V!=="1px";let B=this.kt;if(q!==this.Ln&&(B=q?this.kt-this.Zt:this.kt+this.Zt),D&&this.hasVerticalScrollbar&&this.allowVerticalScroll){let $=1;z+1<X&&($=Math.max((X-z)*C+B,$)),E>Y+1&&($=Math.max((E-Y)*C+B,$)),S+1<M&&($=Math.max((M-S)*C+B,$)),H=$.toString()+"px"}W=H!=="1px"}if(this.wp&&!(q!==this.Ln||W!==this.ro))return(e!==this.bt||i!==this.kt)&&this.maybeUpdate(),!1;if(q!==this.Ln&&(V==="1px"?this.kt=this.kt+this.Zt:this.kt=Math.max(this.kt-this.Zt,1),n=!0),this.Ln=q,g.style.width=V,W!==this.ro&&(H==="1px"?this.bt=this.bt+this.Zt:this.bt=Math.max(this.bt-this.Zt,1),n=!0,this.yd)){const B=Point.l();W?(t.style.left=this.Zt+"px",this.position=B.e(this.ft.x+this.Zt/this.scale,this.ft.y)):(t.style.left="0px",this.position=B.e(this.ft.x-this.Zt/this.scale,this.ft.y)),Point.i(B)}n&&this.xa(),this.ro=W,g.style.height=H,this.Zb=!0,n&&(this.ld=!0);let Z=m.scrollLeft;if(this.hasHorizontalScrollbar&&this.allowHorizontalScroll&&(P+1<N?Z=(this.position.x-F)*C:F+1<v?Z=m.scrollWidth-m.clientWidth:R>O+1&&(Z=this.position.x*C)),this.yd)switch(this.bb){case"negative":Z=-(m.scrollWidth-Z-m.clientWidth);break;case"reverse":Z=m.scrollWidth-Z-m.clientWidth;break}if(m.scrollLeft=Z,this.hasVerticalScrollbar&&this.allowVerticalScroll&&(S+1<M?m.scrollTop=(this.position.y-z)*C:z+1<X?m.scrollTop=m.scrollHeight-m.clientHeight:E>Y+1&&(m.scrollTop=this.position.y*C)),l=this.bt,a=this.kt,m.style.width=l+(this.ro?this.Zt:0)+"px",m.style.height=a+(this.Ln?this.Zt:0)+"px",e!==l||i!==a||this.animationManager.Ne){const B=Rect.O(c,f,u,d);return this.onViewportBoundsChanged(B,this.viewportBounds,L,n),Rect.i(B),!1}return!0}add(t){const e=t.diagram;if(e===this)return this;e!==null&&U.n("Cannot add part "+t.toString()+" to "+this.toString()+". It is already a part of "+e.toString());let i=this.findLayer(t.layerName);if(i===null&&(i=this.findLayer("")),i===null&&U.n('Cannot add a Part when unable find a Layer named "'+t.layerName+'" and there is no default Layer'),t.layer===i)return this;const s=i.xh(99999999,t,t.diagram===this);s>=0&&this.raiseChangedEvent(3,"parts",i,null,t,null,s),i.isTemporary||this.invalidateDocumentBounds(),t.invalidateLayout(1);const n=t.layerChanged;return n!==null&&n(t,null,i),this}xh(t){this.partManager.xh(t);const e=this;Diagram.isUsingDOM()&&t.An(s=>e.VA(s)),t.data||t.Ho(),t.hasPlaceholder()&&t.f(),t.data!==null&&t.An(s=>e.partManager.J2(s,null)),(t.fs()===!0||t.ba()===!0)&&this.Ip(t),t.zA(!0,this),this.Rs(),t instanceof Node&&t.canAvoid()&&this.Cd(t),t.XA()?(t.actualBounds.isReal()&&this.N(t.wh(t.actualBounds)),this.invalidateDocumentBounds()):t.isVisible()&&t.actualBounds.isReal()&&this.N(t.wh(t.actualBounds)),this.GA(t),this.Dp!==null&&this.Dp(this,t),this.requestUpdate()}hi(t){t.clearAdornments(),this.partManager.hi(t);const e=this;t.data!==null&&t.An(s=>e.partManager.$2(s,e)),this.Tn.delete(t),t instanceof Link?this.Kr.delete(t):t instanceof Node&&t.canAvoid()&&this.Cd(t),t.XA()?(t.actualBounds.isReal()&&this.N(t.wh(t.actualBounds)),this.invalidateDocumentBounds()):t.isVisible()&&t.actualBounds.isReal()&&this.N(t.wh(t.actualBounds)),this.Fp!==null&&this.Fp(this,t),this.requestUpdate()}remove(t){return this.Z2(t,!0),this}Z2(t,e){const i=t.layer;if(i===null||i.diagram!==this)return;t.isSelected=!1,t.isHighlighted=!1,t.invalidateLayout(2),e&&t.xf();const s=i.hi(-1,t,!1);s>=0&&this.raiseChangedEvent(4,"parts",i,t,null,s,null);const n=t.layerChanged;n!==null&&n(t,i,null)}removeParts(t,e){if(e===void 0&&(e=!1),Array.isArray(t)){const i=t.length;for(let s=0;s<i;s++){const n=t[s];e&&!n.canDelete()||this.remove(n)}}else{const i=new GSet;i.addAll(t);const s=i.iterator;for(;s.next();){const n=s.value;e&&!n.canDelete()||this.remove(n)}}return this}copyParts(t,e,i){return i===void 0&&(i=!1),this.partManager.copyParts(t,e,i)}moveParts(t,e,i,s){if(i===void 0&&(i=!1),s===void 0&&(s=this.Bp()),this.toolManager===null)return;const o=new GMap;if(t!==null)if(Array.isArray(t))for(let r=0;r<t.length;r++)this.hl(o,t[r],i,s);else{const r=t.iterator;for(;r.next();)this.hl(o,r.value,i,s)}else{let r=this.parts;for(;r.next();){const l=r.value;this.hl(o,l,i,s)}for(r=this.nodes;r.next();){const l=r.value;this.hl(o,l,i,s)}for(r=this.links;r.next();){const l=r.value;this.hl(o,l,i,s)}}this.Ix(o,e,s,i)}hl(t,e,i,s,n){if(!t.has(e)&&(n===void 0&&(n=!1),!(i&&!n&&!e.canMove()&&!e.canCopy())))if(s===void 0&&(s=this.Bp()),e instanceof Node){if(t.set(e,this.Qs(s,e,e.location)),e instanceof Group&&(e.hasPlaceholder()||s.dragsMembers)){const r=e.memberParts;for(;r.next();){const l=r.value;this.hl(t,l,i,s,s.groupsAlwaysMove)}}const o=e.linksConnected;for(;o.next();){const r=o.value;if(t.has(r))continue;const l=r.fromNode,a=r.toNode;l!==null&&t.has(l)&&a!==null&&t.has(a)&&this.hl(t,r,i,s)}if(s.dragsTree){const r=e.findTreeChildrenNodes();for(;r.next();){const l=r.value;this.hl(t,l,i,s)}}}else if(e instanceof Link){t.set(e,this.Qs(s,e));const o=e.labelNodes;for(;o.next();){const r=o.value;this.hl(t,r,i,s)}}else e instanceof Adornment||t.set(e,this.Qs(s,e,e.location))}Ix(t,e,i,s){if(t===null||t.count===0)return;const n=Point.l(),o=Point.l();o.h(e),isNaN(o.x)&&(o.x=0),isNaN(o.y)&&(o.y=0);const r=this.d1;r||this.XL(t);const l=U.ot(),a=U.ot(),h=t.iterator;let c=Point.l();for(;h.next();){const g=h.key,p=h.value;if(g.Oi()){const y=this.YA(g,t);if(y!==null)l.push(new DraggingNodeInfoPair(g,p,y));else if(!s||g.canMove()){const x=p.point;n.h(x),this.computeMove(g,n.add(o),i,c),g.location=c,p.shifted===void 0&&(p.shifted=new Point),p.shifted.h(c.subtract(x))}}else h.key instanceof Link&&a.push(new KeyValuePair(h.key,h.value))}Point.i(c);const f=l.length;for(let g=0;g<f;g++){const p=l[g],y=p.KA.point;n.h(y),p.S1.shifted===void 0&&(p.S1.shifted=new Point),p.Ei.location=n.add(p.S1.shifted)}const u=Point.l(),d=Point.l(),m=a.length;for(let g=0;g<m;g++){const p=a[g],y=p.key;if(y instanceof Link){if(y.suspendsRouting){y.Br=null;const x=y.fromNode,b=y.toNode;if(this.draggedLink!==null&&i.dragsLink){const k=p.value.point;if(y.dragComputation===null){t.set(y,this.Qs(i,y,o));const P=o.x-k.x,S=o.y-k.y;y.Lr(P,S)}else{const P=Point.O(0,0),S=y.getPoint(0);S&&S.isReal()&&P.h(S),c=Point.l().h(P).add(o);let T=c;i.isGridSnapEnabled&&(i.isGridSnapRealtime||this.lastInput.up)&&(T=Point.l(),this.AM(y,c,T,i)),c.h(y.dragComputation(y,c,T)).subtract(P),t.set(y,this.Qs(i,y,c));const N=c.x-k.x,M=c.y-k.y;y.Lr(N,M),Point.i(P),Point.i(c),T!==c&&Point.i(T)}}else{if(x!==null){u.h(x.location);const k=t.get(x);k!==null&&u.subtract(k.point)}if(b!==null){d.h(b.location);const k=t.get(b);k!==null&&d.subtract(k.point)}if(x!==null&&b!==null){const k=p.value.point;if(u.equalsApprox(d)||y.computeAdjusting()!==0){const P=n;P.h(u),P.subtract(k),t.set(y,this.Qs(i,y,u)),y.Lr(P.x,P.y)}else y.suspendsRouting=!1,y.ee()}else{const k=p.value.point;let P;x!==null?P=u:b!==null?P=d:P=o,t.set(y,this.Qs(i,y,P));const S=P.x-k.x,T=P.y-k.y;y.Lr(S,T)}}}else if(y.fromNode===null||y.toNode===null){const x=p.value.point;t.set(y,this.Qs(i,y,o));const b=o.x-x.x,k=o.y-x.y;y.Lr(b,k)}}}Point.i(n),Point.i(o),Point.i(u),Point.i(d),U._(l),U._(a),r||(this.Oe(),this.LS(t))}computeMove(t,e,i,s){if(s===void 0&&(s=new Point),s.h(e),t===null)return s;let n=e;const o=i.isGridSnapEnabled;o&&(i.isGridSnapRealtime||this.lastInput.up)&&(n=Point.l(),this.AM(t,e,n,i));const r=t.dragComputation!==null?t.dragComputation(t,e,n):n,l=t.minLocation;let a=l.x;isNaN(a)&&(a=o?Math.round(t.location.x*1e3)/1e3:t.location.x);let h=l.y;isNaN(h)&&(h=o?Math.round(t.location.y*1e3)/1e3:t.location.y);const c=t.maxLocation;let f=c.x;isNaN(f)&&(f=o?Math.round(t.location.x*1e3)/1e3:t.location.x);let u=c.y;return isNaN(u)&&(u=o?Math.round(t.location.y*1e3)/1e3:t.location.y),s.e(Math.max(a,Math.min(r.x,f)),Math.max(h,Math.min(r.y,u))),n!==e&&Point.i(n),s}GA(t){const e=t.layer;t.actualBounds.isReal()&&e!==null&&(e.zr.move(t,t.actualBounds.copy(),!0),e.i2=!0)}h2(t){const e=this.At.r;for(let i=0;i<e.length;i++)e[i].h2(t)}Bp(){const t=this.toolManager.findTool("Dragging");return t instanceof DraggingTool?t.dragOptions:this.xd}AM(t,e,i,s){if(s===void 0&&(s=this.Bp()),i.h(e),t===null)return i;const n=this.grid,o=s.gridSnapCellSize;let r=o.width,l=o.height;const a=s.gridSnapOrigin;let h=a.x,c=a.y;const f=s.gridSnapCellSpot;if(n!==null){const d=n.gridCellSize;isNaN(r)&&(r=d.width),isNaN(l)&&(l=d.height);const m=n.gridOrigin;isNaN(h)&&(h=m.x),isNaN(c)&&(c=m.y)}const u=Point.O(0,0);return u.setSpot(0,0,r,l,f),G.dm(e.x,e.y,h+u.x,c+u.y,r,l,i),Point.i(u),i}XL(t){if(t===null)return;this.d1=!0;const e=t.iterator;for(;e.next();){const i=e.key;i instanceof Link&&(i.suspendsRouting=!0)}}LS(t){if(t===null)return;const e=t.iterator;for(;e.next();){const i=e.key;i instanceof Link&&(i.suspendsRouting=!1,i.HA()&&i.ee())}this.d1=!1}get draggedLink(){return this.g1}set draggedLink(t){this.g1!==t&&(this.g1=t,t!==null&&(this.m1=t.fromPort,this.p1=t.toPort))}get RS(){return this.m1}set RS(t){this.m1=t}get OS(){return this.p1}set OS(t){this.p1=t}YA(t,e){const i=t.containingGroup;if(i!==null){let s=this.YA(i,e);if(s!==null||(s=e.get(i),s!==null))return s}return null}Qs(t,e,i){if(i===void 0)return new DraggingInfo(Point.wn);let s=t.isGridSnapEnabled;return!t.groupsSnapMembers&&e.containingGroup!==null&&(s=!1),s?new DraggingInfo(new Point(Math.round(i.x*1e3)/1e3,Math.round(i.y*1e3)/1e3)):new DraggingInfo(i.copy())}Q2(t,e){if(t.diagram!==null&&t.diagram!==this&&U.n("Cannot share a Layer with another Diagram: "+t+" of "+t.diagram),e===null?t.diagram!==null&&U.n("Cannot add an existing Layer to this Diagram again: "+t):(e.diagram!==this&&U.n("Existing Layer must be in this Diagram: "+e+" not in "+e.diagram),t===e&&U.n("Cannot move a Layer before or after itself: "+t)),t.diagram===this)return;const i=t.name,s=this.At,n=s.count;for(let o=0;o<n;o++)s.elt(o).name===i&&U.n("Cannot add Layer with the name '"+i+"'; a Layer with the same name is already present in this Diagram.")}addLayer(t){this.Q2(t,null),t.Bo(this);const e=this.At;let i=e.count-1;if(!t.isTemporary)for(;i>=0&&e.elt(i).isTemporary;)i--;return e.insertAt(i+1,t),this.Fe!==null&&this.raiseChangedEvent(3,"layers",this,null,t,null,i+1),this.N(),this.invalidateDocumentBounds(),this}addLayerBefore(t,e){this.Q2(t,e),t.Bo(this);const i=this.At,s=i.indexOf(t);s>=0&&(i.delete(t),this.Fe!==null&&this.raiseChangedEvent(4,"layers",this,t,null,s,null));const n=i.count;let o;for(o=0;o<n;o++)if(i.elt(o)===e){i.insertAt(o,t);break}return this.Fe!==null&&this.raiseChangedEvent(3,"layers",this,null,t,null,o),this.N(),s<0&&this.invalidateDocumentBounds(),this}addLayerAfter(t,e){this.Q2(t,e),t.Bo(this);const i=this.At,s=i.indexOf(t);s>=0&&(i.delete(t),this.Fe!==null&&this.raiseChangedEvent(4,"layers",this,t,null,s,null));const n=i.count;let o;for(o=0;o<n;o++)if(i.elt(o)===e){i.insertAt(o+1,t);break}return this.Fe!==null&&this.raiseChangedEvent(3,"layers",this,null,t,null,o+1),this.N(),s<0&&this.invalidateDocumentBounds(),this}ll(t,e){t.Bo(this),this.At.insertAt(e,t)}qA(t){this.At.removeAt(t)}removeLayer(t){if(t.diagram!==this&&U.n("Cannot remove a Layer from another Diagram: "+t+" of "+t.diagram),t.name==="")return this;const e=this.At,i=e.indexOf(t);if(e.delete(t)){const n=t.Vt.copy().iterator;for(;n.next();){const o=n.value,r=o.layerName;r!==t.name?o.layerName=r:o.layerName=""}this.Fe!==null&&this.raiseChangedEvent(4,"layers",this,t,null,i,null),this.N(),this.invalidateDocumentBounds()}return this}findLayer(t){const e=this.layers;for(;e.next();){const i=e.value;if(i.name===t)return i}return null}findRouter(t){for(const e of this.wf)if(e.name===t)return e;return null}addModelChangedListener(t){return U.S(t,Diagram,"addModelChangedListener:listener"),this.oo===null&&(this.oo=new List),this.oo.add(t),this.model&&this.model.addChangedListener(t),this}removeModelChangedListener(t){return U.S(t,Diagram,"removeModelChangedListener:listener"),this.oo!==null&&(this.oo.delete(t),this.oo.count===0&&(this.oo=null)),this.model.removeChangedListener(t),this}addChangedListener(t){return U.S(t,Diagram,"addChangedListener:listener"),this.Hr===null&&(this.Hr=new List),this.Hr.add(t),this}removeChangedListener(t){return U.S(t,Diagram,"removeChangedListener:listener"),this.Hr!==null&&(this.Hr.delete(t),this.Hr.count===0&&(this.Hr=null)),this}_2(t){if(!this.skipsUndoManager&&!this.model.skipsUndoManager&&this.model.undoManager.handleChanged(t),t.change!==1&&(this.isModified=!0),this.Hr!==null){const e=this.Hr,i=e.length;for(let s=0;s<i;s++)e.elt(s)(t)}}raiseChangedEvent(t,e,i,s,n,o,r){o===void 0&&(o=null),r===void 0&&(r=null);const l=new ChangedEvent;l.diagram=this,l.change=t,l.propertyName=e,l.object=i,l.oldValue=s,l.oldParam=o,l.newValue=n,l.newParam=r,this._2(l)}raiseChanged(t,e,i,s,n){this.raiseChangedEvent(2,t,this,e,i,s,n)}t(t,e,i,s,n){this.raiseChangedEvent(2,t,this,e,i,s,n)}get partAdded(){return this.Dp}set partAdded(t){this.partAdded!==t&&(this.Dp=t)}get partRemoved(){return this.Fp}set partRemoved(t){this.partRemoved!==t&&(this.Fp=t)}get animationManager(){return this.As}get undoManager(){return this.Fe.undoManager}get skipsUndoManager(){return this.Xo}set skipsUndoManager(t){U.s(t,"boolean",Diagram,"skipsUndoManager"),this.Xo=t,this.Fe.skipsUndoManager=t}get delaysLayout(){return this.zb}set delaysLayout(t){this.zb=t}AL(t,e){if(t===null||t.diagram!==this)return;const i=this.ki;try{this.ki=!0;const s=t.change;if(s===2){const n=t.object,o=t.propertyName,r=t.getValue(e);if(t.diagram.model.rt(n,o,r),n instanceof GraphObject){const l=n.part;l!==null&&(l.invalidateAdornments(),l instanceof Link&&(l.fromNode?.ti(l.fromPort),l.toNode?.ti(l.toPort)))}this.isModified=!0}else if(s===3){const n=t.object,o=t.newParam,r=t.newValue;if(n instanceof Panel)if(typeof o=="number"&&r instanceof GraphObject){e?n.hi(o):n.insertAt(o,r);const l=n.part;l!==null&&l.invalidateAdornments()}else typeof o=="number"&&r instanceof RowColumnDefinition&&(r.isRow?n.jA(o,e?void 0:r):n.WA(o,e?void 0:r));else if(n instanceof Layer){const l=t.oldParam===!0;typeof o=="number"&&r instanceof Part&&(e?(l||(r.isSelected=!1,r.isHighlighted=!1,r.invalidateAdornments()),n.hi(l?o:-1,r,l)):n.xh(o,r,l))}else n instanceof Diagram?typeof o=="number"&&r instanceof Layer&&(e?this.qA(o):this.ll(r,o)):U.n("unknown ChangeType.Insert object: "+t.toString());this.isModified=!0}else if(s===4){const n=t.object,o=t.oldParam,r=t.oldValue;if(n instanceof Panel)typeof o=="number"&&r instanceof GraphObject?e?n.insertAt(o,r):n.hi(o):typeof o=="number"&&r instanceof RowColumnDefinition&&(r.isRow?n.jA(o,e?r:void 0):n.WA(o,e?r:void 0));else if(n instanceof Layer){const l=t.newParam===!0;typeof o=="number"&&r instanceof Part&&(e?n.Vt.indexOf(r)<0&&n.xh(o,r,l):(l||(r.isSelected=!1,r.isHighlighted=!1,r.invalidateAdornments()),n.hi(l?o:-1,r,l)))}else n instanceof Diagram?typeof o=="number"&&r instanceof Layer&&(e?this.ll(r,o):this.qA(o)):U.n("unknown ChangeType.Remove object: "+t.toString());this.isModified=!0}else s===1||U.n("unknown ChangedEvent: "+t.toString())}finally{this.ki=i}}startTransaction(t){return this.undoManager.startTransaction(t)}commitTransaction(t){return this.undoManager.commitTransaction(t)}rollbackTransaction(){return this.undoManager.rollbackTransaction()}commit(t,e){let i=e;i===void 0&&(i="");const s=this.skipsUndoManager,n=this.model.skipsUndoManager;i===null&&(this.skipsUndoManager=!0,i=""),this.undoManager.startTransaction(i);let o=!1;try{t(this),o=!0}finally{o?this.undoManager.commitTransaction(i):this.undoManager.rollbackTransaction(),this.skipsUndoManager=s,this.model.skipsUndoManager=n}}updateAllTargetBindings(t){this.partManager.updateAllTargetBindings(t)}updateAllThemeBindings(){if(this.partManager.updateAllThemeBindings(),this.cs!==null){const t=this.cs.part;t!==null&&t.Ho()}}setDivBackground(t){this.div&&(this.div.style.backgroundColor=t)}updateAllRelationshipsFromData(){this.partManager.updateAllRelationshipsFromData()}Op(){const t=this.T,e=this.it,i=this.ft;t.Xe(),e!==1&&t.it(e),(i.x!==0||i.y!==0)&&t.js(-i.x,-i.y)}JA(t,e){const i=this.animationManager;if(this.Wt||this.vs){this.it=e,this.xa(),this.N(),this.Oh(),i.cA(t,this.it),this.Op();return}if(this.st===null){this.it=e,this.Op();return}this.Wt=!0;const n=this.viewportBounds.copy(),o=this.bt,r=this.kt;let l=this.zoomPoint.x,a=this.zoomPoint.y;const h=this.contentAlignment;isNaN(l)&&(h.isSide()?h.includesSide(Spot.LeftSide)?l=0:h.includesSide(Spot.RightSide)&&(l=o-1):h.isSpot()?l=h.x*(o-1):l=o/2),isNaN(a)&&(h.isSide()?h.includesSide(Spot.TopSide)?a=0:h.includesSide(Spot.BottomSide)&&(a=r-1):h.isSpot()?a=h.y*(r-1):a=r/2),this.scaleComputation!==null&&!this.animationManager.defaultAnimation.isAnimating&&(e=this.scaleComputation(this,e)),e<this.minScale&&(e=this.minScale),e>this.maxScale&&(e=this.maxScale);const c=Point.O(this.ft.x+l/t-l/e,this.ft.y+a/t-a/e);this.position=c,Point.i(c),this.it=e,this.Op(),this.xa(),this.Wt=!1,this.onViewportBoundsChanged(n,this.viewportBounds,t,!1),this.tn(!1),i.cA(t,this.it),this.N()}Y2(){const t=this.At.r;for(let e=0;e<t.length;e++)t[e].yA()}onViewportBoundsChanged(t,e,i,s){if(t.equals(e))return;s===void 0&&(s=!1),s||this.Oh(),this.Rs();const n=this.layout;n!==null&&n.isViewportSized&&this.autoScale===1&&(t.width!==e.width||t.height!==e.height)&&n.g();const o=this.currentTool;this.wd===!0&&o instanceof ToolManager&&!this.animationManager.isTicking&&(this.lastInput.documentPoint=this.transformViewToDoc(this.lastInput.viewPoint),o.VL(this)),this.Wt||this.invalidateViewport(t,e),this.Sd();const r=this.At.r;this.Cn(r,r.length,this,this.viewportBounds),this.je.scale=i,this.je.position.x=t.x,this.je.position.y=t.y,this.je.bounds.h(t),this.je.canvasSize.width=Math.round(t.width*i),this.je.canvasSize.height=Math.round(t.height*i),this.je.newCanvasSize.width=this.bt,this.je.newCanvasSize.height=this.kt,this.je.isScroll=s,this.D("ViewportBoundsChanged",this.je,t),this.isVirtualized&&this.links.each(l=>{l.isAvoiding&&l.actualBounds.intersectsRect(e)&&l.ee()})}Sd(){this.gf=!1,this.N()}j2(t){const e=this.cs;if(e===null||!e.visible)return;const i=e.part;if(i===null||i.layer===null)return;const s=t!==void 0?t:this.e1;if(!s.isReal())return;const n=s.width,o=s.height;if(e.scale=1,e.angle=0,i.layer.isViewportAligned)e.width=n*this.scale,e.height=o*this.scale,i.alignment=Spot.TopLeft;else{e.Te===null&&(e.Te=new GridPanelSettings);const r=e.Te.bf;if(!r.isReal())return;e.width=n+r.width*2,e.height=o+r.height*2,this.Rs();const l=Point.l();G.dm(s.x,s.y,0,0,r.width,r.height,l),l.offset(-r.width,-r.height),i.location=l,Point.i(l)}i.ensureBounds()}clearSelection(t){t===void 0&&(t=!1);const e=this.selection;if(e.count===0)return;t||this.D("ChangingSelection",e);const i=e.toArray(),s=i.length;for(let n=0;n<s;n++){const o=i[n];o.isSelected=!1}e._t(),e.clear(),e.b(),t||this.D("ChangedSelection",e)}select(t){t!==null&&t.diagram===this&&(!t.isSelected||this.selection.count>1)&&(this.D("ChangingSelection",this.selection),this.clearSelection(!0),t.isSelected=!0,this.D("ChangedSelection",this.selection))}selectCollection(t){if(this.D("ChangingSelection",this.selection),this.clearSelection(!0),Array.isArray(t)){const e=t.length;for(let i=0;i<e;i++){const s=t[i];s instanceof Part||U.n("Diagram.selectCollection given something that is not a Part: "+s),s.isSelected=!0}}else{const e=t.iterator;for(;e.next();){const i=e.value;i instanceof Part||U.n("Diagram.selectCollection given something that is not a Part: "+i),i.isSelected=!0}}this.D("ChangedSelection",this.selection)}clearHighlighteds(){const t=this.highlighteds;if(t.count>0){const e=t.toArray(),i=e.length;for(let s=0;s<i;s++){const n=e[s];n.isHighlighted=!1}t._t(),t.clear(),t.b()}}highlight(t){t!==null&&t.diagram===this&&(!t.isHighlighted||this.highlighteds.count>1)&&(this.clearHighlighteds(),t.isHighlighted=!0)}highlightCollection(t){const e=new GSet().addAll(t),s=this.highlighteds.copy().removeAll(e).iterator;for(;s.next();){const o=s.value;o.isHighlighted=!1}const n=e.iterator;for(;n.next();){const o=n.value;o instanceof Part||U.n("Diagram.highlightCollection given something that is not a Part: "+o),o.isHighlighted=!0}}scroll(t,e,i){i===void 0&&(i=1);const s=e==="up"||e==="down";let n=0;const o=Point.l();if(t==="pixel")n=i;else if(t==="line")n=i*(s?this.scrollVerticalLineChange:this.scrollHorizontalLineChange);else if(t==="page"){let l=s?this.viewportBounds.height:this.viewportBounds.width;if(l*=this.scale,l!==0){const a=Math.max(l-(s?this.scrollVerticalLineChange:this.scrollHorizontalLineChange),0);n=i*a}}else if(t==="document"){const l=this.documentBounds,a=this.viewportBounds;e==="up"?this.position=o.e(a.x,l.y):e==="left"?this.position=o.e(l.x,a.y):e==="down"?this.position=o.e(a.x,l.bottom-a.height):e==="right"&&(this.position=o.e(l.right-a.width,a.y)),Point.i(o);return}else U.n("scrolling unit must be 'pixel', 'line', 'page', or 'document', not: "+t);n/=this.scale;const r=this.position;e==="up"?this.position=o.e(r.x,r.y-n):e==="down"?this.position=o.e(r.x,r.y+n):e==="left"?this.position=o.e(r.x-n,r.y):e==="right"?this.position=o.e(r.x+n,r.y):U.n("scrolling direction must be 'up', 'down', 'left', or 'right', not: "+e),Point.i(o)}scrollToRect(t){const e=this.viewportBounds;if(e.containsRect(t))return;const i=t.center;i.x-=e.width/2,i.y-=e.height/2,this.position=i}centerRect(t){const e=this.viewportBounds,i=t.center;i.x-=e.width/2,i.y-=e.height/2,this.position=i}transformDocToView(t,e){return e===void 0?t.copy().T(this.T):e.set(t).T(this.T)}transformViewToDoc(t,e){return e===void 0?t.copy().Ai(this.T):e.set(t).Ai(this.T)}bO(t){return t.Ai(this.T)}static None=1;static Uniform=2;static UniformToFill=3;static CycleAll=1;static CycleNotDirected=2;static CycleNotDirectedFast=3;static CycleNotUndirected=4;static CycleDestinationTree=5;static CycleSourceTree=6;static DocumentScroll=1;static InfiniteScroll=2;static TreeParentCollapsed=1;static AllParentsCollapsed=2;static AnyParentsCollapsed=3;get opacity(){return this.ie}set opacity(t){const e=this.ie;e!==t&&(U.s(t,"number",Diagram,"opacity"),(t<0||t>1)&&U.$(t,"0 <= value <= 1",Diagram,"opacity"),this.ie=t,this.t("opacity",e,t),this.N())}get validCycle(){return this.Ob}set validCycle(t){const e=this.Ob;e!==t&&(this.Ob=t,this.t("validCycle",e,t))}get layers(){return this.At.iterator}get isModelReadOnly(){const t=this.Fe;return t===null?!1:t.isReadOnly}set isModelReadOnly(t){const e=this.Fe;e!==null&&(e.isReadOnly=t)}get isReadOnly(){return this.Go}set isReadOnly(t){const e=this.Go;e!==t&&(U.s(t,"boolean",Diagram,"isReadOnly"),this.Go=t,this.t("isReadOnly",e,t))}get isEnabled(){return this.Ye}set isEnabled(t){const e=this.Ye;e!==t&&(U.s(t,"boolean",Diagram,"isEnabled"),this.Ye=t,this.t("isEnabled",e,t))}get allowClipboard(){return this.Xb}set allowClipboard(t){const e=this.Xb;e!==t&&(U.s(t,"boolean",Diagram,"allowClipboard"),this.Xb=t,this.t("allowClipboard",e,t))}get allowCopy(){return this.ta}set allowCopy(t){const e=this.ta;e!==t&&(U.s(t,"boolean",Diagram,"allowCopy"),this.ta=t,this.t("allowCopy",e,t))}get allowDelete(){return this.ea}set allowDelete(t){const e=this.ea;e!==t&&(U.s(t,"boolean",Diagram,"allowDelete"),this.ea=t,this.t("allowDelete",e,t))}get allowDragOut(){return this.Gb}set allowDragOut(t){const e=this.Gb;e!==t&&(U.s(t,"boolean",Diagram,"allowDragOut"),this.Gb=t,this.t("allowDragOut",e,t))}get allowDrop(){return this.Yb}set allowDrop(t){const e=this.Yb;e!==t&&(U.s(t,"boolean",Diagram,"allowDrop"),this.Yb=t,this.t("allowDrop",e,t))}get allowTextEdit(){return this.ia}set allowTextEdit(t){const e=this.ia;e!==t&&(U.s(t,"boolean",Diagram,"allowTextEdit"),this.ia=t,this.t("allowTextEdit",e,t))}get allowGroup(){return this.sa}set allowGroup(t){const e=this.sa;e!==t&&(U.s(t,"boolean",Diagram,"allowGroup"),this.sa=t,this.t("allowGroup",e,t))}get allowUngroup(){return this.na}set allowUngroup(t){const e=this.na;e!==t&&(U.s(t,"boolean",Diagram,"allowUngroup"),this.na=t,this.t("allowUngroup",e,t))}get allowInsert(){return this.Kb}set allowInsert(t){const e=this.Kb;e!==t&&(U.s(t,"boolean",Diagram,"allowInsert"),this.Kb=t,this.t("allowInsert",e,t))}get allowLink(){return this.oa}set allowLink(t){const e=this.oa;e!==t&&(U.s(t,"boolean",Diagram,"allowLink"),this.oa=t,this.t("allowLink",e,t))}get allowRelink(){return this.ra}set allowRelink(t){const e=this.ra;e!==t&&(U.s(t,"boolean",Diagram,"allowRelink"),this.ra=t,this.t("allowRelink",e,t))}get allowMove(){return this.la}set allowMove(t){const e=this.la;e!==t&&(U.s(t,"boolean",Diagram,"allowMove"),this.la=t,this.t("allowMove",e,t))}get allowReshape(){return this.aa}set allowReshape(t){const e=this.aa;e!==t&&(U.s(t,"boolean",Diagram,"allowReshape"),this.aa=t,this.t("allowReshape",e,t))}get allowResize(){return this.ha}set allowResize(t){const e=this.ha;e!==t&&(U.s(t,"boolean",Diagram,"allowResize"),this.ha=t,this.t("allowResize",e,t))}get allowRotate(){return this.ca}set allowRotate(t){const e=this.ca;e!==t&&(U.s(t,"boolean",Diagram,"allowRotate"),this.ca=t,this.t("allowRotate",e,t))}get allowSelect(){return this.fa}set allowSelect(t){const e=this.fa;e!==t&&(U.s(t,"boolean",Diagram,"allowSelect"),this.fa=t,this.t("allowSelect",e,t))}get allowUndo(){return this.Hb}set allowUndo(t){const e=this.Hb;e!==t&&(U.s(t,"boolean",Diagram,"allowUndo"),this.Hb=t,this.t("allowUndo",e,t))}get allowZoom(){return this.qb}set allowZoom(t){const e=this.qb;e!==t&&(U.s(t,"boolean",Diagram,"allowZoom"),this.qb=t,this.t("allowZoom",e,t))}get hasVerticalScrollbar(){return this.cd}set hasVerticalScrollbar(t){const e=this.cd;e!==t&&(U.s(t,"boolean",Diagram,"hasVerticalScrollbar"),this.cd=t,this.Oh(),this.N(),this.t("hasVerticalScrollbar",e,t),this.tn(!1))}get hasHorizontalScrollbar(){return this.hd}set hasHorizontalScrollbar(t){const e=this.hd;e!==t&&(U.s(t,"boolean",Diagram,"hasHorizontalScrollbar"),this.hd=t,this.Oh(),this.N(),this.t("hasHorizontalScrollbar",e,t),this.tn(!1))}get allowHorizontalScroll(){return this.jb}set allowHorizontalScroll(t){const e=this.jb;e!==t&&(U.s(t,"boolean",Diagram,"allowHorizontalScroll"),this.jb=t,this.t("allowHorizontalScroll",e,t),this.tn(!1))}get allowVerticalScroll(){return this.Wb}set allowVerticalScroll(t){const e=this.Wb;e!==t&&(U.s(t,"boolean",Diagram,"allowVerticalScroll"),this.Wb=t,this.t("allowVerticalScroll",e,t),this.tn(!1))}get scrollHorizontalLineChange(){return this.Jb}set scrollHorizontalLineChange(t){const e=this.Jb;e!==t&&(U.s(t,"number",Diagram,"scrollHorizontalLineChange"),t<0&&U.$(t,">= 0",Diagram,"scrollHorizontalLineChange"),this.Jb=t,this.t("scrollHorizontalLineChange",e,t))}get scrollVerticalLineChange(){return this.$b}set scrollVerticalLineChange(t){const e=this.$b;e!==t&&(U.s(t,"number",Diagram,"scrollVerticalLineChange"),t<0&&U.$(t,">= 0",Diagram,"scrollVerticalLineChange"),this.$b=t,this.t("scrollVerticalLineChange",e,t))}get lastInput(){return this.Sh}set lastInput(t){this.Sh=t}get previousInput(){return this.nl}set previousInput(t){this.nl=t}get firstInput(){return this.Sp}set firstInput(t){this.Sp=t}get currentCursor(){return this.Ib}set currentCursor(t){if(t===""&&(t=this.yp),this.Ib!==t){U.s(t,"string",Diagram,"currentCursor");const i=this.st,s=this.Ct;if(i===null||s===null)return;this.Ib=t;const n=i.style.cursor;i.style.cursor=t,s.style.cursor=t,i.style.cursor===n&&(i.style.cursor="-webkit-"+t,s.style.cursor="-webkit-"+t,i.style.cursor===n&&(i.style.cursor="-moz-"+t,s.style.cursor="-moz-"+t,i.style.cursor===n&&(i.style.cursor=t,s.style.cursor=t)))}}get defaultCursor(){return this.yp}set defaultCursor(t){t===""&&(t="auto");const e=this.yp;e!==t&&(U.s(t,"string",Diagram,"defaultCursor"),this.yp=t,this.t("defaultCursor",e,t))}get click(){return this.qr}set click(t){const e=this.qr;e!==t&&(t!==null&&U.S(t,Diagram,"click"),this.qr=t,this.t("click",e,t))}get doubleClick(){return this.jr}set doubleClick(t){const e=this.jr;e!==t&&(t!==null&&U.S(t,Diagram,"doubleClick"),this.jr=t,this.t("doubleClick",e,t))}get contextClick(){return this.Wr}set contextClick(t){const e=this.Wr;e!==t&&(t!==null&&U.S(t,Diagram,"contextClick"),this.Wr=t,this.t("contextClick",e,t))}get mouseOver(){return this.Jr}set mouseOver(t){const e=this.Jr;e!==t&&(t!==null&&U.S(t,Diagram,"mouseOver"),this.Jr=t,this.t("mouseOver",e,t))}get mouseHover(){return this.$r}set mouseHover(t){const e=this.$r;e!==t&&(t!==null&&U.S(t,Diagram,"mouseHover"),this.$r=t,this.t("mouseHover",e,t))}get mouseHold(){return this.Zr}set mouseHold(t){const e=this.Zr;e!==t&&(t!==null&&U.S(t,Diagram,"mouseHold"),this.Zr=t,this.t("mouseHold",e,t))}get mouseDragOver(){return this.Eb}set mouseDragOver(t){const e=this.Eb;e!==t&&(t!==null&&U.S(t,Diagram,"mouseDragOver"),this.Eb=t,this.t("mouseDragOver",e,t))}get mouseDrop(){return this.Qr}set mouseDrop(t){const e=this.Qr;e!==t&&(this.Qr=t,this.t("mouseDrop",e,t))}get handlesDragDropForTopLevelParts(){return this.Ub}set handlesDragDropForTopLevelParts(t){const e=this.Ub;e!==t&&(U.s(t,"boolean",Diagram,"handlesDragDropForTopLevelParts"),this.Ub=t,this.t("handlesDragDropForTopLevelParts",e,t))}get mouseEnter(){return this._r}set mouseEnter(t){const e=this._r;e!==t&&(t!==null&&U.S(t,Diagram,"mouseEnter"),this._r=t,this.t("mouseEnter",e,t))}get mouseLeave(){return this.tl}set mouseLeave(t){const e=this.tl;e!==t&&(t!==null&&U.S(t,Diagram,"mouseLeave"),this.tl=t,this.t("mouseLeave",e,t))}get toolTip(){return this.el}set toolTip(t){const e=this.el;e!==t&&(this.el=t,this.t("toolTip",e,t))}get contextMenu(){return this.il}set contextMenu(t){const e=this.il;e!==t&&(this.il=t,this.t("contextMenu",e,t))}get commandHandler(){return this.w2}set commandHandler(t){const e=this.w2;e!==t&&(e&&e.doStop(),this.w2=t,t.Bo(this),t.doStart())}get toolManager(){return this.g2}set toolManager(t){this.g2!==t&&(this.g2=t,t.diagram=this)}get defaultTool(){return this.m2}set defaultTool(t){const e=this.m2;e!==t&&(this.m2=t,t.diagram=this,this.currentTool===e&&(this.currentTool=t))}get currentTool(){return this.p2}set currentTool(t){const e=this.p2;e&&(e.isActive&&e.doDeactivate(),e.cancelWaitAfter(),e.doStop()),t===null&&(t=this.defaultTool),t!==null&&(this.p2=t,t.diagram=this,t.doStart())}get selection(){return this.wA}get maxSelectionCount(){return this.t1}set maxSelectionCount(t){const e=this.t1;if(e!==t)if(U.s(t,"number",Diagram,"maxSelectionCount"),t>=0&&!isNaN(t)){if(this.t1=t,this.t("maxSelectionCount",e,t),!this.undoManager.isUndoingRedoing){const i=this.selection.count-t;if(i>0){this.D("ChangingSelection",this.selection);const s=this.selection.toArray();for(let n=0;n<i;n++)s[n].isSelected=!1;this.D("ChangedSelection",this.selection)}}}else U.$(t,">= 0",Diagram,"maxSelectionCount")}get nodeSelectionAdornmentTemplate(){return this.kp}set nodeSelectionAdornmentTemplate(t){const e=this.kp;e!==t&&(this.kp=t.Ut(),this.t("nodeSelectionAdornmentTemplate",e,t))}get groupSelectionAdornmentTemplate(){return this.s1}set groupSelectionAdornmentTemplate(t){const e=this.s1;e!==t&&(this.s1=t.Ut(),this.t("groupSelectionAdornmentTemplate",e,t))}get linkSelectionAdornmentTemplate(){return this.o1}set linkSelectionAdornmentTemplate(t){const e=this.o1;e!==t&&(this.o1=t.Ut(),this.t("linkSelectionAdornmentTemplate",e,t))}get highlighteds(){return this.xA}get isModified(){const t=this.undoManager;return t.isEnabled?t.currentTransaction!==null?!0:this.dd&&this.Ns!==t.historyIndex:this.dd}set isModified(t){if(this.dd!==t){U.s(t,"boolean",Diagram,"isModified"),this.dd=t;const i=this.undoManager;!t&&i.isEnabled&&(this.Ns=i.historyIndex),t||this.$A()}}$A(){const t=this.isModified;this.S2!==t&&(this.S2=t,this.D("Modified"))}get model(){return this.Fe}set model(t){const e=this.Fe;if(e!==t){this.currentTool.doCancel(),e&&e.undoManager!==t.undoManager&&e.undoManager.isInTransaction&&U.n("Do not replace a Diagram.model while a transaction is in progress.");const i=this.DA(!0);this.lo=!1,this.ad=!0,this.Ns=-2,this.Ur=!1;const s=this.Wt;this.Wt=!0,this.animationManager._l("Model"),e&&(this.oo!==null&&this.oo.each(n=>e.removeChangedListener(n)),e.removeChangedListener(this.df)),this.Fe=t,this.partManager=this.JO(this.Fe.type),this.initializePartManager(this.partManager);for(let n=0;n<i.length;n++)this.add(i[n]);t.addChangedListener(this.P2),this.partManager.tC(),t.removeChangedListener(this.P2),t.addChangedListener(this.df),this.oo!==null&&this.oo.each(n=>t.addChangedListener(n)),this.Wt=s,this.invalidateDocumentBounds(),this.Wt||this.N(),e&&t.undoManager.copyProperties(e.undoManager)}}get themeManager(){return this.U2}set themeManager(t){const e=this.U2;e!==t&&(e&&e.removeDiagram(this),this.U2=t,t!==null&&t.addDiagram(this))}initializePartManager(t){}static B2(t,e){Diagram.PA.set(t,e)}static get licenseKey(){return Diagram.eC.last()}static set licenseKey(t){Diagram.eC.add(t.replace(/\s/g,""))}static get version(){return Diagram.$O}static eC=new List;static $O="4.0.0";JO(t){const e=Diagram.PA.get(t);return e!==null?new e:new PartManager}get Y(){return this.k2}set Y(t){this.k2=t}get pb(){return this.bA}ZO(t){if(t.model!==this.model)return;const e=t.change,i=t.propertyName;if(e===1&&i[0]==="S"){if(i==="StartingFirstTransaction"){const s=this,n=this.toolManager;n.mouseDownTools.each(o=>o.diagram=s),n.mouseMoveTools.each(o=>o.diagram=s),n.mouseUpTools.each(o=>o.diagram=s),this.routers.each(o=>o.diagram=s),!this.vs&&!this.lo&&(this.uf=!0,this.ad&&(this.Ur=!0))}else if(i==="StartingUndo"||i==="StartingRedo"){const s=this.animationManager;this.skipsUndoManager||(s.defaultAnimation.isAnimating&&s.stopAnimation(),s.getBundleAnimation().isAnimating&&s.getBundleAnimation().stop()),this.D("ChangingSelection",this.selection)}else if(i==="StartedTransaction"){const s=this.animationManager;s.defaultAnimation.isAnimating&&!this.skipsUndoManager&&s.stopAnimation()}return}if(this.Y){this.Y=!1;try{if(t.modelChange===""&&e===1){(i==="FinishedUndo"||i==="FinishedRedo")&&(this.D("ChangedSelection",this.selection),this.Oe());const s=this.animationManager;i==="RolledBackTransaction"&&s.stopAnimation(),this.uA(),this.uf=!0,this.maybeUpdate(),(this.undoManager.transactionLevel===0||this.undoManager.transactionLevel===1)&&s.KM(),i==="CommittedTransaction"&&this.undoManager.isJustDiscarded&&(this.Ns=Math.min(this.Ns,this.undoManager.historyIndex-1)),(i==="CommittedTransaction"||i==="RolledBackTransaction")&&this.undoManager.vx&&U.yn(()=>{this.isModified=!1},1);const n=t.isTransactionFinished;if(n&&(this.$A(),this.pb.clear(),this.animationManager.nO()),!this.Bb&&n&&this.lastInput.targetDiagram){this.Bb=!0;const o=this;U.yn(()=>{o.currentTool.standardMouseOver(),o.Bb=!1},10)}}}finally{this.Y=!0}}}get ki(){return this.b2}set ki(t){this.b2=t}get Ku(){return this.Vb}set Ku(t){this.Vb=t}VA(t){const e=t.F.r;for(const i of e)i instanceof Picture&&this.iC(i)}iC(t){const e=t.element;if(e===null||!root.HTMLImageElement||!(e instanceof HTMLImageElement)||(e.us instanceof GSet&&e.us.add(this),t.QO(),!e.Vp))return;const i=e.getAttribute("src")||"",s=this.pa.get(i);if(s===null){Picture.ZA(t,e);const n=[];n.push(t),this.pa.set(i,n)}else{for(let n=0;n<s.length;n++)if(s[n]===t)return;s.push(t)}}_O(t){const e=t.F.r,i=e.length;for(let s=0;s<i;s++)this.sC(e[s])}sC(t){if(!(t instanceof Picture))return;const e=t.element;if(e===null||!root.HTMLImageElement||!(e instanceof HTMLImageElement)||!e.Vp)return;const i=e.getAttribute("src")||"",s=this.pa.get(i);if(s!==null){for(let n=0;n<s.length;n++)if(s[n]===t){s.splice(n,1),s.length===0&&(this.pa.delete(i),Picture.tI(e),e.us instanceof GSet&&e.us.delete(this));return}}}FA(){Picture.clearCache(),this.pa.clear()}rebuildParts(){this.partManager.rebuildParts()}nf(t,e){this.As.nf(t,e)}sf(t,e){this.As.sf(t,e)}findPartForKey(t){return this.partManager.findPartForKey(t)}findNodeForKey(t){return this.partManager.findNodeForKey(t)}findLinkForKey(t){return this.partManager.findLinkForKey(t)}findPartForData(t){return this.partManager.findPartForData(t)}findNodeForData(t){return this.partManager.findNodeForData(t)}findLinkForData(t){return this.partManager.findLinkForData(t)}findNodesByExample(...t){return this.partManager.findNodesByExample(...t)}findLinksByExample(...t){return this.partManager.findLinksByExample(...t)}get nodeTemplate(){return this.sl.get("")}set nodeTemplate(t){const e=this.sl.get("");e!==t&&(this.sl.set("",t),this.t("nodeTemplate",e,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get nodeTemplateMap(){return this.sl}set nodeTemplateMap(t){const e=this.sl;e!==t&&(this.sl=t,this.t("nodeTemplateMap",e,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get groupTemplate(){return this.Ph.get("")}set groupTemplate(t){const e=this.Ph.get("");e!==t&&(this.Ph.set("",t),this.t("groupTemplate",e,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get groupTemplateMap(){return this.Ph}set groupTemplateMap(t){const e=this.Ph;e!==t&&(this.Ph=t,this.t("groupTemplateMap",e,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get linkTemplate(){return this.ma.get("")}set linkTemplate(t){const e=this.ma.get("");e!==t&&(this.ma.set("",t),this.t("linkTemplate",e,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get linkTemplateMap(){return this.ma}set linkTemplateMap(t){const e=this.ma;e!==t&&(this.ma=t,this.t("linkTemplateMap",e,t),this.undoManager.isUndoingRedoing||this.rebuildParts())}get isMouseCaptured(){return this.M2}set isMouseCaptured(t){const e=this.st;if(e===null)return;const i=e.gt;i instanceof SVGElement||(t?(this.lastInput.bubbles=!1,this.ve(i,"pointermove",this.Lh,!1),this.ve(i,"pointerdown",this.wa,!1),this.ve(i,"pointerup",this.Ah,!1),this.ve(i,"pointerout",this.Dh,!1),this.ve(i,"pointercancel",this.Fh,!1),this.Bt(root,"pointermove",this.Lh,!0),this.Bt(root,"pointerdown",this.wa,!0),this.Bt(root,"pointerup",this.Ah,!0),this.Bt(root,"pointerout",this.Dh,!0),this.Bt(root,"pointercancel",this.Fh,!0),this.ve(i,"wheel",this.Th,!1),this.Bt(root,"wheel",this.Th,!0),this.Bt(root,"selectstart",this.mh,!1)):(this.ve(root,"pointermove",this.Lh,!0),this.ve(root,"pointerdown",this.wa,!0),this.ve(root,"pointerup",this.Ah,!0),this.ve(root,"pointerout",this.Dh,!0),this.ve(root,"pointercancel",this.Fh,!0),this.Bt(i,"pointermove",this.Lh,!1),this.Bt(i,"pointerdown",this.wa,!1),this.Bt(i,"pointerup",this.Ah,!1),this.Bt(i,"pointerout",this.Dh,!1),this.Bt(i,"pointercancel",this.Fh,!1),this.ve(root,"wheel",this.Th,!0),this.ve(root,"selectstart",this.mh,!1),this.Bt(i,"wheel",this.Th,!1)),this.M2=t)}get position(){return this.ft}set position(t){if(this.ft.equals(t))return;const e=Point.l().h(this.ft),i=this.viewportBounds.copy();if(this.ft.h(t),this.animationManager.hA(e,this.ft),!this.Wt&&!(this.st===null&&!this.ud.isReal())){this.Wt=!0;const s=this.scale,n=this.bt/s,o=this.kt/s;this.G2(this.bp,n,o,this.cf,!1),this.Wt=!1}else this.xa(),this.Op();if(!this.Wt){const s=this.viewportBounds;this.onViewportBoundsChanged(i,s,this.it,!1)}Point.i(e)}get initialPosition(){return this.kb}set initialPosition(t){this.kb.equals(t)||(this.kb=t.C())}get initialScale(){return this.Pb}set initialScale(t){this.Pb!==t&&(U.s(t,"number",Diagram,"initialScale"),this.Pb=t)}get grid(){return this.cs===null&&(this.cs=this.RA()),this.cs}set grid(t){let e=this.cs;if(e!==t){e===null&&(this.cs=this.RA(),e=this.cs),t.type!==Panel.Grid&&U.n("Diagram.grid must be a Panel of type Panel.Grid");const i=e.panel;i!==null&&i.remove(e),this.cs=t,t.name="GRID",i!==null&&i.add(t),this.gf=!1,this.N(),this.t("grid",e,t)}}get viewportBounds(){return this.e1}xa(){const t=this.e1,e=this.ft,i=this.it;t.e(e.x,e.y,Math.max(this.bt,0)/i,Math.max(this.kt,0)/i),this.Rs()}get viewSize(){return this.ud}set viewSize(t){const e=this.viewSize;if(!e.equals(t)){t=t.C(),this.ud=t;let i=0,s=0;t.isReal()?(i=t.width,s=t.height):this.Ct!==null&&(i=this.Ct.clientWidth||1,s=this.Ct.clientHeight||1),this.bt=i,this.kt=s,this.xa(),this.invalidateDocumentBounds(),this.t("viewSize",e,t),this.N()}}get fixedBounds(){return this.Nb}set fixedBounds(t){const e=this.Nb;e.equals(t)||((t.width===-1/0||t.height===1/0||t.height===-1/0)&&U.n("fixedBounds width/height must not be Infinity"),t=t.C(),this.Nb=t,this.invalidateDocumentBounds(),this.t("fixedBounds",e,t))}get scrollMargin(){return this.bh}set scrollMargin(t){typeof t=="number"&&(t=new Margin(t));const e=this.bh;e.equals(t)||(t=t.C(),this.bh=t,this.t("scrollMargin",e,t),this.f1())}get scrollMode(){return this.yh}set scrollMode(t){const e=this.yh;e!==t&&(this.yh=t,t===1&&this.tn(!1),this.t("scrollMode",e,t),this.Oh(),this.N())}get scrollsPageOnFocus(){return this.Tb}set scrollsPageOnFocus(t){const e=this.Tb;e!==t&&(U.s(t,"boolean",Diagram,"scrollsPageOnFocus"),this.Tb=t,this.t("scrollsPageOnFocus",e,t))}get positionComputation(){return this.Lb}set positionComputation(t){const e=this.Lb;e!==t&&(t!==null&&U.S(t,Diagram,"positionComputation"),this.Lb=t,this.tn(!1),this.t("positionComputation",e,t))}get scaleComputation(){return this.Ab}set scaleComputation(t){const e=this.Ab;e!==t&&(t!==null&&U.S(t,Diagram,"scaleComputation"),this.Ab=t,this.JA(this.scale,this.scale),this.t("scaleComputation",e,t))}get documentBounds(){return this.bp}QA(t){this.Mh=!1;let e=this.bp;e.equals(t)||(e=e.copy(),this.bp.h(t),this.tn(!1),this.h2(t),this.D("DocumentBoundsChanged",void 0,e),this.Oh(),this.N())}ensureBounds(){if(this.Mh){const t=Rect.l();this.QA(this.computeBounds(t)),Rect.i(t)}}get isVirtualized(){return this.i1}set isVirtualized(t){const e=this.i1;e!==t&&(U.s(t,"boolean",Diagram,"isVirtualized"),this.i1=t,this.t("isVirtualized",e,t))}get scale(){return this.it}set scale(t){const e=this.it;e!==t&&this.JA(e,t)}get defaultScale(){return this.Mp}set defaultScale(t){this.Mp=t}get autoScale(){return this.da}set autoScale(t){const e=this.da;e!==t&&(this.da=t,this.t("autoScale",e,t),t!==1&&this.tn(!1))}get initialAutoScale(){return this.Yr}set initialAutoScale(t){const e=this.Yr;e!==t&&(this.Yr=t,this.t("initialAutoScale",e,t))}get initialViewportSpot(){return this.Fb}set initialViewportSpot(t){const e=this.Fb;e!==t&&(t.isSpot()||U.n("initialViewportSpot must be a specific Spot: "+t),this.Fb=t,this.t("initialViewportSpot",e,t))}get initialDocumentSpot(){return this.Db}set initialDocumentSpot(t){const e=this.Db;e!==t&&(t.isSpot()||U.n("initialViewportSpot must be a specific Spot: "+t),this.Db=t,this.t("initialDocumentSpot",e,t))}get minScale(){return this.Sb}set minScale(t){const e=this.Sb;e!==t&&(t>0?(this.Sb=t,this.t("minScale",e,t),t>this.scale&&(this.scale=t)):U.$(t,"> 0",Diagram,"minScale"))}get maxScale(){return this.Mb}set maxScale(t){const e=this.Mb;e!==t&&(t>0?(this.Mb=t,this.t("maxScale",e,t),t<this.scale&&(this.scale=t)):U.$(t,"> 0",Diagram,"maxScale"))}get zoomPoint(){return this.Cb}set zoomPoint(t){this.Cb.equals(t)||(t=t.C(),this.Cb=t)}get contentAlignment(){return this.cf}set contentAlignment(t){const e=this.cf;e.equals(t)||(t=t.C(),this.cf=t,this.t("contentAlignment",e,t),this.tn(!1))}get initialContentAlignment(){return this.gp}set initialContentAlignment(t){const e=this.gp;e.equals(t)||(t=t.C(),this.gp=t,this.t("initialContentAlignment",e,t))}get padding(){return this.se}set padding(t){typeof t=="number"&&(t=new Margin(t));const e=this.se;e.equals(t)||(t=t.C(),this.se=t,this.invalidateDocumentBounds(),this.t("padding",e,t))}get partManager(){return this.A2}set partManager(t){const e=this.A2;e!==t&&(t.diagram!==null&&U.n("Cannot share PartManagers between Diagrams: "+t.toString()),e&&e.Bo(null),this.A2=t,t.Bo(this))}get nodes(){return this.partManager.nodes.iterator}get links(){return this.partManager.links.iterator}get parts(){return this.partManager.parts.iterator}findTopLevelNodesAndLinks(){const t=new GSet,e=this.nodes;for(;e.next();){const s=e.value;s.isTopLevel&&t.add(s)}const i=this.links;for(;i.next();){const s=i.value;s.isTopLevel&&t.add(s)}return t.iterator}findTopLevelGroups(){return this.rl.iterator}get routers(){return this.wf}doLinkRouting(t){this.zo=!0;const e=this.wf.r;for(let i=0;i<e.length;i++)e[i].canRoute(t)&&e[i].routeLinks(this.Kr,t);this.zo=!1}get layout(){return this.ci}set layout(t){const e=this.ci;e!==t&&(this.ci=t,t.diagram=this,t.group=null,this.ol=!0,this.t("layout",e,t),this.requestUpdate())}layoutDiagram(t){this.Oe(),t&&this.M1(!0),this.vs?this.q2(!1,this.Hl||this.wf.count!==0&&this.Tn.size!==0):(this.uf=!0,this.Ar())}M1(t){const e=this.rl.iterator;for(;e.next();)this._A(e.value,t);this.layout&&(t?this.layout.isValidLayout=!1:this.layout.g())}_A(t,e){if(t===null)return;const i=t.Ih.iterator;for(;i.next();){const s=i.value;this._A(s,e)}t.layout!==null&&(e?t.layout.isValidLayout=!1:t.layout.g())}q2(t,e){if(this.zb)return;const i=this.Y;this.Y=!0;const s="Layout",n=this.undoManager.transactionLevel,o=this.layout,r=this.animationManager;try{n===0&&(this.undoManager.Yl=!0,this.startTransaction(s)),n<=1&&!r.defaultAnimation.isAnimating&&!r.Ne&&(t||r._l(s)),this.ol=!1;let l=this.rl.iterator;for(;l.next();)this.Md(l.value),this.tD(l.value,t,n,e);let a=!1;if(o.isValidLayout||(!t||o.isRealtime||o.isRealtime===null||n===0?(o.doLayout(this),this.Md(this),a=!0,o.isValidLayout=!0):this.ol=!0),a||this.Md(this),this.doLinkRouting(this),this.Kr.clear(),this.kh.size!==0){for(let h=0;h<23&&this.kh.size!==0;h++){for(l=this.rl.iterator;l.next();)this.eD(l.value);const c=this.Kr;this.Kr=this.kh,this.kh=c,this.Md(this),this.doLinkRouting(this)}this.Kr.clear(),this.kh.clear()}}finally{const l=this.undoManager.Yl;n===0&&(this.commitTransaction(s),this.undoManager.Yl=!1),l&&(n===0||n===1)&&r.KM(),this.ol&&(this.ol=!o.isValidLayout),this.Y=i}}tD(t,e,i,s){const n=t.Ih.iterator;for(;n.next();)this.tD(n.value,e,i,s);const o=t.layout;o!==null&&!o.isValidLayout?!e||o.isRealtime||i===0?(t.Eh=!t.location.isReal(),o.doLayout(t),t.invalidateLayout(32),this.k1(t),this.Md(t),this.doLinkRouting(t),o.isValidLayout=!0):(this.doLinkRouting(t),this.ol=!0):s&&this.doLinkRouting(t)}eD(t){const e=t.Ih.iterator;for(;e.next();)this.eD(e.value);this.Md(t),this.doLinkRouting(t)}get isTreePathToChildren(){return this.vb}set isTreePathToChildren(t){const e=this.vb;if(e!==t&&(U.s(t,"boolean",Diagram,"isTreePathToChildren"),this.vb=t,this.t("isTreePathToChildren",e,t),!this.undoManager.isUndoingRedoing)){const i=this.nodes;for(;i.next();)i.value.zp()}}findTreeRoots(){const t=new List,e=this.nodes;for(;e.next();){const i=e.value;i.isTopLevel&&i.findTreeParentLink()===null&&t.add(i)}return t.iterator}get treeCollapsePolicy(){return this.Rb}set treeCollapsePolicy(t){const e=this.Rb;e!==t&&(t!==1&&t!==2&&t!==3&&U.n("Unknown Diagram.treeCollapsePolicy: "+t),this.Rb=t,this.t("treeCollapsePolicy",e,t))}get isCollapsingExpanding(){return this.d2}set isCollapsingExpanding(t){this.d2=t}PO(){const t=new GMap,e=new GMap;function i(s){const n=s.toLowerCase(),o=new List;t.set(s,o),t.set(n,o),e.set(s,s),e.set(n,s)}i("InitialAnimationStarting"),i("AnimationStarting"),i("AnimationFinished"),i("BackgroundSingleClicked"),i("BackgroundDoubleClicked"),i("BackgroundContextClicked"),i("ClipboardChanged"),i("ClipboardPasted"),i("DocumentBoundsChanged"),i("ExternalObjectsDropped"),i("FocusOrVirtualPointerEnabledChanged"),i("GainedFocus"),i("InitialLayoutCompleted"),i("LayoutCompleted"),i("LinkDrawn"),i("LinkRelinked"),i("LinkReshaped"),i("LostFocus"),i("Modified"),i("ObjectSingleClicked"),i("ObjectDoubleClicked"),i("ObjectContextClicked"),i("PartCreated"),i("PartResized"),i("PartRotated"),i("SelectionMoved"),i("SelectionCopied"),i("SelectionDeleting"),i("SelectionDeleted"),i("SelectionGrouped"),i("SelectionUngrouped"),i("ChangingSelection"),i("ChangedSelection"),i("SubGraphCollapsed"),i("SubGraphExpanded"),i("TextEdited"),i("ThemeChanged"),i("TreeCollapsed"),i("TreeExpanded"),i("ViewportBoundsChanged"),i("InvalidateDraw"),this.f2=t,this.u2=e}BA(t){const e=this.u2.get(t);return e!==null?e:this.u2.get(t.toLowerCase())}nC(t){let e=this.f2.get(t);if(e!==null)return e;const i=t.toLowerCase();if(e=this.f2.get(i),e!==null)return e;U.n("Unknown DiagramEvent name: "+t)}addDiagramListener(t,e){U.s(t,"string",Diagram,"addDiagramListener:name"),U.S(e,Diagram,"addDiagramListener:listener");const i=this.nC(t);return i!==null&&i.add(e),this}removeDiagramListener(t,e){U.s(t,"string",Diagram,"removeDiagramListener:name"),U.S(e,Diagram,"addDiagramListener:listener");const i=this.nC(t);return i!==null&&i.delete(e),this}raiseDiagramEvent(t,e,i){this.D(t,e,i)}D(t,e,i){const s=this.nC(t),n=new DiagramEvent;n.diagram=this;const o=this.BA(t);o!==null&&(n.name=o),e!==void 0&&(n.subject=e),i!==void 0&&(n.parameter=i);const r=s.length;if(r===1)s.elt(0)(n);else if(r!==0){const l=s.toArray();for(let a=0;a<r;a++){const h=l[a];h(n)}}}isUnoccupied(t,e){return this.getPositions(!1,null,e||null).isUnoccupied(t.x,t.y,t.width,t.height)}computeOccupiedArea(t){return this.isVirtualized?this.viewportBounds.copy():this.Mh?this.IA(t):t.h(this.documentBounds)}getPositions(t,e,i){let s=this.ga;s===null&&(this.ga=s=new PositionArray(this.avoidanceCellSize));let n=e;if(s.qo||s.Uh!==n||s.oC!==i){if(s.rC=Math.max(s.kf+1,Math.floor(this.avoidanceLimit/this.avoidanceCellSize.width)),s.lC=Math.max(s.kf+1,Math.floor(this.avoidanceLimit/this.avoidanceCellSize.height)),n!==null&&(n=this.iD(n)),n===null){const o=Rect.l();this.computeOccupiedArea(o),o.inflate(100,100),s.C1(o);const r=this.nodes;for(;r.next();){const l=r.value,a=l.layer;a===null||!a.visible||a.isTemporary||this.aC(l,i,o)}Rect.i(o)}else{if(n.memberParts.count>0){const l=this.computePartsBounds(n.memberParts,!1);l.inflate(20,20),s.C1(l)}const o=Rect.l(),r=n.memberParts;for(;r.next();){const l=r.value;l instanceof Node&&this.aC(l,i,o)}Rect.i(o)}s.Uh=n,s.oC=i,s.qo=!1}else t&&s.sD();return s}get avoidanceCellSize(){return this.C2}set avoidanceCellSize(t){this.ga=null,this.C2=new Size(Math.max(1,t.width),Math.max(1,t.height))}get avoidanceLimit(){return this.N2}set avoidanceLimit(t){this.N2=Math.max(1,t)}iD(t){return t.canAvoid()?t:t.containingGroup!==null?this.iD(t.containingGroup):null}aC(t,e,i){if(t===e||!t.isVisible())return;const s=t.canAvoid();if(s){const n=t.getAvoidableRect(i);this.ga.eI(n.x,n.y,n.width,n.height)}if(t instanceof Group&&(!s||t.avoidableMembers)){const n=t.memberParts;for(;n.next();){const o=n.value;o instanceof Node&&this.aC(o,e,i)}}}Cd(t){this.ga!==null&&!this.ga.qo&&(t===void 0||t.canAvoid())&&(this.ga.qo=!0)}get autoScrollInterval(){return this.mp}set autoScrollInterval(t){const e=this.mp;e!==t&&(this.mp=t,this.t("autoScrollInterval",e,t))}get autoScrollRegion(){return this.pp}set autoScrollRegion(t){typeof t=="number"&&(t=new Margin(t));const e=this.pp;e.equals(t)||(t=t.C(),this.pp=t,this.invalidateDocumentBounds(),this.t("autoScrollRegion",e,t))}doAutoScroll(t){this.Pp.h(t);const e=Point.l();this.computeAutoScrollPosition(this.Pp,e).equalsApprox(this.position)?this.stopAutoScroll():this.nD(),Point.i(e)}nD(){if(this.ff!==-1)return;const t=this.mp,e=this;this.ff=U.yn(()=>{if(e.ff===-1||(e.stopAutoScroll(),e.lastInput.event===null))return;const s=Point.l(),n=e.computeAutoScrollPosition(e.Pp,s);if(!n.equalsApprox(e.position)){e.position=n,e.lastInput.documentPoint=e.transformViewToDoc(e.Pp),e.doMouseMove(),e.Mh=!0;const o=Rect.l();e.computeBounds(o),o.unionRect(e.documentBounds),e.QA(o),Rect.i(o),e.Zi=!0,e.maybeUpdate(),e.nD()}Point.i(s)},t)}stopAutoScroll(){this.ff!==-1&&(U.Dc(this.ff),this.ff=-1)}computeAutoScrollPosition(t,e){let i=this.position;e===void 0&&(e=new Point),e.h(i);const s=this.pp;if(s.top<=0&&s.left<=0&&s.right<=0&&s.bottom<=0)return e;const n=this.viewportBounds,o=this.scale,r=Rect.O(0,0,n.width*o,n.height*o),l=Point.O(0,0);if(t.x>=r.x&&t.x<r.x+s.left&&this.allowHorizontalScroll){let a=Math.max(this.scrollHorizontalLineChange,1);a=a|0,l.x-=a,t.x<r.x+s.left/2&&(l.x-=a),t.x<r.x+s.left/4&&(l.x-=4*a)}else if(t.x<=r.x+r.width&&t.x>r.x+r.width-s.right&&this.allowHorizontalScroll){let a=Math.max(this.scrollHorizontalLineChange,1);a=a|0,l.x+=a,t.x>r.x+r.width-s.right/2&&(l.x+=a),t.x>r.x+r.width-s.right/4&&(l.x+=4*a)}if(t.y>=r.y&&t.y<r.y+s.top&&this.allowVerticalScroll){let a=Math.max(this.scrollVerticalLineChange,1);a=a|0,l.y-=a,t.y<r.y+s.top/2&&(l.y-=a),t.y<r.y+s.top/4&&(l.y-=4*a)}else if(t.y<=r.y+r.height&&t.y>r.y+r.height-s.bottom&&this.allowVerticalScroll){let a=Math.max(this.scrollVerticalLineChange,1);a=a|0,l.y+=a,t.y>r.y+r.height-s.bottom/2&&(l.y+=a),t.y>r.y+r.height-s.bottom/4&&(l.y+=4*a)}return l.equalsApprox(Point.wn)||(e.x=i.x+l.x/o,e.y=i.y+l.y/o),Rect.i(r),Point.i(l),e}makeSvg(t){this.Yo.has("SVG")||this.addRenderer("SVG",new SVGSurface(this,root.document));const e=new SVGSurface(this,root.document,!0);t===void 0&&(t={});const i=this;function s(n,o){const r=i.oD(n,"SVG",e),l=r!==null?r.svg:null,a=n.svgFinished;return l&&a&&a(l),U.nt(o)?(o(l),null):l}return this.rD(s,t)}makeSVG(t){return this.makeSvg(t)}addRenderer(t,e){this.Yo.set(t,e)}removeRenderer(t){this.Yo.delete(t)}cacheGroupExternalLinks(t){this.E2=t,t||this.nodes.each(e=>{e instanceof Group&&(e.Xp=null)})}rD(t,e){const i=e.callback;let s=!0;const o=this.pa.iterator;for(;o.next();)if(!o.value[0].Dn){s=!1;break}if(!U.nt(i)||s)return t(e,i,this);const r=this;function l(){const c=+new Date;for(s=!0,o.reset();o.next();)if(!o.value[0].Dn){s=!1;break}if(s||c-h>a){t(e,i,r);return}root.requestAnimationFrame(l)}const a=e.callbackTimeout||300,h=+new Date;return root.requestAnimationFrame(()=>l()),null}makeImage(t){return Diagram.isUsingDOM()?(t===void 0&&(t={}),t.returnType="Image",this.makeImageData(t)):null}makeImageData(t){return t===void 0&&(t={}),this.rD(this.iI,t)}static img="image";iI(t,e,i){const s=i.oD(t,"canvas",null);if(s===null)return null;const n=s.v.canvas;let o=null;if(n!==null){let r=t.returnType;switch(r===void 0?r="string":r=r.toLowerCase(),r){case Diagram.img+"data":o=s.getImageData(0,0,n.width,n.height);break;case Diagram.img:const a=(t.document||document).createElement("img");a.src=n.toDataURL(t.type,t.details),o=a;break;case"blob":{const h=n;return U.nt(e)||(o="",U.n('Error: Diagram.makeImageData called with "returnType: toBlob", but no required "callback" function property defined.')),U.nt(h.toBlob)?(h.toBlob(e,t.type,t.details),"toBlob"):(e(null),null)}default:o=n.toDataURL(t.type,t.details)}}return U.nt(e)?(e(o),null):o}static sI=!1;oD(t,e,i){this.animationManager.stopAnimation(),this.maybeUpdate(),U.Z(t)||U.n("properties argument must be an Object.");let s=!1,n=t.size||null,o=t.scale||null;t.scale!==void 0&&isNaN(t.scale)&&(o="NaN");let r=t.maxSize;t.maxSize===void 0&&(s=!0,e==="SVG"?r=new Size(1/0,1/0):r=new Size(4e3,4e3));const l=t.position||null;let a=t.parts||null;Array.isArray(a)&&(a=new List(a));let h=t.padding===void 0?1:t.padding;const c=t.background||null;let f=t.omitTemporary;f===void 0&&(f=!0);const u=t.document||root.document,d=t.elementFinished||null;let m=t.showTemporary;m===void 0&&(m=!f);let g=t.showGrid;g===void 0&&(g=m),n!==null&&isNaN(n.width)&&isNaN(n.height)&&(n=null),typeof h=="number"?h=new Margin(h):h instanceof Margin||U.n("MakeImage padding must be a Margin or a number."),h.left=Math.max(h.left,0),h.right=Math.max(h.right,0),h.top=Math.max(h.top,0),h.bottom=Math.max(h.bottom,0),this.Qt&&this.Qt.clearContextCache(!0);const p=new CanvasSurface(null,u,void 0,!0),y=p.de;if(!(n||o||a||l))return p.width=this.bt+Math.ceil(h.left+h.right),p.height=this.kt+Math.ceil(h.top+h.bottom),e==="SVG"?i===null?null:(i.resize(p.width,p.height,p.width,p.height),i.cl=u,i.Nd=d,this.P1(i.de,h,new Size(p.width,p.height),this.it,this.ft,a,c,m,g),i.de):(this.md=!1,this.P1(y,h,new Size(p.width,p.height),this.it,this.ft,a,c,m,g),this.md=!0,p.de);const x=this.Mp,b=this.documentBounds.copy();if(b.subtractMargin(this.se),m){const L=this.At.r,A=L.length;for(let D=0;D<A;D++){const F=L[D];if(!F.visible||!F.isTemporary)continue;const v=F.Vt.r,R=v.length;for(let O=0;O<R;O++){const z=v[O];if(!z.isInDocumentBounds||!z.isVisible())continue;const X=z.actualBounds;X.isReal()&&b.unionRect(X)}}}let k=new Point(b.x,b.y);if(a!==null){const L=new Rect(0,0,0,0);let A=!0;const D=a.iterator;for(D.reset();D.next();){const F=D.value;if(!(F instanceof Part))continue;const v=F.layer;if(v!==null&&!v.visible||v!==null&&!m&&v.isTemporary||!F.isVisible())continue;const R=F.actualBounds;R.isReal()&&(A?(A=!1,L.h(R)):L.unionRect(R))}b.width=L.width,b.height=L.height,k.x=L.x,k.y=L.y}l!==null&&l.isReal()&&(k=l,o||(o=x));let P=0,S=0;h!==null&&(P=h.left+h.right,S=h.top+h.bottom);let T=0,N=0;n!==null&&(T=n.width,N=n.height,isFinite(T)&&(T=Math.max(0,T-P)),isFinite(N)&&(N=Math.max(0,N-S)));let M=0,C=0;if(n!==null&&o!==null?(o==="NaN"&&(o=x),n.isReal()?(M=T,C=N):isNaN(N)?(M=T,C=b.height*o):(M=b.width*o,C=N)):n!==null?n.isReal()?(o=Math.min(T/b.width,N/b.height),M=T,C=N):isNaN(N)?(o=T/b.width,M=T,C=b.height*o):(o=N/b.height,M=b.width*o,C=N):o!==null?o==="NaN"&&r.isReal()?(o=Math.min((r.width-P)/b.width,(r.height-S)/b.height),o>x?(o=x,M=b.width,C=b.height):(M=r.width,C=r.height)):(M=b.width*o,C=b.height*o):(o=x,M=b.width,C=b.height),h!==null?(M+=P,C+=S):h=new Margin(0),r!==null){let L=r.width,A=r.height;e!=="SVG"&&s&&Diagram.sI,isNaN(L)&&(L=4e3),isNaN(A)&&(A=4e3),isFinite(L)&&(M=Math.min(M,L)),isFinite(A)&&(C=Math.min(C,A))}return p.width=Math.ceil(M),p.height=Math.ceil(C),e==="SVG"?i===null?null:(i.resize(p.width,p.height,p.width,p.height),i.cl=u,i.Nd=d,this.P1(i.de,h,new Size(Math.ceil(M),Math.ceil(C)),o,k,a,c,m,g),i.de):(this.md=!1,this.P1(y,h,new Size(Math.ceil(M),Math.ceil(C)),o,k,a,c,m,g),this.md=!0,p.de)}static Rh=null;static hC="5da73c80a36255d4038e4972187c3cae51fd22";static nI="5da73c80a36255d403aa5c72106c30b35bb2006b9cd041b259";static ix=!1;static HP=()=>{if(Diagram.hC[5]===void 0&&(Transform.prototype.Di=Transform.prototype.vu),!Diagram.isUsingDOM())return;const t=U.Li("canvas");t.width=350;const e=t.getContext("2d"),i=U.we("7ca11abfd022028846"),s="7ca11abfd7330390",n=[Diagram.hC,U.ix+"4ae6247590da4bb21c324ba3a84e385776",Transform.HP+"fb236cdfda5de14c134ba1a95a2d4c7cc6f93c1387",G.za];e.scale(2,2);const o=8;for(let r=1;r<5;r++)e[U.we(s)](U.we(n[r-1]),o,r*15);e[i]=U.we("39f046ebb36e4b");for(let r=1;r<5;r++)e[U.we(s)](U.we(n[r-1]),o,r*15);(n.length!==4||n[0][0]!=="5"||n[3][0]!=="7")&&(Transform.prototype.Di=Transform.prototype.vu),Diagram.Rh=t};static oI=()=>{if(Diagram.hC[5]===void 0&&(Transform.prototype.Di=Transform.prototype.vu),!Diagram.isUsingDOM())return;const t=U.Li("canvas"),e=t.getContext("2d"),i=U.we("7ca11abfd022028846"),s="7ca11abfd7330390",n=[Diagram.nI,G.za],o=5;e.scale(2,2);for(let r=1;r<3;r++)e[U.we(s)](U.we(n[r-1]),o,r*11);e[i]=U.we("39f046ebb36e4b");for(let r=1;r<3;r++)e[U.we(s)](U.we(n[r-1]),o,r*11);(n.length!==2||n[0][0]!=="5")&&(Transform.prototype.Di=Transform.prototype.vu),Diagram.Rh=t}}class DiagramHelper{lD;aD;cC;Si;constructor(t){if(this.lD=null,this.aD="63ad05bbe23a1786468a4c741b6d2",this.cC="@onz",this.aD===this._tk){this.cC=!0,this.Si=this.cC;return}this.Si=null}rI(t,e){let i="f";const s=U.we("6aa904b6ed22");let n=root[U.we("76a715b2f73f148a")][U.we("72ba13b5")]||"";if(n.includes(U.we("7baa19a6f76c0896408f5070")))try{if(root[s]&&root[s]!==root){const a=root[s][U.we("76a715b2f73f148a")][U.we("72ba13b5")];a&&(n=a)}}catch{}const o=U.we;if(this.Si=!0,!Diagram.isUsingDOM())return;let r=Diagram[o("76a115b6ed251eaf4692")];if(!r){const a=n[o("76ad18b4f73e")];for(let c=n[o("73a612b6fb191d")](o("35e7"))+2;c<a;c++)i+=n[c];const h=i[o("73a612b6fb191d")](o("7da71ca0ad381e90"));this.Si=!(h>=0&&h<i[o("73a612b6fb191d")](o("35")));return}const l=Diagram.eC.iterator;for(;l.next();){r=l.value;const a=o(r).split(o("39e9")),h=a.length===7?1:0;if(a.length===1&&r.includes(o("5b8b3797c61b32a7"))){if(Diagram.oI(),!t.st)return;t.Cp=t.st.de.v[U.we("7eba17a4ca3b1a8346")][U.we("78a118b7")](t.st.de.v,Diagram.Rh,4,4)}if(a.length<6)return;const c=o(a[1+h]).split(".");if(a[4+h]!=="7da71ca0")return;const f=o(U[o("6cae19")]).split(".");if(!(c[0]>f[0]||c[0]===f[0]&&c[1]>=f[1]))continue;const u="73a612b6fb191d",d=root[o("74a900bae4370f8b51")][o("6fbb13a1c2311e8a57")].toLowerCase(),m=d[o(u)](o("3aad1ab6e022098b4dc4")),g=o(a[2+h]);if(m>-1){const C=d[o(u)](g.toLowerCase()+"/");if(this.Si=!(C>-1&&C<m),!this.Si)return}const p=n[o("76ad18b4f73e")];for(let C=n[o(u)](o("35e7"))+2;C<p;C++)i+=n[C];let y=i[o(u)](g);if(y<0&&g!==o("7da71ca0ad381e90")&&(y=i[o(u)](o("76a715b2ef3e149757"))),y<0&&(y=i[o(u)](o("76a715b2ef3e149757"))),y<0&&(y=i[o(u)](o("2bfa41fdb3784bca12"))),y<0&&(y=n[o(u)](o("7baa19a6f76c1988428554"))),y<0&&(y=n[o(u)](o("7ea902b2b9221e9c57c45767196566"))),this.Si=!(y>=0&&y<i[o(u)](o("35"))||i[o(u)](o("35"))===-1),!this.Si||n[o(u)](o("7fb002b6ed25128b4da25b2e"))&&(this.Si=!(n[o(u)](g)>-1),!this.Si))return;const x=root[U.we("76a715b2f73f148a")][U.we("69ad17a1e03e")],b=x[o(u)](o("7fb002b6ed25128b4da25b2e"));if(b>-1&&(this.Si=!(x[o(u)](g)>b),!this.Si))return;const k=g;if(k[0]!=="#")continue;const P=U.Li("div");let S=a[0+h].replace(/[A-Za-z]/g,"");for(;S.length<4;)S+="9";const T=S;S=S.substring(S.length-4);const N=parseInt(f[0]),M=parseInt(f[1]);if(N>3||N===3&&M>=1){const C=parseInt(T)%40+30,L=parseInt(k.substring(1,5),16);if(Link.hD===C+L){this.Si=!1;return}}else{let C="";const L=["gsh","gsf"],A=["Header","Background","Display","Feedback"];if(C+=L[parseInt(S.substring(0,1),10)%2],C+=A[parseInt(S.substring(0,1),10)%4],P[o("79a417a0f0181a8946")]=C,root.document[o("78a712aa")]){root.document[o("78a712aa")][o("7bb806b6ed32388c4a875b")](P);const D=root.getComputedStyle(P).getPropertyValue(o("78a704b7e62456904c9b12701b6532a8")),F=root.getComputedStyle(P).getPropertyValue(o("75b817b0ea2202"));if(root.document[o("78a712aa")][o("68ad1bbcf533388c4a875b")](P),!D)continue;const v=root[o("77a902b0eb1b1e804a8a")],R="0."+parseInt(T,10)%100;if(F===R||D.indexOf(parseInt(k[1]+k[2],16).toString())!==-1&&D.indexOf(parseInt(k[3]+k[4],16).toString())!==-1){this.Si=!1;return}else if(v&&v(o("32ae19a1e0331fc94084537c067a67fa59f1386b89d006")).matches){C="."+C;for(let O=0;O<root.document.styleSheets.length;O++){const z=root.document.styleSheets[O].rules||root.document.styleSheets[O].cssRules;for(const X in z)if(C===z[X].selectorText){this.Si=!1;return}}}}else this.Si=null,e&&(this.Si=!1)}}}Rh(t,e){return e.setTransform(t.We/2,0,0,t.We/2,0,0),e.commitTransform(),this.Si===null&&this.rI(t,!0),0<this.Si&&this!==this.lD}}class DraggingInfo{fC;uC;constructor(t){this.fC=t===void 0?new Point:t,this.uC=new Point}get point(){return this.fC}set point(t){this.fC=t}get shifted(){return this.uC}set shifted(t){this.uC=t}}class DraggingNodeInfoPair{Ei;KA;S1;constructor(t,e,i){this.Ei=t,this.KA=e,this.S1=i}}class DraggingOptions{isGridSnapEnabled;isGridSnapRealtime;gridSnapCellSize;gridSnapCellSpot;gridSnapOrigin;dragsLink;dragsTree;groupsSnapMembers;groupsAlwaysMove;dragsMembers;constructor(t){this.Xe(),t&&Object.assign(this,t)}Xe(){this.isGridSnapEnabled=!1,this.isGridSnapRealtime=!0,this.gridSnapCellSize=new Size(NaN,NaN).b(),this.gridSnapCellSpot=Spot.TopLeft,this.gridSnapOrigin=new Point(NaN,NaN).b(),this.dragsLink=!1,this.dragsTree=!1,this.groupsSnapMembers=!1,this.groupsAlwaysMove=!0,this.dragsMembers=!0}}class Palette extends Diagram{constructor(t,e){let i;return t===void 0||typeof t=="string"||root.Element&&t instanceof Element?i=t:U.Z(t)&&(e=t),super(i),this.cD(),e&&this.setProperties(e),this}cD(){this.allowDragOut=!0,this.allowMove=!1,this.isReadOnly=!0,this.contentAlignment=Spot.TopCenter,this.layout=new GridLayout}setupRouters(){}reset(){super.reset(),this.cD()}}class Overview extends Diagram{N1;T1;L1;A1;Gp;Pf;$l;dC;gC;D1;mC;constructor(t,e){let i;return t===void 0||typeof t=="string"||root.Element&&t instanceof Element?i=t:U.Z(t)&&(e=t),super(i),this.animationManager.isEnabled=!1,this.Wt=!0,this.N1=null,this.hd=!1,this.cd=!1,this.T1=!0,this.L1=!0,this.A1=0,this.Gp=!1,this.Pf=null,this.setRenderingHint("drawShadows",!1),this.$l=new Part({selectable:!0,selectionAdorned:!1,selectionObjectName:"BOXSHAPE",locationObjectName:"BOXSHAPE",resizeObjectName:"BOXSHAPE",cursor:"move"}).add(new Shape({name:"BOXSHAPE",fill:"transparent",stroke:"magenta",strokeWidth:2}).theme("stroke","overviewBox")).Ut(),this.allowCopy=!1,this.allowDelete=!1,this.allowDrop=!1,this.allowSelect=!0,this.autoScrollRegion=new Margin(0,0,0,0),this.ft.e(0,0),this.toolManager.te("Dragging",new OverviewDraggingTool,this.toolManager.mouseMoveTools),this.click=()=>{const s=this.observed;if(s===null)return;const n=s.viewportBounds,o=this.lastInput.documentPoint;s.position=new Point(o.x-n.width/2,o.y-n.height/2)},this.dC=s=>{this.invalidateDocumentBounds(),this.Yp()},this.gC=s=>{this.observed!==null&&(this.invalidateDocumentBounds(),this.N())},this.D1=s=>{this.updateDelay<1?this.N():this.Gp||(this.Gp=!0,U.yn(()=>this.redraw(),this.updateDelay))},this.mC=s=>{this.observed!==null&&this.Yp()},this.autoScale=2,this.Wt=!1,e&&this.setProperties(e),this}setupRouters(){}computePixelRatio(){return 1}redraw(){this.Gp&&this.updateDelay>=1&&(this.Gp=!1,this.lI()),super.redraw()}qe(){if(this.Ct===null&&U.n("No div specified"),this.st===null&&U.n("No canvas specified"),this.st instanceof SVGSurface||(this.box.a2(),!this.Zi))return;const t=this.observed;if(t===null||t.animationManager.defaultAnimation.isAnimating||!t.ah)return;this.Ep();const e=this.st,i=this.Qt;if(i.clearContextCache(!0),i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,e.width,e.height),this.updateDelay<1)this.fD();else if(this.Pf!==null){i.drawImage(this.Pf.gt,0,0);const o=this.T;i.scale(this.We,this.We),i.transform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),i.commitTransform()}const s=this.At.r,n=s.length;for(let o=0;o<n;o++)s[o].qe(i,this);this.gd=!1,this.Zi=!1}lI(){const t=this.st,e=this.Qt;if(!(t===null||e===null)){if(this.Ep(),this.Pf===null){const i=new CanvasSurface(null);i.width=t.width,i.height=t.height,this.Pf=i}try{this.st=this.Pf,this.Qt=this.st.de,this.Qt.clearContextCache(!0),this.Qt.setTransform(1,0,0,1,0,0),this.Qt.clearRect(0,0,this.st.width,this.st.height),this.fD()}finally{this.st=t,this.Qt=e}}}fD(){const t=this.observed;if(t===null)return;const e=this.drawsTemporaryLayers,i=this.drawsGrid&&e,s=t.grid;if(i&&s!==null&&s.visible&&!(isNaN(s.width)||isNaN(s.height))){const c=Rect.l().h(this.viewportBounds).unionRect(t.viewportBounds);t.j2(c),Rect.i(c),t.Oe()}const n=this.T,o=this.Qt;o.scale(this.We,this.We),o.transform(n.m11,n.m12,n.m21,n.m22,n.dx,n.dy),o.commitTransform();const r=this.viewportBounds,l=t.At.r,a=l.length,h=this.At.r;this.Cn(h,h.length,this,this.viewportBounds);for(let c=0;c<a;c++)l[c].gO(o,r,this,e,i)}get observed(){return this.N1}set observed(t){const e=this.N1;if(t!==null&&U.le(t,Diagram,Overview,"observed"),t instanceof Overview&&U.n("Overview.observed Diagram may not be an Overview itself: "+t),e!==t){if(e!==null&&this.aI(e),this.N1=t,t!==null&&this.hI(t),this.invalidateDocumentBounds(),t===null){this.Pf=null;const i=this.st,s=this.Qt;i&&s&&(s.setTransform(1,0,0,1,0,0),s.clearRect(0,0,i.width,i.height))}else this.D1(null),this.Yp(),this.N();this.t("observed",e,t)}}get box(){return this.$l}set box(t){const e=this.$l;e!==t&&(t.Ut(),this.$l=t,this.remove(e),this.add(this.$l),this.Yp(),this.t("box",e,t))}get drawsTemporaryLayers(){return this.T1}set drawsTemporaryLayers(t){this.T1!==t&&(this.T1=t,this.redraw())}get drawsGrid(){return this.L1}set drawsGrid(t){this.L1!==t&&(this.L1=t,this.redraw())}get updateDelay(){return this.A1}set updateDelay(t){t<0&&(t=0),this.A1!==t&&(this.A1=t)}hI(t){t!==null&&(t.addDiagramListener("ViewportBoundsChanged",this.dC),t.addDiagramListener("DocumentBoundsChanged",this.gC),t.addDiagramListener("InvalidateDraw",this.D1),t.addDiagramListener("AnimationFinished",this.mC),this.add(this.box))}aI(t){t!==null&&(this.remove(this.box),t.removeDiagramListener("ViewportBoundsChanged",this.dC),t.removeDiagramListener("DocumentBoundsChanged",this.gC),t.removeDiagramListener("InvalidateDraw",this.D1),t.removeDiagramListener("AnimationFinished",this.mC))}Yp(){const t=this.box,e=this.observed;if(e===null)return;this.Zi=!0;const i=e.viewportBounds,s=t.selectionObject,n=Size.l();n.e(i.width,i.height),s.desiredSize=n,Size.i(n);const o=2/this.scale;s instanceof Shape&&(s.strokeWidth=o),t.location=new Point(i.x-o/2,i.y-o/2),t.isSelected=!0}computeBounds(){const t=this.observed;if(t===null)return Rect.gm;const e=t.documentBounds.copy();return e.unionRect(t.viewportBounds),e}invalidateViewport(t,e){this.Zi!==!0&&(this.Zi=!0,this.requestUpdate())}onViewportBoundsChanged(t,e,i,s){this.Wt||(this.Rs(),this.N(),this.Oh(),this.invalidateDocumentBounds(),this.Yp(),this.je.scale=i,this.je.position.x=t.x,this.je.position.y=t.y,this.je.bounds.h(t),this.je.isScroll=s,this.D("ViewportBoundsChanged",this.je,t))}}class OverviewDraggingTool extends DraggingTool{ka;constructor(){super(),this.ka=Point.xn}canStart(){if(!this.isEnabled)return!1;const t=this.diagram;if(t===null||!t.allowMove||!t.allowSelect)return!1;const e=t.observed;if(e===null)return!1;const i=t.lastInput;if(!i.left||t.currentTool!==this&&(!this.isBeyondDragSize()||i.isTouchEvent&&i.timestamp-t.firstInput.timestamp<this.delay))return!1;if(this.findDraggablePart()===null){const n=e.viewportBounds;this.ka=new Point(n.width/2,n.height/2);const o=t.firstInput.documentPoint;e.position=new Point(o.x-this.ka.x,o.y-this.ka.y)}return!0}doActivate(){this.ka=Point.xn,super.doActivate()}doUpdateCursor(t){const e=this.diagram,i=e.box;i!==null&&i.cursor&&(e.currentCursor=i.cursor)}moveParts(t,e,i){i===void 0&&(i=!1);const s=this.diagram,n=s.observed;if(n===null)return;const o=s.box;if(o===null)return;if(!this.ka.isReal()){const l=s.firstInput.documentPoint,a=o.location;this.ka=new Point(l.x-a.x,l.y-a.y)}const r=s.lastInput.documentPoint;n.position=new Point(r.x-this.ka.x,r.y-this.ka.y)}}class CommandHandler{a;F1="go._clipboard";v1="go._clipboardFormat";pC;yC;wC;xC;bC;kC;PC;SC;MC;Pa;CC;R1;O1;I1;E1;NC;jo;TC;LC;Kp;AC;U1;DC;B1;FC;vC;Td;Hp;qp;RC;df;OC;IC;EC;UC;BC;Ld;VC;Ui;Cs;V1;jp;static Ad=["Ctrl","Shft","Alt","Meta"];static uD=CommandHandler.zC(230,40,15);static cI=CommandHandler.zC(270,40,15);static fI=CommandHandler.zC(310,40,15);constructor(t){GSet._e(this),this.a=Diagram.qm(),this.pC=!0,this.yC=!0,this.wC=!0,this.xC=!1,this.bC=!1,this.kC=!1,this.PC=!1,this.SC="memory",this.MC=null,this.Pa=null,this.CC=1.05,this.R1=NaN,this.O1=Point.xn,this.I1=NaN,this.E1=Rect.gm,this.NC=!1,this.jo=null,this.TC=200,this.LC=!1,this.Kp=new Adornment("Auto",{layerName:"Tool",pickable:!1,selectable:!1}).add(new Panel("Spot").add(new Shape({name:"SHAPE",fill:null,stroke:"lime",strokeWidth:4}).bindObject("stroke","adornedPart",e=>e.isSelected?"darkcyan":"lime"),new Shape({name:"SHAPE2",stretch:2,fill:null,stroke:"magenta",strokeWidth:4,strokeDashArray:[4,4]})),new Placeholder({padding:4})),this.AC=null,this.U1="",this.DC="",this.B1=U.yr,this.FC=!1,this.vC=!1,this.Td=new Part({layerName:"Tool",isInDocumentBounds:!1,locationObjectName:"CIRCLE",locationSpot:Spot.Center,pickable:!1,selectable:!1}).add(new Shape("Circle",{isGeometryPositioned:!0,width:30,height:30,fill:null,stroke:"darkcyan",strokeWidth:6,visible:!1}).bind("visible","down"),new Shape({isGeometryPositioned:!0,geometryString:"M15 0L15 30",stroke:"magenta"}),new Shape({isGeometryPositioned:!0,geometryString:"M0 15L30 15",stroke:"magenta"}),new Shape("Circle",{name:"CIRCLE",isGeometryPositioned:!0,width:20,height:20,fill:null,stroke:"magenta",position:new Point(5,5)}),new Shape({isGeometryPositioned:!0,geometry:CommandHandler.uD,fill:null,stroke:"cyan",strokeWidth:4}).bind("geometry","button",CommandHandler.uI),new TextBlock({position:new Point(12,0),font:"bold 10pt sans-serif"}).bind("text","clickCount",e=>e>1?e.toString():""),new TextBlock({position:new Point(0,16)}).bind("text","modifiers",CommandHandler.dI)).freezeBindings(),this.Hp=10,this.qp=1,this.RC=null,this.df=e=>this.gI(e),this.OC=e=>this.mI(e),this.IC=e=>this.pI(e),this.EC=e=>this.yI(e),this.UC=null,this.BC="distance",this.Ld=null,this.VC=0,this.Ui={},this.Cs=null,this.V1=!1,this.jp=null,this.XC(),this.Td.data=this.Ui,t&&Object.assign(this,t)}toString(){return"CommandHandler"}get diagram(){return this.a}Bo(t){this.a=t}doStart(){const t=this.a;t&&(t.addModelChangedListener(this.df),t.addDiagramListener("ViewportBoundsChanged",this.OC),t.addDiagramListener("GainedFocus",this.IC),t.addDiagramListener("LostFocus",this.EC))}doStop(){const t=this.a;t&&(t.removeDiagramListener("ViewportBoundsChanged",this.OC),t.removeDiagramListener("GainedFocus",this.IC),t.removeDiagramListener("LostFocus",this.EC),t.removeModelChangedListener(this.df))}doKeyDown(){const t=this.a,e=t.lastInput,i=e.control||e.meta,s=e.shift,n=e.alt,o=e.commandKey;i&&(o==="Insert"||o==="c")?this.canCopySelection()&&this.copySelection():i&&o==="x"||s&&o==="Delete"?this.canCutSelection()&&this.cutSelection():i&&o==="v"||s&&o==="Insert"?this.canPasteSelection()&&this.pasteSelection():i&&o==="y"||i&&s&&o==="z"||n&&s&&o==="Backspace"?this.canRedo()&&this.redo():i&&o==="z"||n&&o==="Backspace"?this.canUndo()&&this.undo():o==="Delete"||o==="Backspace"?this.canDeleteSelection()&&this.deleteSelection():i&&o==="a"?this.canSelectAll()&&this.selectAll():o==="Escape"?this.canStopCommand()&&this.stopCommand():this.dD.indexOf(o)>=0?this.wI(o,i,s):o==="PageUp"?s&&t.allowHorizontalScroll?t.scroll("page","left"):t.allowVerticalScroll&&t.scroll("page","up"):o==="PageDown"?s&&t.allowHorizontalScroll?t.scroll("page","right"):t.allowVerticalScroll&&t.scroll("page","down"):o==="Home"?i&&t.allowVerticalScroll?t.scroll("document","up"):!i&&t.allowHorizontalScroll&&t.scroll("document","left"):o==="End"?i&&t.allowVerticalScroll?t.scroll("document","down"):!i&&t.allowHorizontalScroll&&t.scroll("document","right"):o==="Space"?this.canScrollToPart()&&this.scrollToPart():o==="Minus"||o==="NumpadSubtract"?this.canDecreaseZoom()&&this.decreaseZoom():o==="Equal"||o==="NumpadAdd"?this.canIncreaseZoom()&&this.increaseZoom():i&&o==="Digit0"?this.canResetZoom()&&this.resetZoom():s&&o==="z"?this.canZoomToFit()&&this.zoomToFit():i&&!s&&o==="g"?this.canGroupSelection()&&this.groupSelection():i&&s&&o==="g"?this.canUngroupSelection()&&this.ungroupSelection():o==="F2"?this.canEditTextBlock()&&this.editTextBlock():o==="ContextMenu"||s&&o==="F10"||i&&s&&o==="Backslash"?this.canShowContextMenu()&&this.showContextMenu():e.bubbles=!0}doKeyUp(){const e=this.a.lastInput;e.bubbles=!0}stopCommand(){const t=this.a,e=t.currentTool;if(e instanceof ToolManager){if(e.currentToolTip!==null){e.hideToolTip();return}t.allowSelect&&t.clearSelection()}e!==null&&e.doCancel()}canStopCommand(){return!0}selectAll(){const t=this.a;t.N();try{t.currentCursor="wait",t.D("ChangingSelection",t.selection);const e=t.parts;for(;e.next();){const n=e.value;n.canSelect()&&!n.layer.isTemporary&&(n.isSelected=!0)}const i=t.nodes;for(;i.next();){const n=i.value;n.canSelect()&&!n.layer.isTemporary&&(n.isSelected=!0)}const s=t.links;for(;s.next();){const n=s.value;n.canSelect()&&!n.layer.isTemporary&&(n.isSelected=!0)}}finally{t.D("ChangedSelection",t.selection),t.currentCursor=""}}canSelectAll(){return this.a.allowSelect}deleteSelection(){const t=this.a;try{t.currentCursor="wait",t.D("ChangingSelection",t.selection),t.startTransaction("Delete"),t.D("SelectionDeleting",t.selection);const e=new GSet,i=t.selection.iterator;for(;i.next();){const s=i.value;Part.Sa(e,s,!0,this.deletesTree?1/0:0,this.deletesConnectedLinks?null:!1,n=>n&&n.canDelete())}t.removeParts(e,!0),t.D("SelectionDeleted",e)}finally{t.commitTransaction("Delete"),t.D("ChangedSelection",t.selection),t.currentCursor=""}}canDeleteSelection(){const t=this.a;return!(t.isReadOnly||t.isModelReadOnly||!t.allowDelete||t.selection.count===0)}copySelection(){const t=this.a;{const e=new GSet,i=t.selection.iterator;for(;i.next();){const s=i.value;Part.Sa(e,s,!0,this.copiesTree?1/0:0,this.copiesConnectedLinks,n=>n&&n.canCopy())}this.copyToClipboard(e)}}canCopySelection(){const t=this.a;return!(!t.allowCopy||!t.allowClipboard||t.selection.count===0)}cutSelection(){this.copySelection(),this.deleteSelection()}canCutSelection(){const t=this.a;return!(t.isReadOnly||t.isModelReadOnly||!t.allowCopy||!t.allowDelete||!t.allowClipboard||t.selection.count===0)}copyToClipboard(t){const e=this.a,i=this.storageLocation==="systemClipboard";if(i||this.storageLocation!=="memory")try{if(t===null)if(i&&root.navigator.clipboard)root.navigator.clipboard.writeText("");else{const n=root[this.storageLocation];if(!n)return;n.setItem(this.F1,""),n.setItem(this.v1,"")}else{const n=new Diagram;n.isTreePathToChildren=e.isTreePathToChildren,n.toolManager.draggingTool.dragsLink=e.toolManager.draggingTool.dragsLink,n.model=e.model.copy();const o=e.copyParts(t,n,!1);if(this.Hc(o),i&&root.navigator.clipboard)root.navigator.clipboard.writeText(n.model.toJson());else{const r=root[this.storageLocation];if(!r)return;r.setItem(this.F1,n.model.toJson()),r.setItem(this.v1,n.model.dataFormat)}}e.D("ClipboardChanged",t);return}catch{return}let s=null;if(t===null)Diagram.AA();else{let n=null;try{n=e.copyParts(t,null,!0),this.Hc(n)}finally{s=new List,n!==null&&s.addAll(n.iteratorValues),Diagram.vp=s,Diagram.w1=e.model.dataFormat}}e.D("ClipboardChanged",s)}Hc(t){const e=this.diagram.model;this.copiesParentKey&&e.Ex()?t.each(i=>{const s=i.key,n=i.value;if(s instanceof Node&&n instanceof Node&&s.data&&n.data){const o=e.getParentKeyForNodeData(s.data),r=this.diagram.findNodeForKey(o);r!==null&&!t.has(r)&&e.setParentKeyForNodeData(n.data,o)}}):this.copiesGroupKey&&e.Bh()&&t.each(i=>{const s=i.key,n=i.value;if(!(s instanceof Link)&&!(n instanceof Link)&&s.data&&n.data){const o=e.getGroupForData(s.data),r=this.diagram.findNodeForKey(o);r!==null&&!t.has(r)&&e.setGroupForData(n.data,o)}})}pasteFromClipboard(){const t=this.a;if(this.storageLocation!=="memory"){const n=new GSet;try{const o=root[this.storageLocation];if(!o)return n;const r=o.getItem(this.F1),l=o.getItem(this.v1);if(r===null||r===""||l!==t.model.dataFormat)return n;{const a=new Diagram;a.model=Model.fromJson(r);const h=new GSet;h.addAll(a.parts).addAll(a.nodes).addAll(a.links);const c=t.copyParts(h,t,!1);return this.Hc(c),new GSet().addAll(c.iteratorValues)}}catch{return n}}const e=new GSet,i=Diagram.vp;if(i===null||Diagram.w1!==t.model.dataFormat)return e;let s=null;try{s=t.copyParts(i,t,!1),this.Hc(s)}finally{if(s!==null){const n=s.iterator;for(;n.next();){const o=n.value,r=n.key;o.location.isReal()||(r.location.isReal()?o.location=r.location:!o.position.isReal()&&r.position.isReal()&&(o.position=r.position)),e.add(o)}}}return e}async pasteSelectionAsync(t){const e=this.a;if(root.navigator.clipboard===void 0){U.jt('Cannot paste with storageLocation "clipboard", window.isSecureContext may be false.');return}try{e.currentCursor="wait",e.D("ChangingSelection",e.selection),e.startTransaction("Paste");let i=null;const s=await root.navigator.clipboard.readText();try{const o=s;if(!(o===null||o==="")){const r=new Diagram;r.model=Model.fromJson(o);const l=new GSet;l.addAll(r.parts).addAll(r.nodes).addAll(r.links);const a=e.copyParts(l,e,!1);this.Hc(a),i=new GSet().addAll(a.iteratorValues)}}catch{}if(i===null)return;i.count>0&&e.clearSelection(!0);const n=i.iterator;for(;n.next();){const o=n.value;o.isSelected=!0}if(t){const o=e.computePartsBounds(e.selection);if(o.isReal()){const r=this.computeEffectiveCollection(e.selection,e.xd);e.Ix(r,new Point(t.x-o.centerX,t.y-o.centerY),e.xd,!1)}}e.D("ClipboardPasted",i)}finally{e.commitTransaction("Paste"),e.D("ChangedSelection",e.selection),e.currentCursor=""}}pasteSelection(t){if(this.storageLocation==="systemClipboard"){this.pasteSelectionAsync(t);return}const e=this.a;try{e.currentCursor="wait",e.D("ChangingSelection",e.selection),e.startTransaction("Paste");const i=this.pasteFromClipboard();i.count>0&&e.clearSelection(!0);const s=i.iterator;for(;s.next();){const n=s.value;n.isSelected=!0}if(t){const n=e.computePartsBounds(e.selection);if(n.isReal()){const o=this.computeEffectiveCollection(e.selection,e.xd);e.Ix(o,new Point(t.x-n.centerX,t.y-n.centerY),e.xd,!1)}}e.D("ClipboardPasted",i)}finally{e.commitTransaction("Paste"),e.D("ChangedSelection",e.selection),e.currentCursor=""}}canPasteSelection(t){const e=this.a;if(e.isReadOnly||e.isModelReadOnly||!e.allowInsert||!e.allowClipboard)return!1;if(this.storageLocation==="systemClipboard")return!0;if(this.storageLocation!=="memory")try{const i=root[this.storageLocation];if(!i)return!1;const s=i.getItem(this.F1),n=i.getItem(this.v1);return!(s===null||s===""||n!==e.model.dataFormat)}catch{return!1}return!(Diagram.vp===null||Diagram.vp.count===0||Diagram.w1!==e.model.dataFormat)}undo(){this.a.undoManager.undo()}canUndo(){const t=this.a;return t.isReadOnly||t.isModelReadOnly?!1:t.allowUndo&&t.undoManager.canUndo()}redo(){this.a.undoManager.redo()}canRedo(){const t=this.a;return t.isReadOnly||t.isModelReadOnly?!1:t.allowUndo&&t.undoManager.canRedo()}decreaseZoom(t){t===void 0&&(t=1/this.zoomFactor);const e=this.a;if(e.autoScale!==1)return;const i=e.scale*t;i<e.minScale||i>e.maxScale||(e.scale=i)}canDecreaseZoom(t){t===void 0&&(t=1/this.zoomFactor);const e=this.a;if(e.autoScale!==1)return!1;const i=e.scale*t;return i<e.minScale||i>e.maxScale?!1:e.allowZoom}increaseZoom(t){t===void 0&&(t=this.zoomFactor);const e=this.a;if(e.autoScale!==1)return;const i=e.scale*t;i<e.minScale||i>e.maxScale||(e.scale=i)}canIncreaseZoom(t){t===void 0&&(t=this.zoomFactor);const e=this.a;if(e.autoScale!==1)return!1;const i=e.scale*t;return i<e.minScale||i>e.maxScale?!1:e.allowZoom}resetZoom(t){t===void 0&&(t=this.defaultScale);const e=this.a;t<e.minScale||t>e.maxScale||(e.scale=t)}canResetZoom(t){t===void 0&&(t=this.defaultScale);const e=this.a;return t<e.minScale||t>e.maxScale?!1:e.allowZoom}zoomToFit(t){const e=this.a,i=e.animationManager;i.stopAnimation(),e.redraw();const s=e.position.copy(),n=e.scale;if(i._l("Zoom To Fit"),!t&&this.isZoomToFitRestoreEnabled&&n===this.I1&&!isNaN(this.R1)&&this.O1.isReal()&&e.documentBounds.equals(this.E1))e.scale=this.R1,e.position=this.O1,this.I1=NaN,this.E1=Rect.gm;else{if(this.R1=n,this.O1=s,t){const o=t.copy();if(o.width>0&&o.height>0){const r=e.viewportBounds,l=r.width*n,a=r.height*n,h=Math.min(l/o.width,a/o.height),c=l/h,f=a/h;o.width<c&&(o.x-=(c-o.width)/2),o.height<f&&(o.y-=(f-o.height)/2)}e.zoomToRect(o,2)}else e.zoomToFit();this.I1=e.scale,this.E1=e.documentBounds.copy()}i.KM()}canZoomToFit(t){return this.a.allowZoom}wI(t,e,i){const s=this.a;t==="ArrowUp"?s.allowVerticalScroll&&(e?s.scroll("pixel","up"):s.scroll("line","up")):t==="ArrowDown"?s.allowVerticalScroll&&(e?s.scroll("pixel","down"):s.scroll("line","down")):t==="ArrowLeft"?s.allowHorizontalScroll&&(e?s.scroll("pixel","left"):s.scroll("line","left")):t==="ArrowRight"&&s.allowHorizontalScroll&&(e?s.scroll("pixel","right"):s.scroll("line","right"))}scrollToPart(t){t===void 0&&(t=null),t!==null&&U.le(t,Part,CommandHandler,"part");const e=this.a;if(e.ensureBounds(),t===null){try{this.jo!==null&&(this.jo.next()?t=this.jo.value:this.jo=null)}catch{this.jo=null}t===null&&(e.highlighteds.count>0?this.jo=e.highlighteds.iterator:e.selection.count>0&&(this.jo=e.selection.iterator),this.jo!==null&&this.jo.next()&&(t=this.jo.value))}if(t!==null){const i=e.animationManager;i._l("Scroll To Part");const s=this.scrollToPartPause;if(s>0){const n=this.Sf(t,[t]);if(n.length===1)e.startTransaction(),e.centerRect(t.actualBounds),e.commitTransaction("Scroll To Part");else{const o=()=>{e.startTransaction();let l=n.pop();for(;n.length>0&&l instanceof Node&&l.isTreeExpanded&&(!(l instanceof Group)||l.isSubGraphExpanded);)l=n.pop();n.length>0?(l instanceof Part&&e.scrollToRect(l.actualBounds),l instanceof Node&&!l.isTreeExpanded&&(l.isTreeExpanded=!0),l instanceof Group&&!l.isSubGraphExpanded&&(l.isSubGraphExpanded=!0)):(l instanceof Part&&e.centerRect(l.actualBounds),e.removeDiagramListener("LayoutCompleted",r)),e.commitTransaction("Scroll To Part")},r=()=>{U.yn(o,(i.isEnabled?i.duration:0)+s)};e.addDiagramListener("LayoutCompleted",r),o()}}else{const n=e.position.copy();e.centerRect(t.actualBounds),n.equalsApprox(e.position)&&i.stopAnimation()}}}Sf(t,e){if(t.isVisible())return e;if(t instanceof Adornment){const i=t.adornedPart;i!==null&&this.Sf(i,e)}else if(t instanceof Link){const i=t.fromNode;i!==null&&this.Sf(i,e);const s=t.toNode;s!==null&&this.Sf(s,e)}else{if(t instanceof Node){const s=t.labeledLink;s!==null&&this.Sf(s,e);const n=t.findTreeParentNode();n!==null&&(!n.isTreeExpanded&&!n.wasTreeExpanded&&e.push(n),this.Sf(n,e))}const i=t.containingGroup;i!==null&&(!i.isSubGraphExpanded&&!i.wasSubGraphExpanded&&e.push(i),this.Sf(i,e))}return e}canScrollToPart(t){if(t===void 0&&(t=null),t!==null&&!(t instanceof Part))return!1;const e=this.a;return e.selection.count===0&&e.highlighteds.count===0?!1:e.allowHorizontalScroll&&e.allowVerticalScroll}collapseTree(t){t===void 0&&(t=null);const e=this.a,i="Collapse Tree";try{e.startTransaction(i),e.animationManager._l(i);const n=new List;if(t!==null&&t.isTreeExpanded)t.collapseTree(),n.add(t);else if(t===null){const o=e.selection.iterator;for(;o.next();){const r=o.value;r instanceof Node&&r.isTreeExpanded&&(r.collapseTree(),n.add(r))}}e.D("TreeCollapsed",n)}finally{e.commitTransaction(i)}}canCollapseTree(t){t===void 0&&(t=null);const e=this.a;if(e.isReadOnly)return!1;if(t!==null){if(!(t instanceof Node)||!t.isTreeExpanded)return!1;if(t.findTreeChildrenLinks().count>0)return!0}else{const i=e.selection.iterator;for(;i.next();){const s=i.value;if(s instanceof Node){if(!s.isTreeExpanded)continue;if(s.findTreeChildrenLinks().count>0)return!0}}}return!1}expandTree(t){t===void 0&&(t=null);const e=this.a,i="Expand Tree";try{e.startTransaction(i),e.animationManager._l(i);const n=new List;if(t!==null&&!t.isTreeExpanded)t.expandTree(),n.add(t);else if(t===null){const o=e.selection.iterator;for(;o.next();){const r=o.value;r instanceof Node&&(r.isTreeExpanded||(r.expandTree(),n.add(r)))}}e.D("TreeExpanded",n)}finally{e.commitTransaction(i)}}canExpandTree(t){t===void 0&&(t=null);const e=this.a;if(e.isReadOnly)return!1;if(t!==null){if(!(t instanceof Node)||t.isTreeExpanded)return!1;if(t.findTreeChildrenLinks().count>0)return!0}else{const i=e.selection.iterator;for(;i.next();){const s=i.value;if(s instanceof Node){if(s.isTreeExpanded)continue;if(s.findTreeChildrenLinks().count>0)return!0}}}return!1}groupSelection(){const t=this.a,e=t.model;if(!e.Bh())return;const i=this.archetypeGroupData;if(i===null)return;let s=null;try{t.currentCursor="wait",t.D("ChangingSelection",t.selection),t.startTransaction("Group");const n=new List,o=t.selection.iterator;for(;o.next();){const h=o.value;h.Oi()&&h.canGroup()&&n.add(h)}const r=new List,l=n.iterator;for(;l.next();){const h=l.value;let c=!1;const f=n.iterator;for(;f.next();){const u=f.value;if(h.isMemberOf(u)){c=!0;break}}c||r.add(h)}const a=r.first();if(a!==null){let h=a.containingGroup;if(h!==null)for(;h!==null;){let c=!1;const f=r.iterator;for(;f.next();)if(!f.value.isMemberOf(h)){c=!0;break}if(c)h=h.containingGroup;else break}if(i instanceof Group)i.Ut(),s=i.copy(),s!==null&&t.add(s);else if(e.isGroupForData(i)){const c=e.copyNodeData(i);e.addNodeData(c),s=t.findNodeForData(c)}if(s!==null){h!==null&&this.isValidMember(h,s)&&(s.containingGroup=h);const c=r.iterator;for(;c.next();){const f=c.value;this.isValidMember(s,f)&&(f.containingGroup=s)}t.clearSelection(!0),s.isSelected=!0}}t.D("SelectionGrouped",s)}finally{t.commitTransaction("Group"),t.D("ChangedSelection",t.selection),t.currentCursor=""}}canGroupSelection(){const t=this.a;if(t.isReadOnly||t.isModelReadOnly||!t.allowInsert||!t.allowGroup||!t.model.Bh()||this.archetypeGroupData===null)return!1;const i=t.selection.iterator;for(;i.next();){const s=i.value;if(s.Oi()&&s.canGroup())return!0}return!1}GC(t){const e=U.ot();if(Array.isArray(t))t.forEach(n=>{n instanceof Link||n instanceof Part&&e.push(n)});else{const n=t.iterator;for(;n.next();){const o=n.value;o instanceof Link||o instanceof Part&&e.push(o)}}const i=new GSet,s=e.length;for(let n=0;n<s;n++){const o=e[n];let r=!0;for(let l=0;l<s;l++)if(o.isMemberOf(e[l])){r=!1;break}r&&i.add(o)}return U._(e),i}isValidMember(t,e){if(e===null||t===e||e instanceof Link)return!1;let i;return t!==null&&(t===e||t.isMemberOf(e)||(i=t.memberValidation,i!==null&&!i(t,e))||t.data===null&&e.data!==null||t.data!==null&&e.data===null)?!1:(i=this.memberValidation,i!==null?i(t,e):!0)}ungroupSelection(t){t===void 0&&(t=null);const e=this.a,i=e.model;if(i.Bh())try{e.currentCursor="wait",e.D("ChangingSelection",e.selection),e.startTransaction("Ungroup");const s=new List;if(t!==null)s.add(t);else{const o=e.selection.iterator;for(;o.next();){const r=o.value;r instanceof Group&&r.canUngroup()&&s.add(r)}}const n=new List;if(s.count>0){e.clearSelection(!0);const o=s.iterator;for(;o.next();){const r=o.value;r.expandSubGraph();const l=r.containingGroup,a=l!==null&&l.data!==null?i.getKeyForNodeData(l.data):void 0;n.addAll(r.memberParts);const h=n.iterator;for(;h.next();){const c=h.value;if(c.isSelected=!0,c instanceof Link)continue;const f=c.data;f!==null?i.setGroupForData(f,a):c.containingGroup=l}e.remove(r)}}e.D("SelectionUngrouped",s,n)}finally{e.commitTransaction("Ungroup"),e.D("ChangedSelection",e.selection),e.currentCursor=""}}canUngroupSelection(t){t===void 0&&(t=null);const e=this.a;if(e.isReadOnly||e.isModelReadOnly||!e.allowDelete||!e.allowUngroup||!e.model.Bh())return!1;if(t!==null){if(!(t instanceof Group))return!1;if(t.canUngroup())return!0}else{const s=e.selection.iterator;for(;s.next();){const n=s.value;if(n instanceof Group&&n.canUngroup())return!0}}return!1}addTopLevelParts(t,e){const i=this.GC(t);let s=!0;const n=i.iterator;for(;n.next();){const o=n.value;o.containingGroup!==null&&(!e||this.isValidMember(null,o)?o.containingGroup=null:s=!1)}return s}collapseSubGraph(t){t===void 0&&(t=null);const e=this.a,i="Collapse SubGraph";try{e.startTransaction(i),e.animationManager._l(i);const n=new List;if(t!==null&&t.isSubGraphExpanded)t.collapseSubGraph(),n.add(t);else if(t===null){const o=e.selection.iterator;for(;o.next();){const r=o.value;r instanceof Group&&r.isSubGraphExpanded&&(r.collapseSubGraph(),n.add(r))}}e.D("SubGraphCollapsed",n)}finally{e.commitTransaction(i)}}canCollapseSubGraph(t){t===void 0&&(t=null);const e=this.a;if(e.isReadOnly)return!1;if(t!==null)return!(!(t instanceof Group)||!t.isSubGraphExpanded);{const i=e.selection.iterator;for(;i.next();){const s=i.value;if(s instanceof Group&&s.isSubGraphExpanded)return!0}}return!1}expandSubGraph(t){t===void 0&&(t=null);const e=this.a,i="Expand SubGraph",s=new List;try{if(e.startTransaction(i),e.animationManager._l(i),t!==null&&!t.isSubGraphExpanded)t.expandSubGraph(),s.add(t);else if(t===null){const o=e.selection.iterator;for(;o.next();){const r=o.value;r instanceof Group&&(r.isSubGraphExpanded||(r.expandSubGraph(),s.add(r)))}}e.D("SubGraphExpanded",s)}finally{for(const n of s)this.gD(e,n);t&&this.gD(e,t),e.commitTransaction(i)}}gD(t,e){for(const i of e.memberParts)i instanceof Node&&t.sf(i,e)}canExpandSubGraph(t){t===void 0&&(t=null);const e=this.a;if(e.isReadOnly)return!1;if(t!==null)return!(!(t instanceof Group)||t.isSubGraphExpanded);{const i=e.selection.iterator;for(;i.next();){const s=i.value;if(s instanceof Group&&!s.isSubGraphExpanded)return!0}}return!1}editTextBlock(t){t===void 0&&(t=null),t!==null&&U.le(t,TextBlock,CommandHandler,"editTextBlock");const e=this.a,i=e.toolManager.findTool("TextEditing");if(i!==null){if(t===null){let s=null;const n=e.selection.iterator;for(;n.next();){const o=n.value;if(o.canEdit()){s=o;break}}if(s===null)return;t=s.findInVisualTree(o=>o instanceof TextBlock&&o.editable)}t!==null&&(e.currentTool=null,i.textBlock=t,e.currentTool=i)}}canEditTextBlock(t){t===void 0&&(t=null);const e=this.a;if(e.isReadOnly||e.isModelReadOnly||!e.allowTextEdit||e.toolManager.findTool("TextEditing")===null)return!1;if(t!==null){if(!(t instanceof TextBlock))return!1;const i=t.part;if(i!==null&&i.canEdit())return!0}else{const i=e.selection.iterator;for(;i.next();){const s=i.value;if(s.canEdit()&&(t=s.findInVisualTree(n=>n instanceof TextBlock&&n.editable),t!==null))return!0}}return!1}showContextMenu(t){const e=this.a,i=e.toolManager.findTool("ContextMenu");if(i===null)return;t===void 0&&(t=null),t===null&&(e.selection.count>0?t=e.selection.first():t=e);const s=i.findObjectWithContextMenu(t);if(s!==null){const n=e.lastInput;let o;if(s instanceof GraphObject?o=s.getDocumentPoint(Spot.Center):e.viewportBounds.containsPoint(n.documentPoint)?o=Point.xn:o=e.viewportBounds.center,o.isReal()){const r=new InputEvent;r.diagram=e,r.viewPoint=e.transformDocToView(o),r.documentPoint=o,r.button=2,r.up=!0,e.lastInput=r}e.currentTool=i,i.openMenu(!1,s)}}canShowContextMenu(t){const e=this.a,i=e.toolManager.findTool("ContextMenu");return!(i===null||(t===void 0&&(t=null),t===null&&(e.selection.count>0?t=e.selection.first():t=e),i.findObjectWithContextMenu(t)===null))}downloadSvg(t){const e=this.a,i={scale:1,background:e.div?e.div.style.backgroundColor:"white",name:this.xI("svg")};t&&Object.assign(i,t);const s=e.makeSvg(i);if(s!==null){const n=new XMLSerializer().serializeToString(s);this.bI(i.name,"image/svg+xml",n)}}downloadSVG(t){this.downloadSvg(t)}canDownloadSvg(t){return this.a!==null}bI(t,e,i){let s=null,n=null;try{const o=new Blob([i],{type:e});s=root.URL.createObjectURL(o),n=U.Li("a"),n.style.display="none",n.href=s,n.download=t,root.document.body.appendChild(n),requestAnimationFrame(()=>{try{n!==null&&n.click()}finally{s!==null&&root.URL.revokeObjectURL(s),n!==null&&root.document.body.removeChild(n)}})}catch{s!==null&&root.URL.revokeObjectURL(s),n!==null&&root.document.body.removeChild(n)}}xI(t){const e="."+t;let i=this.diagram.model.name;return i?i.endsWith(e)&&(i=i.substring(0,i.length-e.length)):i="diagram",i+=e,i}get copiesClipboardData(){return this.pC}set copiesClipboardData(t){this.pC=!!t}get copiesConnectedLinks(){return this.yC}set copiesConnectedLinks(t){this.yC=!!t}get deletesConnectedLinks(){return this.wC}set deletesConnectedLinks(t){this.wC=!!t}get copiesTree(){return this.xC}set copiesTree(t){this.xC=!!t}get deletesTree(){return this.bC}set deletesTree(t){this.bC=!!t}get copiesParentKey(){return this.kC}set copiesParentKey(t){this.kC=!!t}get copiesGroupKey(){return this.PC}set copiesGroupKey(t){this.PC=!!t}get storageLocation(){return this.SC}set storageLocation(t){t||(t="memory"),t!=="memory"&&t!=="sessionStorage"&&t!=="localStorage"&&t!=="systemClipboard"&&U.n("Invalid new value for CommandHandler.storageLocation: "+t),this.SC=t}get archetypeGroupData(){return this.MC}set archetypeGroupData(t){t!==null&&U.Fc(t,CommandHandler,"archetypeGroupData");const e=this.a;this.MC=t}get memberValidation(){return this.Pa}set memberValidation(t){t!==null&&U.S(t,CommandHandler,"memberValidation"),this.Pa=t}get defaultScale(){return this.diagram.defaultScale}set defaultScale(t){this.diagram.defaultScale=t}get zoomFactor(){return this.CC}set zoomFactor(t){t>1||U.n("zoomFactor must be larger than 1.0, not: "+t),this.CC=t}get isZoomToFitRestoreEnabled(){return this.NC}set isZoomToFitRestoreEnabled(t){this.NC=!!t}get scrollToPartPause(){return this.TC}set scrollToPartPause(t){this.TC=t}computeEffectiveCollection(t,e){const i=this.a,s=i.toolManager.findTool("Dragging"),n=i.currentTool===s;e===void 0&&(e=i.Bp());const o=new GMap;if(t===null)return o;let r=t.iterator;for(;r.next();){const l=r.value;i.hl(o,l,n,e)}if(i.draggedLink!==null&&e.dragsLink)return o;for(r=t.iterator;r.next();){const l=r.value;if(l instanceof Link){const a=l.fromNode;if(a!==null&&!o.has(a))o.delete(l);else{const h=l.toNode;h!==null&&!o.has(h)&&o.delete(l)}}}return o}static getModifierNames(){return CommandHandler.Ad}static setModifierNames(t){CommandHandler.Ad=t}static dI(t){let e="";return t&1&&(e+=CommandHandler.Ad[0]||""),t&4&&(e+=CommandHandler.Ad[1]||""),t&2&&(e+=CommandHandler.Ad[2]||""),t&8&&(e+=CommandHandler.Ad[3]||""),e}static uI(t){return t===1?CommandHandler.cI:t===2?CommandHandler.fI:CommandHandler.uD}static zC(t,e,i){var s=new Point(i,0).rotate(t-e/2),n=new Geometry().add(new PathFigure(-i,-i)).add(new PathFigure(i,i)).add(new PathFigure(s.x,s.y).add(new PathSegment(5,t-e/2,e,0,0,i,i)));return n.offset(i,i),n}gI(t){t.isTransactionFinished&&this.updateFocusBox()}mI(t){if(t.subject.scale===this.diagram.scale)return;const e=4/this.diagram.scale,i=this.focusBox.findObject("SHAPE");i!==null&&(i.strokeWidth=e);const s=this.focusBox.findObject("SHAPE2");s!==null&&(s.strokeWidth=e,s.strokeDashArray=[e,e]);const n=this.focusBox.placeholder;n!==null&&(n.padding=e)}pI(t){this.focus===null?U.yn(()=>{this.focus=this.findFirstFocus()},500):this.onFocusChanged(this.focus,this.focus)}yI(t){this.isVirtualPointerShown=!1}get isFocusEnabled(){return this.LC}set isFocusEnabled(t){t=!!t;const e=this.isFocusEnabled;t!==e&&(t||(this.isVirtualPointerShown=!1,this.UC=this.focus,this.focus=null),this.LC=t,t&&(this.focus=this.UC,this.updateFocusBox()))}get focusBox(){return this.Kp}set focusBox(t){if(!(t instanceof Adornment))return;const e=this.Kp;if(t!==e&&(this.Kp=t,e.adornedObject!==null)){const i=e.adornedPart;i!==null&&i.removeAdornment("Focus"),t.adornedObject=e.adornedObject,i!==null&&i.addAdornment("Focus",t)}}get focus(){return this.Kp.adornedObject}set focus(t){const e=this.focus;if(t!==e){const i=this.a;if(!i||!this.isFocusEnabled||t!==null&&t.diagram!==i)return;i.currentTool instanceof ContextMenuTool||this.cancelVirtualPointer();const s=this.focusBox.adornedPart;s&&s.removeAdornment("Focus"),t===null?(this.Ld=null,this.virtualPointerLocation=i.viewportBounds.center,this.focusBox.adornedObject=null):(this.virtualPointerLocation=t.getDocumentPoint(Spot.Center),this.focusBox.adornedObject=t,this.updateFocusBox()),this.onFocusChanged(e,t)}}onFocusChanged(t,e){const i=this.a;if(i&&(this.focusChanged!==null?this.focusChanged(t,e,this):this.kI(this.describe(t,e)),e!==null&&e.part!==null)){const s=e.getDocumentBounds();i.viewportBounds.containsRect(s)||(e instanceof Part?i.commandHandler.scrollToPart(e):i.scrollToRect(s))}}get focusChanged(){return this.AC}set focusChanged(t){t!==null&&U.S(t,CommandHandler,"focusChanged"),this.AC=t}get liveElementId(){return this.U1||this.DC}set liveElementId(t){const e=this.U1;t!==e&&(this.U1=t,this.YC())}YC(){const t=this.diagram;if(!t||!Diagram.isUsingDOM())return;const e=t.st?.gt;if(!e)return;const i=this.liveElementId,s=root.document.getElementById(i);this.isUsingAriaLive?(e.removeAttribute("aria-labelledby"),s&&s.setAttribute("aria-live","polite")):(i&&e.setAttribute("aria-labelledby",i),s&&s.removeAttribute("aria-live"))}get isUsingAriaLive(){return this.B1}set isUsingAriaLive(t){const e=this.B1;t!==e&&(this.B1=t,this.YC())}kI(t){const e=this.diagram;if(!e||!Diagram.isUsingDOM()||!e.div)return;let i=this.liveElementId;if(!i){const n=U.Li("span"),o=n.style;for(o.opacity="0",o.position="absolute",o.right="-9999px",o.bottom="-9999px",o.width="0px",o.height="0px",o.overflow="hidden",o.border="0",i=(e.div.id||"diagram")+"_aria";root.document.getElementById(i);)i+=Math.floor(U.um()*10);n.id=i,this.DC=i,e.div.appendChild(n),this.YC()}const s=root.document.getElementById(i);s&&(s.textContent=t)}describe(t,e){let i="";e instanceof Node?e instanceof Group?i="Group":i="Node":e instanceof Link?i="Link":e instanceof Part?i="Part":e&&(e.click?i="button":e instanceof TextBlock&&e.editable&&(i="editable"),e.portId!==null&&(i&&(i+=" "),i+="port",e.portId&&(i+=" "+e.portId)));const s=this.KC(e);s&&(i+=" "+s);const n=e;if(t&&n instanceof Link&&n.fromNode&&n.toNode){if(t instanceof Node&&t.part===n.fromNode||t instanceof Link&&t.fromNode===n.fromNode){i+=" to "+this.KC(n.toNode,!0);const o=n.toPort?.portId;o&&(i+=" port "+o)}else if(t instanceof Node&&t.part===n.toNode||t instanceof Link&&t.toNode===n.toNode){i+=" from "+this.KC(n.fromNode,!0);const o=n.fromPort?.portId;o&&(i+=" port "+o)}}return i}KC(t,e){if(e===void 0&&(e=!1),!t)return"";if(t instanceof TextBlock&&t.text)return t.text;if(t instanceof Panel){let i="";return t instanceof Part&&t.text&&(i=t.text),e&&i||t.walkVisualTreeFrom(t,(s,n)=>{n.isVisibleObject()&&n instanceof TextBlock&&n.text&&(!e||!i)&&i!==n.text&&(i+=" "+n.text)}),i}return""}updateFocusBox(){const t=this.focus;if(t===null)return;if(t.diagram!==null&&(t instanceof Part?t.isVisible():t.isVisibleObject()&&t.part?.isVisible()))this.focusBox.adornedObject=t,t.part?.addAdornment("Focus",this.focusBox);else{let i=null;if(t instanceof Part||(i=t.part),i instanceof Part&&i.isVisible())this.focus=i;else{if(i instanceof Node&&!i.isVisible()){const s=i.findTreeParentNode();if(s!==null)i=s;else{const n=i.labeledLink;n!==null&&(i=n)}}for(;i instanceof Part&&!i.isVisible();)i=i.containingGroup;i instanceof Part&&i.isVisible()?this.focus=i:this.focus=null}}}findFirstFocus(){const t=this.a;if(t===null||!t.isEnabled)return null;if(this.focus!==null)return this.focus;if(this.isFocusEnabled)if(t.selection.count>0)this.focus=t.selection.first();else{const e=this.mD(t.isTreePathToChildren).first();if(e!==null)return e}return null}get isVirtualPointerEnabled(){return this.FC}set isVirtualPointerEnabled(t){t=!!t;const e=this.isVirtualPointerEnabled;if(t!==e&&(this.FC=t,t)){const i=this.jp;i&&(this.jp=null,i.commandHandler.Cs=null,i.commandHandler.cancelVirtualPointer())}}get isVirtualPointerShown(){return this.vC}set isVirtualPointerShown(t){t=!!t;const e=this.isVirtualPointerShown;if(t!==e){const i=this.a;if(!i||!this.isVirtualPointerEnabled)return;this.vC=t;const s=this.focus;t?this.virtualPointerBox.diagram===null&&(this.virtualPointerLocation.isReal()||(s!==null?this.virtualPointerLocation=s.getDocumentPoint(Spot.Center):this.virtualPointerLocation=i.viewportBounds.center),i.add(this.virtualPointerBox),this.Ma()):this.virtualPointerBox.diagram!==null&&(i.remove(this.virtualPointerBox),this.Ma())}}cancelVirtualPointer(){const t=this.a;t&&(this.XC(),this.isVirtualPointerShown=!1,t.currentTool.doCancel(),this.isVirtualPointerDown=!1,this.HC())}HC(){const t=this.Cs;if(t!==null){this.Cs=null;const e=t.commandHandler;e.Cs=null,e.jp=null,e.isVirtualPointerShown=!1,e.isVirtualPointerDown=!1,e.XC(),this.V1&&(e.isVirtualPointerEnabled=!1),this.V1=!1}}XC(){this.Ui.button=0,this.Ui.modifiers=0,this.Ui.clickCount=1,this.Ui.down=!1,this.Ma()}Ma(){this.virtualPointerChanged!==null&&this.virtualPointerChanged(this.virtualPointerBox,this),this.updateVirtualPointer()}updateVirtualPointer(){const t=this.virtualPointerBox.diagram;t&&(this.virtualPointerBox.scale=1/t.scale),this.virtualPointerBox.updateTargetBindings()}get virtualPointerBox(){return this.Td}set virtualPointerBox(t){if(!(t instanceof Part))return;const e=this.Td;t!==e&&(e!==null&&(t.location=e.location,e.diagram!==null&&e.diagram.remove(e)),this.Td=t,this.isVirtualPointerShown&&this.diagram&&(this.diagram.add(t),t.data=e.data),this.Ma())}get virtualPointerChanged(){return this.RC}set virtualPointerChanged(t){t!==null&&U.S(t,CommandHandler,"virtualPointerChanged"),this.RC=t}get virtualPointerLocation(){return this.virtualPointerBox.location}set virtualPointerLocation(t){this.virtualPointerLocation.equals(t)||this.pD(t.x,t.y)}get isVirtualPointerDown(){return this.virtualPointerBox.data?this.virtualPointerBox.data.down:!1}set isVirtualPointerDown(t){t=!!t;const e=this.isVirtualPointerDown;if(t!==e){const i=this.a;if(!i||!this.isVirtualPointerEnabled||(this.virtualPointerBox.data===null&&(this.Td.data=this.Ui),this.virtualPointerBox.data.down=t,this.Ma(),!this.isVirtualPointerShown))return;const s=i.lastInput,n=new InputEvent;n.diagram=i,this.yD(n,t),t?n.down=!0:n.up=!0,n.clickCount=1,n.button=this.Ui.button,n.modifiers=this.Ui.modifiers,t&&(i.firstInput=n.copy()),this.Dd(n,!0),t||this.Ui.clickCount===2&&(n.clickCount=2,n.down=!0,n.up=!1,this.Dd(n,!0),n.down=!1,n.up=!0,this.Dd(n,!0),this.wD(1)),i.lastInput=s}}get virtualPointerShiftMove(){return this.Hp}set virtualPointerShiftMove(t){this.Hp=t}get virtualPointerControlMove(){return this.qp}set virtualPointerControlMove(t){this.qp=t}Wp(t,e){this.pD(this.virtualPointerLocation.x+t,this.virtualPointerLocation.y+e)}pD(t,e){this.virtualPointerBox.moveTo(t,e,!0);const i=this.a;if(!i||!this.isVirtualPointerEnabled||!this.isVirtualPointerShown)return;i.ensureBounds();const s=i.lastInput,n=new InputEvent;n.diagram=i,this.yD(n,this.isVirtualPointerDown),n.button=this.Ui.button,n.modifiers=this.Ui.modifiers,this.Dd(n,!0),i.lastInput=s,this.isVirtualPointerDown&&(i.remove(this.virtualPointerBox),i.add(this.virtualPointerBox)),this.Ma()}yD(t,e){const i=this.a;if(i){if(t.targetDiagram=i,t.documentPoint=this.virtualPointerLocation,i.allowDragOut){const s=i.div.getBoundingClientRect(),n=i.transformDocToView(this.virtualPointerLocation),o=s.x+n.x,r=s.y+n.y;let l=root.document.elementFromPoint(o,r)||null;l instanceof HTMLCanvasElement&&(l=l.parentElement),l!==null&&l.shadowRoot&&(l=l.shadowRoot.elementFromPoint(o,r)||null,l instanceof HTMLCanvasElement&&(l=l.parentElement));let a=null;if(l instanceof HTMLElement&&(a=Diagram.Qi.get(l))&&a!==i&&a.div){const h=a.div.getBoundingClientRect(),c=new Point(n.x-(h.x-s.x),n.y-(h.y-s.y));this.Cs!==null&&this.Cs!==a&&this.HC(),t.targetDiagram=a,t.viewPoint=c,t.documentPoint=a.transformViewToDoc(c),t.viewPoint=a.transformDocToView(t.documentPoint),this.Cs=a;const f=a.commandHandler;this.V1=!f.isVirtualPointerEnabled,f.isVirtualPointerEnabled=!0,f.isVirtualPointerDown=e,f.virtualPointerLocation=t.documentPoint,f.isVirtualPointerShown=!0,f.jp=i;return}}this.Cs!==null&&this.HC(),t.viewPoint=i.transformDocToView(t.documentPoint)}}Dd(t,e){this.doVirtualPointerEvent(t,e)}doVirtualPointerEvent(t,e){const i=this.a;i&&(t.timestamp=Date.now(),i.lastInput=t,e&&(t.up?i.doMouseUp():t.down?i.doMouseDown():i.doMouseMove()),this.onVirtualPointerEvent(t,e))}onVirtualPointerEvent(t,e){const i=this.a;i&&(t.up?this.isVirtualPointerDown&&!i.viewportBounds.containsPoint(this.virtualPointerLocation)&&(this.virtualPointerLocation=this.focus instanceof GraphObject?this.focus.getDocumentPoint(Spot.Center):i.viewportBounds.center):t.down)}doVirtualFocusKeyDown(){const t=this.a;if(!t)return!1;const e=t.lastInput,i=e.commandKey;if(this.isVirtualPointerEnabled&&(i==="ShiftLeft"||i==="ShiftRight"))return this.isVirtualPointerShown=!0,!0;if(this.dD.indexOf(i)>=0)if(e.shift&&this.isVirtualPointerShown){const s=this.z1(i),n=e.control||e.meta?this.qp:this.Hp;s===270?this.Wp(0,-n):s===90?this.Wp(0,n):s===180?this.Wp(-n,0):this.Wp(n,0)}else this.SI();else if(e.shift&&this.isVirtualPointerShown&&(i==="Numpad1"||i==="Numpad2"||i==="Numpad3"||i==="Numpad4"||i==="Numpad6"||i==="Numpad7"||i==="Numpad8"||i==="Numpad9")){const s=e.control||e.meta?this.qp:this.Hp;let n=0;i==="Numpad1"||i==="Numpad4"||i==="Numpad7"?n=-s:(i==="Numpad3"||i==="Numpad6"||i==="Numpad9")&&(n=s);let o=0;i==="Numpad7"||i==="Numpad8"||i==="Numpad9"?o=-s:(i==="Numpad1"||i==="Numpad2"||i==="Numpad3")&&(o=s),this.Wp(n,o)}else if(i==="Enter"||i==="NumpadEnter"||i==="Numpad5")e.shift&&this.isVirtualPointerShown?this.isVirtualPointerDown=!this.isVirtualPointerDown:this.MI();else if(i==="Escape")this.CI();else if(i==="Space")this.NI();else if(i==="ContextMenu"||e.shift&&i==="F10"||(e.control||e.meta)&&e.shift&&i==="Backslash")this.TI();else if(e.shift&&i==="c")this.X1(1);else if(e.shift&&i==="a")this.X1(2);else if(e.shift&&i==="KeyS")this.X1(4);else if(e.shift&&i==="KeyM")this.X1(8);else if(e.shift&&i==="Digit1")this.G1(0);else if(e.shift&&i==="Digit2")this.G1(1);else if(e.shift&&i==="Digit3")this.G1(2);else if(e.shift&&i==="Numpad0"){const s=this.Ui.button;this.G1(s===2?0:2)}else if(e.shift&&(i==="KeyD"||i==="NumpadDecimal")){const s=this.Ui.clickCount;this.wD(s===2?1:2)}else if(e.shift&&i==="KeyF"){const s=this.nextFocusFormula;this.nextFocusFormula=s==="distance"?"linear":"distance"}else if(e.shift&&i==="y")this.isUsingAriaLive=!this.isUsingAriaLive;else return!1;return!0}doVirtualFocusKeyUp(){const t=this.a;if(!t)return!1;const i=t.lastInput.commandKey;return this.isVirtualPointerEnabled&&(i==="ShiftLeft"||i==="ShiftRight")&&(this.isVirtualPointerShown=!1),!0}z1(t){switch(t){case"ArrowDown":return 90;case"ArrowLeft":return 180;case"ArrowUp":return 270;default:return 0}}dD=["ArrowRight","ArrowDown","ArrowLeft","ArrowUp"];X1(t){const e=this.Ui.modifiers;this.Ui.modifiers=e&t?e&~t:e|t,this.Ma()}wD(t){this.Ui.clickCount=t,this.Ma()}G1(t){this.Ui.button=t,this.Ma()}SI(){const t=this.a;if(!t)return;const e=t.lastInput,i=this.focus;if(i===null){const s=this.mD(t.isTreePathToChildren).first();s!==null&&(this.focus=s)}else if(i instanceof Link)this.LI(i);else if(i instanceof Node)this.AI(i);else{i instanceof Part&&(this.Ld=null);const s=this.z1(e.commandKey);s===270?this.focus=this.findNextFocus(270):s===90?this.focus=this.findNextFocus(90):s===180?this.focus=this.findNextFocus(180):this.focus=this.findNextFocus(0)}}LI(t){const e=this.a;if(!e)return;const i=e.lastInput,s=this.z1(i.commandKey);let n=null;const o=this.Ld;if(o!==null){const r=this.VC;if(s===r)n=t.getOtherNode(o);else if(s===G.ze(r+180))n=o;else{let l=r===0||r===180?90:0,a=r===0||r===180?270:180;if(s===l){const h=this.qC(o,r,!0),c=h.indexOf(t);c>=0&&c<h.count-1&&(this.focus=h.elt(c+1))}else if(s===a){const h=this.qC(o,r,!0),c=h.indexOf(t);c>0&&(this.focus=h.elt(c-1))}}}else{const r=t.fromNode,l=t.toNode;if(!r||!l)return;s===270?n=r.location.y<l.location.y?r:l:s==90?n=r.location.y>l.location.y?r:l:s===180?n=r.location.x<l.location.x?r:l:n=r.location.x>l.location.x?r:l}for(;n!==null&&!n.isVisible();)n=n.containingGroup;n!==null&&(this.focus=n)}AI(t){const e=this.a;if(!e)return;const i=e.lastInput,s=this.z1(i.commandKey);if(i.control||i.meta){const n=this.qC(t,s,!0).first();n&&(this.Ld=t,this.VC=s,this.focus=n)}else this.Ld=null,this.focus=this.findNextFocus(s)}qC(t,e,i){if(t===null)return new List;const s=t.actualBounds;if(!s.isReal())return new List;const n=new Set;(t instanceof Group?t.findExternalLinksConnected():t.findLinksConnected()).each(l=>{if(!l.isVisible())return;let a=null;if(l.fromNode===t?a=l.toNode:l.toNode===t?a=l.fromNode:t instanceof Group&&(l.fromNode?.isMemberOf(t)?a=l.toNode:l.toNode?.isMemberOf(t)&&(a=l.fromNode)),a===null||a.isMemberOf(t))return;for(;a!==null&&!a.isVisible();)a=a.containingGroup;if(a===null)return;const h=a.location;if(h.isReal()&&!(e===270&&(a!==t?h.y>=s.top:l.midPoint.y>=s.top))){{if(e===90&&(a!==t?h.y<=s.bottom:l.midPoint.y<=s.bottom))return;if(e===180&&(a!==t?h.x>=s.left:l.midPoint.x>=s.left))return;if(e===0&&(a!==t?h.x<=s.right:l.midPoint.x<=s.right))return}i&&l.actualBounds.isReal()?n.add(l):n.add(a)}});const r=new List(n);return e===90||e===270?r.sort((l,a)=>l.actualBounds.centerX-a.actualBounds.centerX):r.sort((l,a)=>l.actualBounds.centerY-a.actualBounds.centerY),r}findNextFocus(t){t=G.ze(t);const e=this.focus,i=e instanceof Node?e.location:e.getDocumentPoint(Spot.Center);let s=1/0,n=e;const o=(r,l,a,h)=>{if(this.nextFocusFormula==="linear"){let c=1/0;t===0&&a>i.x||t===180&&a<i.x?c=Math.abs(a-i.x):(t===90&&h>i.y||t===270&&h<i.y)&&(c=Math.abs(h-i.y)),c<s&&(s=c,n=r)}else{if(t===0&&(l.right<i.x||(l.centerX-i.x)**2>s))return;if(t===90&&(l.bottom<i.y||(l.centerY-i.y)**2>s))return;if(t===180&&(l.x>i.x||(i.x-l.centerX)**2>s))return;if(t===270&&(l.y>i.y||(i.y-l.centerY)**2>s))return;const c=i.direction(a,h),f=G.SR(t,c);if(t===90||t===270?f<=45:f<45){const u=i.distanceSquared(a,h);u<s&&(s=u,n=r)}}};if(e instanceof Part&&e.diagram!==null){const r=e.containingGroup;r!==null?r.memberParts.each(l=>{l===e||l instanceof Link||!l.isVisible()||o(l,l.actualBounds,l.location.x,l.location.y)}):(e.diagram.nodes.each(l=>{l===e||!l.isTopLevel||!l.isVisible()||o(l,l.actualBounds,l.location.x,l.location.y)}),e.diagram.parts.each(l=>{l===e||!l.isTopLevel||!l.isVisible()||o(l,l.actualBounds,l.location.x,l.location.y)}))}else if(e.part!==null){const r=new Rect;this.jC(e.part).each(l=>{l!==e&&(l.getDocumentBounds(r),o(l,r,r.centerX,r.centerY))})}return n}get nextFocusFormula(){return this.BC}set nextFocusFormula(t){this.BC=t}MI(){const t=this.a;if(!t)return;const e=t.currentTool;if(e instanceof ContextMenuTool){const n=e.currentObject;this.Y1(this.focus),e.maybeStopTool(this.focus),t.currentTool instanceof ContextMenuTool||(this.focus=n);return}const i=this.focus,s=t.lastInput;if(i===null)s.control||s.meta?this.Y1(null):this.focus=this.findFirstFocus();else if(i instanceof Part)if(s.control||s.meta)this.Y1(i);else{const n=this.jC(i);if(n.count>0)this.focus=n.first();else if(i instanceof Link&&i.isLabeledLink){const o=i.labelNodes.first();o!==null&&o.isVisible()&&(this.focus=o)}else if(i instanceof Group&&i.isSubGraphExpanded){const o=i.memberParts.first();o!==null&&o.isVisible()&&(this.focus=o)}}else this.Y1(i)}mD(t){const e=new List,i=this.a;if(!i)return e;let s=0;for(;e.count===0&&s<i.nodes.count;){const n=i.nodes;for(;n.next();){const o=n.value;o.isTopLevel&&o.isVisible()&&(t?o.findNodesInto():o.findNodesOutOf()).count===s&&e.add(o)}s++}return e}jC(t){return t instanceof Part?this.An(t,new List):new List}An(t,e){return!(t instanceof Part)&&t.isVisibleObject()&&t.isEnabledObject()&&(t.contextMenu||t.click||t instanceof TextBlock&&t.editable||t.part instanceof Node&&t.portId!==null&&(t.portId!==""||t.part.ports.count>1)||t.toolTip)&&e.add(t),t instanceof Panel&&t.elements.each(i=>this.An(i,e)),e}Y1(t){const e=this.a;if(!e)return;const i=e.lastInput,s=t instanceof GraphObject?t:e;if(s.click){const n=new InputEvent;n.diagram=e,n.documentPoint=t instanceof GraphObject?t.getDocumentPoint(Spot.Center):e.viewportBounds.center,n.viewPoint=e.transformDocToView(n.documentPoint),n.button=0,n.clickCount=1,n.targetObject=t,this.Dd(n,!1),s instanceof GraphObject?s.click(n,s):s.click(n),e.lastInput=i}else s instanceof TextBlock&&s.editable?this.editTextBlock(s):this.xD(t)}CI(){const t=this.a;if(!t)return;const e=t.currentTool;if(e instanceof ToolManager&&e.currentToolTip!==null){e.hideToolTip();return}else if(e instanceof ContextMenuTool){const i=e.currentObject;e.doKeyDown(),this.focus=i;return}if(this.focus instanceof Part){const i=this.focus;i instanceof Node&&i.labeledLink!==null?this.focus=i.labeledLink:i.containingGroup!==null?this.focus=i.containingGroup:this.focus=null}else if(this.focus instanceof GraphObject){const i=this.focus.part;if(i instanceof Link&&i.isLabeledLink){const s=i.labelNodes.first();if(s!==null&&s.isVisible()){this.focus=s;return}}else if(i instanceof Group&&i.isSubGraphExpanded){const s=i.memberParts.first();if(s!==null&&s.isVisible()){this.focus=s;return}}this.focus=i}else this.cancelVirtualPointer(),this.stopCommand()}NI(){const t=this.a;if(!t)return;if(t.lastInput.shift&&this.isVirtualPointerShown){const i=t.findPartAt(this.virtualPointerLocation);i!==null&&(i===this.focus?this.bD():this.focus=i)}else this.bD()}bD(){const t=this.a;if(!t)return;const e=t.lastInput,i=this.focus;if(i instanceof Part){let s=i.part;if(e.control||e.meta){for(t.raiseDiagramEvent("ChangingSelection",t.selection);s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!s.isSelected),t.raiseDiagramEvent("ChangedSelection",t.selection)}else if(e.shift){if(s!==null&&!s.isSelected){for(t.raiseDiagramEvent("ChangingSelection",t.selection);s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&(s.isSelected=!0),t.raiseDiagramEvent("ChangedSelection",t.selection)}}else if(s!==null&&!s.isSelected){for(;s!==null&&!s.canSelect();)s=s.containingGroup;s!==null&&t.select(s)}}this.xD(i),this.onFocusChanged(i,i)}xD(t){const e=this.a;if(!e)return;e.toolManager.hideToolTip();const i=e.lastInput;let s=t instanceof GraphObject?t:e;for(;s instanceof GraphObject&&!s.toolTip;)s=s.panel;if(s&&s.toolTip){const n=new InputEvent;n.diagram=e,n.documentPoint=t!==null?t.getDocumentPoint(Spot.Center):e.viewportBounds.center,n.viewPoint=e.transformDocToView(n.documentPoint),n.targetObject=t,this.Dd(n,!1),e.toolManager.showToolTip(s.toolTip,t),e.lastInput=i}}TI(){const t=this.a;if(!t)return;const e=this.focus;if(this.canShowContextMenu(e)){this.showContextMenu(e);const i=t.toolManager.contextMenuTool.currentContextMenu;if(i instanceof Adornment){const s=this.jC(i);s.count>0&&(this.focus=s.first())}}}}var Stretch=(w=>(w[w.None=0]="None",w[w.Default=1]="Default",w[w.Vertical=4]="Vertical",w[w.Horizontal=5]="Horizontal",w[w.Fill=2]="Fill",w))(Stretch||{}),Orientation=(w=>(w[w.None=0]="None",w[w.Along=21]="Along",w[w.Plus90=22]="Plus90",w[w.Minus90=23]="Minus90",w[w.Opposite=24]="Opposite",w[w.Upright=25]="Upright",w[w.Plus90Upright=26]="Plus90Upright",w[w.Minus90Upright=27]="Minus90Upright",w[w.Upright45=28]="Upright45",w))(Orientation||{}),Flip=(w=>(w[w.None=0]="None",w[w.Vertical=1]="Vertical",w[w.Horizontal=2]="Horizontal",w[w.Both=3]="Both",w))(Flip||{});class GraphObject{o;Jp;$p;Ca;w;ao;ut;ft;ui;ie;Zp;en;Nt;ds;fl;Na;Le;Vh;it;Yt;ul;Ie;Je;Fd;pe;vd;Et;ue;dl;K1;Ta;Mf;constructor(){GSet._e(this),this.o=30723,this.ie=1,this.Zp="",this.en=null,this.Nt=null,this.ft=new Point(NaN,NaN).b(),this.ds=Size.cx,this.fl=new Transform,this.Na=new Transform,this.Le=null,this.Vh=1,this.it=1,this.Yt=0,this.ul=Margin.mm,this.ui=new Rect(NaN,NaN,NaN,NaN).b(),this.Ie=new Rect(NaN,NaN,NaN,NaN).b(),this.Je=new Rect(0,0,NaN,NaN).b(),this.Fd=null,this.Jp=null,this.ut=null,this.pe=Spot.Default,this.vd=Spot.Default,this.$p=0,this.Ca=0,this.Et=null,this.w=null,this.ao=null,this.ue=null,this.K1=null,this.Ta=null,this.dl=null,this.Mf=null}cloneProtected(t){t.o=(this.o|2048|4096)&-32769,t.ie=this.ie,t.Zp=this.Zp,t.Nt=this.Nt,t.ft.h(this.ft),t.ds=this.ds.C(),this.Le!==null?t.Le=this.Le.copy():t.Le=null,t.it=this.it,t.Yt=this.Yt,t.ul=this.ul.C(),t.ui.h(this.ui),t.Ie.h(this.Ie),t.Je.h(this.Je),t.Jp=this.Jp,this.ut!==null&&(t.ut=this.ut.copy()),t.pe=this.pe.C(),t.vd=this.vd.C(),t.$p=this.$p,t.Ca=this.Ca,this.Et!==null&&(t.Et=this.Et.copy()),this.w!==null&&(this.w.xe?t.w=this.w:t.w=this.w.copy()),this.ao!==null&&(t.ao=this.ao.slice()),this.ue!==null&&(t.ue=this.ue.copy())}addCopyProperty(t){let e=this.ao;if(!Array.isArray(e))e=[],this.ao=e;else for(let i=0;i<e.length;i++)if(e[i]===t)return;e.push(t)}Wo(t){t.Fd=null,t.dl=null,t.f()}clone(){const t=new this.constructor;return this.cloneProtected(t),this.kD(t),t}kD(t){if(this.ao!==null)for(let e=0;e<this.ao.length;e++){const i=this.ao[e];t[i]=this[i]}}DI(){if(this.ao!==null)for(let t=0;t<this.ao.length;t++){const e=this.ao[t];delete this[e]}}copy(){return this.clone()}lM(){const t=this.Ee;if(t!==null){this.Ee=null;for(const e of t)e.Rd()&&(e.isToData?this.themeData(e.targetProperty,e.sourceProperty,e.themeSource,e.converter,e.themeConverter):e.isToObject?this.themeObject(e.targetProperty,e.sourceProperty,e.themeSource,e.converter,e.themeConverter,e.sourceName):e.isToModel?this.themeModel(e.targetProperty,e.sourceProperty,e.themeSource,e.converter,e.themeConverter):this.theme(e.targetProperty,e.sourceProperty,e.themeSource,e.converter,e.themeConverter))}return this}ge(t){t in Orientation?this.segmentOrientation=t:t in Stretch?this.stretch=t:U.wr(this,t)}toString(){return U.Jn(this.constructor)+"#"+GSet.ks(this)}static None=0;static Default=1;static Fill=2;static Vertical;static Horizontal;static Uniform=6;static UniformToFill=7;static FlipVertical=1;static FlipHorizontal=2;static FlipBoth=3;La(){this.w!==null&&(this.w.xe=!0)}Ht(){return this.w===null?this.w=new GraphObjectTemplateSettings:this.w.xe&&(this.w=this.w.copy()),this.w}_i(){if(this.ut===null){const t=new LinkSettings;t.zh=Spot.None,t.Xh=Spot.None,t.Gh=10,t.Yh=10,t.Kh=0,t.Hh=0,this.ut=t}return this.ut}raiseChangedEvent(t,e,i,s,n,o,r){const l=this.part;if(l!==null){l.Cf(t,e,i,s,n,o,r),i===this&&t===2&&this.Nf()&&this.qh(l,e);const a=this.diagram;if(this.Os!==null&&a!==null&&a.ah&&!a.undoManager.isUndoingRedoing&&!a.animationManager.qu){const h=this.Os.get(e);if(h!==null&&a.animationManager.isEnabled&&!a.animationManager.isTicking){this.Mf===null&&(this.Mf=new GMap);let c=a.undoManager.transactionLevel===0;if(h.startCondition===2?c=!0:h.startCondition===3&&(c=!1),c){const f=new Animation;h.fO(f);const u=this.Mf.get(h);u!==null&&u.stop(),this.Mf.set(h,f),f.fb=this,f.ZM=h,f.add(this,e,s,n),f.start()}else a.animationManager.getBundleAnimation().add(this,e,s,n)}}if(this instanceof Panel&&i===l&&l.WC()&&l.data!==null){const h=this.F.r,c=h.length;for(let f=0;f<c;f++){const u=h[f];u instanceof Panel&&u.An(d=>{d.data!==null&&d.WC()&&d.updateTargetBindings(e)})}}}}lO(t){this.Mf&&this.Mf.delete(t)}Ho(){if(this.diagram===null)return;if(this.findBindingPanel()===null&&this.Ee!==null){const e=this.diagram.model,i=this.Ee.iterator;for(;i.next();){const s=i.value;if(!s.isToTheme)continue;let n=null;const o=s.sourceName;s.isToObject&&(n=this.PD(o));let r=this;const l=s.targetId;l!==-1&&(r=this.Qp(l),r===null)||(o==="/"?n=r.part:o==="."?n=r:o===".."&&(n=r.panel),s.updateTarget(r,n,void 0,e))}}}qh(t,e){const i=this.findBindingPanel();if(i!==null){const s=t.diagram,n=this.Ee.iterator;for(;n.next();){const o=n.value;let r=null;if(o.isToObject){if(r=o.SD(i,this),r===null)continue;o.updateSource(this,r,e,null)}else if(o.isToModel)s!==null&&!s.ki&&o.updateSource(this,s.model.modelData,e,i);else if(!o.isToTheme){const l=i.data;if(l===null)continue;s!==null&&!s.ki&&o.updateSource(this,l,e,i)}if(r===this){const l=o.targetId,a=i.Qp(l);a!==null&&o.updateTarget(a,r,e,s?.model)}}}}Qp(t){return this.ho===t?this:null}PD(t){let e;return t===""?e=this:t==="/"?e=this:t==="."?e=this:t===".."?e=this:e=this.part.findObject(t),e}get ho(){return this.w!==null?this.w.ho:-1}set ho(t){this.ho!==t&&(this.w===null&&(this.w=new GraphObjectTemplateSettings),this.w.ho=t)}get Ee(){return this.w!==null?this.w.Ee:null}set Ee(t){this.Ee!==t&&(this.w===null&&(this.w=new GraphObjectTemplateSettings),this.w.Ee=t)}get co(){return this.w!==null?this.w.co:null}set co(t){this.co!==t&&(this.w===null&&(this.w=new GraphObjectTemplateSettings),this.w.co=t)}raiseChanged(t,e,i){this.raiseChangedEvent(2,t,this,e,i)}t(t,e,i){this.raiseChangedEvent(2,t,this,e,i)}fo(t,e,i,s){const n=this.ui;if(n.e(t,e,i,s),this.it!==1||this.Yt!==0){this.Le===null&&(this.Le=new Transform);const o=this.Le;o.Xe(),this._p(o,t,e,i,s),o.pm(n)}}MD(t,e,i){return this.pickable===!1?!1:(i.Rc(this.T),e?this.intersectsRect(t,i):this.containedInRect(t,i))}CD(t,e,i){if(this.pickable===!1)return!1;const s=this.naturalBounds,n=t.distanceSquaredPoint(e);return i?Point.distanceLineSegmentSquared(t.x,t.y,0,0,0,s.height)<=n||Point.distanceLineSegmentSquared(t.x,t.y,0,s.height,s.width,s.height)<=n||Point.distanceLineSegmentSquared(t.x,t.y,s.width,s.height,s.width,0)<=n||Point.distanceLineSegmentSquared(t.x,t.y,s.width,0,0,0)<=n:t.distanceSquared(0,0)<=n&&t.distanceSquared(0,s.height)<=n&&t.distanceSquared(s.width,0)<=n&&t.distanceSquared(s.width,s.height)<=n}Fn(){return!0}containsPoint(t){const e=Point.l();e.h(t),this.T.wt(e);const i=this.actualBounds;if(!i.isReal())return Point.i(e),!1;const s=this.diagram;if(s!==null&&s.Tp){const o=s.getInputOption("extraTouchThreshold"),r=s.getInputOption("extraTouchArea"),l=r/2,a=this.naturalBounds,h=this.getDocumentScale()*s.scale,c=1/h;if(a.width*h<o&&a.height*h<o){const f=Rect.contains(i.x-l*c,i.y-l*c,i.width+r*c,i.height+r*c,e.x,e.y);return Point.i(e),f}}let n=!1;return(this instanceof Adornment||this instanceof Shape?Rect.contains(i.x-5,i.y-5,i.width+10,i.height+10,e.x,e.y):i.containsPoint(e))&&(this.ue&&!this.ue.containsPoint(e)?n=!1:this.Nt!==null&&this.Je.containsPoint(t)?n=!0:n=this.Aa(t)),Point.i(e),n}Aa(t){const e=this.naturalBounds;return Rect.contains(0,0,e.width,e.height,t.x,t.y)}containsRect(t){if(this.angle===0)return this.actualBounds.containsRect(t);const e=this.naturalBounds,i=Rect.O(0,0,e.width,e.height),s=this.T;let n=!1;const o=Point.O(t.x,t.y);return i.containsPoint(s.Di(o))&&(o.e(t.x,t.bottom),i.containsPoint(s.Di(o))&&(o.e(t.right,t.bottom),i.containsPoint(s.Di(o))&&(o.e(t.right,t.y),i.containsPoint(s.Di(o))&&(n=!0)))),Point.i(o),Rect.i(i),n}containedInRect(t,e){if(e===void 0)return t.containsRect(this.actualBounds);const i=this.naturalBounds,s=e;let n=!1;const o=Point.O(0,0);return t.containsPoint(s.wt(o))&&(o.e(0,i.height),t.containsPoint(s.wt(o))&&(o.e(i.width,i.height),t.containsPoint(s.wt(o))&&(o.e(i.width,0),t.containsPoint(s.wt(o))&&(n=!0)))),Point.i(o),n}intersectsRect(t,e){if(e===void 0&&(e=this.T,this.angle===0))return t.intersectsRect(this.actualBounds);const i=this.naturalBounds,s=e,n=Point.O(0,0),o=Point.O(0,i.height),r=Point.O(i.width,i.height),l=Point.O(i.width,0);let a=!1;if(t.containsPoint(s.wt(n))||t.containsPoint(s.wt(o))||t.containsPoint(s.wt(r))||t.containsPoint(s.wt(l)))a=!0;else{const h=Rect.O(0,0,i.width,i.height),c=Point.O(t.x,t.y);h.containsPoint(s.Di(c))?a=!0:(c.e(t.x,t.bottom),h.containsPoint(s.Di(c))?a=!0:(c.e(t.right,t.bottom),h.containsPoint(s.Di(c))?a=!0:(c.e(t.right,t.y),h.containsPoint(s.Di(c))&&(a=!0)))),Point.i(c),Rect.i(h),a||(G.xx(t,n,o)||G.xx(t,o,r)||G.xx(t,r,l)||G.xx(t,l,n))&&(a=!0)}return Point.i(n),Point.i(o),Point.i(r),Point.i(l),a}getDocumentPoint(t,e){if(e===void 0&&(e=new Point),t instanceof Spot){const i=t,s=this.naturalBounds;return e.e(i.x*s.width+i.offsetX,i.y*s.height+i.offsetY),this._s.wt(e),e}else return e.set(t),this._s.wt(e),e}getDocumentBounds(t){t===void 0&&(t=new Rect);const e=this.naturalBounds,i=this._s,s=Point.O(0,0).T(i);return t.e(s.x,s.y,0,0),s.e(e.width,0).T(i),t.he(s.x,s.y,0,0),s.e(e.width,e.height).T(i),t.he(s.x,s.y,0,0),s.e(0,e.height).T(i),t.he(s.x,s.y,0,0),Point.i(s),t}getDocumentAngle(){return this._s.xR()}getDocumentScale(){if(this.t0()===!1)return this.Vh;const t=this.it;return this.panel!==null?t*this.panel.getDocumentScale():t}getLocalPoint(t,e){return e===void 0&&(e=new Point),e.h(t),this._s.Di(e),e}getNearestIntersectionPoint(t,e,i){return this.Tf(t.x,t.y,e.x,e.y,i)}Tf(t,e,i,s,n){const o=this.T,r=1/(o.m11*o.m22-o.m12*o.m21),l=o.m22*r,a=-o.m12*r,h=-o.m21*r,c=o.m11*r,f=r*(o.m21*o.dy-o.m22*o.dx),u=r*(o.m12*o.dx-o.m11*o.dy),d=t*l+e*h+f,m=t*a+e*c+u,g=i*l+s*h+f,p=i*a+s*c+u;n.e(0,0);const y=this.naturalBounds,x=G.Bl(0,0,y.width,y.height,d,m,g,p,n);return n.T(o),x}ct(t,e,i,s){if(this.Ko()===!1)return;const n=this.ul,o=n.right+n.left,r=n.top+n.bottom;t=Math.max(t-o,0),e=Math.max(e-r,0),i=i||0,s=s||0,i=Math.max(i-o,0),s=Math.max(s-r,0);const l=this.angle;let a=0;const h=this.desiredSize,c=this.e0();l===90||l===270?(t=isFinite(h.height)?h.height+c:t,e=isFinite(h.width)?h.width+c:e):(t=isFinite(h.width)?h.width+c:t,e=isFinite(h.height)?h.height+c:e);let f=i||0,u=s||0;const d=this instanceof Panel;switch(this.sn(!0)){case 0:f=0,u=0,d&&(t=1/0,e=1/0);break;case 2:isFinite(t)&&t>i&&(f=t),isFinite(e)&&e>s&&(u=e);break;case 5:isFinite(t)&&t>i&&(f=t),u=0,d&&(e=1/0);break;case 4:isFinite(e)&&e>s&&(u=e),f=0,d&&(t=1/0);break}const g=this.maxSize,p=this.minSize;f>g.width&&p.width<g.width&&(f=g.width),u>g.height&&p.height<g.height&&(u=g.height),i=Math.max(f,p.width),s=Math.max(u,p.height),g.width<i&&(i=Math.min(p.width,i)),g.height<s&&(s=Math.min(p.height,s)),t=Math.min(g.width,t),e=Math.min(g.height,e),t=Math.max(i,t),e=Math.max(s,e),(l===90||l===270)&&(a=t,t=e,e=a,a=i,i=s,s=a),this.ui._t(),this.Od(t,e,i,s),this.ui.b(),this.ui.isReal()||U.n("Non-real measuredBounds has been set. Object "+this+", measuredBounds: "+this.ui.toString()),this.Pi(!1)}Od(t,e,i,s){}nn(){return!1}zt(t,e,i,s,n){this.Lf();const o=Rect.l();o.h(this.Ie),this.Ie._t(),this.fs()===!1?this.Ie.e(t,e,i,s):this.Da(t,e,i,s),this.Ie.b(),n===void 0?this.ue=null:this.ue=n;let r=!1;if(n!==void 0)r=!0;else{let l=this.panel;if(l!==null&&l.gl()&&(l=l.panel),l!==null){const a=l.Je,h=this.measuredBounds,c=e+h.height,f=t+h.width;if(r=!(0<=t+.05&&f<=a.width+.05&&0<=e+.05&&c<=a.height+.05),this instanceof TextBlock){const u=this.naturalBounds;(this.i0>u.height||this.be>u.width)&&(r=!0)}}}r?this.o|=256:this.o&=-257,this.Ie.isReal()||U.n("Non-real actualBounds has been set. Object "+this+", actualBounds: "+this.Ie.toString()),this.Id(o,this.Ie),this.uo(!1),Rect.i(o)}Da(t,e,i,s){}commonArrange(t,e,i,s){if(this.Ie.e(t,e,i,s),this.desiredSize.isReal())return;const n=this.ui,o=this.ul,r=o.right+o.left,l=o.top+o.bottom,a=n.width+r,h=n.height+l;i+=r,s+=l;let c=this.sn(!0);switch(a===i&&h===s&&(c=0),c){case 0:(a>i||h>s)&&(this.Pi(!0),this.ct(a>i?i:a,h>s?s:h,0,0));break;case 2:this.Pi(!0),this.ct(i,s,0,0);break;case 5:this.Pi(!0),this.ct(i,h,0,0);break;case 4:this.Pi(!0),this.ct(a,s,0,0);break}}Id(t,e){const i=this.part;i!==null&&i.diagram!==null&&((i.selectionObject===this||i.resizeObject===this||i.rotateObject===this)&&i.JC(!0),this.N(),!t.equalsApproxClose(e)&&(i.Fa(),this.s0(i)))}s0(t){this.portId!==null&&(t.JC(!0),t instanceof Node&&t.invalidateConnectedLinks(void 0,this))}get shadowVisible(){return this.w!==null?this.w.o0:null}set shadowVisible(t){const e=this.shadowVisible;e!==t&&(this.Ht().o0=t,this.ts(!0),this.N(),this.t("shadowVisible",e,t))}FI(t,e){const i=this.naturalBounds,s=this.Na,n=s.m11,o=s.m21,r=s.dx,l=s.m12,a=s.m22,h=s.dy;let c=0,f=0,u=c,d=f;c=u*n+d*o+r,f=u*l+d*a+h;let m=c,g=f,p=0,y=0;u=i.width+e,d=0,c=u*n+d*o+r,f=u*l+d*a+h;let x=Math.min(m,c),b=Math.min(g,f);p=Math.max(m+p,c)-x,y=Math.max(g+y,f)-b,m=x,g=b,u=i.width+e,d=i.height+e,c=u*n+d*o+r,f=u*l+d*a+h,x=Math.min(m,c),b=Math.min(g,f),p=Math.max(m+p,c)-x,y=Math.max(g+y,f)-b,m=x,g=b,u=0,d=i.height+e,c=u*n+d*o+r,f=u*l+d*a+h,x=Math.min(m,c),b=Math.min(g,f),p=Math.max(m+p,c)-x,y=Math.max(g+y,f)-b,m=x,g=b;const k=t.viewportBounds,P=k.x,S=k.y,T=k.width,N=k.height;return m>T+P||P>p+m||g>N+S||S>y+g}qe(t,e){if(this.vI(t,e)||!this.visible)return;const i=this.opacity;if(i===0)return;let s=1;i!==1&&(s=t.globalAlpha,t.globalAlpha=s*i);let n="";this.filter!==""&&(n=t.filter,t.filter=this.filter);const o=this.T,r=this.panel;this.t0()===!0&&this.H1();const l=this.part;let a=!1,h=0;if(l&&e.getRenderingHint("drawShadows")&&(a=l.isShadowed,a)){const g=l.shadowOffset;h=Math.max(g.y,g.x)*e.scale*e.We}const c=this instanceof Panel&&this.gl(),f=this.Ie;if(c&&(this.ND(a,t,!1,r),this.RI(t,e),this.TD(a,t,!1,r),this.LD(a,t,!1)),c||!c&&(f.width===0||f.height===0||isNaN(f.x)||isNaN(f.y))){i!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}const u=this.nn();if(!e.Ch&&u&&this.FI(e,h)){i!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}let d=(this.o&256)!==0;if(t.clipInsteadOfFill&&(d=!1),this instanceof TextBlock&&(t.font=this.font),d){const g=r.Fn()?r.naturalBounds:r.actualBounds;let p=Math.max(f.x,g.x),y=Math.max(f.y,g.y),x=Math.min(f.right,g.right)-p,b=Math.min(f.bottom,g.bottom)-y;const k=this.ue;if(k!==null&&(p=k.x,y=k.y,x=k.width,b=k.height),p>f.width+f.x||f.x>g.width+g.x){i!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}t.save(),t.beginPath(),t.rect(p,y,x,b),t.clip()}if(u){if(!this.isVisible()){i!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n);return}if(a){const g=this.shadowOffset;t.shadowsSet(g.x*e.scale*this.scale*e.We,g.y*e.scale*this.scale*e.We,this.shadowBlur),t.shadowsOn(),t.shadowColor=this.shadowColor}}const m=this.naturalBounds;if(t.transform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.ND(a,t,u,r),this.Nt!==null&&(t.commitTransform(),this.q1(t,m,f)),this.TD(a,t,u,r),this.va(t,e),this.LD(a,t,u),d&&(t.restore(),t.clearContextCache(this instanceof Panel)),!o.KP()){const g=1/(o.m11*o.m22-o.m12*o.m21);t.transform(o.m22*g,-o.m12*g,-o.m21*g,o.m11*g,g*(o.m21*o.dy-o.m22*o.dx),g*(o.m12*o.dx-o.m11*o.dy))}i!==1&&(t.globalAlpha=s),this.filter!==""&&(t.filter=n)}ND(t,e,i,s){t&&this.shadowVisible===!0?e.shadowsOn():t&&this.shadowVisible===!1&&e.shadowsOff(),t&&this.j1(s)&&this.shadowVisible===null&&e.shadowsOff()}TD(t,e,i,s){t&&(this.Nt!==null||this.j1(s))?(this.W1(!0),this.shadowVisible===null&&e.shadowsOff()):this.W1(!1)}LD(t,e,i){t&&(this.$C()===!0||this.shadowVisible===!1)&&e.shadowsOn(),i&&t&&e.shadowsOff()}OI(t,e,i){const s=this.part;let n=!1;s&&t.getRenderingHint("drawShadows")&&(n=s.isShadowed),e.clipInsteadOfFill&&(n=!1),this.nn()&&n&&e.shadowsOn(),n&&this.shadowVisible===!0?e.shadowsOn():n&&this.shadowVisible===!1&&e.shadowsOff();const o=this.panel;if(n&&this.j1(o)&&this.shadowVisible===null&&e.shadowsOff(),e.pl){const r=t.computePixelRatio(),l=`drop-shadow(${e.shadowOffsetX/r}px ${e.shadowOffsetY/r}px ${e.shadowBlur/r/2}px ${e.shadowColor})`;this.background!==null&&i.Nt.setAttributeNS(null,"filter",l)}return n&&(this.Nt!==null||this.j1(o))?(this.W1(!0),this.shadowVisible===null&&e.shadowsOff()):this.W1(!1),n}II(t,e,i,s){if(i.pl){const n=e.computePixelRatio(),o=`drop-shadow(${i.shadowOffsetX/n}px ${i.shadowOffsetY/n}px ${i.shadowBlur/n/2}px ${i.shadowColor})`;this.ZC(t,o)}s&&(this.$C()===!0||this.shadowVisible===!1)&&i.shadowsOn(),this.nn()&&i.shadowsOff()}j1(t){return t===null?!1:(t.gl()&&(t=t.panel),t.$C()||(t.type===Panel.Auto||t.type===Panel.Spot)&&t.findMainElement()!==this)}ZC(t,e){}q1(t,e,i){const s=this.e0(),n=e.x,o=e.y,r=e.width+s,l=e.height+s;this.Nn(t,this.Nt,!0,!1,e,i),this.Nt instanceof Brush&&this.Nt.type===3?(t.beginPath(),t.rect(n-s/2,o-s/2,r,l),t.fillContext(this.Nt,!1,null)):t.fillRect(n-s/2,o-s/2,r,l)}AD(t,e){let i=t.QC(this);const s=t.Ta!==null?t.Ta:t.svg;if(s!==null&&i!==-1){for(;i!==0&&!t.elt(i-1).isVisibleObject();)i--;if(i===0)this.EI(t,e,s);else{const n=t.elt(i-1).svg;n!==null?n.after(e):s.appendChild(e)}}}EI(t,e,i){if(t.type===Panel.Table){const s=i.getElementsByClassName("gojs-ts"),n=s.length!==0?s[0]:null;n!==null&&n.after(e)}else i.Nt?i.Nt.after(e):i.prepend(e)}vI(t,e){if(!(t instanceof SVGContext))return!1;if(!this.visible||this.opacity===0)return this.svg!==null&&this.svg.parentNode!==null&&this.svg.remove(),!0;const i=this.Ie;if(this.nn()&&(!this.isVisible()||i.width===0||i.height===0||isNaN(i.x)||isNaN(i.y)))return this.svg!==null&&this.svg.parentNode!==null&&this.svg.remove(),!0;t.setCurrentTransform(1,0,0,1,0,0);const s=this.panel,n=this.Ed(t);if(this.Af(t,e,n)){const m=this.svg;return this.DD(m),m.parentElement!==null?(this.nn()&&(t.lastDrawnPart=this.svg),!0):(this.nn()?(t.lastDrawnPart!==null?t.lastDrawnPart.after(m):t.diagramGroup.prepend(m),t.lastDrawnPart=this.svg):s&&this.AD(s,m),!0)}if(this.ts(!1),this.nn()&&this.isShadowed){const m=this.shadowOffset;t.shadowsSet(m.x*e.scale*this.scale*e.We,m.y*e.scale*this.scale*e.We,this.shadowBlur),t.shadowsOn(),t.shadowColor=this.shadowColor}this instanceof TextBlock&&(t.font=this.font),t.currentElement=null;const o=this.T,r=this instanceof Panel,l=this instanceof Panel?this.gl():!1,a=this.svg;if(this.t0()===!0&&this.H1(),t.outerGroup=!1,n)if(t.outerGroup=!0,r&&l)t.newGroup(1,0,0,1,0,0),this.svg=t.lastCreatedElement;else if(r&&this.isClipping){const m=this.findMainElement();let g=0,p=0;m!==null&&(g=m.actualBounds.x,p=m.actualBounds.y),t.newGroup(o.m11,o.m12,o.m21,o.m22,o.dx+g,o.dy+p),this.svg=t.lastCreatedElement,m!==null&&t.createOrUpdateClipGroup(this,m.actualBounds),t.currentElement=t.lastCreatedElement}else r?(t.newGroup(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.svg=t.lastCreatedElement):t.newGroup(1,0,0,1,0,0);const h=this.naturalBounds;r||t.setCurrentTransform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.background!==null&&(r?(l&&t.setCurrentTransform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.q1(t,h,i),l&&t.setCurrentTransform(1,0,0,1,0,0)):(t.setCurrentTransform(o.m11,o.m12,o.m21,o.m22,o.dx,o.dy),this.q1(t,h,i)),t.currentElement.Nt=t.lastCreatedElement,t.currentElement.prepend(t.lastCreatedElement));const c=this.OI(e,t,t.currentElement);this.va(t,e),r&&t.endGroup(),t.outerGroup&&t.endGroup();const f=t.surface.Nd,u=r?this.svg:t.currentElement;if(a!==null&&a.parentNode!==null&&u!==a&&(this.panel===null||a.parentNode===this.panel.svg)){const m=this.svg.getAttribute("filter");return m!==null&&u.setAttribute("filter",m),this.filter!==""&&u.setAttributeNS(null,"filter",this.filter),a.replaceWith(u),this.svg=u,u!==null&&this.r0(t,s,i,u),!0}if(this.svg=u,f!==null&&u===null&&t.dummyGroup(),u===null)return!0;this.r0(t,s,i,u),this.II(u,e,t,c);const d=this.nn()?this.opacity*t.globalAlpha:this.opacity;if(d!==1&&u.setAttributeNS(null,"opacity",d.toString()),this.filter!==""&&u.setAttributeNS(null,"filter",this.filter),this.nn()){if(a!==null&&u!==a&&a.parentNode===t.diagramGroup){const m=a.getAttribute("filter");m!==null&&u.setAttribute("filter",m),a.replaceWith(u)}else t.lastDrawnPart?t.lastDrawnPart.after(u):t.diagramGroup.prepend(u);t.lastDrawnPart=u}else s!==null&&this.AD(s,u);return f!==null&&f(this,u),this.DD(u),!0}DD(t){const e=this,i=t.dataset;e instanceof GraphObject&&(e.portId!==null&&(i.portId=e.portId),e instanceof Panel&&(isNaN(e.itemIndex)||(i.itemIndex=e.itemIndex.toString()),e instanceof Part&&(i.className=U.Jn(e),e.key!==void 0&&(i.key=e.key.toString()),e.containingGroup!==null&&(i.group=e.containingGroup.key.toString()),e instanceof Link&&(e.fromNode!==null&&e.fromNode.key!==void 0&&(i.fromKey=e.fromNode.key.toString()),e.fromPortId!==""&&(i.fromPortId=e.fromPortId),e.toNode!==null&&e.toNode.key!==void 0&&(i.toKey=e.toNode.key.toString()),e.toPortId!==""&&(i.toPortId=e.toPortId)))))}r0(t,e,i,s){let n=(this.o&256)!==0;if(t.clipInsteadOfFill&&(n=!1),!n){s.removeAttributeNS(null,"clip-path");return}const o=e.Fn()?e.naturalBounds:e.actualBounds;let r=Math.max(i.x,o.x),l=Math.max(i.y,o.y),a=Math.min(i.right,o.right)-r,h=Math.min(i.bottom,o.bottom)-l;const c=this.ue;c!==null&&(r=c.x,l=c.y,a=c.width,h=c.height);const f=Rect.O(r,l,Math.max(a,0),Math.max(h,0));if(this instanceof Panel){const u=Transform.l();u.set(this.T),u.mx(),u.pm(f),Transform.i(u)}s.setAttributeNS(null,"clip-path",`path('      M ${f.x},${f.y}       L ${f.width+f.x} ${f.y}       L ${f.width+f.x} ${f.height+f.y}       L ${f.x} ${f.height+f.y} z') view-box`),Rect.i(f)}UI(){if(this.svg===null)return;const t=this.svg.innerHTML.match(/url\(#((CLIP|GRAD).+?)\)/g),e=this.svg.ownerDocument;if(t!==null)for(const i of t){const s=e.getElementById(i.split("#")[1].slice(0,-1));s!==null&&s.remove()}this.svg.remove()}RI(t,e){const i=this.Ie,s=this.Je,n=this.Nt;n!==null&&t.commitTransform(),n!==null&&(this.Nn(t,n,!0,!1,s,i),n instanceof Brush&&n.type===3?(t.beginPath(),t.rect(i.x,i.y,i.width,i.height),t.fillContext(n,!1,null)):t.fillRect(i.x,i.y,i.width,i.height)),this.va(t,e)}va(t,e){}Df(){this.ts(!0)}Af(t,e,i){const s=this.svg;if(this.BI()){if(this.Df(),this.ts(!1),s===null)return!1;const c=s.getAttribute("clip-path");if(c!==null&&c.includes("url")){const u=t.svg.getElementById(c.split("#")[1].slice(0,-1));u!==null&&u.remove()}return s.getAttribute("filter")&&s.removeAttribute("filter"),!1}if(s===null)return!1;if(!this.visible)return s.remove(),!1;if(s.nodeName!=="g"&&i||s.nodeName==="g"&&!i)return!1;const n=this.T,o="matrix("+n.m11+", "+n.m12+", "+n.m21+", "+n.m22+", "+n.dx+", "+n.dy+")",r=this instanceof Panel,l=r?this.gl():!1;if(!(r&&l))if(this instanceof Picture){const c=this.J1;t.setCurrentTransform(n.m11,n.m12,n.m21,n.m22,n.dx,n.dy),c!==null&&t.amendImageTransform(c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7]),i?s.lastElementChild.setAttributeNS(null,"transform",t.getCurrentTransform()):s.setAttributeNS(null,"transform",t.getCurrentTransform())}else if(i&&!r)if(this instanceof Shape){const c=s.getElementsByTagName("path");for(let f=0;f<c.length;f++)c[f].setAttributeNS(null,"transform",o)}else if(this instanceof TextBlock){const c=s.getElementsByTagName("text"),f=typeof this.stroke=="string"?this.stroke:null;for(let u=0;u<c.length;u++)c[u].setAttributeNS(null,"transform",o),f&&c[u].setAttributeNS(null,"fill",f)}else(s.lastElementChild||s).setAttributeNS(null,"transform",o);else if(r&&this.isClipping&&this.Ta){const c=this.findMainElement(),f=c!==null?c.actualBounds.x:0,u=c!==null?c.actualBounds.y:0;this.Ta.setAttributeNS(null,"transform","matrix(1,0,0,1,"+-f+", "+-u+")"),s.setAttributeNS(null,"transform","matrix("+n.m11+", "+n.m12+", "+n.m21+", "+n.m22+", "+(n.dx+f)+", "+(n.dy+u)+")")}else s.setAttributeNS(null,"transform",o);const a=this.nn()?this.opacity*t.globalAlpha:this.opacity;a===1?s.removeAttribute("opacity"):s.setAttributeNS(null,"opacity",a.toString()),t.setCurrentTransform(1,0,0,1,0,0);const h=this.Ta?this.Ta:this.K1;if(this.background!==null||h.Nt!==void 0){const c=h.Nt;if(this.background===null)t.removeOldGradient(this,h.Nt,"fill"),h.Nt.remove(),h.Nt=void 0;else{if((l||i&&!(this instanceof Panel))&&t.setCurrentTransform(n.m11,n.m12,n.m21,n.m22,n.dx,n.dy),this.q1(t,this.naturalBounds,this.actualBounds),h.Nt){t.removeOldGradient(this,h.Nt,"fill");const f=h.Nt.getAttribute("filter");f!==null&&t.lastCreatedElement.setAttribute("filter",f),h.Nt.replaceWith(t.lastCreatedElement)}else h.prepend(t.lastCreatedElement);h.Nt=t.lastCreatedElement}c&&t.removeOldGradient(this,c,"fill")}return this.r0(t,this.panel,this.actualBounds,s),!0}Ed(t){if(this.background!==null)return!0;let e=(this.o&256)!==0;return t.clipInsteadOfFill&&(e=!1),!!e}static cB(t,e,i,s,n,o,r){let l=.001;const a=o.length;t.moveTo(e,i);let h=s-e;const c=n-i;h===0&&(h=.001);const f=c/h;let u=Math.sqrt(h*h+c*c),d=0,m=!0;l=o[d%a];let g=r!==0;for(;u>=.1;){if(g){for(l=o[d++%a],l-=r;l<0;)l+=o[d++%a],m=!m;g=!1}else l=o[d++%a];l>u&&(l=u);let p=Math.sqrt(l*l/(1+f*f));h<0&&(p=-p),e+=p,i+=f*p,m?t.lineTo(e,i):t.moveTo(e,i),u-=l,m=!m}}Nn(t,e,i,s,n,o){let r=1,l=1;if(typeof e=="string"){i?t.fillStyle=e:t.strokeStyle=e;return}else if(e.type===1){i?t.fillStyle=e.color:t.strokeStyle=e.color;return}let a;const h=this.e0();r=n.width,l=n.height,s?(r=o.width,l=o.height):i||(r+=h,l+=h);const c=t instanceof CanvasSurfaceContext;if(c&&e.vn&&(e.type===4||e.Ff===r&&e.$1===l))a=e.vn;else{let f=0,u=0,d=0,m=0,g=0,p=0,y=0,x=0;if(s?(y=o.x,x=o.y):i||(y-=h/2,x-=h/2),f=e.start.x*r+e.start.offsetX+y,u=e.start.y*l+e.start.offsetY+x,d=e.end.x*r+e.end.offsetX+y,m=e.end.y*l+e.end.offsetY+x,e.type===2)a=t.createLinearGradient(f,u,d,m);else if(e.type===3)p=isNaN(e.endRadius)?Math.max(r,l)/2:e.endRadius,isNaN(e.startRadius)?(g=0,p=Math.max(r,l)/2):g=e.startRadius,a=t.createRadialGradient(f,u,g,d,m,p);else if(e.type===4)try{a=t.createPattern(e.pattern,"repeat")}catch{a=null}else U.ri(e.type,"Brush type");if(e.type!==4){const b=e.colorStops;if(b!==null){const k=b.iterator;for(;k.next();)a.addColorStop(k.key,k.value)}}if(c&&(e.vn=a,a!==null&&(e.Ff=r,e.$1=l),a===null&&e.type===4&&e.Ff!==-1)){e.Ff=-1;const b=this.diagram;b!==null&&e.Ff===-1&&U.yn(()=>{b.redraw()},600)}}i?t.fillStyle=a:t.strokeStyle=a}isContainedBy(t){return t instanceof Panel?this.VI(this,t):!1}VI(t,e){if(t===e||e===null)return!1;let i=t.panel;for(;i!==null;){if(i===e)return!0;i=i.panel}return!1}isVisibleObject(){if(!this.visible)return!1;const t=this.panel;return t!==null?t.isVisibleObject():!0}isEnabledObject(){let t=this instanceof Panel?this:this.panel;for(;t!==null&&t.isEnabled;)t=t.panel;return t===null}get enabledChanged(){return this.w!==null?this.w.l0:null}set enabledChanged(t){const e=this.enabledChanged;e!==t&&(t!==null&&U.S(t,GraphObject,"enabledChanged"),this.Ht().l0=t,this.t("enabledChanged",e,t))}H1(){if(this.Z1()===!0){const t=this.fl;if(t.Xe(),!this.Ie.isReal()||!this.ui.isReal()){this.Ud(!1),this.Ra(!1);return}if(t.js(this.Ie.x-this.ui.x,this.Ie.y-this.ui.y),this.scale!==1||this.angle!==0){const e=this.naturalBounds;this._p(t,e.x,e.y,e.width,e.height)}this.Ud(!1),this.Ra(!0)}if(this.t0()===!0){const t=this.panel;if(t===null)this.Na.set(this.fl),this.Vh=this.scale;else if(t._s!==null){const e=this.Na;e.Xe(),t.Fn()?e.Rc(t.Na):t.panel!==null&&e.Rc(t.panel.Na),e.Rc(this.fl),this.Vh=this.scale*t.Vh}this.Ra(!1)}}_p(t,e,i,s,n){if(this.it!==1&&t.it(this.it),this.Yt===0)return;const o=Point.l();o.setSpot(e,i,s,n,Spot.Center),t.Ps(this.Yt,o.x,o.y),Point.i(o)}f(t){if(this.Ko())return;t===void 0&&(t=!1),this.Pi(!0),this.uo(!0);const e=this.panel;e!==null&&!t&&e.f()}vf(){this.Ko()||(this.Pi(!0),this.uo(!0))}Rf(t){if(this.fs())return;const e=this.panel;!t&&e!==null&&e.f(),this.uo(!0)}Lf(){this.Z1()===!1&&(this.Ud(!0),this.Ra(!0))}_C(){this.Ra(!0)}N(){const t=this.part;t!==null&&t.N()}sn(t){const e=this.stretch,i=this.panel;if(i===null)return this.Jo(e===1?0:e,t);if(i.type===Panel.Table)return this.a0(i.getRowDefinition(this.row),i.getColumnDefinition(this.column),t);if(i.type===Panel.Auto&&i.findMainElement()===this)return this.Jo(2,t);if(e===1){if(i.type===Panel.Spot&&i.findMainElement()===this)return this.Jo(2,t);const s=i.defaultStretch;return s===1?this.Jo(0,t):this.Jo(s,t)}return this.Jo(e,t)}a0(t,e,i){const s=this.stretch;if(s!==1)return this.Jo(s,i);let n=null,o=null;switch(t.stretch){case 1:case 5:break;case 4:o=!0;break;case 2:o=!0;break}switch(e.stretch){case 1:case 4:break;case 5:n=!0;break;case 2:n=!0;break}const r=this.panel.defaultStretch;return n===null&&(n=r===5||r===2),o===null&&(o=r===4||r===2),n===!0&&o===!0?this.Jo(2,i):n===!0?this.Jo(5,i):o===!0?this.Jo(4,i):this.Jo(0,i)}Jo(t,e){if(e)return t;if(t===0)return 0;const i=this.desiredSize;if(i.isReal())return 0;const s=!isNaN(i.width),n=!isNaN(i.height),o=this.angle;if(s)if(o!==90&&o!==270){if(t===5)return 0;if(t===2)return 4}else{if(t===4)return 0;if(t===2)return 5}if(n)if(o!==90&&o!==270){if(t===4)return 0;if(t===2)return 5}else{if(t===5)return 0;if(t===2)return 4}return t}get segmentOrientation(){return this.Et!==null?this.Et.h0:0}set segmentOrientation(t){const e=this.segmentOrientation;e!==t&&(this.Et===null&&(this.Et=new LinkElementSettings),this.Et.h0=t,this.f(),this.t("segmentOrientation",e,t),t===0&&(this.angle=0))}zI(){this.segmentOrientation=21}get segmentIndex(){return this.Et!==null?this.Et.c0:-1/0}set segmentIndex(t){t=Math.round(t);const e=this.segmentIndex;e!==t&&(this.Et===null&&(this.Et=new LinkElementSettings),this.Et.c0=t,this.f(),this.t("segmentIndex",e,t))}get segmentFraction(){return this.Et!==null?this.Et.f0:0}set segmentFraction(t){t<0?t=0:t>1&&(t=1);const e=this.segmentFraction;e!==t&&(this.Et===null&&(this.Et=new LinkElementSettings),this.Et.f0=t,this.f(),this.t("segmentFraction",e,t))}get segmentOffset(){return this.Et!==null?this.Et.u0:Point.wn}set segmentOffset(t){const e=this.segmentOffset;e.equals(t)||(t=t.C(),this.Et===null&&(this.Et=new LinkElementSettings),this.Et.u0=t,this.f(),this.t("segmentOffset",e,t))}get stretch(){return this.w!==null?this.w.go:1}set stretch(t){const e=this.stretch;e!==t&&(this.Ht().go=t,this.f(),this.t("stretch",e,t))}get name(){return this.w!==null?this.w.St:""}set name(t){const e=this.name;e!==t&&(this.Ht().St=t,this.part!==null&&this.part.d0(),this.t("name",e,t))}get opacity(){return this.ie}set opacity(t){t<0?t=0:t>1&&(t=1);const e=this.opacity;if(e!==t){this.ie=t,this.t("opacity",e,t);const i=this.diagram,s=this.part;i!==null&&s!==null&&i.N(s.wh(s.actualBounds))}}get filter(){return this.Zp}set filter(t){const e=this.filter;if(e!==t){this.Zp=t,this.ts(!0),this.t("filter",e,t);const i=this.diagram,s=this.part;i!==null&&s!==null&&i.N(s.wh(s.actualBounds))}}get visible(){return(this.o&1)!==0}set visible(t){const e=(this.o&1)!==0;if(e!==t){this.o=this.o^1,this.Df(),this.t("visible",e,t);const i=this.panel;i!==null?i.f():this.nn()&&this.He(t),this.N(),this.FD()}}get pickable(){return(this.o&2)!==0}set pickable(t){const e=(this.o&2)!==0;e!==t&&(this.o=this.o^2,this.t("pickable",e,t))}get fromLinkableDuplicates(){return(this.o&4)!==0}set fromLinkableDuplicates(t){const e=(this.o&4)!==0;e!==t&&(this.o=this.o^4,this.t("fromLinkableDuplicates",e,t))}get fromLinkableSelfNode(){return(this.o&8)!==0}set fromLinkableSelfNode(t){const e=(this.o&8)!==0;e!==t&&(this.o=this.o^8,this.t("fromLinkableSelfNode",e,t))}get toLinkableDuplicates(){return(this.o&16)!==0}set toLinkableDuplicates(t){const e=(this.o&16)!==0;e!==t&&(this.o=this.o^16,this.t("toLinkableDuplicates",e,t))}get toLinkableSelfNode(){return(this.o&32)!==0}set toLinkableSelfNode(t){const e=(this.o&32)!==0;e!==t&&(this.o=this.o^32,this.t("toLinkableSelfNode",e,t))}get isPanelMain(){return(this.o&64)!==0}set isPanelMain(t){const e=(this.o&64)!==0;e!==t&&(this.o=this.o^64,this.f(),this.t("isPanelMain",e,t))}get isActionable(){return(this.o&128)!==0}set isActionable(t){const e=(this.o&128)!==0;e!==t&&(this.o=this.o^128,this.t("isActionable",e,t))}get background(){return this.Nt}set background(t){const e=this.background;e!==t&&(t!==null&&Brush.Bd(t,"GraphObject.background"),t instanceof Brush&&t.b(),this.Nt=t,this.N(),this.t("background",e,t))}$C(){return(this.o&512)!==0}W1(t){t?this.o|=512:this.o&=-513}Nf(){return(this.o&1024)!==0}tN(t){t?this.o|=1024:this.o&=-1025}Z1(){return(this.o&2048)!==0}Ud(t){t?this.o|=2048:this.o&=-2049}t0(){return(this.o&4096)!==0}Ra(t){t?this.o|=4096:this.o&=-4097}Ko(){return(this.o&8192)!==0}Pi(t){t?this.o|=8192:this.o&=-8193}fs(){return(this.o&16384)!==0}uo(t){t?this.o|=16384:this.o&=-16385}BI(){return(this.o&32768)!==0}ts(t){t?this.o|=32768:this.o&=-32769}get part(){if(this.nn())return this;if(this.dl!==null)return this.dl;let t=this;for(t=t.panel;t;){if(t instanceof Part)return this.dl=t,t;t=t.panel}return null}get svg(){return this.K1}set svg(t){this.K1=t}hf(){this.svg=null}get panel(){return this.en}jh(t){this.en=t,this.svg!==null&&this.svg.remove()}get layer(){const t=this.part;return t!==null?t.layer:null}get diagram(){const t=this.part;return t!==null?t.diagram:null}get position(){return this.ft}set position(t){const e=t.x,i=t.y,s=this.position,n=s.x,o=s.y;n!==e&&(!isNaN(n)||!isNaN(e))||o!==i&&(!isNaN(o)||!isNaN(i))?(t=t.copy(),this.eN(t,n,o)&&this.t("position",new Point(n,o),t.copy())):this.iN()}iN(){}eN(t,e,i){return this.ft=t,this.Rf(),!0}$c(t,e,i){this.ft.x===t&&this.ft.y===e||(this.ft.e(t,e),this.Lf())}get actualBounds(){return this.Ie}get scale(){return this.it}set scale(t){const e=this.scale;e!==t&&(t<=0&&U.n("GraphObject.scale for "+this+" must be greater than zero, not: "+t),this.it=t,this.f(),this.t("scale",e,t))}get angle(){return this.Yt}set angle(t){const e=this.angle;if(e!==t){if(t=t%360,t<0&&(t+=360),e===t)return;this.Yt=t,this.FD(),this.f(),this.t("angle",e,t)}}get desiredSize(){return this.ds}set desiredSize(t){const e=t.width,i=t.height,s=this.desiredSize,n=s.width,o=s.height;if((n!==e&&(!isNaN(n)||!isNaN(e))||o!==i&&(!isNaN(o)||!isNaN(i)))&&(t=t.C(),this.ds=t,this.f(),this instanceof Shape&&this.fi(),this.t("desiredSize",s,t),this.Nf())){const r=this.part;r!==null&&(this.qh(r,"width"),this.qh(r,"height"))}}get width(){return this.ds.width}set width(t){const e=this.ds.width;if(e!==t&&(!isNaN(e)||!isNaN(t))){const i=this.ds,s=new Size(t,this.ds.height).b();if(this.ds=s,this.f(),this instanceof Shape&&this.fi(),this.t("desiredSize",i,s),this.Nf()){const n=this.part;n!==null&&this.qh(n,"width")}}}get height(){return this.ds.height}set height(t){const e=this.ds.height;if(e!==t&&(!isNaN(e)||!isNaN(t))){const i=this.ds,s=new Size(this.ds.width,t).b();if(this.ds=s,this.f(),this instanceof Shape&&this.fi(),this.t("desiredSize",i,s),this.Nf()){const n=this.part;n!==null&&this.qh(n,"height")}}}get minSize(){return this.w!==null?this.w.vr:Size.vc}set minSize(t){const e=this.minSize;e.equals(t)||(t=t.copy(),isNaN(t.width)&&(t.width=0),isNaN(t.height)&&(t.height=0),t.b(),this.Ht().vr=t,this.f(),this.t("minSize",e,t))}get maxSize(){return this.w!==null?this.w.Rr:Size.XP}set maxSize(t){const e=this.maxSize;e.equals(t)||(t=t.copy(),isNaN(t.width)&&(t.width=1/0),isNaN(t.height)&&(t.height=1/0),t.b(),this.Ht().Rr=t,this.f(),this.t("maxSize",e,t))}get measuredBounds(){return this.ui}get naturalBounds(){return this.Je}e0(){return 0}get margin(){return this.ul}set margin(t){typeof t=="number"&&(t=new Margin(t));const e=this.ul;e.equals(t)||(t=t.C(),this.ul=t,this.f(),this.t("margin",e,t))}get T(){return this.Z1()===!0&&this.H1(),this.fl}get _s(){return this.t0()===!0&&this.H1(),this.Na}trigger(t,e,i){let s=null;return typeof t=="string"?s=new AnimationTrigger(t,e,i):s=t,s.Ri=this,this.Os===null&&(this.Os=new GMap),this.Os.set(s.propertyName,s),this}get Os(){return this.w!==null?this.w.Os:null}set Os(t){this.Os!==t&&(this.Ht().Os=t)}get Fr(){return this.w!==null?this.w.Fr:0}set Fr(t){this.Fr!==t&&(this.Ht().Fr=t)}get alignment(){return this.pe}set alignment(t){const e=this.alignment;e.equals(t)||(t.isNoSpot()&&!t.isDefault()&&U.n("GraphObject.alignment for "+this+" must be a real Spot or Spot.Default, not: "+t),t=t.C(),this.pe=t,this.Rf(),this.t("alignment",e,t))}get column(){return this.Ca}set column(t){t=Math.round(t);const e=this.column;e!==t&&(t<0&&U.$(t,">= 0",GraphObject,"column"),this.Ca=t,this.f(),this.t("column",e,t),this.svg!==null&&this.svg.remove())}get columnSpan(){return this.w!==null?this.w.g0:1}set columnSpan(t){t=Math.round(t);const e=this.columnSpan;e!==t&&(t<1&&U.$(t,">= 1",GraphObject,"columnSpan"),this.Ht().g0=t,this.f(),this.t("columnSpan",e,t))}get row(){return this.$p}set row(t){t=Math.round(t);const e=this.row;e!==t&&(t<0&&U.$(t,">= 0",GraphObject,"row"),this.$p=t,this.f(),this.t("row",e,t),this.svg!==null&&this.svg.remove())}get rowSpan(){return this.w!==null?this.w.m0:1}set rowSpan(t){t=Math.round(t);const e=this.rowSpan;e!==t&&(t<1&&U.$(t,">= 1",GraphObject,"rowSpan"),this.Ht().m0=t,this.f(),this.t("rowSpan",e,t))}get spanAllocation(){return this.w!==null?this.w.p0:null}set spanAllocation(t){const e=this.spanAllocation;e!==t&&(t!==null&&U.S(t,GraphObject,"spanAllocation"),this.Ht().p0=t,this.f(),this.t("spanAllocation",e,t))}get alignmentFocus(){return this.vd}set alignmentFocus(t){const e=this.alignmentFocus;e.equals(t)||(t=t.C(),this.vd=t,this.f(),this.t("alignmentFocus",e,t))}get portId(){return this.Jp}set portId(t){const e=this.portId;if(e!==t){const i=this.part;i!==null&&!(i instanceof Node)&&U.n("Cannot set portID on a Link: "+t);const s=i;e!==null&&s!==null&&s.sN(this),this.Jp=t,t!==null&&s!==null&&(s.Rn=!0,s.vD(this)),this.t("portId",e,t)}}Wh(){const t=this.part;if(t instanceof Node&&(this.portId!==null||this===t.port)){const e=t.diagram;e!==null&&!e.undoManager.isUndoingRedoing&&t.invalidateConnectedLinks(void 0,this)}}FD(){const t=this.diagram;t===null||t.undoManager.isUndoingRedoing||(this instanceof Panel?this instanceof Node?this.invalidateConnectedLinks():this.walkVisualTreeFrom(this,e=>{e.Wh()}):this.Wh())}get toSpot(){return this.ut!==null?this.ut.Xh:Spot.None}set toSpot(t){const e=this.toSpot;e.equals(t)||(t=t.C(),this._i().Xh=t,this.t("toSpot",e,t),this.Wh())}get toEndSegmentLength(){return this.ut!==null?this.ut.Yh:10}set toEndSegmentLength(t){const e=this.toEndSegmentLength;e!==t&&(t<0&&U.$(t,">= 0",GraphObject,"toEndSegmentLength"),this._i().Yh=t,this.t("toEndSegmentLength",e,t),this.Wh())}get toShortLength(){return this.ut!==null?this.ut.Hh:0}set toShortLength(t){const e=this.toShortLength;e!==t&&(this._i().Hh=t,this.t("toShortLength",e,t),this.Wh())}get toLinkable(){return this.ut!==null?this.ut.y0:null}set toLinkable(t){const e=this.toLinkable;e!==t&&(this._i().y0=t,this.t("toLinkable",e,t))}get toMaxLinks(){return this.ut!==null?this.ut.w0:1/0}set toMaxLinks(t){const e=this.toMaxLinks;e!==t&&(t<0&&U.$(t,">= 0",GraphObject,"toMaxLinks"),this._i().w0=t,this.t("toMaxLinks",e,t))}get fromSpot(){return this.ut!==null?this.ut.zh:Spot.None}set fromSpot(t){const e=this.fromSpot;e.equals(t)||(t=t.C(),this._i().zh=t,this.t("fromSpot",e,t),this.Wh())}get fromEndSegmentLength(){return this.ut!==null?this.ut.Gh:10}set fromEndSegmentLength(t){const e=this.fromEndSegmentLength;e!==t&&(t<0&&U.$(t,">= 0",GraphObject,"fromEndSegmentLength"),this._i().Gh=t,this.t("fromEndSegmentLength",e,t),this.Wh())}get fromShortLength(){return this.ut!==null?this.ut.Kh:0}set fromShortLength(t){const e=this.fromShortLength;e!==t&&(this._i().Kh=t,this.t("fromShortLength",e,t),this.Wh())}get fromLinkable(){return this.ut!==null?this.ut.x0:null}set fromLinkable(t){const e=this.fromLinkable;e!==t&&(this._i().x0=t,this.t("fromLinkable",e,t))}get fromMaxLinks(){return this.ut!==null?this.ut.b0:1/0}set fromMaxLinks(t){const e=this.fromMaxLinks;e!==t&&(t<0&&U.$(t,">= 0",GraphObject,"fromMaxLinks"),this._i().b0=t,this.t("fromMaxLinks",e,t))}get cursor(){return this.w!==null?this.w.jl:""}set cursor(t){const e=this.cursor;e!==t&&(U.s(t,"string",GraphObject,"cursor"),this.Ht().jl=t,this.t("cursor",e,t))}get click(){return this.w!==null?this.w.qr:null}set click(t){const e=this.click;e!==t&&(t!==null&&U.S(t,GraphObject,"click"),this.Ht().qr=t,this.t("click",e,t))}get doubleClick(){return this.w!==null?this.w.jr:null}set doubleClick(t){const e=this.doubleClick;e!==t&&(t!==null&&U.S(t,GraphObject,"doubleClick"),this.Ht().jr=t,this.t("doubleClick",e,t))}get contextClick(){return this.w!==null?this.w.Wr:null}set contextClick(t){const e=this.contextClick;e!==t&&(t!==null&&U.S(t,GraphObject,"contextClick"),this.Ht().Wr=t,this.t("contextClick",e,t))}get mouseEnter(){return this.w!==null?this.w._r:null}set mouseEnter(t){const e=this.mouseEnter;e!==t&&(t!==null&&U.S(t,GraphObject,"mouseEnter"),this.Ht()._r=t,this.t("mouseEnter",e,t))}get mouseLeave(){return this.w!==null?this.w.tl:null}set mouseLeave(t){const e=this.mouseLeave;e!==t&&(t!==null&&U.S(t,GraphObject,"mouseLeave"),this.Ht().tl=t,this.t("mouseLeave",e,t))}get mouseOver(){return this.w!==null?this.w.Jr:null}set mouseOver(t){const e=this.mouseOver;e!==t&&(t!==null&&U.S(t,GraphObject,"mouseOver"),this.Ht().Jr=t,this.t("mouseOver",e,t))}get mouseHover(){return this.w!==null?this.w.$r:null}set mouseHover(t){const e=this.mouseHover;e!==t&&(t!==null&&U.S(t,GraphObject,"mouseHover"),this.Ht().$r=t,this.t("mouseHover",e,t))}get mouseHold(){return this.w!==null?this.w.Zr:null}set mouseHold(t){const e=this.mouseHold;e!==t&&(t!==null&&U.S(t,GraphObject,"mouseHold"),this.Ht().Zr=t,this.t("mouseHold",e,t))}get mouseDragEnter(){return this.w!==null?this.w.k0:null}set mouseDragEnter(t){const e=this.mouseDragEnter;e!==t&&(t!==null&&U.S(t,GraphObject,"mouseDragEnter"),this.Ht().k0=t,this.t("mouseDragEnter",e,t))}get mouseDragLeave(){return this.w!==null?this.w.P0:null}set mouseDragLeave(t){const e=this.mouseDragLeave;e!==t&&(t!==null&&U.S(t,GraphObject,"mouseDragLeave"),this.Ht().P0=t,this.t("mouseDragLeave",e,t))}get mouseDrop(){return this.w!==null?this.w.Qr:null}set mouseDrop(t){const e=this.mouseDrop;e!==t&&(t!==null&&U.S(t,GraphObject,"mouseDrop"),this.Ht().Qr=t,this.t("mouseDrop",e,t))}get actionDown(){return this.w!==null?this.w.S0:null}set actionDown(t){const e=this.actionDown;e!==t&&(t!==null&&U.S(t,GraphObject,"actionDown"),this.Ht().S0=t,this.t("actionDown",e,t))}get actionMove(){return this.w!==null?this.w.M0:null}set actionMove(t){const e=this.actionMove;e!==t&&(t!==null&&U.S(t,GraphObject,"actionMove"),this.Ht().M0=t,this.t("actionMove",e,t))}get actionUp(){return this.w!==null?this.w.C0:null}set actionUp(t){const e=this.actionUp;e!==t&&(t!==null&&U.S(t,GraphObject,"actionUp"),this.Ht().C0=t,this.t("actionUp",e,t))}get actionCancel(){return this.w!==null?this.w.N0:null}set actionCancel(t){const e=this.actionCancel;e!==t&&(t!==null&&U.S(t,GraphObject,"actionCancel"),this.Ht().N0=t,this.t("actionCancel",e,t))}get toolTip(){return this.w!==null?this.w.el:null}set toolTip(t){const e=this.toolTip;e!==t&&(this.Ht().el=t,this.t("toolTip",e,t))}get contextMenu(){return this.w!==null?this.w.il:null}set contextMenu(t){const e=this.contextMenu;e!==t&&(this.Ht().il=t,this.t("contextMenu",e,t))}findBindingPanel(){let t=this instanceof Panel?this:this.panel;for(;t!==null;){if(t.nN())return t;t=t.panel}return null}bind(t,e,i,s){return s!==void 0&&(GraphObject.Q1||(GraphObject.Q1=!0,U.jt(`Warning: the fourth argument to GraphObject.bind has been deprecated -- use bindTwoWay instead.
. `+s))),this.Of(t,e,i,s),this}static Q1=!1;bindTwoWay(t,e,i,s){return this.Of(t,e,i,s).makeTwoWay(),this}bindModel(t,e,i,s){return this.Of(t,e,i,s).ofModel(),this}bindObject(t,e,i,s,n){return this.Of(t,e,i,s).ofObject(n),this}theme(t,e,i,s,n){return this.Oa(t,e,i,s,n),this}themeData(t,e,i,s,n){return this.Oa(t,e,i,s,n).ofData(),this}themeObject(t,e,i,s,n,o){return this.Oa(t,e,i,s,n).ofObject(o),this}themeModel(t,e,i,s,n){return this.Oa(t,e,i,s,n).ofModel(),this}Of(t,e,i,s){let n=null;return typeof t=="string"?n=new Binding(t,e,i,s):n=t,this.T0(n),n}Oa(t,e,i,s,n){let o=null;return typeof t=="string"?o=new ThemeBinding(t,e,i,s,n):o=t,this.T0(o),o}T0(t){t.Ri=this;const e=this.findBindingPanel();e!==null&&e.RD()&&U.n("Cannot add a Binding to a template that has already been copied: "+t),this.Ee===null&&(this.Ee=new List),this.Ee.add(t)}set(t){return t?(Object.assign(this,t),this):this}attach(t){return GraphObject.oN(this,t),this}apply(t,...e){return t.apply(this,[this,...e]),this}setProperties(t){return Diagram.Up(this,t),this}static make(t,...e){let i=arguments,s=null,n=null;if(U.nt(t))n=t;else if(typeof t=="string"){const r=GraphObject._1.get(t);U.nt(r)?(i=Array.prototype.slice.call(i),s=r(i),U.Z(s)||U.n('GraphObject.make invoked object builder "'+t+'", but it did not return an Object')):n=root.go[t]}s===null&&((n==null||!n.constructor)&&U.n("GraphObject.make requires a class function or GoJS class name or name of an object builder, not: "+t),s=new n);let o=1;if(s instanceof Diagram&&i.length>1){const r=s,l=i[1];(typeof l=="string"||l instanceof HTMLDivElement)&&(r.z2(l),o++)}for(let r=o;r<i.length;r++){const l=i[r];l===void 0?U.n("Undefined value at argument "+r+" for object being constructed by GraphObject.make: "+s):s&&GraphObject.oN(s,l)}return s}static oN(t,e){if(typeof e=="number")GraphObject.XI(t,e);else if(typeof e=="string")GraphObject.GI(t,e);else if(e instanceof GraphObject)t instanceof Panel||U.n("A GraphObject can only be added to a Panel, not to: "+t),t.add(e);else if(e instanceof RowColumnDefinition){let i=null;e.isRow&&U.nt(t.getRowDefinition)?i=t.getRowDefinition(e.index):!e.isRow&&U.nt(t.getColumnDefinition)&&(i=t.getColumnDefinition(e.index)),i instanceof RowColumnDefinition?i.tk(e):U.n("A RowColumnDefinition can only be added to an object that implements getRowDefinition/getColumnDefinition, not to: "+t)}else if(e instanceof PanelLayout){const i=t;i.type=e}else if(e instanceof Binding)t instanceof GraphObject||t instanceof RowColumnDefinition?t.bind(e):U.n("A Binding can only be applied to a GraphObject or RowColumnDefinition, not to: "+t);else if(e instanceof AnimationTrigger)t instanceof GraphObject?t.trigger(e):U.n("An AnimationTrigger can only be applied to a GraphObject, not to: "+t);else if(e instanceof PathFigure)t instanceof Geometry&&t.type===4?t.figures.add(e):U.n("A PathFigure can only be added to a Path Geometry, not to: "+t);else if(e instanceof PathSegment)t instanceof PathFigure?t.segments.add(e):U.n("A PathSegment can only be added to a PathFigure, not to: "+t);else if(e instanceof Layout)t instanceof Diagram||t instanceof Group?t.layout=e:U.n("A Layout can only be assigned to a Diagram or a Group, not to: "+t);else if(Array.isArray(e))for(let i=0;i<e.length;i++){const s=e[i];GraphObject.oN(t,s)}else U.Z(e)?GraphObject.YI(t,e):U.n('Unknown initializer "'+e+'" for object being constructed by GraphObject.make: '+t)}static GI(t,e){if(t instanceof TextBlock)t.text=e;else if(t instanceof Shape)t.figure=e;else if(t instanceof Picture)t.source=e;else if(t instanceof Panel){const i=PanelLayout.es.get(e);i!==null&&(t.type=i)}else if(t instanceof Brush){const i=U.oh(BrushType,e);i!==null?t.type=i:U.n("Unknown Brush type as an argument to GraphObject.make: "+e)}else if(t instanceof Geometry){const i=U.oh(GeometryType,e);i!==null&&(t.type=i)}else if(t instanceof PathSegment){const i=U.oh(SegmentType,e);i!==null&&(t.type=i)}}static XI(t,e){U.nt(t.ge)?t.ge(e):U.wr(t,e)}static YI(t,e){if(t instanceof Brush){const i=new PropertyCollection;for(const s in e){const n=parseFloat(s);isNaN(n)?i[s]=e[s]:t.addColorStop(n,e[s])}Diagram.Up(t,i)}else if(t instanceof RowColumnDefinition){if(e.row!==void 0){const s=e.row;(s==null||s===1/0||isNaN(s)||s<0)&&U.n("Must specify non-negative integer row for RowColumnDefinition "+e+", not: "+s),t.isRow=!0,t.index=s}else if(e.column!==void 0){const s=e.column;(s==null||s===1/0||isNaN(s)||s<0)&&U.n("Must specify non-negative integer column for RowColumnDefinition "+e+", not: "+s),t.isRow=!1,t.index=s}const i=new PropertyCollection;for(const s in e)s==="row"||s==="column"||(i[s]=e[s]);Diagram.Up(t,i)}else Diagram.Up(t,e)}static build(t,e,...i){const s=GraphObject._1.get(t);if(U.nt(s)){const n=s([t].concat(i));if(n instanceof GraphObject)return e&&n.setProperties(e),n}U.n('GraphObject.build invoked object builder "'+t+'", but it did not return an Object')}static defineBuilder(t,e){U.s(t,"string",GraphObject,"defineBuilder:name"),U.S(e,GraphObject,"defineBuilder:func");const i=t.toLowerCase();GraphObject._1.set(t,e)}static isBuilderDefined(t){return GraphObject._1.has(t)}static takeBuilderArgument(t,e,i){i===void 0&&(i=null);const s=t[1];return(U.nt(i)?i(s):typeof s=="string")?(t.splice(1,1),s):(e===void 0&&U.n("no "+(U.nt(i)?"satisfactory":"string")+" argument for GraphObject builder "+t[0]),e)}static _1=new GMap}GraphObject.Vertical=4,GraphObject.Horizontal=5,GraphObject.defineBuilder("Button",w=>{const t="#f5f5f5",e="#737373",i="#d4d4d4",s="#737373",n="#a3a3a3",o=2.76142374915397,r=2.761423749153969,l=new Panel(Panel.Auto,{isActionable:!0,enabledChanged:(a,h)=>{if(a instanceof Panel){const c=a.findObject("ButtonBorder");if(c!==null)if(a._buttonFillNormal===void 0&&(a._buttonFillNormal=c.fill),h){let f=null;a.layer!==null&&a.diagram!==null&&a.isVisibleObject()&&(f=a.layer.findObjectAt(a.diagram.lastInput.documentPoint)),f===a||f!==null&&f.isContainedBy(a)?c.fill=a._buttonFillOver:c.fill=a._buttonFillNormal}else c.fill=a._buttonFillDisabled}},cursor:"pointer"}).attach({_buttonFillNormal:void 0,_buttonStrokeNormal:void 0,_buttonFillOver:i,_buttonStrokeOver:s,_buttonFillDisabled:n}).add(new Shape("RoundedRectangle",{name:"ButtonBorder",spot1:new Spot(0,0,o,r),spot2:new Spot(1,1,-o,-r),parameter1:2,fill:t,stroke:e}));return l.mouseEnter=(a,h,c)=>{if(!h.isEnabledObject()||!(h instanceof Panel))return;const f=h.findObject("ButtonBorder");f instanceof Shape&&(h._buttonFillNormal===void 0&&(h._buttonFillNormal=f.fill),f.fill=h._buttonFillOver,h._buttonStrokeNormal===void 0&&(h._buttonStrokeNormal=f.stroke),f.stroke=h._buttonStrokeOver)},l.mouseLeave=(a,h,c)=>{if(!h.isEnabledObject()||!(h instanceof Panel))return;const f=h.findObject("ButtonBorder");f instanceof Shape&&(h._buttonFillNormal!==void 0&&(f.fill=h._buttonFillNormal),h._buttonStrokeNormal!==void 0&&(f.stroke=h._buttonStrokeNormal))},l}),GraphObject.defineBuilder("TreeExpanderButton",w=>{const t=GraphObject.build("Button");return t.attach({_treeExpandedFigure:"MinusLine",_treeCollapsedFigure:"PlusLine",visible:!1}),t.add(new Shape("MinusLine",{name:"ButtonIcon",stroke:"#0a0a0a",strokeWidth:2,desiredSize:Size.Fu}).bindObject("figure","isTreeExpanded",(e,i)=>{const s=i.panel;return e?s._treeExpandedFigure:s._treeCollapsedFigure})),t.bindObject("visible","isTreeLeaf",e=>!e),t.click=(e,i)=>{let s=i.part;if(s instanceof Adornment&&(s=s.adornedPart),!(s instanceof Node))return;const n=s.diagram;if(n===null)return;const o=n.commandHandler;if(s.isTreeExpanded){if(!o.canCollapseTree(s))return}else if(!o.canExpandTree(s))return;e.handled=!0,s.isTreeExpanded?o.collapseTree(s):o.expandTree(s)},t}),GraphObject.defineBuilder("SubGraphExpanderButton",w=>{const t=GraphObject.build("Button");return t.attach({_subGraphExpandedFigure:"MinusLine",_subGraphCollapsedFigure:"PlusLine"}),t.add(new Shape("MinusLine",{name:"ButtonIcon",stroke:"#0a0a0a",strokeWidth:2,desiredSize:Size.Fu}).bindObject("figure","isSubGraphExpanded",(e,i)=>{const s=i.panel;return e?s._subGraphExpandedFigure:s._subGraphCollapsedFigure})),t.click=(e,i)=>{let s=i.part;if(s instanceof Adornment&&(s=s.adornedPart),!(s instanceof Group))return;const n=s.diagram;if(n===null)return;const o=n.commandHandler;if(s.isSubGraphExpanded){if(!o.canCollapseSubGraph(s))return}else if(!o.canExpandSubGraph(s))return;e.handled=!0,s.isSubGraphExpanded?o.collapseSubGraph(s):o.expandSubGraph(s)},t}),GraphObject.defineBuilder("ToolTip",w=>new Adornment(Panel.Auto,{isShadowed:!0,shadowColor:"rgba(0, 0, 0, .4)",shadowOffset:new Point(0,2),mouseOver:(t,e)=>{const i=t.diagram.toolManager;i.extendToolTip(i.toolTipDuration)}}).add(new Shape("RoundedRectangle",{name:"Border",parameter1:1,fill:"#f5f5f5",strokeWidth:0,spot1:new Spot(0,0,4,6),spot2:new Spot(1,1,-4,-4)}))),GraphObject.defineBuilder("ContextMenu",w=>new Adornment(Panel.Vertical,{background:"#f5f5f5",isShadowed:!0,shadowColor:"rgba(0, 0, 0, .4)",shadowOffset:new Point(0,2)}).bindObject("background","",t=>t.adornedPart!==null&&t.hasPlaceholder()?null:"#f5f5f5")),GraphObject.defineBuilder("ContextMenuButton",w=>{const t=GraphObject.build("Button");t.stretch=5;const e=t.findObject("ButtonBorder");return e instanceof Shape&&(e.figure="Rectangle",e.strokeWidth=0,e.spot1=new Spot(0,0,4,6),e.spot2=new Spot(1,1,-4,-4)),t}),GraphObject.defineBuilder("PanelExpanderButton",w=>{const t=GraphObject.takeBuilderArgument(w,"COLLAPSIBLE"),e=GraphObject.build("Button");e.attach({_buttonExpandedFigure:"M0 0 M0 6 L4 2 8 6 M8 8",_buttonCollapsedFigure:"M0 0 M0 2 L4 6 8 2 M8 8","ButtonBorder.fill":"rgba(0, 0, 0, 0)",_buttonFillNormal:"rgba(0, 0, 0, 0)","ButtonBorder.stroke":null,_buttonStrokeNormal:null,_buttonFillOver:"rgba(0, 0, 0, .2)",_buttonStrokeOver:null}),e.add(new Shape({name:"ButtonIcon",strokeWidth:2}).bindObject("geometryString","visible",s=>s?e._buttonExpandedFigure:e._buttonCollapsedFigure,void 0,t));const i=e.findObject("ButtonBorder");return i instanceof Shape&&(i.stroke=null,i.fill="rgba(0, 0, 0, 0)"),e.click=(s,n)=>{if(!(n instanceof Panel))return;const o=n.diagram;if(o===null||o.isReadOnly)return;let r=n.findBindingPanel();if(r===null&&(r=n.part),r!==null){const l=r.findObject(t);l!==null&&(s.handled=!0,o.startTransaction("Collapse/Expand Panel"),l.visible=!l.visible,o.commitTransaction("Collapse/Expand Panel"))}},e}),GraphObject.defineBuilder("CheckBoxButton",w=>{const t=GraphObject.takeBuilderArgument(w),e=GraphObject.build("Button",{desiredSize:new Size(14,14)});e.attach({"ButtonBorder.spot1":new Spot(0,0,1,1),"ButtonBorder.spot2":new Spot(1,1,-1,-1)});const i=new Shape({name:"ButtonIcon",geometryString:"M0 0 M0 8.85 L4.9 13.75 16.2 2.45 M16.2 16.2",strokeWidth:2,stretch:2,geometryStretch:6,visible:!1});return t!==""&&i.bindTwoWay("visible",t),e.add(i),e.click=(s,n)=>{if(!(n instanceof Panel))return;const o=s.diagram;if(o===null||o.isReadOnly||t!==""&&o.model.isReadOnly)return;s.handled=!0;const r=n.findObject("ButtonIcon");o.startTransaction("checkbox"),r!==null&&(r.visible=!r.visible),U.nt(n._doClick)&&n._doClick(s,n),o.commitTransaction("checkbox")},e}),GraphObject.defineBuilder("CheckBox",w=>{const t=GraphObject.takeBuilderArgument(w),e=GraphObject.build("CheckBoxButton",{name:"Button",isActionable:!1,margin:new Margin(0,1,0,0)},t),i=new Panel("Horizontal",{isActionable:!0,cursor:e.cursor,margin:new Margin(1),mouseEnter:e.mouseEnter,mouseLeave:e.mouseLeave,click:e.click}).attach({_buttonFillNormal:e._buttonFillNormal,_buttonStrokeNormal:e._buttonStrokeNormal,_buttonFillOver:e._buttonFillOver,_buttonStrokeOver:e._buttonStrokeOver,_buttonFillDisabled:e._buttonFillDisabled,_buttonClick:e.click});return i.add(e),e.mouseEnter=null,e.mouseLeave=null,e.click=null,i}),GraphObject.defineBuilder("AutoRepeatButton",w=>{const t=GraphObject.takeBuilderArgument(w,50,r=>typeof r=="number"),e=GraphObject.takeBuilderArgument(w,500,r=>typeof r=="number");function i(r,l){n(r,l),l.click&&(l.Vd=U.yn(()=>s(r,l),e))}function s(r,l){l.Vd&&U.Dc(l.Vd),l.click&&(l.Vd=U.yn(()=>{l.click&&(l.click(r,l),s(r,l))},t))}function n(r,l){l.Vd&&(U.Dc(l.Vd),l.Vd=void 0)}const o=GraphObject.build("Button");return o.actionDown=(r,l)=>i(r,l),o.actionUp=(r,l)=>n(r,l),o.actionCancel=(r,l)=>n(r,l),o}),GraphObject.defineBuilder("ToggleSwitch",function(w){const t=GraphObject.takeBuilderArgument(w);t||U.n("ToggleSwitch must be data-bound to a property name, not: "+t);const e=GraphObject.takeBuilderArgument(w,!1,h=>typeof h=="boolean"),i="gray",s="transparent",n="white",a=new Panel("Auto",{width:e?15:28,height:e?28:15}).attach({_buttonFillOff:i,_buttonBorderOff:s,_buttonIconFillOff:n,_buttonFillOn:"green",_buttonBorderOn:"transparent",_buttonIconFillOn:"white"}).add(new Shape("Capsule",{name:"ButtonBorder",fill:i,stroke:s,strokeWidth:1}).bind("fill",t,(h,c)=>h?c.panel._buttonFillOn:c.panel._buttonFillOff).bind("stroke",t,(h,c)=>h?c.panel._buttonBorderOn:c.panel._buttonBorderOff)).add(new Shape("Circle",{name:"ButtonIcon",width:11,height:11,fill:n,stroke:null,alignment:e?Spot.Bottom:Spot.Left}).bind("fill",t,(h,c)=>h?c.panel._buttonIconFillOn:c.panel._buttonIconFillOff).bind("alignment",t,h=>h?e?Spot.Top:Spot.Right:e?Spot.Bottom:Spot.Left));return a.click=function(h,c){if(!c.isEnabledObject())return;const f=h.diagram;if(f===null||f.isReadOnly||t!==""&&f.model.isReadOnly)return;h.handled=!0;const u=c.findBindingPanel();u!==null&&(f.startTransaction("toggle switch"),f.model.set(u.data,t,!u.data[t]),typeof c._doClick=="function"&&c._doClick(h,c),f.commitTransaction("toggle switch"))},a}),GraphObject.defineBuilder("Toggle",function(w){const t=GraphObject.takeBuilderArgument(w),e=GraphObject.build("ToggleSwitch",{name:"Button"},t),i=new Panel("Horizontal",{cursor:e.cursor,margin:1,mouseEnter:e.mouseEnter,mouseLeave:e.mouseLeave,click:e.click}).attach({_buttonClick:e.click}).add(e);return e.mouseEnter=null,e.mouseLeave=null,e.click=null,i});class GraphObjectTemplateSettings{xe;St;ho;Ee;co;Is;jl;qr;jr;Wr;_r;tl;Jr;$r;Zr;k0;P0;Qr;S0;M0;C0;N0;el;il;l0;p0;Os;vr;Rr;go;m0;g0;Fr;o0;L0;A0;constructor(){this.xe=!1,this.St="",this.ho=-1,this.Ee=null,this.co=null,this.Is=null,this.jl="",this.qr=null,this.jr=null,this.Wr=null,this._r=null,this.tl=null,this.Jr=null,this.$r=null,this.Zr=null,this.k0=null,this.P0=null,this.Qr=null,this.S0=null,this.M0=null,this.C0=null,this.N0=null,this.el=null,this.il=null,this.l0=null,this.p0=null,this.Os=null,this.vr=Size.vc,this.Rr=Size.XP,this.go=1,this.m0=1,this.g0=1,this.Fr=0,this.o0=null,this.L0=null,this.A0="category"}copy(){const t=new GraphObjectTemplateSettings;return t.St=this.St,t.ho=this.ho,t.Ee=this.Ee,t.Is=this.Is,t.jl=this.jl,t.qr=this.qr,t.jr=this.jr,t.Wr=this.Wr,t._r=this._r,t.tl=this.tl,t.Jr=this.Jr,t.$r=this.$r,t.Zr=this.Zr,t.k0=this.k0,t.P0=this.P0,t.Qr=this.Qr,t.S0=this.S0,t.M0=this.M0,t.C0=this.C0,t.N0=this.N0,t.el=this.el,t.il=this.il,t.l0=this.l0,t.p0=this.p0,t.Os=this.Os,t.vr=this.vr.C(),t.Rr=this.Rr.C(),t.go=this.go,t.m0=this.m0,t.g0=this.g0,t.Fr=this.Fr,t.o0=this.o0,t.L0=this.L0,t.A0=this.A0,t}}class STransform{m;constructor(){this.m=[1,0,0,1,0,0]}copy(){const t=new STransform;return t.m[0]=this.m[0],t.m[1]=this.m[1],t.m[2]=this.m[2],t.m[3]=this.m[3],t.m[4]=this.m[4],t.m[5]=this.m[5],t}translate(t,e){this.m[4]+=this.m[0]*t+this.m[2]*e,this.m[5]+=this.m[1]*t+this.m[3]*e}scale(t,e){this.m[0]*=t,this.m[1]*=t,this.m[2]*=e,this.m[3]*=e}rotate(t,e,i){if(t=G.ze(t),t===0)return;this.translate(e,i);let s=0,n=0;if(t===90)s=0,n=1;else if(t===180)s=-1,n=0;else if(t===270)s=0,n=-1;else{const h=t*Math.PI/180;s=Math.cos(h),n=Math.sin(h)}const o=this.m[0]*s+this.m[2]*n,r=this.m[1]*s+this.m[3]*n,l=this.m[0]*-n+this.m[2]*s,a=this.m[1]*-n+this.m[3]*s;this.m[0]=o,this.m[1]=r,this.m[2]=l,this.m[3]=a,this.translate(-e,-i)}}class SGradient{type;x1;y1;r1;x2;y2;r2;colors;pattern;constructor(t){this.type=t,this.x1=0,this.y1=0,this.r1=0,this.x2=0,this.y2=0,this.r2=0,this.colors=[],this.pattern=null}addColorStop(t,e){this.colors.push({offset:t,color:e})}}class SVGSurface{gt;de;cl;Nd;rN;constructor(t,e,i){const s=e===void 0?root.document:e;this.cl=s,this.rN="http://www.w3.org/2000/svg";const n="http://www.w3.org/2000/xmlns/";s!==void 0&&(this.gt=this.makeElement("svg",{width:"1px",height:"1px",viewBox:"0 0 1 1"}),this.style.display="block",this.style.letterSpacing="normal",this.style.wordSpacing="normal",i||(this.style.position="absolute"),this.gt.setAttributeNS(n,"xmlns",this.rN),this.gt.setAttributeNS(n,"xmlns:xlink","http://www.w3.org/1999/xlink")),this.Nd=null,this.de=new SVGContext(this,i)}resize(t,e,i,s){return this.width!==t||this.height!==e?(this.width=t,this.height=e,this.style.width=i+"px",this.style.height=s+"px",this.gt.setAttributeNS(null,"width",i+"px"),this.gt.setAttributeNS(null,"height",s+"px"),this.gt.setAttributeNS(null,"viewBox","0 0 "+i+" "+s),this.de.lN.firstElementChild.setAttributeNS(null,"width",i+"px"),this.de.lN.firstElementChild.setAttributeNS(null,"height",s+"px"),!0):!1}makeElement(t,e,i){const s=this.cl.createElementNS(this.rN,t);if(U.Z(e))for(const n in e)s.setAttributeNS(n==="href"?"http://www.w3.org/1999/xlink":"",n,e[n]);return i!==void 0&&(s.textContent=i),s}getBoundingClientRect(){return this.gt.getBoundingClientRect()}focus(){this.gt.focus({focusVisible:!1})}get width(){return parseInt(this.gt.getAttribute("width")||"1")}set width(t){this.gt.setAttribute("width",t+"px")}get height(){return parseInt(this.gt.getAttribute("height")||"1")}set height(t){this.gt.setAttribute("height",t+"px")}dispose(){this.cl=null}get style(){return this.gt.style}}class SVGContext{If;Ef;On;Ue;is;fillStyle;font;globalAlpha;lineCap;lineDashOffset;lineJoin;lineWidth;miterLimit;shadowBlur;shadowColor;shadowOffsetX;shadowOffsetY;strokeStyle;textAlign;imageSmoothingEnabled;clipInsteadOfFill;lastCreatedElement;Uf;Bf;surface;svg;lN;OD;ek;$o;Ia;Jh;currentElement;clipPathGroup;diagramGroup;lastDrawnPart;currentPath;outerGroup;pathAttributes;pl;Vr;filter;letterSpacing;wordSpacing;partClipRect;constructor(t,e){if(this.surface=t,this.svg=t.gt,this.Uf=[],this.Bf=[],this.fillStyle="#000000",this.font="10px sans-serif",this.globalAlpha=1,this.lineCap="butt",this.lineDashOffset=0,this.lineJoin="miter",this.lineWidth=1,this.miterLimit=10,this.shadowBlur=0,this.shadowColor="rgba(0, 0, 0, 0)",this.shadowOffsetX=0,this.shadowOffsetY=0,this.pl=!1,this.strokeStyle="#000000",this.textAlign="start",this.clipInsteadOfFill=!1,this.If=0,this.Ef=0,this.On=0,this.lastCreatedElement=null,this.currentElement=null,this.Ue=[],this.pathAttributes={},this.ek=!1,this.$o=null,this.Ia=0,this.OD={},this.Vr=!!e,this.filter="",this.partClipRect=null,this.is=new STransform,this.letterSpacing="0px",this.wordSpacing="0px",t.cl===null||t.cl===void 0)return;this.clipPathGroup=this.newGroup2(),this.diagramGroup=this.newGroup2("gojs-diagram"),this.lastDrawnPart=null,this.currentPath=null;const i=GSet.nx++,s=this.makeElement("clipPath",{id:"mainClip"+i}),n={x:0,y:0,width:t.width,height:t.height};s.appendChild(this.makeElement("rect",n)),this.lN=s,this.svg.appendChild(this.clipPathGroup),this.clipPathGroup.appendChild(this.diagramGroup),this.svg.appendChild(s),this.clipPathGroup.setAttributeNS(null,"clip-path","url(#mainClip"+i+")")}setDiagramPosScale(t,e,i,s,n,o){this.diagramGroup===void 0?this.newGroup(t,e,i,s,n,o):this.diagramGroup.setAttribute("transform","matrix("+t+", "+e+", "+i+", "+s+", "+n+", "+o+")")}resetInnerSVG(){this.diagramGroup!==null&&(this.diagramGroup.innerHTML="")}arc(t,e,i,s,n,o,r,l){const a=2*Math.PI,h=1e-6,c=a-h,f=i*Math.cos(s),u=i*Math.sin(s),d=t+f,m=e+u,g=o?0:1;let p=o?s-n:n-s;(Math.abs(r-d)>h||Math.abs(l-m)>h)&&this.Ue.push(["L",d,+m]),p<0&&(p=p%a+a),p>c?(this.Ue.push(["A",i,i,0,1,g,t-f,e-u]),this.Ue.push(["A",i,i,0,1,g,d,m])):p>h&&this.Ue.push(["A",i,i,0,+(p>=Math.PI),g,t+i*Math.cos(n),e+i*Math.sin(n)])}beginPath(){this.Ue=[],this.pathAttributes={stroke:"none",fill:"none"}}endPath(t){this.KI(this.Ue,this.is,t||0)}bezierCurveTo(t,e,i,s,n,o){this.Ue.push(["C",t,e,i,s,n,o])}clearRect(t,e,i,s){}clip(){this.pathAttributes.clipPath=!0}closePath(){this.Ue.push(["z"])}createLinearGradient(t,e,i,s){const n=new SGradient("linear");return n.x1=t,n.y1=e,n.x2=i,n.y2=s,n}createPattern(t,e){let i="";t instanceof HTMLCanvasElement&&(i=t.toDataURL()),t instanceof HTMLImageElement&&(i=t.getAttribute("src"));const s=this.OD;if(s[i])return"url(#"+s[i]+")";const n="PATTERN"+GSet.nx++,o={width:t.width,height:t.height,id:n,patternUnits:"userSpaceOnUse"},r={x:0,y:0,width:t.width,height:t.height,href:i},l=this.makeElement("pattern",o);return l.appendChild(this.makeElement(Diagram.img,r)),this.svg.appendChild(l),s[i]=n,"url(#"+n+")"}createRadialGradient(t,e,i,s,n,o){const r=new SGradient("radial");return r.x1=t,r.y1=e,r.r1=i,r.x2=s,r.y2=n,r.r2=o,r}amendImageTransform(t,e,i,s,n,o,r,l){const a=r/i,h=l/s;(n!==0||o!==0)&&this.is.translate(n,o),(a!==1||h!==1)&&this.is.scale(a,h),(t!==0||e!==0)&&this.is.translate(-t,-e)}drawImage(t,e,i,s,n,o,r,l,a){let h="",c=t.width,f=t.height;typeof t.toDataURL=="function"?t.toDataURL():(h=t.getAttribute("src"),c=t.naturalWidth,f=t.naturalHeight),s===void 0&&(o=e,r=i,l=s=c,a=n=f),s=s||0,n=n||0,o=o||0,r=r||0,l=l||0,a=a||0,this.amendImageTransform(e,i,s,n,o,r,l,a);const u={x:0,y:0,width:c||s,height:f||n,href:h};!G.G(s,l)||!G.G(n,a)?u.preserveAspectRatio="none":h.toLowerCase().indexOf(".svg")===-1&&h.toLowerCase().indexOf("data:image/svg")===-1&&(u.preserveAspectRatio="xMidYMid slice"),(e!==0||i!==0||s!==c||n!==f)&&(s+=e,n+=i,u["clip-path"]=`path('M ${e},${i} L ${s} ${i} L ${s} ${n} L ${e} ${n} z')`),this.processCommon(Diagram.img,u,this.is),this.zd(Diagram.img,u)}fill(t,e){t&&(this.pathAttributes["fill-rule"]="evenodd"),this.setFill(this.pathAttributes)}fillContext(t,e,i){this.clipInsteadOfFill?this.clip():this.fill(e,i)}createOrUpdateClipGroup(t,e){const i=this.newGroup(1,0,0,1,-e.x,-e.y);i.setAttributeNS(null,"class","spotClip"),t.Ta=i}fillRect(t,e,i,s){this.addRect("fill",[t,e,i,s],this.is)}fillBackground(t,e,i,s){const n={x:t,y:e,width:i,height:s};this.processCommon("fill",n,this.is),this.setFill(n),this.svg.prepend(this.makeElement("rect",n))}fillText(t,e,i){this.addText("fill",[t,e,i],this.is)}lineTo(t,e){this.Ue.push(["L",t,e])}moveTo(t,e){this.Ue.push(["M",t,e])}quadraticCurveTo(t,e,i,s){this.Ue.push(["Q",t,e,i,s])}rect(t,e,i,s){this.Ue.push(["M",t,e],["L",t+i,e],["L",t+i,e+s],["L",t,e+s],["z"])}ellipse(t,e,i,s,n,o,r){this.moveTo(t,e-s),this.bezierCurveTo(t+G.Zn*i,e-s,t+i,e-G.Zn*s,t+i,e),this.bezierCurveTo(t+i,e+G.Zn*s,t+G.Zn*i,e+s,t,e+s),this.bezierCurveTo(t-G.Zn*i,e+s,t-i,e+G.Zn*s,t-i,e),this.bezierCurveTo(t-i,e-G.Zn*s,t-G.Zn*i,e-s,t,e-s),this.closePath()}restore(){this.is=this.Uf.pop(),this.Ue=this.Uf.pop();const t=this.Uf.pop();this.fillStyle=t.fillStyle,this.font=t.font,this.globalAlpha=t.globalAlpha,this.lineCap=t.lineCap,this.lineDashOffset=t.lineDashOffset,this.lineJoin=t.lineJoin,this.lineWidth=t.lineWidth,this.miterLimit=t.miterLimit,this.shadowBlur=t.shadowBlur,this.shadowColor=t.shadowColor,this.shadowOffsetX=t.shadowOffsetX,this.shadowOffsetY=t.shadowOffsetY,this.strokeStyle=t.strokeStyle,this.textAlign=t.textAlign,this.partClipRect=t.partClipRect,this.letterSpacing=t.letterSpacing,this.wordSpacing=t.wordSpacing}save(){const t={fillStyle:this.fillStyle,font:this.font,globalAlpha:this.globalAlpha,lineCap:this.lineCap,lineDashOffset:this.lineDashOffset,lineJoin:this.lineJoin,lineWidth:this.lineWidth,miterLimit:this.miterLimit,shadowBlur:this.shadowBlur,shadowColor:this.shadowColor,shadowOffsetX:this.shadowOffsetX,shadowOffsetY:this.shadowOffsetY,strokeStyle:this.strokeStyle,textAlign:this.textAlign,partClipRect:this.partClipRect};this.Uf.push(t);const e=[];for(let i=0;i<this.Ue.length;i++)e.push(this.Ue[i]);this.Uf.push(e),this.Uf.push(this.is.copy())}setTransform(t,e,i,s,n,o){t===1&&e===0&&i===0&&s===1&&n===0&&o===0||this.newGroup(t,e,i,s,n,o)}setCurrentTransform(t,e,i,s,n,o){this.is.m=[t,e,i,s,n,o]}getCurrentTransform(){const t=this.is.m;return"matrix("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"}scale(t,e){this.is.scale(t,e)}translate(t,e){this.is.translate(t,e)}transform(t,e,i,s,n,o){}commitTransform(){}stroke(){this.setStroke(this.pathAttributes)}strokeContext(){this.clipInsteadOfFill||this.stroke()}strokeRect(t,e,i,s){this.addRect("stroke",[t,e,i,s],this.is)}makeElement(t,e,i){return this.surface.makeElement(t,e,i)}zd(t,e,i){const s=this.makeElement(t,e,i);return this.currentElement!==null?this.currentElement.appendChild(s):this.currentElement=s,this.lastCreatedElement=s,s}processCommon(t,e,i){if(t==="fill"?this.setFill(e):t==="stroke"&&this.setStroke(e),i!==null){const s=i.m;e.transform="matrix("+s[0]+", "+s[1]+", "+s[2]+", "+s[3]+", "+s[4]+", "+s[5]+")"}}setFill(t){if(this.fillStyle instanceof SGradient){t.fill=this.addGradient(this.fillStyle,"fill");return}if(/^rgba\(/.test(this.fillStyle)){const i=/^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec(this.fillStyle);t.fill="rgb("+i[1]+","+i[2]+","+i[3]+")",t["fill-opacity"]=i[4]}else t.fill=this.fillStyle}setFillOrStrokeInPlace(t,e){const i=e?"fill":"stroke";if(this.fillStyle instanceof SGradient){t.setAttributeNS(null,"fill",this.addGradient(this.fillStyle,i));return}if(/^rgba\(/.test(this.fillStyle)){const n=/^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec(this.fillStyle);t.setAttributeNS(null,i,"rgb("+n[1]+","+n[2]+","+n[3]+")"),t.setAttributeNS(null,i+"-opacity",n[4])}else t.setAttributeNS(null,i,this.fillStyle)}setStroke(t){if(this.strokeStyle instanceof SGradient)t.stroke=this.addGradient(this.strokeStyle,"stroke");else if(/^rgba\(/.test(this.strokeStyle)){const i=/^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec(this.strokeStyle);t.stroke="rgb("+i[1]+","+i[2]+","+i[3]+")",t["stroke-opacity"]=i[4]}else t.stroke=this.strokeStyle;t["stroke-width"]=this.lineWidth,t["stroke-linecap"]=this.lineCap,t["stroke-linejoin"]=this.lineJoin,t["stroke-miterlimit"]=this.miterLimit,this.ek&&(t["stroke-dasharray"]=this.$o.toString(),t["stroke-dashoffset"]=this.Ia)}addGradient(t,e){let i="";const s=this.currentPath!==null?this.currentPath.getAttribute(e):null;if(s!==null&&s.indexOf("GRAD")!==-1){i=s.split("#")[1].slice(0,-1);const l=this.svg.getElementById(i);l!==null&&l.remove()}else i="GRAD"+GSet.nx++;let n;if(t.type==="linear"){const l={x1:t.x1,x2:t.x2,y1:t.y1,y2:t.y2,id:i,gradientUnits:"userSpaceOnUse"};n=this.makeElement("linearGradient",l)}else if(t.type==="radial"){const l={x1:t.x1,x2:t.x2,y1:t.y1,y2:t.y2,r1:t.r1,r2:t.r2,id:i};n=this.makeElement("radialGradient",l)}else U.n("invalid gradient");const o=t.colors.sort((l,a)=>l.offset>a.offset?1:-1),r=o.length;for(let l=0;l<r;l++){const a=o[l],h=a.color;n.appendChild(this.makeElement("stop",{offset:a.offset,"stop-color":h}))}return this.svg.appendChild(n),"url(#"+i+")"}addRect(t,e,i){const s={x:e[0],y:e[1],width:e[2],height:e[3]};this.processCommon(t,s,i),this.zd("rect",s)}addText(t,e,i){let s=this.textAlign;s==="left"?s="start":s==="right"?s="end":s==="center"&&(s="middle");const n={x:e[1],y:e[2],style:"font: "+this.font,"text-anchor":s};n["letter-spacing"]=this.letterSpacing,n["word-spacing"]=this.wordSpacing,this.processCommon(t,n,i),this.zd("text",n,e[0])}KI(t,e,i){const s=this.HI(t),n=this.pathAttributes;if(n.clipPath){this.Bf.length>1&&this.Bf[this.Bf.length-2].setAttributeNS(null,"clip-path",'path("'+s+'") view-box');return}if(n.d=s,this.processCommon("",n,e),this.currentPath!==null){const r=this.currentPath;if(r.nodeName!=="g")for(const l in n)l!=="transform"&&r.setAttributeNS(null,l,n[l]);else{const l=r.getElementsByTagName("path");for(const a in n)a!=="transform"&&l[i].setAttributeNS(null,a,n[a])}}else this.zd("path",n)}HI(t){const e=[];for(let i=0;i<t.length;i++){const s=t[i].slice(),n=[s.shift()];if(n[0]==="A")n.push(s.shift()+","+s.shift(),s.shift(),s.shift()+","+s.shift(),s.shift()+","+s.shift());else for(;s.length;)n.push(s.shift()+","+s.shift());e.push(n.join(" "))}return e.join(" ")}newGroup(t,e,i,s,n,o){const r=new STransform;r.m=[t,e,i,s,n,o];const l={};this.processCommon("g",l,r);const a=this.zd("g",l);return this.Bf.push(a),a}newGroup2(t){const e={};t&&(e.class=t);const i=this.zd("g",e);return this.Bf.push(i),i}endGroup(){return this.Bf.pop()}dummyGroup(){return this.newGroup2(),this.endGroup()}shadowsSet(t,e,i){this.If=t,this.Ef=e,this.On=i}shadowsOff(){this.pl=!1,this.shadowOffsetX=0,this.shadowOffsetY=0,this.shadowBlur=0}shadowsOn(){this.pl=!0,this.shadowOffsetX=this.If,this.shadowOffsetY=this.Ef,this.shadowBlur=this.On}enableDash(t,e){this.ek=!0,this.$o=t,this.Ia=e}disableDash(){this.ek=!1}clearContextCache(t){}setImageSmoothingEnabled(t){}rotate(t){this.is.rotate(t*57.2958,0,0)}getImageData(t,e,i,s){return null}measureText(t){return null}removeOldGradient(t,e,i){const s=e.getAttribute(i);if(s===null)return;const n=s.split("#");if(n.length===1)return;const o=this.svg.getElementById(n[1].slice(0,-1));if(o!==null){const r=new RegExp(o.id,"g");this.svg.innerHTML.match(r).length===1&&o.remove()}}removePartFromView(t){t.svg!==null&&t.svg.parentNode===this.diagramGroup&&t.svg.remove()}}class CanvasSurface{gt;de;cl;Nd;constructor(t,e,i,s){const n=e===void 0?root.document:e;this.cl=n,this.Nd=null;const o=n.createElement("canvas");o.tabIndex=0,this.gt=o,this.de=new CanvasSurfaceContext(o,i,s),t&&Diagram.Qi.set(o,t)}resize(t,e,i,s){return this.width!==t||this.height!==e?(this.width=t,this.height=e,this.style.width=i+"px",this.style.height=s+"px",!0):!1}toDataURL(t,e){return this.gt.toDataURL(t,e)}getBoundingClientRect(){return this.gt.getBoundingClientRect()}focus(){this.gt.focus({focusVisible:!1})}get width(){return this.gt.width}set width(t){this.gt.width=t}get height(){return this.gt.height}set height(t){this.gt.height=t}dispose(){Diagram.Qi.delete(this.gt),this.cl=null}get style(){return this.gt.style}}class CanvasSurfaceContext{v;ik;sk;nk;clipInsteadOfFill;If;Ef;On;Jh;pl;Vr;constructor(t,e,i){t.getContext||U.n("Browser does not support HTML Canvas Element"),this.v=t.getContext("2d",e),this.ik="",this.sk="",this.nk="",this.clipInsteadOfFill=!1,this.If=0,this.Ef=0,this.On=0,this.pl=!1,this.Jh=new Transform,this.Vr=!!i}createOrUpdateClipGroup(t,e){}setImageSmoothingEnabled(t){this.v.imageSmoothingEnabled=t}get fillStyle(){return this.v.fillStyle}set fillStyle(t){this.nk!==t&&(this.v.fillStyle=t,this.nk=t)}get font(){return this.v.font}set font(t){this.ik!==t&&(this.v.font=t,this.ik=t)}get globalAlpha(){return this.v.globalAlpha}set globalAlpha(t){this.v.globalAlpha=t}get lineCap(){return this.v.lineCap}set lineCap(t){this.v.lineCap=t}get lineDashOffset(){return this.v.lineDashOffset}set lineDashOffset(t){this.v.lineDashOffset=t}get lineJoin(){return this.v.lineJoin}set lineJoin(t){this.v.lineJoin=t}get lineWidth(){return this.v.lineWidth}set lineWidth(t){this.v.lineWidth=t}get miterLimit(){return this.v.miterLimit}set miterLimit(t){this.v.miterLimit=t}get shadowBlur(){return this.v.shadowBlur}set shadowBlur(t){this.v.shadowBlur=t}get shadowColor(){return this.v.shadowColor}set shadowColor(t){this.v.shadowColor=t}get shadowOffsetX(){return this.v.shadowOffsetX}set shadowOffsetX(t){this.v.shadowOffsetX=t}get shadowOffsetY(){return this.v.shadowOffsetY}set shadowOffsetY(t){this.v.shadowOffsetY=t}get strokeStyle(){return this.v.strokeStyle}set strokeStyle(t){this.sk!==t&&(this.v.strokeStyle=t,this.sk=t)}get textAlign(){return this.v.textAlign}set textAlign(t){this.v.textAlign=t}get imageSmoothingEnabled(){return this.v.imageSmoothingEnabled}set imageSmoothingEnabled(t){this.v.imageSmoothingEnabled=t}get filter(){return this.v.filter}set filter(t){t===""?this.v.filter="none":this.v.filter=t}get letterSpacing(){return this.v.letterSpacing}set letterSpacing(t){this.v.letterSpacing=t}get wordSpacing(){return this.v.wordSpacing}set wordSpacing(t){this.v.wordSpacing=t}arc(t,e,i,s,n,o,r,l){this.v.arc(t,e,i,s,n,o)}beginPath(){this.v.beginPath()}endPath(){}bezierCurveTo(t,e,i,s,n,o){this.v.bezierCurveTo(t,e,i,s,n,o)}clearRect(t,e,i,s){this.commitTransform(),this.v.clearRect(t,e,i,s)}clip(t){t?this.v.clip(t):this.v.clip()}closePath(){this.v.closePath()}createLinearGradient(t,e,i,s){return this.v.createLinearGradient(t,e,i,s)}createPattern(t,e){return this.v.createPattern(t,e)}createRadialGradient(t,e,i,s,n,o){return this.v.createRadialGradient(t,e,i,s,n,o)}drawImage(t,e,i,s,n,o,r,l,a){s===void 0?this.v.drawImage(t,e,i):this.v.drawImage(t,e,i,s,n,o,r,l,a)}fill(t,e){e?this.v.fill(e,t?"evenodd":"nonzero"):this.v.fill(t?"evenodd":"nonzero")}fillRect(t,e,i,s){this.v.fillRect(t,e,i,s)}fillBackground(t,e,i,s){this.v.fillRect(t,e,i,s)}fillText(t,e,i){this.v.fillText(t,e,i)}getImageData(t,e,i,s){return this.v.getImageData(t,e,i,s)}lineTo(t,e){this.v.lineTo(t,e)}measureText(t){return this.v.measureText(t)}moveTo(t,e){this.v.moveTo(t,e)}quadraticCurveTo(t,e,i,s){this.v.quadraticCurveTo(t,e,i,s)}rect(t,e,i,s){this.v.rect(t,e,i,s)}ellipse(t,e,i,s,n,o,r){this.v.ellipse(t,e,i,s,n,o,r)}restore(){this.v.restore()}save(){this.commitTransform(),this.v.save()}rotate(t){this.Jh.Ps(t*57.2958,0,0)}setTransform(t,e,i,s,n,o){this.Jh.setTo(t,e,i,s,n,o)}scale(t,e){this.Jh.it(t,e)}translate(t,e){this.Jh.js(t,e)}stroke(t){t?this.v.stroke(t):this.v.stroke()}transform(t,e,i,s,n,o){if(t===1&&e===0&&i===0&&s===1&&n===0&&o===0)return;const r=this.Jh,l=r.m11*t+r.m21*e,a=r.m12*t+r.m22*e,h=r.m11*i+r.m21*s,c=r.m12*i+r.m22*s;r.dx=r.m11*n+r.m21*o+r.dx,r.dy=r.m12*n+r.m22*o+r.dy,r.m11=l,r.m12=a,r.m21=h,r.m22=c}commitTransform(){const t=this.Jh;this.v.setTransform(t.m11,t.m12,t.m21,t.m22,t.dx,t.dy)}fillContext(t,e,i){this.radialFill(t,e,i)||this.fillOrClip(e,i)}radialFill(t,e,i){if(!(t instanceof Brush)||t.type!==3)return!1;const s=t.Ff,n=t.$1;return n>s?(this.scale(s/n,1),this.translate((n-s)/2,0)):s>n&&(this.scale(1,n/s),this.translate(0,(s-n)/2)),this.fillOrClip(e,i),n>s?(this.translate(-(n-s)/2,0),this.scale(1/(s/n),1)):s>n&&(this.translate(0,-(s-n)/2),this.scale(1,1/(n/s))),!0}strokeContext(){this.clipInsteadOfFill||this.stroke()}fillOrClip(t,e){this.clipInsteadOfFill?this.clip(e):this.fill(t,e)}shadowsSet(t,e,i){this.If=t,this.Ef=e,this.On=i}shadowsOff(){this.pl=!1,this.shadowOffsetX=0,this.shadowOffsetY=0,this.shadowBlur=0}shadowsOn(){this.pl=!0,this.shadowOffsetX=this.If,this.shadowOffsetY=this.Ef,this.shadowBlur=this.On}enableDash(t,e){const i=this.v;i.setLineDash!==void 0&&(i.setLineDash(t),i.lineDashOffset=e)}disableDash(){const t=this.v;t.setLineDash!==void 0&&(t.setLineDash(CanvasSurfaceContext.EmptyArray),t.lineDashOffset=0)}clearContextCache(t){t&&(this.ik=""),this.sk="",this.nk=""}removePartFromView(t){}static EmptyArray=Object.freeze([])}var BrushType=(w=>(w[w.Solid=1]="Solid",w[w.Linear=2]="Linear",w[w.Radial=3]="Radial",w[w.Pattern=4]="Pattern",w))(BrushType||{}),ColorSpace=(w=>(w[w.Lab=1]="Lab",w[w.HSL=2]="HSL",w[w.Oklch=3]="Oklch",w))(ColorSpace||{});class ColorNumbers{n0;n1;n2;n3;constructor(){this.n0=0,this.n1=0,this.n2=0,this.n3=0}}class Brush{u;J;$h;fe;Ds;D0;F0;Zo;v0;vn;Ff;$1;constructor(t,e){if(GSet._e(this),this.u=!1,t===void 0)this.J=1,this.$h="black";else if(typeof t=="string"){const s=U.oh(BrushType,t);s!==null?(this.J=s,this.$h="black"):(this.J=1,this.$h=t)}else Object.keys(BrushType).hasOwnProperty(t)?(this.J=t,this.$h="black"):typeof t=="object"&&(this.J=1,e=t);const i=this.J;if(i===2?(this.fe=Spot.TopCenter,this.Ds=Spot.BottomCenter):i===3?(this.fe=Spot.Center,this.Ds=Spot.Center):(this.fe=Spot.None,this.Ds=Spot.None),this.D0=0,this.F0=NaN,this.Zo=null,this.v0=null,this.vn=null,this.Ff=0,this.$1=0,e){const s={};for(const n in e)isFinite(parseFloat(n))?this.addColorStop(parseFloat(n),e[n]):s[n]=e[n];Object.assign(this,s)}}copy(){const t=new Brush;return t.J=this.J,t.$h=this.$h,t.fe=this.fe.C(),t.Ds=this.Ds.C(),t.D0=this.D0,t.F0=this.F0,this.Zo!==null&&(t.Zo=this.Zo.copy()),t.v0=this.v0,t}b(){return this.u=!0,this.Zo!==null&&this.Zo.b(),this}ge(t){t in BrushType?this.type=t:U.wr(this,t)}toString(){let t="Brush(";if(this.type===1)t+=this.color;else if(this.type===2?t+="Linear ":this.type===3?t+="Radial ":this.type===4?t+="Pattern ":t+="(unknown) ",t+=this.start+" "+this.end,this.colorStops!==null){const e=this.colorStops.iterator;for(;e.next();){const i=e.key,s=e.value;t+=" "+i+":"+s}}return t+=")",t}addColorStop(t,e){return this.u&&U.L(this),(typeof t!="number"||!isFinite(t)||t>1||t<0)&&U.$(t,"0 <= loc <= 1",Brush,"addColorStop:loc"),U.s(e,"string",Brush,"addColorStop:color"),this.Zo===null&&(this.Zo=new GMap),this.Zo.set(t,e),this.J===1&&(this.type=2),this.vn=null,this}get type(){return this.J}set type(t){this.u&&U.L(this,t),this.J=t,this.start.isNoSpot()&&(t===2?this.start=Spot.TopCenter:t===3&&(this.start=Spot.Center)),this.end.isNoSpot()&&(t===2?this.end=Spot.BottomCenter:t===3&&(this.end=Spot.Center)),this.vn=null}get color(){return this.$h}set color(t){this.u&&U.L(this,t),this.$h=t,this.vn=null}get start(){return this.fe}set start(t){this.u&&U.L(this,t),this.fe=t.C(),this.vn=null}get end(){return this.Ds}set end(t){this.u&&U.L(this,t),this.Ds=t.C(),this.vn=null}get startRadius(){return this.D0}set startRadius(t){this.u&&U.L(this,t),t<0&&U.$(t,">= zero",Brush,"startRadius"),this.D0=t,this.vn=null}get endRadius(){return this.F0}set endRadius(t){this.u&&U.L(this,t),t<0&&U.$(t,">= zero",Brush,"endRadius"),this.F0=t,this.vn=null}get colorStops(){return this.Zo}set colorStops(t){this.u&&U.L(this,t),this.Zo=t,this.vn=null}get pattern(){return this.v0}set pattern(t){this.u&&U.L(this,t),this.v0=t,this.vn=null}static randomColor(t,e){t===void 0&&(t=128),e===void 0&&(e=Math.max(t,255));const i=Math.abs(e-t);let s=Math.floor(t+U.um()*i).toString(16),n=Math.floor(t+U.um()*i).toString(16),o=Math.floor(t+U.um()*i).toString(16);return s.length<2&&(s="0"+s),n.length<2&&(n="0"+n),o.length<2&&(o="0"+o),"#"+s+n+o}static isValidColor(t){return root.CSS?root.CSS.supports("color",t):!0}static lighten(t){return Brush.lightenBy(t)}lightenBy(t,e){this.u&&U.L(this);const i=t===void 0||typeof t!="number"?.2:t,s=e===void 0?3:e;if(this.type===1)Brush.Vo(this.color),this.color=Brush.Xd(i,s);else if((this.type===2||this.type===3)&&this.colorStops!==null){const n=this.colorStops.iterator;for(;n.next();)Brush.Vo(n.value),this.addColorStop(n.key,Brush.Xd(i,s))}return this}static lightenBy(t,e,i){const s=e===void 0||typeof e!="number"?.2:e,n=i===void 0?3:i;return Brush.Vo(t),Brush.Xd(s,n)}static darken(t){return Brush.darkenBy(t)}darkenBy(t,e){this.u&&U.L(this);const i=t===void 0||typeof t!="number"?.2:t,s=e===void 0?3:e;if(this.type===1)Brush.Vo(this.color),this.color=Brush.Xd(-i,s);else if((this.type===2||this.type===3)&&this.colorStops!==null){const n=this.colorStops.iterator;for(;n.next();)Brush.Vo(n.value),this.addColorStop(n.key,Brush.Xd(-i,s))}return this}static darkenBy(t,e,i){const s=e===void 0||typeof e!="number"?.2:e,n=i===void 0?3:i;return Brush.Vo(t),Brush.Xd(-s,n)}static mix(t,e,i){Brush.Vo(t);const s=Brush.K.n0,n=Brush.K.n1,o=Brush.K.n2,r=Brush.K.n3;Brush.Vo(e),i===void 0&&(i=.5);const l=Math.round((Brush.K.n0-s)*i+s),a=Math.round((Brush.K.n1-n)*i+n),h=Math.round((Brush.K.n2-o)*i+o),c=Math.round((Brush.K.n3-r)*i+r);return`rgba(${l}, ${a}, ${h}, ${c})`}isDark(){if(this.type===1)return Brush.isDark(this.color);if((this.type===2||this.type===3)&&this.colorStops!==null){const t=this.colorStops;if(this.type===3){const l=t.first();return l?Brush.isDark(l.value):!1}if(t.get(.5)!==null)return Brush.isDark(t.get(.5));if(t.count===2){const l=t.toArray();return Brush.isDark(Brush.mix(l[0].value,l[1].value))}const e=t.iterator;let i=-1,s=-1,n=1,o=1;for(;e.next();){const l=e.key,a=Math.abs(.5-e.key);n>o&&a<n?(i=l,n=a):o>=n&&a<o&&(s=l,o=a)}if(i>s){let l=i;i=s,s=l,l=n,n=o,o=l}const r=s-i;return Brush.isDark(Brush.mix(t.get(i),t.get(s),1-o/r))}return!1}static isDark(t){return t?t instanceof Brush?t.isDark():(Brush.Vo(t),(299*Brush.K.n0+587*Brush.K.n1+114*Brush.K.n2)/1e3<128):!1}static Xd(t,e){switch(e){case 1:return Brush.qI(),Brush.mo.n0=Math.min(100,Math.max(0,Brush.mo.n0+100*t)),Brush.jI(),"rgba("+Brush.K.n0+", "+Brush.K.n1+", "+Brush.K.n2+", "+Brush.K.n3+")";case 2:return Brush.e2(),Brush.Ke.n2=Math.min(100,Math.max(0,Brush.Ke.n2+100*t)),"hsla("+Brush.Ke.n0+", "+Brush.Ke.n1+"%, "+Brush.Ke.n2+"%, "+Brush.Ke.n3+")";case 3:return Brush.WI(),Brush.po.n0=Math.min(100,Math.max(0,Brush.po.n0+100*t)),Brush.JI(),"rgba("+Brush.K.n0+", "+Brush.K.n1+", "+Brush.K.n2+", "+Brush.K.n3+")";default:U.n("Unknown color space: "+e)}}static Vo(t){Brush.R0===!1&&(Brush.R0=!0,Brush.gs=Diagram.isUsingDOM()?new CanvasSurface(null,void 0,{willReadFrequently:!0}).de:null);const e=Brush.gs;if(e===null)return;e.clearRect(0,0,1,1),e.fillStyle="#000000";const i=e.fillStyle;if(e.fillStyle=t,e.fillStyle!==i){e.fillRect(0,0,1,1);const s=e.getImageData(0,0,1,1).data;Brush.K.n0=s[0],Brush.K.n1=s[1],Brush.K.n2=s[2],Brush.K.n3=s[3]/255}else{e.fillStyle="#FFFFFF";const s=e.fillStyle;e.fillStyle=t,e.fillStyle,Brush.K.n0=0,Brush.K.n1=0,Brush.K.n2=0,Brush.K.n3=1}}static e2(){const t=Brush.K.n0/255,e=Brush.K.n1/255,i=Brush.K.n2/255,s=Math.max(t,e,i),n=Math.min(t,e,i),o=s-n;let r,l;const a=(s+n)/2;if(o===0)r=l=0;else{switch(s){case t:r=(e-i)/o%6;break;case e:r=(i-t)/o+2;break;case i:r=(t-e)/o+4;break;default:r=0;break}r*=60,r<0&&(r+=360),l=o/(1-Math.abs(2*a-1))}Brush.Ke.n0=Math.round(r),Brush.Ke.n1=Math.round(l*100),Brush.Ke.n2=Math.round(a*100),Brush.Ke.n3=Brush.K.n3}static fB(){const t=Brush.Ke.n0,e=Brush.Ke.n1/100,i=Brush.Ke.n2/100;let s,n,o;const r=(1-Math.abs(2*i-1))*e,l=t/60,a=r*(1-Math.abs(l%2-1));l>=0&&l<1?(s=r,n=a,o=0):l>=1&&l<2?(s=a,n=r,o=0):l>=2&&l<3?(s=0,n=r,o=a):l>=3&&l<4?(s=0,n=a,o=r):l>=4&&l<5?(s=a,n=0,o=r):(s=r,n=0,o=a);const h=i-.5*r;s+=h,n+=h,o+=h,Brush.K.n0=Math.round(s*255),Brush.K.n1=Math.round(n*255),Brush.K.n2=Math.round(o*255),Brush.K.n3=Brush.Ke.n3}static qI(){Brush.ID(),Brush.$I()}static jI(){Brush.ZI(),Brush.ED()}static aN(t){return t/=255,t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}static hN(t){return t<=.0031308?t*12.92:1.055*Math.pow(t,1/2.4)-.055}static ID(){const t=Brush.aN(Brush.K.n0),e=Brush.aN(Brush.K.n1),i=Brush.aN(Brush.K.n2);Brush.Dt.n0=.4124564*t+.3575761*e+.1804375*i,Brush.Dt.n1=.2126729*t+.7151522*e+.072175*i,Brush.Dt.n2=.0193339*t+.119192*e+.9503041*i,Brush.Dt.n3=Brush.K.n3}static ED(){const t=3.2404542*Brush.Dt.n0+-1.5371385*Brush.Dt.n1+-.4985314*Brush.Dt.n2,e=-.969266*Brush.Dt.n0+1.8760108*Brush.Dt.n1+.041556*Brush.Dt.n2,i=.0556434*Brush.Dt.n0+-.2040259*Brush.Dt.n1+1.0572252*Brush.Dt.n2;Brush.K.n0=Brush.hN(t)*255,Brush.K.n1=Brush.hN(e)*255,Brush.K.n2=Brush.hN(i)*255,Brush.K.n3=Brush.Dt.n3,Brush.K.n0=Math.round(Brush.K.n0),Brush.K.n0>255?Brush.K.n0=255:Brush.K.n0<0&&(Brush.K.n0=0),Brush.K.n1=Math.round(Brush.K.n1),Brush.K.n1>255?Brush.K.n1=255:Brush.K.n1<0&&(Brush.K.n1=0),Brush.K.n2=Math.round(Brush.K.n2),Brush.K.n2>255?Brush.K.n2=255:Brush.K.n2<0&&(Brush.K.n2=0)}static cN=216/24389;static ok=24389/27;static Gd=[95.047,100,108.883];static fN(t){return t>Brush.cN?Math.pow(t,1/3):(Brush.ok*t+16)/116}static $I(){const t=Brush.fN(Brush.Dt.n0*100/Brush.Gd[0]),e=Brush.fN(Brush.Dt.n1*100/Brush.Gd[1]),i=Brush.fN(Brush.Dt.n2*100/Brush.Gd[2]);Brush.mo.n0=116*e-16,Brush.mo.n1=500*(t-e),Brush.mo.n2=200*(e-i),Brush.mo.n3=Brush.Dt.n3}static UD(t){const e=t*t*t;return e>Brush.cN?e:(116*t-16)/Brush.ok}static ZI(){const t=(Brush.mo.n0+16)/116,e=Brush.mo.n1/500+t,i=t-Brush.mo.n2/200;Brush.Dt.n0=Brush.Gd[0]/100*Brush.UD(e),Brush.Dt.n1=Brush.Gd[1]/100*(Brush.mo.n0>Brush.ok*Brush.cN?Math.pow(t,3):Brush.mo.n0/Brush.ok),Brush.Dt.n2=Brush.Gd[2]/100*Brush.UD(i),Brush.Dt.n3=Brush.mo.n3}static QI(){let t=.8190224*Brush.Dt.n0+.3619062*Brush.Dt.n1+-.1288737*Brush.Dt.n2,e=.03298366*Brush.Dt.n0+.9292868*Brush.Dt.n1+.03614466*Brush.Dt.n2,i=.04817719*Brush.Dt.n0+.2642395*Brush.Dt.n1+.6335478*Brush.Dt.n2;t=Math.cbrt(t),e=Math.cbrt(e),i=Math.cbrt(i),Brush.ye.n0=.2104542*t+.7936177*e+-.004072046*i,Brush.ye.n1=1.977998*t+-2.428592*e+.4505937*i,Brush.ye.n2=.02590403*t+.7827717*e+-.8086757*i,Brush.ye.n3=Brush.Dt.n3,Brush.ye.n0*=100}static _I(){Brush.ye.n0/=100;let t=.9999999*Brush.ye.n0+.3963377*Brush.ye.n1+.2158037*Brush.ye.n2,e=1.000000009*Brush.ye.n0+-.1055613*Brush.ye.n1+-.06385417*Brush.ye.n2,i=1.00000005*Brush.ye.n0+-.08948418*Brush.ye.n1+-1.291485*Brush.ye.n2;t=t**3,e=e**3,i=i**3,Brush.Dt.n0=1.2268798*t+-.5578149*e+.281391*i,Brush.Dt.n1=-.04057576*t+1.112286*e+-.07171106*i,Brush.Dt.n2=-.07637294*t+-.4214933*e+1.586924*i,Brush.Dt.n3=Brush.ye.n3}static tE(){const t=Math.atan2(Brush.ye.n2,Brush.ye.n1)*180/Math.PI;Brush.po.n0=Brush.ye.n0,Brush.po.n1=Math.sqrt(Brush.ye.n1**2+Brush.ye.n2**2),Brush.po.n2=t>=0?t:t+360,Brush.po.n3=Brush.ye.n3}static eE(){Brush.ye.n0=Brush.po.n0,Brush.ye.n1=Brush.po.n1*Math.cos(Brush.po.n2*Math.PI/180),Brush.ye.n2=Brush.po.n1*Math.sin(Brush.po.n2*Math.PI/180),Brush.ye.n3=Brush.po.n3}static WI(){Brush.ID(),Brush.QI(),Brush.tE()}static JI(){Brush.eE(),Brush._I(),Brush.ED()}static Bd(t,e){typeof t=="string"||t instanceof Brush||U.n("Value for "+e+" must be a color string or a Brush, not "+t)}static Solid=1;static Linear=2;static Radial=3;static Pattern=4;static Lab=1;static HSL=2;static gs=null;static R0=!1;static K=new ColorNumbers;static Ke=new ColorNumbers;static Dt=new ColorNumbers;static mo=new ColorNumbers;static ye=new ColorNumbers;static po=new ColorNumbers}class PanelLayout{St="Base";static es=new GMap;static In(t,e){e.name=t,PanelLayout.es.set(t,e)}get name(){return this.St}set name(t){this.St=t}constructor(){}measure(t,e,i,s,n,o,r){}measureElement(t,e,i,s,n){t.ct(e,i,s,n)}arrange(t,e,i){}arrangeElement(t,e,i,s,n,o){t.zt(e,i,s,n,o)}remeasureObject(t){t.vf()}qe(t,e,i){}}class PanelLayoutPosition extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){const l=s.length,a=t.Qo();for(let h=0;h<l;h++){const c=s[h];if(!c.visible&&c!==a)continue;const f=c.margin,u=f.right+f.left,d=f.top+f.bottom;c.ct(e,i,o,r);const m=c.measuredBounds,g=Math.max(m.width+u,0),p=Math.max(m.height+d,0);let y=c.position.x,x=c.position.y;if(isFinite(y)||(y=0),isFinite(x)||(x=0),c instanceof Shape&&c.isGeometryPositioned){const b=c.strokeWidth/2;y-=b,x-=b}n.he(y,x,g,p)}}arrange(t,e,i){const s=e.length,n=t.padding,o=i.x-n.left,r=i.y-n.top;for(let l=0;l<s;l++){const a=e[l],h=a.measuredBounds,c=a.margin,f=a.position.x,u=a.position.y;let d=isNaN(f)?-o:f-o,m=isNaN(u)?-r:u-r;if(a instanceof Shape&&a.isGeometryPositioned){const g=a.strokeWidth/2;d-=g,m-=g}a.visible&&a.zt(d+c.left,m+c.top,h.width,h.height)}}}PanelLayout.In("Position",new PanelLayoutPosition);class PanelLayoutHorizontal extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){const l=s.length,a=U.ot(),h=t.Qo();for(let f=0;f<l;f++){const u=s[f];if(!u.visible&&u!==h)continue;const d=u.sn(!1);if(d!==0&&d!==5){a.push(u);continue}u.ct(1/0,i,0,r);const m=u.margin,g=u.measuredBounds,p=Math.max(g.width+m.right+m.left,0),y=Math.max(g.height+m.top+m.bottom,0);n.$n(n.width+p,Math.max(n.height,y))}const c=a.length;t.desiredSize.height?i=Math.min(t.desiredSize.height,t.maxSize.height):n.height!==0&&(i=Math.min(n.height,t.maxSize.height));for(let f=0;f<c;f++){const u=a[f];if(!u.visible&&u!==h)continue;const d=u.margin,m=d.right+d.left,g=d.top+d.bottom;u.ct(1/0,i,0,r);const p=u.measuredBounds,y=Math.max(p.width+m,0),x=Math.max(p.height+g,0);n.width+=y,n.height=Math.max(n.height,x)}U._(a)}arrange(t,e,i){const s=e.length,n=t.padding,o=n.top,r=t.isOpposite;let l=r?i.width:n.left;for(let a=0;a<s;a++){const h=o,c=e[a];if(!c.visible)continue;const f=c.measuredBounds,u=c.margin,d=u.top+u.bottom,m=o+n.bottom;let g=f.height;const p=c.sn(!1);(isNaN(c.desiredSize.height)&&p===2||p===4)&&(g=Math.max(i.height-d-m,0));const y=g+d+m;let x=c.alignment;x.isDefault()&&(x=t.defaultAlignment),x.isSpot()||(x=Spot.Center),r&&(l-=f.width+u.left+u.right),c.zt(l+x.offsetX+u.left,h+x.offsetY+u.top+(i.height*x.y-y*x.y),f.width,g),r||(l+=f.width+u.left+u.right)}}}PanelLayout.In("Horizontal",new PanelLayoutHorizontal);class PanelLayoutVertical extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){const l=s.length,a=U.ot(),h=t.Qo();for(let f=0;f<l;f++){const u=s[f];if(!u.visible&&u!==h)continue;const d=u.sn(!1);if(d!==0&&d!==4){a.push(u);continue}u.ct(e,1/0,o,0);const m=u.margin,g=u.measuredBounds,p=Math.max(g.width+m.right+m.left,0),y=Math.max(g.height+m.top+m.bottom,0);n.$n(Math.max(n.width,p),n.height+y)}const c=a.length;t.desiredSize.width?e=Math.min(t.desiredSize.width,t.maxSize.width):n.width!==0&&(e=Math.min(n.width,t.maxSize.width));for(let f=0;f<c;f++){const u=a[f];if(!u.visible&&u!==h)continue;const d=u.margin,m=d.right+d.left,g=d.top+d.bottom;u.ct(e,1/0,o,0);const p=u.measuredBounds,y=Math.max(p.width+m,0),x=Math.max(p.height+g,0);n.width=Math.max(n.width,y),n.height+=x}U._(a)}arrange(t,e,i){const s=e.length,n=t.padding,o=n.left,r=t.isOpposite;let l=r?i.height:n.top;for(let a=0;a<s;a++){const h=o,c=e[a];if(!c.visible)continue;const f=c.measuredBounds,u=c.margin,d=u.left+u.right,m=o+n.right;let g=f.width;const p=c.sn(!1);(isNaN(c.desiredSize.width)&&p===2||p===5)&&(g=Math.max(i.width-d-m,0));const y=g+d+m;let x=c.alignment;x.isDefault()&&(x=t.defaultAlignment),x.isSpot()||(x=Spot.Center),r&&(l-=f.height+u.bottom+u.top),c.zt(h+x.offsetX+u.left+(i.width*x.x-y*x.x),l+x.offsetY+u.top,g,f.height),r||(l+=f.height+u.bottom+u.top)}}}PanelLayout.In("Vertical",new PanelLayoutVertical);class PanelLayoutSpot extends PanelLayout{constructor(){super()}static BD=!1;measure(t,e,i,s,n,o,r){const l=s.length;if(l===0)return;const a=t.findMainElement();let h=a.margin,c=0,f=0;const u=h.right+h.left,d=h.top+h.bottom;a.ct(e,i,o,r);let m=a.measuredBounds,g=m.width,p=m.height,y=Math.max(g+u,0),x=Math.max(p+d,0);const b=t.isClipping;b&&a.e0()!==0&&!PanelLayoutSpot.BD&&(PanelLayoutSpot.BD=!0,U.jt("Main Shape for Spot Panel with isClipping = true must have a zero strokeWidth: "+t.toString()));const k=Rect.O(-h.left,-h.top,y,x);let P=Rect.O(0,0,g,p);this.uN(a,P,!0),g=P.width,p=P.height;let S=!0;const T=t.Qo();let N;for(let M=0;M<l;M++){const C=s[M];let L=e,A=i;if(C===a||!C.visible&&C!==T)continue;h=C.margin;let D=h.left,F=h.top;switch(c=h.right+h.left,f=h.top+h.bottom,N=C.sn(!1),N){case 2:L=g,A=p,c=0,f=0,D=0,F=0;break;case 5:L=g,c=0,D=0;break;case 4:A=p,f=0,F=0;break}C.ct(L,A,0,0),m=C.measuredBounds,y=Math.max(m.width+c,0),x=Math.max(m.height+f,0);let v=C.alignment;v.isDefault()&&(v=t.defaultAlignment),v.isSpot()||(v=Spot.Center);let R=C.alignmentFocus;R.isDefault()&&(R=Spot.Center);let O=null;C instanceof Panel&&C.yo!==""&&(O=C.findObject(C.yo),O===C&&(O=null));let z=P.x-D,X=P.y-F;if(O!==null){C.zt(0,0,m.width,m.height);const E=O.actualBounds,Y=Point.O(E.x+(R.x*E.width-R.offsetX),E.y+(R.y*E.height-R.offsetY));for(O=O.panel;O!==null&&O!==C;)O.T.wt(Y),O=O.panel;z+=v.x*g+v.offsetX-Y.x,X+=v.y*p+v.offsetY-Y.y,Point.i(Y)}else z+=v.x*g+v.offsetX-(R.x*m.width+R.offsetX),X+=v.y*p+v.offsetY-(R.y*m.height+R.offsetY);S?(S=!1,n.e(z,X,y,x)):n.he(z,X,y,x)}switch(S?n.h(k):b?n.intersect(P.x,P.y,P.width,P.height):n.he(k.x,k.y,k.width,k.height),Rect.i(k),Rect.i(P),N=a.stretch,N===1&&(N=a.sn(!1)),N){case 0:return;case 2:if(!isFinite(e)&&!isFinite(i))return;break;case 5:if(!isFinite(e))return;break;case 4:if(!isFinite(i))return;break}m=a.measuredBounds,g=m.width,p=m.height,y=Math.max(g+u,0),x=Math.max(p+d,0),h=a.margin,P=Rect.O(-h.left,-h.top,y,x),this.uN(a,P,!0),g=P.width,p=P.height;for(let M=0;M<l;M++){const C=s[M];if(C===a||!C.visible&&C!==T)continue;h=C.margin,c=h.right+h.left,f=h.top+h.bottom,m=C.measuredBounds,y=Math.max(m.width+c,0),x=Math.max(m.height+f,0);let L=C.alignment;L.isDefault()&&(L=t.defaultAlignment),L.isSpot()||(L=Spot.Center);let A=C.alignmentFocus;A.isDefault()&&(A=Spot.Center),S?(S=!1,n.e(L.x*g+L.offsetX-(A.x*m.width+A.offsetX)-h.left,L.y*p+L.offsetY-(A.y*m.height+A.offsetY)-h.top,y,x)):n.he(L.x*g+L.offsetX-(A.x*m.width+A.offsetX)-h.left,L.y*p+L.offsetY-(A.y*m.height+A.offsetY)-h.top,y,x)}S?n.h(k):b?n.intersect(P.x,P.y,P.width,P.height):n.he(k.x,k.y,k.width,k.height),Rect.i(P)}arrange(t,e,i){const s=e.length;if(s===0)return;const n=t.findMainElement(),o=n.measuredBounds,r=o.width,l=o.height,a=t.padding,h=a.left,c=a.top;let f=h-i.x,u=c-i.y;n.zt(f,u,r,l);const d=Rect.O(0,0,r,l);this.uN(n,d,!1);for(let m=0;m<s;m++){const g=e[m];if(g===n)continue;const p=g.measuredBounds,y=p.width,x=p.height;let b=g.alignment;b.isDefault()&&(b=t.defaultAlignment),b.isSpot()||(b=Spot.Center);let k=g.alignmentFocus;k.isDefault()&&(k=Spot.Center);let P=null;if(g instanceof Panel&&g.yo!==""&&(P=g.findObject(g.yo),P===g&&(P=null)),P!==null){const S=P.actualBounds,T=Point.O(S.x+(k.x*S.width-k.offsetX),S.y+(k.y*S.height-k.offsetY));for(P=P.panel;P!==null&&P!==g;)P.T.wt(T),P=P.panel;f=b.x*d.width+b.offsetX-T.x,u=b.y*d.height+b.offsetY-T.y,Point.i(T)}else f=b.x*d.width+b.offsetX-(k.x*y+k.offsetX),u=b.y*d.height+b.offsetY-(k.y*x+k.offsetY);f+=d.x-i.x,u+=d.y-i.y,g.visible&&g.zt(h+f,c+u,y,x)}Rect.i(d)}uN(t,e,i){let s=null;if(t instanceof Panel&&t.yo!==""&&(s=t.findObject(t.yo),s===t&&(s=null)),s!==null)for(i&&t.zt(0,0,e.width,e.height),e.h(s.actualBounds),s=s.panel;s!==null&&s!==t;)s.T.pm(e),s=s.panel}}PanelLayout.In("Spot",new PanelLayoutSpot);class PanelLayoutAuto extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){const l=s.length;if(l===0)return;const a=t.findMainElement();let h=a.margin,c=e,f=i;const u=h.right+h.left,d=h.top+h.bottom;a.ct(e,i,o,r);let m=a.measuredBounds,g=0,p=null;a instanceof Shape&&(p=a,g=p.strokeWidth*p.scale);let y=Math.max(m.width+u,0),x=Math.max(m.height+d,0),b=t.dN(a);const k=b.x*y+b.offsetX,P=b.y*x+b.offsetY;let S=t.gN(a);const T=S.x*y+S.offsetX,N=S.y*x+S.offsetY;isFinite(e)&&(c=Math.max(Math.abs(k-T)-g,0)),isFinite(i)&&(f=Math.max(Math.abs(P-N)-g,0));let M=0,C=0;o>0&&(M=Math.max(Math.abs(b.x*o+b.offsetX-(S.x*o+S.offsetX))-g,0)),r>0&&(C=Math.max(Math.abs(b.y*r+b.offsetY-(S.y*r+S.offsetY))-g,0));const L=Size.l();L.e(0,0);const A=t.Qo();for(let R=0;R<l;R++){const O=s[R];if(O===a||!O.visible&&O!==A)continue;h=O.margin;const z=h.right+h.left,X=h.top+h.bottom;O.ct(c,f,M,C),m=O.measuredBounds,y=Math.max(m.width+z,0),x=Math.max(m.height+X,0),L.e(Math.max(y,L.width),Math.max(x,L.height))}if(l===1){m=a.measuredBounds,n.width=y,n.height=x,Size.i(L);return}b=t.dN(a),S=t.gN(a);let D=0,F=0;S.x!==b.x&&S.y!==b.y&&(D=L.width/Math.abs(S.x-b.x),F=L.height/Math.abs(S.y-b.y)),Size.i(L),g=0,p!==null&&(g=p.strokeWidth*p.scale,p.hM()===6&&(D=F=Math.max(D,F))),D+=Math.abs(b.offsetX)+Math.abs(S.offsetX)+g,F+=Math.abs(b.offsetY)+Math.abs(S.offsetY)+g;let v=a.stretch;switch(v===1&&(v=a.sn(!1)),v){case 0:o=0,r=0;break;case 2:isFinite(e)&&(D=e),isFinite(i)&&(F=i);break;case 5:isFinite(e)&&(D=e),r=0;break;case 4:o=0,isFinite(i)&&(F=i);break}a.vf(),a.ct(D,F,o,r),n.width=a.measuredBounds.width+u,n.height=a.measuredBounds.height+d}arrange(t,e,i){const s=e.length;if(s===0)return;const n=t.findMainElement(),o=n.measuredBounds,r=Rect.l();r.e(0,0,1,1);let l=n.margin;const a=l.left,h=l.top,c=t.padding,f=c.left,u=c.top;let d=a,m=h,g=o.width,p=o.height;n.zt(f+d,u+m,g,p);const y=t.dN(n),x=t.gN(n),b=0+y.x*o.width+y.offsetX,k=0+y.y*o.height+y.offsetY,P=0+x.x*o.width+x.offsetX,S=0+x.y*o.height+x.offsetY;r.x=b,r.y=k,r.he(P,S,0,0),r.x+=a+f,r.y+=h+u;for(let T=0;T<s;T++){const N=e[T];if(N===n)continue;const M=N.measuredBounds;l=N.margin;const C=Math.max(M.width+l.right+l.left,0),L=Math.max(M.height+l.top+l.bottom,0);let A=N.alignment;A.isDefault()&&(A=t.defaultAlignment),A.isSpot()||(A=Spot.Center),d=r.width*A.x+A.offsetX-C*A.x+l.left+r.x,m=r.height*A.y+A.offsetY-L*A.y+l.top+r.y,g=r.width,p=r.height,N.visible&&(Rect.contains(r.x,r.y,r.width,r.height,d,m,M.width,M.height)?N.zt(d,m,M.width,M.height):N.zt(d,m,M.width,M.height,new Rect(r.x,r.y,r.width,r.height)))}Rect.i(r)}}PanelLayout.In("Auto",new PanelLayoutAuto);class PanelLayoutTable extends PanelLayout{constructor(){super(),this.name="Table"}measure(t,e,i,s,n,o,r){let l=s.length;const a=U.ot(),h=U.ot();for(let K=0;K<l;K++){const I=s[K],j=I instanceof Panel?I:null;if(j!==null&&j.gl()&&I.visible){h.push(j);const Q=j.F.r,ot=Q.length;for(let et=0;et<ot;et++){const it=Q[et];j.type===Panel.TableRow?it.row=I.row:j.type===Panel.TableColumn&&(it.column=I.column),a.push(it)}}else a.push(I)}l=a.length,l===0&&(t.getRowDefinition(0),t.getColumnDefinition(0));const c=[];for(let K=0;K<l;K++){const I=a[K];I.visible&&(I.Pi(!0),I.uo(!0),c[I.row]||(c[I.row]=[]),c[I.row][I.column]||(c[I.row][I.column]=[]),c[I.row][I.column].push(I))}U._(a);const f=U.ot(),u=U.ot(),d=U.ot(),m={count:0},g={count:0};let p=e,y=i;const x=t.Bi,b=t.Vi;let k;l=x.length;for(let K=0;K<l;K++)k=x[K],k!==void 0&&(k.actual=0,k.ke=0);l=b.length;for(let K=0;K<l;K++)k=b[K],k!==void 0&&(k.actual=0,k.ke=0);let P=c.length,S=0;for(let K=0;K<P;K++)c[K]&&(S=Math.max(S,c[K].length));const T=Math.min(t.topIndex,P-1),N=Math.min(t.leftIndex,S-1);let M=0,C;P=c.length;const L=t.Qo();for(let K=0;K<P;K++){if(!c[K])continue;S=c[K].length;const I=t.getRowDefinition(K);I.actual=0,I.ke=0;for(let j=0;j<S;j++){if(!c[K][j])continue;const Q=t.getColumnDefinition(j);f[j]===void 0&&(Q.actual=0,Q.ke=0,f[j]=!0);const ot=c[K][j],et=ot.length;for(let it=0;it<et;it++){const nt=ot[it];if(!nt.visible&&nt!==L)continue;const dt=nt.rowSpan>1,ht=nt.columnSpan>1;(dt||ht)&&!(K<T)&&!(j<N)&&u.push(nt);const ct=nt.margin,rt=ct.right+ct.left,at=ct.top+ct.bottom;C=nt.a0(I,Q,!1);const ft=nt.desiredSize,_=!isNaN(ft.width),st=!isNaN(ft.height);if(C!==0&&!(_&&st)&&!(K<T)&&!(j<N)&&(!ht&&m[j]===void 0&&(C===2||C===5)&&(m[j]=-1,m.count++),!dt&&g[K]===void 0&&(C===2||C===4)&&(g[K]=-1,g.count++),!dt&&!ht&&d.push(nt)),nt.ct(1/0,1/0,0,0),K<T||j<N)continue;const ut=nt.measuredBounds,gt=Math.max(ut.width+rt,0),pt=Math.max(ut.height+at,0);if(nt.rowSpan===1&&(C===0||C===5)){k=t.getRowDefinition(K);const mt=k.computeEffectiveSpacing(),yt=k.j===0;M=Math.max(pt-k.actual,0),M+(yt?mt:0)>y&&(M=Math.max(y-mt,0)),k.ke=k.ke+M,k.actual=k.j+M,y=Math.max(y-(M+(yt?mt:0)),0)}if(nt.columnSpan===1&&(C===0||C===4)){k=t.getColumnDefinition(j);const mt=k.computeEffectiveSpacing(),yt=k.j===0;M=Math.max(gt-k.actual,0),M+(yt?mt:0)>p&&(M=Math.max(p-mt,0)),k.ke=k.ke+M,k.actual=k.j+M,p=Math.max(p-(M+(yt?mt:0)),0)}(dt||ht)&&nt.vf()}}}U._(f);let A=0,D=0;l=t.columnCount;for(let K=0;K<l;K++){const I=b[K];I!==void 0&&(A+=isNaN(I.Mi)?I.ke:I.Mi,I.ke!==0&&(A+=I.computeEffectiveSpacing()))}l=t.rowCount;for(let K=0;K<l;K++){const I=x[K];I!==void 0&&(D+=isNaN(I.Mi)?I.ke:I.Mi,I.ke!==0&&(D+=I.computeEffectiveSpacing()))}p=Math.max(e-A,0),y=Math.max(i-D,0);let F=y,v=p;l=d.length;for(let K=0;K<l;K++){const I=d[K],j=t.getRowDefinition(I.row),Q=t.getColumnDefinition(I.column),ot=I.measuredBounds,et=I.margin,it=et.right+et.left,nt=et.top+et.bottom;Q.ke===0&&m[I.column]!==void 0?m[I.column]=Math.max(ot.width+it,m[I.column]):m[I.column]=null,j.ke===0&&g[I.row]!==void 0?g[I.row]=Math.max(ot.height+nt,g[I.row]):g[I.row]=null}let R=0,O=0,z;for(z in g)z!=="count"&&(R+=g[z]);for(z in m)z!=="count"&&(O+=m[z]);const X=Size.l();for(let K=0;K<l;K++){const I=d[K];if(!I.visible&&I!==L)continue;const j=t.getRowDefinition(I.row),Q=t.getColumnDefinition(I.column);let ot=0;isFinite(Q.width)?ot=Q.width:(isFinite(p)&&m[I.column]!==null?O===0?ot=Q.actual+p:ot=m[I.column]/O*v:m[I.column]!==null?ot=p:ot=Q.actual||p,ot=Math.max(0,ot-Q.computeEffectiveSpacing()));let et=0;switch(isFinite(j.height)?et=j.height:(isFinite(y)&&g[I.row]!==null?R===0?et=j.actual+y:et=g[I.row]/R*F:g[I.row]!==null?et=y:et=j.actual||y,et=Math.max(0,et-j.computeEffectiveSpacing())),X.e(Math.max(Q.minimum,Math.min(ot,Q.maximum)),Math.max(j.minimum,Math.min(et,j.maximum))),C=I.a0(j,Q,!1),C){case 5:X.height=Math.max(X.height,j.actual+y);break;case 4:X.width=Math.max(X.width,Q.actual+p);break}const it=I.margin,nt=it.right+it.left,dt=it.top+it.bottom;I.vf();let ht=Q.minimum,ct=j.minimum;const rt=I.measuredBounds;rt.width===0&&m[I.column]!==null&&(ht=Math.max(ht,m[I.column])),rt.height===0&&g[I.row]!==null&&(ct=Math.max(ht,g[I.row])),I.ct(X.width,X.height,ht,ct);const at=I.measuredBounds;let ft=Math.max(at.width+nt,0),_=Math.max(at.height+dt,0);isFinite(p)&&(ft=Math.min(ft,X.width)),isFinite(y)&&(_=Math.min(_,X.height));let st=0;st=j.actual,j.actual=Math.max(j.actual,_),j.ke=Math.max(j.ke,_),M=j.actual-st,y=Math.max(y-M,0),g[I.row]===null&&(F=Math.max(F-M,0)),st=Q.actual,Q.actual=Math.max(Q.actual,ft),Q.ke=Math.max(Q.ke,ft),M=Q.actual-st,p=Math.max(p-M,0),m[I.column]===null&&(v=Math.max(v-M,0))}U._(d);const E=Size.l(),Y=U.ot(),V=U.ot();if(l=u.length,l!==0)for(let K=0;K<P;K++){if(!c[K])continue;S=c[K].length;const I=t.getRowDefinition(K);Y[K]=I.actual;for(let j=0;j<S;j++){if(!c[K][j])continue;const Q=t.getColumnDefinition(j);V[j]=Q.actual}}for(let K=0;K<l;K++){const I=u[K];if(!I.visible&&I!==L)continue;const j=t.getRowDefinition(I.row),Q=t.getColumnDefinition(I.column);switch(X.e(Math.max(Q.minimum,Math.min(e,Q.maximum)),Math.max(j.minimum,Math.min(i,j.maximum))),C=I.a0(j,Q,!1),C){case 2:V[Q.index]!==0&&(X.width=Math.min(X.width,V[Q.index])),Y[j.index]!==0&&(X.height=Math.min(X.height,Y[j.index]));break;case 5:V[Q.index]!==0&&(X.width=Math.min(X.width,V[Q.index]));break;case 4:Y[j.index]!==0&&(X.height=Math.min(X.height,Y[j.index]));break}if(C===2||C===4){let _=0;for(let st=0;st<t.rowCount;st++){if(st>=I.row&&st<I.row+I.rowSpan)continue;const lt=t.Bi[st];lt!==void 0&&(_+=Y[st]||0,lt.ke!==0&&(_+=lt.computeEffectiveSpacing()))}X.height=Math.max(X.height-_,0)}if(C===2||C===5){let _=0;for(let st=0;st<t.columnCount;st++){if(st>=I.column&&st<I.column+I.columnSpan)continue;const lt=t.Vi[st];lt!==void 0&&(_+=V[st]||0,lt.ke!==0&&(_+=lt.computeEffectiveSpacing()))}X.width=Math.max(X.width-_,0)}isFinite(Q.width)&&(X.width=Q.width),isFinite(j.height)&&(X.height=j.height),E.e(0,0);let ot=Q.minimum,et=j.minimum;for(let _=1;_<I.rowSpan&&!(I.row+_>=t.rowCount);_++){if(k=t.getRowDefinition(I.row+_),M=0,C===2||C===4){if(k.j===0)continue;M=Math.max(k.minimum,k.j===0?k.maximum:Math.min(k.j,k.maximum))}else M=Math.max(k.minimum,isNaN(k.Mi)?k.maximum:Math.min(k.Mi,k.maximum));E.height+=M,et+=k.minimum}for(let _=1;_<I.columnSpan&&!(I.column+_>=t.columnCount);_++){if(k=t.getColumnDefinition(I.column+_),M=0,C===2||C===5){if(k.j===0)continue;M=Math.max(k.minimum,k.j===0?k.maximum:Math.min(k.j,k.maximum))}else M=Math.max(k.minimum,isNaN(k.Mi)?k.maximum:Math.min(k.Mi,k.maximum));E.width+=M,ot+=k.minimum}X.width+=E.width,X.height+=E.height;const it=I.margin,nt=it.right+it.left,dt=it.top+it.bottom;I.ct(X.width,X.height,ot,et);const ht=I.measuredBounds,ct=Math.max(ht.width+nt,0),rt=Math.max(ht.height+dt,0);let at=0;for(let _=0;_<I.rowSpan&&!(I.row+_>=t.rowCount);_++)k=t.getRowDefinition(I.row+_),at+=k.total||0;if(at<rt){let _=rt-at;const st=rt-at;if(I.spanAllocation!==null){const lt=I.spanAllocation;for(let ut=0;ut<I.rowSpan&&!(_<=0||I.row+ut>=t.rowCount);ut++){k=t.getRowDefinition(I.row+ut);const gt=k.j||0,pt=lt(I,k,st);k.actual=Math.min(k.maximum,gt+pt),k.j!==gt&&(_-=k.j-gt)}}for(;_>0&&k!==void 0;){const lt=k.j||0;if(isNaN(k.height)&&k.maximum>lt&&(k.actual=Math.min(k.maximum,lt+_),k.j!==lt&&(_-=k.j-lt)),k.index===0)break;k=t.getRowDefinition(k.index-1)}}let ft=0;for(let _=0;_<I.columnSpan&&!(I.column+_>=t.columnCount);_++)k=t.getColumnDefinition(I.column+_),ft+=k.total||0;if(ft<ct){let _=ct-ft;const st=ct-ft;if(I.spanAllocation!==null){const lt=I.spanAllocation;for(let ut=0;ut<I.columnSpan&&!(_<=0||I.column+ut>=t.columnCount);ut++){k=t.getColumnDefinition(I.column+ut);const gt=k.j||0,pt=lt(I,k,st);k.actual=Math.min(k.maximum,gt+pt),k.j!==gt&&(_-=k.j-gt)}}for(;_>0&&k!==void 0;){const lt=k.j||0;if(isNaN(k.width)&&k.maximum>lt&&(k.actual=Math.min(k.maximum,lt+_),k.j!==lt&&(_-=k.j-lt)),k.index===0)break;k=t.getColumnDefinition(k.index-1)}}}U._(u),Size.i(E),Size.i(X),Y!==void 0&&U._(Y),V!==void 0&&U._(V);let H=0,q=0;const W=t.desiredSize,Z=t.maxSize;C=t.sn(!0),A=0,D=0;let B=0,$=0;l=t.columnCount;for(let K=0;K<l;K++)if(b[K]!==void 0){if(k=t.getColumnDefinition(K),isFinite(k.width)){B+=k.width,B+=k.computeEffectiveSpacing();continue}else if(k.rk()===2){B+=k.j,B+=k.computeEffectiveSpacing();continue}k.j!==0&&(A+=k.j,A+=k.computeEffectiveSpacing())}isFinite(W.width)?H=Math.min(W.width,Z.width):C!==0&&isFinite(e)?H=e:H=A,H=Math.max(H,isFinite(e)?Math.min(o,e):o),H=Math.max(H-B,0);const J=A===0?1:Math.max(H/A,1);for(let K=0;K<l;K++)b[K]!==void 0&&(k=t.getColumnDefinition(K),!isFinite(k.width)&&k.rk()!==2&&(k.actual=k.j*J),k.position=n.width,k.j!==0&&(n.width+=k.j,n.width+=k.computeEffectiveSpacing()));l=t.rowCount;for(let K=0;K<l;K++)if(x[K]!==void 0){if(k=t.getRowDefinition(K),isFinite(k.height)){$+=k.height,$+=k.computeEffectiveSpacing();continue}else if(k.rk()===2){$+=k.j,$+=k.computeEffectiveSpacing();continue}k.j!==0&&(D+=k.j,D+=k.computeEffectiveSpacing())}isFinite(W.height)?q=Math.min(W.height,Z.height):C!==0&&isFinite(i)?q=i:q=D,q=Math.max(q,isFinite(i)?Math.min(r,i):r),q=Math.max(q-$,0);const tt=D===0?1:Math.max(q/D,1);for(let K=0;K<l;K++)x[K]!==void 0&&(k=t.getRowDefinition(K),!isFinite(k.height)&&k.rk()!==2&&(k.actual=k.j*tt),k.position=n.height,k.j!==0&&(n.height+=k.j,n.height+=k.computeEffectiveSpacing()));l=h.length;for(let K=0;K<l;K++){const I=h[K];let j=0,Q=0;I.type===Panel.TableRow?(j=n.width,k=t.getRowDefinition(I.row),Q=k.actual):(k=t.getColumnDefinition(I.column),j=k.actual,Q=n.height),I.measuredBounds.e(0,0,j,Q),I.Pi(!1)}U._(h),t.Ea=c}arrange(t,e,i){const s=e.length,n=t.padding,o=n.left,r=n.top,l=t.Ea;if(l===null)return;let a=0,h=0;const c=l.length;let f=0;for(let N=0;N<c;N++)l[N]&&(f=Math.max(f,l[N].length));const u=t.Bi,d=t.Vi;let m=0,g=0,p=Math.min(t.topIndex,c-1);if(u.length>0){for(;p!==c&&(u[p]===void 0||u[p].j===0);)p++;p=Math.max(Math.min(p,c-1),0),m=-u[p].position}let y=Math.min(t.leftIndex,f-1);if(d.length>0){for(;y!==f&&(d[y]===void 0||d[y].j===0);)y++;y=Math.max(Math.min(y,f-1),0),g=-d[y].position}let x=0,b=0;for(;x!==c&&u[x]===void 0;)x++;for(;b!==c&&d[b]===void 0;)b++;const k=t.part;let P=t.getRowDefinition(x),S=t.getColumnDefinition(b);for(let N=0;N<e.length;N++){const M=e[N];if(!(M instanceof Panel&&M.visible&&M.gl()))continue;M.type===Panel.TableRow?(P=t.getRowDefinition(M.row),S=t.getColumnDefinition(b)):(P=t.getRowDefinition(x),S=t.getColumnDefinition(M.column)),h=P.position+m+r,P.j!==0&&(h+=P.computeEffectiveSpacingTop(Math.max(x,p))),a=S.position+g+o,S.j!==0&&(a+=S.computeEffectiveSpacingTop(Math.max(b,y)));const C=M.measuredBounds;M.Lf(),M.actualBounds._t();const L=M.actualBounds,A=Rect.O(L.x,L.y,L.width,L.height);if(L.x=M.type===Panel.TableRow?o:a,L.y=M.type===Panel.TableColumn?r:h,L.width=C.width,L.height=C.height,M.actualBounds.b(),M.uo(!1),A.equalsApproxClose(L)){Rect.i(A);continue}k!==null&&(k.Fa(),M.s0(k)),Rect.i(A)}const T=Size.l();for(let N=0;N<c;N++){if(!l[N])continue;f=l[N].length;const M=t.getRowDefinition(N);h=M.position+m+r,M.j!==0&&(h+=M.computeEffectiveSpacingTop(Math.max(x,p)));for(let C=0;C<f;C++){if(!l[N][C])continue;const L=t.getColumnDefinition(C);a=L.position+g+o,L.j!==0&&(a+=L.computeEffectiveSpacingTop(Math.max(b,y)));const A=l[N][C],D=A.length;for(let F=0;F<D;F++){const v=A[F],R=v.measuredBounds;T.e(0,0);for(let rt=1;rt<v.rowSpan&&!(N+rt>=t.rowCount);rt++){const at=t.getRowDefinition(N+rt);at.j!==0&&(T.height+=at.total)}for(let rt=1;rt<v.columnSpan&&!(C+rt>=t.columnCount);rt++){const at=t.getColumnDefinition(C+rt);at.j!==0&&(T.width+=at.total)}const O=L.j+T.width,z=M.j+T.height;let X=a,E=h;const Y=O,V=z,H=a,q=h;let W=O,Z=z;a+O>i.width&&(W=Math.max(i.width-a,0)),h+z>i.height&&(Z=Math.max(i.height-h,0));let B=v.alignment,$=0,J=0,tt=0,K=0;if(B.isDefault()){B=t.defaultAlignment,B.isSpot()||(B=Spot.Center),$=B.x,J=B.y,tt=B.offsetX,K=B.offsetY;const rt=L.alignment,at=M.alignment;rt.isSpot()&&($=rt.x,tt=rt.offsetX),at.isSpot()&&(J=at.y,K=at.offsetY)}else $=B.x,J=B.y,tt=B.offsetX,K=B.offsetY;(isNaN($)||isNaN(J))&&($=.5,J=.5,tt=0,K=0);let I=R.width,j=R.height;const Q=v.margin,ot=Q.left+Q.right,et=Q.top+Q.bottom,it=v.a0(M,L,!1);isNaN(v.desiredSize.width)&&(it===2||it===5)&&(I=Math.max(O-ot,0)),isNaN(v.desiredSize.height)&&(it===2||it===4)&&(j=Math.max(z-et,0));const nt=v.maxSize,dt=v.minSize;I=Math.min(nt.width,I),j=Math.min(nt.height,j),I=Math.max(dt.width,I),j=Math.max(dt.height,j);const ht=I+ot,ct=j+et;X+=Y*$-ht*$+tt+Q.left,E+=V*J-ct*J+K+Q.top,v.visible&&(Rect.contains(H,q,W,Z,X,E,R.width,R.height)?v.zt(X,E,I,j):v.zt(X,E,I,j,new Rect(H,q,W,Z)))}}}Size.i(T);for(let N=0;N<s;N++){const M=e[N],C=M instanceof Panel?M:null;if(C!==null&&C.gl()){const L=M.actualBounds;M.naturalBounds._t(),M.naturalBounds.e(0,0,L.width,L.height),M.naturalBounds.b()}}}}PanelLayout.In("Table",new PanelLayoutTable);class PanelLayoutTableRow extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){}arrange(t,e,i){}}PanelLayout.In("TableRow",new PanelLayoutTableRow);class PanelLayoutTableColumn extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){}arrange(t,e,i){}}PanelLayout.In("TableColumn",new PanelLayoutTableColumn);class PanelLayoutViewbox extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){s.length!==1&&U.n("Viewbox Panel must contain exactly one GraphObject.");const a=s[0];a.it=1,a.vf(),a.ct(1/0,1/0,o,r);let h=a.measuredBounds;const c=a.margin,f=c.right+c.left,u=c.top+c.bottom;if(isFinite(e)||isFinite(i)){const d=a.scale,m=h.width,g=h.height,p=Math.max(e-f,0),y=Math.max(i-u,0);let x=1;t.viewboxStretch===6?(m!==0&&g!==0&&(x=Math.min(p/m,y/g)),x===0&&(x=1e-4),a.it*=x):(m!==0&&g!==0&&(x=Math.max(p/m,y/g)),x===0&&(x=1e-4),a.it*=x),d!==a.scale&&(a.Pi(!0),a.ct(1/0,1/0,o,r))}h=a.measuredBounds,n.width=isFinite(e)?e:Math.max(h.width+f,0),n.height=isFinite(i)?i:Math.max(h.height+u,0)}arrange(t,e,i){const s=e[0],n=s.measuredBounds,o=s.margin,r=o.right+o.left,l=o.top+o.bottom,a=Math.max(n.width+r,0),h=Math.max(n.height+l,0);let c=s.alignment;c.isDefault()&&(c=t.defaultAlignment),c.isSpot()||(c=Spot.Center),s.zt(i.width*c.x-a*c.x+c.offsetX,i.height*c.y-h*c.y+c.offsetY,n.width,n.height)}}PanelLayout.In("Viewbox",new PanelLayoutViewbox);class PanelLayoutGrid extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){t.Te===null&&(t.Te=new GridPanelSettings),this.iE(t),this.sE(t)}arrange(t,e,i){}qe(t,e,i){const s=t.naturalBounds;e.save(),e.beginPath(),e.rect(0,0,s.width,s.height),e.clip(),e.endPath(),this.nE(t,e,i),e.restore(),e.clearContextCache(!1)}nE(t,e,i){let s=t.getDocumentScale()*i.scale;s<=0&&(s=1);const n=t.gridCellSize,o=n.width,r=n.height,l=t.naturalBounds,a=t.actualBounds,h=l.width,c=l.height,f=Math.ceil(h/o),u=Math.ceil(c/r),d=t.gridOrigin,m=d.x,g=d.y,p=t.Te.O0,y=t.F.r,x=y.length;for(let b=0;b<x;b++){const k=y[b];if(!k.visible)continue;const P=k.interval||1,S=Math.abs(P);if(o*S*s<2)continue;let T=k.segmentIndex;(!isFinite(T)||isNaN(T))&&(T=0),T<0&&(T=S-Math.min(-T,S)),T=Math.round(T%S);const N=k.opacity;let M=1;if(N!==1){if(N===0)continue;M=e.globalAlpha,e.globalAlpha=M*N}const C=p[b];let L=!1;const A=k.strokeDashArray;if(A!==null&&(L=!0,e.enableDash(A,k.strokeDashOffset)),k.stroke!==null&&k.strokeWidth>0&&(k.figure==="LineV"||k.figure==="LineH")){if(e.lineWidth=k.strokeWidth,t.Nn(e,k.stroke,!1,!1,l,a),e.beginPath(),k.figure==="LineV"){const D=Math.floor((m-o)/o);for(let F=D;F<=D+f;F++){const v=F*o+m;0<=v&&v<=h&&this.lk(F,P,T,C)&&(e.moveTo(v,0),e.lineTo(v,c))}}else if(k.figure==="LineH"){const D=Math.floor((g-r)/r);for(let F=D;F<=D+u;F++){const v=F*r+g;0<=v&&v<=c&&this.lk(F,P,T,C)&&(e.moveTo(0,v),e.lineTo(h,v))}}e.stroke(),e.endPath()}else if(k.fill!==null){if(t.Nn(e,k.fill,!0,!1,l,a),k.figure==="BarV"){let D=k.width;isNaN(D)&&(D=o);const F=Math.floor((m-o)/o);for(let v=F;v<=F+f;v++){const R=v*o+m;0<=R+D&&R<=h&&this.lk(v,P,T,C)&&e.fillRect(R,0,D,c)}}else if(k.figure==="BarH"){let D=k.height;isNaN(D)&&(D=r);const F=Math.floor((g-r)/r);for(let v=F;v<=F+u;v++){const R=v*r+g;0<=R+D&&R<=c&&this.lk(v,P,T,C)&&e.fillRect(0,R,h,D)}}}L&&e.disableDash(),N!==1&&(e.globalAlpha=M)}}lk(t,e,i,s){if(e<0)return t%e===i;if(t%e!==i)return!1;const n=s.length;for(let o=0;o<n;o++){const r=s[o];if(t%r===i)return!1}return!0}sE(t){const e=[],i=t.F.r,s=i.length;for(let n=0;n<s;n++){const o=i[n],r=[];if(e.push(r),!o.visible)continue;const l=o.interval;if(l<0)continue;const a=o.figure,h=this.mN(a);for(let c=0;c<s;c++){if(c===n)continue;const f=i[c];if(!f.visible)continue;const u=f.figure;if(this.mN(u)!==h)continue;const d=f.interval;d>l&&r.push(d)}}t.Te.O0=e}mN(t){return t==="LineV"||t==="BarV"}iE(t){let e=1,i=1;const s=t.F.r,n=s.length;for(let l=0;l<n;l++){const a=s[l],h=Math.abs(a.interval);h<2||(this.mN(a.figure)?i=i*h/G.xL(i,h):e=e*h/G.xL(e,h))}const o=t.gridCellSize,r=t.Te;r.bf.isReal()?r.bf.e(i*o.width,e*o.height):r.bf=new Size(i*o.width,e*o.height)}}PanelLayout.In("Grid",new PanelLayoutGrid);class PanelLayoutLink extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){const l=s.length;if(!(t instanceof Adornment||t instanceof Link))return;let a=null,h=null;if(t instanceof Link&&(a=t),t instanceof Adornment&&(h=t,a=h.adornedPart,t.Vf===null&&(t.Vf=[])),!(a instanceof Link))return;const c=a;if(l===0){t.naturalBounds.$n(0,0),t.measuredBounds.e(0,0,0,0);return}const f=t instanceof Adornment?null:a.path,u=a.routeBounds,d=t._o;d.e(0,0,u.width,u.height);const m=c.points,g=a.pointsCount;h!==null?h.pN():a!==null&&a.pN();const p=u.width,y=u.height,x=t.Vf;if(x.length=0,f!==null){this.measureLinkPath(t,p,y,f);const S=f.measuredBounds;d.unionRect(S),x.push(S)}const b=Transform.l(),k=Point.l(),P=Point.l();for(let S=0;S<l;S++){const T=s[S];if(T===f)continue;let N=T.measuredBounds;if(T.isPanelMain&&T instanceof Shape){this.measureLinkPath(t,p,y,T),N=T.measuredBounds,d.unionRect(N),x.push(N);continue}if(g<2){T.ct(1/0,1/0,0,0),N=T.measuredBounds,d.unionRect(N),x.push(N);continue}const M=T.segmentIndex,C=T.segmentFraction;let L=T.alignmentFocus;L.isNoSpot()&&(L=Spot.Center);const A=T.segmentOrientation,D=T.segmentOffset;let F=0,v=0,R=0,O=0;if(isNaN(M)){const B=c.dt,$=U.ot();B.getPointAndAngleAlongPath(C,$);const J=Point.O($[0],$[1]);O=$[2],A!==0&&(R=c.computeAngle(T,A,O),T.Yt=R,T.Pi(!0),T.uo(!0)),F=J.x,v=J.y,Point.i(J),U._($)}else if(M<-g||M>=g){const B=Point.l();c.yN(B),O=c.midAngle,A!==0&&(R=c.computeAngle(T,A,O),T.Yt=R,T.Pi(!0),T.uo(!0)),F=B.x-u.x,v=B.y-u.y,Point.i(B)}else{let B,$,J=0;if(M>=0?(B=m.elt(M),$=M<g-1?m.elt(M+1):B):(J=g+M,B=m.elt(J),$=J>0?m.elt(J-1):B),B.equalsApprox($)){let tt,K;M>=0?(tt=M>0?m.elt(M-1):B,K=M<g-2?m.elt(M+2):$):(tt=J<g-1?m.elt(J+1):B,K=J>1?m.elt(J-2):$);const I=tt.distanceSquaredPoint(B),j=$.distanceSquaredPoint(K);I>j+10?O=M>=0?tt.directionPoint(B):B.directionPoint(tt):j>I+10?O=M>=0?$.directionPoint(K):K.directionPoint($):O=M>=0?tt.directionPoint(K):K.directionPoint(tt)}else O=M>=0?B.directionPoint($):$.directionPoint(B);A!==0&&(R=c.computeAngle(T,A,O),T.Yt=R,T.Pi(!0),T.uo(!0)),F=B.x+($.x-B.x)*C-u.x,v=B.y+($.y-B.y)*C-u.y}T.ct(1/0,1/0,0,0),N=T.measuredBounds;const z=T.naturalBounds;let X=0;T instanceof Shape&&(X=T.strokeWidth);const E=z.width+X,Y=z.height+X;b.Xe(),b.js(-N.x,-N.y),b.it(T.scale,T.scale),b.Ps(A===0?T.angle:O,E/2,Y/2),(A===22||A===26)&&b.Ps(90,E/2,Y/2),(A===23||A===27)&&b.Ps(-90,E/2,Y/2),A===28&&(O>45&&O<135||O>225&&O<315)&&b.Ps(-O,E/2,Y/2);const V=new Rect(0,0,E,Y);k.setRectSpot(V,L),b.wt(k);const H=-k.x+X/2*T.scale,q=-k.y+X/2*T.scale;P.h(D);const W=isNaN(D.x),Z=isNaN(D.y);if(W||Z){const B=E/2+Link.ak,$=Y/2+Link.ak,J=O>=45&&O<=135,tt=O>=225&&O<=315;A===0&&(J||tt)?(P.x=Z?B:D.y,P.y=W?$:D.x,J?M>=0||isNaN(M)&&C<.5||W&&(P.y=-$):tt&&((M>=0||isNaN(M)&&C<.5)&&W&&(P.y=-$),Z&&(P.x=-B))):(W&&(M>=0||isNaN(M)&&C<.5?P.x=B:P.x=-B),Z&&(P.y=-$),P.rotate(O))}else P.rotate(O);F+=P.x,v+=P.y,V.e(F+H,v+q,N.width,N.height),x.push(V),d.unionRect(V)}if(a!==null){const S=a.labelNodes;for(;S.next();)S.value.ct(1/0,1/0)}t._o=d,t.position.e(u.x+d.x,u.y+d.y),n.$n(d.width||0,d.height||0),Transform.i(b),Point.i(k),Point.i(P)}arrange(t,e,i){const s=e.length;if(!(t instanceof Adornment||t instanceof Link))return;let n=t,o=null;t instanceof Adornment&&(o=t,n=o.adornedPart);const r=t,l=t instanceof Adornment?null:n.path,a=t.Vf;if(a.length!==0){let u=0;if(l!==null&&u<a.length){const d=a[u];u++,l.zt(d.x-r._o.x,d.y-r._o.y,d.width,d.height)}for(let d=0;d<s;d++){const m=e[d];if(m!==l&&u<a.length){const g=a[u];u++,m.zt(g.x-r._o.x,g.y-r._o.y,g.width,g.height)}}}const h=n.points,c=h.count;if(c>=2&&r instanceof Link){const u=r.labelNodes;for(;u.next();){const d=u.value;r.oE(d,c,h)}}const f=t.VD(Point.l());t.location.e(t.position.x+f.x,t.position.y+f.y),Point.i(f)}measureLinkPath(t,e,i,s){if(s.Ko()===!1)return;let n=s.strokeWidth;if(n===0&&t instanceof Adornment&&t.type===Panel.Link&&t.adornedObject instanceof Shape&&(n=t.adornedObject.strokeWidth),n=n*s.it,t instanceof Link&&t.dt!==null){const o=t.geometry.bounds;s.fo(o.x-n/2,o.y-n/2,o.width+n,o.height+n)}else if(t instanceof Adornment&&t.adornedPart.dt!==null){const o=t.adornedPart.dt.bounds;s.fo(o.x-n/2,o.y-n/2,o.width+n,o.height+n)}else s.fo(-(n/2),-(n/2),e+n,i+n);s.rE(),s.Pi(!1)}}PanelLayout.In("Link",new PanelLayoutLink);class PanelLayoutGraduated extends PanelLayout{constructor(){super()}measure(t,e,i,s,n,o,r){const l=t.findMainElement();if(!(l instanceof Shape))return;t.ss=[];const a=l.margin,h=a.right+a.left,c=a.top+a.bottom;l.ct(e,i,o,r);const f=l.measuredBounds,u=f.width,d=f.height,m=Math.max(u+h,0),g=Math.max(d+c,0),p=new Rect(-a.left,-a.top,m,g);t.ss.push(p),n.h(p),this.determineGraduatedMarks(t,l);const y=t.Es;if(y===null)return;const x=s.length;for(let b=0;b<x;b++){const k=s[b],P=y[b];!k.visible||k===l||P.length===0||(k instanceof Shape?this.measureGraduatedTicks(t,k,P,n):k instanceof TextBlock&&this.measureGraduatedLabels(t,k,P,n),k.Pi(!1))}}arrange(t,e,i){if(t.ss===null)return;const s=t.findMainElement(),n=t.Es;if(n===null)return;const o=t.ss;let r=0,l=o[r];r++,s!==null&&s.zt(l.x-i.x,l.y-i.y,l.width,l.height);const a=e.length;for(let h=0;h<a;h++){const c=e[h],f=n[h];!c.visible||c===s||f.length===0||(l=o[r],r++,c.zt(l.x-i.x,l.y-i.y,l.width,l.height))}t.ss=null}measureGraduatedTicks(t,e,i,s){let n=e.alignmentFocus;n.isNoSpot()&&(n=Spot.TopCenter);const o=e.angle;e.Yt=0,e.ct(1/0,1/0,0,0),e.Yt=o;const r=e.measuredBounds,l=r.width,a=r.height,h=Rect.O(0,0,l,a),c=Point.l();c.setRectSpot(h,n),Rect.i(h);const f=-c.x,u=-c.y,d=new Rect,m=i.length;for(let g=0;g<m;g++){const p=i[g],y=p.pt.x,x=p.pt.y,b=p.angle;for(let k=0;k<4;k++){switch(k){case 0:c.e(f,u);break;case 1:c.e(f+l,u);break;case 2:c.e(f,u+a);break;case 3:c.e(f+l,u+a);break}c.rotate(b+e.angle),c.offset(y,x),g===0&&k===0?d.e(c.x,c.y,0,0):d.unionPoint(c),c.offset(-y,-x),c.rotate(-b-e.angle)}}Point.i(c),t.ss!==null&&t.ss.push(d),s.he(d.x,d.y,d.width,d.height)}measureGraduatedLabels(t,e,i,s){t.Ii===null&&(t.Ii=new TextBlock);const n=t.Ii;this.zD(e,n);let o=e.alignmentFocus;o.isNoSpot()&&(o=Spot.TopCenter);const r=e.segmentOrientation,l=e.segmentOffset,a=new Rect;let h=0,c=0,f=0,u=0,d=0;const m=i.length;for(let g=0;g<m;g++){const p=i[g];h=p.pt.x,c=p.pt.y,f=p.angle,u=e.angle,d=e.angle,r!==0&&(r===21||r===25?d=f+e.angle:d=f,u=Link.computeAngle(r,d)),n.Yt=u,n.text=p.text||"",n.ct(1/0,1/0,0,0);const y=n.measuredBounds,x=n.naturalBounds,b=x.width,k=x.height,P=Transform.l();P.Xe(),P.js(-y.x,-y.y),P.it(n.scale,n.scale),P.Ps(d,b/2,k/2),(r===22||r===26)&&P.Ps(90,b/2,k/2),(r===23||r===27)&&P.Ps(-90,b/2,k/2),r===28&&(f>45&&f<135||f>225&&f<315)&&P.Ps(-f,b/2,k/2);const S=Rect.O(0,0,b,k),T=Point.l();T.setRectSpot(S,o),P.wt(T);const N=-T.x,M=-T.y,C=Point.l();C.h(l),isNaN(C.x)&&(C.x=b/2+3),isNaN(C.y)&&(C.y=-(k/2+3)),C.rotate(f),h+=C.x+N,c+=C.y+M;const L=new Rect(h,c,y.width,y.height),A=new Rect(y.x,y.y,y.width,y.height),D=new Rect(x.x,x.y,x.width,x.height);p.labelAngle=u,p.lineCount=n.lineCount,p.lines=n.getMetrics(),p.actualBounds=L,p.measuredBounds=A,p.naturalBounds=D,g===0?a.h(L):a.unionRect(L),Point.i(C),Point.i(T),Rect.i(S),Transform.i(P)}t.ss!==null&&t.ss.push(a),s.he(a.x,a.y,a.width,a.height)}determineGraduatedMarks(t,e){const i=e.geometry,s=e.strokeWidth,n=i.flattenedSegments,o=i.flattenedLengths,r=i.flattenedTotalLength,l=n.length;let a=0,h=0;const c=U.ot();for(let x=0;x<l;x++){const b=n[x],k=[];a=0,h=0;const P=b.length;for(let S=0;S<P;S+=2){const T=b[S],N=b[S+1];if(S===0){a=T,h=N;continue}let M=Math.atan2(N-h,T-a)*180/Math.PI;M<0&&(M+=360),k.push(M),a=T,h=N}c.push(k)}const f=this.lE(t),u=t.F.r,d=u.length;let m=0,g=0,p=r;t.Es=[];let y;for(let x=0;x<d;x++){const b=u[x];if(y=[],!b.visible||b===e){t.Es.push(y);continue}const k=Math.abs(b.interval),P=t.graduatedTickUnit;if(P*k*r/t.graduatedRange<2&&b.graduatedSkip===null){t.Es.push(y);continue}let S=o[0][0],T=0,N=0;g=r*b.graduatedStart-1e-4,p=r*b.graduatedEnd+1e-4;const M=P*k;let C=t.graduatedTickBase;if(C<t.graduatedMin){let F=(t.graduatedMin-C)/M;F=F%1===0?F:Math.floor(F+1),C+=F*M}else if(C>t.graduatedMin+M){const F=Math.floor((C-t.graduatedMin)/M);C-=F*M}const L=f[x],A=C,D=t.graduatedMax*1e-6;for(let F=1;C<=t.graduatedMax+D;F++){if(this.aE(t,C-t.graduatedTickBase,L)&&(C>t.graduatedMax&&(C=t.graduatedMax),(b.graduatedSkip===null||b instanceof TextBlock&&!b.graduatedSkip(C,b)||b instanceof Shape&&!b.graduatedSkip(C,b))&&(m=(C-t.graduatedMin)*r/t.graduatedRange,m>r&&(m=r),g<=m&&m<=p))){let v=c[T][N],R=o[T][N];for(;T<o.length;){for(;m>S&&N<o[T].length-1;)N++,v=c[T][N],R=o[T][N],S+=R;if(m<=S)break;T++,N=0,v=c[T][N],R=o[T][N],S+=R}const O=n[T],z=O[N*2],X=O[N*2+1],E=O[N*2+2],Y=O[N*2+3],V=(m-(S-R))/R,H=new Point(z+(E-z)*V+s/2-i.bounds.x,X+(Y-X)*V+s/2-i.bounds.y);if(H.scale(e.scale,e.scale),v=this.hE(v,V,O,c[T],N),b instanceof TextBlock){let q="";b.graduatedFunction!==null?(q=b.graduatedFunction(C,b),q=q!=null?q.toString():""):q=(+C.toFixed(2)).toString(),q!==""&&y.push({pt:H,angle:v,text:q})}else y.push({pt:H,angle:v})}C=A+F*M}t.Es.push(y)}U._(c)}hE(t,e,i,s,n){if(e<.5005&&e>.4995)return t;let o=t;if(e<.5?n>0?o=s[n-1]:G.G(i[0],i[i.length-2])&&G.G(i[1],i[i.length-1])&&(o=s[s.length-1]):e>.5&&(n+1<s.length?o=s[n+1]:G.G(i[0],i[i.length-2])&&G.G(i[1],i[i.length-1])&&(o=s[0])),t!==o){let r=Math.abs(t-o);if(r>180&&(t<o?t+=360:o+=360,r=Math.abs(t-o)),e<5e-4||e>.9995)return(t+o)/2%360;if(r<10){const l=1-Math.abs(.5-e);return(t*l+o*(1-l))%360}}return t}lE(t){if(t.ms===null){const e=[],i=t.F.r,s=i.length;for(let n=0;n<s;n++){const o=i[n],r=[];if(e.push(r),!o.visible)continue;const l=o.interval;if(!(l<0))for(let a=0;a<s;a++){if(a===n)continue;const h=i[a];if(!h.visible||o.constructor!==h.constructor)continue;const c=h.interval;c>l&&r.push(c)}}t.ms=e}return t.ms}aE(t,e,i){const s=i.length;for(let n=0;n<s;n++){const o=i[n]*t.graduatedTickUnit,r=e%o,l=t.graduatedTickUnit*1e-6;if(r<l&&r>-l)return!1}return!0}qe(t,e,i){const s=i.Ch;i.Ch=!0;const n=t.naturalBounds,o=n.width,r=n.height,l=e instanceof SVGContext;e.save(),e.beginPath(),e.rect(-1,-1,o+1,r+1),e.clip(),e.endPath();const a=t.findMainElement();a.qe(e,i);let h=t.getDocumentScale()*i.scale;h<=0&&(h=1);const c=a.actualBounds,f=t.F.r,u=t.Es,d=f.length;for(let m=0;m<d;m++){const g=f[m],p=u[m],y=p.length;if(!(!g.visible||g===a||p.length===0)){if(g instanceof Shape){if(t.graduatedTickUnit*g.interval*a.geometry.flattenedTotalLength/t.graduatedRange*h<2&&g.graduatedSkip===null)continue;const x=g.measuredBounds,b=g.strokeWidth*g.scale;let k=g.alignmentFocus;k.isNoSpot()&&(k=Spot.TopCenter);for(let P=0;P<y;P++){const S=p[P].pt,T=p[P].angle;this.cE(g,S,c,T,x,b,k),g.qe(e,i),l&&(t.svg.appendChild(g.svg),g.svg=null),g.fl.Xe()}}else if(g instanceof TextBlock){t.Ii===null&&(t.Ii=new TextBlock);const x=t.Ii;this.zD(g,x),x.wN=!0;for(let b=0;b<y;b++){const k=p[b];if(k.actualBounds&&k.measuredBounds&&k.naturalBounds){x.fE(k);const P=k.actualBounds;x.zt(P.x,P.y,P.width,P.height),this.uE(x,c,P,k.measuredBounds,k.naturalBounds),x.dl=g.part,x.en=g.panel,x.qe(e,i),x.en=null,x.dl=null,l&&(t.svg.appendChild(x.svg),x.svg=null)}}}}}i.Ch=s,e.restore(),e.clearContextCache(!0)}cE(t,e,i,s,n,o,r){const l=t.fl;l.Xe(),l.js(e.x+i.x,e.y+i.y),l.Ps(s+t.angle,0,0),l.js(-n.width*r.x+r.offsetX+o/2,-n.height*r.y+r.offsetY+o/2),l.it(t.scale,t.scale),t.Ud(!1),t.Na.set(t.fl),t.Vh=t.scale,t.Ra(!1)}uE(t,e,i,s,n){const o=t.fl;o.Xe(),o.js(i.x+e.x,i.y+e.y),o.js(-s.x,-s.y),t._p(o,n.x,n.y,n.width,n.height),t.Ud(!1),t.Na.set(t.fl),t.Vh=t.scale,t.Ra(!1)}zD(t,e){e.dE(t)}}PanelLayout.In("Graduated",new PanelLayoutGraduated);var ViewboxStretch=(w=>(w[w.Uniform=6]="Uniform",w[w.UniformToFill=7]="UniformToFill",w))(ViewboxStretch||{});class Panel extends GraphObject{J;F;se;Yd;io;tr;yo;_o;xN;E;Kd;lt;Te;ne;Hd;Ua;on;constructor(t,e){if(super(),t===void 0)this.J=Panel.Position;else if(typeof t=="string"){const i=PanelLayout.es.get(t);i!==null?this.J=i:U.n("PanelLayout not loaded: "+t)}else t instanceof PanelLayout?this.J=t:(this.J=Panel.Position,t&&(e=t));this.o|=4194304|(this.J===Panel.Grid?1048576:0),this.F=new List,this.se=Margin.mm,this.Yd=Spot.Default,this.io=1,this.tr=null,this.yo="",this._o=new Rect(NaN,NaN,NaN,NaN),this.xN=null,this.E=null,this.Kd=6,this.Te=null,this.lt=null,this.ne=null,this.Hd=NaN,this.Ua=null,this.on=null,e&&Object.assign(this,e)}cloneProtected(t){super.cloneProtected(t),t.J=this.J,t.se=this.se.C(),t.Yd=this.Yd.C(),t.io=this.io,t.yo=this.yo,t._o.h(this._o),this.E!==null&&(t.E=this.E.copy(t)),t.Kd=this.Kd,this.lt!==null&&(t.lt=this.lt.copy()),this.Te!==null&&(t.Te=this.Te.copy()),t.ne=this.ne,t.Hd=this.Hd,t.Ua=this.Ua}Wo(t){super.Wo(t),t.F=this.F;const e=t.F.r,i=e.length;for(let s=0;s<i;s++){const n=e[s];n.en=t}t.tr=null}copy(){const t=super.copy(),e=this.F.r,i=e.length;for(let s=0;s<i;s++){const o=e[s].copy();t.gE(o)}return t}toString(){return"Panel("+this.type.name+")#"+GSet.ks(this)}get type(){return this.J}set type(t){let e;if(typeof t=="string"){const s=PanelLayout.es.get(t);s!==null?e=s:U.n("PanelLayout not loaded: "+t)}else e=t;const i=this.J;i!==e&&(this.J=e,this.zf=this.J===Panel.Grid,this.f(),this.t("type",i,e))}get elements(){return this.F.iterator}get naturalBounds(){return this.Je}get padding(){return this.se}set padding(t){typeof t=="number"?(t<0&&U.$(t,">= 0",Panel,"padding"),t=new Margin(t)):(t.left<0&&U.$(t.left,">= 0",Panel,"padding:value.left"),t.right<0&&U.$(t.right,">= 0",Panel,"padding:value.right"),t.top<0&&U.$(t.top,">= 0",Panel,"padding:value.top"),t.bottom<0&&U.$(t.bottom,">= 0",Panel,"padding:value.bottom"));const e=this.se;e.equals(t)||(t=t.C(),this.se=t,this.f(),this.t("padding",e,t))}get defaultAlignment(){return this.Yd}set defaultAlignment(t){const e=this.Yd;e.equals(t)||(t=t.C(),this.Yd=t,this.f(),this.t("defaultAlignment",e,t))}get defaultStretch(){return this.io}set defaultStretch(t){const e=this.io;e!==t&&(this.io=t,this.f(),this.t("defaultStretch",e,t))}get defaultSeparatorPadding(){return this.E!==null?this.E.I0:Margin.mm}set defaultSeparatorPadding(t){typeof t=="number"&&(t=new Margin(t));const e=this.defaultSeparatorPadding;e.equals(t)||(t=t.C(),this.E===null&&(this.E=new TablePanelSettings),this.E.I0=t,this.f(),this.t("defaultSeparatorPadding",e,t))}get defaultRowSeparatorStroke(){return this.E!==null?this.E.E0:null}set defaultRowSeparatorStroke(t){const e=this.defaultRowSeparatorStroke;e!==t&&(t===null||typeof t=="string"||t instanceof Brush)&&(t instanceof Brush&&t.b(),this.E===null&&(this.E=new TablePanelSettings),this.E.E0=t,this.N(),this.t("defaultRowSeparatorStroke",e,t))}get defaultRowSeparatorStrokeWidth(){return this.E!==null?this.E.U0:1}set defaultRowSeparatorStrokeWidth(t){const e=this.defaultRowSeparatorStrokeWidth;e!==t&&isFinite(t)&&t>=0&&(this.E===null&&(this.E=new TablePanelSettings),this.E.U0=t,this.f(),this.t("defaultRowSeparatorStrokeWidth",e,t))}get defaultRowSeparatorDashArray(){return this.E!==null?this.E.B0:null}set defaultRowSeparatorDashArray(t){const e=this.defaultRowSeparatorDashArray;if(e!==t){if(t!==null&&!Array.isArray(t)&&U.ri(t,"Array",Panel,"defaultRowSeparatorDashArray:value"),t!==null){const i=t.length;let s=0;for(let n=0;n<i;n++){const o=t[n];(typeof o!="number"||!(o>=0)||!isFinite(o))&&U.n("defaultRowSeparatorDashArray value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(e===null)return;t=null}}this.E===null&&(this.E=new TablePanelSettings),this.E.B0=t,this.N(),this.t("defaultRowSeparatorDashArray",e,t)}}get defaultColumnSeparatorStroke(){return this.E!==null?this.E.V0:null}set defaultColumnSeparatorStroke(t){const e=this.defaultColumnSeparatorStroke;e!==t&&(t===null||typeof t=="string"||t instanceof Brush)&&(t instanceof Brush&&t.b(),this.E===null&&(this.E=new TablePanelSettings),this.E.V0=t,this.N(),this.t("defaultColumnSeparatorStroke",e,t))}get defaultColumnSeparatorStrokeWidth(){return this.E!==null?this.E.z0:1}set defaultColumnSeparatorStrokeWidth(t){const e=this.defaultColumnSeparatorStrokeWidth;e!==t&&isFinite(t)&&t>=0&&(this.E===null&&(this.E=new TablePanelSettings),this.E.z0=t,this.f(),this.t("defaultColumnSeparatorStrokeWidth",e,t))}get defaultColumnSeparatorDashArray(){return this.E!==null?this.E.X0:null}set defaultColumnSeparatorDashArray(t){const e=this.defaultColumnSeparatorDashArray;if(e!==t){if(t!==null&&!Array.isArray(t)&&U.ri(t,"Array",Panel,"defaultColumnSeparatorDashArray:value"),t!==null){const i=t.length;let s=0;for(let n=0;n<i;n++){const o=t[n];(typeof o!="number"||!(o>=0)||!isFinite(o))&&U.n("defaultColumnSeparatorDashArray value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(e===null)return;t=null}}this.E===null&&(this.E=new TablePanelSettings),this.E.X0=t,this.N(),this.t("defaultColumnSeparatorDashArray",e,t)}}get Ea(){return this.E!==null?this.E.Ea:null}set Ea(t){this.E===null&&(this.E=new TablePanelSettings),this.E.Ea=t}get viewboxStretch(){return this.Kd}set viewboxStretch(t){const e=this.Kd;e!==t&&(this.Kd=t,this.f(),this.t("viewboxStretch",e,t))}get gridCellSize(){return this.Te!==null?this.Te.qd:Size.aL}set gridCellSize(t){this.Te===null&&(this.Te=new GridPanelSettings);const e=this.Te.qd;if(!e.equals(t)){(!t.isReal()||t.width===0||t.height===0)&&U.n("Invalid Panel.gridCellSize: "+t),this.Te.qd=t.C();const i=this.diagram;i!==null&&this===i.grid&&i.Sd(),this.N(),this.t("gridCellSize",e,t)}}get gridOrigin(){return this.Te!==null?this.Te.jd:Point.wn}set gridOrigin(t){this.Te===null&&(this.Te=new GridPanelSettings);const e=this.Te.jd;if(!e.equals(t)){t.isReal()||U.n("Invalid Panel.gridOrigin: "+t),this.Te.jd=t.C();const i=this.diagram;i!==null&&this===i.grid&&i.Sd(),this.N(),this.t("gridOrigin",e,t)}}get graduatedMin(){return this.lt!==null?this.lt.G0:0}set graduatedMin(t){const e=this.graduatedMin;if(e!==t&&(this.lt===null&&(this.lt=new GradPanelSettings),this.lt.G0=t,this.f(),this.t("graduatedMin",e,t),this.Nf())){const i=this.part;i!==null&&this.qh(i,"graduatedRange")}}get graduatedMax(){return this.lt!==null?this.lt.Y0:100}set graduatedMax(t){const e=this.graduatedMax;if(e!==t&&(this.lt===null&&(this.lt=new GradPanelSettings),this.lt.Y0=t,this.f(),this.t("graduatedMax",e,t),this.Nf())){const i=this.part;i!==null&&this.qh(i,"graduatedRange")}}get graduatedRange(){return this.graduatedMax-this.graduatedMin}get graduatedTickUnit(){return this.lt!==null?this.lt.K0:10}set graduatedTickUnit(t){const e=this.graduatedTickUnit;e!==t&&t>0&&(this.lt===null&&(this.lt=new GradPanelSettings),this.lt.K0=t,this.f(),this.t("graduatedTickUnit",e,t))}get graduatedTickBase(){return this.lt!==null?this.lt.H0:0}set graduatedTickBase(t){const e=this.graduatedTickBase;e!==t&&(this.lt===null&&(this.lt=new GradPanelSettings),this.lt.H0=t,this.f(),this.t("graduatedTickBase",e,t))}get Es(){return this.lt!==null?this.lt.Es:null}set Es(t){this.lt!==null?this.lt.Es=t:t!==null&&(this.lt=new GradPanelSettings,this.lt.Es=t)}get ss(){return this.lt!==null?this.lt.ss:null}set ss(t){this.lt!==null?this.lt.ss=t:t!==null&&(this.lt=new GradPanelSettings,this.lt.ss=t)}get ms(){return this.lt!==null?this.lt.ms:null}set ms(t){this.lt!==null?this.lt.ms=t:t!==null&&(this.lt=new GradPanelSettings,this.lt.ms=t)}get Ii(){return this.lt!==null?this.lt.Ii:null}set Ii(t){this.lt!==null?this.lt.Ii=t:t!==null&&(this.lt=new GradPanelSettings,this.lt.Ii=t)}s0(t){super.s0(t);const e=this.F.r,i=e.length;for(let s=0;s<i;s++)e[s].s0(t)}va(t,e){if(this.J===Panel.Grid){t.commitTransform(),this.J.qe(this,t,e);return}if(this.J===Panel.Graduated){t.commitTransform(),this.J.qe(this,t,e);return}if(this.J===Panel.Table)if(t.commitTransform(),t instanceof SVGContext){const r=t.currentElement;t.currentElement=t.newGroup2("gojs-ts"),this.bN(t,e),t.endGroup(),t.currentElement=r}else this.bN(t,e);const i=this.isClipping&&this.J===Panel.Spot;i&&t.save();const s=this.findMainElement(),n=this.F.r,o=n.length;for(let r=0;r<o;r++){const l=n[r];i&&l===s&&(t.clipInsteadOfFill=!0),l.qe(t,e),i&&l===s&&(t.clipInsteadOfFill=!1)}i&&(t.restore(),t.clearContextCache(!0))}bN(t,e){t.lineCap="butt";const i=this.rowCount>0?this.Bi:null,s=this.columnCount>0?this.Vi:null;i!==null&&this.hk(t,e,!0,i,!0),s!==null&&this.hk(t,e,!1,s,!0),i!==null&&this.XD(t,!0,i),s!==null&&this.XD(t,!1,s),i!==null&&this.hk(t,e,!0,i,!1),s!==null&&this.hk(t,e,!1,s,!1)}XD(t,e,i){const s=i.length,n=this.actualBounds,o=this.naturalBounds;let r=!0;for(let l=0;l<s;l++){const a=i[l];if(a===void 0||a.actual===0)continue;if(r){r=!1;continue}if(e){if(a.position>o.height)continue}else if(a.position>o.width)continue;let h=a.separatorStrokeWidth;isNaN(h)&&(h=e?this.defaultRowSeparatorStrokeWidth:this.defaultColumnSeparatorStrokeWidth);let c=a.separatorStroke;if(c===null&&(c=e?this.defaultRowSeparatorStroke:this.defaultColumnSeparatorStroke),h===0||c===null)continue;this.Nn(t,c,!1,!1,o,n);let f=!1,u=a.separatorDashArray;u===null&&(u=e?this.defaultRowSeparatorDashArray:this.defaultColumnSeparatorDashArray),u!==null&&(f=!0,t.enableDash(u,0)),t.beginPath();const d=a.position+h;e?d>o.height&&(h-=d-o.height):d>o.width&&(h-=d-o.width);let m=a.position+h/2;t.lineWidth=h;const g=this.se;if(e){m+=g.top;const p=g.left,y=o.width-g.right;t.moveTo(p,m),t.lineTo(y,m)}else{m+=g.left;const p=g.top,y=o.height-g.bottom;t.moveTo(m,p),t.lineTo(m,y)}t.stroke(),t.endPath(),f&&t.disableDash()}}hk(t,e,i,s,n){const o=s.length,r=this.actualBounds,l=this.naturalBounds,a=this.GD(!0),h=this.GD(!1);for(let c=0;c<o;c++){const f=s[c];if(f===void 0||f.background===null||f.coversSeparators===n||f.actual===0)continue;const u=i?r.height:r.width;if(f.position>u)continue;let d=f.computeEffectiveSpacing(),m=f.separatorStrokeWidth;isNaN(m)&&(m=i?this.defaultRowSeparatorStrokeWidth:this.defaultColumnSeparatorStrokeWidth);let g=f.separatorStroke;g===null&&(g=i?this.defaultRowSeparatorStroke:this.defaultColumnSeparatorStroke),(g===null||f.index===(i?a:h))&&(m=0),d-=m;const p=f.position+m;let y=d+f.actual;if(p+y>u&&(y=u-p),y<=0)continue;const x=this.se;this.Nn(t,f.background,!0,!1,l,r),i?t.fillRect(x.left,p+x.top,r.width-(x.left+x.right),y):t.fillRect(p+x.left,x.top,y,r.height-(x.top+x.bottom))}}GD(t){const e=t?this.rowCount:this.columnCount;for(let i=0;i<e;i++){const s=t?this.Bi[i]:this.Vi[i];if(s!==void 0)return s.index}return 0}Df(){const t=this.F.r,e=t.length;for(let i=0;i<e;i++)t[i].Df();this.ts(!0)}Af(t,e,i){const s=this.svg;if(s===null)return!1;if(this.type===Panel.Table){const r=s.getElementsByClassName("gojs-ts"),l=r.length!==0?r[0]:null;l!==null&&(l.innerHTML=""),t.currentElement=l,this.bN(t,e),t.currentElement=null}else{if(this.J===Panel.Grid)return s.innerHTML="",s.remove(),!1;if(this.J===Panel.Graduated)return s.innerHTML="",s.remove(),!1;if(this.J===Panel.Spot&&this.isClipping)return s.innerHTML="",s.remove(),this.Ta=null,this.Df(),!1}if(!super.Af(t,e,i))return!1;const n=this.F.r,o=n.length;for(let r=0;r<o;r++)n[r].qe(t,e);return!0}Ed(t){return!0}r0(t,e,i,s){if(!this.isClipping){if(this.nn()&&t.partClipRect!==null){const n=t.partClipRect,o=this.F.r;let r=0,l=0;for(let a=0;a<o.length;a++){if(!o[a].isVisibleObject())continue;const h=o[a].actualBounds;r=a===0?h.x:Math.min(h.x,r),l=a===0?h.y:Math.min(h.y,l)}s.setAttributeNS(null,"clip-path",`path('M ${n.x-i.x-r},${n.y-i.y-l} l ${n.width} 0 l 0 ${n.height} l -${n.width} 0 z')`);return}super.r0(t,e,i,s)}}Tf(t,e,i,s,n){const o=this.Fn(),r=this.T,l=1/(r.m11*r.m22-r.m12*r.m21);let a=r.m22*l,h=-r.m12*l,c=-r.m21*l,f=r.m11*l,u=l*(r.m21*r.dy-r.m22*r.dx),d=l*(r.m12*r.dx-r.m11*r.dy);if(this.background!==null){const m=t*a+e*c+u,g=t*h+e*f+d,p=i*a+s*c+u,y=i*h+s*f+d;n.e(0,0);const x=this.naturalBounds,b=G.Bl(0,0,x.width,x.height,m,g,p,y,n);return n.T(r),b}else{o||(a=1,h=0,c=0,f=1,u=0,d=0);const m=t*a+e*c+u,g=t*h+e*f+d,p=i*a+s*c+u,y=i*h+s*f+d;n.e(p,y);let x=(p-m)**2+(y-g)**2,b=!1;const k=this.F.r,P=k.length,S=Point.l();let T=null,N=1/0,M=null;const C=this.isClipping&&this.J===Panel.Spot;C&&(M=Point.l(),T=this.findMainElement(),b=T.Tf(m,g,p,y,M),b&&(N=(m-M.x)**2+(g-M.y)**2));for(let L=0;L<P;L++){const A=k[L];if(!A.visible||A===T||!A.Tf(m,g,p,y,S))continue;b=!0;const D=(m-S.x)**2+(g-S.y)**2;D<x&&(x=D,n.set(S))}return C&&(N>x&&n.set(M),Point.i(M)),Point.i(S),o&&n.T(r),b}}hf(){const t=this.F.r,e=t.length;for(let i=0;i<e;i++)t[i].hf();super.hf()}f(t){if(this.Ko())return;super.f(t);let e=null;(this.J===Panel.Auto||this.J===Panel.Link)&&(e=this.findMainElement());const i=this.F.r,s=i.length;for(let n=0;n<s;n++){const o=i[n];if((o===e||o.isPanelMain)&&o.f(!0),o.desiredSize.isReal()||!o.visible)continue;const r=o.sn(!1);!(o instanceof Placeholder)&&!(o instanceof Panel)&&!(o instanceof TextBlock)&&r===0||o.f(!0)}}vf(){if(this.Ko())return;this.Pi(!0),this.uo(!0);const t=this.F.r,e=t.length;for(let i=0;i<e;i++)t[i].vf()}Lf(){if(this.Z1()===!1){this.Ud(!0),this.Ra(!0);const t=this.F.r,e=t.length;for(let i=0;i<e;i++)t[i]._C()}}_C(){this.Ra(!0);const t=this.F.r,e=t.length;for(let i=0;i<e;i++)t[i]._C()}Od(t,e,i,s){const n=this._o;n.e(0,0,0,0);const o=this.desiredSize,r=this.minSize;i===void 0&&(i=r.width,s=r.height),i=Math.max(i,r.width),s=Math.max(s,r.height);const l=this.maxSize;isNaN(o.width)||(t=Math.min(o.width,l.width)),isNaN(o.height)||(e=Math.min(o.height,l.height)),t=Math.max(i,t),e=Math.max(s,e);const a=this.se;t=Math.max(t-a.left-a.right,0),e=Math.max(e-a.top-a.bottom,0);const h=this.F.r;this.J.measure(this,t,e,h,n,i,s);let c=n.width+a.left+a.right,f=n.height+a.top+a.bottom;isFinite(o.width)&&(c=o.width),isFinite(o.height)&&(f=o.height),c=Math.min(l.width,c),f=Math.min(l.height,f),c=Math.max(r.width,c),f=Math.max(r.height,f),c=Math.max(i,c),f=Math.max(s,f),n.$n(c,f),this.naturalBounds.$n(c,f),this.fo(0,0,c,f)}findMainElement(){if(this.tr!==null)return this.tr;const t=this.F.r,e=t.length;if(e===0)return null;for(let i=0;i<e;i++){const s=t[i];if(s.isPanelMain===!0)return this.tr=s,s}return this.tr=t[0],this.tr}Qo(){return this.part!==null?this.part.locationObject:null}get panelLayoutState(){return this.xN}set panelLayoutState(t){this.xN=t}Da(t,e,i,s){const n=this.F.r;if(this.actualBounds.e(t,e,i,s),!this.desiredSize.isReal()){let o=this.sn(!0);const r=this.measuredBounds,l=r.width,a=r.height,h=this.ul,c=h.left+h.right,f=h.top+h.bottom;switch(l===i&&a===s&&(o=0),o){case 0:(l>i||a>s)&&(this.f(),this.ct(l>i?i:l,a>s?s:a,0,0));break;case 2:this.f(!0),this.ct(i+c,s+f,0,0);break;case 5:this.f(!0),this.ct(i+c,a+f,0,0);break;case 4:this.f(!0),this.ct(l+c,s+f,0,0);break}}this.J.arrange(this,n,this._o)}Aa(t){const e=this.naturalBounds,i=this.Qo();if(Rect.contains(0,0,e.width,e.height,t.x,t.y)){const s=this.F.r,n=s.length,o=Point.O(0,0);for(let r=n;r--;){const l=s[r];if(!(!l.visible&&l!==i)&&(o.set(t).Ai(l.T),l.containsPoint(o)))return Point.i(o),!0}return Point.i(o),this.Nt!==null}return!1}Qp(t){if(this.ho===t)return this;const e=this.F.r,i=e.length;for(let s=0;s<i;s++){const o=e[s].Qp(t);if(o!==null)return o}return null}walkVisualTreeFrom(t,e){if(e(this,t),t instanceof Panel){const i=t.F.r,s=i.length;for(let n=0;n<s;n++)this.walkVisualTreeFrom(i[n],e)}}An(t){this.YD(this,t)}YD(t,e){e(t);const i=t.F.r,s=i.length;for(let n=0;n<s;n++){const o=i[n];o instanceof Panel&&this.YD(o,e)}}mE(t){this.KD(this,t)}KD(t,e){if(e(t),t instanceof Panel){const i=t.F.r,s=i.length;for(let n=0;n<s;n++)this.KD(i[n],e)}}findInVisualTree(t){return this.HD(this,t)}HD(t,e){if(e(t))return t;if(t instanceof Panel){const i=t.F.r,s=i.length;for(let n=0;n<s;n++){const o=this.HD(i[n],e);if(o!==null)return o}}return null}findObject(t){if(this.name===t)return this;const e=this.F.r;let i=e.length;this.Ua!==null&&(i=this.q0());for(let s=0;s<i;s++){const n=e[s];if(n instanceof Panel){const o=n.findObject(t);if(o!==null)return o}if(n.name===t)return n}return null}qD(){const t=this.F.r,e=t.length;let i=0;for(let s=0;s<e;s++){const n=t[s];n instanceof Panel?i=Math.max(i,n.qD()):n instanceof Shape&&(i=Math.max(i,n.pE()))}return i}Fn(){return!(this.type===Panel.TableRow||this.type===Panel.TableColumn)}gl(){return this.type===Panel.TableRow||this.type===Panel.TableColumn}dA(t,e,i){if(this.pickable===!1||(e===void 0&&(e=null),i===void 0&&(i=null),this.fs()))return null;const s=this.naturalBounds,n=1/this.getDocumentScale(),o=this.Fn(),r=o?t:Point.O(t.x,t.y).Ai(this.T),l=this.diagram;let a=10,h=5;if(l!==null&&(a=l.getInputOption("extraTouchArea"),h=a/2),Rect.contains(-(h*n),-(h*n),s.width+a*n,s.height+a*n,r.x,r.y)){if(!this.zf){const f=this.F.r,u=f.length,d=Point.l(),m=this.isClipping&&this.J===Panel.Spot,g=m?this.findMainElement():null;if(m&&g&&(g.Fn()?d.set(t).Ai(g.T):d.set(t),!g.containsPoint(d)))return Point.i(d),o||Point.i(r),null;const p=this.Qo();for(let y=u;y--;){const x=f[y];if(!x.visible&&x!==p||(x.Fn()?d.set(t).Ai(x.T):d.set(t),m&&x===g))continue;let b=null;if(x instanceof Panel?b=x.dA(d,e,i):x.pickable===!0&&x.containsPoint(d)&&(b=x),b!==null&&(e!==null&&(b=e(b)),b!==null&&(i===null||i(b))))return Point.i(d),o||Point.i(r),b}Point.i(d)}if(this.background===null)return o||Point.i(r),null;const c=Rect.contains(0,0,s.width,s.height,r.x,r.y)?this:null;return o||Point.i(r),c}return o||Point.i(r),null}gA(t,e,i,s){if(this.pickable===!1)return!1;e===void 0&&(e=null),i===void 0&&(i=null);const n=this.naturalBounds,o=this.Fn(),r=o?t:Point.O(t.x,t.y).Ai(this.T),l=this.gl(),a=Rect.contains(0,0,n.width,n.height,r.x,r.y);if(l||a){if(!this.zf){const h=this.F.r,c=h.length,f=Point.l(),u=this.Qo();for(let d=c;d--;){const m=h[d];if(!m.visible&&m!==u)continue;m.Fn()?f.set(t).Ai(m.T):f.set(t);let g=m;const p=m instanceof Panel?m:null;if(p!==null?p.gA(f,e,i,s):g.containsPoint(f)){if(g.pickable===!1)continue;e!==null&&(g=e(g)),g!==null&&(i===null||i(g))&&s.add(g)}}Point.i(f)}return o||Point.i(r),a&&this.background!==null}return o||Point.i(r),!1}ap(t,e,i,s,n,o){if(this.pickable===!1)return!1;e===void 0&&(e=null),i===void 0&&(i=null);let r=o;if(r===void 0&&(r=Transform.l(),r.Xe()),r.Rc(this.T),this.containedInRect(t,r))return this.kN(e,i,n),o===void 0&&Transform.i(r),!0;if(this.intersectsRect(t,r)){if(!this.zf){const l=this.Qo(),a=this.F.r,h=a.length;for(let c=h;c--;){const f=a[c];if(!f.visible&&f!==l)continue;const u=f.actualBounds,d=this.naturalBounds;if(u.x>d.width||u.y>d.height||u.x+u.width<0||u.y+u.height<0)continue;let m=f;const g=f instanceof Panel?f:null,p=Transform.l();p.set(r),(g!==null?g.ap(t,e,i,s,n,p):m.MD(t,s,p))&&(e!==null&&(m=e(m)),m!==null&&(i===null||i(m))&&n.add(m)),Transform.i(p)}}return o===void 0&&Transform.i(r),s}return o===void 0&&Transform.i(r),!1}kN(t,e,i){const s=this.F.r,n=s.length;for(let o=n;o--;){const r=s[o];if(!r.visible)continue;const l=r.actualBounds,a=this.naturalBounds;if(l.x>a.width||l.y>a.height||l.x+l.width<0||l.y+l.height<0)continue;r instanceof Panel&&r.kN(t,e,i);let h=r;t!==null&&(h=t(h)),h!==null&&(e===null||e(h))&&i.add(h)}}mA(t,e,i,s,n,o){if(this.pickable===!1)return!1;i===void 0&&(i=null),s===void 0&&(s=null);const r=this.naturalBounds,l=this.Fn(),a=l?t:Point.O(t.x,t.y).Ai(this.T),h=l?e:Point.O(e.x,e.y).Ai(this.T),c=a.distanceSquaredPoint(h),f=a.x>0&&a.x<r.width&&a.y>0&&a.y<r.height||Point.distanceLineSegmentSquared(a.x,a.y,0,0,0,r.height)<=c||Point.distanceLineSegmentSquared(a.x,a.y,0,r.height,r.width,r.height)<=c||Point.distanceLineSegmentSquared(a.x,a.y,r.width,r.height,r.width,0)<=c||Point.distanceLineSegmentSquared(a.x,a.y,r.width,0,0,0)<=c,u=a.distanceSquared(0,0)<=c&&a.distanceSquared(0,r.height)<=c&&a.distanceSquared(r.width,0)<=c&&a.distanceSquared(r.width,r.height)<=c;if(l||(Point.i(a),Point.i(h)),f){if(!this.zf){const d=Point.l(),m=Point.l(),g=this.Qo(),p=this.F.r,y=p.length;for(let x=y;x--;){const b=p[x];if(!b.visible&&b!==g)continue;const k=b.actualBounds,P=this.naturalBounds;if(l&&(k.x>P.width||k.y>P.height||k.x+k.width<0||k.y+k.height<0))continue;if(b.Fn()){const N=b.T;d.set(t).Ai(N),m.set(e).Ai(N)}else d.set(t),m.set(e);let S=b;const T=b instanceof Panel?b:null;(T!==null?T.mA(d,m,i,s,n,o):S.CD(d,m,n))&&(i!==null&&(S=i(S)),S!==null&&(s===null||s(S))&&o.add(S))}Point.i(d),Point.i(m)}return n?f:u}return!1}dN(t){let e=null;if(t instanceof Shape){e=t.spot1,e===Spot.Default&&(e=null);const i=t.geometry;i!==null&&e===null&&(e=i.spot1)}return e===null&&(e=Spot.TopLeft),e}gN(t){let e=null;if(t instanceof Shape){e=t.spot2,e===Spot.Default&&(e=null);const i=t.geometry;i!==null&&e===null&&(e=i.spot2)}return e===null&&(e=Spot.BottomRight),e}add(...t){for(let e=0;e<t.length;e++)this.insertAt(this.F.count,t[e]);return this}elt(t){return this.F.elt(t)}insertAt(t,e){e instanceof Part&&U.n("Cannot add a Part to a Panel: "+e+"; use a Panel instead"),(this===e||this.isContainedBy(e))&&(this===e&&U.n("Cannot make a Panel contain itself: "+this.toString()),U.n("Cannot make a Panel indirectly contain itself: "+this.toString()+" already contains "+e.toString()));const i=e.panel;if(i!==null&&i!==this&&U.n("Cannot add a GraphObject that already belongs to another Panel to this Panel: "+e.toString()+", already contained by "+i.toString()+", cannot be shared by this Panel: "+this.toString()),this.J===Panel.Grid&&!(e instanceof Shape)&&U.n("Can only add Shapes to a Grid Panel, not: "+e),this.J===Panel.Graduated&&!(e instanceof Shape||e instanceof TextBlock)&&U.n("Can only add Shapes or TextBlocks to a Graduated Panel, not: "+e),e.jh(this),e.dl=null,this.itemArray!==null){const r=e.data;U.Z(r)&&(this.on===null&&(this.on=new GMap),this.on.set(r,e))}const s=this.F;let n=-1;if(i===this){const r=this.QC(e);if(r!==-1){if(r===t)return this;if(r+1>=s.count&&t>=s.count)return this;s.removeAt(r),n=r}else U.n("element "+e.toString()+" has panel "+i.toString()+" but is not contained by it.")}(t<0||t>s.count)&&(t=s.count),s.insertAt(t,e),(t===0||e.isPanelMain)&&(this.tr=null),this.Ko()||this.f(),e.f(!1),e.portId!==null?this.Rn=!0:e instanceof Panel&&e.Rn===!0&&(this.Rn=!0),this.ms=null,this.isEnabledObject()||this.ck(e,!1);const o=this.part;if(o!==null){o.d0(),o.Xf(),this.Rn&&o instanceof Node&&(o.Rn=!0),o.Rn&&o instanceof Node&&(o.di=null);const r=this.diagram;if(r!==null&&r.undoManager.isUndoingRedoing)return this;n!==-1&&o.raiseChangedEvent(4,"elements",this,e,null,n,null),o.raiseChangedEvent(3,"elements",this,null,e,null,t)}return this}get Rn(){return(this.o&8388608)!==0}set Rn(t){(this.o&8388608)!==0!==t&&(this.o=this.o^8388608)}WC(){return(this.o&16777216)!==0}PN(t){t?this.o|=16777216:this.o&=-16777217}gE(t){t.jh(this),t.dl=null;const e=this.F,i=e.count;e.insertAt(i,t);const s=this.part;if(s!==null){s.d0(),t.portId!==null&&s instanceof Node&&(s.Rn=!0);const n=this.diagram;if(n!==null&&n.undoManager.isUndoingRedoing)return;s.raiseChangedEvent(3,"elements",this,null,t,null,i)}}QC(t){const e=this.F.r,i=e.length;let s=-1;for(let n=0;n<i;n++)if(e[n]===t){s=n;break}return s}remove(t){const e=this.QC(t);return e!==-1&&this.hi(e,!0),this}removeAt(t){return t>=0&&this.hi(t,!0),this}hi(t,e){const i=this.F,s=i.elt(t);if(s.dl=null,s.jh(null),this.on!==null){const o=s.data;U.Z(o)&&this.on.delete(o)}i.removeAt(t),this.Pi(!1),this.f(),this.tr===s&&(this.tr=null),this.ms=null;const n=this.part;if(n!==null){n.d0(),n.Xf(),n.invalidateAdornments(),n instanceof Node&&(s instanceof Panel?s.walkVisualTreeFrom(s,(r,l)=>n.sN(l,e)):n.sN(s,e));const o=this.diagram;if(o!==null&&o.undoManager.isUndoingRedoing)return;n.raiseChangedEvent(4,"elements",this,s,null,t,null)}}get Bi(){return this.E===null&&(this.E=new TablePanelSettings),this.E.Bi}get rowCount(){return this.E===null?0:this.Bi.length}getRowDefinition(t){t<0&&U.$(t,">= 0",Panel,"getRowDefinition:idx"),t=Math.round(t);const e=this.Bi;if(e[t]===void 0){const i=new RowColumnDefinition;i.jh(this),i.isRow=!0,i.index=t,e[t]=i,this.raiseChangedEvent(3,"rowdefs",this,null,i,null,t)}return e[t]}removeRowDefinition(t){if(t<0&&U.$(t,">= 0",Panel,"removeRowDefinition:idx"),this.rowCount===0)return;t=Math.round(t);const e=this.Bi,i=e[t];if(i){e[t]=void 0;let s=e.length-1;for(;s>=0&&e[s--]===void 0;)e.length--;this.raiseChangedEvent(4,"rowdefs",this,i,null,t,null),this.f()}}jA(t,e){const i=this.Bi;if(!(t<0)){if(i[t]=e instanceof RowColumnDefinition?e:void 0,!e){let s=i.length-1;for(;s>=0&&i[s--]===void 0;)i.length--}this.f()}}get Vi(){return this.E===null&&(this.E=new TablePanelSettings),this.E.Vi}get columnCount(){return this.E===null?0:this.Vi.length}getColumnDefinition(t){t<0&&U.$(t,">= 0",Panel,"getColumnDefinition:idx"),t=Math.round(t);const e=this.Vi;if(e[t]===void 0){const i=new RowColumnDefinition;i.jh(this),i.isRow=!1,i.index=t,e[t]=i,this.raiseChangedEvent(3,"coldefs",this,null,i,null,t)}return e[t]}removeColumnDefinition(t){if(t<0&&U.$(t,">= 0",Panel,"removeColumnDefinition:idx"),this.columnCount===0)return;t=Math.round(t);const e=this.Vi,i=e[t];if(i){e[t]=void 0;let s=e.length-1;for(;s>=0&&e[s--]===void 0;)e.length--;this.raiseChangedEvent(4,"coldefs",this,i,null,t,null),this.f()}}WA(t,e){const i=this.Vi;if(!(t<0)){if(i[t]=e instanceof RowColumnDefinition?e:void 0,!e){let s=i.length-1;for(;s>=0&&i[s--]===void 0;)i.length--}this.f()}}addRowColumnDefinition(t){let e=null;return t.isRow?e=this.getRowDefinition(t.index):t.isRow||(e=this.getColumnDefinition(t.index)),e&&e.tk(t),this}addRowDefinition(t,e){const i=this.getRowDefinition(t);return i&&i.tk(new RowColumnDefinition(e)),this}addColumnDefinition(t,e){const i=this.getColumnDefinition(t);return i&&i.tk(new RowColumnDefinition(e)),this}get rowSizing(){return this.E!==null?this.E.j0:3}set rowSizing(t){const e=this.rowSizing;e!==t&&(this.E===null&&(this.E=new TablePanelSettings),this.E.j0=t,this.f(),this.t("rowSizing",e,t))}get columnSizing(){return this.E!==null?this.E.W0:3}set columnSizing(t){const e=this.columnSizing;e!==t&&(this.E===null&&(this.E=new TablePanelSettings),this.E.W0=t,this.f(),this.t("columnSizing",e,t))}get topIndex(){return this.E!==null?this.E.J0:0}set topIndex(t){const e=this.topIndex;e!==t&&((!isFinite(t)||t<0)&&U.n("Panel.topIndex must be greater than zero and a real number, not: "+t),this.E===null&&(this.E=new TablePanelSettings),this.E.J0=t,this.f(),this.t("topIndex",e,t))}get leftIndex(){return this.E!==null?this.E.$0:0}set leftIndex(t){const e=this.leftIndex;e!==t&&((!isFinite(t)||t<0)&&U.n("Panel.leftIndex must be greater than zero and a real number, not: "+t),this.E===null&&(this.E=new TablePanelSettings),this.E.$0=t,this.f(),this.t("leftIndex",e,t))}findRowForLocalY(t){if(t<0||this.type!==Panel.Table||this.rowCount===0)return-1;let e=0;const i=this.Bi,s=i.length;let n=this.topIndex;for(;n<s;n++){const o=i[n];if(o!==void 0&&(e+=o.total,t<e))return n}return n}findColumnForLocalX(t){if(t<0||this.type!==Panel.Table||this.columnCount===0)return-1;let e=0;const i=this.Vi,s=i.length;let n=this.leftIndex;for(;n<s;n++){const o=i[n];if(o!==void 0&&(e+=o.total,t<e))return n}return n}graduatedPointForValue(t,e){if(e===void 0&&(e=new Point(NaN,NaN)),this.type!==Panel.Graduated)return e.e(NaN,NaN),e;t=Math.min(Math.max(t,this.graduatedMin),this.graduatedMax);const i=this.findMainElement();return i.geometry.getPointAlongPath((t-this.graduatedMin)/this.graduatedRange,e),i.T.wt(e)}graduatedValueForPoint(t){if(this.type!==Panel.Graduated)return NaN;const e=this.findMainElement();return e.T.Di(t),e.geometry.getFractionForPoint(t)*this.graduatedRange+this.graduatedMin}get data(){return this.ne}set data(t){const e=this.ne;if(e!==t){const i=this instanceof Part&&!(this instanceof Adornment);i&&U.s(t,"object",Panel,"data"),this.Ut(),this.ne=t;const s=this.diagram;if(s!==null)if(i){s.partManager.yE(this,e,t);let n=this.adornments;for(;n.next();){const o=n.value,r=o.adornedObject;if(r!==null){const l=r.findBindingPanel();l!==null&&(o.data=l.data)}}}else{const n=this.panel;n!==null&&n.on!==null&&(e!==null&&n.on.delete(e),t!==null&&n.on.set(t,this))}if(this.t("data",e,t),s!==null&&s.undoManager.isUndoingRedoing)return;t!==null&&this.updateTargetBindings()}}get itemIndex(){return this.Hd}set itemIndex(t){const e=this.Hd;e!==t&&(this.Hd=t,this.t("itemIndex",e,t))}get Is(){return this.w!==null?this.w.Is:null}set Is(t){this.Ee!==t&&(this.w===null&&(this.w=new GraphObjectTemplateSettings),this.w.Is=t)}nN(){return this.Is!==null}RD(){const t=this.Is;return t!==null&&t.u}freezeBindings(){return this.Ut()}Ut(){let t=this.Is;if(t===null)this.data!==null&&U.n("Template cannot have .data be non-null: "+this),this.Is=t=new List;else if(t.u)return this;const e=new List;this.PN(!1),this.walkVisualTreeFrom(this,(n,o)=>{o.La();const r=o.Ee;if(r!==null){o.tN(!1);const l=r.iterator;for(;l.next();){const a=l.value;a.mode===2&&o.tN(!0);const h=a.sourceName;if(a.isToObject){h==="/"&&n.PN(!0);const c=a.SD(n,o);c!==null&&(e.add(c),c.co===null&&(c.co=new List),c.co.add(a))}t.add(a)}}if(o instanceof Panel&&o.type===Panel.Table){if(o.rowCount>0){const l=o.Bi,a=l.length;for(let h=0;h<a;h++){const c=l[h];if(c!==void 0&&c.Us!==null){const f=c.Us.iterator;for(;f.next();){const u=f.value;u.Ri=c,u.Wd=2,u.Gf=c.index,t.add(u)}}}}if(o.columnCount>0){const l=o.Vi,a=l.length;for(let h=0;h<a;h++){const c=l[h];if(c!==void 0&&c.Us!==null){const f=c.Us.iterator;for(;f.next();){const u=f.value;u.Ri=c,u.Wd=1,u.Gf=c.index,t.add(u)}}}}}});const i=e.iterator;for(;i.next();){const n=i.value;if(n.co!==null){n.tN(!0);const o=n.co.iterator;for(;o.next();){const r=o.value;n.Ee===null&&(n.Ee=new List),n.Ee.add(r)}}n.co=null}let s=t.iterator;for(;s.next();){const n=s.value;let o=n.Ri;if(o!==null){n.Ri=null;const r=n.targetProperty,l=r.indexOf(".");if(l>0&&o instanceof Panel){const a=r.substring(0,l),h=r.substring(l+1),c=o.findObject(a);c!==null?(o=c,n.targetProperty=h):(U.jt('Warning: unable to find GraphObject named "'+a+'" for Binding: '+n.toString()),o=null)}if(o instanceof RowColumnDefinition){const a=GSet.ks(o.panel);n.targetId=a===void 0?-1:a,o.panel.ho=n.targetId}else if(o instanceof GraphObject){const a=GSet.ks(o);n.targetId=a===void 0?-1:a,o.ho=n.targetId}else U.n("Unknown type of binding target: "+o);n.check(o)}}return t.b(),this instanceof Part&&this.Oi()&&this.ensureBounds(),this}static uB=!1;copyTemplate(t){t===void 0&&(t=!1);const e=this.copy();return e.mE(i=>{i instanceof Panel&&(i.Is=null,i.ne=null);const s=i.Ee;s!==null&&(i.Ee=null,s.each(o=>i.bind(o.copy())));const n=i.Os;n!==null&&(i.Os=null,n.each(o=>i.trigger(o.value.copy())))}),t&&e.Ut(),e}updateTargetBindings(t){const e=this.Is;if(e===null)return;t===void 0&&(t="");const i=this.diagram?.model,s=e.iterator;for(;s.next();){const n=s.value,o=this.SN(n,t);if(o===null)continue;const{data:r,elt:l}=o;n.isToTheme&&this.diagram===null||l!==void 0&&n.updateTarget(l,r,void 0,i)}}wE(t){if(t===""){this.updateTargetBindings(t);return}const e=this.Is;if(e===null)return;const i=this.diagram?.model,s=e.iterator;for(;s.next();){const n=s.value;if(n.isToData&&n.sourceProperty!==""||n.isToModel&&n.sourceProperty!==t)continue;const o=this.SN(n,"");if(o===null)continue;const{data:r,elt:l}=o;l!==void 0&&n.updateTarget(l,r,void 0,i)}}Ho(){if(this.diagram!==null)if(this.nN()){const t=this.diagram.model,e=this.Is.iterator;for(;e.next();){const i=e.value;if(!i.isToTheme)continue;const s=this.SN(i);if(s===null)continue;const{data:n,elt:o}=s;o!==void 0&&i.updateTarget(o,n,void 0,t)}}else{const t=this.F.r,e=t.length;for(let i=0;i<e;i++)t[i].Ho()}}SN(t,e=""){const i=t.sourceProperty;if(e!==""&&i!==""&&i!==e)return null;const s=t.targetProperty;if(t.converter===null&&s==="")return null;let o=this.data;const r=t.sourceName;if(t.isToObject){if(o=this.PD(r),o===null)return null}else if(t.isToModel){const c=this.diagram;if(c===null)return null;o=c.model.modelData}let l=this;const a=t.targetId;if(a!==-1){if(l=this.Qp(a),l===null)return null}else t.Ri!==null&&(l=t.Ri);r==="/"?o=l.part:r==="."?o=l:r===".."&&(o=l.panel);const h=t.Wd;if(h!==0){if(!(l instanceof Panel))return null;h===1?l=l.getColumnDefinition(t.Gf):h===2&&(l=l.getRowDefinition(t.Gf))}return{data:o,elt:l}}get itemArray(){return this.Ua}set itemArray(t){const e=this.Ua;if(e!==t||t!==null&&this.xE(t)){const i=this.diagram;if(e!==t&&(i!==null&&e!==null&&i.partManager.$2(this,i),this.Ua=t,i!==null&&t!==null&&i.partManager.J2(this,i)),this.t("itemArray",e,t),i!==null&&i.undoManager.isUndoingRedoing)return;this.jD(e,t)}}findItemPanelForData(t){return t==null||this.on===null?null:(U.Fc(t,Panel,"findItemPanelForData"),this.on.get(t))}xE(t){const e=this.F.r,i=e.length,s=t.length;let n=0,o=null;for(;n<i&&(o=e[n],!(o instanceof Panel)||o.data===null);)n++,o=e[n];if(i-n!==s)return!0;if(o===null)return s>0;let r=0;for(;n<i&&r<s;){if(o=e[n],!(o instanceof Panel)||o.data!==t[r])return!0;n++,r++}return!1}q0(){if(this.type===Panel.Spot||this.type===Panel.Auto)return Math.min(this.F.length,1);if(this.type===Panel.Link){const t=this.F,e=t.length;let i=0;for(;i<e;i++){const s=t.elt(i);if(!(s instanceof Shape)||!s.isPanelMain)return i}return i}if(this.type===Panel.Table&&this.F.length>0){const e=this.F.elt(0);if(e.isPanelMain&&e instanceof Panel&&e.gl())return 1}return 0}rebuildItemElements(){const t=this.q0();for(;this.F.length>t;)this.hi(this.F.length-1,!1);this.jD(null,this.itemArray)}jD(t,e){const i=this.q0(),s=e;if(s===null||s.length===0){for(;this.F.length>i;)this.hi(this.F.length-1,!1);return}if(this.F.length<=i){const n=s.length;for(let o=0;o<n;o++)this.fk(s[o],o,!0)}else{let n=i;for(let r=0;r<s.length;r++,n++){const l=s[r],a=n<this.F.length?this.F.elt(n):null;if(a instanceof Panel){if(a.data!==l){const h=this.MN(a.data,r),c=this.MN(l,r);let f=c!==h;if(!f){const u=this.CN(a.data,r,h);f=this.CN(l,r,c)!==u}f?(this.hi(n,!1),this.fk(l,r,!1)):a.data=l}}else this.fk(l,r,!1)}for(;n<this.F.length;)this.hi(n,!1);this.tr=null,this.NN(i,0),this.Ko()||this.f(),this.ms=null,this.isEnabledObject()||this.ck(this,!1);const o=this.part;o!==null&&(o.d0(),o.Xf(),this.Rn&&o instanceof Node&&(o.Rn=!0),o.Rn&&o instanceof Node&&(o.di=null))}}fk(t,e,i){if(t==null||e<0)return;const s=this.MN(t,e),n=this.CN(t,e,s);if(n!==null){n.Ut();const o=n.copy();if(o.WC()){const l=this.findBindingPanel();l!==null&&l.PN(!0)}U.Z(t)&&(this.on===null&&(this.on=new GMap),this.on.set(t,o));const r=e+this.q0();this.insertAt(r,o),i&&(o.ne=t,this.NN(r,e),o.ne=null),o.data=t}}bE(t){if(t<0)return;const e=t+this.q0();this.hi(e,!0),this.NN(e,t)}NN(t,e){const i=this.F;let s=t,n=e;for(;s<i.length;){const o=i.elt(s);o instanceof Panel&&o.kE(s,n),s++,n++}}kE(t,e){this.type===Panel.TableRow?this.row=t:this.type===Panel.TableColumn&&(this.column=t),this.itemIndex=e}get itemTemplate(){const t=this.itemTemplateMap;if(t!==null){const e=t.get("");if(e)return e}return Panel.WD()}set itemTemplate(t){const e=this.itemTemplate;if(e!==t){(t instanceof Part||t.isPanelMain)&&U.n("Panel.itemTemplate must not be a Part or be Panel.isPanelMain: "+t),this.itemTemplateMap===null&&(this.itemTemplateMap=new GMap),this.itemTemplateMap.set("",t),this.t("itemTemplate",e,t);const i=this.diagram;if(i!==null&&i.undoManager.isUndoingRedoing)return;this.rebuildItemElements()}}get itemTemplateMap(){return this.w!==null?this.w.L0:null}set itemTemplateMap(t){const e=this.itemTemplateMap;if(e!==t){const i=t.iterator;for(;i.next();){const n=i.value}this.Ht().L0=t,this.t("itemTemplateMap",e,t);const s=this.diagram;if(s!==null&&s.undoManager.isUndoingRedoing)return;this.rebuildItemElements()}}get itemCategoryProperty(){return this.w!==null?this.w.A0:"category"}set itemCategoryProperty(t){const e=this.itemCategoryProperty;e!==t&&(typeof t!="string"&&!U.nt(t)&&U.ri(t,"string or function",Panel,"itemCategoryProperty"),this.Ht().A0=t,this.t("itemCategoryProperty",e,t))}MN(t,e){if(t===null)return"";const i=this.itemCategoryProperty;let s="";if(U.nt(i))s=i(t);else if(typeof i=="string"&&U.Z(t)){if(i==="")return"";const n=this.diagram,o=n!==null?n.model:null;o?s=o.Tt(t,i):s=Model.Tt(t,i)}else return"";if(s===void 0)return"";if(typeof s=="string")return s;U.n("Panel.getCategoryForItemData found a non-string category for "+t+": "+s)}static JD=!1;static TN;static WD(){return Panel.TN||(Panel.TN=new Panel().add(new TextBlock().bind("text","",U.toString).theme("stroke","text"))),Panel.TN}CN(t,e,i){let s=null;const n=this.itemTemplateMap;return n!==null&&(s=n.get(i),s===null&&(s=n.get(""))),s===null&&(Panel.JD||(Panel.JD=!0,U.jt('No item template Panel found for category "'+i+'" on '+this),U.jt("  Using default item template.")),s=Panel.WD()),s}get zf(){return(this.o&1048576)!==0}set zf(t){const e=(this.o&1048576)!==0;e!==t&&(U.s(t,"boolean",Panel,"isAtomic"),this.o=this.o^1048576,this.t("isAtomic",e,t))}get isClipping(){return(this.o&2097152)!==0}set isClipping(t){const e=(this.o&2097152)!==0;e!==t&&(this.Df(),this.o=this.o^2097152,this instanceof Group&&(this.ue=null),this.f(),this.t("isClipping",e,t))}get isOpposite(){return(this.o&33554432)!==0}set isOpposite(t){const e=(this.o&33554432)!==0;e!==t&&(this.o=this.o^33554432,this.f(),this.t("isOpposite",e,t))}get isEnabled(){return(this.o&4194304)!==0}set isEnabled(t){const e=(this.o&4194304)!==0;if(e!==t){const i=this.panel===null||this.panel.isEnabledObject();this.o=this.o^4194304,this.t("isEnabled",e,t);const s=this.diagram;if(s!==null&&s.undoManager.isUndoingRedoing)return;i&&this.ck(this,t)}}ck(t,e){const i=t.enabledChanged;if(i!==null&&i(t,e),t instanceof Panel){const s=t.F.r,n=s.length;for(let o=0;o<n;o++){const r=s[o];e&&r instanceof Panel&&!r.isEnabled||this.ck(r,e)}}}get alignmentFocusName(){return this.yo}set alignmentFocusName(t){const e=this.yo;e!==t&&(this.yo=t,this.f(),this.t("alignmentFocusName",e,t))}static definePanelLayout(t,e){PanelLayout.In(t,e)}static isLayoutDefined(t){return PanelLayout.es.has(t)}static Position=PanelLayout.es.get("Position");static Horizontal=PanelLayout.es.get("Horizontal");static Vertical=PanelLayout.es.get("Vertical");static Spot=PanelLayout.es.get("Spot");static Auto=PanelLayout.es.get("Auto");static Table=PanelLayout.es.get("Table");static Viewbox=PanelLayout.es.get("Viewbox");static TableRow=PanelLayout.es.get("TableRow");static TableColumn=PanelLayout.es.get("TableColumn");static Link=PanelLayout.es.get("Link");static Grid=PanelLayout.es.get("Grid");static Graduated=PanelLayout.es.get("Graduated")}Panel.definePanelLayout=Panel.definePanelLayout;class GradPanelSettings{G0;Y0;K0;H0;Es;ss;ms;Ii;constructor(){this.G0=0,this.Y0=100,this.K0=10,this.H0=0,this.Es=null,this.ss=null,this.ms=null,this.Ii=null}copy(){const t=new GradPanelSettings;return t.G0=this.G0,t.Y0=this.Y0,t.K0=this.K0,t.H0=this.H0,t.Es=this.Es,t.ss=this.ss,t.ms=this.ms,t.Ii=this.Ii,t}}class GridPanelSettings{qd;jd;bf;O0;constructor(){this.qd=Size.aL,this.jd=Point.wn,this.bf=Size.cx,this.O0=[]}copy(){const t=new GridPanelSettings;return t.qd=this.qd.copy(),t.jd=this.jd.copy(),t.bf=this.bf.copy(),t.O0=this.O0,t}}class TablePanelSettings{Bi;Vi;j0;W0;J0;$0;I0;U0;E0;B0;z0;V0;X0;Ea;constructor(){this.Bi=[],this.Vi=[],this.j0=3,this.W0=3,this.J0=0,this.$0=0,this.I0=Margin.mm,this.U0=1,this.E0=null,this.B0=null,this.z0=1,this.V0=null,this.X0=null,this.Ea=null}copy(t){const e=new TablePanelSettings,i=this.Bi,s=i.length,n=e.Bi;for(let a=0;a<s;a++){const h=i[a];if(h===void 0)continue;const c=h.copy();c.jh(t),n[a]=c}const o=this.Vi,r=o.length,l=e.Vi;for(let a=0;a<r;a++){const h=o[a];if(h===void 0)continue;const c=h.copy();c.jh(t),l[a]=c}return e.j0=this.j0,e.W0=this.W0,e.J0=this.J0,e.$0=this.$0,e.I0=this.I0.C(),e.U0=this.U0,e.E0=this.E0,e.B0=this.B0,e.z0=this.z0,e.V0=this.V0,e.X0=this.X0,e.Ea=this.Ea,e}}var Sizing=(w=>(w[w.Default=1]="Default",w[w.None=2]="None",w[w.ProportionalExtra=3]="ProportionalExtra",w))(Sizing||{});class RowColumnDefinition{en;Z0;Ft;Zh;Qh;pe;ft;Jd;go;yl;$d;Zd;_h;Nt;Qd;Us;j;ke;Mi;constructor(t){GSet._e(this),this.en=null,this.Z0=!0,this.Ft=0,this.Mi=NaN,this.Zh=0,this.Qh=1/0,this.pe=Spot.Default,this.j=0,this.ke=0,this.ft=0,this.Us=null,this.Jd=1,this.go=1,this.yl=null,this.$d=null,this.Zd=NaN,this._h=null,this.Nt=null,this.Qd=!1,t&&(Object.assign(this,t),t.column!==void 0?(this.isRow=!1,this.index=t.column):t.row!==void 0&&(this.isRow=!0,this.index=t.row))}copy(){const t=new RowColumnDefinition;return t.Z0=this.Z0,t.Ft=this.Ft,t.Mi=this.Mi,t.Zh=this.Zh,t.Qh=this.Qh,t.pe=this.pe,t.j=this.j,t.ke=this.ke,t.ft=this.ft,t.go=this.go,t.Jd=this.Jd,this.yl===null?t.yl=null:t.yl=this.yl.C(),t.$d=this.$d,t.Zd=this.Zd,t._h=null,this._h!==null&&(t.separatorDashArray=this._h.slice()),t.Nt=this.Nt,t.Qd=this.Qd,t.Us=this.Us,t}tk(t){t.isRow?t.height!==void 0&&(this.height=t.height):t.width!==void 0&&(this.width=t.width),t.minimum!==void 0&&(this.minimum=t.minimum),t.maximum!==void 0&&(this.maximum=t.maximum),t.alignment!==void 0&&(this.alignment=t.alignment),t.stretch!==void 0&&(this.stretch=t.stretch),t.sizing!==void 0&&(this.sizing=t.sizing),t.separatorPadding!==void 0&&(this.separatorPadding=t.separatorPadding),t.separatorStroke!==void 0&&(this.separatorStroke=t.separatorStroke),t.separatorStrokeWidth!==void 0&&(this.separatorStrokeWidth=t.separatorStrokeWidth),t.separatorDashArray!==void 0&&(this._h=t.separatorDashArray),t.background!==void 0&&(this.background=t.background),t.coversSeparators!==void 0&&(this.coversSeparators=t.coversSeparators),t.Us!==void 0&&(this.Us=t.Us)}ge(t){t in Sizing?this.sizing=t:U.wr(this,t)}toString(){return"RowColumnDefinition "+(this.isRow?"(Row ":"(Column ")+this.index+") #"+GSet.ks(this)}static Default=1;static None=2;static ProportionalExtra=3;jh(t){this.en=t}computeEffectiveSpacingTop(t){let e=0;const i=this.en;if(this.index!==t){let n=this.separatorStroke;n===null&&i!==null&&(n=this.isRow?i.defaultRowSeparatorStroke:i.defaultColumnSeparatorStroke),n!==null&&(e=this.separatorStrokeWidth,isNaN(e)&&(i!==null?e=this.isRow?i.defaultRowSeparatorStrokeWidth:i.defaultColumnSeparatorStrokeWidth:e=0))}let s=this.yl;if(s===null)if(i!==null)s=i.defaultSeparatorPadding;else return e;return e+(this.isRow?s.top:s.left)}computeEffectiveSpacing(){let t=0;const e=this.en;let i=0;const s=this.isRow;if(e!==null&&e.type===Panel.Table){const o=s?e.Bi.length:e.Vi.length;for(let r=0;r<o;r++){const l=s?e.Bi[r]:e.Vi[r];if(l!==void 0&&l.j!==0){i=l.index;break}}}if(this.index!==i){let o=this.separatorStroke;o===null&&e!==null&&(o=s?e.defaultRowSeparatorStroke:e.defaultColumnSeparatorStroke),o!==null&&(t=this.separatorStrokeWidth,isNaN(t)&&(e!==null?t=s?e.defaultRowSeparatorStrokeWidth:e.defaultColumnSeparatorStrokeWidth:t=0))}let n=this.yl;if(n===null)if(e!==null)n=e.defaultSeparatorPadding;else return t;return t+(this.isRow?n.top+n.bottom:n.left+n.right)}t(t,e,i,s,n){const o=this.en;if(o!==null&&(o.raiseChangedEvent(2,t,this,e,i,s,n),this.Us!==null)){const r=o.diagram;if(r!==null&&!r.ki){const l=o.findBindingPanel();if(l!==null){const a=l.data;if(a!==null){const h=this.Us.iterator;for(;h.next();)h.value.updateSource(this,a,t,l)}}}}}get panel(){return this.en}get isRow(){return this.Z0}set isRow(t){this.Z0=t}get index(){return this.Ft}set index(t){this.Ft=t}get height(){return this.Mi}set height(t){const e=this.Mi;e!==t&&(t<0&&U.$(t,">= 0",RowColumnDefinition,"height"),this.Mi=t,this.actual=this.j,this.panel!==null&&this.panel.f(),this.t("height",e,t))}get width(){return this.Mi}set width(t){const e=this.Mi;e!==t&&(t<0&&U.$(t,">= 0",RowColumnDefinition,"width"),this.Mi=t,this.actual=this.j,this.panel!==null&&this.panel.f(),this.t("width",e,t))}get minimum(){return this.Zh}set minimum(t){const e=this.Zh;e!==t&&((t<0||!isFinite(t))&&U.$(t,">= 0",RowColumnDefinition,"minimum"),this.Zh=t,this.actual=this.j,this.panel!==null&&this.panel.f(),this.t("minimum",e,t))}get maximum(){return this.Qh}set maximum(t){const e=this.Qh;e!==t&&(t<0&&U.$(t,">= 0",RowColumnDefinition,"maximum"),this.Qh=t,this.actual=this.j,this.panel!==null&&this.panel.f(),this.t("maximum",e,t))}get alignment(){return this.pe}set alignment(t){const e=this.pe;e.equals(t)||(this.pe=t.C(),this.panel!==null&&this.panel.f(),this.t("alignment",e,t))}get stretch(){return this.go}set stretch(t){const e=this.go;e!==t&&(this.go=t,this.panel!==null&&this.panel.f(),this.t("stretch",e,t))}get separatorPadding(){return this.yl}set separatorPadding(t){typeof t=="number"&&(t=new Margin(t));const e=this.yl;(t===null||e===null||!e.equals(t))&&(t!==null&&(t=t.C()),this.yl=t,this.panel!==null&&this.panel.f(),this.t("separatorPadding",e,t))}get separatorStroke(){return this.$d}set separatorStroke(t){const e=this.$d;e!==t&&(t!==null&&Brush.Bd(t,"RowColumnDefinition.separatorStroke"),t instanceof Brush&&t.b(),this.$d=t,this.panel!==null&&this.panel.f(),this.t("separatorStroke",e,t))}get separatorStrokeWidth(){return this.Zd}set separatorStrokeWidth(t){const e=this.Zd;e!==t&&(this.Zd=t,this.panel!==null&&this.panel.f(),this.t("separatorStrokeWidth",e,t))}get separatorDashArray(){return this._h}set separatorDashArray(t){const e=this._h;if(e!==t){if(t!==null&&!Array.isArray(t)&&U.ri(t,"Array",RowColumnDefinition,"separatorDashArray:value"),t!==null){const i=t.length;let s=0;for(let n=0;n<i;n++){const o=t[n];(typeof o!="number"||!(o>=0)||!isFinite(o))&&U.n("separatorDashArray value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(e===null)return;t=null}}this._h=t,this.panel!==null&&this.panel.N(),this.t("separatorDashArray",e,t)}}get background(){return this.Nt}set background(t){const e=this.Nt;e!==t&&(t!==null&&Brush.Bd(t,"RowColumnDefinition.background"),t instanceof Brush&&t.b(),this.Nt=t,this.panel!==null&&this.panel.N(),this.t("background",e,t))}get coversSeparators(){return this.Qd}set coversSeparators(t){const e=this.Qd;e!==t&&(U.s(t,"boolean",RowColumnDefinition,"coversSeparators"),this.Qd=t,this.panel!==null&&this.panel.N(),this.t("coversSeparators",e,t))}get sizing(){return this.Jd}set sizing(t){const e=this.Jd;e!==t&&(this.Jd=t,this.panel!==null&&this.panel.f(),this.t("sizing",e,t))}rk(){if(this.sizing===1){const t=this.en;return t===null?2:this.isRow?t.rowSizing:t.columnSizing}return this.sizing}get actual(){return this.j}set actual(t){isNaN(this.Mi)?this.j=Math.max(Math.min(this.Qh,t),this.Zh):this.j=Math.max(Math.min(this.Qh,this.Mi),this.Zh)}get measured(){return this.ke}set measured(t){this.ke=t}get total(){return this.j+this.computeEffectiveSpacing()}get position(){return this.ft}set position(t){this.ft=t}bind(t,e,i,s){return s!==void 0&&(GraphObject.Q1||(GraphObject.Q1=!0,U.jt(`Warning: the fourth argument to RowColumnDefinition.bind has been deprecated -- use bindTwoWay instead.
. `+s))),this.Of(t,e,i,s),this}bindTwoWay(t,e,i,s){const n=this.Of(t,e,i,s);return s===void 0&&n.makeTwoWay(),this}theme(t,e,i,s,n){return this.Oa(t,e,i,s,n),this}themeData(t,e,i,s,n){return this.Oa(t,e,i,s,n).ofData(),this}themeObject(t,e,i,s,n,o){return this.Oa(t,e,i,s,n).ofObject(o),this}themeModel(t,e,i,s,n){return this.Oa(t,e,i,s,n).ofModel(),this}Of(t,e,i,s){let n;return typeof t=="string"?n=new Binding(t,e,i,s):n=t,this.T0(n),n}Oa(t,e,i,s,n){let o;return typeof t=="string"?o=new ThemeBinding(t,e,i,s,n):o=t,this.T0(o),o}T0(t){t.Ri=this;const e=this.panel;if(e!==null){const i=e.findBindingPanel();i!==null&&i.RD()&&U.n("Cannot add a Binding to a RowColumnDefinition that is already frozen: "+t+" on "+e)}this.Us===null&&(this.Us=new List),this.Us.add(t)}}class Shape extends GraphObject{dt;rn;_d;tc;ei;er;$o;qt;tg;eg;H;constructor(t,e){super(),this.dt=null,this.rn=null,this._d="None",this.tc="black",this.ei="black",this.er=1,this.$o=null,this.qt=null,this.tg=NaN,this.eg=NaN,this.H=null,typeof t=="string"?this.figure=t:t&&Object.assign(this,t),e&&Object.assign(this,e)}cloneProtected(t){super.cloneProtected(t),t.dt=this.dt,t.rn=this.rn,t._d=this._d,t.tc=this.tc,t.ei=this.ei,t.er=this.er,this.$o!==null&&(t.$o=this.$o.slice()),this.qt!==null&&(this.qt.xe?t.qt=this.qt:t.qt=this.qt.copy()),t.tg=this.tg,t.eg=this.eg,this.H!==null&&(t.H=this.H.copy())}ec(){return this.qt===null?this.qt=new ShapeTemplateSettings:this.qt.xe&&(this.qt=this.qt.copy()),this.qt}La(){super.La(),this.qt!==null&&(this.qt.xe=!0)}ge(t){t in GeometryStretch?this.geometryStretch=t:super.ge(t)}toString(){return"Shape("+(this.figure!=="None"?this.figure:this.toArrow!=="None"?this.toArrow:this.fromArrow)+")#"+GSet.ks(this)}PE(t,e){const i=this.pathPattern;if(i===null)return;i.ct(1/0,1/0);const s=i.measuredBounds;i.zt(0,0,s.width,s.height);const n=this.geometry;if(n===null)return;t.save(),t.beginPath();const o=U.ot();if(n.type===1)o.push(n.startX),o.push(n.startY),o.push(n.endX),o.push(n.endY),this.ig(t,e,o,i);else if(n.type===4){const r=n.figures.iterator;for(;r.next();){const l=r.value;o.length=0,o.push(l.startX),o.push(l.startY);let a=l.startX,h=l.startY,c=a,f=h;const u=l.segments.r,d=u.length;for(let m=0;m<d;m++){const g=u[m];switch(g.type){case 1:this.ig(t,e,o,i),o.length=0,o.push(g.endX),o.push(g.endY),a=g.endX,h=g.endY,c=a,f=h;break;case 2:o.push(g.endX),o.push(g.endY),a=g.endX,h=g.endY;break;case 3:G.Qn(a,h,g.point1X,g.point1Y,g.point2X,g.point2Y,g.endX,g.endY,.5,o),a=g.endX,h=g.endY;break;case 4:G.ym(a,h,g.point1X,g.point1Y,g.endX,g.endY,.5,o),a=g.endX,h=g.endY;break;case 5:{const p=g.Io(l),y=p.length;if(y===0){o.push(g.centerX),o.push(g.centerY),a=g.centerX,h=g.centerY;break}for(let x=0;x<y;x++){const b=p[x];G.Qn(a,h,b[2],b[3],b[4],b[5],b[6],b[7],.5,o),a=b[6],h=b[7]}break}case 6:{const p=g.lh(l,a,h),y=p.length;if(y===0){o.push(g.endX),o.push(g.endY),a=g.endX,h=g.endY;break}for(let x=0;x<y;x++){const b=p[x];G.Qn(a,h,b[2],b[3],b[4],b[5],b[6],b[7],.5,o),a=b[6],h=b[7]}break}default:U.n("Segment not of valid type: "+g.type)}g.isClosed&&(o.push(c),o.push(f),this.ig(t,e,o,i))}this.ig(t,e,o,i)}}else if(n.type===2)o.push(n.startX),o.push(n.startY),o.push(n.endX),o.push(n.startY),o.push(n.endX),o.push(n.endY),o.push(n.startX),o.push(n.endY),o.push(n.startX),o.push(n.startY),this.ig(t,e,o,i);else if(n.type===3){const r=new PathFigure;r.startX=n.endX,r.startY=(n.startY+n.endY)/2;const l=new PathSegment(5);l.startAngle=0,l.sweepAngle=360,l.centerX=(n.startX+n.endX)/2,l.centerY=(n.startY+n.endY)/2,l.radiusX=Math.abs(n.startX-n.endX)/2,l.radiusY=Math.abs(n.startY-n.endY)/2,r.add(l);const a=l.Io(r),h=a.length;if(h===0)o.push(l.centerX),o.push(l.centerY);else{let c=r.startX,f=r.startY;for(let u=0;u<h;u++){const d=a[u];G.Qn(c,f,d[2],d[3],d[4],d[5],d[6],d[7],.5,o),c=d[6],f=d[7]}}this.ig(t,e,o,i)}U._(o),t.restore(),t.clearContextCache(!1)}SE(t){let e=t.measuredBounds.width;return t instanceof Shape&&(e-=t.strokeWidth),e<1&&(e=1),e}ig(t,e,i,s){const n=i.length;if(n<4)return;const o=s.measuredBounds,r=Math.max(1,o.width),l=o.height;let a=i[0],h=i[1],c=0,f=0,u=0,d=0,m=0,g=0,p=0,y=0;const x=U.ot();for(let C=2;C<n;C+=2)c=i[C],f=i[C+1],u=c-a,d=f-h,u===0&&(u=.001),m=d/u,g=Math.atan2(d,u),p=Math.sqrt(u*u+d*d),x.push([u,g,m,p]),y+=p,a=c,h=f;a=i[0],h=i[1];const b=this.SE(s);let k=b;const P=r/2;let S=P!==0,T=0,N=x[T];u=N[0],g=N[1],m=N[2],p=N[3];let M=0;for(;y>=.1;){if(M===0&&(S?(k=b,k-=P,y-=P,S=!1):k=b,k===0&&(k=1)),k>y){k=y,U._(x);return}k>p?(M=k-p,k=p):M=0;let C=Math.sqrt(k*k/(1+m*m));if(u<0&&(C=-C),a+=C,h+=m*C,t.translate(a,h),t.rotate(g),t.translate(-(r/2),-(l/2)),M===0&&s.va(t,e),t.translate(r/2,l/2),t.rotate(-g),t.translate(-a,-h),y-=k,p-=k,M!==0){if(T++,T===x.length){U._(x);return}N=x[T],u=N[0],g=N[1],m=N[2],p=N[3],k=M}}U._(x)}va(t,e){const i=t instanceof SVGContext;let s=this.ei;const n=this.tc;if(s===null&&n===null)return;const o=this.dt;if(o===null)return;t.commitTransform();const r=this.actualBounds,l=this.naturalBounds;n!==null&&this.Nn(t,n,!0,!1,l,r);const a=this.part;let h=this.er;s!==null&&h===0&&a!==null&&(this.isPanelMain||a.findMainElement()===this)&&(h=a.ME()),h===0&&(s=null),s!==null&&h!==0&&(this.Nn(t,s,!1,!1,l,r),t.lineWidth=h,t.lineJoin=this.strokeJoin,t.lineCap=this.strokeCap,t.miterLimit=this.strokeMiterLimit);let c=!1;a&&e.getRenderingHint("drawShadows")&&(c=a.isShadowed),t.pl===!1&&(c=!1);let f=!0;s!==null&&(n===null||n==="transparent")&&(f=!1);let u=!1;const d=this.strokeDashArray;if(d!==null&&(u=!0,t.enableDash(d,this.strokeDashOffset)),o.type===1)t.beginPath(),t.moveTo(o.startX,o.startY),t.lineTo(o.endX,o.endY),s!==null&&t.strokeContext(),t.endPath();else if(o.type===2){const m=o.startX,g=o.startY,p=o.endX,y=o.endY,x=Math.min(m,p),b=Math.min(g,y),k=Math.abs(p-m),P=Math.abs(y-g);t.beginPath(),t.rect(x,b,k,P),n!==null&&t.fillContext(n,!1,null),s!==null&&(f&&c&&t.shadowsOff(),t.strokeContext(),f&&c&&t.shadowsOn()),t.endPath()}else if(o.type===3){const m=o.startX,g=o.startY,p=o.endX,y=o.endY,x=Math.abs(p-m)/2,b=Math.abs(y-g)/2,k=Math.min(m,p)+x,P=Math.min(g,y)+b;t.beginPath(),t.ellipse(k,P,x,b,0,0,Math.PI*2),n!==null&&t.fillContext(n,!1,null),s!==null&&(f&&c&&t.shadowsOff(),t.strokeContext(),f&&c&&t.shadowsOn()),t.endPath()}else if(o.type===4){const m=o.figures,g=m.length;for(let p=0;p<g;p++){const y=m.r[p];i?(t.beginPath(),this.$D(t,y)):y.Ji===null&&(y.Ji=new Path2D,this.$D(y.Ji,y));const x=y.isFilled;c?y.isShadowed?(x===!0&&n!=="transparent"&&n!==null&&t.fillContext(n,y.isEvenOdd,y.Ji),s!==null&&(x&&f&&t.shadowsOff(),t.stroke(y.Ji),x&&f&&t.shadowsOn())):(t.shadowsOff(),x&&n!=="transparent"&&n!==null&&t.fillContext(n,y.isEvenOdd,y.Ji),s!==null&&t.stroke(y.Ji),t.shadowsOn()):(x&&n!==null&&t.fillContext(n,y.isEvenOdd,y.Ji),s!==null&&t.stroke(y.Ji)),t.endPath(p)}}u&&t.disableDash(),this.PE(t,e)}$D(t,e){t.moveTo(e.startX,e.startY);const i=e.segments.r,s=i.length;let n=null;for(let o=0;o<s;o++){const r=i[o];switch(r.type){case 1:t.moveTo(r.endX,r.endY);break;case 2:t.lineTo(r.endX,r.endY);break;case 3:t.bezierCurveTo(r.point1X,r.point1Y,r.point2X,r.point2Y,r.endX,r.endY);break;case 4:t.quadraticCurveTo(r.point1X,r.point1Y,r.endX,r.endY);break;case 5:if(r.radiusX===r.radiusY){const l=n!==null?n.endX:e.startX,a=n!==null?n.endY:e.startY,h=Math.PI/180;t.arc(r.point1X,r.point1Y,r.radiusX,r.startAngle*h,(r.startAngle+r.sweepAngle)*h,r.sweepAngle<0,l,a)}else{const l=r.Io(e),a=l.length;if(a===0){t.lineTo(r.centerX,r.centerY);break}for(let h=0;h<a;h++){const c=l[h];h===0&&t.lineTo(c[0],c[1]),t.bezierCurveTo(c[2],c[3],c[4],c[5],c[6],c[7])}}break;case 6:{let l=0,a=0,h;if(n!==null&&n.type===5){h=n.Io(e);const f=h.length;if(f===0){t.lineTo(r.endX,r.endY);break}const u=h[f-1]||null;u!==null&&(l=u[6],a=u[7])}else l=n!==null?n.endX:e.startX,a=n!==null?n.endY:e.startY;h=r.lh(e,l,a);const c=h.length;if(c===0){t.lineTo(r.endX,r.endY);break}for(let f=0;f<c;f++){const u=h[f];t.bezierCurveTo(u[2],u[3],u[4],u[5],u[6],u[7])}break}}r.isClosed&&t.closePath(),n=r}}Af(t,e,i){if(!super.Af(t,e,i)||this.ei===null&&this.tc===null||this.dt===null||this.pathPattern!==null)return!1;const s=this.svg.getElementsByTagName("path");return this.geometry.figures.length!==s.length?!1:(t.currentPath=this.svg,this.va(t,e),t.currentPath=null,!0)}Ed(t){return this.geometry!==null&&this.geometry.figures.length>1||this.pathPattern!==null?!0:super.Ed(t)}ZC(t,e){if(t.nodeName!=="g")t.setAttributeNS(null,"filter",e);else{const i=t.getElementsByTagName("path");for(let s=0;s<i.length;s++)i[s].setAttributeNS(null,"filter",e)}}getDocumentPoint(t,e){if(e===void 0&&(e=new Point),t instanceof Spot){const i=t;i.isNoSpot()&&U.n("getDocumentPoint Spot must be a real, specific Spot, not: "+i.toString());const s=this.naturalBounds,n=this.strokeWidth;return e.e(i.x*(s.width+n)-n/2+s.x+i.offsetX,i.y*(s.height+n)-n/2+s.y+i.offsetY),this._s.wt(e),e}else return e.set(t),this._s.wt(e),e}getDocumentBounds(t){t===void 0&&(t=new Rect);const e=this.naturalBounds,i=this._s,s=Rect.O(e.x,e.y,e.width,e.height),n=this.strokeWidth;s.inflate(n/2,n/2);const o=Point.O(s.x,s.y).T(i);return t.e(o.x,o.y,0,0),o.e(s.right,s.y).T(i),t.he(o.x,o.y,0,0),o.e(s.right,s.bottom).T(i),t.he(o.x,o.y,0,0),o.e(s.x,s.bottom).T(i),t.he(o.x,o.y,0,0),Rect.i(s),Point.i(o),t}Aa(t,e){const i=this.geometry;if(i===null||this.fill===null&&this.stroke===null)return!1;const s=i.bounds;let n=this.strokeWidth/2;i.type===1&&!e&&(n+=2);const o=Rect.l();if(o.h(s),o.inflate(n+2,n+2),!o.containsPoint(t))return Rect.i(o),!1;const r=n+1e-4;if(i.type===1){if(this.stroke===null)return!1;const l=(i.startX-i.endX)*(t.x-i.endX)+(i.startY-i.endY)*(t.y-i.endY),a=(i.endX-i.startX)*(t.x-i.startX)+(i.endY-i.startY)*(t.y-i.startY);return l<0||a<0?!1:(Rect.i(o),G.Ge(i.startX,i.startY,i.endX,i.endY,n,t.x,t.y))}else if(i.type===2){const l=i.startX,a=i.startY,h=i.endX,c=i.endY;if(o.x=Math.min(l,h),o.y=Math.min(a,c),o.width=Math.abs(h-l),o.height=Math.abs(c-a),this.fill===null){if(o.inflate(-r,-r),o.containsPoint(t))return Rect.i(o),!1;o.inflate(r,r)}this.stroke!==null&&o.inflate(n,n);const f=o.containsPoint(t);return Rect.i(o),f}else if(i.type===3){const l=i.startX,a=i.startY,h=i.endX,c=i.endY;let f=Math.min(l,h),u=Math.min(a,c);const d=Math.abs(h-l),m=Math.abs(c-a);let g=d/2,p=m/2;if(f=t.x-(f+g),u=t.y-(u+p),this.fill===null){if(g-=r,p-=r,g<=0||p<=0)return Rect.i(o),!1;if(f*f/(g*g)+u*u/(p*p)<=1)return Rect.i(o),!1;g+=r,p+=r}return this.stroke!==null&&(g+=r,p+=r),Rect.i(o),g<=0||p<=0?!1:f*f/(g*g)+u*u/(p*p)<=1}else{if(i.type===4)return Rect.i(o),this.fill===null?i.CL(t.x,t.y,n):i.JP(t,n,this.strokeWidth>1,e);U.n("Unknown Geometry type: "+i.type)}}Od(t,e,i,s){const n=this.desiredSize,o=this.er;t=Math.max(t,0),e=Math.max(e,0);let r;if(this.rn!==null)r=this.geometry.bounds;else{const g=this.figure;let p=Shape.LN[g];if(p===void 0){let y=G._n[g];typeof y=="string"&&(y=G._n[y]),U.nt(y)?(p=y(null,100,100),Shape.LN[g]=p):U.n("Unsupported Figure: "+g)}r=p.bounds}let l=r.width,a=r.height,h=r.width,c=r.height;switch(this.sn(!0)){case 0:i=0,s=0;break;case 2:h=Math.max(t-o,0),c=Math.max(e-o,0);break;case 5:h=Math.max(t-o,0),s=0;break;case 4:i=0,c=Math.max(e-o,0);break}isFinite(n.width)&&(h=n.width),isFinite(n.height)&&(c=n.height);const u=this.maxSize,d=this.minSize;i=Math.max(i-o,d.width),s=Math.max(s-o,d.height),h=Math.min(u.width,h),c=Math.min(u.height,c),h=isFinite(h)?Math.max(i,h):Math.max(l,i),c=isFinite(c)?Math.max(s,c):Math.max(a,s);const m=this.hM();switch(m){case 0:break;case 2:l=h,a=c;break;case 6:{let g=Math.min(h/l,c/a);isFinite(g)||(g=1),l=l*g,a=a*g;break}default:U.n(m+" is not a valid geometryStretch.")}if(this.rn!==null){l===0&&(l=.001),a===0&&(a=.001);const g=this.rn.OR(l,a);this.dt=g}else(this.dt===null||!G.G(this.dt.Ic,t-o)||!G.G(this.dt.Ec,e-o))&&(this.dt=Shape.CE(this,l,a));r=this.dt.bounds,t===1/0||e===1/0?this.fo(r.x-o/2,r.y-o/2,t===0&&l===0?0:r.width+o,e===0&&a===0?0:r.height+o):this.fo(-(o/2),-(o/2),h+o,c+o),n.isReal()?(h=n.width,c=n.height,h=Math.min(u.width,h),c=Math.min(u.height,c),h=Math.max(d.width,h),c=Math.max(d.height,c),this.Je.e(0,0,h,c)):this.Je.h(r)}hM(){const t=this.geometryStretch;return this.rn!==null?t===1?2:t:t===1?Shape.LN[this.figure].defaultStretch:t}Da(t,e,i,s){this.commonArrange(t,e,i,s)}getNearestIntersectionPoint(t,e,i){return this.Tf(t.x,t.y,e.x,e.y,i)}Tf(t,e,i,s,n){const o=this.T,r=1/(o.m11*o.m22-o.m12*o.m21),l=o.m22*r,a=-o.m12*r,h=-o.m21*r,c=o.m11*r,f=r*(o.m21*o.dy-o.m22*o.dx),u=r*(o.m12*o.dx-o.m11*o.dy),d=t*l+e*h+f,m=t*a+e*c+u,g=i*l+s*h+f,p=i*a+s*c+u,y=this.er/2;let x=this.dt;x===null&&(this.ct(1/0,1/0),x=this.dt);const b=x.bounds;let k=!1;if(x.type===1)if(this.strokeWidth<=1.5)k=G.Ms(x.startX,x.startY,x.endX,x.endY,d,m,g,p,n);else{let P=0,S=0;if(x.startX===x.endX)P=y,S=0;else{const L=(x.endY-x.startY)/(x.endX-x.startX);S=y/Math.sqrt(1+L*L),P=S*L}const T=U.ot();let N=new Point;G.Ms(x.startX+P,x.startY+S,x.endX+P,x.endY+S,d,m,g,p,N)&&T.push(N),N=new Point,G.Ms(x.startX-P,x.startY-S,x.endX-P,x.endY-S,d,m,g,p,N)&&T.push(N),N=new Point,G.Ms(x.startX+P,x.startY+S,x.startX-P,x.startY-S,d,m,g,p,N)&&T.push(N),N=new Point,G.Ms(x.endX+P,x.endY+S,x.endX-P,x.endY-S,d,m,g,p,N)&&T.push(N);const M=T.length;if(M===0)return U._(T),!1;k=!0;let C=1/0;for(let L=0;L<M;L++){const A=T[L],D=(A.x-d)**2+(A.y-m)**2;D<C&&(C=D,n.x=A.x,n.y=A.y)}U._(T)}else if(x.type===2)k=G.Bl(b.x-y,b.y-y,b.x+b.width+y,b.y+b.height+y,d,m,g,p,n);else if(x.type===3){const P=Rect.O(b.x,b.y,b.width,b.height).inflate(y,y);k=this.NE(P,d,m,g,p,n),Rect.i(P)}else if(x.type===4){let P=0,S=0,T=0,N=0;const M=Point.l();let C=g-d,L=p-m,A=C*C+L*L,D=d,F=m;if(A>0&&b.contains(D,F)&&(M.x=D,M.y=F,this.containsPoint(M)))for(C!==0&&Math.abs(C)<.5?(L*=.5/C,C=.5):L!==0&&Math.abs(L)<.5&&(C*=.5/L,L=.5),D-=C,F-=L;b.contains(D,F);)D-=C,F-=L;const v=.6;n.x=g,n.y=p;for(let X=0;X<x.figures.count;X++){const E=x.figures.r[X],Y=E.isFilled?D:d,V=E.isFilled?F:m,H=E.segments;P=E.startX,S=E.startY;let q=P,W=S;for(let Z=0;Z<H.count;Z++){const B=H.r[Z],$=B.type;T=B.endX,N=B.endY;let J=!1;switch($){case 1:q=T,W=N;break;case 2:J=this.uk(P,S,T,N,Y,V,g,p,M);break;case 3:{J=G.wm(P,S,B.point1X,B.point1Y,B.point2X,B.point2Y,T,N,Y,V,g,p,v,M);break}case 4:{J=G.wm(P,S,P+2/3*(B.point1X-P),S+2/3*(B.point1Y-S),T+2/3*(B.point1X-T),N+2/3*(B.point1Y-N),T,N,Y,V,g,p,v,M);break}case 5:case 6:{const tt=B.type===5?B.Io(E):B.lh(E,P,S),K=tt.length;if(K===0){J=this.uk(P,S,B.type===5?B.centerX:B.endX,B.type===5?B.centerY:B.endY,Y,V,g,p,M);break}let I=null;for(let j=0;j<K;j++){if(I=tt[j],j===0&&this.uk(P,S,I[0],I[1],Y,V,g,p,M)){const Q=this.dk(Y,V,M,A,n);Q<A&&(A=Q,k=!0)}if(G.wm(I[0],I[1],I[2],I[3],I[4],I[5],I[6],I[7],Y,V,g,p,v,M)){const Q=this.dk(Y,V,M,A,n);Q<A&&(A=Q,k=!0)}}T=I[6],N=I[7];break}default:U.n("Unknown Segment type: "+$)}if(P=T,S=N,J){const tt=this.dk(Y,V,M,A,n);tt<A&&(A=tt,k=!0)}if(B.isClosed&&(T=q,N=W,this.uk(P,S,T,N,Y,V,g,p,M))){const tt=this.dk(Y,V,M,A,n);tt<A&&(A=tt,k=!0)}}}let R=i-t,O=s-e;const z=Math.sqrt(R*R+O*O);z!==0&&(R/=z,O/=z),n.x-=R*y,n.y-=O*y,Point.i(M)}else U.n("Unknown Geometry type: "+x.type);return k?(this.T.wt(n),!0):!1}dk(t,e,i,s,n){const o=i.x-t,r=i.y-e,l=o*o+r*r;return l<s?(n.x=i.x,n.y=i.y,l):s}uk(t,e,i,s,n,o,r,l,a){if(G.G(t,i)&&G.G(e,s)||G.G(n,r)&&G.G(o,l))return!1;let h=!1;const c=(n-r)*(e-s)-(o-l)*(t-i);if(c===0)return!1;if(a.x=((n*l-o*r)*(t-i)-(n-r)*(t*s-e*i))/c,a.y=((n*l-o*r)*(e-s)-(o-l)*(t*s-e*i))/c,(t>i?t-i:i-t)<(e>s?e-s:s-e)){const f=e<s?e:s,u=e<s?s:e;(a.y>f||G.G(a.y,f))&&(a.y<u||G.G(a.y,u))&&(h=!0)}else{const f=t<i?t:i,u=t<i?i:t;(a.x>f||G.G(a.x,f))&&(a.x<u||G.G(a.x,u))&&(h=!0)}return h}TE(t,e,i){return this.pickable===!1?!1:(i.Rc(this.T),e?this.LE(t,i):this.containedInRect(t,i))}containedInRect(t,e){if(e===void 0)return t.containsRect(this.actualBounds);let i=this.dt;i===null&&(this.ct(1/0,1/0),i=this.dt);const s=i.bounds,n=this.strokeWidth/2;let o=!1;const r=Point.l();return r.e(s.x-n,s.y-n),t.containsPoint(e.wt(r))&&(r.e(s.x-n,s.bottom+n),t.containsPoint(e.wt(r))&&(r.e(s.right+n,s.bottom+n),t.containsPoint(e.wt(r))&&(r.e(s.right+n,s.y-n),t.containsPoint(e.wt(r))&&(o=!0)))),Point.i(r),o}intersectsRect(t,e){if(this.containedInRect(t,e)||e===void 0&&(e=this.T,t.containsRect(this.actualBounds)))return!0;const i=Transform.l();i.set(e),i.mx();const s=t.left,n=t.right,o=t.top,r=t.bottom,l=Point.l();if(l.e(s,o),i.wt(l),this.Aa(l,!0))return Point.i(l),!0;if(l.e(n,o),i.wt(l),this.Aa(l,!0))return Point.i(l),!0;if(l.e(s,r),i.wt(l),this.Aa(l,!0))return Point.i(l),!0;if(l.e(n,r),i.wt(l),this.Aa(l,!0))return Point.i(l),!0;const a=Point.l(),h=Point.l();i.set(e),i.gL(this.T),i.mx(),a.x=n,a.y=o,a.T(i),l.x=s,l.y=o,l.T(i);let c=!1;return this.ic(l,a,h)?c=!0:(l.x=n,l.y=r,l.T(i),this.ic(l,a,h)?c=!0:(a.x=s,a.y=r,a.T(i),this.ic(l,a,h)?c=!0:(l.x=s,l.y=o,l.T(i),this.ic(l,a,h)&&(c=!0)))),Point.i(l),Transform.i(i),Point.i(a),Point.i(h),c}ic(t,e,i){if(!this.getNearestIntersectionPoint(t,e,i))return!1;const s=t.x,n=t.y,o=e.x,r=e.y,l=i.x,a=i.y;if(s===o){let h=0,c=0;return n<r?(h=n,c=r):(h=r,c=n),a>=h&&a<=c}else{let h=0,c=0;return s<o?(h=s,c=o):(h=o,c=s),l>=h&&l<=c}}LE(t,e){if(this.containedInRect(t,e)||e===void 0&&(e=this.T,t.containsRect(this.actualBounds)))return!0;const i=t.left,s=t.right,n=t.top,o=t.bottom,r=Point.l(),l=Point.l(),a=Point.l(),h=Transform.l();h.set(e),h.gL(this.T),h.mx(),l.x=s,l.y=n,l.T(h),r.x=i,r.y=n,r.T(h);let c=!1;return this.ic(r,l,a)?c=!0:(r.x=s,r.y=o,r.T(h),this.ic(r,l,a)?c=!0:(l.x=i,l.y=o,l.T(h),this.ic(r,l,a)?c=!0:(r.x=i,r.y=n,r.T(h),this.ic(r,l,a)&&(c=!0)))),Transform.i(h),Point.i(r),Point.i(l),Point.i(a),c}CD(t,e,i){if(i&&this.fill!==null&&this.Aa(t,!0))return!0;let s=t.distanceSquaredPoint(e);const n=s;this.strokeWidth>1.5&&(s=this.strokeWidth/2+Math.sqrt(s),s*=s);let o=this.dt;if(o===null&&(this.ct(1/0,1/0),o=this.dt,o===null))return!1;if(!i){const f=o.bounds,u=f.x,d=f.y,m=f.x+f.width,g=f.y+f.height;if(Point.distanceSquared(t.x,t.y,u,d)<=s&&Point.distanceSquared(t.x,t.y,m,d)<=s&&Point.distanceSquared(t.x,t.y,u,g)<=s&&Point.distanceSquared(t.x,t.y,m,g)<=s)return!0}function r(f,u){const d=f.length;for(let m=0;m<d;m+=2)if(u.distanceSquared(f[m],f[m+1])>s)return!0;return!1}const l=o.startX,a=o.startY,h=o.endX,c=o.endY;if(o.type===1){const f=Point.distanceLineSegmentSquared(t.x,t.y,l,a,h,c),u=(h-l)*(t.x-l)+(c-a)*(t.y-a),d=(l-h)*(t.x-h)+(a-c)*(t.y-c),m=u>=0&&d>=0?s:n;return f<=m}else if(o.type===2){let f=!1;return i&&(f=Point.distanceLineSegmentSquared(t.x,t.y,l,a,l,c)<=s||Point.distanceLineSegmentSquared(t.x,t.y,l,a,h,a)<=s||Point.distanceLineSegmentSquared(t.x,t.y,h,a,h,c)<=s||Point.distanceLineSegmentSquared(t.x,t.y,l,c,h,c)<=s),f}else if(o.type===3){const f=(l+h)/2,u=(a+c)/2,d=t.x-f,m=t.y-u,g=Math.abs(h-l)/2,p=Math.abs(c-a)/2;if(g===0||p===0)return Point.distanceLineSegmentSquared(t.x,t.y,l,a,h,c)<=s;if(i){const y=G.CR(g,p,d,m);return y*y<=s}else return!(Point.distanceSquared(d,m,-g,0)>=s||Point.distanceSquared(d,m,0,-p)>=s||Point.distanceSquared(d,m,0,p)>=s||Point.distanceSquared(d,m,g,0)>=s)}else if(o.type===4){const f=o.bounds,u=f.x,d=f.y,m=f.x+f.width,g=f.y+f.height;if((t.x>m||t.x<u||t.y>g||t.y<d)&&Point.distanceLineSegmentSquared(t.x,t.y,u,d,u,g)>s&&Point.distanceLineSegmentSquared(t.x,t.y,u,d,m,d)>s&&Point.distanceLineSegmentSquared(t.x,t.y,m,g,u,g)>s&&Point.distanceLineSegmentSquared(t.x,t.y,m,g,m,d)>s)return!1;const p=Math.sqrt(s);if(i){if(this.fill===null?o.CL(t.x,t.y,p):o.JP(t,p,!0,!1))return!0}else{const y=o.figures;for(let x=0;x<y.count;x++){const b=y.r[x];let k=b.startX,P=b.startY;if(t.distanceSquared(k,P)>s)return!1;const S=b.segments.r,T=S.length;for(let N=0;N<T;N++){const M=S[N];switch(M.type){case 1:case 2:if(k=M.endX,P=M.endY,t.distanceSquared(k,P)>s)return!1;break;case 3:{const C=U.ot();G.Qn(k,P,M.point1X,M.point1Y,M.point2X,M.point2Y,M.endX,M.endY,.8,C);const L=r(C,t);if(U._(C),L||(k=M.endX,P=M.endY,t.distanceSquared(k,P)>s))return!1;break}case 4:{const C=U.ot();G.ym(k,P,M.point1X,M.point1Y,M.endX,M.endY,.8,C);const L=r(C,t);if(U._(C),L||(k=M.endX,P=M.endY,t.distanceSquared(k,P)>s))return!1;break}case 5:case 6:{const C=M.type===5?M.Io(b):M.lh(b,k,P),L=C.length;if(L===0){if(k=M.type===5?M.centerX:M.endX,P=M.type===5?M.centerY:M.endY,t.distanceSquared(k,P)>s)return!1;break}let A=null;const D=U.ot();for(let F=0;F<L;F++)if(A=C[F],D.length=0,G.Qn(A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7],.8,D),r(D,t))return U._(D),!1;U._(D),A!==null&&(k=A[6],P=A[7]);break}default:U.n("Unknown Segment type: "+M.type)}}}return!0}}return!1}NE(t,e,i,s,n,o){if(t.width===0)return G.Ms(t.x,t.y,t.x,t.y+t.height,e,i,s,n,o);if(t.height===0)return G.Ms(t.x,t.y,t.x+t.width,t.y,e,i,s,n,o);{const r=t.width/2,l=t.height/2,a=t.x+r,h=t.y+l;let c=9999;if(e!==s&&(c=(i-n)/(e-s)),Math.abs(c)<9999){const f=i-h-c*(e-a);if(r*r*(c*c)+l*l-f*f<0)return o.x=NaN,o.y=NaN,!1;const u=Math.sqrt(r*r*(c*c)+l*l-f*f),d=(-(r*r*c*f)+r*l*u)/(l*l+r*r*(c*c))+a,m=(-(r*r*c*f)-r*l*u)/(l*l+r*r*(c*c))+a,g=c*(d-a)+f+h,p=c*(m-a)+f+h,y=(e-d)**2+(i-g)**2,x=(e-m)**2+(i-p)**2;y<x?(o.x=d,o.y=g):(o.x=m,o.y=p)}else{const f=l*l,u=r*r,d=e-a,m=f-f/u*(d*d);if(m<0)return o.x=NaN,o.y=NaN,!1;const g=Math.sqrt(m),p=h+g,y=h-g,x=Math.abs(p-i),b=Math.abs(y-i);x<b?(o.x=e,o.y=p):(o.x=e,o.y=y)}return!0}}pE(){return this.er/2*this.strokeMiterLimit*this.getDocumentScale()}get geometry(){return this.dt!==null?this.dt:this.rn}set geometry(t){const e=this.dt,i=this.rn;if(e===t)return;t!==null?(this.dt=t.b(),this.rn=this.dt):(this.dt=null,this.rn=null);const s=this.part;if(s!==null&&s.Xf(),this.f(),this.t("geometry",e||i,t),this.Nf()){const n=this.part;n!==null&&this.qh(n,"geometryString")}}get geometryString(){return this.geometry===null?"":this.geometry.toString()}set geometryString(t){const e=Geometry.parse(t),i=e.normalize();this.geometry=e;const s=Point.O(-i.x,-i.y);this.position=s,Point.i(s)}get isGeometryPositioned(){return(this.o&1048576)!==0}set isGeometryPositioned(t){const e=(this.o&1048576)!==0;e!==t&&(this.o=this.o^1048576,this.f(),this.t("isGeometryPositioned",e,t))}fi(){this.dt=null}get fill(){return this.tc}set fill(t){const e=this.tc;e!==t&&(t!==null&&Brush.Bd(t,"Shape.fill"),t instanceof Brush&&t.b(),this.tc=t,this.N(),this.t("fill",e,t))}get stroke(){return this.ei}set stroke(t){const e=this.ei;e!==t&&(t!==null&&Brush.Bd(t,"Shape.stroke"),t instanceof Brush&&t.b(),this.ei=t,this.N(),this.t("stroke",e,t))}get strokeWidth(){return this.er}set strokeWidth(t){const e=this.er;if(e!==t)if(t>=0){this.er=t,this.f();const i=this.part;i!==null&&i.Xf(),this.t("strokeWidth",e,t)}else U.$(t,"value >= 0",Shape,"strokeWidth:value")}e0(){return this.er}get strokeCap(){return this.qt!==null?this.qt.Q0:"butt"}set strokeCap(t){const e=this.strokeCap;e!==t&&(typeof t=="string"&&(t==="butt"||t==="round"||t==="square")?(this.ec().Q0=t,this.N(),this.t("strokeCap",e,t)):U.$(t,'"butt", "round", or "square"',Shape,"strokeCap"))}get strokeJoin(){return this.qt!==null?this.qt._0:"miter"}set strokeJoin(t){const e=this.strokeJoin;e!==t&&(typeof t=="string"&&(t==="miter"||t==="bevel"||t==="round")?(this.ec()._0=t,this.N(),this.t("strokeJoin",e,t)):U.$(t,'"miter", "bevel", or "round"',Shape,"strokeJoin"))}get strokeMiterLimit(){return this.qt!==null?this.qt.ty:10}set strokeMiterLimit(t){const e=this.strokeMiterLimit;if(e!==t&&t>=1){this.ec().ty=t,this.N();const i=this.part;i!==null&&i.Xf(),this.t("strokeMiterLimit",e,t)}}get strokeDashArray(){return this.$o}set strokeDashArray(t){const e=this.$o;if(e!==t){if(t!==null&&!Array.isArray(t)&&U.ri(t,"Array",Shape,"strokeDashArray:value"),t!==null){const i=t.length;let s=0;for(let n=0;n<i;n++){const o=t[n];(!(o>=0)||!isFinite(o))&&U.n("strokeDashArray:value "+o+" at index "+n+" must be a positive number or zero."),s+=o}if(s===0){if(e===null)return;t=null}}this.$o=t,this.N(),this.t("strokeDashArray",e,t)}}get strokeDashOffset(){return this.qt!==null?this.qt.Ia:0}set strokeDashOffset(t){const e=this.strokeDashOffset;e!==t&&t>=0&&(this.ec().Ia=t,this.N(),this.t("strokeDashOffset",e,t))}get figure(){return this._d}set figure(t){const e=this._d;if(e!==t){let i=G._n[t];if(U.nt(i)?i=t:(i=G._n[t.toLowerCase()],(!i||typeof i=="function")&&U.n("Unknown Shape.figure: "+t)),e!==i){const s=this.part;s!==null&&s.Xf(),this._d=i,this.rn=null,this.fi(),this.f(),this.t("figure",e,i)}}}get toArrow(){return this.Et!==null?this.Et.ey:"None"}set toArrow(t){const e=this.toArrow;if(t===!0?t="Standard":t===!1&&(t=""),e!==t){const i=Shape.ZD(t);i===null?U.n("Unknown Shape.toArrow: "+t):e!==i&&(this.Et===null&&(this.Et=new LinkElementSettings),this.Et.ey=i,this.rn=null,this.fi(),this.f(),this.QD(i),this.t("toArrow",e,i))}}get fromArrow(){return this.Et!==null?this.Et.iy:"None"}set fromArrow(t){const e=this.fromArrow;if(t===!0?t="Standard":t===!1&&(t=""),e!==t){const i=Shape.ZD(t);i===null?U.n("Unknown Shape.fromArrow: "+t):e!==i&&(this.Et===null&&(this.Et=new LinkElementSettings),this.Et.iy=i,this.rn=null,this.fi(),this.f(),this.QD(i),this.t("fromArrow",e,i))}}QD(t){const e=this.diagram;e!==null&&e.undoManager.isUndoingRedoing||(this.zI(),this.toArrow!=="None"?(this.segmentIndex=-1,this.alignmentFocus=Spot.Right):this.fromArrow!=="None"&&(this.segmentIndex=0,this.alignmentFocus=Spot.Left))}get spot1(){return this.qt!==null?this.qt.to:Spot.Default}set spot1(t){const e=this.spot1;e.equals(t)||(t=t.C(),this.ec().to=t,this.f(),this.t("spot1",e,t))}get spot2(){return this.qt!==null?this.qt.eo:Spot.Default}set spot2(t){const e=this.spot2;e.equals(t)||(t=t.C(),this.ec().eo=t,this.f(),this.t("spot2",e,t))}get parameter1(){return this.tg}set parameter1(t){const e=this.tg;e!==t&&(this.tg=t,this.fi(),this.f(),this.t("parameter1",e,t))}get parameter2(){return this.eg}set parameter2(t){const e=this.eg;e!==t&&(this.eg=t,this.fi(),this.f(),this.t("parameter2",e,t))}get naturalBounds(){return this.Je}rE(){const t=this.desiredSize;if(!t.isReal()&&this.dt!==null){const e=this.dt.bounds;this.Je.h(e)}else this.Je.e(0,0,t.width,t.height)}get pathPattern(){return this.qt!==null?this.qt.ny:null}set pathPattern(t){const e=this.pathPattern;e!==t&&(this.ec().ny=t,this.N(),this.t("pathPattern",e,t))}get geometryStretch(){return this.qt!==null?this.qt.ly:1}set geometryStretch(t){const e=this.geometryStretch;e!==t&&(this.ec().ly=t,this.f(),this.t("geometryStretch",e,t))}get interval(){return this.H!==null?this.H.Yf:1}set interval(t){const e=this.interval;if(t=Math.round(t),e!==t&&t!==0&&isFinite(t)){this.H===null&&(this.H=new GradElementSettings),this.H.Yf=t;const i=this.panel;if(i!==null){i.ms=null,i.f();const s=this.diagram;s!==null&&i===s.grid&&s.Sd()}this.t("interval",e,t)}}get graduatedStart(){return this.H!==null?this.H.Kf:0}set graduatedStart(t){const e=this.graduatedStart;e!==t&&(t<0?t=0:t>1&&(t=1),this.H===null&&(this.H=new GradElementSettings),this.H.Kf=t,this.f(),this.t("graduatedStart",e,t))}get graduatedEnd(){return this.H!==null?this.H.Hf:1}set graduatedEnd(t){const e=this.graduatedEnd;e!==t&&(t<0?t=0:t>1&&(t=1),this.H===null&&(this.H=new GradElementSettings),this.H.Hf=t,this.f(),this.t("graduatedEnd",e,t))}get graduatedSkip(){return this.H!==null?this.H.qf:null}set graduatedSkip(t){const e=this.graduatedSkip;e!==t&&(t!==null&&U.S(t,Shape,"graduatedSkip"),this.H===null&&(this.H=new GradElementSettings),this.H.qf=t,this.f(),this.t("graduatedSkip",e,t))}polygonContainsRect(t){const e=this;if(!e.part||!e.part.actualBounds.containsRect(t))return!1;const i=e.geometry;if(!i)return!1;const s=t.x,n=t.y,o=t.width,r=t.height,l=Point.l();if(l.x=s,l.y=n,e.getLocalPoint(l,l),!i.containsPoint(l)||o>0&&r>0&&(l.x=s+o,l.y=n+r,e.getLocalPoint(l,l),!i.containsPoint(l))||o>0&&(l.x=s+o,l.y=n,e.getLocalPoint(l,l),!i.containsPoint(l))||r>0&&(l.x=s,l.y=n+r,e.getLocalPoint(l,l),!i.containsPoint(l))||i.type===1)return!1;if(i.type===4){const a=i.figures.iterator;for(;a.next();){const h=a.value;if(!h.isFilled)continue;l.x=h.startX,l.y=h.startY,e.getDocumentPoint(l,l);let c=l.x,f=l.y,u=c,d=f,m=c,g=f;const p=h.segments.iterator;for(;p.next();){const y=p.value;if(l.x=y.endX,l.y=y.endY,e.getDocumentPoint(l,l),m=l.x,g=l.y,y.type===1)c=m,f=g;else if(y.type!==5&&(Rect.intersectsLineSegment(s,n,o,r,u,d,m,g)||y.isClosed&&Rect.intersectsLineSegment(s,n,o,r,m,g,c,f)))return!1;u=m,d=g}}}return Point.i(l),!0}static CE(t,e,i){let n=null;if(t.toArrow!=="None")n=Shape.En[t.toArrow];else if(t.fromArrow!=="None")n=Shape.En[t.fromArrow];else{let o=G._n[t.figure];typeof o=="string"&&(o=G._n[o]),o===void 0&&U.n("Unknown Shape.figure: "+t.figure),n=o(t,e,i),n.Ic=e,n.Ec=i}if(n===null){const o=G._n.Rectangle;U.nt(o)&&(n=o(t,e,i))}return n}static getFigureGenerators(){const t=new GMap;for(const e in G._n){if(e===e.toLowerCase())continue;const i=G._n[e];t.set(e,i)}return t.b(),t}static defineFigureGenerator(t,e){U.s(t,"string",Shape,"defineFigureGenerator:name"),typeof e=="string"||U.S(e,Shape,"defineFigureGenerator:func");const i=t.toLowerCase(),s=G._n;s[t]=e,s[i]=t}static isFigureDefined(t){return t in G._n}static getArrowheadGeometries(){const t=new GMap;for(const e in G.bm)if(Shape.En[e]===void 0){const i=Geometry.parse(G.bm[e],!1);Shape.En[e]=i;const s=e.toLowerCase();s!==e&&(Shape.En[s]=e)}for(const e in Shape.En){if(e===e.toLowerCase())continue;const i=Shape.En[e];i instanceof Geometry&&t.set(e,i)}return t.b(),t}static defineArrowheadGeometry(t,e){U.s(t,"string",Shape,"defineArrowheadGeometry:name");let i=null;typeof e=="string"?(U.s(e,"string",Shape,"defineArrowheadGeometry:pathstr"),i=Geometry.parse(e,!1)):i=e;const s=t.toLowerCase();(s==="none"||t===s)&&U.n("Shape.defineArrowheadGeometry name must not be empty or None or all-lower-case: "+t);const n=Shape.En;n[t]=i,n[s]=t}static isArrowheadDefined(t){return Shape.En.has(t)}static En=new PropertyCollection;static LN=new PropertyCollection;static ZD(t){let e=Shape.En[t];if(e===void 0){const i=t.toLowerCase();if(i==="none")return"None";if(e=Shape.En[i],e===void 0){let s=null;for(const n in G.bm)if(n.toLowerCase()===i){s=n;break}if(s!==null){const n=Geometry.parse(G.bm[s],!1);return Shape.En[s]=n,i!==s&&(Shape.En[i]=s),s}}}return typeof e=="string"?e:e instanceof Geometry?t:null}}class ShapeTemplateSettings{xe;Q0;_0;ty;Ia;ny;ly;to;eo;constructor(){this.xe=!1,this.Q0="butt",this._0="miter",this.ty=10,this.Ia=0,this.ny=null,this.ly=1,this.to=Spot.Default,this.eo=Spot.Default}copy(){const t=new ShapeTemplateSettings;return t.Q0=this.Q0,t._0=this._0,t.ty=this.ty,t.Ia=this.Ia,t.ny=this.ny,t.ly=this.ly,t.to=this.to.C(),t.eo=this.eo.C(),t}}var Wrap=(w=>(w[w.None=0]="None",w[w.Fit=1]="Fit",w[w.DesiredSize=2]="DesiredSize",w[w.BreakAll=3]="BreakAll",w))(Wrap||{}),TextOverflow=(w=>(w[w.Clip=0]="Clip",w[w.Ellipsis=1]="Ellipsis",w))(TextOverflow||{}),TextFormat=(w=>(w[w.Trim=0]="Trim",w[w.None=1]="None",w))(TextFormat||{});class TextBlock extends GraphObject{me;ei;Un;Ci;be;i0;sg;H;et;Ql;wo;Bn;zi;Pe;Vn;constructor(t,e){return super(),TextBlock.R0===!1&&(TextBlock.R0=!0,TextBlock.gs=Diagram.isUsingDOM()?new CanvasSurface(null).de:null),this.o|=2097152,this.me="",this.ei="black",this.Un="13px sans-serif",this.Ci=0,this.be=0,this.i0=0,this.sg=null,this.H=null,this.et=null,this.Ql=0,this.wo=null,this.Bn=0,this.zi=null,this.Pe=null,this.Vn=null,typeof t=="string"?this.text=t:t&&Object.assign(this,t),e&&Object.assign(this,e),this}cloneProtected(t){super.cloneProtected(t),t.me=this.me,t.ei=this.ei,t.Un=this.Un,t.Ci=this.Ci,t.be=this.be,t.i0=this.i0,t.sg=this.sg,this.H!==null&&(t.H=this.H.copy()),this.et!==null&&(this.et.xe?t.et=this.et:t.et=this.et.copy()),t.Ql=this.Ql,t.wo=this.wo,t.Bn=this.Bn,t.zi=this.zi,t.Pe=this.Pe,t.Vn=this.Vn}Bs(){return this.et===null?this.et=new TextBlockTemplateSettings:this.et.xe&&(this.et=this.et.copy()),this.et}La(){super.La(),this.et!==null&&(this.et.xe=!0)}dE(t){this.o=t.o|2048|4096,this.ie=t.opacity,this.Nt=t.background,this.ds=t.desiredSize.C(),this.minSize=t.minSize.C(),this.maxSize=t.maxSize.C(),t.Le!==null?this.Le=t.Le.copy():this.Le=null,this.it=t.scale,this.Yt=t.angle,this.stretch=t.stretch,this.ul=t.margin.C(),this.pe=t.alignment.C(),this.vd=t.alignmentFocus.C(),this.segmentFraction=t.segmentFraction,this.segmentOffset=t.segmentOffset.C(),this.segmentOrientation=t.segmentOrientation,t.ue!==null&&(this.ue=t.ue.copy()),this.shadowVisible=t.shadowVisible,this.me=t.me,this.ei=t.ei,this.Un=t.Un,this.H!==null&&(this.H=t.H.copy()),t.et!==null&&(t.et.xe?this.et=t.et:this.et=t.et.copy()),this.Ql=t.Ql}fE(t){if(this.me=t.text||"",this.Yt=t.labelAngle||0,this.Ci=t.lineCount||0,this.AE(t.lines),t.naturalBounds&&(this.Je=t.naturalBounds),t.actualBounds){const e=t.actualBounds;this.zt(e.x,e.y,e.width,e.height)}}ge(t){t in Wrap?this.wrap=t:super.ge(t)}toString(){return this.me.length>22?'TextBlock("'+this.me.substring(0,20)+'"...)':'TextBlock("'+this.me+'")'}static getEllipsis(){return TextBlock.hy}static setEllipsis(t){TextBlock.hy=t,TextBlock.gk=new PropertyCollection,TextBlock.AN=0}static getBaseline(){return TextBlock.mk}static setBaseline(t){TextBlock.mk=t}static mk=null;static getUnderline(){return TextBlock.pk}static setUnderline(t){TextBlock.pk=t}static pk=null;static None=0;static WrapFit=1;static WrapDesiredSize=2;static WrapBreakAll=3;static OverflowClip=0;static OverflowEllipsis=1;static FormatTrim=0;static FormatNone=1;f(){super.f(),this.ts(!0)}get font(){return this.Un}set font(t){const e=this.Un;e!==t&&(this.Un=t,this.wo=null,this.f(),this.t("font",e,t))}static isValidFont(t){return root.CSS?root.CSS.supports("font",t):!0}get text(){return this.me}set text(t){const e=this.me;t!=null?t=t.toString():t="",e!==t&&(this.me=t,this.f(),this.t("text",e,t))}get textAlign(){return this.et!==null?this.et.cy:"start"}set textAlign(t){const e=this.textAlign;e!==t&&(t==="start"||t==="end"||t==="left"||t==="right"||t==="center")&&(this.Bs().cy=t,this.N(),this.t("textAlign",e,t))}get flip(){return this.et!==null?this.et.xo:0}set flip(t){const e=this.flip;e!==t&&(this.Bs().xo=t,this.N(),this.t("flip",e,t))}get verticalAlignment(){return this.et!==null?this.et.wl:Spot.Top}set verticalAlignment(t){const e=this.verticalAlignment;e.equals(t)||(t=t.C(),this.Bs().wl=t,this.Rf(),this.t("verticalAlignment",e,t))}get naturalBounds(){if(!this.Je.isReal()){const t=Size.l();this.DN(this.me,999999,t);let e=t.width;Size.i(t);let i=this._D(e);const s=this.desiredSize;isNaN(s.width)||(e=s.width),isNaN(s.height)||(i=s.height),this.Je.$n(e,i)}return this.Je}get isMultiline(){return(this.o&2097152)!==0}set isMultiline(t){const e=(this.o&2097152)!==0;e!==t&&(this.o=this.o^2097152,this.f(),this.t("isMultiline",e,t))}get isUnderline(){return(this.o&4194304)!==0}set isUnderline(t){const e=(this.o&4194304)!==0;e!==t&&(this.o=this.o^4194304,this.ts(!0),this.N(),this.t("isUnderline",e,t))}get isStrikethrough(){return(this.o&8388608)!==0}set isStrikethrough(t){const e=(this.o&8388608)!==0;e!==t&&(this.o=this.o^8388608,this.ts(!0),this.N(),this.t("isStrikethrough",e,t))}get wrap(){return this.et!==null?this.et.fy:2}set wrap(t){const e=this.wrap;e!==t&&(this.Bs().fy=t,this.f(),this.t("wrap",e,t))}get overflow(){return this.et!==null?this.et.uy:0}set overflow(t){const e=this.overflow;e!==t&&(this.Bs().uy=t,this.f(),this.t("overflow",e,t))}get isOverflowed(){return(this.o&16777216)!==0}FN(t){t?this.o|=16777216:this.o&=-16777217}get stroke(){return this.ei}set stroke(t){const e=this.ei;e!==t&&(t!==null&&Brush.Bd(t,"TextBlock.stroke"),t instanceof Brush&&t.b(),this.ei=t,typeof t!="string"&&this.Df(),this.N(),this.t("stroke",e,t))}get lineCount(){return this.Ci}get lineHeight(){return this.gy()}get editable(){return(this.o&1048576)!==0}set editable(t){const e=(this.o&1048576)!==0;e!==t&&(this.o=this.o^1048576,this.t("editable",e,t))}get wN(){return(this.o&33554432)!==0}set wN(t){this.o=this.o^33554432}get textEditor(){return this.et!==null?this.et.my:null}set textEditor(t){const e=this.textEditor;e!==t&&(this.Bs().my=t,this.t("textEditor",e,t))}get errorFunction(){return this.et!==null?this.et.ps:null}set errorFunction(t){const e=this.errorFunction;e!==t&&(t!==null&&U.S(t,TextBlock,"errorFunction"),this.Bs().ps=t,this.t("errorFunction",e,t))}get interval(){return this.H!==null?this.H.Yf:1}set interval(t){const e=this.interval;if(t=Math.round(t),e!==t&&t!==0&&isFinite(t)){this.H===null&&(this.H=new GradElementSettings),this.H.Yf=t,this.f();const i=this.panel;i!==null&&(i.ms=null),this.t("interval",e,t)}}get graduatedStart(){return this.H!==null?this.H.Kf:0}set graduatedStart(t){const e=this.graduatedStart;e!==t&&(t<0?t=0:t>1&&(t=1),this.H===null&&(this.H=new GradElementSettings),this.H.Kf=t,this.f(),this.t("graduatedStart",e,t))}get graduatedEnd(){return this.H!==null?this.H.Hf:1}set graduatedEnd(t){const e=this.graduatedEnd;e!==t&&(t<0?t=0:t>1&&(t=1),this.H===null&&(this.H=new GradElementSettings),this.H.Hf=t,this.f(),this.t("graduatedEnd",e,t))}get graduatedFunction(){return this.H!==null?this.H.yy:null}set graduatedFunction(t){const e=this.graduatedFunction;e!==t&&(t!==null&&U.S(t,TextBlock,"graduatedFunction"),this.H===null&&(this.H=new GradElementSettings),this.H.yy=t,this.f(),this.t("graduatedFunction",e,t))}get graduatedSkip(){return this.H!==null?this.H.qf:null}set graduatedSkip(t){const e=this.graduatedSkip;e!==t&&(t!==null&&U.S(t,TextBlock,"graduatedSkip"),this.H===null&&(this.H=new GradElementSettings),this.H.qf=t,this.f(),this.t("graduatedSkip",e,t))}va(t,e){if(this.ei===null||this.me.length===0||this.Un===null)return;const i=this.naturalBounds,s=this.actualBounds,n=i.width,o=i.height,r=this.gy();let l=t.textAlign=this.textAlign;const a=e.yd;l==="start"?l=a?"right":"left":l==="end"&&(l=a?"left":"right");const h=this.isUnderline,c=this.isStrikethrough;this.Nn(t,this.ei,!0,!1,i,s),(h||c)&&this.Nn(t,this.ei,!1,!1,i,s);const f=0;let u=0;const d=n;let m=!1;e.Qt===t&&!(e.Qt instanceof SVGContext)&&!this.wN&&e.getRenderingHint("textGreeking")===!0&&r*this.Vh*e.scale<3&&(m=!0);const g=this.spacingAbove,p=this.spacingBelow;switch(this.flip){case 0:break;case 2:t.translate(n,0),t.scale(-1,1);break;case 1:t.translate(0,o),t.scale(1,-1);break;case 3:t.translate(n,o),t.scale(-1,-1);break}t.commitTransform();const y=this.Ci,b=(g+r+p)*y;if(o>b){const k=this.verticalAlignment;u=k.y*o-k.y*b+k.offsetY}if(TextBlock.yk&&(t.letterSpacing=this.letterSpacing,t.wordSpacing=this.wordSpacing),y===1&&this.Vn!==null){let k=this.be;k>d&&(k=d),u+=g,this.tF(this.Vn,t,f,u,d,r,k,m,l,h,c)}else if(this.zi!==null&&this.Pe!==null)for(let k=0;k<y;k++){let P=this.zi[k];P>d&&(P=d),u+=g,this.tF(this.Pe[k],t,f,u,d,r,P,m,l,h,c),u+=r+p}switch(this.flip){case 0:break;case 2:t.scale(-1,1),t.translate(-n,0);break;case 1:t.scale(1,-1),t.translate(0,-o);break;case 3:t.scale(-1,-1),t.translate(-n,-o);break}}tF(t,e,i,s,n,o,r,l,a,h,c){let f=0;if(l){a==="left"?f=0:a==="right"?f=n-r:a==="center"&&(f=(n-r)/2);const m=e.globalAlpha;e.globalAlpha=m/2,e.fillRect(i+f,s+o/4,r,o/2),e.globalAlpha=m;return}a==="left"?f=0:a==="right"?f=n:a==="center"&&(f=n/2);const u=TextBlock.mk!==null?TextBlock.mk(this,o):o*.75;e.fillText(t,i+f,s+u);let d=o/20|0;if(d===0&&(d=1),a==="right"?f-=r:a==="center"&&(f-=r/2),h){const m=TextBlock.pk!==null?TextBlock.pk(this,o):o*.8;this.eF(i+f,s+m,i+f+r,s+m,d,e),e instanceof SVGContext&&e.lastCreatedElement.classList.add("gojs-td")}if(c){let m=s+o-o/2.2|0;d%2!==0&&(m+=.5),this.eF(i+f,m,i+f+r,m,d,e),e instanceof SVGContext&&e.lastCreatedElement.classList.add("gojs-td")}}eF(t,e,i,s,n,o){o.beginPath(),o.lineWidth=n,o.moveTo(t,e),o.lineTo(i,s),o.stroke(),o.endPath()}Af(t,e,i){if(!super.Af(t,e,i))return!1;if(this.Nn(t,this.ei,!0,!1,this.naturalBounds,this.actualBounds),i){if(this.svg.getElementsByTagName("text").length===0)return!0;const n=this.svg.getElementsByClassName("gojs-td");for(let o=0;o<n.length;o++)t.setFillOrStrokeInPlace(n[o],!1)}else this.DE(this.svg,this.Pe?this.Pe[0]:this.text,t);return!0}DE(t,e,i){t.innerHTML=e,i.setFillOrStrokeInPlace(t,!0)}Ed(t){return this.lineCount>1||this.isUnderline||this.isStrikethrough?!0:super.Ed(t)}ZC(t,e){if(t.nodeName!=="g")t.setAttributeNS(null,"filter",e);else{const i=t.getElementsByTagName("text");for(let s=0;s<i.length;s++)i[s].setAttributeNS(null,"filter",e)}}FE(){this.Bn=0,this.be=0,this.wo=null,this.zi=null,this.Pe=null,this.Vn=null}Od(t,e,i,s){const n=this.Ci;this.Ql=t,this.FN(!1);const o=this.Un;TextBlock.gs!==null&&(TextBlock.iF!==o&&(TextBlock.gs.font=o,TextBlock.iF=o),TextBlock.yk&&(TextBlock.gs.letterSpacing=this.letterSpacing,TextBlock.gs.wordSpacing=this.wordSpacing)),this.FE();let r=0,l=0;isNaN(this.desiredSize.width)?(r=this.vE(),r=Math.min(r,t/this.scale)):r=this.desiredSize.width,this.panel!==null&&(r=Math.min(r,this.panel.maxSize.width)),l=this._D(r),isNaN(this.desiredSize.height)?l=Math.min(l,e/this.scale):l=this.desiredSize.height,this.RE(t,l),(this.wrap===1||isNaN(this.desiredSize.width))&&(r=isNaN(t)?this.be:Math.min(t,this.be)),r=Math.max(i,r),l=Math.max(s,l),this.Je.$n(r,l),this.fo(0,0,r,l),this.svg!==null&&n!==this.Ci&&this.ts(!0)}Da(t,e,i,s){this.commonArrange(t,e,i,s)}zn(t,e){this.Vn===null?(this.Vn=t,this.be=e):((this.Pe===null||this.zi===null)&&(this.Pe=[],this.zi=[],this.Pe.push(this.Vn),this.zi.push(this.be)),this.Pe.push(t),this.zi.push(e),this.Pe.length>this.maxLines&&(this.o|=16777216))}DN(t,e,i){const s=this.formatting===0;s&&(t=t.trim());let n=0,o=0,r=0;const l=this.Un,a=this.spacingAbove+this.spacingBelow,h=Math.max(0,this.gy()+a),c=this.overflow===1?this.sF(l):0;if(this.Ci>=this.maxLines){i!==void 0&&i.e(0,h);return}let f=t;if(this.wrap===0){if(this.Bn=1,o=this.getStringWidth(t),c===0||o<=e){this.be=Math.max(this.be,o),this.zn(t,this.be),i!==void 0&&i.e(o,h);return}let d=this.ng(f);f=f.substring(d.length);let m=this.ng(f);for(o=this.getStringWidth(d+m),r=0;m.length>0&&o<=e;){d+=m,f=f.substring(m.length),m=this.ng(f),r=o;let g=d+m;s&&(g=g.trim()),o=this.getStringWidth(g)}for(s&&(m=m.trim()),d+=m,e=Math.max(1,e-c);this.getStringWidth(d)>e&&d.length>1;)d=d.substring(0,d.length-1);this.FN(!0),d+=TextBlock.hy,r=this.getStringWidth(d),this.be=r,this.zn(d,r),i!==void 0&&i.e(r,h);return}let u=0;for(f.length===0&&(u=1,this.zn(f,0));f.length>0;){let d=this.ng(f);for(f=f.substring(d.length);this.getStringWidth(d)>e;){let p=1;for(o=this.getStringWidth(d.substring(0,p)),r=0;o<=e;)p++,r=o,o=this.getStringWidth(d.substring(0,p));let y=0;p===1?(y=o,n=Math.max(n,o)):(y=r,n=Math.max(n,r)),p--,p<1&&(p=1);const x=d.substring(0,p);if(this.zn(x,y),u++,d=d.substring(p),this.Ci+u>this.maxLines)break}let m=this.ng(f);for(o=this.getStringWidth(d+m),r=0;m.length>0&&o<=e;){d+=m,f=f.substring(m.length),m=this.ng(f),r=o;let p=d+m;s&&(p=p.trim()),o=this.getStringWidth(p)}if(s&&(d=d.trim()),d==="")continue;d[d.length-1]==="\xAD"&&(d=d.substring(0,d.length-1)+"\u2010");let g=0;if(m.length===0?(g=o,n=Math.max(n,o)):(r=this.getStringWidth(d),g=r,n=Math.max(n,r)),this.zn(d,g),u++,this.Ci+u>this.maxLines)break}this.Bn=Math.min(this.maxLines-this.Ci,u),this.be=Math.max(this.be,n),i!==void 0&&i.e(this.be,h*this.Bn)}RE(t,e){if(this.be===0||this.zi===null||this.Pe===null||this.overflow!==1)return;const i=this.Un,s=this.overflow===1?this.sF(i):0,n=this.spacingAbove+this.spacingBelow,o=Math.max(0,this.gy()+n),r=Math.min(this.maxLines-1,Math.max(Math.floor(e/o+.01)-1,0));if(r+1>=this.Pe.length)return;this.FN(!0);let l=this.Pe[r];const a=Math.max(1,t-s);for(;this.getStringWidth(l)>a&&l.length>1;)l=l.substring(0,l.length-1);l+=TextBlock.hy;const h=this.getStringWidth(l);this.Pe[r]=l,this.Pe=this.Pe.slice(0,r+1),this.zi[r]=h,this.zi=this.zi.slice(0,r+1),this.Bn=this.Pe.length,this.be=Math.max(this.be,h),this.Ci=this.Bn,this.Ci===1&&(this.Vn=this.Pe[0])}ng(t){if(this.wrap===3)return t.substring(0,1);let e=t.length,i=0;const s=TextBlock.OE;for(;i<e&&!s.test(t.charAt(i));)i++;for(this.formatting===1&&(e=Math.min(e,i+1));i<e&&s.test(t.charAt(i));)i++;return i>=t.length?t:t.substring(0,i)}getStringWidth(t){return TextBlock.gs===null?t.length*8:TextBlock.gs.measureText(t).width}gy(){if(this.wo!==null)return this.wo;const t=this.Un;let e=0;if(TextBlock.gs===null)return e=16,this.wo=e,e;if(TextBlock.vN[t]!==void 0&&TextBlock.nF<5e3)e=TextBlock.vN[t];else{TextBlock.gs.letterSpacing="0px";const i=TextBlock.gs.measureText("M");TextBlock.gs.letterSpacing=this.letterSpacing,e=i.width*1.3,TextBlock.vN[t]=e,TextBlock.nF++}return this.wo=e,e}sF(t){if(TextBlock.gs===null)return 6;let e=0;return TextBlock.gk[t]!==void 0&&TextBlock.AN<5e3?e=TextBlock.gk[t]:(e=TextBlock.gs.measureText(TextBlock.hy).width,TextBlock.gk[t]=e,TextBlock.AN++),e}wk(t,e){return t.indexOf(`
`,e)}_D(t){let e=this.me.replace(/\r\n/g,`
`).replace(/\r/g,`
`);const i=this.spacingAbove+this.spacingBelow,s=Math.max(0,this.gy()+i);if(e.length===0)return this.be=0,this.Ci=1,s;if(!this.isMultiline){const a=this.wk(e,0);a>=0&&(e=e.substring(0,a))}let n=0;this.Ci=0;let o=0,r=-1,l=!1;for(;!l;){if(r=this.wk(e,o),r===-1&&(r=e.length,l=!0),o<=r){const a=e.substring(o,r);if(this.wrap!==0){this.Bn=0;const h=Size.l();this.DN(a,t,h),n+=h.height,Size.i(h),this.Ci+=this.Bn}else this.DN(a,t),n+=s,this.Ci++;this.Ci===this.maxLines&&(l=!0)}o=r+1}return this.i0=n,n}vE(){let t=this.me.replace(/\r\n/g,`
`).replace(/\r/g,`
`);if(t.length===0)return 8;if(this.isMultiline){let e=0,i=0,s=!1;for(;!s;){let n=this.wk(t,i);n===-1&&(n=t.length,s=!0);let o=t.substring(i,n);this.formatting===0&&(o=o.trim()),e=Math.max(e,this.getStringWidth(o)),i=n+1}return e}else{const e=this.wk(t,0);return e>=0&&(t=t.substring(0,e)),this.getStringWidth(t)}}get textValidation(){return this.et!==null?this.et.Zl:null}set textValidation(t){const e=this.textValidation;e!==t&&(t!==null&&U.S(t,TextBlock,"textValidation"),this.Bs().Zl=t,this.t("textValidation",e,t))}get textEdited(){return this.et!==null?this.et.wy:null}set textEdited(t){const e=this.textEdited;e!==t&&(t!==null&&U.S(t,TextBlock,"textEdited"),this.Bs().wy=t,this.t("textEdited",e,t))}get spacingAbove(){return this.et!==null?this.et.xy:0}set spacingAbove(t){const e=this.spacingAbove;e!==t&&(this.Bs().xy=t,this.f(),this.t("spacingAbove",e,t))}get spacingBelow(){return this.et!==null?this.et.ky:0}set spacingBelow(t){const e=this.spacingBelow;e!==t&&(this.Bs().ky=t,this.f(),this.t("spacingBelow",e,t))}get letterSpacing(){return this.et!==null?this.et.Py:"0px"}set letterSpacing(t){const e=this.letterSpacing;e!==t&&(TextBlock.yk=!0,this.Bs().Py=t,this.f(),this.t("letterSpacing",e,t))}get wordSpacing(){return this.et!==null?this.et.Sy:"0px"}set wordSpacing(t){const e=this.wordSpacing;e!==t&&(TextBlock.yk=!0,this.Bs().Sy=t,this.f(),this.t("wordSpacing",e,t))}get formatting(){return this.et!==null?this.et.My:0}set formatting(t){const e=this.formatting;e!==t&&(this.Bs().My=t,this.f(),this.t("formatting",e,t))}get maxLines(){return this.et!==null?this.et.Cy:1/0}set maxLines(t){const e=this.maxLines;e!==t&&(t=Math.floor(t),t<=0&&U.$(t,"> 0",TextBlock,"maxLines"),this.Bs().Cy=t,this.f(),this.t("maxLines",e,t))}getMetrics(){return[this.be,this.Ql,this.wo,this.Bn,this.zi,this.Pe,this.Vn||""]}AE(t){t!==void 0&&(this.be=t[0],this.Ql=t[1],this.wo=t[2],this.Bn=t[3],this.zi=t[4],this.Pe=t[5],this.Vn=t[6])}get metrics(){return{arrSize:this.zi!==null?this.zi:[this.be],arrText:this.Pe!==null?this.Pe:[this.Vn],maxLineWidth:this.be,fontHeight:this.wo}}get choices(){return this.sg}set choices(t){const e=this.sg;e!==t&&(this.sg=t,this.t("choices",e,t))}static OE=new RegExp("[ \u200B\xAD]");static vN=new PropertyCollection;static nF=0;static gk=new PropertyCollection;static AN=0;static hy="...";static iF="";static gs=null;static R0=!1;static yk=!1}class TextBlockTemplateSettings{xe;ps;xo;My;Cy;uy;xy;ky;cy;wy;my;Zl;wl;fy;Py;Sy;constructor(){this.xe=!1,this.ps=null,this.xo=0,this.My=0,this.Cy=1/0,this.uy=0,this.xy=0,this.ky=0,this.cy="start",this.wy=null,this.my=null,this.Zl=null,this.wl=Spot.Top,this.fy=2,this.Py="0px",this.Sy="0px"}copy(){const t=new TextBlockTemplateSettings;return t.ps=this.ps,t.xo=this.xo,t.My=this.My,t.Cy=this.Cy,t.uy=this.uy,t.xy=this.xy,t.ky=this.ky,t.cy=this.cy,t.wy=this.wy,t.my=this.my,t.Zl=this.Zl,t.wl=this.wl,t.fy=this.fy,t.Py=this.Py,t.Sy=this.Sy,t}}class GradElementSettings{Yf;Kf;Hf;yy;qf;constructor(){this.Yf=1,this.Kf=0,this.Hf=1,this.yy=null,this.qf=null}copy(){const t=new GradElementSettings;return t.Yf=this.Yf,t.Kf=this.Kf,t.Hf=this.Hf,t.yy=this.yy,t.qf=this.qf,t}}var ImageStretch=(w=>(w[w.None=0]="None",w[w.Fill=2]="Fill",w[w.Uniform=6]="Uniform",w[w.UniformToFill=7]="UniformToFill",w))(ImageStretch||{});class Picture extends GraphObject{xl;ln;bl;jf;ps;kl;Wf;xo;Jf;$f;J1;constructor(t,e){super(),this.o|=2097152,this.xl=null,this.ln="",this.bl=Rect.wR,this.jf=2,this.ps=null,this.kl=null,this.Wf=Spot.Center,this.xo=0,this.Jf=null,this.$f=null,this.J1=null,typeof t=="string"?this.source=t:t&&Object.assign(this,t),e&&Object.assign(this,e)}cloneProtected(t){super.cloneProtected(t),t.ln=this.ln,t.element=this.xl,t.bl=this.bl.C(),t.jf=this.jf,t.xo=this.xo,t.ps=this.ps,t.kl=this.kl,t.Wf=this.Wf.C(),t.$f=this.$f}ge(t){t in ImageStretch?this.imageStretch=t:super.ge(t)}toString(){return"Picture("+this.source+")#"+GSet.ks(this)}get Zf(){return(this.o&1048576)!==0}set Zf(t){this.Zf!==t&&(this.o=this.o^1048576)}get Ny(){return(this.o&2097152)!==0}set Ny(t){this.Ny!==t&&(this.o=this.o^2097152)}get Dn(){return(this.o&4194304)!==0}set Dn(t){this.Dn!==t&&(this.o=this.o^4194304)}static clearCache(t){t===void 0&&(t=""),U.s(t,"string",Picture,"clearCache:url"),t!==""?Picture.Ty[t]&&(delete Picture.Ty[t],Picture.xk--):(Picture.Ty=new PropertyCollection,Picture.xk=0)}static ZA(t,e){e.oF||(e.bk=i=>{Picture.IE(e,i),t.desiredSize.isReal()||(t.Pi(!1),t.f())},e.kk=i=>Picture.EE(e,i),e.addEventListener("load",e.bk),e.addEventListener("error",e.kk),e.oF=!0)}static tI(t){t.bk&&t.removeEventListener("load",t.bk),t.kk&&t.removeEventListener("error",t.kk),delete t.bk,delete t.kk,t.oF=!1}get element(){return this.xl}set element(t){const e=this.xl;if(this.ts(!0),e!==t){const i=Diagram.isUsingDOM();let s=!1;i&&(this.Zf=t instanceof HTMLCanvasElement,s=t instanceof HTMLImageElement,t!==null&&!(s||t instanceof HTMLVideoElement||this.Zf)&&U.n("Picture.element must be an instance of Image, Canvas, or Video, not: "+t));const n=this.diagram;n!==null&&n.sC(this),this.xl=t,t!==null&&s&&t.us===void 0&&(t.us=new GSet),n!==null&&s&&n.iC(this),this.t("element",e,t),this.N()}}QO(){const t=this.xl;if(t===null)return;const e=this.desiredSize.isReal();(this.Zf||t.complete===!0)&&(t.Vp&&(t.Ly instanceof Event&&this.ps!==null?this.ps(this,t.Ly):t.Dn===!0&&!t.Ly&&this.kl!==null&&t.RN&&this.kl(this,t.RN)),t.Dn=!0),t.Dn&&e&&this.diagram!==null&&this.diagram.pd.add(this)}UE(){if(this.xl===null){this.Jf=!1;return}const t=new CanvasSurface(null).de;try{t.drawImage(this.xl,0,0)}catch{this.Ny=!1}try{t.getImageData(0,0,1,1).data[3]&&(this.Jf=!1),this.Jf=!1}catch{this.Jf=!0}}get source(){return this.ln}set source(t){const e=this.ln;if(e!==t){this.ts(!0),U.s(t,"string",Picture,"source"),this.ln=t;let i=Picture.Ty,s=null;if(i[t]!==void 0)s=i[t];else if(t!==""){Picture.xk>30&&(Picture.clearCache(),i=Picture.Ty),s=U.Li("img"),s.Vp=!0,Picture.ZA(this,s);const n=this.$f;n!==null&&(s.crossOrigin=n(this)),s.src=t,i[t]=s,Picture.xk++}this.element=s,s!==null&&s.__goCache===void 0&&(s.__goCache=new PictureCacheArray),this.f(),this.N(),this.t("source",e,t)}}static IE(t,e){t.Dn=!0,t.Ly=!1;let i;const s=t.us.copy();if(s==null)return;const n=s.iterator;for(;n.next();){const o=n.value;o.N();const r=t.getAttribute("src")||"",l=o.pa.get(r);if(l===null)continue;const a=l.length;for(let h=0;h<a;h++)i=l[h],i.desiredSize.isReal()||o.pd.add(i),i.ts(!0),o.requestUpdate(),t.Vp&&(t.RN===void 0&&(t.RN=e),i.kl!==null&&i.kl(i,e))}t.us.clear()}static EE(t,e){t.Ly=e;let i;const s=t.us.copy();if(s==null)return;const n=s.iterator;for(;n.next();){const o=n.value,r=t.getAttribute("src")||"",l=o.pa.get(r);if(l===null)continue;const a=l.length,h=U.ot();for(let c=0;c<a;c++)h.push(l[c]);if(t.Vp)for(let c=0;c<a;c++)i=h[c],i.ps!==null&&i.ps(i,e);U._(h)}t.us.clear()}reloadSource(){if(this.source==="")return;Picture.clearCache(this.source);const t=this.source;this.source="",this.source=t}redraw(){this.N(),this.ts(!0)}get sourceCrossOrigin(){return this.$f}set sourceCrossOrigin(t){if(this.$f!==t){t!==null&&U.S(t,Picture,"sourceCrossOrigin"),this.$f=t;const i=this.element;if(i!==null){const s=i.getAttribute("src");i.crossOrigin!==void 0&&(t===null&&typeof s=="string"?i.crossOrigin=null:t!==null&&(i.crossOrigin=t(this)),s&&(i.src=s))}}}get sourceRect(){return this.bl}set sourceRect(t){const e=this.bl;e.equals(t)||(t=t.C(),this.bl=t,this.f(),this.t("sourceRect",e,t))}get imageStretch(){return this.jf}set imageStretch(t){const e=this.jf;e!==t&&(this.jf=t,this.N(),this.t("imageStretch",e,t))}get flip(){return this.xo}set flip(t){const e=this.xo;e!==t&&(this.xo=t,this.N(),this.t("flip",e,t))}get imageAlignment(){return this.Wf}set imageAlignment(t){const e=this.Wf;e.equals(t)||(t=t.C(),this.Wf=t,this.N(),this.t("imageAlignment",e,t))}get errorFunction(){return this.ps}set errorFunction(t){const e=this.ps;e!==t&&(t!==null&&U.S(t,Picture,"errorFunction"),this.ps=t,this.t("errorFunction",e,t))}get successFunction(){return this.kl}set successFunction(t){const e=this.kl;e!==t&&(t!==null&&U.S(t,Picture,"successFunction"),this.kl=t,this.t("successFunction",e,t))}va(t,e){const i=this.xl;if(i===null)return;const s=i.getAttribute("src"),n=Diagram.isUsingDOM();if(n&&i instanceof HTMLImageElement&&(s===null||s==="")||i.Ly instanceof Event&&t instanceof CanvasSurfaceContext)return;const o=t instanceof SVGContext,r=this.naturalBounds;let l=0,a=0;const h=this.Zf;let c=h?+i.width:i.naturalWidth,f=h?+i.height:i.naturalHeight;if(c===void 0&&i.videoWidth&&(c=i.videoWidth),f===void 0&&i.videoHeight&&(f=i.videoHeight),n){if(c===0||f===0)return}else c=this.width,f=this.height;const u=c,d=f;this.sourceRect.isReal()&&(l=this.bl.x,a=this.bl.y,c=this.bl.width,f=this.bl.height);let m=c,g=f;const p=this.jf,y=this.Wf;switch(p){case 0:if(this.sourceRect.isReal())break;m>=r.width&&(l=l+y.offsetX+(m*y.x-r.width*y.x)),g>=r.height&&(a=a+y.offsetY+(g*y.y-r.height*y.y)),c=Math.min(r.width,m),f=Math.min(r.height,g);break;case 2:m=r.width,g=r.height;break;case 6:case 7:let D=0;p===6?(D=Math.min(r.height/g,r.width/m),m*=D,g*=D):p===7&&(D=Math.max(r.height/g,r.width/m),m*=D,g*=D,m>=r.width&&(l=(l+y.offsetX+(m*y.x-r.width*y.x)/m)*c),g>=r.height&&(a=(a+y.offsetY+(g*y.y-r.height*y.y)/g)*f),c*=1/(m/r.width),f*=1/(g/r.height),m=r.width,g=r.height);break}const x=c*f,b=this.getDocumentScale()*e.scale,k=m*b,P=g*b,S=k*P,T=x/S,N=i.__goCache;let M=null;const C=Picture.BE;if(!o){if(i.Dn&&N!==void 0&&u<8e3&&d<8e3&&S>4&&T>C*C){N.Xt===null&&(N.rF(4,u,d,i),N.rF(16,u,d,i));const D=N.Xt,F=D.length;for(let v=0;v<F&&D[v].og*D[v].og<T;v++)M=D[v]}if(!e.md&&(this.Jf===null&&this.UE(),this.Jf))return}const L=m<r.width?y.offsetX+(r.width*y.x-m*y.x):0,A=g<r.height?y.offsetY+(r.height*y.y-g*y.y):0;switch(this.flip){case 0:break;case 2:t.translate(Math.min(r.width,m),0),t.scale(-1,1);break;case 1:t.translate(0,Math.min(r.height,g)),t.scale(1,-1);break;case 3:t.translate(Math.min(r.width,m),Math.min(r.height,g)),t.scale(-1,-1);break}if(t.commitTransform(),e.getRenderingHint("pictureRatioOptimization")&&!e.Ch&&N!==void 0&&M!==null&&M.og!==1){t.save();const D=M.og;try{t.drawImage(M.ln,l/D,a/D,Math.min(M.ln.width,c/D),Math.min(M.ln.height,f/D),L,A,Math.min(r.width,m),Math.min(r.height,g)),t instanceof SVGContext&&(this.J1=[l/D,a/D,Math.min(M.ln.width,c/D),Math.min(M.ln.height,f/D),L,A,Math.min(r.width,m),Math.min(r.height,g)])}catch{this.Ny=!1}t.restore()}else try{t.drawImage(i,l,a,c,f,L,A,Math.min(r.width,m),Math.min(r.height,g)),t instanceof SVGContext&&(this.J1=[l,a,c,f,L,A,Math.min(r.width,m),Math.min(r.height,g)])}catch{this.Ny=!1}switch(this.flip){case 0:break;case 2:t.scale(-1,1),t.translate(-Math.min(r.width,m),0);break;case 1:t.scale(1,-1),t.translate(0,-Math.min(r.height,g));break;case 3:t.scale(-1,-1),t.translate(-Math.min(r.width,m),-Math.min(r.height,g));break}}get naturalBounds(){return this.Je}Od(t,e,i,s){const n=this.desiredSize,o=this.sn(!0),r=this.xl,l=this.Zf;let a=0,h=0;(l||!this.Dn&&r&&r.complete)&&(this.Dn=!0),r===null?(isFinite(n.width)||(t=i),isFinite(n.height)||(e=s)):(a=l?+r.width:r.naturalWidth,h=l?+r.height:r.naturalHeight),!isFinite(n.width)&&o!==2&&o!==5?r!==null&&this.Dn!==!1&&(this.sourceRect.isReal()?t=this.sourceRect.width:t=a):(isFinite(t)||(this.sourceRect.isReal()?t=this.sourceRect.width:r!==null&&(t=a)),i=0),!isFinite(n.height)&&o!==2&&o!==4?r!==null&&this.Dn!==!1&&(this.sourceRect.isReal()?e=this.sourceRect.height:e=h):(isFinite(e)||(this.sourceRect.isReal()?e=this.sourceRect.height:r!==null&&(e=h)),s=0),isFinite(n.width)&&(t=n.width),isFinite(n.height)&&(e=n.height);const c=this.maxSize,f=this.minSize;i=Math.max(i||0,f.width),s=Math.max(s||0,f.height),t=Math.min(c.width,t),e=Math.min(c.height,e),t=Math.max(i,t),e=Math.max(s,e),r!==null&&!r.complete&&(isFinite(t)||(t=0),isFinite(e)||(e=0)),this.Je.$n(t,e),this.fo(0,0,t,e)}Da(t,e,i,s){this.commonArrange(t,e,i,s)}static Ty=new PropertyCollection;static xk=0;static BE=4}class PictureCacheArray{Xt;constructor(){this.Xt=null}rF(t,e,i,s){this.Xt===null&&(this.Xt=[]);const n=new CanvasSurface(null),o=n.de,r=1/t;if(n.width=e/t,n.height=i/t,n.width===0||n.height===0)return;const l=new PictureCacheInstance(n.gt,t);let a=s,h=1;if(this.Xt.length>0){const c=this.Xt[this.Xt.length-1];a=c.ln,h=c.og}o.setTransform(r*h,0,0,r*h,0,0),o.commitTransform(),o.drawImage(a,0,0),this.Xt.push(l)}}class PictureCacheInstance{ln;og;constructor(t,e){this.ln=t,this.og=e}}class GeoStream{De;Cm;constructor(){this.Cm=new Geometry,this.De=null}Xe(t){t!==null?(this.Cm=t,t.figures.clear()):this.Cm=new Geometry,this.De=null}Bu(t,e,i,s,n,o){if(s!==void 0&&s===!0){const r=new PathSegment(1);r.endX=t,r.endY=e,this.De.segments.add(r)}else this.De=new PathFigure,this.De.startX=t,this.De.startY=e,this.De.isFilled=i,this.De.isEvenOdd=o||!1,this.Cm.figures.add(this.De);n!==void 0&&(this.De.isShadowed=n)}DR(){const t=this.De.segments.length;t>0&&this.De.segments.elt(t-1).close()}FR(){this.De.segments.length>0&&(this.De.isFilled=!0)}vR(t){this.De.isShadowed=t}dB(t){this.De.isEvenOdd=t}TR(t,e,i){i===void 0&&(i=!1);const s=new PathSegment(1);s.endX=t,s.endY=e,i&&s.close(),this.De.segments.add(s)}Js(t,e,i){i===void 0&&(i=!1);const s=new PathSegment(2);s.endX=t,s.endY=e,i&&s.close(),this.De.segments.add(s)}Cr(t,e,i,s,n,o,r){r===void 0&&(r=!1);const l=new PathSegment(3);l.point1X=t,l.point1Y=e,l.point2X=i,l.point2Y=s,l.endX=n,l.endY=o,r&&l.close(),this.De.segments.add(l)}Vu(t,e,i,s,n){n===void 0&&(n=!1);const o=new PathSegment(4);o.point1X=t,o.point1Y=e,o.endX=i,o.endY=s,n&&o.close(),this.De.segments.add(o)}LR(t,e,i,s,n,o,r){o===void 0&&(o=0),r===void 0&&(r=!1);const l=new PathSegment(5);l.startAngle=t,l.sweepAngle=e,l.centerX=i,l.centerY=s,l.radiusX=n,o!==0?l.radiusY=o:l.radiusY=n,r&&l.close(),this.De.segments.add(l)}AR(t,e,i,s,n,o,r,l){l===void 0&&(l=!1);const a=new PathSegment(6,o,r,t,e,i,s,n);l&&a.close(),this.De.segments.add(a)}static ON=null;static kL(t){const e=GeoStream.ON;if(e!==null)return GeoStream.ON=null,e.Xe(t),e;{const i=new GeoStream;return i.Xe(t),i}}static PL(t){GeoStream.ON=t}}{const w=function(n,o){const r=n.toLowerCase(),l=G._n;l[n]=o,l[r]=n};w("Rectangle",(n,o,r)=>{const l="r"+o+","+r;let a=G.Sr[l];return a!==void 0||(a=new Geometry(2),a.endX=o,a.endY=r,G.Mr<G.km&&(G.Sr[l]=a,G.Mr++)),a}),w("Square",(n,o,r)=>{const l="s"+o+","+r;let a=G.Sr[l];return a!==void 0||(a=new Geometry(2),a.endX=o,a.endY=r,a.defaultStretch=6,G.Mr<G.km&&(G.Sr[l]=a,G.Mr++)),a});const t=(n,o,r,l,a)=>{(isNaN(l)||l<0)&&(l=5),isNaN(a)&&(a=15);const h="rr"+o+","+r+","+l+","+a;let c=G.Sr[h];if(c!==void 0)return c;let f=l;(a&1)===1?(f=Math.min(f,(a&2)===2?o/3:o),f=Math.min(f,(a&8)===8?r/3:r)):f=0;const u=new PathFigure(f,0,!0);c=new Geometry().add(u);const d=Spot.TopLeft.copy(),m=Spot.BottomRight.copy();if((a&2)===2){let g=l;g=Math.min(g,(a&1)===1?o/3:o),g=Math.min(g,(a&4)===4?r/3:r);const p=g*G.Zn;u.add(new PathSegment(2,o-g,0)).add(new PathSegment(3,o,g,o-p,0,o,p)),d.offsetY=p,m.offsetX=-p}else u.add(new PathSegment(2,o,0));if((a&4)===4){let g=l;g=Math.min(g,(a&8)===8?o/3:o),g=Math.min(g,(a&2)===2?r/3:r);const p=g*G.Zn;u.add(new PathSegment(2,o,r-g)).add(new PathSegment(3,o-g,r,o,r-p,o-p,r)),m.offsetX=-p,m.offsetY=-p}else u.add(new PathSegment(2,o,r));if((a&8)===8){let g=l;g=Math.min(g,(a&4)===4?o/3:o),g=Math.min(g,(a&1)===1?r/3:r);const p=g*G.Zn;u.add(new PathSegment(2,g,r)).add(new PathSegment(3,0,r-g,p,r,0,r-p)),d.offsetX=p,m.offsetY=-p}else u.add(new PathSegment(2,0,r));if((a&1)===1){const g=f*G.Zn;u.add(new PathSegment(2,0,f)).add(new PathSegment(3,f,0,0,g,g,0).close()),d.offsetX=g,d.offsetY=g}else u.add(new PathSegment(2,0,0).close());return c.spot1=d,c.spot2=m,G.Mr<G.km&&(G.Sr[h]=c,G.Mr++),c};w("RoundedRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN,a=n?n.parameter2:NaN;return t(n,o,r,l,a)}),w("Border","RoundedRectangle"),w("RoundedTopRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,3)}),w("RoundedBottomRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,12)}),w("RoundedLeftRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,9)}),w("RoundedRightRectangle",(n,o,r)=>{const l=n?n.parameter1:NaN;return t(n,o,r,l,6)}),w("Ellipse",(n,o,r)=>{const l="e"+o+","+r;let a=G.Sr[l];return a!==void 0||(a=new Geometry(3),a.endX=o,a.endY=r,a.spot1=Spot.GP,a.spot2=Spot.YP,G.Mr<G.km&&(G.Sr[l]=a,G.Mr++)),a}),w("Circle",(n,o,r)=>{const l="c"+o+","+r;let a=G.Sr[l];return a!==void 0||(a=new Geometry(3),a.endX=o,a.endY=r,a.spot1=Spot.GP,a.spot2=Spot.YP,a.defaultStretch=6,G.Mr<G.km&&(G.Sr[l]=a,G.Mr++)),a}),w("TriangleRight",(n,o,r)=>new Geometry().add(new PathFigure(0,0).add(new PathSegment(2,o,.5*r)).add(new PathSegment(2,0,r).close())).setSpots(0,.25,.5,.75)),w("TriangleDown",(n,o,r)=>new Geometry().add(new PathFigure(0,0).add(new PathSegment(2,o,0)).add(new PathSegment(2,.5*o,r).close())).setSpots(.25,0,.75,.5)),w("TriangleLeft",(n,o,r)=>new Geometry().add(new PathFigure(o,r).add(new PathSegment(2,0,.5*r)).add(new PathSegment(2,o,0).close())).setSpots(.5,.25,1,.75)),w("TriangleUp",(n,o,r)=>new Geometry().add(new PathFigure(o,r).add(new PathSegment(2,0,r)).add(new PathSegment(2,.5*o,0).close())).setSpots(.25,.5,.75,1)),w("Triangle","TriangleUp"),w("Diamond",(n,o,r)=>new Geometry().add(new PathFigure(.5*o,0).add(new PathSegment(2,0,.5*r)).add(new PathSegment(2,.5*o,r)).add(new PathSegment(2,o,.5*r).close())).setSpots(.25,.25,.75,.75)),w("LineH",(n,o,r)=>{const l=new Geometry(1);return l.startX=0,l.startY=r/2,l.endX=o,l.endY=r/2,l}),w("LineV",(n,o,r)=>{const l=new Geometry(1);return l.startX=o/2,l.startY=0,l.endX=o/2,l.endY=r,l}),w("None","Rectangle"),w("BarH","Rectangle"),w("BarV","Rectangle"),w("MinusLine","LineH"),w("PlusLine",(n,o,r)=>new Geometry().add(new PathFigure(0,r/2,!1).add(new PathSegment(2,o,r/2)).add(new PathSegment(1,o/2,0)).add(new PathSegment(2,o/2,r)))),w("XLine",(n,o,r)=>new Geometry().add(new PathFigure(0,r,!1).add(new PathSegment(2,o,0)).add(new PathSegment(1,0,0)).add(new PathSegment(2,o,r)))),w("LineRight",(n,o,r)=>new Geometry().add(new PathFigure(.25*o,0,!1).add(new PathSegment(2,.75*o,.5*r)).add(new PathSegment(2,.25*o,r)))),w("LineDown",(n,o,r)=>new Geometry().add(new PathFigure(0,.25*r,!1).add(new PathSegment(2,.5*o,.75*r)).add(new PathSegment(2,o,.25*r)))),w("LineLeft",(n,o,r)=>new Geometry().add(new PathFigure(.75*o,0,!1).add(new PathSegment(2,.25*o,.5*r)).add(new PathSegment(2,.75*o,r)))),w("LineUp",(n,o,r)=>new Geometry().add(new PathFigure(0,.75*r,!1).add(new PathSegment(2,.5*o,.25*r)).add(new PathSegment(2,o,.75*r)))),w("Capsule",(n,o,r)=>{const l=new Geometry;if(o<r){const a=o/2,h=new PathFigure(0,a,!0);l.add(h),h.add(new PathSegment(5,180,180,a,a,a,a)),h.add(new PathSegment(2,o,r-a)),h.add(new PathSegment(5,0,180,a,r-a,a,a)),h.add(new PathSegment(2,0,a));const c=isFinite(n.parameter1)?n.parameter1:o*.156;return l.setSpots(0,0,1,1,0,c,0,-c),l}else if(o>r){const a=r/2,h=new PathFigure(a,0,!0);l.add(h),h.add(new PathSegment(2,o-a,0)),h.add(new PathSegment(5,270,180,o-a,a,a,a)),h.add(new PathSegment(2,a,r)),h.add(new PathSegment(5,90,180,a,a,a,a));const c=isFinite(n.parameter1)?n.parameter1:r*.156;return l.setSpots(0,0,1,1,c,0,-c,0),l}else return l.type=3,l.endX=o,l.endY=r,l.spot1=Spot.GP,l.spot2=Spot.YP,l});const e=(n,o)=>new PathFigure(n,o,!1,!1),i=(n,o,r)=>n.add(new PathSegment(2,o,r)),s=(n,o,r)=>n.add(new PathSegment(1,o,r));w("Borders",(n,o,r)=>{let l=n?n.parameter1:NaN;isNaN(l)?l=10:l=l&15;const a=new Geometry;let h;return l===10?(h=e(o,0),i(h,o,r),s(h,0,r),i(h,0,0)):l===5?(h=e(0,0),i(h,o,0),s(h,o,r),i(h,0,r)):l===1?(h=e(0,0),i(h,o,0),s(h,o,r)):l===2?(h=e(o,0),i(h,o,r)):l===4?(h=e(o,r),i(h,0,r)):l===8?(h=e(0,r),i(h,0,0),s(h,o,r)):l===3?(h=e(0,0),i(h,o,0),i(h,o,r)):l===6?(h=e(o,0),i(h,o,r),i(h,0,r)):l===12?(h=e(o,r),i(h,0,r),i(h,0,0)):l===9?(h=e(0,r),i(h,0,0),i(h,o,0)):l===7?(h=e(0,0),i(h,o,0),i(h,o,r),i(h,0,r)):l===14?(h=e(o,0),i(h,o,r),i(h,0,r),i(h,0,0)):l===13?(h=e(o,r),i(h,0,r),i(h,0,0),i(h,o,0)):l===11?(h=e(0,r),i(h,0,0),i(h,o,0),i(h,o,r)):l===15?(h=e(0,0),i(h,o,0),i(h,o,r),i(h,0,r),h.add(new PathSegment(2,0,0).close())):(h=e(0,0),s(h,o,r)),a.add(h),a})}G.bm={"":"",Standard:"F1 m 0,0 l 8,4 -8,4 2,-4 z",Backward:"F1 m 8,0 l -2,4 2,4 -8,-4 z",Triangle:"F1 m 0,0 l 8,4.62 -8,4.62 z",BackwardTriangle:"F1 m 8,4 l 0,4 -8,-4 8,-4 0,4 z",Boomerang:"F1 m 0,0 l 8,4 -8,4 4,-4 -4,-4 z",BackwardBoomerang:"F1 m 8,0 l -8,4 8,4 -4,-4 4,-4 z",SidewaysV:"m 0,0 l 8,4 -8,4 0,-1 6,-3 -6,-3 0,-1 z",BackwardV:"m 8,0 l -8,4 8,4 0,-1 -6,-3 6,-3 0,-1 z",OpenTriangle:"m 0,0 l 8,4 -8,4",BackwardOpenTriangle:"m 8,0 l -8,4 8,4",OpenTriangleLine:"m 0,0 l 8,4 -8,4 m 8.5,0 l 0,-8",BackwardOpenTriangleLine:"m 8,0 l  -8,4 8,4 m -8.5,0 l 0,-8",OpenTriangleTop:"m 0,0 l 8,4 m 0,4",BackwardOpenTriangleTop:"m 8,0 l -8,4 m 0,4",OpenTriangleBottom:"m 0,8 l 8,-4",BackwardOpenTriangleBottom:"m 0,4 l 8,4",HalfTriangleTop:"F1 m 0,0 l 0,4 8,0 z m 0,8",BackwardHalfTriangleTop:"F1 m 8,0 l 0,4 -8,0 z m 0,8",HalfTriangleBottom:"F1 m 0,4 l 0,4 8,-4 z",BackwardHalfTriangleBottom:"F1 m 8,4 l 0,4 -8,-4 z",ForwardSemiCircle:"m 4,0 b 270 180 0 4 4",BackwardSemiCircle:"m 4,8 b 90 180 0 -4 4",Feather:"m 0,0 l 3,4 -3,4",BackwardFeather:"m 3,0 l -3,4 3,4",DoubleFeathers:"m 0,0 l 3,4 -3,4 m 3,-8 l 3,4 -3,4",BackwardDoubleFeathers:"m 3,0 l -3,4 3,4 m 3,-8 l -3,4 3,4",TripleFeathers:"m 0,0 l 3,4 -3,4 m 3,-8 l 3,4 -3,4 m 3,-8 l 3,4 -3,4",BackwardTripleFeathers:"m 3,0 l -3,4 3,4 m 3,-8 l -3,4 3,4 m 3,-8 l -3,4 3,4",ForwardSlash:"m 0,8 l 5,-8",BackSlash:"m 0,0 l 5,8",DoubleForwardSlash:"m 0,8 l 4,-8 m -2,8 l 4,-8",DoubleBackSlash:"m 0,0 l 4,8 m -2,-8 l 4,8",TripleForwardSlash:"m 0,8 l 4,-8 m -2,8 l 4,-8 m -2,8 l 4,-8",TripleBackSlash:"m 0,0 l 4,8 m -2,-8 l 4,8 m -2,-8 l 4,8",Fork:"m 0,4 l 8,0 m -8,0 l 8,-4 m -8,4 l 8,4",BackwardFork:"m 8,4 l -8,0 m 8,0 l -8,-4 m 8,4 l -8,4",LineFork:"m 0,0 l 0,8 m 0,-4 l 8,0 m -8,0 l 8,-4 m -8,4 l 8,4",BackwardLineFork:"m 8,4 l -8,0 m 8,0 l -8,-4 m 8,4 l -8,4 m 8,-8 l 0,8",CircleFork:"F1 m 6,4 b 0 360 -3 0 3 z m 0,0 l 6,0 m -6,0 l 6,-4 m -6,4 l 6,4",BackwardCircleFork:"F1 m 0,4 l 6,0 m -6,-4 l 6,4 m -6,4 l 6,-4 m 6,0 b 0 360 -3 0 3",CircleLineFork:"F1 m 6,4 b 0 360 -3 0 3 z m 1,-4 l 0,8 m 0,-4 l 6,0 m -6,0 l 6,-4 m -6,4 l 6,4",BackwardCircleLineFork:"F1 m 0,4 l 6,0 m -6,-4 l 6,4 m -6,4 l 6,-4 m 0,-4 l 0,8 m 7,-4 b 0 360 -3 0 3",Circle:"F1 m 8,4 b 0 360 -4 0 4 z",Block:"F1 m 0,0 l 0,8 8,0 0,-8 z",StretchedDiamond:"F1 m 0,3 l 5,-3 5,3 -5,3 -5,-3 z",Diamond:"F1 m 0,4 l 4,-4 4,4 -4,4 -4,-4 z",Chevron:"F1 m 0,0 l 5,0 3,4 -3,4 -5,0 3,-4 -3,-4 z",StretchedChevron:"F1 m 0,0 l 8,0 3,4 -3,4 -8,0 3,-4 -3,-4 z",NormalArrow:"F1 m 0,2 l 4,0 0,-2 4,4 -4,4 0,-2 -4,0 z",X:"m 0,0 l 8,8 m 0,-8 l -8,8",TailedNormalArrow:"F1 m 0,0 l 2,0 1,2 3,0 0,-2 2,4 -2,4 0,-2 -3,0 -1,2 -2,0 1,-4 -1,-4 z",DoubleTriangle:"F1 m 0,0 l 4,4 -4,4 0,-8 z  m 4,0 l 4,4 -4,4 0,-8 z",BigEndArrow:"F1 m 0,0 l 5,2 0,-2 3,4 -3,4 0,-2 -5,2 0,-8 z",ConcaveTailArrow:"F1 m 0,2 h 4 v -2 l 4,4 -4,4 v -2 h -4 l 2,-2 -2,-2 z",RoundedTriangle:"F1 m 0,1 a 1,1 0 0 1 1,-1 l 7,3 a 0.5,1 0 0 1 0,2 l -7,3 a 1,1 0 0 1 -1,-1 l 0,-6 z",SimpleArrow:"F1 m 1,2 l -1,-2 2,0 1,2 -1,2 -2,0 1,-2 5,0 0,-2 2,2 -2,2 0,-2 z",AccelerationArrow:"F1 m 0,0 l 0,8 0.2,0 0,-8 -0.2,0 z m 2,0 l 0,8 1,0 0,-8 -1,0 z m 3,0 l 2,0 2,4 -2,4 -2,0 0,-8 z",BoxArrow:"F1 m 0,0 l 4,0 0,2 2,0 0,-2 2,4 -2,4 0,-2 -2,0 0,2 -4,0 0,-8 z",TriangleLine:"F1 m 8,4 l -8,-4 0,8 8,-4 z m 0.5,4 l 0,-8",CircleEndedArrow:"F1 m 10,4 l -2,-3 0,2 -2,0 0,2 2,0 0,2 2,-3 z m -4,0 b 0 360 -3 0 3 z",DynamicWidthArrow:"F1 m 0,3 l 2,0 2,-1 2,-2 2,4 -2,4 -2,-2 -2,-1 -2,0 0,-2 z",EquilibriumArrow:"m 0,3 l 8,0 -3,-3 m 3,5 l -8,0 3,3",FastForward:"F1 m 0,0 l 3.5,4 0,-4 3.5,4 0,-4 1,0 0,8 -1,0 0,-4 -3.5,4 0,-4 -3.5,4 0,-8 z",Kite:"F1 m 0,4 l 2,-4 6,4 -6,4 -2,-4 z",HalfArrowTop:"F1 m 0,0 l 4,4 4,0 -8,-4 z m 0,8",HalfArrowBottom:"F1 m 0,8 l 4,-4 4,0 -8,4 z",OpposingDirectionDoubleArrow:"F1 m 0,4 l 2,-4 0,2 4,0 0,-2 2,4 -2,4 0,-2 -4,0 0,2 -2,-4 z",PartialDoubleTriangle:"F1 m 0,0 4,3 0,-3 4,4 -4,4 0,-3 -4,3 0,-8 z",LineCircle:"F1 m 0,0 l 0,8 m 7 -4 b 0 360 -3 0 3 z",DoubleLineCircle:"F1 m 0,0 l 0,8 m 2,-8 l 0,8 m 7 -4 b 0 360 -3 0 3 z",TripleLineCircle:"F1 m 0,0 l 0,8 m 2,-8 l 0,8 m 2,-8 l 0,8 m 7 -4 b 0 360 -3 0 3 z",CircleLine:"F1 m 6 4 b 0 360 -3 0 3 z m 1,-4 l 0,8",DiamondCircle:"F1 m 8,4 l -4,4 -4,-4 4,-4 4,4 m 8,0 b 0 360 -4 0 4 z",PlusCircle:"F1 m 8,4 b 0 360 -4 0 4 l -8 0 z m -4 -4 l 0 8",OpenRightTriangleTop:"m 8,0 l 0,4 -8,0 m 0,4",OpenRightTriangleBottom:"m 8,8 l 0,-4 -8,0",Line:"m 0,0 l 0,8",DoubleLine:"m 0,0 l 0,8 m 2,0 l 0,-8",TripleLine:"m 0,0 l 0,8 m 2,0 l 0,-8 m 2,0 l 0,8",PentagonArrow:"F1 m 8,4 l -4,-4 -4,0 0,8 4,0 4,-4 z"};var LayoutConditions=(w=>(w[w.None=0]="None",w[w.Added=1]="Added",w[w.Removed=2]="Removed",w[w.Shown=4]="Shown",w[w.Hidden=8]="Hidden",w[w.NodeSized=16]="NodeSized",w[w.GroupLayout=32]="GroupLayout",w[w.NodeReplaced=64]="NodeReplaced",w[w.Standard=127]="Standard",w[w.All=16777215]="All",w))(LayoutConditions||{});class Part extends Panel{P;ir;q;Pl;Sl;sr;me;Ml;Ba;an;nr;rg;Xr;lF;Ay;Dy;constructor(t,e){let i;typeof t=="string"||t instanceof PanelLayout?i=t:t&&(e=t),super(i),this.P=2408959,this.ir="",this.q=null,this.Pl="",this.Sl=null,this.sr=null,this.me="",this.Ml=null,this.Ba=null,this.an=new Point(NaN,NaN).b(),this.nr=null,this.rg=NaN,this.Xr=-1,this.lF=new Rect,this.Ay=null,this.Dy=NaN,e&&Object.assign(this,e)}cloneProtected(t){super.cloneProtected(t),t.P=this.P&-4097|16384|32768,t.ir=this.ir,this.q!==null&&(this.q.xe?t.q=this.q:t.q=this.q.copy()),t.Pl=this.Pl,t.sr=null,t.me=this.me,t.an.h(this.an),t.rg=this.rg}Wo(t){super.Wo(t),t.Fa(),t.Sl=null,t.nr=null,t.Ay=null}toString(){let t=U.Jn(this.constructor)+"#"+GSet.ks(this);return this.data!==null&&(t+="("+U.toString(this.data)+")"),t}static LayoutNone=0;static LayoutAdded=1;static LayoutRemoved=2;static LayoutShown=4;static LayoutHidden=8;static LayoutNodeSized=16;static LayoutGroupLayout=32;static LayoutNodeReplaced=64;static LayoutStandard=127;static LayoutAll=16777215;ii(){return this.q===null?this.q=new PartTemplateSettings:this.q.xe&&(this.q=this.q.copy()),this.q}La(){super.La(),this.q!==null&&(this.q.xe=!0)}Cf(t,e,i,s,n,o,r){const l=this.diagram;l!==null&&(t===3&&e==="elements"?n instanceof Panel?n.An(a=>{l.partManager.J2(a,l)}):n instanceof Picture&&l.iC(n):t===4&&e==="elements"&&(n instanceof Panel?n.An(a=>l.partManager.$2(a,l)):n instanceof Picture&&l.sC(n)),l.raiseChangedEvent(t,e,i,s,n,o,r))}updateTargetBindings(t){if(super.updateTargetBindings(t),this.data===null)return;const e=this.F.r,i=e.length;for(let n=0;n<i;n++){const o=e[n];o instanceof Panel&&o.An(r=>{r.data!==null&&r.wE(t)})}const s=this.adornments;for(;s.next();)s.value.updateTargetBindings(t)}Ho(){if(super.Ho(),this.nN()){const e=this.F.r,i=e.length;for(let s=0;s<i;s++){const n=e[s];n instanceof Panel&&n.An(o=>o.Ho())}}const t=this.adornments;for(;t.next();)t.value.Ho()}updateRelationshipsFromData(){this.data!==null&&this.diagram?.partManager.updateRelationshipsFromData(this)}get key(){const t=this.diagram;if(t!==null)return t.model.getKeyForNodeData(this.data)}get adornments(){return this.sr===null?EmptyIterator.instance:this.sr.iteratorValues}findAdornment(t){const e=this.sr;return e===null?null:e.get(t)}addAdornment(t,e){if(e===null)return;let i=null,s=this.sr;if(s!==null&&(i=s.get(t)),i!==e){if(i!==null){const o=i.diagram;o!==null&&o.remove(i)}s===null&&(s=new GMap,this.sr=s),e.ir!==t&&(e.category=t),s.set(t,e);const n=this.diagram;if(n!==null){n.add(e);const o=e.adornedObject;if(o!==null){const r=o.findBindingPanel();r!==null&&(e.data=r.data)}}}}removeAdornment(t){const e=this.sr;if(e===null)return;const i=e.get(t);if(i!==null){const s=i.diagram;s!==null&&(s.remove(i),i.data=null)}e.delete(t),e.count===0&&(this.sr=null)}clearAdornments(){const t=this.sr;if(t===null)return;const e=U.ot(),i=t.iterator;for(;i.next();){const n=i.key;e.push(n)}const s=e.length;for(let n=0;n<s;n++)this.removeAdornment(e[n]);U._(e)}updateAdornments(){const t=this.diagram;if(t===null)return;this.VE(t),this.zE(t);let e=this.adornments;for(;e.next();){const i=e.value;i.f(),i.hasPlaceholder()&&i.placeholder.f()}for(e=this.adornments;e.next();)e.value.updateTargetBindings()}invalidateAdornments(){const t=this.diagram;t!==null&&(t.Rs(),this.aF()!==!0&&this.hF(!0))}a2(){this.aF()!==!1&&(this.updateAdornments(),this.hF(!1))}VE(t){const e="Selection";if(this.isSelected&&this.selectionAdorned){const i=this.selectionObject;if(i!==null&&this.actualBounds.isReal()&&this.isVisible()&&i.isVisibleObject()&&i.actualBounds.isReal()){let s=this.findAdornment(e);if(s===null){let n=this.selectionAdornmentTemplate;n===null&&(this.Ir()?n=t.linkSelectionAdornmentTemplate:this instanceof Group?n=t.groupSelectionAdornmentTemplate:n=t.nodeSelectionAdornmentTemplate),s=n.copy(),s!==null&&(this.Ir()&&this.selectionObject===this.path&&(s.type=Panel.Link),s.adornedObject=i)}if(s!==null){s.type===Panel.Link&&s.f(),this.addAdornment(e,s);return}}}this.removeAdornment(e)}zE(t){const e=this;t.toolManager.mouseDownTools.each(i=>{i.isEnabled&&i.updateAdornments(e)}),t.toolManager.updateAdornments(e)}o2(t){this.Ml=t,t===null&&this.UI()}get layer(){return this.Ml}get diagram(){const t=this.Ml;return t==null?null:t.diagram}get layerName(){return this.Pl}set layerName(t){const e=this.Pl;if(e===t)return;let i=this.diagram;if(i!==null&&(i.findLayer(t)===null||i.partManager.addsToTemporaryLayer))return;this.Pl=t,i!==null&&i.invalidateDocumentBounds(),this.t("layerName",e,t);const s=this.layer;if(s===null||s.name===t||(i=s.diagram,i===null))return;const n=i.findLayer(t);if(n===null||n===s)return;let o=s.hi(-1,this,!0);o>=0&&i.raiseChangedEvent(4,"parts",s,this,null,o,!0),o=n.xh(99999999,this,!0),s.visible!==n.visible&&this.He(n.visible),o>=0&&i.raiseChangedEvent(3,"parts",n,null,this,!0,o);const r=this.layerChanged;if(r===null)return;const l=i.Y;i.Y=!0,r(this,s,n),i.Y=l}get layerChanged(){return this.q!==null?this.q.Fy:null}set layerChanged(t){const e=this.layerChanged;e!==t&&(t!==null&&U.S(t,Part,"layerChanged"),this.ii().Fy=t,this.t("layerChanged",e,t))}get zOrder(){return this.rg}set zOrder(t){const e=this.rg;if(e===t)return;this.rg=t;const i=this.layer;i!==null&&i.xb(-1,this),this.t("zOrder",e,t);const s=this.diagram;s!==null&&(s.Rs(),s.N())}XE(){const t=this.layer;t!==null&&t.xb(-1,this)}Pk(){if(this.ba()!==!1)return;this.IN(!0),this.Lf();const t=this.diagram;t!==null&&(t.Ip(this),t.requestUpdate())}cF(){if(this.P|=2097152,this.ba()===!1)return;const t=this.position,e=this.location;(!e.isReal()||!t.isReal())&&this.fF(t,e);const i=this.Ie,s=Rect.l().h(i);i._t(),i.x=t.x,i.y=t.y,i.b(),this.Id(s,i),Rect.i(s),this.IN(!1),this.Lf()}fo(t,e,i,s){const n=this.ui;n.e(t,e,i,s),this.Le===null&&(this.Le=new Transform);const o=this.Le;o.Xe(),this._p(o,t,e,i,s),this.Le=o,o.KP()||o.pm(n)}_p(t,e,i,s,n){if(this.it!==1&&t.it(this.it),this.Yt===0)return;let o=Spot.Center;this.locationSpot.isSpot()&&(o=this.locationSpot);const r=Point.l();if(this.locationObject!==this){const l=this.locationObject,a=l.naturalBounds;r.setSpot(a.x,a.y,a.width,a.height,o),l.Le!==null&&l.Le.wt(r),r.offset(-l.measuredBounds.x,-l.measuredBounds.y);let h=l.panel;for(;h!==null&&h!==this;)h.Le!==null&&h.Le.wt(r),r.offset(-h.measuredBounds.x,-h.measuredBounds.y),h=h.panel}else r.setSpot(e,i,s,n,o);t.Ps(this.Yt,r.x,r.y),Point.i(r)}get locationObject(){if(this.nr===null)if(this instanceof Adornment&&this.type!==Panel.Link&&this.hasPlaceholder())this.nr=this.placeholder;else{const t=this.locationObjectName;if(t!==""){const e=this.findObject(t);e!==null?this.nr=e:this.nr=this}else this.nr=this}return this.nr?.visible?this.nr:this}get minLocation(){return this.q!==null?this.q.vy:Point.nL}set minLocation(t){const e=this.minLocation;e.equals(t)||(t=t.C(),this.ii().vy=t,this.t("minLocation",e,t))}get maxLocation(){return this.q!==null?this.q.Ry:Point.oL}set maxLocation(t){const e=this.maxLocation;e.equals(t)||(t=t.C(),this.ii().Ry=t,this.t("maxLocation",e,t))}get locationObjectName(){return this.q!==null?this.q.Oy:""}set locationObjectName(t){const e=this.locationObjectName;e!==t&&(this.ii().Oy=t,this.nr=null,this.f(),this.t("locationObjectName",e,t))}get locationSpot(){return this.q!==null?this.q.Iy:Spot.TopLeft}set locationSpot(t){const e=this.locationSpot;e.equals(t)||(t=t.C(),this.ii().Iy=t,this.f(),this.t("locationSpot",e,t))}move(t,e){e===!0?this.location=t:this.position=t}moveTo(t,e,i){const s=Point.O(t,e);this.move(s,i),Point.i(s)}isVisible(){if(!this.visible)return!1;const t=this.layer;if(t!==null){if(!t.visible)return!1;const i=t.diagram;if(i!==null&&i.animationManager.ob(this))return!0}const e=this.containingGroup;return!(e!==null&&(!e.isSubGraphExpanded||!e.isVisible()))}He(t){const e=this.diagram;t?(this.invalidateLayout(4),this.invalidateAdornments(),e!==null&&e.Ip(this)):(this.invalidateLayout(8),this.clearAdornments()),this.Fa(),e!==null&&(e.invalidateDocumentBounds(),this instanceof Node&&this.canAvoid()&&e.Cd(this),e.N())}findObject(t){if(this.name===t)return this;let e=this.Ay;if(e===null&&(this.Ay=e=new GMap),e.get(t)!==null)return e.get(t);const i=super.findObject(t);return i!==null?(e.set(t,i),i):(e.set(t,null),null)}d0(){this.Ay=null}getRelativePoint(t,e,i){i===void 0&&(i=new Point);const s=e.isNoSpot()?Spot.Center:e,n=t.naturalBounds;if(i.e(n.width*s.x+s.offsetX,n.height*s.y+s.offsetY),t===null||t===this)return i;t.T.wt(i);let o=t.panel;for(;o!==null&&o!==this;)o.T.wt(i),o=o.panel;return this.Le!==null&&this.Le.wt(i),i.offset(-this.ui.x,-this.ui.y),i}getDocumentBounds(t){return t===void 0&&(t=new Rect),t.h(this.actualBounds)}ensureBounds(){this.ct(1/0,1/0),this.zt()}VD(t){const e=this.locationSpot,i=this.locationObject;let s=i.naturalBounds;s.isReal()||(s=Rect.gm);const n=i instanceof Shape?i.strokeWidth:0;if(t.setSpot(0,0,s.width+n,s.height+n,e),i!==this){t.offset(-n/2,-n/2),i.T.wt(t);let o=i.panel;for(;o!==null&&o!==this;)o.T.wt(t),o=o.panel}return this.Le!==null&&this.Le.wt(t),t.offset(-this.ui.x,-this.ui.y),t}wh(t,e){const i=e===void 0?this.lF:e,s=this.GE(),n=s*2;if(!this.isShadowed)return i.e(t.x-1-s,t.y-1-s,t.width+2+n,t.height+2+n),i;let o=t.x,r=t.y,l=t.width,a=t.height;const h=this.shadowBlur,c=this.shadowOffset;return l+=h,a+=h,o-=h/2,r-=h/2,c.x>0?l+=c.x:(o+=c.x,l-=c.x),c.y>0?a+=c.y:(r+=c.y,a-=c.y),i.e(o-1,r-1,l+2,a+2),i}ME(){return this.type===Panel.Link&&this instanceof Adornment&&this.category==="Selection"&&this.adornedObject instanceof Shape&&this.adornedPart.findMainElement()===this.adornedObject?this.adornedObject.strokeWidth:0}GE(){return isNaN(this.Dy)&&(this.Dy=this.qD()),this.Dy}Xf(){this.Dy=NaN}zt(){if(this.fs()===!1){this.cF();return}this.uo(!1);const t=this.Ie,e=Rect.l();e.h(t);const i=this.Wc();this.Da(0,0,this.ui.width,this.ui.height);const s=this.position;this.fF(s,this.location),t._t(),t.x=s.x,t.y=s.y,t.b(),this.Id(e,t),e.equals(t)?this.Cn(i):this.Oi()&&(!G.c(e.width,t.width)||!G.c(e.height,t.height))&&e.isReal()&&this.invalidateLayout(16),Rect.i(e),this.IN(!1)}Id(t,e){const i=this.diagram;if(i===null)return;let s=!1;if(i.Mh===!1&&t.isReal()){const n=Rect.l();n.h(i.documentBounds),n.subtractMargin(i.padding),t.x>n.x&&t.y>n.y&&t.right<n.right&&t.bottom<n.bottom&&e.x>n.x&&e.y>n.y&&e.right<n.right&&e.bottom<n.bottom&&(s=!0),Rect.i(n)}i.GA(this),(this.YE()===!0||!t.equals(e))&&this.zA(s,i),i.N(),!(!t.isReal()&&!e.isReal()||t.equalsApproxClose(e))&&(this instanceof Node&&!i.undoManager.isUndoingRedoing&&this.invalidateConnectedLinks(),this.Fa())}get location(){return this.an}set location(t){const e=t.x,i=t.y,s=this.an;(s.x!==e&&(!isNaN(s.x)||!isNaN(e))||s.y!==i&&(!isNaN(s.y)||!isNaN(i)))&&(t=t.copy(),this.KE(t,s)&&this.t("location",s,t.copy()))}KE(t,e){if(this.Ir())return!1;if(this.an=t,this.P|=2097152,this.fs()===!1){this.Pk();const i=this.ft;if(i.isReal()){const s=this.diagram;if(s===null||s.animationManager.isTicking||!s.undoManager.isUndoingRedoing){const n=i.copy();i.e(i.x+(t.x-e.x),i.y+(t.y-e.y)),this.uF(s,i,n.x,n.y),this.t("position",n,i.copy())}}}return!0}eN(t,e,i){if(this.Ir()||!t.isReal())return!1;const s=this.diagram;if(s!==null&&this.uF(s,t,e,i),this.ft=t,this.P&=-2097153,this.an.isReal()&&(s===null||s.animationManager.isTicking||!s.undoManager.isUndoingRedoing)){const n=this.an;this.an=new Point(n.x+(t.x-e),n.y+(t.y-i)).b(),this.t("location",n,this.an.copy())}return this.ba()===!1&&this.fs()===!1&&(this.Pk(),this.cF()),!0}uF(t,e,i,s){if(t===null||this instanceof Adornment)return;const n=t.animationManager;n.Ne&&n.oA(this,new Point(i,s),e,!1)}$c(t,e,i){const s=this.an,n=this.ft;if(i){if(s.x===t&&s.y===e)return;this.ba()||this.fs()?n.e(NaN,NaN):n.e(n.x+t-s.x,n.y+e-s.y),s.e(t,e)}else{if(n.x===t&&n.y===e)return;s.e(s.x+t-n.x,s.y+e-n.y),n.e(t,e)}this.Pk()}iN(){this.P&=-2097153,this.Pk()}fF(t,e){const i=this.VD(Point.l()),s=this.diagram,n=e.isReal(),o=t.isReal();n&&o?(this.P&2097152)!==0?this.dF(t,e,s,i):this.gF(t,e,s,i):n?this.dF(t,e,s,i):o&&this.gF(t,e,s,i),this.P|=2097152,Point.i(i),this.Lf()}dF(t,e,i,s){const n=t.x,o=t.y;if(t.e(e.x-s.x,e.y-s.y),i!==null){const r=i.animationManager,l=r.defaultAnimation.isAnimating;!l&&r.Ne&&!(this instanceof Adornment)&&r.oA(this,new Point(n,o),t,!1),!l&&!(t.x===n&&t.y===o)&&this.t("position",new Point(n,o),t.copy())}}gF(t,e,i,s){const n=e.copy();e.e(t.x+s.x,t.y+s.y),!e.equals(n)&&i!==null&&this.t("location",n,e.copy())}zA(t,e){this.JC(!1),this instanceof Node&&e.Cd(this),!this.layer.isTemporary&&!t&&e.invalidateDocumentBounds();const i=this.Ie,s=e.viewportBounds;s.isReal()?this.Wc()?(i.fL(s,10)?e.Rs():this.Cn(!1),this.updateAdornments()):this.isVisible()&&i.intersectsRect(s)?(this.Cn(!0),e.Rs(),this.updateAdornments()):this.invalidateAdornments():e.Rs()}al(){return!0}Oi(){return!0}Ir(){return!1}nn(){return!0}hasPlaceholder(){return!1}get category(){return this.ir}set category(t){const e=this.ir;if(e===t)return;this.svg!==null&&(this.svg.remove(),this.ts(!0));const i=this.diagram,s=this.data;let n=null;if(i!==null&&s!==null&&!(this instanceof Adornment)){const o=i.model.undoManager;o.isEnabled&&!o.isUndoingRedoing&&(n=this.clone(),n.F.addAll(this.F))}if(this.ir=t,this.t("category",e,t),i!==null&&s!==null&&!(this instanceof Adornment)){const o=i.model;if(o.undoManager.isUndoingRedoing)return;if(this.Ir()){i.partManager.setLinkCategoryForData(s,t);const r=i.partManager.findLinkTemplateForCategory(t);if(r!==null){r.Ut();const l=r.copy();l!==null&&this.EN(l,e,t)}}else{o!==null&&o.setCategoryForNodeData(s,t);const r=i.partManager.findTemplateForNodeData(s,t);if(r!==null){r.Ut();const l=r.copy();if(l!==null&&!(l instanceof Link)){const a=this.location.copy();this.EN(l,e,t),this.location.isReal()||(this.location=a)}}}if(n!==null){const r=this.clone();r.F.addAll(this.F),this.t("self",n,r)}}else if(this instanceof Adornment){const o=this.adornedPart;if(o!==null){const r=o.sr;r!==null&&r.delete(e),o.addAdornment(this.category,this)}}}get self(){return this}set self(t){this.EN(t,this.category,t.category)}static mF=!1;EN(t,e,i){t.constructor!==this.constructor&&(Part.mF||(Part.mF=!0,U.jt('Should not change the class of the Part when changing category from "'+e+'" to "'+i+'"'),U.jt("  Old class: "+U.Jn(this.constructor)+", new class: "+U.Jn(t.constructor)+", part: "+this.toString()))),this.clearAdornments();const s=this.data,n=this.layerName,o=this.isSelected,r=this.isHighlighted;let l=!0,a=!0,h=!1;this instanceof Node&&(l=this.isTreeLeaf,a=this.isTreeExpanded,h=this.wasTreeExpanded),this.DI(),t.Wo(this),t.kD(this),t.cloneProtected(this),this.ir=i,this.svg!==null&&(this.svg.remove(),this.hf(),this.ts(!0)),this.f(),this.N();const c=this.diagram;let f=!0;c!==null&&(f=c.skipsUndoManager,c.skipsUndoManager=!0),this.ne=s,this.P=o?this.P|4096:this.P&-4097,this.P=r?this.P|524288:this.P&-524289,this instanceof Node&&(this.U=l?this.U|4:this.U&-5,this.U=a?this.U|1:this.U&-2,this.U=h?this.U|2:this.U&-3),s!==null&&this.updateTargetBindings();const u=this.layerName;u!==n&&(this.Pl=n,this.layerName=u),c!==null&&(c.skipsUndoManager=f),this.Oi()&&this.invalidateLayout(64)}canCopy(){if(!this.copyable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowCopy)return!1;const e=t.diagram;return e===null?!0:!!e.allowCopy}canDelete(){if(!this.deletable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowDelete)return!1;const e=t.diagram;return e===null?!0:!!e.allowDelete}canEdit(){if(!this.textEditable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowTextEdit)return!1;const e=t.diagram;return e===null?!0:!!e.allowTextEdit}canGroup(){if(!this.groupable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowGroup)return!1;const e=t.diagram;return e===null?!0:!!e.allowGroup}canMove(){if(!this.movable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowMove)return!1;const e=t.diagram;return e===null?!0:!!e.allowMove}canReshape(){if(!this.reshapable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowReshape)return!1;const e=t.diagram;return e===null?!0:!!e.allowReshape}canResize(){if(!this.resizable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowResize)return!1;const e=t.diagram;return e===null?!0:!!e.allowResize}canRotate(){if(!this.rotatable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowRotate)return!1;const e=t.diagram;return e===null?!0:!!e.allowRotate}canSelect(){if(!this.selectable)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowSelect)return!1;const e=t.diagram;return e===null?!0:!!e.allowSelect}get copyable(){return(this.P&1)!==0}set copyable(t){const e=(this.P&1)!==0;e!==t&&(this.P=this.P^1,this.t("copyable",e,t))}get deletable(){return(this.P&2)!==0}set deletable(t){const e=(this.P&2)!==0;e!==t&&(this.P=this.P^2,this.t("deletable",e,t))}get textEditable(){return(this.P&4)!==0}set textEditable(t){const e=(this.P&4)!==0;e!==t&&(this.P=this.P^4,this.t("textEditable",e,t),this.invalidateAdornments())}get groupable(){return(this.P&8)!==0}set groupable(t){const e=(this.P&8)!==0;e!==t&&(this.P=this.P^8,this.t("groupable",e,t))}get movable(){return(this.P&16)!==0}set movable(t){const e=(this.P&16)!==0;e!==t&&(this.P=this.P^16,this.t("movable",e,t))}get selectionAdorned(){return(this.P&32)!==0}set selectionAdorned(t){const e=(this.P&32)!==0;e!==t&&(this.P=this.P^32,this.t("selectionAdorned",e,t),this.invalidateAdornments())}get isInDocumentBounds(){return(this.P&64)!==0}set isInDocumentBounds(t){const e=(this.P&64)!==0;if(e!==t){this.P=this.P^64;const i=this.diagram;i!==null&&i.invalidateDocumentBounds(),this.t("isInDocumentBounds",e,t)}}get isLayoutPositioned(){return(this.P&128)!==0}set isLayoutPositioned(t){const e=(this.P&128)!==0;e!==t&&(this.P=this.P^128,this.t("isLayoutPositioned",e,t),this.invalidateLayout(t?4:8))}get selectable(){return(this.P&256)!==0}set selectable(t){const e=(this.P&256)!==0;e!==t&&(this.P=this.P^256,this.t("selectable",e,t),this.invalidateAdornments())}get reshapable(){return(this.P&512)!==0}set reshapable(t){const e=(this.P&512)!==0;e!==t&&(this.P=this.P^512,this.t("reshapable",e,t),this.invalidateAdornments())}get resizable(){return(this.P&1024)!==0}set resizable(t){const e=(this.P&1024)!==0;e!==t&&(this.P=this.P^1024,this.t("resizable",e,t),this.invalidateAdornments())}get rotatable(){return(this.P&2048)!==0}set rotatable(t){const e=(this.P&2048)!==0;e!==t&&(this.P=this.P^2048,this.t("rotatable",e,t),this.invalidateAdornments())}get isSelected(){return(this.P&4096)!==0}set isSelected(t){const e=(this.P&4096)!==0;if(e!==t){const i=this.diagram;if(t){if(!this.canSelect())return;if(i!==null){const o=i.maxSelectionCount;if(i.selection.count>=o)return}}this.P=this.P^4096;let s=!1;if(i!==null){s=i.skipsUndoManager,i.skipsUndoManager=!0;const o=i.selection;o._t(),t?o.add(this):o.delete(this),o.b()}this.t("isSelected",e,t),this.invalidateAdornments();const n=this.selectionChanged;n!==null&&n(this),i!==null&&(i.requestUpdate(),i.skipsUndoManager=s)}}get isHighlighted(){return(this.P&524288)!==0}set isHighlighted(t){const e=(this.P&524288)!==0;if(e!==t){this.P=this.P^524288;const i=this.diagram;if(i!==null){const n=i.highlighteds;n._t(),t?n.add(this):n.delete(this),n.b()}this.t("isHighlighted",e,t),this.N();const s=this.highlightedChanged;s!==null&&s(this)}}get isShadowed(){return(this.P&8192)!==0}set isShadowed(t){const e=(this.P&8192)!==0;e!==t&&(this.P=this.P^8192,this.ts(!0),this.t("isShadowed",e,t),this.N())}aF(){return(this.P&16384)!==0}hF(t){t?this.P|=16384:this.P&=-16385}ba(){return(this.P&32768)!==0}IN(t){t?this.P|=32768:this.P&=-32769}YE(){return(this.P&65536)!==0}JC(t){t?this.P|=65536:this.P&=-65537}Wc(){return this.layer===null?!1:this.layer.af.has(this)}Cn(t){this.layer!==null&&(t?this.layer.af.add(this):this.layer.af.delete(this))}pF(){return(this.P&1048576)!==0}Sk(t){t?this.P|=1048576:this.P&=-1048577}get isAnimated(){return(this.P&262144)!==0}set isAnimated(t){const e=(this.P&262144)!==0;e!==t&&(this.P=this.P^262144,this.t("isAnimated",e,t))}get highlightedChanged(){return this.q!==null?this.q.Ey:null}set highlightedChanged(t){const e=this.highlightedChanged;e!==t&&(t!==null&&U.S(t,Part,"highlightedChanged"),this.ii().Ey=t,this.t("highlightedChanged",e,t))}get selectionObjectName(){return this.q!==null?this.q.Uy:""}set selectionObjectName(t){const e=this.selectionObjectName;e!==t&&(this.ii().Uy=t,this.Sl=null,this.t("selectionObjectName",e,t))}get selectionAdornmentTemplate(){return this.q!==null?this.q.By:null}set selectionAdornmentTemplate(t){const e=this.selectionAdornmentTemplate;e!==t&&(t!==null&&t.Ut(),this.ii().By=t,this.t("selectionAdornmentTemplate",e,t))}get selectionObject(){if(this.Sl===null){const t=this.selectionObjectName;if(t!==null&&t!==""){const e=this.findObject(t);e!==null?this.Sl=e:this.Sl=this}else if(this instanceof Link){const e=this.path;e!==null?this.Sl=e:this.Sl=this}else this.Sl=this}return this.Sl}get selectionChanged(){return this.q!==null?this.q.Vy:null}set selectionChanged(t){const e=this.selectionChanged;e!==t&&(t!==null&&U.S(t,Part,"selectionChanged"),this.ii().Vy=t,this.t("selectionChanged",e,t))}get resizeAdornmentTemplate(){return this.q!==null?this.q.zy:null}set resizeAdornmentTemplate(t){const e=this.resizeAdornmentTemplate;e!==t&&(this.ii().zy=t!==null?t.Ut():null,this.t("resizeAdornmentTemplate",e,t))}get resizeObjectName(){return this.q!==null?this.q.Xy:""}set resizeObjectName(t){const e=this.resizeObjectName;e!==t&&(this.ii().Xy=t,this.t("resizeObjectName",e,t))}get resizeObject(){const t=this.resizeObjectName;if(t!==""){const e=this.findObject(t);if(e!==null)return e}return this}get resizeCellSize(){return this.q!==null?this.q.Gy:Size.cx}set resizeCellSize(t){const e=this.resizeCellSize;e.equals(t)||(t=t.C(),this.ii().Gy=t,this.t("resizeCellSize",e,t))}get rotateAdornmentTemplate(){return this.q!==null?this.q.Yy:null}set rotateAdornmentTemplate(t){const e=this.rotateAdornmentTemplate;e!==t&&(this.ii().Yy=t!==null?t.Ut():null,this.t("rotateAdornmentTemplate",e,t))}get rotateObjectName(){return this.q!==null?this.q.Ky:""}set rotateObjectName(t){const e=this.rotateObjectName;e!==t&&(this.ii().Ky=t,this.t("rotateObjectName",e,t))}get rotateObject(){const t=this.rotateObjectName;if(t!==""){const e=this.findObject(t);if(e!==null)return e}return this}get rotationSpot(){return this.q!==null?this.q.Hy:Spot.Default}set rotationSpot(t){const e=this.rotationSpot;e.equals(t)||(t=t.C(),this.ii().Hy=t,this.t("rotationSpot",e,t))}get text(){return this.me}set text(t){const e=this.me;e!==t&&(this.me=t,this.t("text",e,t))}get containingGroup(){return this.Ba}set containingGroup(t){if(this.Oi()){const e=this.Ba;if(e!==t){t!==null&&(this===t||t.isMemberOf(this))&&(this===t&&U.n("Cannot make a Group a member of itself: "+this.toString()),U.n("Cannot make a Group indirectly contain itself: "+this.toString()+" already contains "+t.toString())),this.invalidateLayout(2);const i=this.diagram;if(e!==null?e.UN(this):this instanceof Group&&i!==null&&i.rl.delete(this),this.Ba=t,t!==null?t.BN(this):this instanceof Group&&i!==null&&i.rl.add(this),this.invalidateLayout(1),i!==null&&i.Y){const n=this.data,o=i.model;if(n!==null&&o.Bh()){const r=t!==null?t.data:null;o.setGroupForData(n,o.getKeyForNodeData(r))}}const s=this.containingGroupChanged;if(s!==null){let n=!0;i!==null&&(n=i.Y,i.Y=!0),s(this,e,t),i!==null&&(i.Y=n)}if(this instanceof Group){const n=new GSet;Part.Sa(n,this,!0,0,!0);const o=n.iterator;for(;o.next();){const r=o.value;if(r instanceof Node){const l=r.linksConnected;for(;l.next();)l.value.lg()}}}if(this instanceof Node){const n=this.linksConnected;for(;n.next();)n.value.lg();const o=this.labeledLink;o!==null&&o.lg()}this.t("containingGroup",e,t),t!==null&&t.XE()}}else U.n("cannot set the Part.containingGroup of a Link or Adornment")}Fa(){const t=this.containingGroup;t!==null&&(t.hasPlaceholder()&&t.placeholder.f(),t.f(),t.invalidateConnectedLinks())}N(){const t=this.diagram;t!==null&&!this.fs()&&!this.ba()&&this.isVisible()&&this.Ie.isReal()&&t.N(this.wh(this.Ie))}f(){if(this.Ko())return;super.f();const t=this.diagram;t!==null&&(t.Ip(this),this instanceof Node&&this.labeledLink!==null&&this.labeledLink.Rf(),t.requestUpdate(!0))}Rf(t){if(this.fs())return;const e=this.diagram;e!==null&&(e.Ip(this),this instanceof Node&&this.invalidateConnectedLinks(),e.requestUpdate()),this.uo(!0)}fp(t){if(!t){const e=this.Ba;e!==null&&e.BN(this)}}dp(t){if(!t){const e=this.Ba;e!==null&&e.UN(this)}}xf(){const t=this.data;if(t!==null){const e=this.diagram;if(e!==null){const i=e.model;i!==null&&i.removeNodeData(t)}}}get containingGroupChanged(){return this.q!==null?this.q.qy:null}set containingGroupChanged(t){const e=this.containingGroupChanged;e!==t&&(t!==null&&U.S(t,Part,"containingGroupChanged"),this.ii().qy=t,this.t("containingGroupChanged",e,t))}findSubGraphLevel(){return this.VN(this)}VN(t){const e=t.containingGroup;if(e!==null)return 1+this.VN(e);if(t instanceof Node){const i=t.labeledLink;if(i!==null)return this.VN(i)}return 0}findTopLevelPart(){return this.zN(this)}zN(t){const e=t.containingGroup;if(e!==null)return this.zN(e);if(t instanceof Node){const i=t.labeledLink;if(i!==null)return this.zN(i)}return t}get isTopLevel(){return!(this.containingGroup!==null||this instanceof Node&&this.labeledLink!==null)}isMemberOf(t){return t instanceof Group?this.XN(this,t):!1}XN(t,e){if(t===e||e===null)return!1;const i=t.containingGroup;if(i!==null&&(i===e||this.XN(i,e)))return!0;if(t instanceof Node){const s=t.labeledLink;if(s!==null)return this.XN(s,e)}return!1}findCommonContainingGroup(t){if(t===null)return null;if(this===t)return this.containingGroup;let e=this;for(;e!==null;){if(e instanceof Group&&e.Sk(!0),e instanceof Node){const s=e.labeledLink;s!==null&&(e=s)}e=e.containingGroup}let i=null;for(e=t;e!==null;){if(e.pF()){i=e;break}if(e instanceof Node){const s=e.labeledLink;s!==null&&(e=s)}e=e.containingGroup}for(e=this;e!==null;){if(e instanceof Group&&e.Sk(!1),e instanceof Node){const s=e.labeledLink;s!==null&&(e=s)}e=e.containingGroup}return i}get layoutConditions(){return this.q!==null?this.q.jy:127}set layoutConditions(t){const e=this.layoutConditions;e!==t&&(this.ii().jy=t,this.t("layoutConditions",e,t))}canLayout(){if(!this.isLayoutPositioned||!this.isVisible())return!1;const t=this.layer;return!(t!==null&&t.isTemporary||this instanceof Node&&this.isLinkLabel)}HE(t){if(!this.isLayoutPositioned||(t&this.layoutConditions)===0)return!1;const e=this.layer;if(e!==null&&e.isTemporary||this instanceof Node&&this.isLinkLabel)return!1;const i=this.diagram;return!(i!==null&&i.undoManager.isUndoingRedoing)}invalidateLayout(t){if(t===void 0&&(t=16777215),!this.HE(t))return;const e=this.Ba;if(e!==null){const i=e.layout;i!==null?i.g():e.invalidateLayout(t)}else{const i=this.diagram;if(i!==null){const s=i.layout;s!==null&&s.g()}}}XA(){if(!this.isVisible())return!1;const t=this.layer;return!(t!==null&&t.isTemporary)}static Sa(t,e,i,s,n,o){if(o===void 0&&(o=null),!t.has(e)&&!(o!==null&&!o(e))&&!(e instanceof Adornment)){if(t.add(e),e instanceof Node){if(i&&e instanceof Group){const r=e.memberParts;for(;r.next();){const l=r.value;Part.Sa(t,l,i,s,n,o)}}if(n!==!1){const r=e.linksConnected;for(;r.next();){const l=r.value;if(t.has(l))continue;const a=l.fromNode,h=l.toNode,c=a===null||t.has(a),f=h===null||t.has(h);(n?c&&f:c||f)&&Part.Sa(t,l,i,s,n,o)}}if(s>1){const r=e.findTreeChildrenNodes();for(;r.next();){const l=r.value;Part.Sa(t,l,i,s-1,n,o)}}}else if(e instanceof Link){const r=e.labelNodes;for(;r.next();){const l=r.value;Part.Sa(t,l,i,s,n,o)}}}}get dragComputation(){return this.q!==null?this.q.Wy:null}set dragComputation(t){const e=this.dragComputation;e!==t&&(t!==null&&U.S(t,Part,"dragComputation"),this.ii().Wy=t,this.t("dragComputation",e,t))}get shadowOffset(){return this.q!==null?this.q.Jy:Point.rL}set shadowOffset(t){const e=this.shadowOffset;e.equals(t)||(t=t.C(),this.ii().Jy=t,this.N(),this.t("shadowOffset",e,t))}get shadowColor(){return this.q!==null?this.q.$y:"gray"}set shadowColor(t){const e=this.shadowColor;e!==t&&(this.ii().$y=t,this.N(),this.t("shadowColor",e,t))}get shadowBlur(){return this.q!==null?this.q.On:4}set shadowBlur(t){const e=this.shadowBlur;e!==t&&(this.ii().On=t,this.N(),this.t("shadowBlur",e,t))}}class PartTemplateSettings{xe;Fy;qy;By;Uy;Vy;Ey;zy;Xy;Gy;Yy;Ky;Hy;Oy;Iy;vy;Ry;Wy;jy;Jy;$y;On;constructor(){this.xe=!1,this.Fy=null,this.qy=null,this.By=null,this.Uy="",this.Vy=null,this.Ey=null,this.zy=null,this.Xy="",this.Gy=Size.cx,this.Yy=null,this.Ky="",this.Hy=Spot.Default,this.Oy="",this.Iy=Spot.TopLeft,this.vy=Point.nL,this.Ry=Point.oL,this.Wy=null,this.jy=127,this.Jy=Point.rL,this.$y="gray",this.On=4}copy(){const t=new PartTemplateSettings;return t.Fy=this.Fy,t.qy=this.qy,t.By=this.By,t.Uy=this.Uy,t.Vy=this.Vy,t.Ey=this.Ey,t.zy=this.zy,t.Xy=this.Xy,t.Gy=this.Gy.C(),t.Yy=this.Yy,t.Ky=this.Ky,t.Hy=this.Hy.C(),t.Oy=this.Oy,t.Iy=this.Iy.C(),t.vy=this.vy.C(),t.Ry=this.Ry.C(),t.Wy=this.Wy,t.jy=this.jy,t.Jy=this.Jy.C(),t.$y=this.$y,t.On=this.On,t}}class Adornment extends Part{Ls;vt;nM;oM;Vf;constructor(t,e){let i;typeof t=="string"||t instanceof PanelLayout?i=t:t&&(e=t),super(i),this.P&=-257,this.Pl="Adornment",this.Ls=null,this.nM=0,this.oM=!1,this.vt=null,this.Vf=null,e&&Object.assign(this,e)}toString(){const t=this.adornedPart;return"Adornment("+this.category+")"+(t!==null?t.toString():"")}updateRelationshipsFromData(){}pN(){const t=this.adornedObject;if(!(t instanceof Shape))return;const e=t.part;if(!(e instanceof Link))return;const i=e.path;if(i===null)return;const s=i.geometry,n=this.F.r,o=n.length;for(let r=0;r<o;r++){const l=n[r];l.isPanelMain&&l instanceof Shape&&(l.dt=s)}}hasPlaceholder(){return this.vt!==null&&this.vt.isVisibleObject()}get placeholder(){return this.vt}get adornedObject(){return this.Ls}set adornedObject(t){const e=this.adornedPart;let i=null;t!==null&&(i=t.part),e!==null&&(t===null||e!==i)&&e.removeAdornment(this.category),this.Ls=t,i!==null&&i.addAdornment(this.category,this)}get adornedPart(){const t=this.Ls;return t!==null?t.part:null}al(){const t=this.Ls;if(t===null)return!0;const e=t.part;return e===null||!e.fs()}Oi(){return!1}get containingGroup(){return null}Cf(t,e,i,s,n,o,r){if(t===3&&e==="elements"){if(n instanceof Placeholder)this.vt===null&&(this.vt=n);else if(n instanceof Panel){const l=n.findInVisualTree(a=>a instanceof Placeholder);l instanceof Placeholder&&this.vt===null&&(this.vt=l)}}else t===4&&e==="elements"&&this.vt!==null&&(s===this.vt?this.vt=null:s instanceof Panel&&this.vt.isContainedBy(s)&&(this.vt=null));super.Cf(t,e,i,s,n,o,r)}updateAdornments(){}xf(){}}var PortSpreading=(w=>(w[w.None=0]="None",w[w.Evenly=1]="Evenly",w[w.Packed=2]="Packed",w))(PortSpreading||{});class Node extends Part{U;Rt;Qf;Cl;Va;di;oe;constructor(t,e){let i;typeof t=="string"||t instanceof PanelLayout?i=t:t&&(e=t),super(i),this.U=13,this.Rt=null,this.oe=new List,this.Qf=null,this.Cl=null,this.di=null,this.Va=!1,e&&Object.assign(this,e)}cloneProtected(t){super.cloneProtected(t),t.U=this.U,this.Rt!==null&&(this.Rt.xe?t.Rt=this.Rt:t.Rt=this.Rt.copy())}Wo(t){super.Wo(t),t.invalidateConnectedLinks(),t.Cl=this.Cl,t.di=null}static SpreadingNone=0;static SpreadingEvenly=1;static SpreadingPacked=2;Nl(){return this.Rt===null?this.Rt=new NodeTemplateSettings:this.Rt.xe&&(this.Rt=this.Rt.copy()),this.Rt}La(){super.La(),this.Rt!==null&&(this.Rt.xe=!0)}yF(t){t!==null&&(this.Cl===null&&(this.Cl=new GSet),this.Cl.add(t))}wF(t){t!==null&&this.Cl!==null&&this.Cl.delete(t)}xF(t,e,i){if(t===null||this.Cl===null)return null;const s=this.Cl.iterator;for(;s.next();){const n=s.value;if(n.Zy===this&&n.Mk===t&&n.GN===e&&n.YN===i||n.Zy===t&&n.Mk===this&&n.GN===i&&n.YN===e)return n}return null}invalidateLinkBundle(t,e,i){e==null&&(e=""),i==null&&(i="");const s=this.xF(t,e,i);s!==null&&s.ag()}Cf(t,e,i,s,n,o,r){t===3&&e==="elements"?this.di=null:t===4&&e==="elements"&&(this.di=null),super.Cf(t,e,i,s,n,o,r)}invalidateConnectedLinks(t,e){const i=this.linksConnected;for(;i.next();){const s=i.value;t&&t.has(s)||e&&s.fromPort!==e&&s.toPort!==e||(this.ti(s.fromPort),this.ti(s.toPort),s.ee())}}ti(t){if(t===null)return;const e=t.Fd;e!==null&&e.ag();const i=t.part,s=i.containingGroup;s!==null&&!i.isVisible()&&s.ti(s.port)}al(){return!0}get portSpreading(){return this.Rt!==null?this.Rt.Qy:1}set portSpreading(t){const e=this.portSpreading;if(e!==t){this.Nl().Qy=t,this.t("portSpreading",e,t);const i=this.diagram;if(i!==null&&i.undoManager.isUndoingRedoing)return;this.invalidateConnectedLinks()}}get avoidable(){return(this.U&8)!==0}set avoidable(t){const e=(this.U&8)!==0;if(e!==t){this.U=this.U^8;const i=this.diagram;i!==null&&i.Cd(this),this.t("avoidable",e,t)}}get avoidableMargin(){return this.Rt!==null?this.Rt._y:Margin.dL}set avoidableMargin(t){typeof t=="number"&&(t=new Margin(t));const e=this.avoidableMargin;if(!e.equals(t)){t=t.C(),this.Nl()._y=t;const i=this.diagram;i!==null&&i.Cd(this),this.t("avoidableMargin",e,t)}}canAvoid(){return this.avoidable&&!this.isLinkLabel}getAvoidableRect(t){return t.set(this.actualBounds),t.addMargin(this.avoidableMargin),t}findVisibleNode(){let t=this;for(;t!==null&&!t.isVisible();)t=t.containingGroup;return t}isVisible(){if(!super.isVisible())return!1;let t=!0,e=1;const i=this.diagram;if(i!==null){if(i.animationManager.ob(this))return!0;t=i.isTreePathToChildren,e=i.treeCollapsePolicy}if(e===1){const n=this.findTreeParentNode();if(n!==null&&!n.isTreeExpanded)return!1}else if(e===2){const n=t?this.findLinksInto():this.findLinksOutOf();let o=!1,r=!1;for(;n.next();){const l=n.value;if(l.isTreeLink){o=!0;const a=t?l.fromNode:l.toNode;if(a&&a.isTreeExpanded){r=!0;break}}}if(o&&!r)return!1}else if(e===3){const n=t?this.findLinksInto():this.findLinksOutOf();let o=!1,r=!1;for(;n.next();){const l=n.value;if(l.isTreeLink){o=!0;const a=t?l.fromNode:l.toNode;if(a&&!a.isTreeExpanded){r=!0;break}}}if(o&&r)return!1}const s=this.labeledLink;return s!==null?s.isVisible():!0}He(t){super.He(t);const e=this.linksConnected;for(;e.next();){const i=e.value;if(t&&this.containingGroup!==null){const s=i.getOtherNode(this);s!==null&&!s.isMemberOf(this.containingGroup)&&i.ee()}i.He(t)}}get linksConnected(){return this.oe.iterator}findExternalTreeLinksConnected(){const t=new GSet,e=new GSet;return this.bF(this,t,e),e.iterator}bF(t,e,i){if(t===null||e.has(t))return;e.add(t);let s=!0;const n=this.diagram;n!==null&&(s=n.isTreePathToChildren),t.linksConnected.each(o=>{o.isTreeLink?(s?o.fromNode===t:o.toNode===t)&&this.bF(s?o.toNode:o.fromNode,e,i):i.add(o)})}findLinksConnected(t){if(t===void 0&&(t=null),t===null)return this.oe.iterator;const e=new ListIterator(this.oe),i=this;return e.predicate=s=>s.fromNode===i&&s.fromPortId===t||s.toNode===i&&s.toPortId===t,e}findLinksOutOf(t){t===void 0&&(t=null);const e=new ListIterator(this.oe),i=this;return e.predicate=s=>s.fromNode!==i?!1:t===null?!0:s.fromPortId===t,e}findLinksInto(t){t===void 0&&(t=null);const e=new ListIterator(this.oe),i=this;return e.predicate=s=>s.toNode!==i?!1:t===null?!0:s.toPortId===t,e}findNodesConnected(t){t===void 0&&(t=null);let e=null,i=null;const s=this.oe.iterator;for(;s.next();){const n=s.value;if(n.fromNode===this){if(t===null||n.fromPortId===t){const o=n.toNode;e!==null?e.add(o):i!==null&&i!==o?(e=new GSet,e.add(i),e.add(o)):i=o}}else if(n.toNode===this&&(t===null||n.toPortId===t)){const o=n.fromNode;e!==null?e.add(o):i!==null&&i!==o?(e=new GSet,e.add(i),e.add(o)):i=o}}return e!==null?e.iterator:i!==null?new SingletonIterator(i):EmptyIterator.instance}findNodesOutOf(t){t===void 0&&(t=null);let e=null,i=null;const s=this.oe.iterator;for(;s.next();){const n=s.value;if(n.fromNode===this&&(t===null||n.fromPortId===t)){const o=n.toNode;e!==null?e.add(o):i!==null&&i!==o?(e=new GSet,e.add(i),e.add(o)):i=o}}return e!==null?e.iterator:i!==null?new SingletonIterator(i):EmptyIterator.instance}findNodesInto(t){t===void 0&&(t=null);let e=null,i=null;const s=this.oe.iterator;for(;s.next();){const n=s.value;if(n.toNode===this&&(t===null||n.toPortId===t)){const o=n.fromNode;e!==null?e.add(o):i!==null&&i!==o?(e=new GSet,e.add(i),e.add(o)):i=o}}return e!==null?e.iterator:i!==null?new SingletonIterator(i):EmptyIterator.instance}findLinksBetween(t,e,i){e===void 0&&(e=null),i===void 0&&(i=null);const s=new ListIterator(this.oe),n=this;return s.predicate=o=>o.fromNode===n&&o.toNode===t&&(e===null||o.fromPortId===e)&&(i===null||o.toPortId===i)||o.fromNode===t&&o.toNode===n&&(i===null||o.fromPortId===i)&&(e===null||o.toPortId===e),s}findLinksTo(t,e,i){e===void 0&&(e=null),i===void 0&&(i=null);const s=new ListIterator(this.oe),n=this;return s.predicate=o=>!(o.fromNode!==n||o.toNode!==t||e!==null&&o.fromPortId!==e||i!==null&&o.toPortId!==i),s}findSuccessorParts(t){return t===void 0&&(t=new GSet),this.kF(this,t),t.delete(this),t}kF(t,e){t!==null&&(e.has(t)||(e.add(t),t.findLinksOutOf().each(i=>{if(e.has(i))return;e.add(i);const s=i.toNode;s!==null&&this.kF(s,e)})))}findPredecessorParts(t){return t===void 0&&(t=new GSet),this.PF(this,t),t.delete(this),t}PF(t,e){t!==null&&(e.has(t)||(e.add(t),t.findLinksInto().each(i=>{if(e.has(i))return;e.add(i);const s=i.fromNode;s!==null&&this.PF(s,e)})))}get linkConnected(){return this.Rt!==null?this.Rt.tw:null}set linkConnected(t){const e=this.linkConnected;e!==t&&(t!==null&&U.S(t,Node,"linkConnected"),this.Nl().tw=t,this.t("linkConnected",e,t))}get linkDisconnected(){return this.Rt!==null?this.Rt.ew:null}set linkDisconnected(t){const e=this.linkDisconnected;e!==t&&(t!==null&&U.S(t,Node,"linkDisconnected"),this.Nl().ew=t,this.t("linkDisconnected",e,t))}get linkValidation(){return this.Rt!==null?this.Rt.Wl:null}set linkValidation(t){const e=this.linkValidation;e!==t&&(t!==null&&U.S(t,Node,"linkValidation"),this.Nl().Wl=t,this.t("linkValidation",e,t))}Ck(t,e){this.ti(e);const i=this.oe.has(t);if(i||this.oe.add(t),!i||t.fromNode===t.toNode){const s=this.linkConnected;if(s!==null){let n=!0;const o=this.diagram;o!==null&&(n=o.Y,o.Y=!0),s(this,t,e),o!==null&&(o.Y=n)}}if(!i){if(!t.isTreeLink)return;const s=t.fromNode,n=t.toNode;if(s!==null&&n!==null&&s!==n){let o=!0;const r=this.diagram;r!==null&&(o=r.isTreePathToChildren);const l=o?n:s,a=o?s:n;if(l.Va||(l.Va=a),a.isTreeLeaf){if(r!==null&&r.undoManager.isUndoingRedoing)return;o?s===a&&(a.isTreeLeaf=!1):n===a&&(a.isTreeLeaf=!1)}}}}Nk(t,e){this.ti(e);const i=this.oe.delete(t);let s=null;if(i||t.toNode===t.fromNode){const n=this.linkDisconnected;if(s=this.diagram,n!==null){let o=!0;s!==null&&(o=s.Y,s.Y=!0),n(this,t,e),s!==null&&(s.Y=o)}}if(i){if(!t.isTreeLink)return;let n=!0;s!==null&&(n=s.isTreePathToChildren);const o=n?t.toNode:t.fromNode,r=n?t.fromNode:t.toNode;if(o!==null&&(o.Va=!1),r!==null&&!r.isTreeLeaf)if(r.oe.count===0){if(r.Va=null,s!==null&&s.undoManager.isUndoingRedoing)return;r.isTreeLeaf=!0}else r.zp()}}zp(){if(this.Va=!1,this.oe.count===0)return;let t=!0;const e=this.diagram;if(e!==null&&e.undoManager.isUndoingRedoing)return;e!==null&&(t=e.isTreePathToChildren);const i=this.oe.iterator;for(;i.next();){const s=i.value;if(s.isTreeLink){if(t){if(s.fromNode===this){this.isTreeLeaf=!1;return}}else if(s.toNode===this){this.isTreeLeaf=!1;return}}}this.isTreeLeaf=!0}updateRelationshipsFromData(){const t=this.diagram;t!==null&&t.partManager.updateRelationshipsFromData(this)}fp(t){if(super.fp(t),!t){this.zp();const e=this.Qf;e!==null&&e.SF(this)}}dp(t){if(super.dp(t),!t){const e=this.Qf;e!==null&&e.MF(this)}}xf(){if(this.oe.count>0){const t=this.diagram;if(t!==null){const e=t.commandHandler!==null?t.commandHandler.deletesConnectedLinks:!0,s=this.oe.copy().iterator;for(;s.next();){const n=s.value;e?t.remove(n):(n.fromNode===this&&(n.fromNode=null),n.toNode===this&&(n.toNode=null))}}}this.labeledLink=null,super.xf()}get isLinkLabel(){return this.Qf!==null}get labeledLink(){return this.Qf}set labeledLink(t){const e=this.Qf;if(e!==t){const i=this.diagram,s=this.data;if(e!==null){if(e.MF(this),i!==null&&s!==null&&!i.undoManager.isUndoingRedoing){const n=e.data,o=i.model;if(n!==null&&o.sc()){const r=o.getKeyForNodeData(s);r!==void 0&&o.removeLabelKeyForLinkData(n,r)}}this.containingGroup=null}if(this.Qf=t,t!==null){if(t.SF(this),i!==null&&s!==null&&!i.undoManager.isUndoingRedoing){const n=t.data,o=i.model;if(n!==null&&o.sc()){const r=o.getKeyForNodeData(s);r!==void 0&&o.addLabelKeyForLinkData(n,r)}}this.containingGroup=t.containingGroup}this.Rf(),this.t("labeledLink",e,t)}}findVisiblePort(t){let e=t;for(;e!==null&&(!e.actualBounds.isReal()||!e.isVisibleObject());)e=e.panel;return e===null?this.port:e}findPort(t){if(this.di===null){if(t===""&&this.Rn===!1)return this;this.CF()}let e=this.di.get(t);return e!==null||t!==""&&(e=this.di.get(""),e!==null)?e:this}get port(){return this.findPort("")}get ports(){return this.di===null&&this.CF(),this.di.iteratorValues}CF(){this.di===null?this.di=new GMap:this.di.clear(),this.walkVisualTreeFrom(this,(t,e)=>t.vD(e)),this.di.count===0&&this.di.set("",this)}vD(t){const e=t.portId;e!==null&&this.di!==null&&this.di.set(e,t)}sN(t,e){const i=t.portId;if(i!==null){this.di!==null&&this.di.delete(i);const s=this.diagram;if(s!==null&&e){let n=null;const o=this.findLinksConnected(i);for(;o.next();){const r=o.value;n===null&&(n=U.ot()),n.push(r)}if(n!==null){for(let r=0;r<n.length;r++){const l=n[r];s.remove(l)}U._(n)}}}}isInTreeOf(t){if(t===null||t===this)return!1;let e=!0;const i=this.diagram;i!==null&&(e=i.isTreePathToChildren);let s=this;const n=t;let o;if(e)for(;s!==n;){o=null;const r=s.oe.iterator;for(;r.next();){const l=r.value;if(l.isTreeLink&&(o=l.fromNode,o!==s&&o!==this))break}if(o===this||o===null||o===s)return!1;s=o}else for(;s!==n;){o=null;const r=s.oe.iterator;for(;r.next();){const l=r.value;if(l.isTreeLink&&(o=l.toNode,o!==s&&o!==this))break}if(o===this||o===null||o===s)return!1;s=o}return!0}findTreeRoot(){let t=!0;const e=this.diagram;e!==null&&(t=e.isTreePathToChildren);let i=this,s;if(t)for(;;){s=null;const n=i.oe.iterator;for(;n.next();){const o=n.value;if(o.isTreeLink&&(s=o.fromNode,s!==i&&s!==this))break}if(s===this)return this;if(s===null||s===i)return i;i=s}else for(;;){s=null;const n=i.oe.iterator;for(;n.next();){const o=n.value;if(o.isTreeLink&&(s=o.toNode,s!==i&&s!==this))break}if(s===this)return this;if(s===null||s===i)return i;i=s}}findCommonTreeParent(t){if(t===null)return null;if(this===t)return this;let e=this;for(;e!==null;)e.Sk(!0),e=e.findTreeParentNode();let i=null;for(e=t;e!==null;){if(e.pF()){i=e;break}e=e.findTreeParentNode()}for(e=this;e!==null;)e.Sk(!1),e=e.findTreeParentNode();return i}findTreeParentLink(){let t=!0;const e=this.diagram;e!==null&&(t=e.isTreePathToChildren);const i=this.oe.iterator;if(t)for(;i.next();){const s=i.value;if(s.isTreeLink&&s.fromNode!==this)return s}else for(;i.next();){const s=i.value;if(s.isTreeLink&&s.toNode!==this)return s}return null}findTreeParentNode(){const t=this.Va;if(t===null)return null;if(t instanceof Node)return t;const e=this.diagram,i=e!==null?e.isTreePathToChildren:!0,s=this.oe.iterator;for(;s.next();){const n=s.value;if(!n.isTreeLink)continue;const o=i?n.fromNode:n.toNode;if(o!==this)return this.Va=o,o}return this.Va=null,null}findTreeParentChain(t){function e(i,s){s.add(i);const n=i.findTreeParentLink();if(n!==null){s.add(n);const o=i.findTreeParentNode();if(o===null)return;e(o,s)}}return t===void 0&&(t=new GSet),e(this,t),t}findTreeLevel(){return this.qE(this)}qE(t){let e=0,i=t.findTreeParentNode();for(;i!==null&&i!==t;)i=i.findTreeParentNode(),e++;return e}findTreeChildrenLinks(){let t=!0;const e=this.diagram;e!==null&&(t=e.isTreePathToChildren);const i=new ListIterator(this.oe),s=this;return t?i.predicate=n=>!(!n.isTreeLink||n.fromNode!==s):i.predicate=n=>!(!n.isTreeLink||n.toNode!==s),i}findTreeChildrenNodes(){let t=!0;const e=this.diagram;e!==null&&(t=e.isTreePathToChildren);let i=null,s=null;const n=this.oe.iterator;if(t)for(;n.next();){const o=n.value;if(o.isTreeLink&&o.fromNode===this){const r=o.toNode;i!==null?i.add(r):s!==null&&s!==r?(i=new List,i.add(s),i.add(r)):s=r}}else for(;n.next();){const o=n.value;if(o.isTreeLink&&o.toNode===this){const r=o.fromNode;i!==null?i.add(r):s!==null&&s!==r?(i=new List,i.add(s),i.add(r)):s=r}}return i!==null?i.iterator:s!==null?new SingletonIterator(s):EmptyIterator.instance}findTreeParts(t,e){return t===void 0&&(t=1/0),U.s(t,"number",Node,"findTreeParts:level"),e===void 0&&(e=new GSet),Part.Sa(e,this,!1,t,!0),e}collapseTree(t){t===void 0&&(t=1),t<1&&(t=1);const e=this.diagram;if(e===null||e.isCollapsingExpanding)return;e.isCollapsingExpanding=!0;const i=new GSet;i.add(this),this.NF(i,e.isTreePathToChildren,t,e,this,e.treeCollapsePolicy===1),e.isCollapsingExpanding=!1}NF(t,e,i,s,n,o){if(i>1){const r=e?this.findLinksOutOf():this.findLinksInto();for(;r.next();){const l=r.value;if(!l.isTreeLink)continue;const a=l.getOtherNode(this);a!==null&&a!==this&&!t.has(a)&&(t.add(a),a.NF(t,e,i-1,s,n,o))}}else this.TF(t,e,s,n,o)}TF(t,e,i,s,n){const o=s===this?!0:this.isTreeExpanded,r=e?this.findLinksOutOf():this.findLinksInto();for(;r.next();){const l=r.value;if(!l.isTreeLink)continue;const a=l.getOtherNode(this);if(a!==null&&a!==this){const h=t.has(a);if(h||t.add(a),o){const c=e?a.findNodesInto():a.findNodesOutOf(),f=this;c.all(u=>u===f||!u.isTreeExpanded)&&i.nf(a,s),a.Fa(),a.He(!1)}a.isTreeExpanded&&(a.wasTreeExpanded=a.isTreeExpanded,h||a.TF(t,e,i,s,n))}}this.isTreeExpanded=!1}expandTree(t){t===void 0&&(t=2),t<2&&(t=2);const e=this.diagram;if(e===null||e.isCollapsingExpanding)return;e.isCollapsingExpanding=!0;const i=new GSet;i.add(this),this.LF(i,e.isTreePathToChildren,t,e,this,e.treeCollapsePolicy===1),e.isCollapsingExpanding=!1}LF(t,e,i,s,n,o){const r=n===this?!1:this.isTreeExpanded,l=e?this.findLinksOutOf():this.findLinksInto();for(;l.next();){const a=l.value;if(!a.isTreeLink)continue;r||a.$i||a.ee();const h=a.getOtherNode(this);if(h!==null&&h!==this&&!t.has(h)){if(t.add(h),!r){h.He(!0),h.Fa();const c=e?h.findNodesInto():h.findNodesOutOf(),f=this;c.all(u=>u===f||!u.isTreeExpanded)&&s.sf(h,n)}(i>2||h.wasTreeExpanded)&&(h.wasTreeExpanded=!1,h.LF(t,e,i-1,s,n,o))}}this.isTreeExpanded=!0}get isTreeExpanded(){return(this.U&1)!==0}set isTreeExpanded(t){const e=(this.U&1)!==0;if(e!==t){this.U=this.U^1;const i=this.diagram;this.t("isTreeExpanded",e,t);const s=this.treeExpandedChanged;if(s!==null){let n=!0;i!==null&&(n=i.Y,i.Y=!0),s(this),i!==null&&(i.Y=n)}if(i!==null&&i.undoManager.isUndoingRedoing){this.He(t);return}t?this.expandTree():this.collapseTree()}}get wasTreeExpanded(){return(this.U&2)!==0}set wasTreeExpanded(t){const e=(this.U&2)!==0;e!==t&&(this.U=this.U^2,this.t("wasTreeExpanded",e,t))}get treeExpandedChanged(){return this.Rt!==null?this.Rt.iw:null}set treeExpandedChanged(t){const e=this.treeExpandedChanged;e!==t&&(t!==null&&U.S(t,Node,"treeExpandedChanged"),this.Nl().iw=t,this.t("treeExpandedChanged",e,t))}get isTreeLeaf(){return(this.U&4)!==0}set isTreeLeaf(t){const e=(this.U&4)!==0;e!==t&&(this.U=this.U^4,this.t("isTreeLeaf",e,t))}get isTreeRoot(){return this.findTreeParentLink()===null}}class NodeTemplateSettings{xe;tw;ew;Wl;iw;_y;Qy;nw;ow;Pa;lw;constructor(){this.xe=!1,this.tw=null,this.ew=null,this.Wl=null,this.iw=null,this._y=Margin.dL,this.Qy=1,this.nw=null,this.ow=null,this.Pa=null,this.lw=null}copy(){const t=new NodeTemplateSettings;return t.tw=this.tw,t.ew=this.ew,t.Wl=this.Wl,t.iw=this.iw,t._y=this._y.C(),t.Qy=this.Qy,t.nw=this.nw,t.ow=this.ow,t.Pa=this.Pa,t.lw=this.lw,t}}var LinkAdjusting=(w=>(w[w.None=0]="None",w[w.End=17]="End",w[w.Scale=18]="Scale",w[w.Stretch=19]="Stretch",w))(LinkAdjusting||{}),Routing=(w=>(w[w.Normal=1]="Normal",w[w.Orthogonal=2]="Orthogonal",w[w.AvoidsNodes=6]="AvoidsNodes",w[w.AvoidsNodesStraight=7]="AvoidsNodesStraight",w))(Routing||{}),Curve=(w=>(w[w.None=0]="None",w[w.Bezier=9]="Bezier",w[w.JumpGap=10]="JumpGap",w[w.JumpOver=11]="JumpOver",w))(Curve||{});class Link extends Part{Mt;bo;ko;hg;Po;So;cg;_f;fg;ug;dg;nc;gg;hn;Ae;Tl;Br;oc;or;KN;HN;Tk;qN;jN;rc;Lk;dt;rr;static lc=null;static ac=null;Vf;WN;JN;constructor(t){super(Panel.Link),this.Mt=8,this.bo=null,this.ko="",this.hg=null,this.Po=null,this.So="",this.cg=null,this._f=0,this.fg=0,this.ug=0,this.dg=NaN,this.nc=1,this.gg=.5,this.hn=null,this.Ae=new List().b(),this.Tl=null,this.Br=null,this.oc=new Rect,this.dt=new Geometry,this.or=null,this.rr=null,this.KN=Point.xn,this.HN=Point.xn,this.WN=0,this.JN=0,this.Tk=new Point,this.qN=null,this.jN=null,this.rc=null,this.Lk=NaN,this.ut=null,this.Vf=[],t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Mt=this.Mt&-113,t.ko=this.ko,t.hg=this.hg,t.So=this.So,t.cg=this.cg,t._f=this._f,t.fg=this.fg,t.ug=this.ug,t.dg=this.dg,t.nc=this.nc,t.gg=this.gg,this.ut!==null&&(t.ut=this.ut.copy())}Wo(t){super.Wo(t),this.ko=t.ko,this.So=t.So,t.Tl=null,t.ee(),t.rr=this.rr;const e=t.fromPort;e!==null&&t.fromNode.ti(e);const i=t.toPort;i!==null&&t.toNode.ti(i)}ge(t){t in Routing||t in Curve||t in LinkAdjusting?Link.$N(t)?this.routing=t:t===9||t===10||t===11?this.curve=t:t===17||t===18||t===19?this.adjusting=t:t===1||t===0||U.n("Unknown Link enum value for a Link property: "+t):super.ge(t)}static Normal=1;static Orthogonal=2;static AvoidsNodes=6;static AvoidsNodesStraight=7;static None=0;static Bezier=9;static JumpGap=10;static JumpOver=11;static End=17;static Scale=18;static Stretch=19;static OrientAlong=21;static OrientPlus90=22;static OrientMinus90=23;static OrientOpposite=24;static OrientUpright=25;static OrientPlus90Upright=26;static OrientMinus90Upright=27;static OrientUpright45=28;static AF=8;static DF=16;static za=8;static ak=3;static FF=3;static vF=1.333;static ZN=1;static QN=0;static RF=10;static tu=9999;static OF=30;static IF=30;static _N=10;static EF=10;static UF=14;static BF=30;static VF=14;static NA=8;static TA=8;static zF=11;static setRoutingParameter(t,e){switch(t){case 1:Link.AF=e;break;case 2:Link.DF=e;break;case 3:Link.za=e;break;case 4:Link.ak=e;break;case 5:Link.FF=e;break;case 6:Link.vF=e;break;case 7:Link.ZN=e;break;case 8:Link.QN=e;break;case 9:Link.RF=e;break;case 10:Link.tu=e;break;case 11:Link.OF=e;break;case 12:Link.IF=e;break;case 13:Link._N=e;break;case 14:Link.EF=e;break;case 15:Link.UF=e;break;case 16:Link.BF=e;break;case 17:Link.VF=e;break;case 18:Link.NA=e;break;case 19:Link.TA=e;break;case 20:Link.zF=e;break}t>29&&t<71&&(Link.hD=t+parseInt(e.toString().slice(0,-1)))}static hD;_i(){return this.ut===null&&(this.ut=new LinkSettings),this.ut}oE(t,e,i){const s=t.segmentIndex,n=t.segmentFraction;let o=t.alignmentFocus;const r=t.segmentOrientation,l=t.segmentOffset;let a=0,h=0,c=0,f=0;if(isNaN(s)){const N=this.dt,M=U.ot();N.getPointAndAngleAlongPath(n,M);const C=Point.O(M[0],M[1]);if(f=M[2],C.add(this.getPoint(0)),N.type===1)C.offset(-N.startX,-N.startY);else{const L=N.figures.first();C.offset(-L.startX,-L.startY)}r!==0&&(c=this.computeAngle(t,r,f),t.angle=c),a=C.x,h=C.y,Point.i(C),U._(M)}else if(s<-e||s>=e){const N=Point.l();this.yN(N),f=this.midAngle,r!==0&&(c=this.computeAngle(t,r,f),t.angle=c),a=N.x,h=N.y,Point.i(N)}else{let N,M,C=0;if(s>=0?(N=i.r[s],M=s<e-1?i.r[s+1]:N):(C=e+s,N=i.r[C],M=C>0?i.r[C-1]:N),N.equalsApprox(M)){let L,A;s>=0?(L=s>0?i.r[s-1]:N,A=s<e-2?i.r[s+2]:M):(L=C<e-1?i.r[C+1]:N,A=C>1?i.r[C-2]:M);const D=L.distanceSquaredPoint(N),F=M.distanceSquaredPoint(A);D>F+10?f=s>=0?L.directionPoint(N):N.directionPoint(L):F>D+10?f=s>=0?M.directionPoint(A):A.directionPoint(M):f=s>=0?L.directionPoint(A):A.directionPoint(L)}else f=s>=0?N.directionPoint(M):M.directionPoint(N);r!==0&&(c=this.computeAngle(t,r,f),t.angle=c),a=N.x+(M.x-N.x)*n,h=N.y+(M.y-N.y)*n}if(o.isNone()){t.moveTo(a,h,!0);return}else o.isNoSpot()&&(o=Spot.Center);const u=Transform.l();u.Xe(),u.it(t.scale,t.scale),u.Ps(t.angle,0,0);const d=t.naturalBounds,m=Rect.O(0,0,d.width,d.height),g=Point.l();g.setRectSpot(m,o),u.wt(g);let p=-g.x,y=-g.y;const x=d.width,b=d.height,k=Point.ji(l),P=isNaN(l.x),S=isNaN(l.y);if(P||S){const N=x/2+Link.ak,M=b/2+Link.FF,C=f>=45&&f<=135,L=f>=225&&f<=315;r===0&&(C||L)?(k.x=S?N:l.y,k.y=P?M:l.x,C?s>=0||isNaN(s)&&n<.5||P&&(k.y=-M):L&&((s>=0||isNaN(s)&&n<.5)&&P&&(k.y=-M),S&&(k.x=-N))):(P&&(s>=0||isNaN(s)&&n<.5?k.x=N:k.x=-N),S&&(k.y=-M),k.rotate(f))}else k.rotate(f);a+=k.x,h+=k.y,u.pm(m),p+=m.x,y+=m.y;const T=Point.O(a+p,h+y);t.move(T),Point.i(T),Point.i(k),Point.i(g),Rect.i(m),Transform.i(u)}al(){let t=this.fromNode;if(t!==null){const i=t.findVisibleNode();if(i!==null&&(t=i),t.fs()||t.ba())return!1}let e=this.toNode;if(e!==null){const i=e.findVisibleNode();if(i!==null&&(e=i),e.fs()||e.ba())return!1}return!0}eN(t,e,i){return!1}iN(){}Oi(){return!1}computeAngle(t,e,i){return Link.computeAngle(e,i)}static computeAngle(t,e){let i=0;switch(t){default:case 0:i=0;break;case 21:i=e;break;case 22:i=e+90;break;case 23:i=e-90;break;case 24:i=e+180;break;case 25:i=G.ze(e),i>90&&i<270&&(i-=180);break;case 26:i=G.ze(e+90),i>90&&i<270&&(i-=180);break;case 27:i=G.ze(e-90),i>90&&i<270&&(i-=180);break;case 28:if(i=G.ze(e),i>45&&i<135||i>225&&i<315)return 0;i>90&&i<270&&(i-=180);break}return G.ze(i)}get fromNode(){return this.bo}set fromNode(t){const e=this.bo;if(e!==t){const i=this.fromPort;e!==null&&(this.Po!==e&&e.Nk(this,i),this.aw(),this.invalidateLayout(2)),this.bo=t,t!==null&&this.He(t.isVisible()),this.or=null,this.ee();const s=this.diagram;s!==null&&s.Y&&s.partManager.setFromNodeForLink(this,t,e);const n=this.fromPort,o=this.fromPortChanged;if(o!==null){let r=!0;s!==null&&(r=s.Y,s.Y=!0),o(this,i,n),s!==null&&(s.Y=r)}t!==null&&(this.Po!==t&&t.Ck(this,n),this.hw(),this.invalidateLayout(1)),this.t("fromNode",e,t),this.lg()}}get fromPortId(){return this.ko}set fromPortId(t){const e=this.ko;if(e!==t){const i=this.fromPort;i!==null&&this.fromNode?.ti(i),this.aw(),this.ko=t;const s=this.fromPort;s!==null&&this.fromNode?.ti(s);const n=this.diagram;if(n!==null){const o=this.data,r=n.model;o!==null&&r.sc()&&r.setFromPortIdForLinkData(o,t)}if(i!==s){this.or=null,this.ee();const o=this.fromPortChanged;if(o!==null){let r=!0;n!==null&&(r=n.Y,n.Y=!0),o(this,i,s),n!==null&&(n.Y=r)}}this.hw(),this.t("fromPortId",e,t)}}get fromPort(){const t=this.bo;if(t===null)return null;const e=this.ko;return t.findPort(e)}get fromPortChanged(){return this.hg}set fromPortChanged(t){const e=this.hg;e!==t&&(t!==null&&U.S(t,Link,"fromPortChanged"),this.hg=t,this.t("fromPortChanged",e,t))}get toNode(){return this.Po}set toNode(t){const e=this.Po;if(e!==t){const i=this.toPort;e!==null&&(this.bo!==e&&e.Nk(this,i),this.aw(),this.invalidateLayout(2)),this.Po=t,t!==null&&this.He(t.isVisible()),this.or=null,this.ee();const s=this.diagram;s!==null&&s.Y&&s.partManager.setToNodeForLink(this,t,e);const n=this.toPort,o=this.toPortChanged;if(o!==null){let r=!0;s!==null&&(r=s.Y,s.Y=!0),o(this,i,n),s!==null&&(s.Y=r)}t!==null&&(this.bo!==t&&t.Ck(this,n),this.hw(),this.invalidateLayout(1)),this.t("toNode",e,t),this.lg()}}get toPortId(){return this.So}set toPortId(t){const e=this.So;if(e!==t){const i=this.toPort;i!==null&&this.toNode?.ti(i),this.aw(),this.So=t;const s=this.toPort;s!==null&&this.toNode?.ti(s);const n=this.diagram;if(n!==null){const o=this.data,r=n.model;o!==null&&r.sc()&&r.setToPortIdForLinkData(o,t)}if(i!==s){this.or=null,this.ee();const o=this.toPortChanged;if(o!==null){let r=!0;n!==null&&(r=n.Y,n.Y=!0),o(this,i,s),n!==null&&(n.Y=r)}}this.hw(),this.t("toPortId",e,t)}}get toPort(){const t=this.Po;if(t===null)return null;const e=this.So;return t.findPort(e)}get toPortChanged(){return this.cg}set toPortChanged(t){const e=this.cg;e!==t&&(t!==null&&U.S(t,Link,"toPortChanged"),this.cg=t,this.t("toPortChanged",e,t))}get fromSpot(){return this.ut!==null?this.ut.zh:Spot.Default}set fromSpot(t){const e=this.fromSpot;if(!e.equals(t)){if(t=t.C(),this._i().zh=t,this.t("fromSpot",e,t),e.isSide()||t.isSide()){const i=this.fromNode;i!==null&&i.ti(this.fromPort)}this.ee()}}get fromEndSegmentLength(){return this.ut!==null?this.ut.Gh:NaN}set fromEndSegmentLength(t){const e=this.fromEndSegmentLength;if(e!==t){if(t<0&&U.$(t,">= 0",Link,"fromEndSegmentLength"),this._i().Gh=t,this.t("fromEndSegmentLength",e,t),this.computeSpot(!0,this.fromPort).isSide()){const i=this.fromNode;i!==null&&i.ti(this.fromPort)}this.ee()}}get fromShortLength(){return this.ut!==null?this.ut.Kh:NaN}set fromShortLength(t){const e=this.fromShortLength;e!==t&&(this._i().Kh=t,this.fi(),this.t("fromShortLength",e,t))}get toSpot(){return this.ut!==null?this.ut.Xh:Spot.Default}set toSpot(t){const e=this.toSpot;if(!e.equals(t)){if(t=t.C(),this._i().Xh=t,this.t("toSpot",e,t),e.isSide()||t.isSide()){const i=this.toNode;i!==null&&i.ti(this.toPort)}this.ee()}}get toEndSegmentLength(){return this.ut!==null?this.ut.Yh:NaN}set toEndSegmentLength(t){const e=this.toEndSegmentLength;if(e!==t){if(t<0&&U.$(t,">= 0",Link,"toEndSegmentLength"),this._i().Yh=t,this.t("toEndSegmentLength",e,t),this.computeSpot(!1,this.toPort).isSide()){const i=this.toNode;i!==null&&i.ti(this.toPort)}this.ee()}}get toShortLength(){return this.ut!==null?this.ut.Hh:NaN}set toShortLength(t){const e=this.toShortLength;e!==t&&(this._i().Hh=t,this.fi(),this.t("toShortLength",e,t))}lg(){const t=this.fromNode,e=this.toNode;let i=null;if(t!==null?e!==null?i=t.findCommonContainingGroup(e):i=t.containingGroup:e!==null?i=e.containingGroup:i=null,this.jE(i),this.isLabeledLink){const s=this.labelNodes;for(;s.next();){const n=s.value;n.containingGroup=i}}}jE(t){const e=this.Ba;if(e!==t){e!==null&&e.UN(this),this.Ba=t,t!==null&&t.BN(this);const i=this.containingGroupChanged;if(i!==null){let s=!0;const n=this.diagram;n!==null&&(s=n.Y,n.Y=!0),i(this,e,t),n!==null&&(n.Y=s)}this.$i&&(this.qN===e||this.jN===e)&&this.ee()}}Fa(){const t=this.containingGroup;t!==null&&this.fromNode!==t&&this.toNode!==t&&t.computesBoundsIncludingLinks&&super.Fa()}getOtherNode(t){const e=this.fromNode;return t===e?this.toNode:e}getOtherPort(t){const e=this.fromPort;return t===e?this.toPort:e}get isLabeledLink(){return this.hn===null?!1:this.hn.count>0}get labelNodes(){return this.hn===null?EmptyIterator.instance:this.hn.iterator}SF(t){this.hn===null&&(this.hn=new GSet),this.hn.add(t),this.f()}MF(t){this.hn!==null&&(this.hn.delete(t),this.f())}fp(t){if(super.fp(t),this.hc()&&this.invalidateOtherJumpOvers(this.actualBounds),!t){const e=this.bo;let i=null;e!==null&&(i=this.fromPort,e.Ck(this,i));const s=this.Po;let n=null;s!==null&&(n=this.toPort,(s!==e||n!==i)&&s.Ck(this,n)),this.hw()}}dp(t){if(super.dp(t),this.hc()&&this.invalidateOtherJumpOvers(this.actualBounds),!t){const e=this.bo;let i=null;e!==null&&(i=this.fromPort,e.Nk(this,i));const s=this.Po;let n=null;s!==null&&(n=this.toPort,(s!==e||n!==i)&&s.Nk(this,n)),this.aw()}}xf(){if(this.$i=!0,this.hn!==null){const e=this.diagram;if(e!==null){const s=this.hn.copy().iterator;for(;s.next();){const n=s.value;e.remove(n)}}}if(this.data!==null){const e=this.diagram;e!==null&&e.partManager.tT(this)}}updateRelationshipsFromData(){if(this.data===null)return;const e=this.diagram;e!==null&&e.partManager.updateRelationshipsFromData(this)}move(t,e){const i=e?this.location:this.position;let s=i.x;isNaN(s)&&(s=0);let n=i.y;isNaN(n)&&(n=0);const o=t.x-s,r=t.y-n;if(e===!0)super.move(t,!1);else{const a=Point.O(i.x+o,i.y+r);super.move(a,!1),Point.i(a)}this.Lr(o,r);const l=this.labelNodes;for(;l.next();){const a=l.value,h=a.position;a.moveTo(h.x+o,h.y+r)}}get relinkableFrom(){return(this.Mt&1)!==0}set relinkableFrom(t){const e=(this.Mt&1)!==0;e!==t&&(this.Mt=this.Mt^1,this.t("relinkableFrom",e,t),this.invalidateAdornments())}get relinkableTo(){return(this.Mt&2)!==0}set relinkableTo(t){const e=(this.Mt&2)!==0;e!==t&&(this.Mt=this.Mt^2,this.t("relinkableTo",e,t),this.invalidateAdornments())}canRelinkFrom(){if(!this.relinkableFrom)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowRelink)return!1;const e=t.diagram;return!(e!==null&&!e.allowRelink)}canRelinkTo(){if(!this.relinkableTo)return!1;const t=this.layer;if(t===null)return!0;if(!t.allowRelink)return!1;const e=t.diagram;return!(e!==null&&!e.allowRelink)}get resegmentable(){return(this.Mt&4)!==0}set resegmentable(t){const e=(this.Mt&4)!==0;e!==t&&(this.Mt=this.Mt^4,this.t("resegmentable",e,t),this.invalidateAdornments())}get isTreeLink(){return(this.Mt&8)!==0}set isTreeLink(t){const e=(this.Mt&8)!==0;e!==t&&(this.Mt=this.Mt^8,this.t("isTreeLink",e,t),this.fromNode!==null&&this.fromNode.zp(),this.toNode!==null&&this.toNode.zp())}get path(){const t=this.findMainElement();return t instanceof Shape?t:null}get routeBounds(){return this.updateRoute(),this.oc}eT(){const t=this.oc;let e=1/0,i=1/0;const s=this.pointsCount;if(s===0)t.e(NaN,NaN,0,0);else if(s===1){const n=this.getPoint(0);e=Math.min(n.x,e),i=Math.min(n.y,i),t.e(n.x,n.y,0,0)}else if(s===2){const n=this.getPoint(0),o=this.getPoint(1);e=Math.min(n.x,o.x),i=Math.min(n.y,o.y),t.e(n.x,n.y,0,0),t.unionPoint(o)}else if(this.computeCurve()===9&&s>=3&&!this.isOrthogonal){let n=this.getPoint(0);if(e=n.x,i=n.y,t.e(e,i,0,0),s===3){const o=this.getPoint(1);e=Math.min(o.x,e),i=Math.min(o.y,i);const r=this.getPoint(2);e=Math.min(r.x,e),i=Math.min(r.y,i),G.Iu(n.x,n.y,o.x,o.y,o.x,o.y,r.x,r.y,.5,t)}else for(let o=3;o<s;o+=3){const r=this.getPoint(o-2);o+3>=s&&(o=s-1);const l=this.getPoint(o-1),a=this.getPoint(o);G.Iu(n.x,n.y,r.x,r.y,l.x,l.y,a.x,a.y,.5,t),e=Math.min(a.x,e),i=Math.min(a.y,i),n=a}}else{const n=this.getPoint(0),o=this.getPoint(1);e=Math.min(n.x,o.x),i=Math.min(n.y,o.y),t.e(n.x,n.y,0,0),t.unionPoint(o);for(let r=2;r<s;r++){const l=this.getPoint(r);e=Math.min(l.x,e),i=Math.min(l.y,i),t.unionPoint(l)}}this.Tk.e(e-t.x,i-t.y)}get midPoint(){return this.yN(new Point)}yN(t){return this.updateRoute(),this.computeMidPoint(t)}computeMidPoint(t){const e=this.pointsCount;if(e===0)return t.h(Point.xn),t;if(e===1)return t.h(this.getPoint(0)),t;if(e===2){const h=this.getPoint(0),c=this.getPoint(1);return t.e((h.x+c.x)/2,(h.y+c.y)/2),t}if(this.isOrthogonal&&(this.computeCorner()>=15||this.computeCurve()===9)){this.dt.getPointAlongPath(.5,t),t.add(this.getPoint(0));const h=this.dt.figures.first();return t.offset(-h.startX,-h.startY),t}if(this.computeCurve()===9){if(e===3){const f=this.getPoint(0),u=this.getPoint(1),d=this.getPoint(2);return G.yL(f.x,f.y,u.x,u.y,u.x,u.y,d.x,d.y,t),t}const h=(e-1)/3|0,c=(h/2|0)*3;if(h%2===1){const f=this.getPoint(c),u=this.getPoint(c+1),d=this.getPoint(c+2),m=this.getPoint(c+3);return G.yL(f.x,f.y,u.x,u.y,d.x,d.y,m.x,m.y,t),t}else return t.h(this.getPoint(c)),t}const i=this.flattenedLengths,s=this.flattenedTotalLength;let n=0,o=0,r=0;for(;n<s/2&&o<e&&(r=i[o],!(n+r>s/2));)n+=r,o++;const l=this.getPoint(o),a=this.getPoint(o+1);if(Math.abs(l.x-a.x)<1)l.y>a.y?t.e(l.x,l.y-(s/2-n)):t.e(l.x,l.y+(s/2-n));else if(Math.abs(l.y-a.y)<1)l.x>a.x?t.e(l.x-(s/2-n),l.y):t.e(l.x+(s/2-n),l.y);else{const h=(s/2-n)/r,c=h*(a.x-l.x),f=h*(a.y-l.y);t.e(l.x+c,l.y+f)}return t}get midAngle(){return this.updateRoute(),this.computeMidAngle()}computeMidAngle(){const t=this.pointsCount;if(t<2)return NaN;if(t===2){const a=this.getPoint(0),h=this.getPoint(1);return a.directionPoint(h)}if(this.isOrthogonal&&(this.computeCorner()>=15||this.computeCurve()===9))return this.dt.getAngleAlongPath(.5);if(this.computeCurve()===9&&t>=4){const a=(t-1)/3|0;let h=(a/2|0)*3;if(a%2===1){h=Math.floor(h);const c=this.getPoint(h),f=this.getPoint(h+1),u=this.getPoint(h+2),d=this.getPoint(h+3);return G.PR(c.x,c.y,f.x,f.y,u.x,u.y,d.x,d.y)}else if(h>0&&h+1<t){const c=this.getPoint(h-1),f=this.getPoint(h+1);return c.directionPoint(f)}}const e=this.flattenedLengths,i=this.flattenedTotalLength;let s=0,n=0,o=0;for(;s<i/2&&n<t&&(o=e[n],!(s+o>i/2));)s+=o,n++;const r=this.getPoint(n),l=this.getPoint(n+1);if(Math.abs(r.x-l.x)<.5&&Math.abs(r.y-l.y)<Link.ZN){if(n>0&&n<t-2){const a=this.getPoint(n-1),h=this.getPoint(n+2);return a.x<h.x?0:a.x>h.x?180:a.y<h.y?90:270}}else if(Math.abs(r.y-l.y)<.5&&Math.abs(r.x-l.x)<Link.ZN&&n>0&&n<t-2){const a=this.getPoint(n-1),h=this.getPoint(n+2);return a.y<h.y?90:a.y>h.y?270:a.x<h.x?0:180}return r.directionPoint(l)}get flattenedLengths(){return this.rc!==null?this.rc:(this.$i||this.Ak(),this.WE())}get flattenedTotalLength(){let t=this.Lk;if(isNaN(t)){const e=this.flattenedLengths,i=e.length;t=0;for(let s=0;s<i;s++)t+=e[s];this.Lk=t}return t}WE(){this.rc===null?this.rc=[]:this.rc.length=0;const t=this.rc,e=this.pointsCount;for(let i=0;i<e-1;i++){let s=0;const n=this.getPoint(i),o=this.getPoint(i+1);G.G(n.x,o.x)?(s=o.y-n.y,s<0&&(s=-s),t.push(s)):G.G(n.y,o.y)?(s=o.x-n.x,s<0&&(s=-s),t.push(s)):(s=Math.sqrt(n.distanceSquaredPoint(o)),t.push(s))}return t}get points(){return this.Ae}set points(t){const e=this.Ae;if(e===t)return;let i=null;if(Array.isArray(t))i=this.convertPointsArrayToList(t);else if(t instanceof List){i=t.copy();const n=i.iterator;for(;n.next();)n.value.b()}else U.n("Link.points value is not an instance of List or Array: "+t);if(i===null)return;i.b(),this.Ae=i,this.fi(),this.Ak();const s=this.diagram;s!==null&&(!s.ah&&!s.undoManager.isUndoingRedoing&&s.pb.add(this),s.animationManager.Ne&&s.animationManager.JM(this,i)),this.t("points",e,i)}convertPointsArrayToList(t){let e=null,i=t.length%2===0;if(i){for(let s=0;s<t.length;s++)if(typeof t[s]!="number"||isNaN(t[s])){i=!1;break}}if(i){e=new List;for(let s=0;s<t.length/2;s++)e.add(new Point(t[s*2],t[s*2+1]).b())}else{let s=!0;for(let n=0;n<t.length;n++){const o=t[n];if(!U.Z(o)||typeof o.x!="number"||isNaN(o.x)||typeof o.y!="number"||isNaN(o.y)){s=!1;break}}if(s){e=new List;for(let n=0;n<t.length;n++){const o=t[n];e.add(new Point(o.x,o.y).b())}}}return e}get pointsCount(){return this.Ae.count}getPoint(t){return this.Ae.r[t]}setPoint(t,e){this.Ae.setElt(t,e)}setPointAt(t,e,i){this.Ae.setElt(t,new Point(e,i))}insertPoint(t,e){this.Ae.insertAt(t,e)}insertPointAt(t,e,i){this.Ae.insertAt(t,new Point(e,i))}addPoint(t){this.Ae.add(t)}addPointAt(t,e){this.Ae.add(new Point(t,e))}removePoint(t){this.Ae.removeAt(t)}clearPoints(){this.Ae.clear()}Lr(t,e){if(t===0&&e===0)return;if(this.pointsCount===0){this.defaultFromPoint.isReal()&&this.defaultFromPoint.offset(t,e),this.defaultToPoint.isReal()&&this.defaultToPoint.offset(t,e);return}const i=this.$i,s=new List,n=this.Ae.iterator;for(;n.next();){const l=n.value;s.add(new Point(l.x+t,l.y+e).b())}s.b();const o=this.Ae;this.Ae=s;const r=this.diagram;isNaN(t)||isNaN(e)||r!==null&&r.animationManager.Ne?this.f():(this.an.e(this.an.x+t,this.an.y+e),this.ft.e(this.ft.x+t,this.ft.y+e),this.Rf()),i?this.Ak():(this.defaultFromPoint.isReal()&&(this.defaultFromPoint=this.getPoint(0)),this.defaultToPoint.isReal()&&(this.defaultToPoint=this.getPoint(this.pointsCount-1))),r!==null&&r.animationManager.Ne&&r.animationManager.JM(this,s),this.t("points",o,s)}startRoute(){this.Tl===null&&(this.Tl=this.Ae,this.Ae=this.Ae.copy())}commitRoute(){if(this.Tl===null)return;const t=this.Tl,e=this.Ae;this.Tl=null;const i=this.diagram;i!==null&&i.animationManager.Ne&&i.animationManager.JM(this,e),this.fi(),this.Ak(),this.t("points",t,e)}rollbackRoute(){this.Tl!==null&&(this.Ae=this.Tl,this.Tl=null,this.eT())}aO(){this.Br!==null&&(this.points=this.Br,this.Br=null)}Ak(){if(this.Ae.count===0){this.$i=!1;return}this.$i=!0,this.eT(),this.rc=null,this.Lk=NaN,this.defaultFromPoint=this.getPoint(0),this.defaultToPoint=this.getPoint(this.pointsCount-1),this.Dk(!1)}invalidateRoute(){this.ee()}ee(){if(this.suspendsRouting)return;const t=this.path;if(t===null)return;const e=this.diagram;if(e){if(e.pb.has(this)||e.undoManager.isUndoingRedoing)return;const i=e.animationManager;if(i.isTicking&&!i.isAnimating)return;this.Br!==null&&!i.isTicking&&(this.Br=null)}this.$i=!1,this.f(),t.f()}get $i(){return(this.Mt&16)!==0}set $i(t){(this.Mt&16)!==0!==t&&(this.Mt=this.Mt^16)}get suspendsRouting(){return(this.Mt&32)!==0}set suspendsRouting(t){(this.Mt&32)!==0!==t&&(this.Mt=this.Mt^32)}get cw(){return(this.Mt&64)!==0}set cw(t){(this.Mt&64)!==0!==t&&(this.Mt=this.Mt^64)}get iT(){return(this.Mt&512)!==0}set iT(t){(this.Mt&512)!==0!==t&&(this.Mt=this.Mt^512)}get defaultFromPoint(){return this.KN}set defaultFromPoint(t){this.KN=t&&t.isReal()?t.copy():Point.xn}get defaultToPoint(){return this.HN}set defaultToPoint(t){this.HN=t&&t.isReal()?t.copy():Point.xn}updateRoute(){if(this.$i||this.cw)return;let t=!0;try{this.cw=!0,this.startRoute(),t=this.computePoints()}catch{this.cw=!1,this.rollbackRoute()}finally{this.cw=!1,t?this.commitRoute():this.rollbackRoute()}}computePoints(){const t=this.diagram;if(t===null)return!1;let e=this.fromNode,i=null;if(e===null?(Link.lc||(Link.lc=new Node,Link.lc.desiredSize=Size.vc,Link.lc.ensureBounds()),this.defaultFromPoint.isReal()&&(Link.lc.location=this.defaultFromPoint,Link.lc.ensureBounds(),e=Link.lc,i=Link.lc)):i=this.fromPort,i!==null&&!e.isVisible()){const m=e.findVisibleNode();m!==null&&m!==e?(e=m,i=m.port):e=m}if(this.qN=e,e===null||!e.location.isReal()||i===null||(i=e.findVisiblePort(i),i===null))return!1;let s=this.toNode,n=null;if(s===null?(Link.ac||(Link.ac=new Node,Link.ac.desiredSize=Size.vc,Link.ac.ensureBounds()),this.defaultToPoint.isReal()&&(Link.ac.location=this.defaultToPoint,Link.ac.ensureBounds(),s=Link.ac,n=Link.ac)):n=this.toPort,n!==null&&!s.isVisible()){const m=s.findVisibleNode();m!==null&&m!==s?(s=m,n=m.port):s=m}if(this.jN=s,s===null||!s.location.isReal()||n===null||(n=s.findVisiblePort(n),n===null))return!1;const o=this.pointsCount,r=this.computeSpot(!0,i),l=this.computeSpot(!1,n),a=this.Ll(r),h=this.Ll(l),c=i===n&&i!==null,f=this.isOrthogonal;let u=this.curve===9;c&&!f?(u=!0,this.or=!0):this.or=!1;const d=this.computeAdjusting()===0||c;if(!f&&!c&&a&&h){let m=!1;if(!d&&o>=3){let g=this.getLinkPoint(e,i,r,!0,!1,s,n),p=this.getLinkPoint(s,n,l,!1,!1,e,i);m=this.adjustPoints(0,g,o-1,p),m&&(g=this.getLinkPoint(e,i,r,!0,!1,s,n),p=this.getLinkPoint(s,n,l,!1,!1,e,i),this.adjustPoints(0,g,o-1,p))}m||(this.clearPoints(),u?this.JE(e,i,r,s,n,l):this.$E(e,i,r,s,n,l))}else{const m=c?this.computeCurviness():0;d&&(f&&this.isAvoiding||c)&&this.clearPoints();const g=this.getLinkPoint(e,i,r,!0,f,s,n),p=this.getLinkPoint(s,n,l,!1,f,e,i);let y=0,x=0,b=0;if(f||!a||c){b=this.getLinkDirection(e,i,g,r,!0,f,s,n);let M=this.computeEndSegmentLength(e,i,r,!0,b);if(c&&(a||r.equals(l)||!f&&r.x+l.x===1&&r.y+l.y===1)&&(b-=f?90:Link.OF,m<0&&(b-=180)),b=G.ze(b),c&&(M+=Math.abs(m)*(f?1:2)),b===0?y=M:b===90?x=M:b===180?y=-M:b===270?x=-M:(y=M*Math.cos(b*Math.PI/180),x=M*Math.sin(b*Math.PI/180)),r.isNoSpot()&&c){const C=i.getDocumentPoint(Spot.Center,Point.l()),L=Point.O(C.x+y*Link.tu,C.y+x*Link.tu);this.getLinkPointFromPoint(e,i,C,L,!0,g),Point.i(C),Point.i(L)}}let k=0,P=0,S=0;if(f||!h||c){S=this.getLinkDirection(s,n,p,l,!1,f,e,i);let M=this.computeEndSegmentLength(s,n,l,!1,S);if(c&&(h||r.equals(l)||!f&&r.x+l.x===1&&r.y+l.y===1)&&(S+=f?0:Link.IF,m<0&&(S+=180)),S=G.ze(S),c&&(M+=Math.abs(m)*(f?1:2)),S===0?k=M:S===90?P=M:S===180?k=-M:S===270?P=-M:(k=M*Math.cos(S*Math.PI/180),P=M*Math.sin(S*Math.PI/180)),l.isNoSpot()&&c){const C=n.getDocumentPoint(Spot.Center,Point.l()),L=Point.O(C.x+k*Link.tu,C.y+P*Link.tu);this.getLinkPointFromPoint(s,n,C,L,!1,p),Point.i(C),Point.i(L)}}let T=g;(f||!a||c)&&(T=new Point(g.x+y,g.y+x));let N=p;(f||!h||c)&&(N=new Point(p.x+k,p.y+P)),!d&&!f&&a&&o>3&&this.adjustPoints(0,g,o-2,N)?this.setPoint(o-1,p):!d&&!f&&h&&o>3&&this.adjustPoints(1,T,o-1,p)?this.setPoint(0,g):!d&&(f?o>=6:o>4)&&this.adjustPoints(1,T,o-2,N)?(this.setPoint(0,g),this.setPoint(o-1,p)):(this.clearPoints(),this.addPoint(g),(f||!a||c)&&this.addPoint(T),f&&this.addOrthoPoints(T,b,N,S,e,s),(f||!h||c)&&this.addPoint(N),this.addPoint(p))}return t.addInvalidRoute(this),!0}sT(t,e){return Math.abs(e.x-t.x)>Math.abs(e.y-t.y)?(e.x>=t.x?e.x=t.x+9e9:e.x=t.x-9e9,e.y=t.y):(e.y>=t.y?e.y=t.y+9e9:e.y=t.y-9e9,e.x=t.x),e}getLinkPointFromPoint(t,e,i,s,n,o){if(o===void 0&&(o=new Point),t===null||e===null)return o.h(i),o;if(!t.isVisible()){const u=t.findVisibleNode();u!==null&&u!==t&&(t=u,e=t.port)}let r=0,l=0,a=0,h=0,c=null,f=e.panel;if(f!==null&&!f.Fn()&&(f=f.panel),f===null)r=s.x,l=s.y,a=i.x,h=i.y;else{c=f._s;const u=1/(c.m11*c.m22-c.m12*c.m21),d=c.m22*u,m=-c.m12*u,g=-c.m21*u,p=c.m11*u,y=u*(c.m21*c.dy-c.m22*c.dx),x=u*(c.m12*c.dx-c.m11*c.dy);r=s.x*d+s.y*g+y,l=s.x*m+s.y*p+x,a=i.x*d+i.y*g+y,h=i.x*m+i.y*p+x}return e.Tf(r,l,a,h,o),c!==null&&o.T(c),o}ZE(t,e){const i=t.Fd;return i!==null?i.XF(e):null}Fk(t){if(t===null)return null;let e=t.Fd;return e===null&&(e=new Knot(t.part,t),t.Fd=e),e.XF(this)}getLinkPoint(t,e,i,s,n,o,r,l){if(l===void 0&&(l=new Point),i.isSpot()&&!this.Ll(i))return e.getDocumentPoint(i,l),l;if(i.isSide()){const c=this.Fk(e);if(c!==null){const f=c.cc;if(l.h(f),n&&this.routing===7){const u=this.Fk(r);if(u!==null&&c.eu<u.eu){const d=Point.l(),m=Point.l(),g=Rect.l();e.getDocumentPoint(Spot.TopLeft,d),e.getDocumentPoint(Spot.BottomRight,m);const p=d.x,y=d.y,x=m.x,b=m.y;g.x=Math.min(p,x),g.y=Math.min(y,b),g.width=Math.abs(p-x),g.height=Math.abs(y-b);const k=this.computeSpot(!s,r),P=this.getLinkPoint(o,r,k,!s,n,t,e,m);(i.includesSide(Spot.LeftSide)||i.includesSide(Spot.RightSide))&&P.y>=g.y&&P.y<=g.y+g.height?l.y=P.y:(i.includesSide(Spot.TopSide)||i.includesSide(Spot.BottomSide))&&P.x>=g.x&&P.x<=g.x+g.width&&(l.x=P.x),Rect.i(g),Point.i(d),Point.i(m)}}return l}}const a=e.getDocumentPoint(this.mg(i,s),Point.l()),h=Point.l();if(this.pointsCount>(n?6:2))h.h(s?this.getPoint(1):this.getPoint(this.pointsCount-2)),n&&this.sT(a,h);else if(t?.isMemberOf(o)||o?.isMemberOf(t)){const c=e.getDocumentBounds(Rect.l()),f=r.getDocumentBounds(Rect.l());c.isReal()&&f.isReal()?f.containsRect(c)?(h.h(a),this.nT(f,a.x,a.y,0,this.computeSpot(r===this.toPort,r),h)):c.containsRect(f)?(r.getDocumentPoint(Spot.Center,h),this.nT(c,h.x,h.y,0,this.computeSpot(e===this.toPort,e),h)):this.oT(r,a,s,n,h):this.oT(r,a,s,n,h),Rect.i(c),Rect.i(f)}else this.oT(r,a,s,n,h);return this.getLinkPointFromPoint(t,e,a,h,s,l),Point.i(h),Point.i(a),l}oT(t,e,i,s,n){const o=this.computeSpot(!i,t);t.getDocumentPoint(this.mg(o,!i),n),s&&this.sT(e,n)}getLinkDirection(t,e,i,s,n,o,r,l){let a=this.QE(t,e,i,s,n,o,r,l);if(t&&r){const c=Rect.l(),f=Rect.l();if(s.isNone()&&t.isMemberOf(r)&&e&&l){if(e.getDocumentBounds(c),l.getDocumentBounds(f),c.isReal()&&f.isReal()&&f.containsRect(c)){const u=this.computeSpot(l===this.toPort,l);u.equals(Spot.Left)||u.equals(Spot.LeftSide)?a=180:u.equals(Spot.Right)||u.equals(Spot.RightSide)?a=0:u.equals(Spot.Top)||u.equals(Spot.TopSide)?a=270:u.equals(Spot.Bottom)||u.equals(Spot.BottomSide)?a=90:a=G.ze(a+180)}}else r?.isMemberOf(t)&&e&&l&&(e.getDocumentBounds(c),l.getDocumentBounds(f),c.isReal()&&f.isReal()&&c.containsRect(f)&&(a=G.ze(a+180)));Rect.i(c),Rect.i(f)}if(this.Ll(s)||e===null)return a;const h=e.getDocumentAngle();return h===0?a:(45<=h&&h<135?a+=90:135<=h&&h<225?a+=180:225<=h&&h<315&&(a+=270),G.ze(a))}QE(t,e,i,s,n,o,r,l){if(s.isSpot())return G.ux(null,s.x,s.y);if(s.isSide()){const f=this.Fk(e);if(f!==null)switch(f.gi){case 1:return 270;case 8:return 90;case 2:return 180;default:return 0}else return s.includesSide(Spot.TopSide)?270:s.includesSide(Spot.BottomSide)?90:s.includesSide(Spot.LeftSide)?180:0}if(e===null||l===null)return 0;const a=e.getDocumentPoint(Spot.Center,Point.l()),h=Point.l();this.pointsCount>(o?6:2)?o?(h.h(n?this.getPoint(1):this.getPoint(this.pointsCount-2)),this.sT(a,h)):h.h(i):l.getDocumentPoint(Spot.Center,h);let c=0;return Math.abs(h.x-a.x)>Math.abs(h.y-a.y)?h.x>=a.x?c=0:c=180:h.y>=a.y?c=90:c=270,Point.i(h),Point.i(a),c}computeEndSegmentLength(t,e,i,s,n){if(e!==null&&i.isSide()){const r=this.Fk(e);if(r!==null)return r.vk}let o=NaN;if(s?o=this.fromEndSegmentLength:o=this.toEndSegmentLength,e!==null&&isNaN(o))if(n===void 0&&(n=NaN),Link.QN>0&&this.computeCurve()===9&&!isNaN(n)&&i.isSpot()){const r=this.getOtherPort(e);if(r){const l=Point.l(),a=Point.l(),h=e.getDocumentPoint(i,l),c=r.getDocumentPoint(i.opposite(),a),f=n>=315||n<=45||n>=135&&n<=225;let u=Math.abs(f?h.x-c.x:h.y-c.y)/Link.QN;return u=Math.max(u,Link._N),Point.i(l),Point.i(a),u}}else s?o=e.fromEndSegmentLength:o=e.toEndSegmentLength;return isNaN(o)&&(o=Link._N),o}computeSpot(t,e){return e===void 0&&(e=null),t?this._E(e||this.fromPort):this.t3(e||this.toPort)}_E(t){if(t===null)return Spot.Center;let e=this.fromSpot;return e.isDefault()&&(e=t.fromSpot),e===Spot.Default?Spot.None:e}t3(t){if(t===null)return Spot.Center;let e=this.toSpot;return e.isDefault()&&(e=t.toSpot),e===Spot.Default?Spot.None:e}Ll(t){return t===Spot.None||t.x===.5&&t.y===.5}mg(t,e){return t.x===.5&&t.y===.5?t:Spot.Center}computeOtherPoint(t,e,i,s,n){if(n===void 0&&(n=new Point),this.computeAdjusting()!==0&&this.pointsCount>4)return this.getPoint(Math.floor(this.pointsCount/2));{const o=this.ZE(e,this);if(o!==null)return n.h(o.cc),n;if(t instanceof Group){let r=this.fromNode,l=this.fromPort;(s===!1||s===void 0&&l===e)&&(r=this.toNode,l=this.toPort);const a=Rect.l(),h=Rect.l();if(l&&r?.isMemberOf(t)){const c=i===void 0?this.computeSpot(s===void 0?l===e:s,e):i;if(e.getDocumentBounds(a),l.getDocumentBounds(h),a.isReal()&&h.isReal()&&a.containsRect(h)){const f=l.getDocumentPoint(Spot.Center,n);return this.nT(a,f.x,f.y,0,c,f),Rect.i(a),Rect.i(h),f}}Rect.i(a),Rect.i(h)}return e.getDocumentPoint(Spot.Center,n)}}computeShortLength(t){if(t){let e=this.fromShortLength;if(isNaN(e)){const i=this.fromPort;i!==null&&(e=i.fromShortLength)}return isNaN(e)?0:e}else{let e=this.toShortLength;if(isNaN(e)){const i=this.toPort;i!==null&&(e=i.toShortLength)}return isNaN(e)?0:e}}ap(t,e,i,s,n,o){if(this.pickable===!1)return!1;e===void 0&&(e=null),i===void 0&&(i=null);let r;if(o===void 0?(r=Transform.l(),r.Xe()):r=o,r.Rc(this.T),this.containedInRect(t,r))return this.kN(e,i,n),o===void 0&&Transform.i(r),!0;if(this.intersectsRect(t,r)){let l=!1;if(!this.zf){const a=this.F.r,h=a.length;for(let c=h;c--;){const f=a[c];if(!f.visible&&f!==this.locationObject)continue;const u=f.actualBounds,d=this.naturalBounds;if(u.x>d.width||u.y>d.height||u.x+u.width<0||u.y+u.height<0)continue;const m=f,g=Transform.l();if(g.set(r),m instanceof Panel?l=m.ap(t,e,i,s,n,g):this.path===m?m instanceof Shape&&(l=m.TE(t,s,g)):l=m.MD(t,s,g),l){let p=m;e!==null&&(p=e(m)),p&&(i===null||i(p))&&n.add(p)}Transform.i(g)}}return o===void 0&&Transform.i(r),l||this.background!==null}return o===void 0&&Transform.i(r),!1}get isOrthogonal(){return(this.nc&2)===2}static $N(t){return(t&2)===2}get isAvoiding(){return(this.nc&4)===4}computeCurve(){if(this.or===null){const t=this.fromPort,e=t!==null&&t===this.toPort,i=this.isOrthogonal;this.or=e&&!i}return this.or?9:this.curve}computeCorner(){if(this.curve===9)return 0;let t=this.corner;return(isNaN(t)||t<0)&&(t=Link.EF),t}findMidLabel(){const t=this.path,e=this.F.r,i=e.length;for(let n=0;n<i;n++){const o=e[n];if(!(o===t||o.isPanelMain)&&(o.segmentIndex===-1/0||isNaN(o.segmentIndex)))return o}const s=this.labelNodes;for(;s.next();){const n=s.value;if(n.segmentIndex===-1/0||isNaN(n.segmentIndex))return n}return null}computeSpacing(){if(!this.isVisible())return 0;let t=Link.UF;t=Math.max(t,this.computeThickness());const e=this.fromPort,i=this.toPort;if(e!==null&&i!==null){const s=this.findMidLabel();if(s!==null){const n=s.naturalBounds,o=s.margin,r=isNaN(n.width)?Link.BF:n.width*s.scale+o.left+o.right,l=isNaN(n.height)?Link.VF:n.height*s.scale+o.top+o.bottom,a=s.segmentOrientation;if(a===21||a===25||a===24)t=Math.max(t,l);else if(a===23||a===27||a===22||a===26)t=Math.max(t,r);else{const c=e.getDocumentPoint(Spot.Center).directionPoint(i.getDocumentPoint(Spot.Center))/180*Math.PI;t=Math.max(t,Math.abs(Math.sin(c)*r)+Math.abs(Math.cos(c)*l)+1)}this.curve===9&&(t*=Link.vF)}}return t}arrangeBundledLinks(t,e){if(e)for(let i=0;i<t.length;i++){const s=t[i];s.computeAdjusting()===0&&s.ee()}}computeCurviness(){let t=this.curviness;if(isNaN(t)){t=Link.DF;const e=this.rr;if(e!==null){const i=U.ot();let s=0;const n=e.cn;for(let r=0;r<n.length;r++){const a=n[r].computeSpacing();i.push(a),s+=a}let o=-s/2;for(let r=0;r<n.length;r++){if(n[r]===this){t=o+i[r]/2;break}o+=i[r]}e.Zy===this.fromNode&&(t=-t),U._(i)}}return t}computeThickness(){if(!this.isVisible())return 0;const t=this.path;return t!==null?Math.max(t.strokeWidth,1):1}hasCurviness(){return!isNaN(this.curviness)||this.rr!==null}$E(t,e,i,s,n,o){let r=this.getLinkPoint(t,e,i,!0,!1,s,n),l=this.getLinkPoint(s,n,o,!1,!1,t,e);if(this.GF(t,e,i,r,s,n,o,l),this.addPoint(r),this.addPoint(l),this.hasCurviness()){const a=l.x-r.x,h=l.y-r.y,c=this.computeCurviness(),f=c,u=r.x+a/2,d=r.y+h/2;let m=u,g=d;if(G.c(h,0))a>0?g-=f:g+=f;else{const p=-a/h;let y=Math.sqrt(f*f/(p*p+1));c<0&&(y=-y),m=(h<0?-1:1)*y+u,g=p*(m-u)+d}this.insertPointAt(1,m,g)}}GF(t,e,i,s,n,o,r,l){const a=o.getDocumentBounds(Rect.l()),h=e.getDocumentBounds(Rect.l());if(h.intersectsRect(a)){const c=Point.l();if(a.containsRect(h)){if(o.containsPoint(o.getLocalPoint(s,c))){const f=Point.l();e.getDocumentPoint(this.mg(i,!0),f),l.h(f),this.rT(a,f.x,f.y,Link.tu,l),this.getLinkPointFromPoint(n,o,a.containsPoint(f)?f:s,l,!1,l),this.getLinkPointFromPoint(t,e,f,l,!0,s),Point.i(f)}}else if(h.containsRect(a)){if(e.containsPoint(e.getLocalPoint(l,c))){const f=Point.l();o.getDocumentPoint(this.mg(r,!1),f),s.h(f),this.rT(h,f.x,f.y,Link.tu,s),this.getLinkPointFromPoint(t,e,h.containsPoint(f)?f:l,s,!0,s),this.getLinkPointFromPoint(n,o,f,s,!1,l),Point.i(f)}}else{const f=Point.l();e.getDocumentPoint(this.mg(i,!0),f);const u=Point.l();o.getDocumentPoint(this.mg(r,!1),u);const d=o.containsPoint(o.getLocalPoint(f,c)),m=e.containsPoint(e.getLocalPoint(u,c));if(d||m)s.h(f),l.h(u);else if(o.containsPoint(o.getLocalPoint(s,c))||e.containsPoint(e.getLocalPoint(l,c))){const g=s.x,p=s.y;s.x=l.x,s.y=l.y,l.x=g,l.y=p}Point.i(f),Point.i(u)}Point.i(c)}Rect.i(a),Rect.i(h)}nT(t,e,i,s,n,o){let r=-1;return n.equals(Spot.Left)||n.equals(Spot.LeftSide)?r=180:n.equals(Spot.Right)||n.equals(Spot.RightSide)?r=0:n.equals(Spot.Top)||n.equals(Spot.TopSide)?r=270:(n.equals(Spot.Bottom)||n.equals(Spot.BottomSide))&&(r=90),r===-1?this.rT(t,e,i,0,o):this.YF(t,e,i,0,r,o)}rT(t,e,i,s,n){const o=G.ux(t,e,i);return this.YF(t,e,i,s,o,n)}YF(t,e,i,s,n,o){return n===0?o.x=t.right+s:n===90?o.y=t.bottom+s:n===180?o.x=t.x-s:n===270?o.y=t.y-s:n===45?(o.x=t.right+s,o.y=t.bottom+s):n===135?(o.x=t.x-s,o.y=t.bottom+s):n===225?(o.x=t.x-s,o.y=t.y-s):n===315&&(o.x=t.right+s,o.y=t.y-s),o}JE(t,e,i,s,n,o){let r=this.getLinkPoint(t,e,i,!0,!1,s,n),l=this.getLinkPoint(s,n,o,!1,!1,t,e);this.GF(t,e,i,r,s,n,o,l),this.addPoint(r),this.addPoint(l);const a=l.x-r.x,h=l.y-r.y,c=this.computeCurviness();let f=0,u=0,d=r.x+a/3,m=r.y+h/3,g=d,p=m;G.c(h,0)?a>0?p-=c:p+=c:(f=-a/h,u=Math.sqrt(c*c/(f*f+1)),c<0&&(u=-u),g=(h<0?-1:1)*u+d,p=f*(g-d)+m),d=r.x+2*a/3,m=r.y+2*h/3;let y=d,x=m;G.c(h,0)?a>0?x-=c:x+=c:(y=(h<0?-1:1)*u+d,x=f*(y-d)+m),this.insertPointAt(1,g,p),this.insertPointAt(2,y,x),this.setPoint(0,this.getLinkPoint(t,e,i,!0,!1,s,n)),this.setPoint(3,this.getLinkPoint(s,n,o,!1,!1,t,e))}adjustPoints(t,e,i,s){let n=this.computeAdjusting();if(this.isOrthogonal){if(n===18)return!1;n===19&&(n=17)}switch(n){case 18:return this.e3(t,e,i,s);case 19:return this.i3(t,e,i,s);case 17:return this.s3(t,e,i,s);default:return!1}}e3(t,e,i,s){const n=this.getPoint(t),o=this.getPoint(i);if(n.equalsApprox(e)&&o.equalsApprox(s))return!0;const r=n.x,l=n.y,a=o.x,h=o.y;let c=a-r,f=h-l;const u=Math.sqrt(c*c+f*f);if(G.G(u,0))return!0;let d=0;G.G(c,0)?f<0?d=-Math.PI/2:d=Math.PI/2:(d=Math.atan(f/Math.abs(c)),c<0&&(d=Math.PI-d));const m=e.x,g=e.y,p=s.x,y=s.y,x=p-m,b=y-g,k=Math.sqrt(x*x+b*b);let P=0;G.G(x,0)?b<0?P=-Math.PI/2:P=Math.PI/2:(P=Math.atan(b/Math.abs(x)),x<0&&(P=Math.PI-P));const S=k/u,T=P-d;this.setPoint(t,e);for(let N=t+1;N<i;N++){const M=this.getPoint(N);c=M.x-r,f=M.y-l;const C=Math.sqrt(c*c+f*f);if(G.G(C,0))continue;let L=0;G.G(c,0)?f<0?L=-Math.PI/2:L=Math.PI/2:(L=Math.atan(f/Math.abs(c)),c<0&&(L=Math.PI-L));const A=L+T,D=C*S,F=m+D*Math.cos(A),v=g+D*Math.sin(A);this.setPointAt(N,F,v)}return this.setPoint(i,s),!0}i3(t,e,i,s){const n=this.getPoint(t),o=this.getPoint(i);if(n.equalsApprox(e)&&o.equalsApprox(s))return!0;const r=n.x,l=n.y,a=o.x,h=o.y,c=(a-r)**2+(h-l)**2,f=e.x,u=e.y,d=s.x,m=s.y;let g=0,p=1;d-f!==0?(g=(m-u)/(d-f),p=Math.sqrt(1+1/(g*g))):g=9e9,this.setPoint(t,e);for(let y=t+1;y<i;y++){const x=this.getPoint(y),b=x.x,k=x.y;let P=.5;c!==0&&(P=((r-b)*(r-a)+(l-k)*(l-h))/c);const S=r+P*(a-r),T=l+P*(h-l);let N=Math.sqrt((b-S)**2+(k-T)**2);k<g*(b-S)+T&&(N=-N),g>0&&(N=-N);const M=f+P*(d-f),C=u+P*(m-u);if(g!==0){const L=M+N/p,A=C-(L-M)/g;this.setPointAt(y,L,A)}else this.setPointAt(y,M,C+N)}return this.setPoint(i,s),!0}s3(t,e,i,s){if(this.isOrthogonal){let n=this.getPoint(t),o=this.getPoint(t+1),r=this.getPoint(t+2),l=o.x,a=o.y;const h=l,c=a;G.c(n.y,o.y)?G.c(o.x,r.x)?a=e.y:G.c(o.y,r.y)&&(l=e.x):G.c(n.x,o.x)&&(G.c(o.y,r.y)?l=e.x:G.c(o.x,r.x)&&(a=e.y)),this.setPointAt(t+1,l,a),n=this.getPoint(i),o=this.getPoint(i-1),r=this.getPoint(i-2);let f=o.x,u=o.y;const d=f,m=u;if(G.c(n.y,o.y)?G.c(o.x,r.x)?u=s.y:G.c(o.y,r.y)&&(f=s.x):G.c(n.x,o.x)&&(G.c(o.y,r.y)?f=s.x:G.c(o.x,r.x)&&(u=s.y)),this.setPointAt(i-1,f,u),this.HA())return this.setPointAt(t+1,h,c),this.setPointAt(i-1,d,m),!1}return this.setPoint(t,e),this.setPoint(i,s),!0}addOrthoPoints(t,e,i,s,n,o){e=G.ze(e),s=G.ze(s);const c=s;e>=315||e<45?e=0:45<=e&&e<135?e=90:135<=e&&e<225?e=180:e=270,s>=315||s<45?s=0:45<=s&&s<135?s=90:135<=s&&s<225?s=180:s=270;const f=t,u=i,d=Rect.ji(n.actualBounds),m=Rect.ji(o.actualBounds);d.inflate(Link.za,Link.za),m.inflate(Link.za,Link.za),d.unionPoint(t),m.unionPoint(i);const g=Point.l(),p=Point.l();if(e===0)if(u.x>f.x||s===270&&u.y<f.y&&m.right>f.x||s===90&&u.y>f.y&&m.right>f.x)g.e(u.x,f.y),p.e(u.x,(f.y+u.y)/2),s===180?(g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1),p.x=g.x,p.y=u.y):s===270&&u.y<f.y||s===90&&u.y>f.y?(f.x<m.left?g.x=this.computeMidOrthoPosition(f.x,f.y,m.left,u.y,!1):f.x<m.right&&(s===270&&f.y<m.top||s===90&&f.y>m.bottom)?g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1):g.x=m.right,p.x=g.x,p.y=u.y):s===0&&f.x<m.left&&f.y>m.top&&f.y<m.bottom&&(g.x=f.x,f.y<u.y?g.y=Math.min(u.y,m.top):g.y=Math.max(u.y,m.bottom),p.y=g.y);else{if(g.e(f.x,u.y),p.e((f.x+u.x)/2,u.y),s===180||s===90&&u.y<d.top||s===270&&u.y>d.bottom){const y=m.containsPoint(f)||d.containsPoint(u);if(s===180&&y)g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0);else if(u.y<f.y&&(s===180||s===90)){const x=y?Math.min(u.y,m.bottom):Math.max(u.y,m.bottom);g.y=this.computeMidOrthoPosition(f.x,d.top,u.x,x,!0)}else if(u.y>f.y&&(s===180||s===270)){const x=y?Math.max(u.y,m.top):Math.min(u.y,m.top);g.y=this.computeMidOrthoPosition(f.x,d.bottom,u.x,x,!0)}p.x=u.x,p.y=g.y}g.y>d.top&&g.y<d.bottom&&(u.x>=d.left&&u.x<=f.x||f.x<=m.right&&f.x>=u.x?(s===90||s===270)&&(g.e(Math.max((f.x+u.x)/2,f.x),f.y),p.e(g.x,u.y)):(s===270||(s===0||s===180)&&u.y<f.y?g.y=Math.min(u.y,s===0?d.top:Math.min(d.top,m.top)):g.y=Math.max(u.y,s===0?d.bottom:Math.max(d.bottom,m.bottom)),p.x=u.x,p.y=g.y))}else if(e===180)if(u.x<f.x||s===270&&u.y<f.y&&m.left<f.x||s===90&&u.y>f.y&&m.left<f.x)g.e(u.x,f.y),p.e(u.x,(f.y+u.y)/2),s===0?(g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1),p.x=g.x,p.y=u.y):s===270&&u.y<f.y||s===90&&u.y>f.y?(f.x>m.right?g.x=this.computeMidOrthoPosition(f.x,f.y,m.right,u.y,!1):f.x>m.left&&(s===270&&f.y<m.top||s===90&&f.y>m.bottom)?g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1):g.x=m.left,p.x=g.x,p.y=u.y):s===180&&f.x>m.right&&f.y>m.top&&f.y<m.bottom&&(g.x=f.x,f.y<u.y?g.y=Math.min(u.y,m.top):g.y=Math.max(u.y,m.bottom),p.y=g.y);else{if(g.e(f.x,u.y),p.e((f.x+u.x)/2,u.y),s===0||s===90&&u.y<d.top||s===270&&u.y>d.bottom){const y=m.containsPoint(f)||d.containsPoint(u);if(s===0&&y)g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0);else if(u.y<f.y&&(s===0||s===90)){const x=y?Math.min(u.y,m.bottom):Math.max(u.y,m.bottom);g.y=this.computeMidOrthoPosition(f.x,d.top,u.x,x,!0)}else if(u.y>f.y&&(s===0||s===270)){const x=y?Math.max(u.y,m.top):Math.min(u.y,m.top);g.y=this.computeMidOrthoPosition(f.x,d.bottom,u.x,x,!0)}p.x=u.x,p.y=g.y}g.y>d.top&&g.y<d.bottom&&(u.x<=d.right&&u.x>=f.x||f.x>=m.left&&f.x<=u.x?(s===90||s===270)&&(g.e(Math.min((f.x+u.x)/2,f.x),f.y),p.e(g.x,u.y)):(s===270||(s===0||s===180)&&u.y<f.y?g.y=Math.min(u.y,s===180?d.top:Math.min(d.top,m.top)):g.y=Math.max(u.y,s===180?d.bottom:Math.max(d.bottom,m.bottom)),p.x=u.x,p.y=g.y))}else if(e===90)if(u.y>f.y||s===180&&u.x<f.x&&m.bottom>f.y||s===0&&u.x>f.x&&m.bottom>f.y)g.e(f.x,u.y),p.e((f.x+u.x)/2,u.y),s===270?(g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0),p.x=u.x,p.y=g.y):s===180&&u.x<f.x||s===0&&u.x>f.x?(f.y<m.top?g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,m.top,!0):f.y<m.bottom&&(s===180&&f.x<m.left||s===0&&f.x>m.right)?g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0):g.y=m.bottom,p.x=u.x,p.y=g.y):s===90&&f.y<m.top&&f.x>m.left&&f.x<m.right&&(f.x<u.x?g.x=Math.min(u.x,m.left):g.x=Math.max(u.x,m.right),g.y=f.y,p.x=g.x);else{if(g.e(u.x,f.y),p.e(u.x,(f.y+u.y)/2),s===270||s===0&&u.x<d.left||s===180&&u.x>d.right){const y=m.containsPoint(f)||d.containsPoint(u);if(s===270&&y)g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1);else if(u.x<f.x&&(s===270||s===0)){const x=y?Math.min(u.x,m.right):Math.max(u.x,m.right);g.x=this.computeMidOrthoPosition(d.left,f.y,x,u.y,!1)}else if(u.x>f.x&&(s===270||s===180)){const x=y?Math.max(u.x,m.left):Math.min(u.x,m.left);g.x=this.computeMidOrthoPosition(d.right,f.y,x,u.y,!1)}p.x=g.x,p.y=u.y}g.x>d.left&&g.x<d.right&&(u.y>=d.top&&u.y<=f.y||f.y<=m.bottom&&f.y>=u.y?(s===0||s===180)&&(g.e(f.x,Math.max((f.y+u.y)/2,f.y)),p.e(u.x,g.y)):(s===180||(s===90||s===270)&&u.x<f.x?g.x=Math.min(u.x,s===90?d.left:Math.min(d.left,m.left)):g.x=Math.max(u.x,s===90?d.right:Math.max(d.right,m.right)),p.x=g.x,p.y=u.y))}else if(u.y<f.y||s===180&&u.x<f.x&&m.top<f.y||s===0&&u.x>f.x&&m.top<f.y)g.e(f.x,u.y),p.e((f.x+u.x)/2,u.y),s===90?(g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0),p.x=u.x,p.y=g.y):s===180&&u.x<f.x||s===0&&u.x>=f.x?(f.y>m.bottom?g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,m.bottom,!0):f.y>m.top&&(s===180&&f.x<m.left||s===0&&f.x>m.right)?g.y=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!0):g.y=m.top,p.x=u.x,p.y=g.y):s===270&&f.y>m.bottom&&f.x>m.left&&f.x<m.right&&(f.x<u.x?g.x=Math.min(u.x,m.left):g.x=Math.max(u.x,m.right),g.y=f.y,p.x=g.x);else{if(g.e(u.x,f.y),p.e(u.x,(f.y+u.y)/2),s===90||s===0&&u.x<d.left||s===180&&u.x>d.right){const y=m.containsPoint(f)||d.containsPoint(u);if(s===90&&y)g.x=this.computeMidOrthoPosition(f.x,f.y,u.x,u.y,!1);else if(u.x<f.x&&(s===90||s===0)){const x=y?Math.min(u.x,m.right):Math.max(u.x,m.right);g.x=this.computeMidOrthoPosition(d.left,f.y,x,u.y,!1)}else if(u.x>f.x&&(s===90||s===180)){const x=y?Math.max(u.x,m.left):Math.min(u.x,m.left);g.x=this.computeMidOrthoPosition(d.right,f.y,x,u.y,!1)}p.x=g.x,p.y=u.y}g.x>d.left&&g.x<d.right&&(u.y<=d.bottom&&u.y>=f.y||f.y>=m.top&&f.y<=u.y?(s===0||s===180)&&(g.e(f.x,Math.min((f.y+u.y)/2,f.y)),p.e(u.x,g.y)):(s===180||(s===90||s===270)&&u.x<f.x?g.x=Math.min(u.x,s===270?d.left:Math.min(d.left,m.left)):g.x=Math.max(u.x,s===270?d.right:Math.max(d.right,m.right)),p.x=g.x,p.y=u.y))}this.iT=s!==c,this.WN=e,this.JN=s,this.addPoint(g.copy()),this.addPoint(p.copy()),Point.i(g),Point.i(p),Rect.i(d),Rect.i(m)}computeMidOrthoPosition(t,e,i,s,n){let o=0;return this.hasCurviness()&&!this.computeSpot(!0,this.fromPort).isSide()&&!this.computeSpot(!1,this.toPort).isSide()&&(o=this.computeCurviness()),n?(e+s)/2+o:(t+i)/2+o}HA(){if(this.diagram===null||!this.isAvoiding||this.diagram.animationManager.isTicking)return!1;const t=this.points.r,e=t.length;if(e<4)return!1;const i=this.diagram.getPositions(!1,this.containingGroup,null);for(let s=1;s<e-2;s++){const n=t[s],o=t[s+1];if(!i.isUnoccupied(Math.min(n.x,o.x),Math.min(n.y,o.y),Math.abs(n.x-o.x),Math.abs(n.y-o.y)))return!0}return!1}findClosestSegment(t){const e=t.x,i=t.y;let s=this.getPoint(0),n=this.getPoint(1),o=Point.distanceLineSegmentSquared(e,i,s.x,s.y,n.x,n.y),r=0;for(let l=1;l<this.pointsCount-1;l++){s=this.getPoint(l+1);const a=Point.distanceLineSegmentSquared(e,i,n.x,n.y,s.x,s.y);n=s,a<o&&(r=l,o=a)}return r}invalidateGeometry(){this.fi()}fi(){this.Xa&&(this.Xa=!1,this.f())}get Xa(){return(this.Mt&128)!==0}set Xa(t){(this.Mt&128)!==0!==t&&(this.Mt=this.Mt^128)}get geometry(){if(!this.Xa){if(this.updateRoute(),this.pointsCount<2)return this.Xa=!0,this.dt;this.dt=this.makeGeometry(),this.Xa=!0}return this.dt}pN(){if(this.$i===!1)return;const t=this.findMainElement();if(this.Xa&&(t===null||t.geometry!==null))return;this.pointsCount>=2&&(this.dt=this.makeGeometry()),this.Xa=!0;const e=this.path;if(e===null)return;e.dt=this.dt;const i=this.F.r,s=i.length;for(let n=0;n<s;n++){const o=i[n];o!==e&&o.isPanelMain&&o instanceof Shape&&(o.dt=this.dt)}}o3(t){return this.hc()&&t.ya.has(this)&&(this.oc.width!==0||this.oc.height!==0)&&(t.animationManager.isAnimating||t.currentTool!==t.toolManager)}makeGeometry(){const t=this.dt,e=this.pointsCount;let i=!1;const s=this.diagram;s!==null&&this.o3(s)&&(i=!0);let n=0,o=0,r=Point.ji(this.getPoint(0));const l=Point.ji(r),a=this.Ae.r,h=this.computeCurve();if(h===9&&e>=3&&!G.G(this.smoothness,0))if(e===3){let c=this.getPoint(1);n=Math.min(r.x,c.x),o=Math.min(r.y,c.y),c=this.getPoint(2),n=Math.min(n,c.x),o=Math.min(o,c.y)}else if(this.isOrthogonal){for(let c=0;c<e;c++){const f=a[c];l.x=Math.min(f.x,l.x),l.y=Math.min(f.y,l.y)}n=l.x,o=l.y}else{for(let c=3;c<e;c+=3){c+3>=e&&(c=e-1);const f=this.getPoint(c);l.x=Math.min(f.x,l.x),l.y=Math.min(f.y,l.y)}n=l.x,o=l.y}else{for(let c=0;c<e;c++){const f=a[c];l.x=Math.min(f.x,l.x),l.y=Math.min(f.y,l.y)}n=l.x,o=l.y}if(n-=this.Tk.x,o-=this.Tk.y,r.x-=n,r.y-=o,this.computeShortLength(!0)!==0&&(r=this.fc(r,!0,l)),e===2&&!this.hc()){let c=Point.ji(this.getPoint(1));return c.x-=n,c.y-=o,this.computeShortLength(!1)!==0&&(c=this.fc(c,!1,l)),t.type=1,t.startX=r.x,t.startY=r.y,t.endX=c.x,t.endY=c.y,Point.i(c),Point.i(r),Point.i(l),t}else{t.type=4;const c=GeoStream.kL(t);if(c.Bu(r.x,r.y,!1,!1),h===9&&e>=3&&!G.G(this.smoothness,0))if(e===3){const f=this.getPoint(1),u=f.x-n,d=f.y-o,m=Point.ji(this.getPoint(2));m.x-=n,m.y-=o,this.computeShortLength(!1)!==0&&this.fc(m,!1,l),c.Cr(u,d,u,d,m.x,m.y),Point.i(m)}else if(this.isOrthogonal){const f=Point.O(n,o),u=Point.ji(this.getPoint(1)),d=Point.O(n,o),m=Point.O(n,o);let g=this.getPoint(0),p;const y=this.smoothness/3;for(let P=1;P<this.pointsCount-1;P++){p=this.getPoint(P);const S=g,T=p,N=this.getPoint(this.lT(p,P,!1));G.G(S.x,T.x)&&G.G(T.x,N.x)||G.G(S.y,T.y)&&G.G(T.y,N.y)||(this.r3(S,T,N,y,d,m),(P===1||P===2&&G.G(g.x,this.getPoint(0).x)&&G.G(g.y,this.getPoint(0).y))&&(u.x=(g.x+p.x)*.5,u.y=(g.y+p.y)*.5),c.Cr(u.x-n,u.y-o,d.x-n,d.y-o,p.x-n,p.y-o),f.h(d),u.h(m),g=p)}let x=g.x,b=g.y;const k=Point.ji(this.getPoint(this.pointsCount-1));this.computeShortLength(!1)!==0&&this.fc(k,!1,Point.wn),x=.5*(x+k.x),b=.5*(b+k.y),c.Cr(m.x-n,m.y-o,x-n,b-o,k.x-n,k.y-o),Point.i(k),Point.i(f),Point.i(u),Point.i(d),Point.i(m)}else for(let f=3;f<e;f+=3){const u=this.getPoint(f-2);f+3>=e&&(f=e-1);const d=this.getPoint(f-1),m=Point.ji(this.getPoint(f));f===e-1&&this.computeShortLength(!1)!==0&&this.fc(m,!1,Point.wn),c.Cr(u.x-n,u.y-o,d.x-n,d.y-o,m.x-n,m.y-o),Point.i(m)}else if(this.isOrthogonal||e===2){const f=Point.ji(this.getPoint(0)),u=Point.l(),d=Point.ji(f),m=this.computeCorner();let g=1,p=0;for(;g<e;){if(g=this.lT(f,g,g>1),u.h(this.getPoint(g)),g>=e-1){if(!f.equals(u))this.computeShortLength(!1)!==0&&this.fc(u,!1,Point.wn),this.zn(c,-n,-o,f,u,i);else if(p===0)for(g=1;g<e;)d.h(f),u.h(this.getPoint(g++)),this.zn(c,-n,-o,f,u,i),f.h(u);break}p=this.lT(u,g+1,g<e-3);const y=this.getPoint(p);this.l3(c,-n,-o,f,u,y,f,d,m,i),d.h(u),g=p}Point.i(f),Point.i(u),Point.i(d)}else{const f=this.computeCorner();if(e>2&&f>=.5){const u=Point.ji(a[e-1]);this.computeShortLength(!1)!==0&&this.fc(u,!1,Point.wn),r.x+=n,r.y+=o;for(let d=1;d<e;d++){const m=d===1?r:a[d-1],g=d===e-1?u:a[d],p=Math.sqrt(m.distanceSquaredPoint(g)),y=f/p;if(y<.5){if(d>1){const x=m.x+(g.x-m.x)*y,b=m.y+(g.y-m.y)*y;c.Vu(m.x-n,m.y-o,x-n,b-o)}c.Js(g.x+(m.x-g.x)*y-n,g.y+(m.y-g.y)*y-o)}else d>1&&c.Vu(m.x-n,m.y-o,(m.x+g.x)/2-n,(m.y+g.y)/2-o);d===e-1&&c.Js(u.x-n,u.y-o)}Point.i(u)}else if(e>=2){const u=Point.ji(a[e-1]);this.computeShortLength(!1)!==0&&this.fc(u,!1,Point.wn);for(let d=1;d<e-1;d++)c.Js(a[d].x-n,a[d].y-o);c.Js(u.x-n,u.y-o),Point.i(u)}}return GeoStream.PL(c),Point.i(r),Point.i(l),t}}Rk(t,e,i,s){let n=i-t;if(isNaN(n)||n===1/0||n===-1/0)return NaN;n<0&&(n=-n);let o=s-e;return isNaN(o)||o===1/0||o===-1/0?NaN:(o<0&&(o=-o),G.G(n,0)?o:G.G(o,0)?n:Math.sqrt(n*n+o*o))}r3(t,e,i,s,n,o){isNaN(s)&&(s=this.smoothness/3);const r=t.x,l=t.y,a=e.x,h=e.y,c=i.x,f=i.y,u=s*this.Rk(r,l,a,h),d=s*this.Rk(a,h,c,f);if(G.G(l,h)&&G.G(a,c)&&(a>r?f>h?(n.x=a-u,n.y=h-u,o.x=a+d,o.y=h+d):(n.x=a-u,n.y=h+u,o.x=a+d,o.y=h-d):f>h?(n.x=a+u,n.y=h-u,o.x=a-d,o.y=h+d):(n.x=a+u,n.y=h+u,o.x=a-d,o.y=h-d)),G.G(r,a)&&G.G(h,f)&&(h>l?c>a?(n.x=a-u,n.y=h-u,o.x=a+d,o.y=h+d):(n.x=a+u,n.y=h-u,o.x=a-d,o.y=h+d):c>a?(n.x=a-u,n.y=h+u,o.x=a+d,o.y=h-d):(n.x=a+u,n.y=h+u,o.x=a-d,o.y=h-d)),G.G(r,a)&&G.G(a,c)||G.G(l,h)&&G.G(h,f)){const m=.5*(r+c),g=.5*(l+f);n.x=m,n.y=g,o.x=m,o.y=g}}fc(t,e,i){const s=this.pointsCount;if(s<2)return t;if(e){const n=this.getPoint(1),o=n.x-i.x,r=n.y-i.y,l=this.Rk(t.x,t.y,o,r);if(l===0)return t;const a=s===2?l*.5:l;let h=this.computeShortLength(!0);h>a&&(h=a);const c=h*(o-t.x)/l,f=h*(r-t.y)/l;t.x+=c,t.y+=f}else{const n=this.getPoint(s-2),o=n.x-i.x,r=n.y-i.y,l=this.Rk(t.x,t.y,o,r);if(l===0)return t;const a=s===2?l*.5:l;let h=this.computeShortLength(!1);h>a&&(h=a);const c=h*(t.x-o)/l,f=h*(t.y-r)/l;t.x-=c,t.y-=f}return t}lT(t,e,i){const s=this.pointsCount;let n=t;for(;G.G(t.x,n.x)&&G.G(t.y,n.y);){if(e>=s)return s-1;n=this.getPoint(e++)}if(!G.G(t.x,n.x)&&!G.G(t.y,n.y))return e-1;let o=n;for(;G.G(t.x,n.x)&&G.G(n.x,o.x)&&(!i||(t.y>=n.y?n.y>=o.y:n.y<=o.y))||G.G(t.y,n.y)&&G.G(n.y,o.y)&&(!i||(t.x>=n.x?n.x>=o.x:n.x<=o.x));){if(e>=s)return s-1;o=this.getPoint(e++)}return e-2}l3(t,e,i,s,n,o,r,l,a,h){if(G.c(s.y,n.y)&&G.c(n.x,o.x)){let c=Math.min(a,Math.abs(n.x-l.x)/2);const f=Math.min(c,Math.abs(o.y-n.y)/2);if(c=f,G.c(c,0)){this.zn(t,e,i,s,n,h),r.h(n);return}let u=n.x;const d=n.y,m=u;let g=d;n.x>s.x?(u=n.x-c,o.y>n.y?g=n.y+f:g=n.y-f):(u=n.x+c,o.y>n.y?g=n.y+f:g=n.y-f);const p=Point.O(u,d);this.zn(t,e,i,s,p,h),Point.i(p),t.Vu(n.x+e,n.y+i,m+e,g+i),r.e(m,g)}else if(G.c(s.x,n.x)&&G.c(n.y,o.y)){let c=Math.min(a,Math.abs(n.y-l.y)/2);const f=Math.min(c,Math.abs(o.x-n.x)/2);if(c=f,G.c(f,0)){this.zn(t,e,i,s,n,h),r.h(n);return}const u=n.x;let d=n.y,m=u;const g=d;n.y>s.y?(d=n.y-c,o.x>n.x?m=n.x+f:m=n.x-f):(d=n.y+c,o.x>n.x?m=n.x+f:m=n.x-f);const p=Point.O(u,d);this.zn(t,e,i,s,p,h),Point.i(p),t.Vu(n.x+e,n.y+i,m+e,g+i),r.e(m,g)}else this.zn(t,e,i,s,n,h),r.h(n)}zn(t,e,i,s,n,o){if(o||!this.hc())t.Js(n.x+e,n.y+i);else{const r=Link.RF,l=r/2,a=[];let h=0;this.isVisible()&&(h=this.a3(s,n,a));let c=s.x,f=s.y;if(h>0){if(G.c(s.y,n.y))if(s.x<n.x){let u=0;for(;u<h;){const d=Math.max(s.x,Math.min(a[u++]-l,n.x-r));t.Js(d+e,n.y+i),c=d+e,f=n.y+i;let m=Math.min(d+r,n.x);for(;u<h;){const x=a[u];if(x<m+r)u++,m=Math.min(x+l,n.x);else break}const g=n.y-r+i,p=m+e,y=n.y+i;this.curve===10?t.Bu(p,y,!1,!1):t.Cr(c,g,p,g,p,y),c=p,f=y}}else{let u=h-1;for(;u>=0;){const d=Math.min(s.x,Math.max(a[u--]+l,n.x+r));t.Js(d+e,n.y+i),c=d+e,f=n.y+i;let m=Math.max(d-r,n.x);for(;u>=0;){const x=a[u];if(x>m-r)u--,m=Math.max(x-l,n.x);else break}const g=n.y-r+i,p=m+e,y=n.y+i;this.curve===10?t.Bu(p,y,!1,!1):t.Cr(c,g,p,g,p,y),c=p,f=y}}else if(G.c(s.x,n.x))if(s.y<n.y){let u=0;for(;u<h;){const d=Math.max(s.y,Math.min(a[u++]-l,n.y-r));t.Js(n.x+e,d+i),c=n.x+e,f=d+i;let m=Math.min(d+r,n.y);for(;u<h;){const x=a[u];if(x<m+r)u++,m=Math.min(x+l,n.y);else break}const g=n.x-r+e,p=n.x+e,y=m+i;this.curve===10?t.Bu(p,y,!1,!1):t.Cr(g,f,g,y,p,y),c=p,f=y}}else{let u=h-1;for(;u>=0;){const d=Math.min(s.y,Math.max(a[u--]+l,n.y+r));t.Js(n.x+e,d+i),c=n.x+e,f=d+i;let m=Math.max(d-r,n.y);for(;u>=0;){const x=a[u];if(x>m-r)u--,m=Math.max(x-l,n.y);else break}const g=n.x-r+e,p=n.x+e,y=m+i;this.curve===10?t.Bu(p,y,!1,!1):t.Cr(g,f,g,y,p,y),c=p,f=y}}}t.Js(n.x+e,n.y+i)}}a3(t,e,i){const s=this.diagram;if(s===null||t.equals(e))return 0;const n=s.layers;for(;n.next();){const o=n.value;if(o!==null&&o.visible){const r=o.l2(),l=r.length;for(let a=0;a<l;a++){const h=r[a];if(!(h instanceof Link))continue;if(h===this)return i.length>0&&i.sort((u,d)=>u-d),i.length;if(!h.isVisible()||!h.hc())continue;const c=h.routeBounds;if(!c.isReal()||!this.routeBounds.intersectsRect(c)||this.usesSamePort(h))continue;const f=h.path;f!==null&&f.isVisibleObject()&&this.h3(t,e,i,h)}}}return i.length>0&&i.sort((o,r)=>o-r),i.length}h3(t,e,i,s){const n=G.c(t.y,e.y),o=s.pointsCount;let r=s.getPoint(0);const l=Point.l();for(let a=1;a<o;a++){const h=s.getPoint(a);if(a<o-1){const c=s.getPoint(a+1);if(r.y===h.y&&h.y===c.y){if(h.x>r.x&&c.x>=h.x||h.x<r.x&&c.x<=h.x)continue}else if(r.x===h.x&&h.x===c.x&&(h.y>r.y&&c.y>=h.y||h.y<r.y&&c.y<=h.y))continue}this.c3(t,e,r,h,l)&&(n?i.push(l.x):i.push(l.y)),r=h}Point.i(l)}c3(t,e,i,s,n){const o=t.x,r=t.y,l=e.x,a=e.y,h=i.x,c=i.y,f=s.x,u=s.y;if(G.c(o,l)){if(!G.c(r,a)&&G.c(c,u)&&Math.min(r,a)<c&&Math.max(r,a)>c&&Math.min(h,f)<o&&Math.max(h,f)>o&&!G.c(h,f))return n.x=o,n.y=c,!0}else if(G.c(r,a)&&G.c(h,f)&&Math.min(o,l)<h&&Math.max(o,l)>h&&Math.min(c,u)<r&&Math.max(c,u)>r&&!G.c(c,u))return n.x=h,n.y=r,!0;return n.x=0,n.y=0,!1}get firstPickIndex(){return this.pointsCount<=2?0:this.isOrthogonal||!this.Ll(this.computeSpot(!0))?1:0}get lastPickIndex(){const t=this.pointsCount;return t===0?0:t<=2?t-1:this.isOrthogonal||!this.Ll(this.computeSpot(!1))?t-2:t-1}hc(){const t=this.curve;return t===11||t===10}Dk(t){if(t||this.hc()){const e=this.diagram;e!==null&&!e.animationManager.isTicking&&!e.ya.has(this)&&(this.oc.width!==0||this.oc.height!==0)&&e.ya.set(this,this.oc.copy())}}invalidateOtherJumpOvers(t){const e=this.layer;if(e===null||!e.visible||e.isTemporary)return;const i=e.diagram;if(i===null||i.animationManager.isTicking)return;let s=!1;const n=i.layers;for(;n.next();){const o=n.value;if(o.visible){if(o===e){s=!0;let r=!1;const l=o.l2(),a=l.length;for(let h=0;h<a;h++){const c=l[h];c instanceof Link&&(c===this?r=!0:r&&this.KF(c,t))}}else if(s){const r=o.l2(),l=r.length;for(let a=0;a<l;a++){const h=r[a];h instanceof Link&&this.KF(h,t)}}}}}KF(t,e){if(t===null||!t.Xa||!t.$i||!t.hc())return;const i=t.routeBounds;i.isReal()&&(!this.routeBounds.intersectsRect(i)&&!e.intersectsRect(i)||this.usesSamePort(t)||t.fi())}usesSamePort(t){const e=this.pointsCount,i=t.pointsCount;if(e>0&&i>0){const s=this.getPoint(0),n=t.getPoint(0);if(s.equalsApprox(n))return!0;const o=this.getPoint(e-1),r=t.getPoint(i-1);if(o.equalsApprox(r)||s.equalsApprox(r)||o.equalsApprox(n))return!0}else if(this.fromNode===t.fromNode||this.toNode===t.toNode||this.fromNode===t.toNode||this.toNode===t.fromNode)return!0;return!1}isVisible(){if(!super.isVisible())return!1;const t=this.containingGroup;let e=!0;const i=this.diagram;i!==null&&(e=i.isTreePathToChildren);const s=this.fromNode;if(s!==null){if(this.isTreeLink&&e&&!s.isTreeExpanded)return!1;if(s===t)return!0;let o=s;for(;o!==null;){if(o.labeledLink===this)return!0;o=o.containingGroup}const r=s.findVisibleNode();if(r===null||r===t)return!1}const n=this.toNode;if(n!==null){if(this.isTreeLink&&!e&&!n.isTreeExpanded)return!1;if(n===t)return!0;let o=n;for(;o!==null;){if(o.labeledLink===this)return!0;o=o.containingGroup}const r=n.findVisibleNode();if(r===null||r===t)return!1}return!0}He(t){if(super.He(t),t&&this.Dk(!1),this.rr!==null&&this.rr.ag(),this.hn!==null){const i=this.hn.iterator;for(;i.next();)i.value.He(t)}}get adjusting(){return this._f}set adjusting(t){const e=this._f;e!==t&&(this._f=t,this.t("adjusting",e,t))}computeAdjusting(){return this.isAvoiding&&this.diagram!==null&&this.diagram.animationManager.defaultAnimation.isAnimating?17:this._f}get corner(){return this.fg}set corner(t){const e=this.fg;e!==t&&(this.fg=t,this.fi(),this.t("corner",e,t))}get curve(){return this.ug}set curve(t){const e=this.ug;e!==t&&(this.ug=t,(e===9||t===9)&&this.eT(),this.ee(),this.fi(),this.Dk(e===10||e===11||t===10||t===11),this.t("curve",e,t))}get curviness(){return this.dg}set curviness(t){const e=this.dg;e!==t&&(this.dg=t,this.ee(),this.fi(),this.t("curviness",e,t))}get routing(){return this.nc}set routing(t){const e=this.nc;e!==t&&(this.nc=t,this.isAvoiding&&this.diagram!==null&&(this.diagram.xp=!0),this.or=null,this.ee(),this.Dk(Link.$N(e)||Link.$N(t)),this.t("routing",e,t))}get smoothness(){return this.gg}set smoothness(t){const e=this.gg;e!==t&&(this.gg=t,this.fi(),this.t("smoothness",e,t))}hw(){const t=this.bo;if(t===null)return;const e=this.Po;if(e===null||!isNaN(this.curviness))return;const i=this.ko,s=this.So;let n=null,o=null;const r=t.oe.r,l=r.length;for(let a=0;a<l;a++){const h=r[a];!(h.bo===t&&h.ko===i&&h.Po===e&&h.So===s)&&!(h.bo===e&&h.ko===s&&h.Po===t&&h.So===i)||(o===null?o=h:(n===null&&(n=[],n.push(o)),n.push(h)))}if(n!==null){let a=t.xF(e,i,s);a===null&&(a=new LinkBundle(t,i,e,s),t.yF(a),e.yF(a)),a.cn=n;for(let h=0;h<n.length;h++){const c=n[h];c.rr=a}a.ag()}}aw(){const t=this.rr;if(t!==null){if(!isNaN(this.curviness))return;this.rr=null;const e=t.cn.indexOf(this);e>=0&&(t.cn.splice(e,1),t.ag())}}Ir(){return!0}get key(){const t=this.diagram;if(!(t===null||!t.model.sc()))return t.model.getKeyForLinkData(this.data)}}class LinkBundle{qo;Zs;Zy;GN;Mk;YN;cn;constructor(t,e,i,s){GSet._e(this),this.qo=!1,this.Zs=!1,this.Zy=t,this.GN=e,this.Mk=i,this.YN=s,this.cn=[]}ag(){if(!this.qo){const t=this.cn;if(t.length>0){const e=t[0].diagram;e!==null&&(e.F2.add(this),this.Zs=e.undoManager.isUndoingRedoing)}}this.qo=!0}H2(){if(this.qo){this.qo=!1;const t=this.cn;if(t.length>0){const e=t[0],i=e.diagram,s=i===null||i.ah&&!this.Zs;this.Zs=!1,e.arrangeBundledLinks(t,s),t.length===1&&(e.rr=null,t.length=0)}t.length===0&&(this.Zy.wF(this),this.Mk.wF(this))}}}class PositionArray{mi;pi;uc;dc;Se;Me;Xt;Ga;Ya;Uh;oC;qo;fw;kf;rC;lC;constructor(t){GSet._e(this),this.Uh=null,this.oC=null,this.qo=!0,this.fw=!1,this.mi=1,this.pi=1,this.uc=-1,this.dc=-1,this.Se=t.width,this.Me=t.height,this.Xt=[],this.Ga=0,this.Ya=0,this.kf=Link.zF,this.rC=this.kf*2,this.lC=this.kf*2}static fn=0;static gc=1;static pg=999999;static aT=PositionArray.pg+1;static hT=PositionArray.pg+2;C1(t){if(t.width<=0||t.height<=0)return;const e=t.x,i=t.y,s=t.x+t.width,n=t.y+t.height;this.mi=Math.floor((e-this.Se)/this.Se)*this.Se,this.pi=Math.floor((i-this.Me)/this.Me)*this.Me,this.uc=Math.ceil((s+2*this.Se)/this.Se)*this.Se,this.dc=Math.ceil((n+2*this.Me)/this.Me)*this.Me;const o=1+(Math.ceil((this.uc-this.mi)/this.Se)|0),r=1+(Math.ceil((this.dc-this.pi)/this.Me)|0);if(this.Xt.length===0||this.Ga<o-1||this.Ya<r-1){const l=[];for(let a=0;a<=o;a++)l[a]=new Uint32Array(r);this.Xt=l,this.Ga=o-1,this.Ya=r-1}this.f3(PositionArray.aT)}get bounds(){return new Rect(this.mi,this.pi,this.uc-this.mi,this.dc-this.pi)}get cellWidth(){return this.Se}set cellWidth(t){t>0&&t!==this.Se&&(this.Se=t,this.C1(this.bounds))}get cellHeight(){return this.Me}set cellHeight(t){t>0&&t!==this.Me&&(this.Me=t,this.C1(this.bounds))}yg(t,e){return this.mi<=t&&t<=this.uc&&this.pi<=e&&e<=this.dc}Mo(t,e){if(!this.yg(t,e))return PositionArray.aT;t-=this.mi,t/=this.Se,e-=this.pi,e/=this.Me;const i=t|0,s=e|0;return this.Xt[i][s]}eI(t,e,i,s){if(!this.yg(t,e))return;const n=(t-this.mi)/this.Se|0,o=(e-this.pi)/this.Me|0,r=(t+i-this.mi)/this.Se|0,l=(e+s-this.pi)/this.Me|0,a=Math.min(r,this.Ga),h=Math.min(l,this.Ya);for(let c=n;c<=a;c++){const f=this.Xt[c];if(f.fill)f.fill(PositionArray.fn,o,h+1);else for(let u=o;u<=h;u++)f[u]=PositionArray.fn}}f3(t){for(let e=0;e<=this.Ga;e++){const i=this.Xt[e];if(i.fill)i.fill(t);else for(let s=0;s<=this.Ya;s++)i[s]=t}}sD(){for(let t=0;t<=this.Ga;t++){const e=this.Xt[t];for(let i=0;i<=this.Ya;i++)e[i]>=PositionArray.gc&&(e[i]=PositionArray.aT)}}u3(t,e){return this.Mo(t,e)===PositionArray.fn}isUnoccupied(t,e,i,s){if(t>this.uc||t+i<this.mi||e>this.dc||e+s<this.pi)return!0;let n=(t-this.mi)/this.Se|0,o=(e-this.pi)/this.Me|0,r=Math.max(0,i)/this.Se+1|0,l=Math.max(0,s)/this.Me+1|0;if(n<0&&(r+=n,n=0),o<0&&(l+=o,o=0),r<0||l<0)return!0;const a=Math.min(n+r-1,this.Ga)|0,h=Math.min(o+l-1,this.Ya)|0;for(let c=n;c<=a;c++){const f=this.Xt[c];for(let u=o;u<=h;u++)if(f[u]===PositionArray.fn)return!1}return!0}maxAvoidsLinksSpaceH(t,e,i,s){if(t>this.uc||e<this.mi||i>this.dc||i<this.pi)return 0;const n=(t-this.mi)/this.Se|0,o=(e-this.mi)/this.Se|0,r=(i-this.pi)/this.Me|0,l=s/this.Me+1|0;let a;for(a=0;a<l/2;a++){let h=!1;for(let c=n;c<=o;c++)if(this.Xt[c][r+a]===PositionArray.fn||this.Xt[c][r-a]===PositionArray.fn){h=!0;break}if(h)return Math.max(0,(2*a-1)*this.Me)}return s}maxAvoidsLinksSpaceV(t,e,i,s){if(t>this.dc||e<this.pi||i>this.uc||i<this.mi)return 0;const n=(t-this.pi)/this.Me|0,o=(e-this.pi)/this.Me|0,r=(i-this.mi)/this.Se|0,l=s/this.Se+1|0;let a;for(a=0;a<l/2;a++){let h=!1;for(let c=n;c<=o;c++)if(this.Xt[r+a][c]===PositionArray.fn||this.Xt[r-a][c]===PositionArray.fn){h=!0;break}if(h)return Math.max(0,(2*a-1)*this.Se)}return s}d3(t,e,i,s,n,o,r,l){t=t|0,e=e|0;let a=this.Xt[t][e];if(a>=PositionArray.gc&&a<PositionArray.pg)for(s?e+=i:t+=i,a+=1;n<=t&&t<=o&&r<=e&&e<=l;){const h=this.Xt[t][e];if(a>=h)break;this.Xt[t][e]=a,a+=1,s?e+=i:t+=i}return s?e:t}Co(t,e,i,s,n,o,r,l){if(t<n||t>o||e<r||e>l)return;const a=this.d3(t,e,i,s,n,o,r,l);if(s)if(i>0)for(let h=e+i;h<a;h+=i)this.Co(t,h,1,!s,n,o,r,l),this.Co(t,h,-1,!s,n,o,r,l);else for(let h=e+i;h>a;h+=i)this.Co(t,h,1,!s,n,o,r,l),this.Co(t,h,-1,!s,n,o,r,l);else if(i>0)for(let h=t+i;h<a;h+=i)this.Co(h,e,1,!s,n,o,r,l),this.Co(h,e,-1,!s,n,o,r,l);else for(let h=t+i;h>a;h+=i)this.Co(h,e,1,!s,n,o,r,l),this.Co(h,e,-1,!s,n,o,r,l)}Ok(t,e,i,s,n,o,r,l,a,h){let c=t|0,f=e|0,u=PositionArray.fn,d=PositionArray.gc;for(this.Xt[c][f]=d;u===PositionArray.fn&&c>r&&c<l&&f>a&&f<h;)d+=1,this.Xt[c][f]=d,o?f+=n:c+=n,u=this.Xt[c][f];return o?f:c}Ik(t,e,i,s,n,o,r,l,a,h){let c=i|0,f=s|0,u=PositionArray.fn;const d=PositionArray.pg;for(this.Xt[c][f]=d;u===PositionArray.fn&&c>r&&c<l&&f>a&&f<h;)this.Xt[c][f]=d,o?f+=n:c+=n,u=this.Xt[c][f]}HF(t,e,i,s,n,o){this.fw=!1;let r=t.x,l=t.y;if(!this.yg(r,l))return;r-=this.mi,r/=this.Se,l-=this.pi,l/=this.Me;let a=i.x,h=i.y;if(!this.yg(a,h))return;if(a-=this.mi,a/=this.Se,h-=this.pi,h/=this.Me,Math.abs(r-a)<=1&&Math.abs(l-h)<=1){this.fw=!0;return}let c=n.x,f=n.y,u=n.x+n.width,d=n.y+n.height;c-=this.mi,c/=this.Se,f-=this.pi,f/=this.Me,u-=this.mi,u/=this.Se,d-=this.pi,d/=this.Me;const m=Math.max(0,Math.min(this.Ga,c|0)),g=Math.min(this.Ga,Math.max(0,u|0)),p=Math.max(0,Math.min(this.Ya,f|0)),y=Math.min(this.Ya,Math.max(0,d|0)),x=0,b=90,k=270,P=this.Xt,S=r|0,T=l|0,N=a|0,M=h|0,C=e===x||e===b?1:-1,L=e===b||e===k;P[S][T]===PositionArray.fn?(this.Ok(S,T,N,M,C,L,m,g,p,y),this.Ok(S,T,N,M,1,!L,m,g,p,y),this.Ok(S,T,N,M,-1,!L,m,g,p,y)):this.Ok(S,T,N,M,C,L,S,T,S,T),P[N][M]===PositionArray.fn?(this.Ik(S,T,N,M,s===x||s===b?1:-1,s===b||s===k,m,g,p,y),this.Ik(S,T,N,M,1,!(s===b||s===k),m,g,p,y),this.Ik(S,T,N,M,-1,!(s===b||s===k),m,g,p,y)):this.Ik(S,T,N,M,C,L,N,M,N,M);const A=U.ot();if(o&&this.qF(N,M,s,S,T,A)){(A[0]!==N||A[1]!==M)&&(A.unshift(M),A.unshift(N)),(A[A.length-2]!==S||A[A.length-1]!==T)&&(A.push(S),A.push(T));let D=PositionArray.gc,F=A[A.length-2],v=A[A.length-1];P[F][v]=D++;for(let R=A.length-4;R>=0;R-=2){F=A[R+2],v=A[R+3];const O=A[R],z=A[R+1];for(;O>F?F++:O<F?F--:z>v?v++:z<v&&v--,P[F][v]=D++,!(F===O&&v===z););}}else this.Co(S,T,1,!1,m,g,p,y),this.Co(S,T,-1,!1,m,g,p,y),this.Co(S,T,1,!0,m,g,p,y),this.Co(S,T,-1,!0,m,g,p,y);U._(A)}qF(t,e,i,s,n,o){const c=this.Xt;let f=t,u=e;for(;;){if(f===s&&u===n)return!0;let d=f,m=u;if(i===0)if(d<s)d++;else break;else if(i===90)if(m<n)m++;else break;else if(i===180)if(d>s)d--;else break;else if(m>n)m--;else break;const g=c[d][m];if(g===0||g===PositionArray.hT)break;f=d,u=m}for(;;){let d=i,m=f,g=u;i===0?g<n?(d=90,g++):g>n&&(d=270,g--):i===90?m<s?(d=0,m++):m>s&&(d=180,m--):i===180?g<n?(d=90,g++):g>n&&(d=270,g--):m<s?(d=0,m++):m>s&&(d=180,m--);const p=c[m][g];if(d!==i&&p!==0&&p!==PositionArray.hT){if(o.push(f),o.push(u),this.qF(f,u,d,s,n,o))return!0;o.pop(),o.pop()}if(c[f][u]=PositionArray.hT,i===0){if(f===t)return!1;f--}else if(i===90){if(u===e)return!1;u--}else if(i===180){if(f===t)return!1;f++}else{if(u===e)return!1;u++}}}}class Knot{Ei;Vs;Xi;wg;constructor(t,e){GSet._e(this),this.Ei=t,this.Vs=e,this.Xi=[],this.wg=!1}toString(){const t=this.Xi;let e=this.Ei.toString()+" "+t.length.toString()+":";for(let i=0;i<t.length;i++){const s=t[i];s!==null&&(e+=`
  `+s.toString())}return e}g3(t,e,i,s){const n=e.offsetY;switch(n){case 8:return 90;case 2:return 180;case 1:return 270;case 4:return 0}let o=i;switch(n){case 9:return o>180?270:90;case 6:return o>90&&o<=270?180:0}const r=Math.atan2(t.height,t.width)*180/Math.PI;switch(n){case 3:return o>r&&o<=180+r?180:270;case 5:return o>180-r&&o<=360-r?270:0;case 12:return o>r&&o<=180+r?90:0;case 10:return o>180-r&&o<=360-r?180:90;case 7:return o>90&&o<=180+r?180:o>180+r&&o<=360-r?270:0;case 13:return o>180&&o<=360-r?270:o>r&&o<=180?90:0;case 14:return o>r&&o<=180-r?90:o>180-r&&o<=270?180:0;case 11:return o>180-r&&o<=180+r?180:o>180+r?270:90}return s&&n!==15&&(o-=15,o<0&&(o+=360)),o>r&&o<180-r?90:o>=180-r&&o<=180+r?180:o>180+r&&o<360-r?270:0}ag(){this.Xi.length=0}XF(t){let e=this.Xi;e.length===0&&(this.m3(),e=this.Xi);for(let i=0;i<e.length;i++){const s=e[i];if(s!==null&&s.ns===t)return s}return null}m3(){if(!this.wg){const t=this.wg;this.wg=!0;let e,i=null;const s=this.Ei,n=s instanceof Group?s:null;if(n!==null&&!n.isSubGraphExpanded){if(!n.actualBounds.isReal())return this.wg=t,this.Xi;i=n,e=i.findExternalLinksConnected()}else s.isTreeExpanded?e=s.findLinksConnected(this.Vs.portId):e=s.findExternalTreeLinksConnected();this.Xi.length=0;let o=0;const r=this.Vs.getDocumentPoint(Spot.TopLeft,Point.l()),l=this.Vs.getDocumentPoint(Spot.BottomRight,Point.l()),a=Rect.O(r.x,r.y,0,0);a.unionPoint(l),Point.i(r),Point.i(l);const h=Point.O(a.x+a.width/2,a.y+a.height/2),c=this.Vs.getDocumentAngle(),f=e.iterator;for(;f.next();){const g=f.value;if(!g.isVisible())continue;const p=g.fromPort,y=g.toPort;if(p===y)continue;if(i!==null&&this.Vs===i.port){if(p?.part===i&&p!==this.Vs||y?.part===i&&y!==this.Vs)continue}else if(p!==this.Vs&&y!==this.Vs)continue;const x=p===this.Vs||i!==null&&g.fromNode!==null&&g.fromNode.isMemberOf(i),b=g.computeSpot(x,this.Vs);if(!b.isSide())continue;let k;if(x?k=y:k=p,k===null)continue;let P=k.part;if(P===null)continue;const S=P.findVisibleNode();S!==null&&S!==P&&(P=S,k=P.port);const T=g.computeOtherPoint(P,k);let N=h.directionPoint(T);c!==0&&(N=G.ze(N-c));const M=this.g3(a,b,N,g.isOrthogonal);let C=0;M===0?(C=4,N>180&&(N-=360)):M===90?(C=8,N>270&&(N-=360)):M===180?C=2:(C=1,N<90&&(N+=360));let L=this.Xi[o];L===void 0?(L=new LinkInfo(g,N,C),this.Xi[o]=L):(L.ns=g,L.Yt=N,L.gi=C),L.Ek.h(T),o++}Point.i(h),this.p3();const u=this.Xi.length;let d=-1,m=0;for(o=0;o<u;o++){const g=this.Xi[o];g!==void 0&&(g.gi!==d&&(d=g.gi,m=0),g.xg=m,m++)}for(d=-1,m=0,o=u-1;o>=0;o--){const g=this.Xi[o];g!==void 0&&(g.gi!==d&&(d=g.gi,m=g.xg+1),g.eu=m)}this.y3(this.Xi),this.w3(this.Xi),this.wg=t,Rect.i(a)}return this.Xi}x3(t,e){return t===e?0:t===null?-1:e===null?1:t.gi<e.gi?-1:t.gi>e.gi?1:t.Yt<e.Yt?-1:t.Yt>e.Yt?1:0}p3(){this.Xi.sort(Knot.prototype.x3)}y3(t){const e=this.Vs,i=this.Ei.portSpreading,s=Point.l(),n=Point.l(),o=Point.l(),r=Point.l();e.getDocumentPoint(Spot.TopLeft,s),e.getDocumentPoint(Spot.TopRight,n),e.getDocumentPoint(Spot.BottomRight,o),e.getDocumentPoint(Spot.BottomLeft,r);let l=0,a=0,h=0,c=0;if(i===2)for(let x=0;x<t.length;x++){const b=t[x];if(b===null)continue;const k=b.ns.computeThickness();switch(b.gi){case 8:h+=k;break;case 2:c+=k;break;case 1:l+=k;break;default:case 4:a+=k;break}}let f=0,u=0,d=1,m=n,g=o,p=0,y=0;for(let x=0;x<t.length;x++){const b=t[x];if(b===null)continue;if(f!==b.gi){switch(f=b.gi,f){case 8:m=o,g=r;break;case 2:m=r,g=s;break;case 1:m=s,g=n;break;default:case 4:m=n,g=o;break}switch(p=g.x-m.x,y=g.y-m.y,f){case 8:h>Math.abs(p)?(d=Math.abs(p)/h,h=Math.abs(p)):d=1;break;case 2:c>Math.abs(y)?(d=Math.abs(y)/c,c=Math.abs(y)):d=1;break;case 1:l>Math.abs(p)?(d=Math.abs(p)/l,l=Math.abs(p)):d=1;break;default:case 4:a>Math.abs(y)?(d=Math.abs(y)/a,a=Math.abs(y)):d=1;break}u=0}const k=b.cc;if(i===2){let P=b.ns.computeThickness();switch(P*=d,k.h(m),f){case 8:k.x=m.x+p/2+h/2-u-P/2;break;case 2:k.y=m.y+y/2+c/2-u-P/2;break;case 1:k.x=m.x+p/2-l/2+u+P/2;break;default:case 4:k.y=m.y+y/2-a/2+u+P/2;break}u+=P}else{let P=.5;i===1&&(P=(b.xg+1)/(b.eu+1)),k.x=m.x+p*P,k.y=m.y+y*P}}Point.i(s),Point.i(n),Point.i(o),Point.i(r)}w3(t){for(let e=0;e<t.length;e++){const i=t[e];i!==null&&(i.vk=this.b3(i,e))}}b3(t,e){const i=t.ns,s=i.fromPort===this.Vs;let n=0;switch(t.gi){case 1:n=270;break;case 2:n=180;break;case 4:n=0;break;case 8:n=90;break}const o=i.computeEndSegmentLength(this.Ei,this.Vs,Spot.None,s,n);let r=t.xg;if(r<0)return o;const l=t.eu;if(l<=1||!i.isOrthogonal)return o;const h=t.Ek,c=t.cc,f=t.gi===2||t.gi===8;f&&(r=l-1-r);const u=Link.AF,d=t.gi===2||t.gi===4,m=r<=0?c:this.Xi[f?e+1:e-1].cc,g=r>=l-1?c:this.Xi[f?e-1:e+1].cc;return(d?h.y>=m.y&&h.y<=g.y:h.x>=m.x&&h.x<=g.x)?o:(d?h.y<c.y:h.x<c.x)?o+r*u:o+(l-1-r)*u}}class LinkInfo{ns;Yt;gi;Ek;xg;eu;cc;vk;constructor(t,e,i){this.ns=t,this.Yt=e,this.gi=i,this.Ek=new Point,this.xg=0,this.eu=0,this.cc=new Point,this.vk=0}toString(){return this.ns.toString()+" "+this.Yt.toString()+" "+this.gi.toString()+":"+this.xg.toString()+"/"+this.eu.toString()+" "+this.cc.toString()+" "+this.vk.toString()+" "+this.Ek.toString()}}class LinkSettings{zh;Xh;Gh;Yh;Kh;Hh;x0;y0;b0;w0;constructor(){this.zh=Spot.Default,this.Xh=Spot.Default,this.Gh=NaN,this.Yh=NaN,this.Kh=NaN,this.Hh=NaN,this.x0=null,this.y0=null,this.b0=1/0,this.w0=1/0}copy(){const t=new LinkSettings;return t.zh=this.zh.C(),t.Xh=this.Xh.C(),t.Gh=this.Gh,t.Yh=this.Yh,t.Kh=this.Kh,t.Hh=this.Hh,t.x0=this.x0,t.y0=this.y0,t.b0=this.b0,t.w0=this.w0,t}}class LinkElementSettings{c0;f0;u0;h0;ey;iy;constructor(){this.c0=-1/0,this.f0=0,this.u0=Point.wn,this.h0=0,this.ey="None",this.iy="None"}copy(){const t=new LinkElementSettings;return t.c0=this.c0,t.f0=this.f0,t.u0=this.u0.C(),t.h0=this.h0,t.ey=this.ey,t.iy=this.iy,t}}class Group extends Node{bg;vt;Ih;Xp;ue;ci;constructor(t,e){let i;typeof t=="string"||t instanceof PanelLayout?i=t:t&&(e=t),super(i),this.U=this.U|4608,this.bg=new GSet,this.vt=null,this.ci=new Layout,this.ci.group=this,this.Ih=new GSet,this.Xp=null,this.ue=null,e&&Object.assign(this,e)}cloneProtected(t){super.cloneProtected(t),this.U=this.U&-32769;const e=t.findInVisualTree(i=>i instanceof Placeholder);e instanceof Placeholder?t.vt=e:t.vt=null,this.ci!==null?(t.ci=this.ci.copy(),t.ci.group=t):(t.ci!==null&&(t.ci.group=null),t.ci=null),this.ue!==null&&(t.ue=this.ue.copy())}Wo(t){super.Wo(t);const e=t.findSubGraphParts(),i=t.memberParts;for(;i.next();){const s=i.value;if(s.f(),s.invalidateLayout(8),s.clearAdornments(),s instanceof Node)s.invalidateConnectedLinks(e);else if(s instanceof Link){const n=s.labelNodes;for(;n.next();)n.value.invalidateConnectedLinks(e)}}}Cf(t,e,i,s,n,o,r){if(t===3&&e==="elements"){if(n instanceof Placeholder)this.vt===null?this.vt=n:this.vt!==n&&U.n("Cannot insert a second Placeholder into the visual tree of a Group.");else if(n instanceof Panel){const l=n.findInVisualTree(a=>a instanceof Placeholder);l instanceof Placeholder&&(this.vt===null?this.vt=l:this.vt!==l&&U.n("Cannot insert a second Placeholder into the visual tree of a Group."))}}else t===4&&e==="elements"&&this.vt!==null&&(s===this.vt?this.vt=null:s instanceof Panel&&this.vt.isContainedBy(s)&&(this.vt=null));super.Cf(t,e,i,s,n,o,r)}Id(t,e){if(super.Id(t,e),this.isClipping&&this.type!==Panel.Spot&&this.isSubGraphExpanded){let i=this.resizeObject;i instanceof Panel&&(i=i.findMainElement()),this.ue===null&&(this.ue=new Rect),i.getDocumentBounds(this.ue),i instanceof Shape&&this.ue.inflate(-i.strokeWidth,-i.strokeWidth)}}Da(t,e,i,s){this.hasPlaceholder()&&(this.nr=this.placeholder),super.Da(t,e,i,s)}ensureBounds(){this.isSubGraphExpanded&&this.memberParts.each(e=>{e.ensureBounds()}),super.ensureBounds()}al(){if(!super.al())return!1;const t=this.memberParts;for(;t.next();){const e=t.value;if(e instanceof Node){if(!e.isVisible())continue;if(e.fs())return!1}else if(e instanceof Link){if(!e.isVisible())continue;if(e.fs()&&e.fromNode!==this&&e.toNode!==this)return!1}}return!0}hasPlaceholder(){return this.vt!==null&&this.vt.isVisibleObject()&&this.isSubGraphExpanded}get placeholder(){return this.vt}get computesBoundsAfterDrag(){return(this.U&2048)!==0}set computesBoundsAfterDrag(t){const e=(this.U&2048)!==0;e!==t&&(this.U=this.U^2048,this.t("computesBoundsAfterDrag",e,t))}get computesBoundsIncludingLinks(){return(this.U&4096)!==0}set computesBoundsIncludingLinks(t){const e=(this.U&4096)!==0;e!==t&&(this.U=this.U^4096,this.t("computesBoundsIncludingLinks",e,t))}get computesBoundsIncludingLocation(){return(this.U&8192)!==0}set computesBoundsIncludingLocation(t){const e=(this.U&8192)!==0;e!==t&&(this.U=this.U^8192,this.t("computesBoundsIncludingLocation",e,t))}get handlesDragDropForMembers(){return(this.U&16384)!==0}set handlesDragDropForMembers(t){const e=(this.U&16384)!==0;e!==t&&(this.U=this.U^16384,this.t("handlesDragDropForMembers",e,t))}get avoidableMembers(){return(this.U&131072)!==0}set avoidableMembers(t){const e=(this.U&131072)!==0;e!==t&&(this.U=this.U^131072,this.t("avoidableMembers",e,t))}get memberParts(){return this.bg.iterator}BN(t){if(this.bg.add(t)){t instanceof Group&&this.Ih.add(t);const i=this.memberAdded;if(i!==null){let s=!0;const n=this.diagram;n!==null&&(s=n.Y,n.Y=!0),i(this,t),n!==null&&(n.Y=s)}(!this.isVisible()||!this.isSubGraphExpanded)&&t.He(!1)}if(t instanceof Link&&!this.computesBoundsIncludingLinks)return;let e=this.vt;e===null&&(e=this),e.f()}UN(t){if(this.bg.delete(t)){t instanceof Group&&this.Ih.delete(t);const i=this.memberRemoved;if(i!==null){let s=!0;const n=this.diagram;n!==null&&(s=n.Y,n.Y=!0),i(this,t),n!==null&&(n.Y=s)}(!this.isVisible()||!this.isSubGraphExpanded)&&t.He(!0)}if(t instanceof Link&&!this.computesBoundsIncludingLinks)return;let e=this.vt;e===null&&(e=this),e.f()}xf(){if(this.bg.count>0){const t=this.diagram;if(t!==null){const i=this.bg.copy().iterator;for(;i.next();){const s=i.value;t.remove(s)}}}super.xf()}get layout(){return this.ci}set layout(t){const e=this.ci;if(e!==t){t!==null&&t.diagram!==null&&t.diagram.layout===t&&U.n("A layout cannot be both the Diagram.layout and a Group.layout: "+t),e!==null&&(e.diagram=null,e.group=null),this.ci=t;const i=this.diagram;t!==null&&(t.diagram=i,t.group=this),i!==null&&(i.ol=!0),this.t("layout",e,t),i!==null&&i.requestUpdate()}}get memberAdded(){return this.Rt!==null?this.Rt.nw:null}set memberAdded(t){const e=this.memberAdded;e!==t&&(t!==null&&U.S(t,Group,"memberAdded"),this.Nl().nw=t,this.t("memberAdded",e,t))}get memberRemoved(){return this.Rt!==null?this.Rt.ow:null}set memberRemoved(t){const e=this.memberRemoved;e!==t&&(t!==null&&U.S(t,Group,"memberRemoved"),this.Nl().ow=t,this.t("memberRemoved",e,t))}get memberValidation(){return this.Rt!==null?this.Rt.Pa:null}set memberValidation(t){const e=this.memberValidation;e!==t&&(t!==null&&U.S(t,Group,"memberValidation"),this.Nl().Pa=t,this.t("memberValidation",e,t))}canAddMembers(t){const e=this.diagram;if(e===null)return!1;const i=e.commandHandler,n=i.GC(t).iterator;for(;n.next();){const o=n.value;if(!i.isValidMember(this,o))return!1}return!0}addMembers(t,e){const i=this.diagram;if(i===null)return!1;const s=i.commandHandler,n=s.GC(t);let o=!0;const r=n.iterator;for(;r.next();){const l=r.value;!e||s.isValidMember(this,l)?l.containingGroup=this:o=!1}return o}get ungroupable(){return(this.U&256)!==0}set ungroupable(t){const e=(this.U&256)!==0;e!==t&&(this.U=this.U^256,this.t("ungroupable",e,t))}canUngroup(){if(!this.ungroupable)return!1;const t=this.layer;if(t===null||!t.allowUngroup)return!1;const e=t.diagram;return!(e!==null&&!e.allowUngroup)}invalidateConnectedLinks(t){const e=this.k3();if(super.invalidateConnectedLinks(t),e)return;this.UA(!0);const i=this.findExternalLinksConnected();for(;i.next();){const s=i.value;if(t!==void 0&&t.has(s))continue;const n=s.fromNode;if(n!==null&&n!==this&&n.isMemberOf(this)&&!n.isVisible())n.ti(s.fromPort),n.ti(s.toPort),s.ee();else{const o=s.toNode;o!==null&&o!==this&&o.isMemberOf(this)&&!o.isVisible()&&(o.ti(s.fromPort),o.ti(s.toPort),s.ee())}}}findExternalLinksConnected(){const t=this.diagram!==null&&this.diagram.E2;if(t&&this.Xp!==null)return this.Xp.iterator;const e=this.findSubGraphParts();e.add(this);const i=new GSet,s=e.iterator;for(;s.next();){const n=s.value;if(!(n instanceof Node))continue;const o=n.linksConnected;for(;o.next();){const r=o.value;e.has(r)||i.add(r)}}return t&&(this.Xp=i),i.iterator}findExternalNodesConnected(){const t=this.findSubGraphParts();t.add(this);const e=new GSet,i=t.iterator;for(;i.next();){const s=i.value;if(!(s instanceof Node))continue;const n=s.linksConnected;for(;n.next();){const o=n.value,r=o.fromNode;r!==null&&(!t.has(r)||r===this)&&e.add(r);const l=o.toNode;l!==null&&(!t.has(l)||l===this)&&e.add(l)}}return e.iterator}gB(){function t(i,s){i!==null&&(s.add(i),t(i.containingGroup,s))}const e=new GSet;return t(this,e),e}findSubGraphParts(){const t=new GSet;return Part.Sa(t,this,!0,0,!0),t.delete(this),t}He(t){super.He(t);const e=this.memberParts;for(;e.next();)e.value.He(t)}collapseSubGraph(){const t=this.diagram;if(t===null||t.isCollapsingExpanding)return;t.isCollapsingExpanding=!0;const e=this.findSubGraphParts();this.jF(e,t,this),t.isCollapsingExpanding=!1}jF(t,e,i){const s=this.memberParts;for(;s.next();){const n=s.value;if(n.He(!1),n instanceof Group&&n.isSubGraphExpanded&&(n.wasSubGraphExpanded=n.isSubGraphExpanded,n.jF(t,e,i)),n instanceof Node)n.invalidateConnectedLinks(t),e.nf(n,i);else if(n instanceof Link){const o=n.labelNodes;for(;o.next();)o.value.invalidateConnectedLinks(t)}}this.isSubGraphExpanded=!1}expandSubGraph(){const t=this.diagram;if(t===null||t.isCollapsingExpanding)return;t.isCollapsingExpanding=!0;const e=this.findSubGraphParts();this.WF(e,t,this),t.isCollapsingExpanding=!1}WF(t,e,i){const s=this.memberParts;for(;s.next();){const n=s.value;if(n.He(!0),n instanceof Group&&n.wasSubGraphExpanded&&(n.wasSubGraphExpanded=!1,n.WF(t,e,i)),n instanceof Node)n.invalidateConnectedLinks(t);else if(n instanceof Link){const o=n.labelNodes;for(;o.next();)o.value.invalidateConnectedLinks(t)}}this.isSubGraphExpanded=!0}get isSubGraphExpanded(){return(this.U&512)!==0}set isSubGraphExpanded(t){const e=(this.U&512)!==0;if(e!==t){this.U=this.U^512;const i=this.diagram;this.t("isSubGraphExpanded",e,t);const s=this.subGraphExpandedChanged;if(s!==null){let n=!0;i!==null&&(n=i.Y,i.Y=!0),s(this),i!==null&&(i.Y=n)}if(i!==null&&i.undoManager.isUndoingRedoing){this.vt!==null&&this.vt.f(),this.memberParts.each(n=>n.updateAdornments());return}t?this.expandSubGraph():this.collapseSubGraph()}}get wasSubGraphExpanded(){return(this.U&1024)!==0}set wasSubGraphExpanded(t){const e=(this.U&1024)!==0;e!==t&&(this.U=this.U^1024,this.t("wasSubGraphExpanded",e,t))}get subGraphExpandedChanged(){return this.Rt!==null?this.Rt.lw:null}set subGraphExpandedChanged(t){const e=this.subGraphExpandedChanged;e!==t&&(t!==null&&U.S(t,Group,"subGraphExpandedChanged"),this.Nl().lw=t,this.t("subGraphExpandedChanged",e,t))}move(t,e){e===void 0&&(e=!1);const i=e?this.location:this.position,s=i.x,n=i.y,o=t.x,r=t.y;if((s===o||isNaN(s)&&isNaN(o))&&(n===r||isNaN(n)&&isNaN(r)))return;const l=o-(isNaN(s)?0:s),a=r-(isNaN(n)?0:n),h=Point.l();super.move(t,e);const c=new GSet,u=this.findSubGraphParts().iterator;for(;u.next();){const d=u.value;d instanceof Link&&(d.suspendsRouting&&c.add(d),!(!d.$i&&(d.fromNode===this||d.toNode===this))&&(d.suspendsRouting=!0))}for(u.reset();u.next();){const d=u.value;if(d.Ir()||d instanceof Node&&d.isLinkLabel)continue;const m=d.position,g=d.location;m.isReal()?(h.x=m.x+l,h.y=m.y+a,d.position=h):g.isReal()&&(h.x=g.x+l,h.y=g.y+a,d.location=h)}for(u.reset();u.next();){const d=u.value;if(!(d instanceof Link)||(d.suspendsRouting=c.has(d),!d.$i&&(d.fromNode===this||d.toNode===this)))continue;const m=d.position;h.x=m.x+l,h.y=m.y+a,h.isReal()?d.move(h):d.ee()}Point.i(h)}k3(){return(this.U&65536)!==0}UA(t){(this.U&65536)!==0!==t&&(this.U=this.U^65536)}get Eh(){return(this.U&32768)!==0}set Eh(t){(this.U&32768)!==0!==t&&(this.U=this.U^32768)}}class Placeholder extends GraphObject{se;kg;constructor(t){super(),this.se=Margin.mm,this.kg=new Rect(NaN,NaN,NaN,NaN),t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.se=this.se.C(),t.kg=this.kg.copy()}Aa(t){if(this.background===null)return!1;const e=this.naturalBounds;return Rect.contains(0,0,e.width,e.height,t.x,t.y)}Od(t,e,i,s){const n=this.part;if((n===null||!(n instanceof Group)&&!(n instanceof Adornment))&&U.n("Placeholder is not inside a Group or Adornment."),n instanceof Group){const o=this.computeBorder(this.kg),r=this.minSize,l=isFinite(r.width)?Math.max(r.width,o.width):o.width,a=isFinite(r.height)?Math.max(r.height,o.height):o.height,h=this.Je;h.$n(l||0,a||0),this.fo(0,0,h.width,h.height);const c=n.memberParts;let f=!1;for(;c.next();)if(c.value.isVisible()){f=!0;break}const u=n.diagram;if(f&&u!==null&&!u.animationManager.jM(n)&&!isNaN(o.x)&&!isNaN(o.y)){const d=Point.l();d.setRectSpot(o,n.locationSpot),n.location=d,Point.i(d)}}else{const o=n,r=this.Je,l=this.se,a=l.left+l.right,h=l.top+l.bottom,c=o.adornedObject,f=c.getDocumentAngle();o.angle=f;let u=0;c instanceof Shape&&(u=c.strokeWidth);const d=c.getDocumentScale(),m=c.naturalBounds,g=(m.width+u)*d,p=(m.height+u)*d;if(o.type!==Panel.Link){const y=o.category==="Selection"?Spot.TopLeft:o.locationSpot,x=c.getDocumentPoint(y,Point.l());o.location=x,Point.i(x)}if(!isNaN(g)&&!isNaN(p))r.$n(g+a||0,p+h||0),this.fo(-l.left,-l.top,r.width,r.height);else{const y=c.getDocumentPoint(Spot.TopLeft,Point.l()),x=Rect.O(y.x,y.y,0,0);x.unionPoint(c.getDocumentPoint(Spot.BottomRight,y)),x.unionPoint(c.getDocumentPoint(Spot.TopRight,y)),x.unionPoint(c.getDocumentPoint(Spot.BottomLeft,y)),r.$n(x.width+a||0,x.height+h||0),this.fo(-l.left,-l.top,r.width,r.height),Point.i(y),Rect.i(x)}}}Da(t,e,i,s){this.actualBounds.e(t,e,i,s)}computeBorder(t){const e=this.part,i=e.diagram;if(i===null||i.animationManager.isAnimating)return t;if(e instanceof Group&&!e.layer.isTemporary&&e.computesBoundsAfterDrag&&this.kg.isReal()){const r=i.toolManager.findTool("Dragging");if(r===i.currentTool&&r.jR(e,this.kg,t))return t}const s=Rect.l(),n=this.computeMemberBounds(s),o=this.se;return e instanceof Group&&!e.isSubGraphExpanded?t.e(n.x-o.left,n.y-o.top,0,0):t.e(n.x-o.left,n.y-o.top,Math.max(n.width+o.left+o.right,0),Math.max(n.height+o.top+o.bottom,0)),Rect.i(s),e instanceof Group&&e.computesBoundsIncludingLocation&&e.location.isReal()&&t.unionPoint(e.location),t}computeMemberBounds(t){if(!(this.part instanceof Group))return t.e(0,0,0,0),t;const e=this.part;let i=1/0,s=1/0,n=-1/0,o=-1/0;const r=e.memberParts;for(;r.next();){const l=r.value;if(!l.isVisible()||l instanceof Link&&(!e.computesBoundsIncludingLinks||l.Ko()||l.fromNode===e||l.toNode===e))continue;const a=l.actualBounds;a.left<i&&(i=a.left),a.top<s&&(s=a.top),a.right>n&&(n=a.right),a.bottom>o&&(o=a.bottom)}if(!isFinite(i)||!isFinite(s)){const l=e.location;t.e(l.x,l.y,0,0)}else t.e(i,s,n-i,o-s);return t}get padding(){return this.se}set padding(t){typeof t=="number"&&(t=new Margin(t));const e=this.se;e.equals(t)||(t=t.C(),this.se=t,this.t("padding",e,t),this.f())}}class Layout{a;Uh;Pg;Er;Sg;Mg;zo;Al;Cg;Ng;No;constructor(t){GSet._e(this),this.a=null,this.Uh=null,this.Pg=!0,this.Er=!0,this.Sg=!1,this.Mg=new Point(0,0),this.zo=!0,this.Al=null,this.Cg=null,this.Ng=!1,this.No=null,t&&Object.assign(this,t)}cloneProtected(t){t.Pg=this.Pg,t.Er=this.Er,t.Sg=this.Sg,t.Mg.h(this.Mg),t.zo=this.zo,t.Al=this.Al,t.Cg=this.Cg,t.Ng=!0}copy(){const t=new this.constructor;return this.cloneProtected(t),t}ge(t){U.wr(this,t)}toString(){let t=U.Jn(this.constructor);return t+="(",this.group!==null&&(t+=" in "+this.group),this.diagram!==null&&(t+=" for "+this.diagram),t+=")",t}get diagram(){return this.a}set diagram(t){this.a=t}get group(){return this.Uh}set group(t){this.Uh!==t&&(this.Uh=t,t!==null&&(this.a=t.diagram))}get isOngoing(){return this.Pg}set isOngoing(t){this.Pg!==t&&(U.s(t,"boolean",Layout,"isOngoing"),this.Pg=t)}get isInitial(){return this.Er}set isInitial(t){U.s(t,"boolean",Layout,"isInitial"),this.Er=t,t||(this.Ng=!0)}get isViewportSized(){return this.Sg}set isViewportSized(t){this.Sg!==t&&(U.s(t,"boolean",Layout,"isViewportSized"),this.Sg=t,t&&this.g())}get isRouting(){return this.zo}set isRouting(t){this.zo!==t&&(U.s(t,"boolean",Layout,"isRouting"),this.zo=t)}get isRealtime(){return this.Al}set isRealtime(t){this.Al!==t&&(t!==null&&U.s(t,"boolean",Layout,"isRealtime"),this.Al=t)}get isValidLayout(){return this.Ng}set isValidLayout(t){if(this.Ng!==t&&(U.s(t,"boolean",Layout,"isValidLayout"),this.Ng=t,!t)){const e=this.diagram;e!==null&&(e.ol=!0)}}invalidateLayout(){if(!this.isValidLayout)return;const t=this.diagram;if(t===null||t.undoManager.isUndoingRedoing)return;const e=t.animationManager;e.isTicking||(e.defaultAnimation.isAnimating&&e.stopAnimation(),(this.isOngoing&&t.ah||this.isInitial&&!t.ah)&&(this.isValidLayout=!1,t.requestUpdate()))}g(){this.invalidateLayout()}get network(){return this.No}set network(t){this.No!==t&&(this.No=t,t!==null&&(t.layout=this))}createNetwork(){return new LayoutNetwork(this)}makeNetwork(t){const e=this.createNetwork();return t instanceof Diagram?(e.addParts(t.nodes,!0),e.addParts(t.links,!0)):t instanceof Group?e.addParts(t.memberParts):e.addParts(t.iterator),e}updateParts(){this.isValidLayout=!0;let t=this.diagram;if(t===null&&this.network!==null){const e=this.network.vertexes.iterator;for(;e.next();){const s=e.value.node;if(s!==null&&(t=s.diagram,t!==null))break}}try{t!==null&&t.startTransaction("Layout"),this.commitLayout()}finally{t!==null&&t.commitTransaction("Layout")}}commitLayout(){if(this.network===null)return;const t=this.network.vertexes.iterator;for(;t.next();)t.value.commit();if(this.isRouting){const e=this.network.edges.iterator;for(;e.next();)e.value.commit()}}doLayout(t){const e=new GSet;if(t instanceof Diagram?(this.Ka(e,t.nodes,!0,this.Eh,!0,!1,!0),this.Ka(e,t.parts,!0,this.Eh,!0,!1,!0)):t instanceof Group?this.Ka(e,t.memberParts,!1,this.Eh,!0,!1,!0):e.addAll(t.iterator),e.count>0){const s=this.diagram;s!==null&&s.startTransaction("Layout"),this.doMinimalNoNetworkLayout(e),s!==null&&s.commitTransaction("Layout")}this.isValidLayout=!0}doMinimalNoNetworkLayout(t){const e=t.count,i=Math.ceil(Math.sqrt(e));this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin);const s=this.arrangementOrigin.x,n=this.arrangementOrigin.y;let o=s,r=n,l=0,a=0;const h=t.iterator;for(;h.next();){const c=h.value;c.ensureBounds();const f=c.measuredBounds,u=f.width,d=f.height;c.moveTo(o,r),c instanceof Group&&(c.Eh=!1),o+=Math.max(u,50)+20,a=Math.max(a,Math.max(d,50)),l>=i-1?(l=0,o=s,r+=a+20,a=0):l++}}Eh(t){return!!(!t.location.isReal()&&!t.position.isReal()||t instanceof Group&&t.Eh)}Ka(t,e,i,s,n,o,r){const l=e.iterator;for(;l.next();){const a=l.value;if(!(i&&!a.isTopLevel)&&!(s!==null&&!s(a))&&a.canLayout())if(n&&a instanceof Node){if(a.isLinkLabel)continue;a instanceof Group&&a.layout===null?this.Ka(t,a.memberParts,!1,s,n,o,r):(a.ensureBounds(),t.add(a))}else o&&a instanceof Link?t.add(a):r&&a.Oi()&&!(a instanceof Node)&&(a.ensureBounds(),t.add(a))}}getLayoutBounds(t,e){const i=this.boundsComputation;return i!==null?(e||(e=new Rect),i(t,this,e)):!e&&t.margin.equalTo(0,0,0,0)?t.actualBounds:(e||(e=new Rect),e.set(t.actualBounds),e.addMargin(t.margin),e)}get boundsComputation(){return this.Cg}set boundsComputation(t){this.Cg!==t&&(t!==null&&U.S(t,Layout,"boundsComputation"),this.Cg=t,this.g())}collectParts(t){const e=new GSet;return t instanceof Diagram?(this.Ka(e,t.nodes,!0,null,!0,!0,!0),this.Ka(e,t.links,!0,null,!0,!0,!0),this.Ka(e,t.parts,!0,null,!0,!0,!0)):t instanceof Group?this.Ka(e,t.memberParts,!1,null,!0,!0,!0):this.Ka(e,t.iterator,!1,null,!0,!0,!0),e}get arrangementOrigin(){return this.Mg}set arrangementOrigin(t){this.Mg.equals(t)||(this.Mg.h(t),this.g())}initialOrigin(t){const e=this.group;if(e!==null)if(e.hasPlaceholder()){const i=e.placeholder,s=i.getDocumentPoint(Spot.TopLeft);(isNaN(s.x)||isNaN(s.y))&&s.set(t);const n=i.padding;return s.x+=n.left,s.y+=n.top,s}else{const i=e.position.copy();return(isNaN(i.x)||isNaN(i.y))&&i.set(t),i}return t}}class LayoutNetwork{ci;To;Xn;uw;dw;constructor(t){GSet._e(this),this.ci=t,this.To=new GSet,this.Xn=new GSet,this.uw=new GMap,this.dw=new GMap}clear(){if(this.To){const t=this.To.iterator;for(;t.next();)t.value.clear()}if(this.Xn){const t=this.Xn.iterator;for(;t.next();)t.value.clear()}this.To=new GSet,this.Xn=new GSet,this.uw=new GMap,this.dw=new GMap}toString(t){t===void 0&&(t=0);let e="LayoutNetwork"+(this.layout!==null?"("+this.layout.toString()+")":"");if(t<=0)return e;if(e+=" vertexes: "+this.To.count+" edges: "+this.Xn.count,t>1){const i=this.To.iterator;for(;i.next();){const n=i.value;e+=`
    `+n.toString(t-1)}const s=this.Xn.iterator;for(;s.next();){const n=s.value;e+=`
    `+n.toString(t-1)}}return e}get layout(){return this.ci}set layout(t){t!==null&&(this.ci=t)}get vertexes(){return this.To}get edges(){return this.Xn}createVertex(){return new LayoutVertex(this)}createEdge(){return new LayoutEdge(this)}addParts(t,e,i){if(t===null)return;e===void 0&&(e=!1),U.s(e,"boolean",LayoutNetwork,"addParts:toplevelonly"),i===void 0&&(i=null),i===null&&(i=n=>{if(n instanceof Node)return!n.isLinkLabel;if(n instanceof Link){const o=n.fromNode;if(o===null||o.isLinkLabel)return!1;const r=n.toNode;return!(r===null||r.isLinkLabel)}return!1});const s=t.iterator;for(;s.next();){const n=s.value;if(n instanceof Node&&!(e&&!n.isTopLevel)&&n.canLayout()&&i(n))if(n instanceof Group&&n.layout===null)this.addParts(n.memberParts,!1);else{if(this.findVertex(n)!==null)continue;const o=this.createVertex();o.node=n,this.addVertex(o)}}for(s.reset();s.next();){const n=s.value;if(!(n instanceof Link)||e&&!n.isTopLevel||!n.canLayout()||!i(n)||this.findEdge(n)!==null)continue;const o=n.fromNode,r=n.toNode;if(o===null||r===null||o===r)continue;const l=this.findGroupVertex(o),a=this.findGroupVertex(r);this.linkVertexes(l,a,n)}}findGroupVertex(t){const e=t.findVisibleNode();if(e===null)return null;let i=this.findVertex(e);if(i!==null)return i;let s=e.containingGroup;for(;s!==null;){if(i=this.findVertex(s),i!==null)return i;s=s.containingGroup}return null}addVertex(t){this.To.add(t);const e=t.node;e!==null&&this.uw.set(e,t),t.network=this}addNode(t){let e=this.findVertex(t);return e===null&&(e=this.createVertex(),e.node=t,this.addVertex(e)),e}deleteVertex(t){if(this.JF(t)){let e=t.lr;for(let i=e.count-1;i>=0;i--){const s=e.elt(i);this.deleteEdge(s)}e=t.ar;for(let i=e.count-1;i>=0;i--){const s=e.elt(i);this.deleteEdge(s)}}}JF(t){const e=this.To.delete(t);if(e){const i=t.node;i!==null&&this.uw.delete(i)}return e}deleteNode(t){const e=this.findVertex(t);e!==null&&this.deleteVertex(e)}findVertex(t){return this.uw.get(t)}addEdge(t){this.cT(t);const e=t.toVertex;e!==null&&e.addSourceEdge(t);const i=t.fromVertex;i!==null&&i.addDestinationEdge(t)}cT(t){this.Xn.add(t);const e=t.link;e!==null&&this.findEdge(e)===null&&this.dw.set(e,t),t.network=this}addLink(t){const e=t.fromNode,i=t.toNode;let s=this.findEdge(t);return s===null?(s=this.createEdge(),s.link=t,e!==null&&(s.fromVertex=this.addNode(e)),i!==null&&(s.toVertex=this.addNode(i)),this.addEdge(s)):(e!==null?s.fromVertex=this.addNode(e):s.fromVertex=null,i!==null?s.toVertex=this.addNode(i):s.toVertex=null),s}deleteEdge(t){const e=t.toVertex;e!==null&&e.deleteSourceEdge(t);const i=t.fromVertex;i!==null&&i.deleteDestinationEdge(t),this.fT(t)}fT(t){const e=this.Xn.delete(t);if(e){const i=t.link;i!==null&&this.dw.delete(i)}return e}deleteLink(t){const e=this.findEdge(t);e!==null&&this.deleteEdge(e)}findEdge(t){return this.dw.get(t)}linkVertexes(t,e,i){if(t===null||e===null)return null;if(t.network===this&&e.network===this){const s=this.createEdge();return s.link=i,s.fromVertex=t,s.toVertex=e,this.addEdge(s),s}return null}reverseEdge(t){const e=t.fromVertex,i=t.toVertex;e===null||i===null||(e.deleteDestinationEdge(t),i.deleteSourceEdge(t),t.reverseEdge(),e.addSourceEdge(t),i.addDestinationEdge(t))}deleteSelfEdges(){const t=U.ot(),e=this.Xn.iterator;for(;e.next();){const s=e.value;s.fromVertex===s.toVertex&&t.push(s)}const i=t.length;for(let s=0;s<i;s++)this.deleteEdge(t[s]);U._(t)}deleteArtificialVertexes(){const t=U.ot(),e=this.To.iterator;for(;e.next();){const o=e.value;o.node===null&&o.data===null&&t.push(o)}let i=t.length;for(let o=0;o<i;o++)this.deleteVertex(t[o]);const s=U.ot(),n=this.Xn.iterator;for(;n.next();){const o=n.value;o.link===null&&o.data===null&&s.push(o)}i=s.length;for(let o=0;o<i;o++)this.deleteEdge(s[o]);U._(t),U._(s)}deleteUselessEdges(){const t=U.ot(),e=this.Xn.iterator;for(;e.next();){const s=e.value;(s.fromVertex===null||s.toVertex===null)&&t.push(s)}const i=t.length;for(let s=0;s<i;s++)this.deleteEdge(t[s]);U._(t)}isSingleton(t){return!(t.lr.count>0||t.ar.count>0)}splitIntoSubNetworks(t){t===void 0&&(t=!0),t&&(this.deleteArtificialVertexes(),this.deleteUselessEdges(),this.deleteSelfEdges());const e=new List;let i=!0;for(;i;){i=!1;const s=this.To.iterator;for(;s.next();){const n=s.value;if(this.isSingleton(n))continue;const o=this.layout.createNetwork();e.add(o),this.P3(o,n),i=!0;break}}return e.sort((s,n)=>s===null||n===null||s===n?0:n.vertexes.count-s.vertexes.count),e}P3(t,e){const i=[];for(i.push(e);i.length>0;){const s=i.pop();if(s.network===t)continue;this.JF(s),t.addVertex(s);let n=s.sourceEdges;for(;n.next();){const o=n.value;o.network!==t&&(this.fT(o),t.cT(o),o.fromVertex&&i.push(o.fromVertex))}for(n=s.destinationEdges;n.next();){const o=n.value;o.network!==t&&(this.fT(o),t.cT(o),o.toVertex&&i.push(o.toVertex))}}}findAllParts(){const t=new GSet,e=this.To.iterator;for(;e.next();){const s=e.value;s.node&&t.add(s.node)}const i=this.Xn.iterator;for(;i.next();){const s=i.value;s.link&&t.add(s.link)}return t}}const _smartComparerRegex=/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/;class LayoutVertex{No;ne;Ei;$t;os;lr;ar;constructor(t){GSet._e(this),this.No=t,this.$t=new Rect(0,0,10,10),this.os=new Point(5,5),this.ne=null,this.Ei=null,this.lr=new List,this.ar=new List}clear(){this.ne=null,this.Ei=null,this.lr=new List,this.ar=new List}toString(t){t===void 0&&(t=0);let e="LayoutVertex#"+GSet.ks(this);if(t>0&&(e+=this.node!==null?"("+this.node.toString()+")":"",t>1)){let i="",s=!0,n=this.lr.iterator;for(;n.next();){const r=n.value;s?s=!1:i+=",",i+=r.toString(0)}let o="";for(s=!0,n=this.ar.iterator;n.next();){const r=n.value;s?s=!1:o+=",",o+=r.toString(0)}e+=" sources: "+i+" destinations: "+o}return e}get Lo(){return this.lr.iL}get hr(){return this.ar.iL}get data(){return this.ne}set data(t){if(this.ne=t,t!==null&&t.bounds){const e=t.bounds,i=e.x,s=e.y,n=e.width,o=e.height;this.os.e(n/2,o/2),this.$t.e(i,s,n,o)}}get node(){return this.Ei}set node(t){if(this.Ei!==t){if(this.Ei=t,t===null)return;t.ensureBounds();const e=this.network.layout,i=Rect.l(),s=e.getLayoutBounds(t,i);let n=s.x,o=s.y;const r=s.width,l=s.height;if(isNaN(n)&&(n=0),isNaN(o)&&(o=0),this.$t.e(n,o,r,l),Rect.i(i),!(t instanceof Group)){const a=t.locationObject.getDocumentPoint(Spot.Center);if(a.isReal()){this.os.e(a.x-n,a.y-o);return}}this.os.e(r/2,l/2)}}get bounds(){return this.$t}set bounds(t){this.$t.equals(t)||this.$t.h(t)}get focus(){return this.os}set focus(t){this.os.equals(t)||this.os.h(t)}get centerX(){return this.$t.x+this.os.x}set centerX(t){const e=this.$t;e.x+this.os.x!==t&&(e.x=t-this.os.x)}get centerY(){return this.$t.y+this.os.y}set centerY(t){const e=this.$t;e.y+this.os.y!==t&&(e.y=t-this.os.y)}get focusX(){return this.os.x}set focusX(t){const e=this.os;e.x!==t&&(e.x=t)}get focusY(){return this.os.y}set focusY(t){const e=this.os;e.y!==t&&(e.y=t)}get x(){return this.$t.x}set x(t){const e=this.$t;e.x!==t&&(e.x=t)}get y(){return this.$t.y}set y(t){const e=this.$t;e.y!==t&&(e.y=t)}get width(){return this.$t.width}set width(t){const e=this.$t;e.width!==t&&(e.width=t)}get height(){return this.$t.height}set height(t){const e=this.$t;e.height!==t&&(e.height=t)}commit(){const t=this.ne;if(t!==null){const i=this.bounds,s=t.bounds;U.Z(s)?(s.x=i.x,s.y=i.y,s.width=i.width,s.height=i.height):t.bounds=i.copy();return}const e=this.node;if(e!==null){const i=this.bounds;if(!(e instanceof Group)){const s=Rect.l();e.ensureBounds();const n=this.network.layout.getLayoutBounds(e,s),o=e.locationObject.getDocumentPoint(Spot.Center);if(n.isReal()&&o.isReal()){e.moveTo(i.x+this.focusX-(o.x-n.x)+e.margin.left,i.y+this.focusY-(o.y-n.y+e.margin.top)),Rect.i(s);return}Rect.i(s)}e.moveTo(i.x+e.margin.left,i.y+e.margin.top)}}addSourceEdge(t){t!==null&&(this.lr.has(t)||this.lr.add(t))}deleteSourceEdge(t){t!==null&&this.lr.delete(t)}addDestinationEdge(t){t!==null&&(this.ar.has(t)||this.ar.add(t))}deleteDestinationEdge(t){t!==null&&this.ar.delete(t)}get network(){return this.No}set network(t){this.No=t}get sourceVertexes(){const t=new GSet,e=this.sourceEdges;for(;e.next();){const i=e.value;i.fromVertex&&t.add(i.fromVertex)}return t.iterator}get destinationVertexes(){const t=new GSet,e=this.destinationEdges;for(;e.next();){const i=e.value;i.toVertex&&t.add(i.toVertex)}return t.iterator}get vertexes(){const t=new GSet;let e=this.sourceEdges;for(;e.next();){const i=e.value;i.fromVertex&&t.add(i.fromVertex)}for(e=this.destinationEdges;e.next();){const i=e.value;i.toVertex&&t.add(i.toVertex)}return t.iterator}get sourceEdges(){return this.lr.iterator}get destinationEdges(){return this.ar.iterator}get edges(){const t=new List;let e=this.sourceEdges;for(;e.next();){const i=e.value;t.add(i)}for(e=this.destinationEdges;e.next();){const i=e.value;t.add(i)}return t.iterator}get edgesCount(){return this.lr.count+this.ar.count}static standardComparer(t,e){const i=t.Ei,s=e.Ei;if(i)if(s){const n=i.text,o=s.text;return n<o?-1:n>o?1:0}else return 1;else return s!==null?-1:0}static smartComparer(t,e){if(t!==null)if(e!==null){const i=t.Ei,s=e.Ei;if(i!==null)if(s!==null){const n=i.text.toLocaleLowerCase(),o=s.text.toLocaleLowerCase(),r=n.split(_smartComparerRegex),l=o.split(_smartComparerRegex);let a=0;for(;a<r.length;a++)if(l[a]!==""&&l[a]!==void 0){const h=parseFloat(r[a]),c=parseFloat(l[a]);if(isNaN(h))if(isNaN(c)){if(r[a].localeCompare(l[a])!==0)return r[a].localeCompare(l[a]);continue}else return 1;else{if(isNaN(c))return-1;if(h-c!==0)return h-c;continue}}else{if(r[a]==="")continue;return 1}return l[a]!==""&&l[a]!==void 0?-1:0}else return 1;else return s!==null?-1:0}else return 1;else return e!==null?-1:0}}class LayoutEdge{No;ne;ns;rs;ls;constructor(t){GSet._e(this),this.No=t,this.ne=null,this.ns=null,this.rs=null,this.ls=null}clear(){this.ne=null,this.ns=null,this.rs=null,this.ls=null}toString(t){t===void 0&&(t=0);let e="LayoutEdge#"+GSet.ks(this);return t>0&&(e+=this.ns!==null?"("+this.ns.toString()+")":"",t>1&&(e+=" "+(this.rs?this.rs.toString():"null")+" --> "+(this.ls?this.ls.toString():"null"))),e}reverseEdge(){const t=this.rs;this.rs=this.ls,this.ls=t}commit(){}getOtherVertex(t){return this.ls===t?this.rs:this.rs===t?this.ls:null}get network(){return this.No}set network(t){this.No=t}get data(){return this.ne}set data(t){this.ne!==t&&(this.ne=t)}get link(){return this.ns}set link(t){this.ns!==t&&(this.ns=t)}get fromVertex(){return this.rs}set fromVertex(t){this.rs!==t&&(this.rs=t)}get toVertex(){return this.ls}set toVertex(t){this.ls!==t&&(this.ls=t)}}var GridAlignment=(w=>(w[w.Position=0]="Position",w[w.Location=1]="Location",w))(GridAlignment||{}),GridArrangement=(w=>(w[w.LeftToRight=10]="LeftToRight",w[w.RightToLeft=11]="RightToLeft",w))(GridArrangement||{}),GridSorting=(w=>(w[w.Forwards=20]="Forwards",w[w.Reverse=21]="Reverse",w[w.Ascending=22]="Ascending",w[w.Descending=23]="Descending",w))(GridSorting||{});class GridLayout extends Layout{Tg;Lg;Eo;Gn;pe;$e;Ni;Ti;constructor(t){super(),this.isViewportSized=!0,this.Tg=NaN,this.Lg=NaN,this.Eo=new Size(NaN,NaN).b(),this.Gn=new Size(10,10).b(),this.pe=1,this.$e=10,this.Ni=22,this.Ti=GridLayout.standardComparer,t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Tg=this.Tg,t.Lg=this.Lg,t.Eo.h(this.Eo),t.Gn.h(this.Gn),t.pe=this.pe,t.$e=this.$e,t.Ni=this.Ni,t.Ti=this.Ti}ge(t){t in GridSorting?this.sorting=t:t in GridArrangement?this.arrangement=t:t in GridAlignment?this.alignment=t:super.ge(t)}doLayout(t){this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin);const e=this.collectParts(t),i=this.diagram,n=e.copy().iterator;for(;n.next();){const m=n.value;if(m.Ir()&&(m.fromNode!==null||m.toNode!==null)){e.delete(m);continue}if(m.ensureBounds(),m instanceof Group){const g=m.memberParts;for(;g.next();){const p=g.value;e.delete(p)}}}const o=e.toArray();if(o.length===0)return;switch(this.sorting){case 20:break;case 21:o.reverse();break;case 22:o.sort(this.comparer);break;case 23:o.sort(this.comparer),o.reverse();break}let r=this.wrappingColumn;isNaN(r)&&(r=0);let l=this.wrappingWidth;if(isNaN(l)&&i!==null){const m=i.viewportBounds,g=i.padding;l=Math.max(m.width-g.left-g.right,0)}else l=Math.max(this.wrappingWidth,0);r<=0&&l<=0&&(r=1);let a=this.spacing.width;isFinite(a)||(a=0);let h=this.spacing.height;isFinite(h)||(h=0),i!==null&&i.startTransaction("Layout");const c=[];switch(this.alignment){case 0:this.S3(o,l,r,a,h,c);break;case 1:this.M3(o,l,r,a,h,c);break}let f=0,u=0,d=0;for(let m=0;m<c.length;m++){const g=c[m];f=Math.min(f,g.x),u=Math.min(u,g.y),d=Math.max(d,g.x+g.width)}this.arrangement===11?this.commitLayers(c,new Point(f+a/2-(d+f),u-h/2)):this.commitLayers(c,new Point(f-a/2,u-h/2)),i!==null&&i.commitTransaction("Layout"),this.isValidLayout=!0}S3(t,e,i,s,n,o){const r=Rect.l();let l=Math.max(this.cellSize.width,1);if(!isFinite(l)){l=0;for(let p=0;p<t.length;p++){const y=t[p],x=this.getLayoutBounds(y,r);l=Math.max(l,x.width)}}l+=s,l=Math.max(l,1);let a=Math.max(this.cellSize.height,1);if(!isFinite(a)){a=0;for(let p=0;p<t.length;p++){const y=t[p],x=this.getLayoutBounds(y,r);a=Math.max(a,x.height)}}a+=n,a=Math.max(a,1);const h=this.arrangement,c=this.arrangementOrigin.x,f=this.arrangementOrigin.y;let u=c,d=f,m=0,g=0;for(let p=0;p<t.length;p++){const y=t[p],x=this.getLayoutBounds(y,r),b=Math.ceil((x.width+s)/l),k=Math.ceil((x.height+n)/a),P=b*l,S=k*a;let T=0;h===11?T=Math.abs(u-x.width):T=u+x.width,(i>0&&m>i-1||e>0&&m>0&&T-c>e)&&(o.push(new Rect(0,d,e+s,g)),m=0,u=c,d+=g,g=0),g=Math.max(g,S);let N=0;h===11?N=-x.width:N=0,y.moveTo(u+N+y.margin.left,d+y.margin.top),h===11?u-=P:u+=P,m++}o.push(new Rect(0,d,e+s,g)),Rect.i(r)}M3(t,e,i,s,n,o){const r=Rect.l();let l=Math.max(this.cellSize.width,1),a=0,h=0,c=0;const f=Point.l();for(let N=0;N<t.length;N++){const M=t[N],C=this.getLayoutBounds(M,r),L=M.getRelativePoint(M.locationObject,M.locationSpot,f);a=Math.max(a,L.x),h=Math.max(h,C.width-L.x),c=Math.max(c,L.y)}const u=this.arrangement;u===11?a+=s:h+=s,isFinite(l)?l=Math.max(l+s,1):l=Math.max(a+h,1);const d=this.arrangementOrigin.x,m=this.arrangementOrigin.y;let g=d,p=m,y=0;e>=a&&(e-=a);let x=0,b=0;const k=Math.max(this.cellSize.height,1);c=0;let P=0,S=!0;const T=Point.l();for(let N=0;N<t.length;N++){const M=t[N],C=this.getLayoutBounds(M,r),L=M.getRelativePoint(M.locationObject,M.locationSpot,f);if(y>0)if(u===11){let D=(g-d-(C.width-L.x))/l;G.G(Math.round(D),D)?D=Math.round(D):D=Math.floor(D),g=D*l+d}else{let D=(g-d+L.x)/l;G.G(Math.round(D),D)?D=Math.round(D):D=Math.ceil(D),g=D*l+d}else u===11?x=g+L.x+C.width:x=g-L.x;let A=0;if(u===11?A=-(g+L.x)+x:A=g+C.width-L.x-x,i>0&&y>i-1||e>0&&y>0&&A>e){o.push(new Rect(0,S?p-c:p,e+s,P+c+n));for(let D=0;D<y&&N!==y;D++){const F=t[N-y+D],v=F.getRelativePoint(F.locationObject,F.locationSpot,T);F.moveTo(F.position.x,F.position.y+c-v.y)}P+=n,S?p+=P:p+=P+c,c=0,P=0,y=0,g=d,S=!1}g===d&&(u===11?b=Math.max(b,C.width-L.x):b=Math.min(b,-L.x)),c=Math.max(c,L.y),P=Math.max(P,C.height-L.y),isFinite(k)&&(P=Math.max(P,Math.max(C.height,k)-L.y)),S?M.moveTo(g-L.x,p-L.y):M.moveTo(g-L.x,p),u===11?g-=L.x+s:g+=C.width-L.x+s,y++}if(o.push(new Rect(0,p,e+s,(S?P:P+c)+n)),t.length!==y)for(let N=0;N<y;N++){const M=t[t.length-y+N],C=M.getRelativePoint(M.locationObject,M.locationSpot,f);M.moveTo(M.position.x,M.position.y+c-C.y)}if(Point.i(f),Point.i(T),u===11)for(let N=0;N<o.length;N++){const M=o[N];M.width+=b,M.x-=b}else for(let N=0;N<o.length;N++){const M=o[N];M.x>b&&(M.width+=M.x-b,M.x=b)}Rect.i(r)}commitLayers(t,e){}get wrappingWidth(){return this.Tg}set wrappingWidth(t){this.Tg!==t&&(U.s(t,"number",GridLayout,"wrappingWidth"),(t>0||isNaN(t))&&(this.Tg=t,this.isViewportSized=isNaN(t),this.g()))}get wrappingColumn(){return this.Lg}set wrappingColumn(t){this.Lg!==t&&(U.s(t,"number",GridLayout,"wrappingColumn"),(t>0||isNaN(t))&&(this.Lg=t,this.g()))}get cellSize(){return this.Eo}set cellSize(t){this.Eo.equals(t)||(this.Eo.h(t),this.g())}get spacing(){return this.Gn}set spacing(t){this.Gn.equals(t)||(this.Gn.h(t),this.g())}get alignment(){return this.pe}set alignment(t){this.pe!==t&&(t===1||t===0)&&(this.pe=t,this.g())}get arrangement(){return this.$e}set arrangement(t){this.$e!==t&&(t===10||t===11)&&(this.$e=t,this.g())}get sorting(){return this.Ni}set sorting(t){this.Ni!==t&&(t===20||t===21||t===22||t===23)&&(this.Ni=t,this.g())}get comparer(){return this.Ti}set comparer(t){this.Ti!==t&&(U.S(t,GridLayout,"comparer"),this.Ti=t,this.g())}static standardComparer(t,e){const i=t.text,s=e.text;return i<s?-1:i>s?1:0}static smartComparer(t,e){if(t!==null)if(e!==null){const i=t.text.toLocaleLowerCase(),s=e.text.toLocaleLowerCase(),n=i.split(/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/),o=s.split(/([+-]?[.]?\d+(?:\.\d*)?(?:e[+-]?\d+)?)/);let r=0;for(;r<n.length;r++)if(o[r]!==""&&o[r]!==void 0){const l=parseFloat(n[r]),a=parseFloat(o[r]);if(isNaN(l))if(isNaN(a)){if(n[r].localeCompare(o[r])!==0)return n[r].localeCompare(o[r]);continue}else return 1;else{if(isNaN(a))return-1;if(l-a!==0)return l-a;continue}}else{if(n[r]==="")continue;return 1}return o[r]!==""&&o[r]!==void 0?-1:0}else return 1;else return e!==null?-1:0}static Position=0;static Location=1;static LeftToRight=10;static RightToLeft=11;static Forward=20;static Reverse=21;static Ascending=22;static Descending=23}class PartManager{Ag;cn;Vt;Ao;Dg;Fg;a;uT;constructor(){this.Ag=new GSet,this.cn=new GSet,this.Vt=new GSet,this.Ao=new GMap,this.Dg=new GMap,this.Fg=new GMap,this.a=null,this.uT=!1}clear(){this.Ag.clear(),this.cn.clear(),this.Vt.clear(),this.Ao.clear(),this.Dg.clear(),this.Fg.clear()}Bo(t){this.a=t}xh(t){if(t instanceof Node){if(this.Ag.add(t),t instanceof Group){const i=t.containingGroup;i===null?this.diagram.rl.add(t):i.Ih.add(t);const s=t.layout;s!==null&&(s.diagram=this.diagram)}}else t instanceof Link?(this.cn.add(t),t.isAvoiding&&(this.diagram.xp=!0)):t instanceof Adornment||this.Vt.add(t);const e=t.data;e!==null&&(t instanceof Adornment||(t instanceof Link?this.$F(e,t):this.Ao.set(e,t)))}hi(t){if(t.clearAdornments(),t instanceof Node){if(this.Ag.delete(t),t instanceof Group){const i=t.containingGroup;i===null?this.diagram.rl.delete(t):i.Ih.delete(t);const s=t.layout;s!==null&&(s.diagram=null)}}else t instanceof Link?this.cn.delete(t):t instanceof Adornment||this.Vt.delete(t);const e=t.data;e!==null&&(t instanceof Adornment||(t instanceof Link?this.ZF(e,t):this.Ao.delete(e)))}$F(t,e){this.Dg.set(t,e)}ZF(t,e){this.Dg.delete(t)}rebuildParts(){const t=this.diagram;if(t===null)return;const e=t.nodeTemplateMap.iterator;for(;e.next();){const u=e.value,d=e.key;(!u.Oi()||u instanceof Group)&&U.n(`Invalid node template in Diagram.nodeTemplateMap: template for "${d}" must be a Node or a simple Part, not a Group or Link: ${u}`)}const i=t.groupTemplateMap.iterator;for(;i.next();){const u=i.value,d=i.key;u instanceof Group||U.n(`Invalid group template in Diagram.groupTemplateMap: template for "${d}" must be a Group, not a normal Node or Link: ${u}`)}const s=t.linkTemplateMap.iterator;for(;s.next();){const u=s.value,d=s.key;u instanceof Link||U.n(`Invalid link template in Diagram.linkTemplateMap: template for "${d}" must be a Link, not a normal Node or simple Part: ${u}`)}const n=U.ot(),o=t.selection.iterator;for(;o.next();){const d=o.value.data;d&&n.push(d)}const r=U.ot(),l=t.highlighteds.iterator;for(;l.next();){const d=l.value.data;d&&r.push(d)}const a=U.ot(),h=this.nodes.iterator;for(;h.next();){const u=h.value;u.data!==null&&(a.push(u.data),a.push(u.location))}const c=this.links.iterator;for(;c.next();){const u=c.value;u.data!==null&&(a.push(u.data),a.push(u.location))}const f=this.parts.iterator;for(;f.next();){const u=f.value;u.data!==null&&(a.push(u.data),a.push(u.location))}this.QF(),this.tC();for(let u=0;u<n.length;u++){const d=this.findPartForData(n[u]);d!==null&&(d.isSelected=!0)}for(let u=0;u<r.length;u++){const d=this.findPartForData(r[u]);d!==null&&(d.isHighlighted=!0)}for(let u=0;u<a.length;u+=2){const d=this.findPartForData(a[u]);d!==null&&(d.location=a[u+1])}U._(n),U._(r),U._(a)}tC(){const t=this.diagram.model;this.gw(t.nodeDataArray)}gw(t,e){const i=this.diagram.model;t.forEach(s=>{i.containsNodeData(s)&&this._F(s,!1)}),t.forEach(s=>{i.containsNodeData(s)&&this.Uk(s)}),e!==!1&&this.diagram.M1(!1)}_F(t,e){if(t==null||this.diagram.undoManager.isUndoingRedoing||this.Ao.has(t))return null;e===void 0&&(e=!0);const i=this.C3(t);return i!==null&&e&&this.Uk(t),i}C3(t){if(t==null||this.diagram.undoManager.isUndoingRedoing||this.Ao.has(t))return null;const e=this.N3(t),i=this.findTemplateForNodeData(t,e);if(i!==null){i.Ut();const s=i.copy();if(s!==null){const n=this.diagram.ki;return this.diagram.ki=!0,s.ir=e,s.ne=t,this.addsToTemporaryLayer&&(s.Pl="Tool"),this.diagram.add(s),s.ne=null,s.data=t,this.diagram.ki=n,s}}return null}insertLink(t,e,i,s){return null}Uk(t){}N3(t){return this.diagram.model.getCategoryForNodeData(t)}static tv=!1;static ev=!1;findTemplateForNodeData(t,e){const i=this.diagram,s=i.model,n=s.Bh()&&s.isGroupForData(t);let o=null;return n?(o=i.groupTemplateMap.get(e),o===null&&(o=i.groupTemplateMap.get(""),o===null&&(PartManager.ev||(PartManager.ev=!0,U.jt('No Group template found for category "'+e+'"'),U.jt("  Using default group template")),o=i.D2))):(o=i.nodeTemplateMap.get(e),o===null&&(o=i.nodeTemplateMap.get(""),o===null&&(PartManager.tv||(PartManager.tv=!0,U.jt('No Node template found for category "'+e+'"'),U.jt("  Using default node template")),o=i.T2))),o}getLinkCategoryForData(t){return""}setLinkCategoryForData(t,e){}setFromNodeForLink(t,e,i){}setToNodeForLink(t,e,i){}static iv=!1;findLinkTemplateForCategory(t){const e=this.diagram;let i=e.linkTemplateMap.get(t);return i===null&&(i=e.linkTemplateMap.get(""),i===null&&(PartManager.iv||(PartManager.iv=!0,U.jt('No Link template found for category "'+t+'"'),U.jt("  Using default link template")),i=e.L2)),i}yE(t,e,i){t instanceof Link?(e!==null&&this.ZF(e,t),i!==null&&this.$F(i,t)):t instanceof Part&&(e!==null&&this.Ao.delete(e),i!==null&&this.Ao.set(i,t))}QF(){const t=this.diagram.model;this.dT(t.nodeDataArray)}dT(t){t.forEach(e=>{this.Bk(e)})}Bk(t){const e=this.findPartForData(t);e!==null&&(this.diagram.Z2(e,!1),this.gT(e))}gT(t){}tT(t){}findPartForKey(t){if(t==null)return null;const i=this.diagram.model.findNodeDataForKey(t);return i!==null?this.Ao.get(i):null}findNodeForKey(t){if(t==null)return null;const i=this.diagram.model.findNodeDataForKey(t);if(i===null)return null;const s=this.Ao.get(i);return s instanceof Node?s:null}findLinkForKey(t){return null}findPartForData(t){if(t===null)return null;let e=this.Ao.get(t);return e!==null||(e=this.Dg.get(t)),e}findNodeForData(t){if(t===null)return null;const e=this.Ao.get(t);return e instanceof Node?e:null}findLinkForData(t,e){return t===null?null:this.Dg.get(t)}findNodesByExample(...t){const e=new GSet,i=this.Ag.iterator;for(;i.next();){const s=i.value,n=s.data;if(n!==null)for(let o=0;o<arguments.length;o++){const r=arguments[o];if(U.Z(r)&&this.mT(n,r)){e.add(s);break}}}return e.iterator}findLinksByExample(...t){const e=new GSet,i=this.cn.iterator;for(;i.next();){const s=i.value,n=s.data;if(n!==null)for(let o=0;o<arguments.length;o++){const r=arguments[o];if(U.Z(r)&&this.mT(n,r)){e.add(s);break}}}return e.iterator}mT(t,e){for(const i in e){const s=t[i],n=e[i];if(Array.isArray(n)){if(!Array.isArray(s))return!1;const o=s,r=n;if(o.length<r.length)return!1;for(let l=0;l<o.length;l++){const a=o[l],h=r[l];if(h!==void 0&&!this.sv(a,h))return!1}}else if(!this.sv(s,n))return!1}return!0}sv(t,e){if(U.nt(e)){if(!e(t))return!1}else if(e instanceof RegExp){if(!t||!e.test(t.toString()))return!1}else if(U.Z(t)&&U.Z(e)){if(!this.mT(t,e))return!1}else if(t!==e)return!1;return!0}doModelDataChanged(t){if(t.model===this.diagram.model&&this.diagram.Y){this.diagram.Y=!1;try{const e=t.change;t.modelChange===""&&t.object!==null&&e===2&&this.mw(t.object,t.propertyName)}finally{this.diagram.Y=!0}}}doModelChanged(t){const e=this.diagram;if(!e||t.model!==e.model)return;const i=t.change;if(e.ZO(t),!!e.Y){e.Y=!1;try{const s=t.modelChange;if(s!=="")if(i===2){if(s==="nodeCategory"){const n=t.object;if(n!==null){const o=this.findPartForData(n),r=t.newValue;o!==null&&typeof r=="string"&&(o.category=r)}}else if(s==="nodeDataArray"){const n=t.oldValue;this.dT(n);const o=t.newValue;this.gw(o)}e.isModified=!0}else if(i===3){const n=t.newValue;s==="nodeDataArray"&&U.Z(n)&&this._F(n),e.isModified=!0}else if(i===4){const n=t.oldValue;s==="nodeDataArray"&&U.Z(n)&&this.Bk(n),e.isModified=!0}else i===1&&(s==="SourceChanged"?t.object!==null?this.mw(t.object,t.propertyName):(this.updateAllRelationshipsFromData(),this.updateAllTargetBindings()):s==="ModelDisplaced"&&this.rebuildParts());else if(i===2){const n=t.propertyName,o=t.object,r=e.model;o===r?(n==="nodeKeyProperty"||n==="nodeCategoryProperty")&&(e.undoManager.isUndoingRedoing||this.rebuildParts()):o!==null&&this.mw(o,n),e.isModified=!0}else(i===3||i===4)&&(this.T3(t,e.model),e.isModified=!0)}finally{e.Y=!0}}}updateAllTargetBindings(t){t===void 0&&(t="");let e=this.parts.iterator;for(;e.next();)e.value.updateTargetBindings(t);for(e=this.nodes.iterator;e.next();)e.value.updateTargetBindings(t);for(e=this.links.iterator;e.next();)e.value.updateTargetBindings(t)}updateAllThemeBindings(){let t=this.parts.iterator;for(;t.next();)t.value.Ho();for(t=this.nodes.iterator;t.next();)t.value.Ho();for(t=this.links.iterator;t.next();)t.value.Ho()}updateAllRelationshipsFromData(){const t=this.diagram.model,e=new GSet,i=t.nodeDataArray;for(let o=0;o<i.length;o++){const r=i[o];e.add(r)}const s=[];this.nodes.each(o=>{o.data!==null&&!e.has(o.data)&&s.push(o.data)}),this.parts.each(o=>{o.data!==null&&!e.has(o.data)&&s.push(o.data)}),s.forEach(o=>t.nv(o,!1));for(let o=0;o<i.length;o++){const r=i[o];this.findPartForData(r)===null&&t.ov(r,!1)}this.rv();let n=this.parts.iterator;for(;n.next();)n.value.updateRelationshipsFromData();for(n=this.nodes.iterator;n.next();)n.value.updateRelationshipsFromData();for(n=this.links.iterator;n.next();)n.value.updateRelationshipsFromData()}rv(){}updateRelationshipsFromData(t){}mw(t,e){if(typeof e=="string"){const i=this.findPartForData(t);if(i!==null)i.updateTargetBindings(e);else{const s=this.L3(t);if(s!==null&&s.length>0){for(let o=0;o<s.length;o++)s[o].updateTargetBindings(e);const n=s[0].part;if(n!==null){const o=n.adornments;for(;o.next();)o.value.updateTargetBindings(e)}U._(s)}}t===this.diagram.model.modelData&&this.updateAllTargetBindings(e)}}L3(t){let e=null;const i=this.Fg.iterator;for(;i.next();){const s=i.value;for(let n=0;n<s.length;n++){const r=s[n].findItemPanelForData(t);r!==null&&(e===null&&(e=U.ot()),e.push(r))}if(e!==null)break}return e}pT(t){return this.Fg.get(t)}T3(t,e){const i=t.object;if(!Array.isArray(i))return;const s=t.change===3,n=s?t.newParam:t.oldParam,o=s?t.newValue:t.oldValue,r=this.pT(i);if(Array.isArray(r))for(let l=0;l<r.length;l++){const a=r[l];s?a.fk(o,n,!0):a.bE(n)}}J2(t,e){e!==null&&t.An(s=>e.VA(s));const i=t.Ua;if(Array.isArray(i)){const s=this.pT(i);if(s===null)this.Fg.set(i,[t]);else{for(let n=0;n<s.length;n++)if(s[n]===t)return;s.push(t)}}}$2(t,e){t.An(s=>e._O(s));const i=t.Ua;if(Array.isArray(i)){const s=this.pT(i);if(s!==null){for(let n=0;n<s.length;n++)if(s[n]===t){s.splice(n,1),s.length===0&&this.Fg.delete(i);return}}}}copyParts(t,e,i){i===void 0&&(i=!1);const s=new GMap;if(Array.isArray(t))for(let n=0;n<t.length;n++)this.Vk(t[n],e,s,i);else{const n=t.iterator;for(;n.next();)this.Vk(n.value,e,s,i)}if(e!==null){const n=e.model,o=e.Bp().dragsLink,r=new GSet,l=new GMap,a=s.iterator;for(;a.next();){const h=a.value;if(h instanceof Link)!o&&(h.fromNode===null||h.toNode===null)&&r.add(h);else if(h instanceof Node&&h.data!==null){if(n.Ex()){const c=h,f=a.key,u=f.findTreeParentNode();if(u!==null){const d=s.get(u);if(d!==null){n.setParentKeyForNodeData(c.data,n.getKeyForNodeData(d.data));const m=e.findLinkForData(c.data),g=f.findTreeParentLink();g!==null&&m!==null&&l.set(g,m)}}}else if(n.lv()){const c=h,f=a.key,u=n.isRelatedKeysPathTo?f.findNodesOutOf():f.findNodesInto();for(;u.next();){const d=u.value,m=s.get(d);if(m!==null){n.addRelatedKeyForNodeData(c.data,m.key);const g=e.partManager.findLinkForData(c.data,m.key),p=this.findLinkForData(f.data,d.key);p!==null&&g!==null&&l.set(p,g)}else n.removeRelatedKeyForNodeData(c.data,d.key)}}}}if(r.count>0&&e.removeParts(r,!1),l.count>0){const h=l.iterator;for(;h.next();){const c=h.key,f=h.value;s.set(c,f)}}}if(e!==null&&this.diagram!==null){const n=e.model,o=n.afterCopyFunction;if(o!==null){const r=new GMap;s.each(a=>{a.key.data!==null&&r.set(a.key.data,a.value.data)});const l=this.diagram.model;o(r,n,l)}}return s}Vk(t,e,i,s){if(t===null||s&&!t.canCopy())return null;if(i.has(t))return i.get(t);const n=this.yT(t,e);if(!(n instanceof Part))return null;if(n.isSelected=!1,n.isHighlighted=!1,i.set(t,n),t instanceof Node){const o=t.linksConnected;for(;o.next();){const r=o.value;if(r.fromNode===t){const l=i.get(r);l!==null&&(l.fromNode=n)}if(r.toNode===t){const l=i.get(r);l!==null&&(l.toNode=n)}}if(t instanceof Group&&n instanceof Group){const r=t.memberParts;for(;r.next();){const l=r.value,a=this.Vk(l,e,i,s);a instanceof Link||a!==null&&(a.containingGroup=n)}}}else if(t instanceof Link&&n instanceof Link){const o=t.fromNode;if(o!==null){const a=i.get(o);a!==null&&(n.fromNode=a)}const r=t.toNode;if(r!==null){const a=i.get(r);a!==null&&(n.toNode=a)}const l=t.labelNodes;for(;l.next();){const a=l.value,h=this.Vk(a,e,i,s);h!==null&&h instanceof Node&&(h.labeledLink=n)}}return n}yT(t,e){let i=null;const s=t.data;if(s!==null&&e!==null){const n=e.model;if(!(t instanceof Link)){const o=n.copyNodeData(s);n.addNodeData(o),i=e.findPartForData(o)}}else if(t.Ut(),i=t.copy(),i!==null){const n=this.diagram;if(e!==null)e.add(i);else if(s!==null&&n!==null&&n.commandHandler!==null&&n.commandHandler.copiesClipboardData){const o=n.model;let r=null;i instanceof Link||(r=o.copyNodeData(s)),i.data=r}}return i}get nodes(){return this.Ag}get links(){return this.cn}get parts(){return this.Vt}get diagram(){return this.a}get addsToTemporaryLayer(){return this.uT}set addsToTemporaryLayer(t){this.uT=t}}class GraphLinksPartManager extends PartManager{tC(){const t=this.diagram.model;this.gw(t.nodeDataArray),this.av(t.linkDataArray)}gw(t){super.gw(t,!1);const e=this.links.iterator;for(;e.next();)e.value.lg();this.diagram.M1(!1)}av(t){for(let e=0;e<t.length;e++)this.hv(t[e]);this.diagram.M1(!1)}hv(t){if(t==null||this.diagram.undoManager.isUndoingRedoing||this.findLinkForData(t))return null;const e=this.getLinkCategoryForData(t),i=this.findLinkTemplateForCategory(e);if(i!==null){i.Ut();const s=i.copy();if(s!==null){const n=this.diagram.ki;this.diagram.ki=!0,s.ir=e,s.ne=t;const o=this.diagram.model,r=o.zk(t,!0);r!==""&&(s.fromPortId=r);const l=o.Gi(t,!0);if(l!==void 0){const f=this.findNodeForKey(l);f instanceof Node&&(s.fromNode=f)}const a=o.zk(t,!1);a!==""&&(s.toPortId=a);const h=o.Gi(t,!1);if(h!==void 0){const f=this.findNodeForKey(h);f instanceof Node&&(s.toNode=f)}const c=o.getLabelKeysForLinkData(t);return Array.isArray(c)&&c.forEach(f=>{const u=this.findNodeForKey(f);u!==null&&(u.labeledLink=s)}),this.addsToTemporaryLayer&&(s.Pl="Tool"),this.diagram.add(s),s.ne=null,s.data=t,this.diagram.ki=n,s}}return null}QF(){const t=this.diagram.model;this.cv(t.linkDataArray),this.dT(t.nodeDataArray)}cv(t){t.forEach(e=>{this.Bk(e)})}getLinkCategoryForData(t){return this.diagram.model.getCategoryForLinkData(t)}setLinkCategoryForData(t,e){return this.diagram.model.setCategoryForLinkData(t,e)}setFromNodeForLink(t,e,i){const s=this.diagram.model,n=e!==null?e.data:null;s.setFromKeyForLinkData(t.data,s.getKeyForNodeData(n))}setToNodeForLink(t,e,i){const s=this.diagram.model,n=e!==null?e.data:null;s.setToKeyForLinkData(t.data,s.getKeyForNodeData(n))}tT(t){this.diagram.model.removeLinkData(t.data)}findPartForKey(t){const e=super.findPartForKey(t);if(e===null){const s=this.diagram.model.findLinkDataForKey(t);if(s!==null)return this.findLinkForData(s)}return e}findLinkForKey(t){if(t==null)return null;const i=this.diagram.model.findLinkDataForKey(t);return i!==null?this.findLinkForData(i):null}doModelChanged(t){if(super.doModelChanged(t),!this.diagram)return;const e=this.diagram;if(t.model!==e.model)return;const i=t.change;if(e.Y){e.Y=!1;try{const s=t.modelChange;if(s!==""){if(i===2){if(s==="linkFromKey"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.newValue,l=this.findNodeForKey(r);o.fromNode=l}}else if(s==="linkToKey"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.newValue,l=this.findNodeForKey(r);o.toNode=l}}else if(s==="linkFromPortId"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.newValue;typeof r=="string"&&(o.fromPortId=r)}}else if(s==="linkToPortId"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.newValue;typeof r=="string"&&(o.toPortId=r)}}else if(s==="nodeGroupKey"){const n=t.object,o=this.findPartForData(n);if(o!==null){const r=t.newValue;if(r!==void 0){const l=this.findNodeForKey(r);l instanceof Group?o.containingGroup=l:o.containingGroup=null}else o.containingGroup=null}}else if(s==="linkLabelKeys"){const n=t.object,o=this.findLinkForData(n);if(o!==null){const r=t.oldValue,l=t.newValue;Array.isArray(r)&&r.forEach(a=>{if(l.indexOf(a)>=0)return;const h=this.findNodeForKey(a);h!==null&&(h.labeledLink=null)}),Array.isArray(l)&&l.forEach(a=>{const h=this.findNodeForKey(a);h!==null&&(h.labeledLink=o)})}}else if(s==="linkCategory"){const n=t.object,o=this.findLinkForData(n),r=t.newValue;o!==null&&typeof r=="string"&&(o.category=r)}else if(s==="linkDataArray"){const n=t.oldValue;this.cv(n);const o=t.newValue;this.av(o)}e.isModified=!0}else if(i===3){const n=t.newValue;if(s==="linkDataArray"&&U.Z(n))this.hv(n);else if(s==="linkLabelKeys"&&t.model.isKeyType(n)){const o=t.object,r=this.findLinkForData(o),l=this.findNodeForKey(n);r!==null&&l!==null&&(l.labeledLink=r)}e.isModified=!0}else if(i===4){const n=t.oldValue;if(s==="linkDataArray"&&U.Z(n))this.Bk(n);else if(s==="linkLabelKeys"&&t.model.isKeyType(n)){const o=this.findNodeForKey(n);o!==null&&(o.labeledLink=null)}e.isModified=!0}}else if(i===2){const n=t.propertyName,o=t.object,r=e.model;o===r&&(n==="linkFromKeyProperty"||n==="linkToKeyProperty"||n==="linkFromPortIdProperty"||n==="linkToPortIdProperty"||n==="linkLabelKeysProperty"||n==="nodeIsGroupProperty"||n==="nodeGroupKeyProperty"||n==="linkCategoryProperty")&&(e.undoManager.isUndoingRedoing||this.rebuildParts()),e.isModified=!0}}finally{e.Y=!0}}}rv(){const t=this.diagram.model,e=new Set,i=t.linkDataArray;i.forEach(n=>{e.add(n)});const s=[];this.links.each(n=>{n.data!==null&&!e.has(n.data)&&s.push(n.data)}),s.forEach(n=>{t.fv(n,!1)}),i.forEach(n=>{this.findLinkForData(n)===null&&t.uv(n,!1)})}updateRelationshipsFromData(t){const e=t.data;if(e===null)return;const i=t.diagram;if(i===null)return;const s=i.model;if(t instanceof Link){let n=s.Gi(e,!0),o=i.findNodeForKey(n);t.fromNode=o,n=s.Gi(e,!1),o=i.findNodeForKey(n),t.toNode=o;const r=s.getLabelKeysForLinkData(e);if(r.length>0||t.labelNodes.count>0){if(r.length===1&&t.labelNodes.count===1){const f=r[0],u=t.labelNodes.first();if(u!==null&&s.getKeyForNodeData(u.data)===f)return}const l=new GSet().addAll(r),a=new GSet;t.labelNodes.each(f=>{if(f.data!==null){const u=s.getKeyForNodeData(f.data);u!==void 0&&a.add(u)}});const h=a.copy();h.removeAll(l);const c=l.copy();if(c.removeAll(a),h.count>0||c.count>0){const f=t;h.each(u=>{const d=i.findNodeForKey(u);d!==null&&d.labeledLink===f&&(d.labeledLink=null)}),c.each(u=>{const d=i.findNodeForKey(u);d!==null&&d.labeledLink!==f&&(d.labeledLink=f)})}}}else if(!(t instanceof Adornment)){const n=s.getGroupKeyForNodeData(e),o=i.findPartForKey(n);(o===null||o instanceof Group)&&(t.containingGroup=o)}}Uk(t){const e=this.diagram.model,i=e.getKeyForNodeData(t);if(i!==void 0){const s=e.pw(i),n=this.findPartForData(t);if(s!==null&&n!==null){const r=s.iterator;for(;r.next();){const l=r.value;if(e.containsNodeData(l)){if(n instanceof Group&&e.getGroupKeyForNodeData(l)===i){const a=this.findPartForData(l);a!==null&&(a.containingGroup=n)}}else{const a=this.findLinkForData(l);if(a!==null&&n instanceof Node){e.Gi(l,!0)===i&&(a.fromNode=n),e.Gi(l,!1)===i&&(a.toNode=n);const h=e.getLabelKeysForLinkData(l);Array.isArray(h)&&h.some(c=>c===i?(n.labeledLink=a,!0):!1)}}}e.un(i)}const o=e.getGroupKeyForNodeData(t);if(o!==void 0){const r=this.findNodeForKey(o);n!==null&&r instanceof Group&&(n.containingGroup=r)}}}gT(t){const e=this.diagram.model;if(t instanceof Node){const i=e.getKeyForNodeData(t.data);if(i!==void 0){const s=t.linksConnected;for(;s.next();){const n=s.value;e.dn(i,n.data)}if(t.isLinkLabel){const n=t.labeledLink;n!==null&&e.dn(i,n.data)}if(t instanceof Group){const n=t.memberParts;for(;n.next();){const r=n.value.data;e.containsNodeData(r)&&e.dn(i,r)}}}}}yT(t,e){let i=super.yT(t,e);if(t instanceof Link){const s=t.data;if(s!==null&&e!==null){const n=e.model,o=n.copyLinkData(s);n.addLinkData(o),i=e.findLinkForData(o)}else if(i!==null){const n=this.diagram;if(s!==null&&n!==null&&n.commandHandler!==null&&n.commandHandler.copiesClipboardData){const r=n.model.copyLinkData(s);i.data=r}}}return i}insertLink(t,e,i,s){const n=this.diagram,o=n.model,r=n.toolManager.findTool("Linking");let l="";t!==null&&(e===null&&(e=t),l=e.portId,l===null&&(l=""));let a="";i!==null&&(s===null&&(s=i),a=s.portId,a===null&&(a=""));const h=r.archetypeLinkData;if(h instanceof Link){h.Ut();const c=h.copy();if(c!==null){c.fromNode=t,c.fromPortId=l,c.toNode=i,c.toPortId=a,n.add(c);const f=r.archetypeLabelNodeData;if(f instanceof Node){f.Ut();const u=f.copy();u!==null&&(u.labeledLink=c,n.add(u))}return c}}else if(h!==null){const c=o.copyLinkData(h);if(U.Z(c)){t!==null&&o.vg(c,o.getKeyForNodeData(t.data),!0),o.Rg(c,l,!0),i!==null&&o.vg(c,o.getKeyForNodeData(i.data),!1),o.Rg(c,a,!1),o.addLinkData(c);const f=r.archetypeLabelNodeData;if(f!==null&&!(f instanceof Node)){const d=o.copyNodeData(f);o.addNodeData(d);const m=o.getKeyForNodeData(d);m!==void 0&&o.addLabelKeyForLinkData(c,m)}return n.findLinkForData(c)}}return null}}class TreePartManager extends PartManager{Ha=null;Xk(t,e){if(t===null||e===null||e.findTreeParentLink()!==null)return;const i=this.diagram.toolManager.findTool("Linking");let s=t,n=e;if(this.diagram.isTreePathToChildren){if(i!==null&&i.ju(s,n,null,!0))return}else if(s=e,n=t,i!==null&&i.ju(s,n,null,!0))return;const o=this.getLinkCategoryForData(e.data),r=this.findLinkTemplateForCategory(o);if(r!==null){r.Ut();const l=r.copy();if(l!==null){const a=this.diagram.ki;this.diagram.ki=!0,l.ir=o,l.ne=e.data,l.fromNode=s,l.toNode=n,this.diagram.add(l),l.ne=null,l.data=e.data,this.diagram.ki=a}}}getLinkCategoryForData(t){return this.diagram.model.getParentLinkCategoryForNodeData(t)}setLinkCategoryForData(t,e){this.diagram.model.setParentLinkCategoryForNodeData(t,e)}setFromNodeForLink(t,e,i){const s=this.diagram.model;i===void 0&&(i=null);const n=e!==null?e.data:null;if(this.diagram.isTreePathToChildren)s.setParentKeyForNodeData(t.data,s.getKeyForNodeData(n));else{const o=this.Ha;this.Ha=t,i!==null&&s.setParentKeyForNodeData(i.data,void 0);const r=t.toNode!==null?t.toNode.data:null;s.setParentKeyForNodeData(n,s.getKeyForNodeData(r)),this.Ha=o}}setToNodeForLink(t,e,i){const s=this.diagram.model;i===void 0&&(i=null);const n=e!==null?e.data:null;if(this.diagram.isTreePathToChildren){const o=this.Ha;this.Ha=t,i!==null&&s.setParentKeyForNodeData(i.data,void 0);const r=t.fromNode!==null?t.fromNode.data:null;s.setParentKeyForNodeData(n,s.getKeyForNodeData(r)),this.Ha=o}else s.setParentKeyForNodeData(t.data,s.getKeyForNodeData(n))}tT(t){this.diagram.model.setParentKeyForNodeData(t.data,void 0)}findLinkForKey(t){if(t==null)return null;const i=this.diagram.model.findNodeDataForKey(t);return i!==null?this.findLinkForData(i):null}doModelChanged(t){if(super.doModelChanged(t),!this.diagram)return;const e=this.diagram;if(t.model!==e.model)return;const i=t.change;if(e.Y){e.Y=!1;try{const s=t.modelChange;if(s!==""){if(i===2){if(s==="nodeParentKey"){const n=t.object,o=n?this.findNodeForData(n):null,r=t.newValue,l=this.findNodeForKey(r);if(n&&this.Ha!==null)l!==null&&(this.Ha.data=n,this.Ha.category=this.getLinkCategoryForData(n));else if(o!==null){const a=o.findTreeParentLink();a!==null?l===null?e.remove(a):e.isTreePathToChildren?a.fromNode=l:a.toNode=l:this.Xk(l,o)}}else if(s==="parentLinkCategory"){const n=t.object,o=n?this.findNodeForData(n):null,r=t.newValue;if(o!==null&&typeof r=="string"){const l=o.findTreeParentLink();l!==null&&(l.category=r)}}e.isModified=!0}}else i===2&&(t.object===e.model&&t.propertyName==="nodeParentKeyProperty"&&(e.undoManager.isUndoingRedoing||this.rebuildParts()),e.isModified=!0)}finally{e.Y=!0}}}updateRelationshipsFromData(t){const e=t.data;if(e===null)return;const i=t.diagram;if(i===null)return;const s=i.model;if(t instanceof Node){const n=s.getParentKeyForNodeData(e),o=i.findNodeForKey(n),r=t.findTreeParentNode();if(o!==r){const l=t.findTreeParentLink();o!==null?l!==null?i.isTreePathToChildren?l.fromNode=o:l.toNode=o:this.Xk(o,t):l!==null&&i.Z2(l,!1)}}}mw(t,e){if(super.mw(t,e),typeof e=="string"&&this.findPartForData(t)!==null){const s=this.findLinkForData(t);s!==null&&s.updateTargetBindings(e)}}Uk(t){const e=this.diagram.model,i=e.getKeyForNodeData(t);if(i!==void 0){const s=e.pw(i),n=this.findPartForData(t);if(s!==null&&n!==null){const r=s.iterator;for(;r.next();){const l=r.value;if(e.containsNodeData(l)&&n instanceof Node&&e.getParentKeyForNodeData(l)===i){const a=this.findNodeForData(l);this.Xk(n,a)}}e.un(i)}const o=e.getParentKeyForNodeData(t);if(o!==void 0&&n instanceof Node){const r=this.findNodeForKey(o);this.Xk(r,n)}}}gT(t){const e=this.diagram.model;if(t instanceof Node){const i=e.getKeyForNodeData(t.data),s=this.findLinkForData(t.data);if(s!==null){s.isSelected=!1,s.isHighlighted=!1;const r=s.layer;if(r!==null){const l=r.hi(-1,s,!1);l>=0&&this.diagram.raiseChangedEvent(4,"parts",r,s,null,l,null);const a=s.layerChanged;a!==null&&a(s,r,null)}}const n=this.diagram.isTreePathToChildren,o=t.linksConnected;for(;o.next();){const r=o.value,l=n?r.toNode:r.fromNode;if(l!==null){const a=l.data;e.containsNodeData(a)&&e.dn(i,a)}}}}insertLink(t,e,i,s){const n=this.diagram.model;let o=t,r=i;if(this.diagram.isTreePathToChildren||(o=i,r=t),o!==null&&r!==null){const l=o.data,a=r.data;return n.setParentKeyForNodeData(a,n.getKeyForNodeData(l)),r.findTreeParentLink()}return null}}var BindingMode=(w=>(w[w.OneWay=1]="OneWay",w[w.TwoWay=2]="TwoWay",w))(BindingMode||{});class Binding{o;wT;mc;iu;qa;su;nu;ou;Gk;Ri;Wd;Gf;constructor(t,e,i,s){GSet._e(this),t===void 0?t="":U.s(t,"string",Binding,"constructor:targetprop"),e===void 0?e=t:U.s(e,"string",Binding,"constructor:sourceprop"),i===void 0?i=null:i!==null&&U.S(i,Binding,"constructor:conv"),this.wT=-1,this.Ri=null,this.mc=t,this.Wd=0,this.Gf=0,this.iu=null,this.qa=e,this.su=i,s===void 0?(this.nu=1,this.ou=null):(this.nu=2,this.ou=s),this.Gk=new GSet,this.o=2}copy(){const t=new this.constructor;return this.cloneProtected(t),t}cloneProtected(t){t.mc=this.mc,t.Wd=this.Wd,t.Gf=this.Gf,t.iu=this.iu,t.qa=this.qa,t.su=this.su,t.nu=this.nu,t.ou=this.ou,t.o=this.o&-2}static OneWay=1;static TwoWay=2;static parseEnum(t,e){return U.S(t,Binding,"parseEnum:ctor"),i=>{let s=parseInt(i);return isNaN(s)&&(s=U.oh(t,i),s===null)?e:s}}ge(t){t in BindingMode?this.mode=t:U.wr(this,t)}static toString(t){return U.toString(t)}toString(){return"Binding("+this.targetProperty+":"+this.sourceProperty+(this.targetId!==-1?" "+this.targetId:"")+" "+BindingMode[this.mode]+")"}b(){return this.o=this.o|1,this}get targetId(){return this.wT}set targetId(t){this.u&&U.L(this),this.wT=t}get targetProperty(){return this.mc}set targetProperty(t){this.u&&U.L(this),U.s(t,"string",Binding,"targetProperty"),this.mc=t}get sourceProperty(){return this.qa}set sourceProperty(t){this.u&&U.L(this),U.s(t,"string",Binding,"sourceProperty"),this.qa=t}get u(){return(this.o&1)!==0}get isToData(){return(this.o&2)!==0}get isToObject(){return(this.o&4)!==0}get isToModel(){return(this.o&8)!==0}get isToTheme(){return(this.o&16)!==0}get xT(){return this.isToTheme&&!(this.isToData||this.isToObject||this.isToModel)}Rd(){return!1}get sourceName(){return this.iu}set sourceName(t){this.u&&U.L(this),t!==null&&U.s(t,"string",Binding,"sourceName"),this.iu=t,t!==null?this.o=this.o&-3|4:this.o=this.o|2}get converter(){return this.su}set converter(t){this.u&&U.L(this),t!==null&&U.S(t,Binding,"converter"),this.su=t}get backConverter(){return this.ou}set backConverter(t){this.u&&U.L(this),t!==null&&U.S(t,Binding,"backConverter"),this.ou=t}get mode(){return this.nu}set mode(t){this.u&&U.L(this),this.isToTheme&&t===2&&U.n("Theme Bindings cannot be TwoWay."),this.nu=t}makeTwoWay(t){return this.isToTheme&&U.n("Theme Bindings cannot be TwoWay."),this.mode=2,t&&(U.S(t,Binding,"makeTwoWay"),this.backConverter=t),this}ofObject(t){return this.u&&U.L(this),t===void 0&&(t=""),this.sourceName=t,this}ofModel(){return this.u&&U.L(this),this.o=this.o&-3&-5|8,this.iu=null,this}SD(t,e){const i=this.sourceName;let s=null;return i===null||i===""?s=t:i==="/"?s=e.part:i==="."?s=e:i===".."?s=e.panel:s=t.findObject(i),s}check(t){const e=this.mc,i=this.qa,s=this.su;(this.Rd()&&s===null&&this.ja===null&&e===""||s===null&&e==="")&&U.jt("Binding error: target property is the empty string: "+this.toString()),this.Rd()&&this.xT&&i===""&&s===null&&this.ja===null&&U.jt("Binding error: theme bindings require a source property when not using a converter: "+this.toString()),t&&typeof e=="string"&&(!U.nt(["setAttribute"])&&e.length>0&&e[0]!=="_"&&!U.ex(t,e)?U.jt("Binding error: undefined target property: "+e+" on "+t.toString()):e==="name"&&t instanceof GraphObject&&U.jt("Binding error: cannot modify GraphObject.name on "+t.toString()))}updateTarget(t,e,i,s){const n=this.qa;if(i!==void 0&&n!==""&&n!==i||this.isToTheme&&t.diagram===null)return;const o=this.mc,r=this.su;let l=e;if(n!==""&&!this.xT&&(l=Model.Tt(e,n)),l!==void 0)if(r===null){if(o!==""){if(this.Rd()){const a=t.diagram?.themeManager;if(l=this.dv(a,l,t,o),l===void 0)return}s?s.rt(t,o,l):(e instanceof GraphObject||e instanceof RowColumnDefinition)&&Model.rt(t,o,l)}}else try{if(o!==""){let a=r(l,t);if(this.Rd()){const h=t.diagram?.themeManager;if(a=this.dv(h,a,t,o),a===void 0)return}s?s.rt(t,o,a):(e instanceof GraphObject||e instanceof RowColumnDefinition)&&Model.rt(t,o,a)}else r(l,t)}catch{}}updateSource(t,e,i,s){if(this.nu!==2)return;const n=this.mc;if(i!==void 0&&n!==i)return;const o=this.qa,r=this.ou,l=s!==null?s.diagram:null,a=l!==null?l.model:null;let h=t;if(n!==""&&(h=Model.Tt(t,n)),h!==void 0&&!this.Gk.has(t))try{if(this.Gk.add(t),r===null){if(o!=="")a!==null?a.set(e,o,h):(e instanceof GraphObject||e instanceof RowColumnDefinition)&&(e[o]=h);else if(a!==null&&s!==null&&s.itemIndex>=0&&s.panel!==null&&Array.isArray(s.panel.itemArray)){const c=s.itemIndex,f=s.panel.itemArray;a.removeArrayItem(f,c),a.insertArrayItem(f,c,h)}}else try{if(o!==""){const c=r(h,e,a);a!==null?a.set(e,o,c):(e instanceof GraphObject||e instanceof RowColumnDefinition)&&(e[o]=c)}else{const c=r(h,e,a);if(c!==void 0&&a!==null&&s!==null&&s.itemIndex>=0&&s.panel!==null&&Array.isArray(s.panel.itemArray)){const f=s.itemIndex,u=s.panel.itemArray;a.removeArrayItem(u,f),a.insertArrayItem(u,f,c)}}}catch{}}finally{this.Gk.delete(t)}}}class ThemeBinding extends Binding{yw;ja;pc;constructor(t,e,i,s,n){super(t,e,s),i==null&&(i=""),n===void 0&&(n=null),this.yw=i,this.ja=n,this.pc=null,this.o=16}cloneProtected(t){super.cloneProtected(t),t.yw=this.yw,t.ja=this.ja,t.pc=this.pc}Rd(){return!0}get themeSource(){return this.yw}set themeSource(t){this.u&&U.L(this),t!==null&&U.s(t,"string",ThemeBinding,"themeSource"),this.yw=t,this.pc=null,t!==null?this.o=this.o|16:this.o=this.o&-17}get themeConverter(){return this.ja}set themeConverter(t){this.u&&U.L(this),t!==null&&U.S(t,ThemeBinding,"themeConverter"),this.ja=t}ofData(){return this.u&&U.L(this),this.o=this.o|2,this.iu=null,this}dv(t,e,i,s){if(!t||(this.xT&&(e=this.qa),!e&&e!==0))return;let n=this.themeSource;this.pc!==null?n=this.pc:typeof n=="string"&&n.includes(".")&&(this.pc=n.split("."),n=this.pc);let o=t.findValue(e,n,s);if(o===void 0&&U.jt(`Theme warning: ${e} could not be found when setting target property ${s}.`),t.readsCssVariables&&typeof o=="string"&&o.startsWith("var(")){const r=o.match(this.A3);r&&(o=getComputedStyle(root.document.documentElement).getPropertyValue(r[1]))}return U.nt(this.ja)&&(o=this.ja(o,i)),o}A3=/var\((.*)\)/}class Model{St;Og;Go;bT;Yi;Ce;Wa;ru;lu;Ig;Eg;Ug;Bg;ww;yc;cr;xw;Xo;Yk;constructor(t,e){if(GSet._e(this),this.St="",this.Og="",this.Go=!1,this.bT={},this.Yi=[],this.Ce=new GMap,this.Wa="key",this.ru=null,this.lu=null,this.Ig=!1,this.Eg=!1,this.Ug=!1,this.Bg=null,this.ww=100,this.yc="category",this.cr=new GMap,this.xw=[],this.Xo=!1,this.Yk=null,this.undoManager=new UndoManager,t!==void 0&&(Array.isArray(t)?this.nodeDataArray=t:e=t),e){Object.assign(this,e);const i=e.Changed;i&&(delete this.Changed,this.addChangedListener(i))}}cloneProtected(t){t.St=this.St,t.Og=this.Og,t.Go=this.Go,t.Wa=this.Wa,t.ru=this.ru,t.lu=this.lu,t.Ig=this.Ig,t.Eg=this.Eg,t.Ug=this.Ug,t.Bg=this.Bg,t.ww=this.ww,t.yc=this.yc}copy(){const t=new this.constructor;return this.cloneProtected(t),t}clear(){this.Yi=[],this.Ce.clear(),this.cr.clear(),this.undoManager.clear()}toString(t){if(t===void 0&&(t=0),t>1)return this.toJson();{let e=(this.name!==""?this.name:"")+" Model";if(t>0){e+=`
 node data:`;const i=this.nodeDataArray,s=i.length;for(let n=0;n<s;n++){const o=i[n];e+=" "+this.getKeyForNodeData(o)+":"+U.toString(o)}}return e}}toIncrementalData(t){t.change!==1&&U.n("Model.toIncrementalData argument is not a Transaction ChangedEvent:"+t.toString());const e=t.object;if(!t.isTransactionFinished||!(e instanceof Transaction))return null;const i=this.gv(e);return this.kT(e,t.propertyName==="FinishedUndo",i)}kT(t,e,i){const s=this;let n=!1;const o=new GSet,r=new GSet,l=new GSet;t.changes.each(u=>{if(u.model===s){if(u.modelChange==="nodeDataArray")u.change===3?o.add(u.newValue):u.change===4&&l.add(u.oldValue);else if(s.containsNodeData(u.object))u.object!==null&&r.add(u.object);else if(u.change===2&&(s.modelData===u.object||u.propertyName==="modelData"))n=!0;else if(u.object!==null)if(i.has(u.object)){const d=i.get(u.object);d&&d.each(m=>{s.containsNodeData(m)&&r.add(m)})}else{if(u.object instanceof Model||s.sc()&&s.containsLinkData(u.object))return;s.mv(u.object).each(m=>{r.add(m)})}}});const a=new GSet;o.each(u=>{const d=s.getKeyForNodeData(u);d!==void 0&&a.add(d),e||r.add(u)});const h=new GSet;l.each(u=>{const d=s.getKeyForNodeData(u);d!==void 0&&h.add(d),e&&r.add(u)});const c=s.cloneDeep(r.toArray());let f=null;return n&&(f===null&&(f={}),f.modelData=this.cloneDeep(this.modelData)),a.count>0&&(f===null&&(f={}),e?f.removedNodeKeys=a.toArray():f.insertedNodeKeys=a.toArray()),c.length>0&&(f===null&&(f={}),f.modifiedNodeData=c),h.count>0&&(f===null&&(f={}),e?f.insertedNodeKeys=h.toArray():f.removedNodeKeys=h.toArray()),f}cloneDeep(t){return this.Vg(t,!0)}Vg(t,e,i,s){if(!U.Z(t))return t;i||(i=new GMap);const n=i.get(t);if(n)return n;let o;if(Array.isArray(t)){o=[],i.set(t,o);for(let r=0;r<t.length;r++){const l=t[r];o.push(this.Vg(l,!1,i,s))}}else if(t instanceof Point||t instanceof Size||t instanceof Rect||t instanceof Margin||t instanceof Spot)o=t.copy(),i.set(t,o);else{if(t instanceof Brush||t instanceof Geometry)return t;if(t instanceof List)o=new List().addAll(this.Vg(t.toArray(),!1,i,s)),i.set(t,o);else if(t instanceof GSet)o=new GSet().addAll(this.Vg(t.toArray(),!1,i,s)),i.set(t,o);else if(t instanceof GMap)o=new GMap().addAll(this.Vg(t.toArray(),!1,i,s)),i.set(t,o);else if(t instanceof Date)o=new Date(t),i.set(t,o);else if(t instanceof RegExp)o=new RegExp(t),i.set(t,o),o.lastIndex=t.lastIndex;else if(Model.PT(null,"",t))o=t;else if(U.nt(t.copy))o=t.copy(),i.set(t,o);else{o={},i.set(t,o);for(const r in t){if(r==="__gohashid")continue;const l=t[r];o[r]=this.Vg(l,!1,i,s)}}}return o}quote(t){return JSON.stringify(t).replace(/[\u007F-\uFFFF]/g,i=>{const s="0000"+i.charCodeAt(0).toString(16);return"\\u"+s.substring(s.length-4)})}zg(){let t="";return this.name!==""&&(t+=`,
  "name": `+this.quote(this.name)),this.dataFormat!==""&&(t+=`,
  "dataFormat": `+this.quote(this.dataFormat)),this.isReadOnly&&(t+=`,
  "isReadOnly": `+this.isReadOnly),this.nodeKeyProperty!=="key"&&typeof this.nodeKeyProperty=="string"&&(t+=`,
  "nodeKeyProperty": `+this.quote(this.nodeKeyProperty)),this.copiesArrays&&(t+=`,
  "copiesArrays": true`),this.copiesArrayObjects&&(t+=`,
  "copiesArrayObjects": true`),this.copiesKey&&(t+=`,
  "copiesKey": true`),this.pointsDigits!==100&&(t+=`,
  "pointsDigits": `+this.pointsDigits.toString()),this.nodeCategoryProperty!=="category"&&typeof this.nodeCategoryProperty=="string"&&(t+=`,
  "nodeCategoryProperty": `+this.quote(this.nodeCategoryProperty)),t}bw(t){t.name&&(this.name=t.name),t.dataFormat&&(this.dataFormat=t.dataFormat),t.isReadOnly&&(this.isReadOnly=!0),t.nodeKeyProperty&&(this.nodeKeyProperty=t.nodeKeyProperty),t.copiesArrays&&(this.copiesArrays=!0),t.copiesArrayObjects&&(this.copiesArrayObjects=!0),t.copiesKey!==void 0&&(this.copiesKey=t.copiesKey),t.pointsDigits!==void 0&&(this.pointsDigits=parseInt(t.pointsDigits)),t.nodeCategoryProperty&&(this.nodeCategoryProperty=t.nodeCategoryProperty)}pv(){const t=this.modelData;return`,
  "modelData": `+this.yv(t)}wv(t){const e=t.modelData;U.Z(e)&&(this.replaceJsonObjects(e),this.modelData=e)}ST(){const t=this.modelData;let e=!1;for(const s in t)if(!this.Kk(t,s,t[s])){e=!0;break}let i="";return e&&(i=this.pv()),i+`,
  "nodeDataArray": `+this.Ja(this.nodeDataArray,!0)}MT(t){this.wv(t);const e=t.nodeDataArray;Array.isArray(e)&&(this.replaceJsonObjects(e),this.nodeDataArray=e)}CT(t,e,i){if(t===e)return!0;if(typeof t!=typeof e||U.nt(t)||U.nt(e))return!1;if(Array.isArray(t)&&Array.isArray(e)){if(i.get(t)===e)return!0;if(i.set(t,e),t.length!==e.length)return!1;for(let s=0;s<t.length;s++)if(!this.CT(t[s],e[s],i))return!1;return!0}else if(U.Z(t)&&U.Z(e)){if(i.get(t)===e)return!0;i.set(t,e);for(const s in t){const n=t[s];if(this.Kk(t,s,n))continue;const o=e[s];if(o===void 0||!this.CT(n,o,i))return!1}for(const s in e){const n=e[s];if(this.Kk(e,s,n))continue;const o=t[s];if(o===void 0||!this.CT(o,n,i))return!1}return!0}return!1}static xv=`,
  "insertedNodeKeys": `;static D3=`,
  "modifiedNodeData": `;static bv=`,
  "removedNodeKeys": `;gv(t){let e=new GMap;const i=(s,n)=>{const o=n.part;if(!o)return;const r=o.data;if(s===r)return;let l=e.get(s);l===null?(l=new GSet,l.add(r),e.set(s,l)):l.add(r)};return t.changes.each(s=>{if(s.diagram!==null){const n=s.change;if(n===2){if(s.object!==null){const o=s.object.panel;if(o){const r=o.data;r&&i(r,o)}}}else if(n===3||n===4){const o=s.object,r=o.itemArray;r&&i(r,o)}}}),e}mv(t){const e=new GSet;for(let i=0;i<this.nodeDataArray.length;i++){const s=this.nodeDataArray[i];this.Hk(t,s,s,e)}return e}Hk(t,e,i,s){if(Array.isArray(e))for(let n=0;n<e.length;n++){const o=e[n];if(o===t)return s.add(i),!0;if(this.Hk(t,o,i,s))return!0}else if(U.Z(e)&&Object.getPrototypeOf(e)===Object.prototype)for(const n in e){const o=e[n];if(o===t)return s.add(i),!0;if(this.Hk(t,o,i,s))return!0}return!1}NT(t,e,i){const s=this;let n=!1;const o=new GSet,r=new GSet,l=new GSet;t.changes.each(f=>{if(f.model===s){if(f.modelChange==="nodeDataArray")f.change===3?o.add(f.newValue):f.change===4&&l.add(f.oldValue);else if(s.containsNodeData(f.object))f.object!==null&&r.add(f.object);else if(f.change===2&&(s.modelData===f.object||f.propertyName==="modelData"))n=!0;else if(f.object!==null)if(i.has(f.object)){const u=i.get(f.object);u&&u.each(d=>{s.containsNodeData(d)&&r.add(d)})}else{if(f.object instanceof Model||s.sc()&&s.containsLinkData(f.object))return;s.mv(f.object).each(d=>{r.add(d)})}}});const a=new GSet;o.each(f=>{const u=s.getKeyForNodeData(f);u!==void 0&&a.add(u),e||r.add(f)});const h=new GSet;l.each(f=>{const u=s.getKeyForNodeData(f);u!==void 0&&h.add(u),e&&r.add(f)});let c="";return n&&(c+=this.pv()),a.count>0&&(c+=(e?Model.bv:Model.xv)+this.Ja(a.toArray(),!0)),r.count>0&&(c+=Model.D3+this.Ja(r.toArray(),!0)),h.count>0&&(c+=(e?Model.xv:Model.bv)+this.Ja(h.toArray(),!0)),c}kw(t){(t.name!==void 0&&t.name!==this.name||t.dataFormat!==void 0&&t.dataFormat!==this.dataFormat||t.isReadOnly!==void 0&&t.isReadOnly!==this.isReadOnly||t.nodeKeyProperty!==void 0&&t.nodeKeyProperty!==this.nodeKeyProperty||t.copiesArrays!==void 0&&t.copiesArrays!==this.copiesArrays||t.copiesArrayObjects!==void 0&&t.copiesArrayObjects!==this.copiesArrayObjects||t.copiesKey!==void 0&&t.copiesKey!==this.copiesKey||t.nodeCategoryProperty!==void 0&&t.nodeCategoryProperty!==this.nodeCategoryProperty)&&U.n("applyIncrementalJson cannot change Model properties"),this.wv(t);const e=t.insertedNodeKeys,i=t.modifiedNodeData,s=new GMap;if(Array.isArray(i))for(let o=0;o<i.length;o++){const r=i[o],l=this.getKeyForNodeData(r);l!=null&&s.set(l,r)}if(Array.isArray(e)){const o=e.length;for(let r=0;r<o;r++){const l=e[r];let a=this.findNodeDataForKey(l);if(a===null){const h=s.get(l);a=h||this.copyNodeData({}),a!==null&&(this.setKeyForNodeData(a,l),this.addNodeData(a))}}}if(Array.isArray(i)){const o=i.length;for(let r=0;r<o;r++){const l=i[r],a=this.getKeyForNodeData(l),h=this.findNodeDataForKey(a);if(h!==null){for(const c in l)c==="__gohashid"||c===this.nodeKeyProperty||(this.NS()||this.lv())&&c===this.nodeIsGroupProperty||this.set(h,c,l[c]);this.Xg(l,h)}}}const n=t.removedNodeKeys;if(Array.isArray(n)){const o=n.length;for(let r=0;r<o;r++){const l=n[r],a=this.findNodeDataForKey(l);a!==null&&this.removeNodeData(a)}}}toIncrementalJson(t,e){t.change!==1&&U.n("Model.toIncrementalJson argument is not a Transaction ChangedEvent:"+t.toString());const i=t.object;if(!t.isTransactionFinished||!(i instanceof Transaction))return'{ "incremental": 0 }';e===void 0&&(e=U.Jn(this));const s=this.gv(i),n=this.NT(i,t.propertyName==="FinishedUndo",s);return'{ "class": '+this.quote(e)+', "incremental": 1'+this.zg()+n+"}"}toIncrementalJSON(t,e){return this.toIncrementalJson(t,e)}toJson(t){return t===void 0&&(t=U.Jn(this)),'{ "class": '+this.quote(t)+this.zg()+this.ST()+"}"}toJSON(t){return this.toJson(t)}applyIncrementalJson(t){let e=null;if(typeof t=="string")try{e=root.JSON.parse(t)}catch{}else U.Z(t)?e=t:U.n("Unable to modify a Model from: "+t);const i=e.incremental;typeof i!="number"&&U.n("Unable to apply non-incremental changes to Model: "+t),i!==0&&(this.startTransaction("applyIncrementalJson"),this.kw(e),this.commitTransaction("applyIncrementalJson"))}applyIncrementalJSON(t){return this.applyIncrementalJson(t)}static fromJson(t,e){e===void 0&&(e=null),e!==null&&U.le(e,Model,Model,"fromJson:model");let i=null;if(typeof t=="string")try{i=root.JSON.parse(t)}catch{}else U.Z(t)?i=t:U.n("Unable to construct a Model from: "+t);if(e===null){const s=Model.F3(i);s===null||s instanceof Model?e=s:U.n("Unable to construct a Model of declared class: "+i.class)}return e===null&&(e=Model.kv()),e.bw(i),e.MT(i),e}static fromJSON(t,e){return this.fromJson(t,e)}static kv(){return new Model}static F3(t){let e=null,i=t.class;if(typeof i=="string")try{let s=null;i.indexOf("go.")===0?s=Model.TT(i.substring(3)):(s=Model.TT(i),s===null&&(s=root[i])),U.nt(s)&&(e=new s)}catch{}return e}replaceJsonObjects(t){if(Array.isArray(t)){const e=t.length;for(let i=0;i<e;i++){const s=t[i];U.Z(s)&&this.Pv(t,i,this.replaceJsonObjects(s))}}else if(U.Z(t)){for(const e in t){const i=t[e];if(U.Z(i)){const s=this.replaceJsonObjects(i);t[e]=s,this.replaceJsonPropertyValue(t,e,s)}}return this.v3(t)}return t}replaceJsonPropertyValue(t,e,i){if(e==="points"&&Array.isArray(i)){let s=i.length%2===0;for(let n=0;n<i.length;n++)if(typeof i[n]!="number"){s=!1;break}if(s){const n=new List;for(let o=0;o<i.length/2;o++)n.add(new Point(i[o*2],i[o*2+1]));t[e]=n}}}writeJsonValue(t){return t===void 0?"undefined":t===null?"null":t===!0?"true":t===!1?"false":typeof t=="string"?this.quote(t):typeof t=="number"?t===1/0?"9e9999":t===-1/0?"-9e9999":isNaN(t)?'{"class":"NaN"}':t.toString():t instanceof Boolean?this.writeJsonValue(t.valueOf()):t instanceof String?this.writeJsonValue(t.valueOf()):t instanceof Number?this.writeJsonValue(t.valueOf()):t instanceof Date?'{"class":"Date", "value":"'+t.toJSON()+'"}':Array.isArray(t)?this.Ja(t):U.Z(t)?this.yv(t):U.nt(t)?"null":'"'+t.toString()+'"'}Ja(t,e){e===void 0&&(e=!1);const i=t.length;if(i<=0)return"[]";const s=new StringBuilder;s.add("["),e&&i>1&&s.add(`
`);for(let n=0;n<i;n++){const o=t[n];o!==void 0&&(n>0&&(s.add(","),e&&s.add(`
`)),s.add(this.writeJsonValue(o)))}return e&&i>1&&s.add(`
`),s.add("]"),s.toString()}Kk(t,e,i){return!!(i===void 0||e==="__gohashid"||e[0]==="_"||U.nt(i))}Ze(t){return isNaN(t)?"NaN":t===1/0?"9e9999":t===-1/0?"-9e9999":t}yv(t){const e=t;if(e instanceof Point)t={class:"go.Point",x:this.Ze(e.x),y:this.Ze(e.y)};else if(e instanceof Size)t={class:"go.Size",width:this.Ze(e.width),height:this.Ze(e.height)};else if(e instanceof Rect)t={class:"go.Rect",x:this.Ze(e.x),y:this.Ze(e.y),width:this.Ze(e.width),height:this.Ze(e.height)};else if(e instanceof Margin)t={class:"go.Margin",top:this.Ze(e.top),right:this.Ze(e.right),bottom:this.Ze(e.bottom),left:this.Ze(e.left)};else if(e instanceof Spot)e.isSpot()?t={class:"go.Spot",x:this.Ze(e.x),y:this.Ze(e.y),offsetX:this.Ze(e.offsetX),offsetY:this.Ze(e.offsetY)}:t={class:"go.Spot",enum:e.toString()};else if(e instanceof Brush){if(t={class:"go.Brush",type:BrushType[e.type]},e.type===1?t.color=e.color:(e.type===2||e.type===3)&&(t.start=e.start,t.end=e.end,e.type===3&&(e.startRadius!==0&&(t.startRadius=this.Ze(e.startRadius)),isNaN(e.endRadius)||(t.endRadius=this.Ze(e.endRadius)))),e.colorStops!==null){const n={},o=e.colorStops.iterator;for(;o.next();){const r=o.key,l=o.value;n[r]=l}t.colorStops=n}}else if(e instanceof Geometry)t={class:"go.Geometry",type:GeometryType[e.type]},e.startX!==0&&(t.startX=this.Ze(e.startX)),e.startY!==0&&(t.startY=this.Ze(e.startY)),e.endX!==0&&(t.endX=this.Ze(e.endX)),e.endY!==0&&(t.endY=this.Ze(e.endY)),e.spot1.equals(Spot.TopLeft)||(t.spot1=e.spot1),e.spot2.equals(Spot.BottomRight)||(t.spot2=e.spot2),e.type===4&&(t.path=Geometry.stringify(e));else if(Model.PT(null,"",e))return"{}";let i="{",s=!0;for(const n in t){const o=this.Tt(t,n);this.Kk(t,n,o)||(s?s=!1:i+=",",i+=this.quote(n)+":"+this.writeJsonPropertyValue(n,o))}return i+="}",i}writeJsonPropertyValue(t,e){if(t==="points"&&e instanceof List){const i=e;let s="[";const n=i.iterator;for(;n.next();){const o=n.value;s.length>1&&(s+=","),s+=this.Sv(o.x),s+=",",s+=this.Sv(o.y)}return s+="]",s}else return this.writeJsonValue(e)}Sv(t){if(t===1/0)return"9e9999";if(t===-1/0)return"-9e9999";if(isNaN(t))return"0";const e=this.pointsDigits;return e>16?t.toString():t.toFixed(e)}get pointsDigits(){return this.ww}set pointsDigits(t){t<0?t=0:t>100&&(t=100),this.ww=t}Qe(t){return typeof t=="number"?t:t==="NaN"?NaN:t==="9e9999"?1/0:t==="-9e9999"?-1/0:parseFloat(t)}v3(t){if(!U.Z(t))return t;let e=t.class||"";if(typeof e!="string"||e==="")return t;if(e==="NaN")return NaN;if(e==="Date")return new Date(t.value);if(e.indexOf("go.")!==0)return t;e=e.substring(3);let i=t;if(e==="Point")i=new Point(this.Qe(t.x),this.Qe(t.y));else if(e==="Size")i=new Size(this.Qe(t.width),this.Qe(t.height));else if(e==="Rect")i=new Rect(this.Qe(t.x),this.Qe(t.y),this.Qe(t.width),this.Qe(t.height));else if(e==="Margin")i=new Margin(this.Qe(t.top),this.Qe(t.right),this.Qe(t.bottom),this.Qe(t.left));else if(e==="Spot")typeof t.enum=="string"?i=Spot.parse(t.enum):i=new Spot(this.Qe(t.x),this.Qe(t.y),this.Qe(t.offsetX),this.Qe(t.offsetY));else if(e==="Brush"){const s=new Brush;s.type=U.oh(BrushType,t.type)??1,typeof t.color=="string"&&(s.color=t.color),t.start instanceof Spot&&(s.start=t.start),t.end instanceof Spot&&(s.end=t.end),typeof t.startRadius=="number"&&(s.startRadius=this.Qe(t.startRadius)),typeof t.endRadius=="number"&&(s.endRadius=this.Qe(t.endRadius));const n=t.colorStops;if(U.Z(n))for(const o in n){const r=parseFloat(o);s.addColorStop(r,n[o])}i=s}else if(e==="Geometry"){let s=null;typeof t.path=="string"?s=Geometry.parse(t.path):s=new Geometry,s.type=U.oh(GeometryType,t.type)??1,typeof t.startX=="number"&&(s.startX=this.Qe(t.startX)),typeof t.startY=="number"&&(s.startY=this.Qe(t.startY)),typeof t.endX=="number"&&(s.endX=this.Qe(t.endX)),typeof t.endY=="number"&&(s.endY=this.Qe(t.endY)),t.spot1 instanceof Spot&&(s.spot1=t.spot1),t.spot2 instanceof Spot&&(s.spot2=t.spot2),i=s}else if(e==="EnumValue"){let s=t.classType;s.indexOf("go.")===0&&(s=s.substring(3));const n=Model.TT(s);U.nt(n)&&(i=U.oh(n,t.name))}return i}get name(){return this.St}set name(t){const e=this.St;e!==t&&(U.s(t,"string",Model,"name"),this.St=t,this.t("name",e,t))}get dataFormat(){return this.Og}set dataFormat(t){const e=this.Og;e!==t&&(U.s(t,"string",Model,"dataFormat"),this.Og=t,this.t("dataFormat",e,t))}get isReadOnly(){return this.Go}set isReadOnly(t){const e=this.Go;e!==t&&(U.s(t,"boolean",Model,"isReadOnly"),this.Go=t,this.t("isReadOnly",e,t))}get modelData(){return this.bT}set modelData(t){const e=this.modelData;e!==t&&(U.Fc(t,Model,"modelData"),this.containsNodeData(t)&&U.n("Model.modelData Object must not be used by the rest of the model: "+t),this.bT=t,this.t("modelData",e,t),this.updateTargetBindings(t))}addChangedListener(t){return U.S(t,Model,"addChangedListener:listener"),this.xw.push(t),this}removeChangedListener(t){U.S(t,Model,"removeChangedListener:listener");const e=this.xw.indexOf(t);e>=0&&this.xw.splice(e,1)}_2(t){this.skipsUndoManager||this.undoManager.handleChanged(t),this.Mv(t)}Mv(t){this.xw.forEach(e=>e(t))}BR(t){this.Mv(t)}raiseChangedEvent(t,e,i,s,n,o,r){this.Ot("",t,e,i,s,n,o,r)}raiseChanged(t,e,i,s,n){this.Ot("",2,t,this,e,i,s,n)}t(t,e,i,s,n){this.Ot("",2,t,this,e,i,s,n)}raiseDataChanged(t,e,i,s,n,o){this.Ot("",2,e,t,i,s,n,o)}Ot(t,e,i,s,n,o,r,l){r===void 0&&(r=null),l===void 0&&(l=null);const a=new ChangedEvent;a.model=this,a.change=e,a.modelChange=t,a.propertyName=i,a.object=s,a.oldValue=n,a.oldParam=r,a.newValue=o,a.newParam=l,this._2(a)}get undoManager(){return this.Yk}set undoManager(t){const e=this.Yk;e!==t&&(e&&e.removeModel(this),this.Yk=t,t.addModel(this))}get skipsUndoManager(){return this.Xo}set skipsUndoManager(t){U.s(t,"boolean",Model,"skipsUndoManager"),this.Xo=t}changeState(t,e){if(t!==null&&t.model===this)if(t.change===2){const i=t.object,s=t.propertyName,n=t.getValue(e);if(i!==null&&s===this.nodeKeyProperty&&this.containsNodeData(i)){const o=t.getValue(!e);o!==void 0&&this.Ce.delete(o),n!==void 0&&this.Ce.set(n,i)}this.rt(i,s,n)}else if(t.change===3){const i=t.newParam;if(t.modelChange==="nodeDataArray"){const s=t.newValue;if(U.Z(s)&&typeof i=="number"){const n=this.getKeyForNodeData(s);e?(this.Yi[i]===s&&this.Do(this.Yi,i),n!==void 0&&this.Ce.delete(n)):(this.Yi[i]!==s&&this.fr(this.Yi,i,s),n!==void 0&&this.Ce.set(n,s))}}else if(t.modelChange===""){let s=t.object;if(s&&!Array.isArray(s)&&t.propertyName&&(s=this.Tt(s,t.propertyName)),Array.isArray(s)&&typeof i=="number"){const n=t.newValue;e?this.Do(s,i):this.fr(s,i,n)}}else U.n("unknown ChangeType.Insert modelChange: "+t.toString())}else if(t.change===4){const i=t.oldParam;if(t.modelChange==="nodeDataArray"){const s=t.oldValue;if(U.Z(s)&&typeof i=="number"){const n=this.getKeyForNodeData(s);e?(this.Yi[i]!==s&&this.fr(this.Yi,i,s),n!==void 0&&this.Ce.set(n,s)):(this.Yi[i]===s&&this.Do(this.Yi,i),n!==void 0&&this.Ce.delete(n))}}else if(t.modelChange===""){let s=t.object;if(s&&!Array.isArray(s)&&t.propertyName&&(s=this.Tt(s,t.propertyName)),Array.isArray(s)&&typeof i=="number"){const n=t.oldValue;e?this.fr(s,i,n):this.Do(s,i)}}else U.n("unknown ChangeType.Remove modelChange: "+t.toString())}else t.change===1||U.n("unknown ChangedEvent: "+t.toString())}startTransaction(t){return this.undoManager.startTransaction(t)}commitTransaction(t){return this.undoManager.commitTransaction(t)}rollbackTransaction(){return this.undoManager.rollbackTransaction()}commit(t,e){let i=e;i===void 0&&(i="");const s=this.skipsUndoManager;i===null&&(this.skipsUndoManager=!0,i=""),this.undoManager.startTransaction(i);let n=!1;try{t(this),n=!0}finally{n?this.undoManager.commitTransaction(i):this.undoManager.rollbackTransaction(),this.skipsUndoManager=s}}updateTargetBindings(t,e){e===void 0&&(e=""),this.Ot("SourceChanged",1,e,t,null,null)}get nodeKeyProperty(){return this.Wa}set nodeKeyProperty(t){const e=this.Wa;e!==t&&(this.Yn(t,Model,"nodeKeyProperty"),t===""&&U.n("Model.nodeKeyProperty may not be the empty string"),this.Ce.count>0&&U.n("Cannot set Model.nodeKeyProperty when there is existing node data"),this.Wa=t,this.t("nodeKeyProperty",e,t))}Yn(t,e,i){typeof t!="string"&&!U.nt(t)&&U.ri(t,"string or function",e,i)}getKeyForNodeData(t){if(t===null)return;const e=this.Wa;if(e==="")return;const i=this.Tt(t,e);if(i!==void 0){if(this.isKeyType(i))return i;U.n("Key value for node data "+t+" is not a number or a string: "+i)}}setKeyForNodeData(t,e){if((e==null||!this.isKeyType(e))&&U.ri(e,"number or string",Model,"setKeyForNodeData:key"),t===null)return;const i=this.Wa;if(i==="")return;if(!this.containsNodeData(t)){this.rt(t,i,e);return}const s=this.Tt(t,i);if(s!==e){if(this.findNodeDataForKey(e)!==null)return;this.rt(t,i,e),s!==void 0&&this.Ce.delete(s),this.Ce.set(e,t),this.Ot("nodeKey",2,i,t,s,e),typeof i=="string"&&this.updateTargetBindings(t,i),this.Pw(s,e)}}get makeUniqueKeyFunction(){return this.ru}set makeUniqueKeyFunction(t){const e=this.ru;e!==t&&(t!==null&&U.S(t,Model,"makeUniqueKeyFunction"),this.ru=t,this.t("makeUniqueKeyFunction",e,t))}isKeyType(t){return typeof t=="number"||typeof t=="string"}containsNodeData(t){if(t===null)return!1;const e=this.getKeyForNodeData(t);return e===void 0?!1:this.Ce.get(e)===t}findNodeDataForKey(t){return t===null&&U.n("Model.findNodeDataForKey:key must not be null"),t===void 0||!this.isKeyType(t)?null:this.Ce.get(t)}get nodeDataArray(){return this.Yi}set nodeDataArray(t){const e=this.Yi;if(e!==t){this.LT(t,Model,"nodeDataArray"),this.Ce.clear(),this.AT();const i=t.length;for(let o=0;o<i;o++){const r=t[o];U.Z(r)||U.n("Model.nodeDataArray must only contain Objects, not: "+r),r===this.modelData&&U.n("nodeDataArray Objects must not be the shared Model.modelData")}this.Yi=t;const s=new List;for(let o=0;o<i;o++){const r=t[o],l=this.getKeyForNodeData(r);l===void 0||this.Ce.get(l)!==null?s.add(r):this.Ce.set(l,r)}const n=s.iterator;for(;n.next();){const o=n.value;this.makeNodeDataKeyUnique(o);const r=this.getKeyForNodeData(o);r!==void 0&&this.Ce.set(r,o)}this.Ot("nodeDataArray",2,"nodeDataArray",this,e,t);for(let o=0;o<i;o++){const r=t[o];this.Gg(r),this.Yg(r)}}}qk(t){return t===void 0?!1:this.Ce.has(t)}makeNodeDataKeyUnique(t){if(t===null)return;const e=this.Wa;if(e==="")return;let i=this.getKeyForNodeData(t);if(i!==void 0&&!this.qk(i))return;const s=this.ru;if(s!==null&&(i=s(this,t),i!=null&&!this.qk(i))){this.rt(t,e,i);return}if(typeof i=="string"){let n=2;for(;this.qk(i+n);)n++;this.rt(t,e,i+n)}else if(i===void 0||typeof i=="number"){let n=-this.Ce.count-1;for(;this.qk(n);)n--;this.rt(t,e,n)}}addNodeData(t){t!==null&&(t===this.modelData&&U.n("Model.addNodeData cannot add the shared Model.modelData Object"),this.containsNodeData(t)||this.ov(t,!0))}ov(t,e){let i=this.getKeyForNodeData(t);if(i===void 0)this.makeNodeDataKeyUnique(t),i=this.getKeyForNodeData(t);else{if(this.Ce.get(i)===t)return;this.makeNodeDataKeyUnique(t),i=this.getKeyForNodeData(t)}i===void 0&&U.n("Model.makeNodeDataKeyUnique failed on "+t+".  Data not added to Model."),this.Ce.set(i,t);let s=null;e&&(s=this.Yi.length,this.fr(this.Yi,s,t)),this.Ot("nodeDataArray",3,"nodeDataArray",this,null,t,null,s),this.Gg(t),this.Yg(t)}addNodeDataCollection(t){if(Array.isArray(t)){const e=t.length;for(let i=0;i<e;i++)this.addNodeData(t[i])}else{const e=t.iterator;for(;e.next();){const i=e.value;this.addNodeData(i)}}}removeNodeData(t){t!==null&&this.nv(t,!0)}nv(t,e){const i=this.getKeyForNodeData(t);i!==void 0&&this.Ce.delete(i);let s=null;if(e){if(s=this.Yi.indexOf(t),s<0)return;this.Do(this.Yi,s)}this.Ot("nodeDataArray",4,"nodeDataArray",this,t,null,s,null),this.Sw(t)}removeNodeDataCollection(t){if(Array.isArray(t)){const e=t.length;for(let i=0;i<e;i++)this.removeNodeData(t[i])}else{const e=t.iterator;for(;e.next();){const i=e.value;this.removeNodeData(i)}}}mergeNodeDataArray(t){if(t===this.nodeDataArray||!Array.isArray(t))return;const e=new GSet;e.addAll(this.Ce.iteratorKeys);const i=new GSet,s=t.length;for(let o=0;o<s;o++){const r=t[o],l=this.getKeyForNodeData(r);if(l!==void 0){i.add(l);const a=this.findNodeDataForKey(l);if(a===r)continue;if(a!==null)this.assignAllDataProperties(a,r),this.Xg(r,a);else{const h=this.cloneDeep(r);this.setKeyForNodeData(h,l),this.addNodeData(h)}}else{const a=this.cloneDeep(r);this.addNodeData(a);const h=this.getKeyForNodeData(a);h!==void 0&&i.add(h)}}const n=e.iterator;for(;n.next();){const o=n.value;if(!i.has(o)){const r=this.findNodeDataForKey(o);r&&this.removeNodeData(r)}}}Pw(t,e){if(e===void 0)return;const i=this.pw(t);i instanceof GSet&&this.cr.set(e,i)}AT(){}Gg(t){}Yg(t){}Sw(t){}dn(t,e){if(t===void 0)return;let i=this.cr.get(t);i===null&&(i=new GSet,this.cr.set(t,i)),i.add(e)}un(t,e){if(t===void 0)return;const i=this.cr.get(t);i instanceof GSet&&(e==null?this.cr.delete(t):(i.delete(e),i.count===0&&this.cr.delete(t)))}pw(t){if(t===void 0)return null;const e=this.cr.get(t);return e instanceof GSet?e:null}mB(t){t===void 0?this.cr.clear():this.cr.delete(t)}get copyNodeDataFunction(){return this.lu}set copyNodeDataFunction(t){const e=this.lu;e!==t&&(t!==null&&U.S(t,Model,"copyNodeDataFunction"),this.lu=t,this.t("copyNodeDataFunction",e,t))}get copiesArrays(){return this.Ig}set copiesArrays(t){const e=this.Ig;e!==t&&(t!==null&&U.s(t,"boolean",Model,"copiesArrays"),this.Ig=t,this.t("copiesArrays",e,t))}get copiesArrayObjects(){return this.Eg}set copiesArrayObjects(t){const e=this.Eg;e!==t&&(t!==null&&U.s(t,"boolean",Model,"copiesArrayObjects"),this.Eg=t,this.t("copiesArrayObjects",e,t))}get copiesKey(){return this.Ug}set copiesKey(t){const e=this.Ug;e!==t&&(t!==null&&U.s(t,"boolean",Model,"copiesKey"),this.Ug=t,this.t("copiesKey",e,t))}copyNodeData(t){let e;const i=this.lu;return i!==null?e=i(t,this):e=this.jk(t,!0),e}jk(t,e){if(U.Z(t))if(Array.isArray(t))if(this.copiesArrays){const i=t,s=[];for(let n=0;n<i.length;n++){const o=i[n],r=this.jk(o,this.copiesArrayObjects);s.push(r)}return s}else return t;else{if(t instanceof Point||t instanceof Size||t instanceof Rect||t instanceof Margin||t instanceof Spot)return t.copy();if(e){const i=t,s=i.constructor,n=s?new s:{},o=!this.copiesKey&&typeof this.nodeKeyProperty=="string"?this.nodeKeyProperty:null;for(const r in i){if(r==="__gohashid"){n.__gohashid=void 0;continue}if(r===o){n[o]=void 0;continue}const l=this.Tt(i,r);if(!U.Z(l))n[r]=l;else if(Model.PT(i,r,l))this.rt(n,r,l);else{const a=this.jk(l,!1);this.rt(n,r,a)}}return n}else return t}else return t}get afterCopyFunction(){return this.Bg}set afterCopyFunction(t){const e=this.Bg;e!==t&&(t!==null&&U.S(t,Model,"afterCopyFunction"),this.Bg=t,this.t("afterCopyFunction",e,t))}static PT(t,e,i){const s=U.Jn(i);return i instanceof Model||i instanceof UndoManager||i instanceof Transaction||i instanceof ChangedEvent||i instanceof GraphObject||i instanceof RowColumnDefinition||i instanceof Diagram||i instanceof EventTarget||s==="Layer"||s==="RowColumnDefinition"||s.indexOf("Animation")>=0||s.indexOf("Tool")>=0||s.indexOf("CommandHandler")>=0||s.indexOf("Layout")>=0}static Cv=!1;set(t,e,i){if(this.containsNodeData(t)){if(e===this.nodeKeyProperty){this.setKeyForNodeData(t,i);return}else if(e===this.nodeCategoryProperty){this.setCategoryForNodeData(t,i);return}}else!Model.Cv&&t instanceof GraphObject&&(Model.Cv=!0,U.jt('Model.set is modifying a GraphObject, "'+t.toString()+'"'),U.jt("  Is that really your intent?"));const s=this.Tt(t,e);s!==i&&(this.rt(t,e,i),this.raiseDataChanged(t,e,s,i))}setDataProperty(t,e,i){this.set(t,e,i)}assignAllDataProperties(t,e){if(!e)return;const i=this.containsNodeData(t);for(const s in e)s!=="__gohashid"&&(i&&s===this.nodeKeyProperty||this.set(t,s,e[s]))}addArrayItem(t,e){this.insertArrayItem(t,-1,e)}insertArrayItem(t,e,i){e<0&&(e=t.length),t=this.fr(t,e,i),this.Ot("",3,"",t,null,i,null,e)}removeArrayItem(t,e){e===void 0&&(e=-1),t===this.Yi&&U.n("Model.removeArrayItem should not be called on the Model.nodeDataArray"),e===-1&&(e=t.length-1);const i=t[e];t=this.Do(t,e),this.Ot("",4,"",t,i,null,e,null)}get nodeCategoryProperty(){return this.yc}set nodeCategoryProperty(t){const e=this.yc;e!==t&&(this.Yn(t,Model,"nodeCategoryProperty"),this.yc=t,this.t("nodeCategoryProperty",e,t))}getCategoryForNodeData(t){if(t===null)return"";const e=this.yc;if(e==="")return"";const i=this.Tt(t,e);if(i===void 0)return"";if(typeof i=="string")return i;U.n("getCategoryForNodeData found a non-string category for "+t+": "+i)}setCategoryForNodeData(t,e){if(U.s(e,"string",Model,"setCategoryForNodeData:cat"),t===null)return;const i=this.yc;if(i==="")return;if(!this.containsNodeData(t)){this.rt(t,i,e);return}let s=this.Tt(t,i);s===void 0&&(s=""),s!==e&&(this.rt(t,i,e),this.Ot("nodeCategory",2,i,t,s,e))}Xg(t,e){this.setCategoryForNodeData(e,this.getCategoryForNodeData(t))}get type(){return"Model"}Ex(){return!1}NS(){return!1}lv(){return!1}sc(){return!1}Ux(){return!1}Bh(){return!1}static V2(){return new Model}Tt(t,e){return Model.Tt(t,e)}static Tt(t,e){if(!t||!e)return null;let i;try{U.nt(e)?i=e(t):U.nt(t.getAttribute)?(i=t.getAttribute(e),i===null&&(i=void 0)):i=t[e]}catch{}return i}rt(t,e,i){Model.rt(t,e,i)}static rt(t,e,i){if(!(!t||!e)){try{U.nt(e)?e(t,i):U.nt(t.setAttribute)?t.setAttribute(e,i):t[e]=i}catch{}return t}}LT(t,e,i){Array.isArray(t)||U.ri(t,"Array",e,i)}Pv(t,e,i){return t[e]=i,t}fr(t,e,i){return e>=t.length?t.push(i):t.splice(e,0,i),t}Do(t,e){return e>=t.length?t.pop():t.splice(e,1),t}static TT(t){return Model.DT[t]?Model.DT[t]:root.go!==void 0&&root.go[t]?root.go[t]:null}static Dl(t,e){Model.DT[e]=t}static DT={}}Model.fromJSON=Model.fromJson=Model.fromJson;Model.Dl(Brush,"Brush"),Model.Dl(Geometry,"Geometry"),Model.Dl(Margin,"Margin"),Model.Dl(Point,"Point"),Model.Dl(Rect,"Rect"),Model.Dl(Size,"Size"),Model.Dl(Spot,"Spot"),Model.Dl(Model,"Model");class GraphLinksModel extends Model{zs;ur;Be;$a;au;hu;Jl;Fo;vo;wc;xc;bc;gn;cu;Fl;constructor(t,e,i){if(super(),this.zs=[],this.ur=new GSet,this.Be=new GMap,this.$a="",this.au=null,this.hu=null,this.Jl=null,this.Fo="from",this.vo="to",this.wc="",this.xc="",this.bc="category",this.gn="",this.cu="isGroup",this.Fl="group",e!==void 0&&(this.linkDataArray=e),t!==void 0&&(Array.isArray(t)?this.nodeDataArray=t:i=t),i){Object.assign(this,i);const s=i.Changed;s&&(delete this.Changed,this.addChangedListener(s))}}cloneProtected(t){super.cloneProtected(t),t.$a=this.$a,t.au=this.au,t.hu=this.hu,t.Fo=this.Fo,t.vo=this.vo,t.wc=this.wc,t.xc=this.xc,t.bc=this.bc,t.gn=this.gn,t.cu=this.cu,t.Fl=this.Fl}copy(){const t=new this.constructor;return this.cloneProtected(t),t}clear(){this.zs=[],this.Be.clear(),this.ur.clear(),super.clear()}toString(t){if(t===void 0&&(t=0),t>=2)return this.toJson();{let e=(this.name!==""?this.name:"")+" GraphLinksModel";if(t>0){e+=`
 node data:`;let i=this.nodeDataArray,s=i.length,n=0;for(n=0;n<s;n++){const r=i[n];e+=" "+this.getKeyForNodeData(r)+":"+Binding.toString(r)}e+=`
 link data:`;const o=this.linkDataArray;for(s=o.length,n=0;n<s;n++){const r=o[n];e+=" "+this.Gi(r,!0)+"-->"+this.Gi(r,!1)}}return e}}kT(t,e,i){if(this.linkKeyProperty===""){const f=this.skipsUndoManager;this.skipsUndoManager=!0,this.linkKeyProperty="key",this.skipsUndoManager=f}let s=super.kT(t,e,i);const n=this,o=new GSet,r=new GSet,l=new GSet;t.changes.each(f=>{if(f.model===n){if(f.modelChange==="linkDataArray")f.change===3?o.add(f.newValue):f.change===4&&l.add(f.oldValue);else if(n.containsLinkData(f.object))f.object!==null&&r.add(f.object);else if(f.object!==null)if(f.object!==null&&i.has(f.object)){const u=i.get(f.object);u&&u.each(d=>{n.containsLinkData(d)&&r.add(d)})}else{if(f.object instanceof Model||n.containsNodeData(f.object))return;n.Nv(f.object).each(d=>r.add(d))}}});const a=new GSet;o.each(f=>{const u=n.getKeyForLinkData(f);u!==void 0&&a.add(u),e||r.add(f)});const h=new GSet;l.each(f=>{const u=n.getKeyForLinkData(f);u!==void 0&&h.add(u),e&&r.add(f)});const c=n.cloneDeep(r.toArray());return a.count>0&&(s===null&&(s={}),e?s.removedLinkKeys=a.toArray():s.insertedLinkKeys=a.toArray()),c.length>0&&(s===null&&(s={}),s.modifiedLinkData=c),h.count>0&&(s===null&&(s={}),e?s.insertedLinkKeys=h.toArray():s.removedLinkKeys=h.toArray()),s}zg(){const t=super.zg();let e="";return this.linkCategoryProperty!=="category"&&typeof this.linkCategoryProperty=="string"&&(e+=`,
  "linkCategoryProperty": `+this.quote(this.linkCategoryProperty)),this.linkKeyProperty!==""&&typeof this.linkKeyProperty=="string"&&(e+=`,
  "linkKeyProperty": `+this.quote(this.linkKeyProperty)),this.linkFromKeyProperty!=="from"&&typeof this.linkFromKeyProperty=="string"&&(e+=`,
  "linkFromKeyProperty": `+this.quote(this.linkFromKeyProperty)),this.linkToKeyProperty!=="to"&&typeof this.linkToKeyProperty=="string"&&(e+=`,
  "linkToKeyProperty": `+this.quote(this.linkToKeyProperty)),this.linkFromPortIdProperty!==""&&typeof this.linkFromPortIdProperty=="string"&&(e+=`,
  "linkFromPortIdProperty": `+this.quote(this.linkFromPortIdProperty)),this.linkToPortIdProperty!==""&&typeof this.linkToPortIdProperty=="string"&&(e+=`,
  "linkToPortIdProperty": `+this.quote(this.linkToPortIdProperty)),this.linkLabelKeysProperty!==""&&typeof this.linkLabelKeysProperty=="string"&&(e+=`,
  "linkLabelKeysProperty": `+this.quote(this.linkLabelKeysProperty)),this.nodeIsGroupProperty!=="isGroup"&&typeof this.nodeIsGroupProperty=="string"&&(e+=`,
  "nodeIsGroupProperty": `+this.quote(this.nodeIsGroupProperty)),this.nodeGroupKeyProperty!=="group"&&typeof this.nodeGroupKeyProperty=="string"&&(e+=`,
  "nodeGroupKeyProperty": `+this.quote(this.nodeGroupKeyProperty)),t+e}bw(t){super.bw(t),t.linkKeyProperty&&(this.linkKeyProperty=t.linkKeyProperty),t.linkFromKeyProperty&&(this.linkFromKeyProperty=t.linkFromKeyProperty),t.linkToKeyProperty&&(this.linkToKeyProperty=t.linkToKeyProperty),t.linkFromPortIdProperty&&(this.linkFromPortIdProperty=t.linkFromPortIdProperty),t.linkToPortIdProperty&&(this.linkToPortIdProperty=t.linkToPortIdProperty),t.linkCategoryProperty&&(this.linkCategoryProperty=t.linkCategoryProperty),t.linkLabelKeysProperty&&(this.linkLabelKeysProperty=t.linkLabelKeysProperty),t.nodeIsGroupProperty&&(this.nodeIsGroupProperty=t.nodeIsGroupProperty),t.nodeGroupKeyProperty&&(this.nodeGroupKeyProperty=t.nodeGroupKeyProperty)}ST(){const t=super.ST(),e=`,
  "linkDataArray": `+this.Ja(this.linkDataArray,!0);return t+e}MT(t){super.MT(t);const e=t.linkDataArray;Array.isArray(e)&&(this.replaceJsonObjects(e),this.linkDataArray=e)}Tv=`,
  "insertedLinkKeys": `;R3=`,
  "modifiedLinkData": `;Lv=`,
  "removedLinkKeys": `;Nv(t){const e=new GSet;for(let i=0;i<this.linkDataArray.length;i++){const s=this.linkDataArray[i];this.Hk(t,s,s,e)}return e}NT(t,e,i){if(this.linkKeyProperty===""){const f=this.skipsUndoManager;this.skipsUndoManager=!0,this.linkKeyProperty="key",this.skipsUndoManager=f}const s=super.NT(t,e,i),n=this,o=new GSet,r=new GSet,l=new GSet;t.changes.each(f=>{if(f.model===n){if(f.modelChange==="linkDataArray")f.change===3?o.add(f.newValue):f.change===4&&l.add(f.oldValue);else if(n.containsLinkData(f.object))f.object!==null&&r.add(f.object);else if(f.object!==null)if(f.object!==null&&i.has(f.object)){const u=i.get(f.object);u&&u.each(d=>{n.containsLinkData(d)&&r.add(d)})}else{if(f.object instanceof Model||n.containsNodeData(f.object))return;n.Nv(f.object).each(d=>r.add(d))}}});const a=new GSet;o.each(f=>{const u=n.getKeyForLinkData(f);u!==void 0&&a.add(u),e||r.add(f)});const h=new GSet;l.each(f=>{const u=n.getKeyForLinkData(f);u!==void 0&&h.add(u),e&&r.add(f)});let c=s;return a.count>0&&(c+=(e?this.Lv:this.Tv)+this.Ja(a.toArray(),!0)),r.count>0&&(c+=this.R3+this.Ja(r.toArray(),!0)),h.count>0&&(c+=(e?this.Tv:this.Lv)+this.Ja(h.toArray(),!0)),c}kw(t){(t.linkCategoryProperty!==void 0&&t.linkCategoryProperty!==this.linkCategoryProperty||t.linkKeyProperty!==void 0&&t.linkKeyProperty!==this.linkKeyProperty||t.linkFromKeyProperty!==void 0&&t.linkFromKeyProperty!==this.linkFromKeyProperty||t.linkToKeyProperty!==void 0&&t.linkToKeyProperty!==this.linkToKeyProperty||t.linkFromPortIdProperty!==void 0&&t.linkFromPortIdProperty!==this.linkFromPortIdProperty||t.linkToPortIdProperty!==void 0&&t.linkToPortIdProperty!==this.linkToPortIdProperty||t.linkLabelKeysProperty!==void 0&&t.linkLabelKeysProperty!==this.linkLabelKeysProperty||t.nodeIsGroupProperty!==void 0&&t.nodeIsGroupProperty!==this.nodeIsGroupProperty||t.nodeGroupKeyProperty!==void 0&&t.nodeGroupKeyProperty!==this.nodeGroupKeyProperty)&&U.n("applyIncrementalJson cannot change Model properties"),super.kw(t);const e=t.insertedLinkKeys;if(Array.isArray(e)){const n=e.length;for(let o=0;o<n;o++){const r=e[o];let l=this.findLinkDataForKey(r);l===null&&(l=this.copyLinkData({}),this.setKeyForLinkData(l,r),this.addLinkData(l))}}const i=t.modifiedLinkData;if(Array.isArray(i)){const n=i.length;for(let o=0;o<n;o++){const r=i[o],l=this.getKeyForLinkData(r),a=this.findLinkDataForKey(l);if(a!==null){for(const h in r)h==="__gohashid"||h===this.linkKeyProperty||this.set(a,h,r[h]);this.Av(r,a)}}}const s=t.removedLinkKeys;if(Array.isArray(s)){const n=s.length;for(let o=0;o<n;o++){const r=s[o],l=this.findLinkDataForKey(r);l!==null&&this.removeLinkData(l)}}}changeState(t,e){if(!(t===null||t.model!==this)){if(t.change===2){const i=t.object,s=t.propertyName;if(i!==null&&s===this.linkKeyProperty&&this.containsLinkData(i)){const n=t.getValue(e),o=t.getValue(!e);o!==void 0&&this.Be.delete(o),n!==void 0&&this.Be.set(n,i),this.rt(i,s,n);return}}else if(t.change===3){let i=t.newParam;if(t.modelChange==="linkDataArray"){const s=t.newValue;if(U.Z(s)&&typeof i=="number"){const n=this.getKeyForLinkData(s);e?(this.ur.delete(s),this.zs[i]===s&&this.Do(this.linkDataArray,i),n!==void 0&&this.Be.delete(n)):(this.ur.add(s),this.zs[i]!==s&&this.fr(this.zs,i,s),n!==void 0&&this.Be.set(n,s))}return}else if(t.modelChange==="linkLabelKeys"){const s=t.object,n=s!==null?this.getLabelKeysForLinkData(s):null;Array.isArray(n)&&typeof i=="number"&&(e?(i=n.indexOf(t.newValue),i>=0&&this.Do(n,i)):n.indexOf(t.newValue)<0&&this.fr(n,i,t.newValue));return}}else if(t.change===4){let i=t.oldParam;if(t.modelChange==="linkDataArray"){const s=t.oldValue;if(U.Z(s)&&typeof i=="number"){const n=this.getKeyForLinkData(s);e?(this.ur.add(s),this.zs[i]!==s&&this.fr(this.zs,i,s),n!==void 0&&this.Be.set(n,s)):(this.ur.delete(s),this.zs[i]===s&&this.Do(this.linkDataArray,i),n!==void 0&&this.Be.delete(n))}return}else if(t.modelChange==="linkLabelKeys"){const s=t.object,n=s!==null?this.getLabelKeysForLinkData(s):null;Array.isArray(n)&&typeof i=="number"&&(e?n.indexOf(t.oldValue)<0&&this.fr(n,i,t.oldValue):(i=n.indexOf(t.oldValue),i>=0&&this.Do(n,i)));return}}super.changeState(t,e)}}get archetypeNodeData(){return this.Jl}set archetypeNodeData(t){const e=this.Jl;e!==t&&(t!==null&&U.Fc(t,GraphLinksModel,"archetypeNodeData"),this.Jl=t,this.t("archetypeNodeData",e,t))}FT(t){if(t===void 0)return;const e=this.Jl;if(e!==null){let i=this.findNodeDataForKey(t);i===null&&(i=this.copyNodeData(e),this.rt(i,this.nodeKeyProperty,t),this.addNodeData(i))}return t}get linkFromKeyProperty(){return this.Fo}set linkFromKeyProperty(t){const e=this.Fo;e!==t&&(this.Yn(t,GraphLinksModel,"linkFromKeyProperty"),this.Fo=t,this.t("linkFromKeyProperty",e,t))}getFromKeyForLinkData(t){return this.Gi(t,!0)}setFromKeyForLinkData(t,e){this.vg(t,e,!0)}get linkToKeyProperty(){return this.vo}set linkToKeyProperty(t){const e=this.vo;e!==t&&(this.Yn(t,GraphLinksModel,"linkToKeyProperty"),this.vo=t,this.t("linkToKeyProperty",e,t))}getToKeyForLinkData(t){return this.Gi(t,!1)}setToKeyForLinkData(t,e){this.vg(t,e,!1)}Gi(t,e){if(t===null)return;const i=e?this.Fo:this.vo;if(i==="")return;const s=this.Tt(t,i);if(s!==void 0){if(this.isKeyType(s))return s;U.n((e?"FromKey":"ToKey")+" value for link data "+t+" is not a number or a string: "+s)}}vg(t,e,i){if(e===null&&(e=void 0),e!==void 0&&!this.isKeyType(e)&&U.ri(e,"number or string",GraphLinksModel,i?"setFromKeyForLinkData:key":"setToKeyForLinkData:key"),t===null)return;const s=i?this.Fo:this.vo;if(s==="")return;if(e=this.FT(e),!this.containsLinkData(t)){this.rt(t,s,e);return}const n=this.Tt(t,s);n!==e&&(this.un(n,t),this.rt(t,s,e),this.findNodeDataForKey(e)===null&&this.dn(e,t),this.Ot(i?"linkFromKey":"linkToKey",2,s,t,n,e),typeof s=="string"&&this.updateTargetBindings(t,s))}get linkFromPortIdProperty(){return this.wc}set linkFromPortIdProperty(t){const e=this.wc;e!==t&&(this.Yn(t,GraphLinksModel,"linkFromPortIdProperty"),this.wc=t,this.t("linkFromPortIdProperty",e,t))}getFromPortIdForLinkData(t){return this.zk(t,!0)}setFromPortIdForLinkData(t,e){this.Rg(t,e,!0)}get linkToPortIdProperty(){return this.xc}set linkToPortIdProperty(t){const e=this.xc;e!==t&&(this.Yn(t,GraphLinksModel,"linkToPortIdProperty"),this.xc=t,this.t("linkToPortIdProperty",e,t))}getToPortIdForLinkData(t){return this.zk(t,!1)}setToPortIdForLinkData(t,e){this.Rg(t,e,!1)}zk(t,e){if(t===null)return"";const i=e?this.wc:this.xc;if(i==="")return"";const s=this.Tt(t,i);return s===void 0?"":s}Rg(t,e,i){if(U.s(e,"string",GraphLinksModel,i?"setFromPortIdForLinkData:portname":"setToPortIdForLinkData:portname"),t===null)return;const s=i?this.wc:this.xc;if(s==="")return;if(!this.containsLinkData(t)){this.rt(t,s,e);return}let n=this.Tt(t,s);n===void 0&&(n=""),n!==e&&(this.rt(t,s,e),this.Ot(i?"linkFromPortId":"linkToPortId",2,s,t,n,e),typeof s=="string"&&this.updateTargetBindings(t,s))}get linkLabelKeysProperty(){return this.gn}set linkLabelKeysProperty(t){const e=this.gn;e!==t&&(this.Yn(t,GraphLinksModel,"linkLabelKeysProperty"),this.gn=t,this.t("linkLabelKeysProperty",e,t))}getLabelKeysForLinkData(t){if(t===null)return GraphLinksModel.EmptyArray;const e=this.gn;if(e==="")return GraphLinksModel.EmptyArray;const i=this.Tt(t,e);return i===void 0?GraphLinksModel.EmptyArray:i}setLabelKeysForLinkData(t,e){if(this.LT(e,GraphLinksModel,"setLabelKeysForLinkData:arr"),t===null)return;const i=this.gn;if(i==="")return;if(!this.containsLinkData(t)){this.rt(t,i,e);return}let s=this.Tt(t,i);if(s===void 0&&(s=GraphLinksModel.EmptyArray),s!==e){if(Array.isArray(s)){const o=s.length;for(let r=0;r<o;r++){const l=s[r];this.un(l,t)}}this.rt(t,i,e);const n=e.length;for(let o=0;o<n;o++){const r=e[o];this.findNodeDataForKey(r)===null&&this.dn(r,t)}this.Ot("linkLabelKeys",2,i,t,s,e),typeof i=="string"&&this.updateTargetBindings(t,i)}}addLabelKeyForLinkData(t,e){if(e==null||(this.isKeyType(e)||U.ri(e,"number or string",GraphLinksModel,"addLabelKeyForLinkData:key"),t===null))return;const i=this.gn;if(i==="")return;const s=this.Tt(t,i);if(s===void 0){const n=[];n.push(e),this.setLabelKeysForLinkData(t,n)}else if(Array.isArray(s)){let n=s.indexOf(e);if(n>=0)return;n=s.length,s.push(e),this.containsLinkData(t)&&(this.findNodeDataForKey(e)===null&&this.dn(e,t),this.Ot("linkLabelKeys",3,i,t,null,e,null,n))}else U.n(i+" property is not an Array; cannot addLabelKeyForLinkData: "+t)}removeLabelKeyForLinkData(t,e){if(e==null||(this.isKeyType(e)||U.ri(e,"number or string",GraphLinksModel,"removeLabelKeyForLinkData:key"),t===null))return;const i=this.gn;if(i==="")return;const s=this.Tt(t,i);if(Array.isArray(s)){const n=s.indexOf(e);if(n<0)return;this.Do(s,n),this.containsLinkData(t)&&(this.un(e,t),this.Ot("linkLabelKeys",4,i,t,e,null,n,null))}else s!==void 0&&U.n(i+" property is not an Array; cannot removeLabelKeyforLinkData: "+t)}get linkDataArray(){return this.zs}set linkDataArray(t){const e=this.zs;if(e!==t){this.LT(t,GraphLinksModel,"linkDataArray"),this.Be.clear();const i=t.length;for(let n=0;n<i;n++){const o=t[n];U.Z(o)||U.n("GraphLinksModel.linkDataArray must only contain Objects, not: "+o)}if(this.zs=t,this.linkKeyProperty!==""){const n=new List;for(let r=0;r<i;r++){const l=t[r],a=this.getKeyForLinkData(l);a===void 0||this.Be.get(a)!==null?n.add(l):this.Be.set(a,l)}const o=n.iterator;for(;o.next();){const r=o.value;this.makeLinkDataKeyUnique(r);const l=this.getKeyForLinkData(r);l!==void 0&&this.Be.set(l,r)}}const s=new GSet;for(let n=0;n<i;n++){const o=t[n];s.add(o)}this.ur=s,this.Ot("linkDataArray",2,"linkDataArray",this,e,t);for(let n=0;n<i;n++){const o=t[n];this.vT(o)}}}get linkKeyProperty(){return this.$a}set linkKeyProperty(t){const e=this.$a;if(e!==t){this.Yn(t,GraphLinksModel,"linkKeyProperty"),this.$a=t,this.Be.clear();const i=this.linkDataArray.length;for(let s=0;s<i;s++){const n=this.linkDataArray[s];let o=this.getKeyForLinkData(n);o===void 0&&(this.makeLinkDataKeyUnique(n),o=this.getKeyForLinkData(n)),o!==void 0&&this.Be.set(o,n)}this.t("linkKeyProperty",e,t)}}getKeyForLinkData(t){if(t===null)return;const e=this.$a;if(e==="")return;const i=this.Tt(t,e);if(i!==void 0){if(this.isKeyType(i))return i;U.n("Key value for link data "+t+" is not a number or a string: "+i)}}setKeyForLinkData(t,e){if((e==null||!this.isKeyType(e))&&U.ri(e,"number or string",GraphLinksModel,"setKeyForLinkData:key"),t===null)return;const i=this.$a;if(i==="")return;if(!this.containsLinkData(t)){this.rt(t,i,e);return}const s=this.Tt(t,i);if(s!==e){if(this.findLinkDataForKey(e)!==null)return;this.rt(t,i,e),s!==void 0&&this.Be.delete(s),this.Be.set(e,t),this.Ot("linkKey",2,i,t,s,e),typeof i=="string"&&this.updateTargetBindings(t,i)}}get makeUniqueLinkKeyFunction(){return this.au}set makeUniqueLinkKeyFunction(t){const e=this.au;e!==t&&(t!==null&&U.S(t,GraphLinksModel,"makeUniqueLinkKeyFunction"),this.au=t,this.t("makeUniqueLinkKeyFunction",e,t))}findLinkDataForKey(t){return t===null&&U.n("GraphLinksModel.findLinkDataForKey:key must not be null"),t===void 0||!this.isKeyType(t)?null:this.Be.get(t)}Wk(t){return t===void 0?!1:this.Be.has(t)}makeLinkDataKeyUnique(t){if(t===null)return;const e=this.$a;if(e==="")return;let i=this.getKeyForLinkData(t);if(i!==void 0&&!this.Wk(i))return;const s=this.au;if(s!==null&&(i=s(this,t),i!=null&&!this.Wk(i))){this.rt(t,e,i);return}if(typeof i=="string"){let n=2;for(;this.Wk(i+n);)n++;this.rt(t,e,i+n)}else if(i===void 0||typeof i=="number"){let n=-this.Be.count-1;for(;this.Wk(n);)n--;this.rt(t,e,n)}}containsLinkData(t){return t===null?!1:this.ur.has(t)}addLinkData(t){t!==null&&(this.containsLinkData(t)||this.uv(t,!0))}uv(t,e){if(this.linkKeyProperty!==""){let s=this.getKeyForLinkData(t);if(s===void 0)this.makeLinkDataKeyUnique(t),s=this.getKeyForLinkData(t);else{if(this.Be.get(s)===t)return;this.makeLinkDataKeyUnique(t),s=this.getKeyForLinkData(t)}s===void 0&&U.n("GraphLinksModel.makeLinkDataKeyUnique failed on "+t+". Data not added to model."),this.Be.set(s,t)}this.ur.add(t);let i=null;e&&(i=this.zs.length,this.fr(this.zs,i,t)),this.Ot("linkDataArray",3,"linkDataArray",this,null,t,null,i),this.vT(t)}addLinkDataCollection(t){if(Array.isArray(t)){const e=t.length;for(let i=0;i<e;i++)this.addLinkData(t[i])}else{const e=t.iterator;for(;e.next();){const i=e.value;this.addLinkData(i)}}}removeLinkData(t){t!==null&&this.fv(t,!0)}fv(t,e){this.ur.delete(t);const i=this.getKeyForLinkData(t);i!==void 0&&this.Be.delete(i);let s=null;if(e){if(s=this.zs.indexOf(t),s<0)return;this.Do(this.zs,s)}this.Ot("linkDataArray",4,"linkDataArray",this,t,null,s,null),this.O3(t)}removeLinkDataCollection(t){if(Array.isArray(t)){const e=t.length;for(let i=0;i<e;i++)this.removeLinkData(t[i])}else{const e=t.iterator;for(;e.next();){const i=e.value;this.removeLinkData(i)}}}mergeLinkDataArray(t){if(this.linkKeyProperty===""&&U.n("GraphLinksModel.linkKeyProperty must not be an empty string for .mergeLinkDataArray() to succeed."),t===this.linkDataArray||!Array.isArray(t))return;const e=new GSet;e.addAll(this.Be.iteratorKeys);const i=new GSet,s=t.length;for(let o=0;o<s;o++){const r=t[o],l=this.getKeyForLinkData(r);if(l!==void 0){i.add(l);const a=this.findLinkDataForKey(l);if(a===r)continue;if(a!==null)this.assignAllDataProperties(a,r),this.Av(r,a);else{const h=this.cloneDeep(r);this.setKeyForLinkData(h,l),this.addLinkData(h)}}else{const a=this.cloneDeep(r);this.addLinkData(a);const h=this.getKeyForLinkData(a);h!==void 0&&i.add(h)}}const n=e.iterator;for(;n.next();){const o=n.value;if(!i.has(o)){const r=this.findLinkDataForKey(o);r&&this.removeLinkData(r)}}}vT(t){let e=this.Gi(t,!0);e=this.FT(e),this.findNodeDataForKey(e)===null&&this.dn(e,t),e=this.Gi(t,!1),e=this.FT(e),this.findNodeDataForKey(e)===null&&this.dn(e,t);const i=this.getLabelKeysForLinkData(t);if(Array.isArray(i)){const s=i.length;for(let n=0;n<s;n++)e=i[n],this.findNodeDataForKey(e)===null&&this.dn(e,t)}}O3(t){let e=this.Gi(t,!0);this.un(e,t),e=this.Gi(t,!1),this.un(e,t);const i=this.getLabelKeysForLinkData(t);if(Array.isArray(i)){const s=i.length;for(let n=0;n<s;n++)e=i[n],this.un(e,t)}}get copyLinkDataFunction(){return this.hu}set copyLinkDataFunction(t){const e=this.hu;e!==t&&(t!==null&&U.S(t,GraphLinksModel,"copyLinkDataFunction"),this.hu=t,this.t("copyLinkDataFunction",e,t))}copyLinkData(t){let e;const i=this.hu;return i!==null?e=i(t,this):e=this.jk(t,!0),U.Z(e)&&(this.Fo!==""&&this.rt(e,this.Fo,void 0),this.vo!==""&&this.rt(e,this.vo,void 0),this.gn!==""&&this.rt(e,this.gn,[])),e}get nodeIsGroupProperty(){return this.cu}set nodeIsGroupProperty(t){const e=this.cu;e!==t&&(this.Yn(t,GraphLinksModel,"nodeIsGroupProperty"),this.cu=t,this.t("nodeIsGroupProperty",e,t))}isGroupForNodeData(t){if(t===null)return!1;const e=this.cu;return e===""?!1:!!this.Tt(t,e)}isGroupForData(t){return this.isGroupForNodeData(t)}get nodeGroupKeyProperty(){return this.Fl}set nodeGroupKeyProperty(t){const e=this.Fl;e!==t&&(this.Yn(t,GraphLinksModel,"nodeGroupKeyProperty"),this.Fl=t,this.t("nodeGroupKeyProperty",e,t))}getGroupKeyForNodeData(t){if(t===null)return;const e=this.Fl;if(e==="")return;const i=this.Tt(t,e);if(i!==void 0){if(this.isKeyType(i))return i;U.n("GroupKey value for node data "+t+" is not a number or a string: "+i)}}getGroupForData(t){return this.getGroupKeyForNodeData(t)}setGroupKeyForNodeData(t,e){if(e===null&&(e=void 0),e!==void 0&&!this.isKeyType(e)&&U.ri(e,"number or string",GraphLinksModel,"setGroupKeyForNodeData:key"),t===null)return;const i=this.Fl;if(i==="")return;if(!this.containsNodeData(t)){this.rt(t,i,e);return}const s=this.Tt(t,i);s!==e&&(this.un(s,t),this.rt(t,i,e),this.findNodeDataForKey(e)===null&&this.dn(e,t),this.Ot("nodeGroupKey",2,i,t,s,e),typeof i=="string"&&this.updateTargetBindings(t,i))}setGroupForData(t,e){this.setGroupKeyForNodeData(t,e)}copyNodeData(t){const e=super.copyNodeData(t);return this.setGroupKeyForNodeData(e,void 0),e}set(t,e,i){if(this.containsNodeData(t)){if(e===this.nodeKeyProperty){this.setKeyForNodeData(t,i);return}else if(e===this.nodeCategoryProperty){this.setCategoryForNodeData(t,i);return}else if(e===this.nodeGroupKeyProperty){this.setGroupKeyForNodeData(t,i);return}}else if(this.containsLinkData(t)){if(e===this.linkFromKeyProperty){this.vg(t,i,!0);return}else if(e===this.linkToKeyProperty){this.vg(t,i,!1);return}else if(e===this.linkFromPortIdProperty){this.Rg(t,i,!0);return}else if(e===this.linkToPortIdProperty){this.Rg(t,i,!1);return}else if(e===this.linkKeyProperty){this.setKeyForLinkData(t,i);return}else if(e===this.linkCategoryProperty){this.setCategoryForLinkData(t,i);return}else if(e===this.linkLabelKeysProperty){this.setLabelKeysForLinkData(t,i);return}}const s=this.Tt(t,e);s!==i&&(this.rt(t,e,i),this.raiseDataChanged(t,e,s,i))}assignAllDataProperties(t,e){if(!e)return;const i=this.containsNodeData(t),s=this.containsLinkData(t);for(const n in e)if(n!=="__gohashid"&&!(i&&n===this.nodeKeyProperty)){{if(i&&n===this.nodeIsGroupProperty&&this.Tt(t,n)===e[n])continue;if(s&&n===this.linkKeyProperty)continue}this.set(t,n,e[n])}}Pw(t,e){super.Pw(t,e);const i=this.Ce.iterator;for(;i.next();){const n=i.value;this.RT(n,t,e)}const s=this.ur.iterator;for(;s.next();){const n=s.value;this.I3(n,t,e)}}RT(t,e,i){if(this.getGroupKeyForNodeData(t)===e){const n=this.Fl;this.rt(t,n,i),this.Ot("nodeGroupKey",2,n,t,e,i),typeof n=="string"&&this.updateTargetBindings(t,n)}}I3(t,e,i){if(this.Gi(t,!0)===e){const r=this.Fo;this.rt(t,r,i),this.Ot("linkFromKey",2,r,t,e,i),typeof r=="string"&&this.updateTargetBindings(t,r)}if(this.Gi(t,!1)===e){const r=this.vo;this.rt(t,r,i),this.Ot("linkToKey",2,r,t,e,i),typeof r=="string"&&this.updateTargetBindings(t,r)}const o=this.getLabelKeysForLinkData(t);if(Array.isArray(o)){const r=o.length,l=this.gn;for(let a=0;a<r;a++)o[a]===e&&(this.Pv(o,a,i),this.Ot("linkLabelKeys",3,l,t,e,i,a,a))}}AT(){super.AT();const t=this.linkDataArray,e=t.length;for(let i=0;i<e;i++){const s=t[i];this.vT(s)}}Gg(t){super.Gg(t);const e=this.getKeyForNodeData(t),i=this.pw(e);if(i!==null){const s=U.ot(),n=i.iterator;for(;n.next();){const o=n.value;if(this.containsNodeData(o)){if(this.getGroupKeyForNodeData(o)===e){const l=this.Fl;this.Ot("nodeGroupKey",2,l,o,e,e),typeof l=="string"&&this.updateTargetBindings(o,l),s.push(o)}}else{if(this.Gi(o,!0)===e){const h=this.Fo;this.Ot("linkFromKey",2,h,o,e,e),typeof h=="string"&&this.updateTargetBindings(o,h),s.push(o)}if(this.Gi(o,!1)===e){const h=this.vo;this.Ot("linkToKey",2,h,o,e,e),typeof h=="string"&&this.updateTargetBindings(o,h),s.push(o)}const a=this.getLabelKeysForLinkData(o);if(Array.isArray(a)){const h=a.length,c=this.gn;for(let f=0;f<h;f++)a[f]===e&&(this.Ot("linkLabelKeys",3,c,o,e,e,f,f),s.push(o))}}}for(let o=0;o<s.length;o++)this.un(e,s[o]);U._(s)}}Yg(t){super.Yg(t);const e=this.getGroupKeyForNodeData(t);this.findNodeDataForKey(e)===null&&this.dn(e,t)}Sw(t){super.Sw(t);const e=this.getGroupKeyForNodeData(t);this.un(e,t)}get linkCategoryProperty(){return this.bc}set linkCategoryProperty(t){const e=this.bc;e!==t&&(this.Yn(t,GraphLinksModel,"linkCategoryProperty"),this.bc=t,this.t("linkCategoryProperty",e,t))}getCategoryForLinkData(t){if(t===null)return"";const e=this.bc;if(e==="")return"";const i=this.Tt(t,e);if(i===void 0)return"";if(typeof i=="string")return i;U.n("getCategoryForLinkData found a non-string category for "+t+": "+i)}getLinkCategoryForData(t){return this.getCategoryForLinkData(t)}setCategoryForLinkData(t,e){if(U.s(e,"string",GraphLinksModel,"setCategoryForLinkData:cat"),t===null)return;const i=this.bc;if(i==="")return;if(!this.containsLinkData(t)){this.rt(t,i,e);return}let s=this.Tt(t,i);s===void 0&&(s=""),s!==e&&(this.rt(t,i,e),this.Ot("linkCategory",2,i,t,s,e),typeof i=="string"&&this.updateTargetBindings(t,i))}setLinkCategoryForData(t,e){this.setCategoryForLinkData(t,e)}Xg(t,e){super.Xg(t,e),this.setGroupKeyForNodeData(e,this.getGroupKeyForNodeData(t))}Av(t,e){this.setCategoryForLinkData(e,this.getCategoryForLinkData(t)),this.setFromKeyForLinkData(e,this.getFromKeyForLinkData(t)),this.setToKeyForLinkData(e,this.getToKeyForLinkData(t)),this.setLabelKeysForLinkData(e,this.getLabelKeysForLinkData(t)),this.setFromPortIdForLinkData(e,this.getFromPortIdForLinkData(t)),this.setToPortIdForLinkData(e,this.getToPortIdForLinkData(t))}get type(){return"GraphLinksModel"}NS(){return!0}sc(){return!0}Ux(){return!0}Bh(){return!0}static EmptyArray=Object.freeze([])}Model.Dl(GraphLinksModel,"GraphLinksModel");Model.kv=()=>new GraphLinksModel;Model.V2=()=>new GraphLinksModel;class TreeModel extends Model{vl;kc;constructor(t,e){if(super(),this.vl="parent",this.kc="parentLinkCategory",t!==void 0&&(Array.isArray(t)?this.nodeDataArray=t:e=t),e){Object.assign(this,e);const i=e.Changed;i&&(delete this.Changed,this.addChangedListener(i))}}cloneProtected(t){super.cloneProtected(t),t.vl=this.vl,t.kc=this.kc}copy(){const t=new this.constructor;return this.cloneProtected(t),t}toString(t){if(t===void 0&&(t=0),t>=2)return this.toJson();{let e=(this.name!==""?this.name:"")+" TreeModel";if(t>0){e+=`
 node data:`;const i=this.nodeDataArray,s=i.length;for(let n=0;n<s;n++){const o=i[n];e+=" "+this.getKeyForNodeData(o)+":"+Binding.toString(o)}}return e}}zg(){const t=super.zg();let e="";return this.nodeParentKeyProperty!=="parent"&&typeof this.nodeParentKeyProperty=="string"&&(e+=`,
  "nodeParentKeyProperty": `+this.quote(this.nodeParentKeyProperty)),t+e}bw(t){super.bw(t),t.nodeParentKeyProperty&&(this.nodeParentKeyProperty=t.nodeParentKeyProperty)}kw(t){t.nodeParentKeyProperty!==void 0&&t.nodeParentKeyProperty!==this.nodeParentKeyProperty&&U.n("applyIncrementalJson cannot change Model properties"),super.kw(t)}maybeEnsureLinkReference(t){return t}get nodeParentKeyProperty(){return this.vl}set nodeParentKeyProperty(t){const e=this.vl;e!==t&&(this.Yn(t,TreeModel,"nodeParentKeyProperty"),this.vl=t,this.t("nodeParentKeyProperty",e,t))}getParentKeyForNodeData(t){if(t===null)return;const e=this.vl;if(e==="")return;const i=this.Tt(t,e);if(i!==void 0){if(this.isKeyType(i))return i;U.n("ParentKey value for node data "+t+" is not a number or a string: "+i)}}setParentKeyForNodeData(t,e){if(e===null&&(e=void 0),e!==void 0&&!this.isKeyType(e)&&U.ri(e,"number or string",TreeModel,"setParentKeyForNodeData:key"),t===null)return;const i=this.vl;if(i==="")return;if(e=this.maybeEnsureLinkReference(e),!this.containsNodeData(t)){this.rt(t,i,e);return}const s=this.Tt(t,i);s!==e&&(this.un(s,t),this.rt(t,i,e),this.findNodeDataForKey(e)===null&&this.dn(e,t),this.Ot("nodeParentKey",2,i,t,s,e),typeof i=="string"&&this.updateTargetBindings(t,i))}get parentLinkCategoryProperty(){return this.kc}set parentLinkCategoryProperty(t){const e=this.kc;e!==t&&(this.Yn(t,TreeModel,"parentLinkCategoryProperty"),this.kc=t,this.t("parentLinkCategoryProperty",e,t))}get linkCategoryProperty(){return this.parentLinkCategoryProperty}set linkCategoryProperty(t){this.parentLinkCategoryProperty=t}getParentLinkCategoryForNodeData(t){if(t===null)return"";const e=this.kc;if(e==="")return"";const i=this.Tt(t,e);if(i===void 0)return"";if(typeof i=="string")return i;U.n("getParentLinkCategoryForNodeData found a non-string category for "+t+": "+i)}getLinkCategoryForData(t){return this.getParentLinkCategoryForNodeData(t)}setParentLinkCategoryForNodeData(t,e){if(U.s(e,"string",TreeModel,"setParentLinkCategoryForNodeData:cat"),t===null)return;const i=this.kc;if(i==="")return;if(!this.containsNodeData(t)){this.rt(t,i,e);return}let s=this.Tt(t,i);s===void 0&&(s=""),s!==e&&(this.rt(t,i,e),this.Ot("parentLinkCategory",2,i,t,s,e),typeof i=="string"&&this.updateTargetBindings(t,i))}setLinkCategoryForData(t,e){this.setParentLinkCategoryForNodeData(t,e)}copyNodeData(t){const e=super.copyNodeData(t);return this.setParentKeyForNodeData(e,void 0),e}set(t,e,i){if(this.containsNodeData(t)){if(e===this.nodeKeyProperty){this.setKeyForNodeData(t,i);return}else if(e===this.nodeCategoryProperty){this.setCategoryForNodeData(t,i);return}else if(e===this.nodeParentKeyProperty){this.setParentKeyForNodeData(t,i);return}else if(e===this.parentLinkCategoryProperty){this.setParentLinkCategoryForNodeData(t,i);return}}const s=this.Tt(t,e);s!==i&&(this.rt(t,e,i),this.raiseDataChanged(t,e,s,i))}Pw(t,e){super.Pw(t,e);const i=this.Ce.iterator;for(;i.next();){const s=i.value;this.RT(s,t,e)}}RT(t,e,i){if(this.getParentKeyForNodeData(t)===e){const n=this.vl;this.rt(t,n,i),this.Ot("nodeParentKey",2,n,t,e,i),typeof n=="string"&&this.updateTargetBindings(t,n)}}Gg(t){super.Gg(t);const e=this.getKeyForNodeData(t),i=this.pw(e);if(i!==null){const s=U.ot(),n=i.iterator;for(;n.next();){const o=n.value;if(this.containsNodeData(o)&&this.getParentKeyForNodeData(o)===e){const l=this.vl;this.Ot("nodeParentKey",2,l,o,e,e),typeof l=="string"&&this.updateTargetBindings(o,l),s.push(o)}}for(let o=0;o<s.length;o++)this.un(e,s[o]);U._(s)}}Yg(t){super.Yg(t);let e=this.getParentKeyForNodeData(t);e=this.maybeEnsureLinkReference(e),this.findNodeDataForKey(e)===null&&this.dn(e,t)}Sw(t){super.Sw(t);const e=this.getParentKeyForNodeData(t);this.un(e,t)}Xg(t,e){super.Xg(t,e),this.setParentLinkCategoryForNodeData(e,this.getParentLinkCategoryForNodeData(t)),this.setParentKeyForNodeData(e,this.getParentKeyForNodeData(t))}get type(){return"TreeModel"}Ex(){return!0}Ux(){return!0}}Model.Dl(TreeModel,"TreeModel");var CircularArrangement=(w=>(w[w.ConstantSpacing=0]="ConstantSpacing",w[w.ConstantDistance=1]="ConstantDistance",w[w.ConstantAngle=2]="ConstantAngle",w[w.Packed=3]="Packed",w))(CircularArrangement||{}),CircularDirection=(w=>(w[w.Clockwise=10]="Clockwise",w[w.Counterclockwise=11]="Counterclockwise",w[w.BidirectionalLeft=12]="BidirectionalLeft",w[w.BidirectionalRight=13]="BidirectionalRight",w))(CircularDirection||{}),CircularSorting=(w=>(w[w.Forwards=20]="Forwards",w[w.Reverse=21]="Reverse",w[w.Ascending=22]="Ascending",w[w.Descending=23]="Descending",w[w.Optimized=24]="Optimized",w))(CircularSorting||{}),CircularNodeDiameterFormula=(w=>(w[w.Pythagorean=30]="Pythagorean",w[w.Circular=31]="Circular",w))(CircularNodeDiameterFormula||{});class CircularLayout extends Layout{yi;fu;Jk;Kg;$k;Za;OT;IT;ET;Xs;Mw;Cw;Pc;Nw;Dv;Hg;qg;jg;uu;$e;k;Ni;Ti;Gn;Wg;constructor(t){super(),this.yi=0,this.fu=0,this.Jk=0,this.Kg=360,this.$k=0,this.Za=0,this.OT=new Point,this.IT=30,this.ET=0,this.Xs=0,this.Mw=0,this.Cw=new VertexArrangement,this.Pc=0,this.Nw=0,this.Dv=600,this.Hg=NaN,this.qg=1,this.jg=0,this.uu=360,this.$e=0,this.k=10,this.Ni=24,this.Ti=LayoutVertex.standardComparer,this.Gn=6,this.Wg=30,t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Hg=this.Hg,t.qg=this.qg,t.jg=this.jg,t.uu=this.uu,t.$e=this.$e,t.k=this.k,t.Ni=this.Ni,t.Ti=this.Ti,t.Gn=this.Gn,t.Wg=this.Wg}ge(t){t in CircularSorting?this.sorting=t:t in CircularDirection?this.direction=t:t in CircularArrangement?this.arrangement=t:t in CircularNodeDiameterFormula?this.nodeDiameterFormula=t:super.ge(t)}createNetwork(){return new CircularNetwork(this)}E3(t,e,i){t=this.U3(t);let s=this.$k,n=this.IT,o=this.yi,r=this.fu,l=this.Jk,a=this.Kg,h=this.Za,c=this.ET,f=this.Xs,u=this.Mw;if(s=this.arrangement,n=this.nodeDiameterFormula,o=this.radius,(!isFinite(o)||o<=0)&&(o=NaN),r=this.aspectRatio,(!isFinite(r)||r<=0)&&(r=1),l=this.startAngle,isFinite(l)||(l=0),a=this.sweepAngle,(!isFinite(a)||a>360||a<1)&&(a=360),h=this.spacing,isFinite(h)||(h=NaN),s===3&&n===31?s=0:s===3&&n!==31&&(n=31,s=this.arrangement),(this.direction===12||this.direction===13)&&this.sorting!==24){for(let g=0;!(g>=t.length||(e.add(t.elt(g)),g+1>=t.length));g+=2)i.add(t.elt(g+1));this.direction===12?(this.arrangement===3&&e.reverse(),t=new List,t.addAll(e),t.addAll(i)):(this.arrangement===3&&i.reverse(),t=new List,t.addAll(i),t.addAll(e))}const d=t.length;c=0;let m=0;for(let g=0;g<t.length;g++){const p=l+a*m*(this.direction===10?1:-1)/d;let y=t.elt(g).diameter;isNaN(y)&&(y=t.elt(g).Qa(p)),a<360&&(g===0||g===t.length-1)&&(y/=2),c+=y,m++}if(isNaN(o)||s===3){if(isNaN(h)&&(h=6),s!==0&&s!==3){let g=-1/0;for(let p=0;p<d;p++){const y=t.elt(p),x=t.elt(p===d-1?0:p+1);isNaN(y.diameter)&&y.Qa(0),isNaN(x.diameter)&&x.Qa(0),g=Math.max(g,(y.diameter+x.diameter)/2)}if(u=g+h,s===2){const p=2*Math.PI/d,y=(g+h)/p;r>1?(o=y,f=o*r):(f=y,o=f)}else o=this.Zk(u*(a>=360?d:d-1),r,l*Math.PI/180,a*Math.PI/180)}else o=this.Zk(c+(a>=360?d:d-1)*(s!==3?h:h*1.6),r,l*Math.PI/180,a*Math.PI/180);f=o*r}else{f=o*r;const g=this.UT(o,f,l*Math.PI/180,a*Math.PI/180);if(isNaN(h))s===0&&(h=(g-c)/(a>=360?d:d-1));else if(s===0){const p=(g-c)/(a>=360?d:d-1);p<h?(o=this.Zk(c+h*(a>=360?d:d-1),r,l*Math.PI/180,a*Math.PI/180),f=o*r):h=p}else{let p=-1/0;for(let b=0;b<d;b++){const k=t.elt(b),P=t.elt(b===d-1?0:b+1);isNaN(k.diameter)&&k.Qa(0),isNaN(P.diameter)&&P.Qa(0),p=Math.max(p,(k.diameter+P.diameter)/2)}const y=p+h,x=this.Zk(y*(a>=360?d:d-1),r,l*Math.PI/180,a*Math.PI/180);x>o?(o=x,f=o*r,u=y):u=g/(a>=360?d:d-1)}}return this.$k=s,this.IT=n,this.yi=o,this.fu=r,this.Jk=l,this.Kg=a,this.Za=h,this.ET=c,this.Xs=f,this.Mw=u,t}doLayout(t){this.network===null&&(this.network=this.makeNetwork(t)),this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin);const e=this.network.vertexes;if(e.count<=1){if(e.count===1){const u=e.first();u.centerX=0,u.centerY=0}this.updateParts(),this.network=null,this.isValidLayout=!0;return}let i=new List;i.addAll(e.iterator);const s=new List,n=new List;i=this.E3(i,s,n);const o=this.$k,r=this.yi,l=this.Jk,a=this.Kg,h=this.Za,c=this.Xs,f=this.Mw;if((this.direction===12||this.direction===13)&&o===3)this.Fv(i,a,l-a/2,10);else if(this.direction===12||this.direction===13){let u=0;switch(o){case 1:u=this.Qk(r,c,l,f)*180/Math.PI;break;case 0:{let d=0,m=0;const g=s.first();g!==null&&(d=g.Qa(Math.PI/2));const p=n.first();p!==null&&(m=p.Qa(Math.PI/2)),u=this.Qk(r,c,l,h+(d+m)/2)*180/Math.PI;break}case 2:u=a/i.length;break}if(this.direction===12){switch(o){case 1:this.Tw(s,a/2,l,11);break;case 0:this.Lw(s,a/2,l,11);break;case 2:this.Aw(s,a/2,l,11);break}switch(o){case 1:this.Tw(n,a/2,l+u,10);break;case 0:this.Lw(n,a/2,l+u,10);break;case 2:this.Aw(n,a/2,l+u,10);break}}else{switch(o){case 1:this.Tw(n,a/2,l,11);break;case 0:this.Lw(n,a/2,l,11);break;case 2:this.Aw(n,a/2,l,11);break}switch(o){case 1:this.Tw(s,a/2,l+u,10);break;case 0:this.Lw(s,a/2,l+u,10);break;case 2:this.Aw(s,a/2,l+u,10);break}}}else switch(o){case 1:this.Tw(i,a,l,this.direction);break;case 0:this.Lw(i,a,l,this.direction);break;case 2:this.Aw(i,a,l,this.direction);break;case 3:this.Fv(i,a,l,this.direction);break}this.updateParts(),this.network=null,this.isValidLayout=!0}Aw(t,e,i,s){const n=this.Kg,o=this.yi,r=this.Xs,l=i*Math.PI/180,a=e*Math.PI/180,h=t.length;for(let c=0;c<h;c++){const f=l+(s===10?c*a/(n>=360?h:h-1):-(c*a)/h),u=t.elt(c),d=o*Math.tan(f)/r,m=Math.sqrt((o*o+r*r*d*d)/(1+d*d));u.centerX=m*Math.cos(f),u.centerY=m*Math.sin(f),u.actualAngle=f*180/Math.PI}}Lw(t,e,i,s){const n=this.yi,o=this.Xs,r=this.Za;let l=i*Math.PI/180;const a=t.length;for(let h=0;h<a;h++){const c=t.elt(h),f=t.elt(h===a-1?0:h+1),u=n*Math.cos(l),d=o*Math.sin(l);c.centerX=u,c.centerY=d,c.actualAngle=l*180/Math.PI,isNaN(c.diameter)&&c.Qa(0),isNaN(f.diameter)&&f.Qa(0);const m=(c.diameter+f.diameter)/2,g=this.Qk(n,o,s===10?l:-l,m+r);l+=s===10?g:-g}}Tw(t,e,i,s){const n=this.yi,o=this.Xs,r=this.Mw;let l=i*Math.PI/180;const a=t.length;for(let h=0;h<a;h++){const c=t.elt(h);c.centerX=n*Math.cos(l),c.centerY=o*Math.sin(l),c.actualAngle=l*180/Math.PI;const f=this.Qk(n,o,s===10?l:-l,r);l+=s===10?f:-f}}Fv(t,e,i,s){let n=this.Nw;const o=this.Kg;if(this.Pc=0,this.Cw=new VertexArrangement,e<360){for(n=i+(s===10?o:-o);n<0;)n+=360;n%=360,n>180&&(n-=360),n*=Math.PI/180,this.Nw=n,this.vv(t,e,i,s)}else this.Rv(t,e,i,s);this.Cw.commit(t)}Rv(t,e,i,s){const n=this.yi,o=this.Xs,r=this.Za,l=this.fu;let a=n*Math.cos(i*Math.PI/180),h=o*Math.sin(i*Math.PI/180);const c=t.toArray();if(c.length===3){c[0].centerX=n,c[0].centerY=0,c[1].centerX=c[0].centerX-c[0].width/2-c[1].width/2-r,c[1].y=c[0].y,c[2].centerX=(c[0].centerX+c[1].centerX)/2,c[2].y=c[0].y-c[2].height-r;return}else if(c.length===4){c[0].centerX=n,c[0].centerY=0,c[2].centerX=-c[0].centerX,c[2].centerY=c[0].centerY,c[1].centerX=0,c[1].y=Math.min(c[0].y,c[2].y)-c[1].height-r,c[3].centerX=0,c[3].y=Math.max(c[0].y+c[0].height+r,c[2].y+c[2].height+r);return}const f=Point.l();for(let k=0;k<c.length&&(c[k].centerX=a,c[k].centerY=h,!(k>=c.length-1));k++)this.Ov(a,h,c,k,s,f)||this.Iv(a,h,c,k,s,f),a=f.x,h=f.y;if(Point.i(f),this.Pc++,this.Pc>23)return;const u=c[0].centerX,d=c[0].centerY,m=c[c.length-1].centerX,g=c[c.length-1].centerY;let p=Math.abs(u-m)-((c[0].width+c[c.length-1].width)/2+r);const y=Math.abs(d-g)-((c[0].height+c[c.length-1].height)/2+r);let x=0;if(Math.abs(y)<1){const k=Math.abs(u-m),P=(c[0].width+c[c.length-1].width)/2;k<P&&(x=0),p=k-P}else y>0?x=y:Math.abs(p)<1?x=0:x=p;let b=!1;Math.abs(m)>Math.abs(g)?b=m>0!=d>g:b=g>0!=u<m,b=s===10?b:!b,b&&(x=-Math.abs(x),x=Math.min(x,-c[c.length-1].width),x=Math.min(x,-c[c.length-1].height)),this.Cw.B3(x,c),Math.abs(x)>1&&(this.Pc<8?this.yi-=x/(2*Math.PI):c.length<5&&x>10?this.yi/=2:this.yi-=x>0?1.7:-2.3,this.Xs=this.yi*l,this.Rv(t,e,i,s))}vv(t,e,i,s){const n=this.yi,o=this.Xs,r=this.fu;let l=n*Math.cos(i*Math.PI/180),a=o*Math.sin(i*Math.PI/180);const h=Point.l(),c=t.toArray();for(let m=0;m<c.length&&(c[m].centerX=l,c[m].centerY=a,!(m>=c.length-1));m++)this.Ov(l,a,c,m,s,h)||this.Iv(l,a,c,m,s,h),l=h.x,a=h.y;if(Point.i(h),this.Pc++,this.Pc>23)return;const f=Math.atan2(a,l);let u=s===10?this.Nw-f:f-this.Nw;u=Math.abs(u)<Math.abs(u-2*Math.PI)?u:u-2*Math.PI;const d=u*(n+o)/2;this.Cw.V3(d,c),Math.abs(d)>1&&(this.Pc<8?this.yi-=d/(2*Math.PI):this.yi-=d>0?1.7:-2.3,this.Xs=this.yi*r,this.vv(t,e,i,s))}Ov(t,e,i,s,n,o){const r=this.Za,l=this.yi,a=this.Xs;let h=0,c=0;const f=(i[s].width+i[s+1].width)/2+r;let u=!1;if(e>=0!=(n===10)){if(h=t+f,h>l){if(h=t-f,h<-l)return o.x=h,o.y=c,!1;u=!0}}else if(h=t-f,h<-l){if(h=t+f,h>l)return o.x=h,o.y=c,!1;u=!0}return c=Math.sqrt(1-Math.min(1,h*h/(l*l)))*a,e<0!==u&&(c=-c),Math.abs(e-c)>(i[s].height+i[s+1].height)/2?(o.x=h,o.y=c,!1):(o.x=h,o.y=c,!0)}Iv(t,e,i,s,n,o){const r=this.Za,l=this.yi,a=this.Xs;let h=0,c=0;const f=(i[s].height+i[s+1].height)/2+r;let u=!1;if(t>=0!=(n===10)){if(c=e-f,c<-a){if(c=e+f,c>a)return o.x=h,o.y=c,!1;u=!0}}else if(c=e+f,c>a){if(c=e-f,c<-a)return o.x=h,o.y=c,!1;u=!0}return h=Math.sqrt(1-Math.min(1,c*c/(a*a)))*l,t<0!==u&&(h=-h),Math.abs(t-h)>(i[s].width+i[s+1].width)/2?(o.x=h,o.y=c,!1):(o.x=h,o.y=c,!0)}commitLayout(){this.commitNodes(),this.isRouting&&this.commitLinks()}commitNodes(){const t=this.group!==null&&this.group.hasPlaceholder(),e=t?this.group.location.copy():null;let i=this.actualCenter;if(t?i=new Point(0,0):(i.x=this.arrangementOrigin.x+this.yi,i.y=this.arrangementOrigin.y+this.Xs),this.network!==null){const s=this.network.vertexes.iterator;for(;s.next();){const n=s.value;n.x+=i.x,n.y+=i.y,n.commit()}}if(t&&this.group&&e){this.group.ensureBounds();const s=this.group.position.copy(),n=this.group.location.copy(),o=e.subtract(n.subtract(s));this.group.move(o),this.OT=o.subtract(s)}}commitLinks(){if(this.network!==null){const t=this.network.edges.iterator;for(;t.next();)t.value.commit()}}UT(t,e,i,s){const n=this.Dv;if(Math.abs(this.fu-1)<.001)return i!==void 0&&s!==void 0?s*t:2*Math.PI*t;const o=t>e?Math.sqrt(t*t-e*e)/t:Math.sqrt(e*e-t*t)/e;let r=0,l=0;i!==void 0&&s!==void 0?l=s/(n+1):l=Math.PI/(2*(n+1));let a=0;for(let h=0;h<=n;h++){i!==void 0&&s!==void 0?a=i+h*s/n:a=h*Math.PI/(2*n);const c=Math.sin(a);r+=Math.sqrt(1-o*o*c*c)*l}return i!==void 0&&s!==void 0?(t>e?t:e)*r:4*(t>e?t:e)*r}Zk(t,e,i,s){let n=0;return i!==void 0&&s!==void 0?n=this.UT(1,e,i,s):n=this.UT(1,e),t/n}Qk(t,e,i,s){if(Math.abs(this.fu-1)<.001)return s/t;const n=t>e?Math.sqrt(t*t-e*e)/t:Math.sqrt(e*e-t*t)/e;let o=0;const r=2*Math.PI/(this.network.vertexes.count*700);t>e&&(i+=Math.PI/2);for(let l=0;;l++){const a=i+l*r,h=Math.sin(a);if(o+=(t>e?t:e)*Math.sqrt(1-n*n*h*h)*r,o>=s)return l*r}}U3(t){switch(this.sorting){case 20:break;case 21:t.reverse();break;case 22:t.sort(this.comparer);break;case 23:t.sort(this.comparer),t.reverse();break;case 24:return this.z3(this.X3(t));default:U.n("Invalid sorting type.")}return t}X3(t){const e=[];for(let s=0;s<t.length;s++)e.push(0);const i=new List;for(let s=0;s<t.length;s++){let n=-1,o=-1;if(s===0)for(let c=0;c<t.length;c++){const u=t.elt(c).edgesCount;u>n&&(n=u,o=c)}else for(let c=0;c<t.length;c++){const f=e[c];f>n&&(n=f,o=c)}i.add(t.elt(o)),e[o]=-1;const r=t.elt(o);let l=0;const a=r.sourceEdges;for(;a.next();){const f=a.value.fromVertex;l=t.indexOf(f),!(l<0)&&e[l]>=0&&e[l]++}const h=r.destinationEdges;for(;h.next();){const f=h.value.toVertex;l=t.indexOf(f),!(l<0)&&e[l]>=0&&e[l]++}}return i}z3(t){const e=[];for(let f=0;f<t.length;f++){const u=t.elt(f);e[f]=[];let d=0;const m=u.destinationEdges;for(;m.next();){const p=m.value.toVertex;d=t.indexOf(p),d!==f&&e[f].indexOf(d)<0&&e[f].push(d)}const g=u.sourceEdges;for(;g.next();){const p=g.value.fromVertex;d=t.indexOf(p),d!==f&&e[f].indexOf(d)<0&&e[f].push(d)}}const i=[];for(let f=0;f<e.length;f++)i[f]=0;const s=[],n=[],o=[],r=[],l=new List;let a=0;for(let f=0;f<e.length;f++){const u=e[f].length;if(u===1){r.push(f);continue}if(u===0){l.add(t.elt(f));continue}if(a===0){s.push(f),a++;continue}let d=1/0,m=1/0,g=-1;const p=[];for(let y=0;y<s.length;y++)e[s[y]].indexOf(s[y===s.length-1?0:y+1])<0&&p.push(y===s.length-1?0:y+1);if(p.length===0)for(let y=0;y<s.length;y++)p.push(y);for(let y=0;y<p.length;y++){const x=p[y],b=this.G3(e[f],n,o,i,x,s);let k=0;for(let P=0;P<e[f].length;P++){const S=e[f][P],T=s.indexOf(S);if(T>=0){const N=Math.abs(x-(T>=x?T+1:T));k+=N<s.length+1-N?N:s.length+1-N}}for(let P=0;P<n.length;P++){let S=i[n[P]],T=i[o[P]];if(S>=x&&S++,T>=x&&T++,S>T){const N=T;T=S,S=N}T-S<(s.length+2)/2==(S<x&&x<=T)&&k++}(b<d||b===d&&k<m)&&(d=b,m=k,g=x)}s.splice(g,0,f);for(let y=0;y<s.length;y++)i[s[y]]=y;for(let y=0;y<e[f].length;y++){const x=e[f][y];s.indexOf(x)>=0&&(n.push(f),o.push(x))}a++}let h=!1;const c=s.length;for(;;){h=!0;for(let f=0;f<r.length;f++){const u=r[f],d=e[u][0],m=s.indexOf(d);if(m>=0){let g=0;for(let p=0;p<e[d].length;p++){const y=e[d][p],x=s.indexOf(y);if(x<0||x===m)continue;const b=x>m?x-m:m-x,k=c-b;g+=x<m!=b>k?1:-1}s.splice(g<0?m:m+1,0,u),r.splice(f,1),f--}else h=!1}if(h)break;s.push(r[0]),r.splice(0,1)}for(let f=0;f<s.length;f++){const u=s[f];l.add(t.elt(u))}return l}G3(t,e,i,s,n,o){let r=0;for(let l=0;l<e.length;l++){const a=e[l],h=i[l],c=s[a],f=s[h];let u=0,d=0;if(c<f?(u=c,d=f):(u=f,d=c),u<n&&n<=d)for(let m=0;m<t.length;m++){const g=t[m];o.indexOf(g)<0||u<s[g]&&s[g]<d||u===s[g]||d===s[g]||r++}else for(let m=0;m<t.length;m++){const g=t[m];o.indexOf(g)<0||!(u<s[g]&&s[g]<d)||u===s[g]||d===s[g]||r++}}return r}get radius(){return this.Hg}set radius(t){this.Hg!==t&&(U.s(t,"number",CircularLayout,"radius"),(t>0||isNaN(t))&&(this.Hg=t,this.g()))}get aspectRatio(){return this.qg}set aspectRatio(t){this.qg!==t&&(U.s(t,"number",CircularLayout,"aspectRatio"),t>0&&(this.qg=t,this.g()))}get startAngle(){return this.jg}set startAngle(t){this.jg!==t&&(U.s(t,"number",CircularLayout,"startAngle"),this.jg=t,this.g())}get sweepAngle(){return this.uu}set sweepAngle(t){this.uu!==t&&(U.s(t,"number",CircularLayout,"sweepAngle"),t>0&&t<=360?this.uu=t:this.uu=360,this.g())}get arrangement(){return this.$e}set arrangement(t){this.$e!==t&&(t===3||t===0||t===1||t===2)&&(this.$e=t,this.g())}get direction(){return this.k}set direction(t){this.k!==t&&(t===10||t===11||t===12||t===13)&&(this.k=t,this.g())}get sorting(){return this.Ni}set sorting(t){this.Ni!==t&&(this.Ni=t,this.g())}get comparer(){return this.Ti}set comparer(t){this.Ti!==t&&(U.S(t,CircularLayout,"comparer"),this.Ti=t,this.g())}get spacing(){return this.Gn}set spacing(t){this.Gn!==t&&(U.s(t,"number",CircularLayout,"spacing"),this.Gn=t,this.g())}get nodeDiameterFormula(){return this.Wg}set nodeDiameterFormula(t){this.Wg!==t&&(t===30||t===31)&&(this.Wg=t,this.g())}get actualXRadius(){return this.yi}get actualYRadius(){return this.Xs}get actualSpacing(){return this.Za}get actualCenter(){return this.OT}static ConstantSpacing=0;static ConstantDistance=1;static ConstantAngle=2;static Packed=3;static Clockwise=10;static Counterclockwise=11;static BidirectionalLeft=12;static BidirectionalRight=13;static Forwards=20;static Reverse=21;static Ascending=22;static Descending=23;static Optimized=24;static Pythagorean=30;static Circular=31}class VertexArrangement{du;Sc;gu;constructor(){this.du=-1/0,this.Sc=null,this.gu=null}B3(t,e){if(t>0&&this.du<0||Math.abs(t)<Math.abs(this.du)&&!(t<0&&this.du>0)){this.du=t,this.Sc=[],this.gu=[];for(let i=0;i<e.length;i++)this.Sc[i]=e[i].bounds.x,this.gu[i]=e[i].bounds.y}}V3(t,e){if(Math.abs(t)<Math.abs(this.du)){this.du=t,this.Sc=[],this.gu=[];for(let i=0;i<e.length;i++)this.Sc[i]=e[i].bounds.x,this.gu[i]=e[i].bounds.y}}commit(t){if(!(this.Sc===null||this.gu===null))for(let e=0;e<this.Sc.length;e++){const i=t.elt(e);i.x=this.Sc[e],i.y=this.gu[e]}}}class CircularNetwork extends LayoutNetwork{constructor(t){super(t)}createVertex(){return new CircularVertex(this)}createEdge(){return new CircularEdge(this)}}class CircularVertex extends LayoutVertex{Ro;_k;constructor(t){super(t),this.Ro=NaN,this._k=NaN}Qa(t){const e=this.network;if(e===null)return NaN;const i=e.layout;if(i===null)return NaN;if(i.arrangement===3){if(i.nodeDiameterFormula===31)return this.Ro=Math.max(this.width,this.height),this.Ro;{const s=Math.abs(Math.sin(t)),n=Math.abs(Math.cos(t));return s===0?this.width:n===0?this.height:(this.Ro=Math.min(this.height/s,this.width/n),this.Ro)}}else return i.nodeDiameterFormula===31?(this.Ro=Math.max(this.width,this.height),this.Ro):(this.Ro=Math.sqrt(this.width*this.width+this.height*this.height),this.Ro)}get diameter(){return this.Ro}set diameter(t){this.Ro!==t&&(U.s(t,"number",CircularVertex,"diameter"),this.Ro=t)}get actualAngle(){return this._k}set actualAngle(t){this._k!==t&&(U.s(t,"number",CircularVertex,"actualAngle"),this._k=t)}}class CircularEdge extends LayoutEdge{constructor(t){super(t)}}class ForceDirectedLayout extends Layout{Mc;_a;Gs;Jg;Kn;Ki;$g;Zg;Qg;_g;tm;em;mu;Cc;pu;yu;im;sm;wu;Nc;dr;Rl;Dw;constructor(t){super(),this.Mc=0,this._a=0,this.Gs=new Size(100,100).b(),this.Jg=!1,this.Kn=!0,this.Ki=!1,this.$g=100,this.Zg=300,this.Qg=1,this._g=1/0,this.tm=1/0,this.em={random:()=>U.um()},this.mu=.05,this.Cc=50,this.pu=150,this.yu=0,this.im=10,this.sm=5,this.wu=NaN,this.Nc=10,this.dr=null,this.Rl=new Point(0,0),this.Dw=1.5,t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Gs.h(this.Gs),t.Jg=this.Jg,t.Kn=this.Kn,t.Ki=this.Ki,t.$g=this.$g,t.Zg=this.Zg,t.Qg=this.Qg,t._g=this._g,t.tm=this.tm,t.em=this.em,t.mu=this.mu,t.Cc=this.Cc,t.pu=this.pu,t.yu=this.yu,t.im=this.im,t.sm=this.sm,t.wu=this.wu,t.Nc=this.Nc}createNetwork(){return new ForceDirectedNetwork(this)}doLayout(t){this.network=this.makeNetwork(t);let e=this.network.vertexes.iterator;const i=this.maxIterations;if(this.network.vertexes.count>0){for(this.network.deleteSelfEdges(),e=this.network.vertexes.iterator;e.next();){const o=e.value;o.charge=this.electricalCharge(o),o.mass=this.gravitationalMass(o)}const s=this.network.edges.iterator;for(;s.next();){const o=s.value;o.stiffness=this.springStiffness(o),o.length=this.springLength(o)}if(this.BT(),this._a=0,this.needsPrelayout()){const o=this.network,r=o.splitIntoSubNetworks(!1);let l=r.iterator;for(;l.next();){const a=l.value;this.doConnectedSubnetLayout(a)}for(l=r.iterator,this.Y3(l,o),l=r.iterator;l.next();){const a=l.value,h=a.vertexes.iterator;for(;h.next();){const f=h.value;o.addVertex(f)}const c=a.edges.iterator;for(;c.next();){const f=c.value;o.addEdge(f)}}}else this.Ev(this.network,this.maxIterations);this.updateParts()}this.maxIterations=i,this.isValidLayout=!0}needsPrelayout(){if(this.network===null||this.network.vertexes.count<3)return!1;let t=0,e=0;const i=this.network.vertexes.first()?.bounds,s=this.network.vertexes.iterator;for(;s.next();){const n=s.value,o=n.bounds;if(isNaN(n.x)||isNaN(n.y)||i&&o.intersectsRect(i)&&(t++,t>2))return!0;if(e>10)return!1;e++}return!1}doConnectedSubnetLayout(t){let e=t.vertexes.iterator;for(;e.next();){const l=e.value;l.hierarchicalVertexes.add(l)}let i=t,s=this.wu;if(isNaN(s)&&(s=t.edges.count/t.vertexes.count),s<t.vertexes.count)for(;i.vertexes.count>Math.max(100,Math.sqrt(s*t.vertexes.count));)i=this.coarsenNetwork(i);let n=0;e=i.vertexes.iterator;let o=this.randomNumberGenerator;for(o===null&&(this.randomNumberGenerator=o=new RandomNumberGenerator(0));e.next();){e.value.idInCluster=n++;const l=10*(o.random()-.5),a=10*(o.random()-.5);this.isFixed(e.value)||(e.value.x=l,e.value.y=a);const h=e.value.hierarchicalVertexes.iterator;for(;h.next();)this.isFixed(h.value)||(h.value.x=l,h.value.y=a)}const r=this.computePairwiseDistances(i);this.K3(i,r,this.maxPrelayoutIterations,t.vertexes.count),this.Ev(t,this.maxIterations)}computePairwiseDistances(t){const e=t.vertexes.count,i=new Array(e);for(let r=0;r<e;r++)i[r]=new Array(e).fill(-1),i[r][r]=0;const s=t.vertexes.iterator;let n=new Map,o=[];for(;s.next();){const r=s.value;o.length=0,o.push(r),n.clear(),n.set(r.idInCluster,0);let l=0;for(;l<o.length;){const a=o[l++],h=a.vertexes.iterator;for(;h.next();){const c=h.value;n.has(c.idInCluster)||(n.set(c.idInCluster,(n.get(a.idInCluster)??0)+1),o.push(c))}}for(let a=0;a<e;a++){const h=Math.min(i[r.idInCluster][a],i[a][r.idInCluster]),c=n.get(a)??0;(h<0||c<h)&&(i[r.idInCluster][a]=c,i[a][r.idInCluster]=c)}}return i}coarsenNetwork(t){const e=this.createNetwork(),i=new Map;let s=0,n=t.vertexes.iterator;for(;n.next();)n.value.idInCluster=s++;for(n=t.vertexes.iterator;n.next();){const r=n.value;if(i.has(r.idInCluster))continue;let l=Number.MAX_SAFE_INTEGER,a=null;const h=r.vertexes.iterator;for(;h.next();){const f=h.value;i.has(f.idInCluster)||f.hierarchicalVertexes.length<l&&(l=f.hierarchicalVertexes.length,a=f)}const c=e.createVertex();c.hierarchicalVertexes.addAll(r.hierarchicalVertexes),a!=null&&c.hierarchicalVertexes.addAll(a.hierarchicalVertexes),i.set(r.idInCluster,c),a!=null&&i.set(a.idInCluster,c),e.addVertex(c)}const o=t.edges.iterator;for(;o.next();){const r=o.value,l=i.get(r.fromVertex.idInCluster),a=i.get(r.toVertex.idInCluster);if(l===a)continue;const h=e.createEdge();h.fromVertex=l||null,h.toVertex=a||null,e.addEdge(h)}return e}Px(t,e){let i=!0;const s=t.vertexes.iterator;for(;s.next();){const n=s.value;i?(i=!1,e.set(n.bounds)):e.unionRect(n.bounds)}return e}Y3(t,e){const i=this.arrangementSpacing,s=t.count;let n=!0,o=0,r=0;const l=U.ot();for(let f=0;f<s+e.vertexes.count+2;f++)l[f]=null;let a=0;t.reset();const h=Rect.l();let c;for(;t.next();){const f=t.value;if(this.Px(f,h),n)n=!1,o=h.x+h.width/2,r=h.y+h.height/2,l[0]=new Point(h.x+h.width+i.width,h.y),l[1]=new Point(h.x,h.y+h.height+i.height),a=2;else{const u=this.Uv(l,a,o,r,h.width,h.height,i),d=l[u];if(d){const m=new Point(d.x+h.width+i.width,d.y),g=new Point(d.x,d.y+h.height+i.height);u+1<a&&l.splice(u+1,0,null),l[u]=m,l[u+1]=g,a++;const p=d.x-h.x,y=d.y-h.y;for(c=f.vertexes.iterator;c.next();){const x=c.value;this.isFixed(x)||(x.centerX+=p,x.centerY+=y)}}}}for(Rect.i(h),c=e.vertexes.iterator;c.next();){const f=c.value,u=f.bounds;if(a<2){o=u.x+u.width/2,r=u.y+u.height/2,l[0]=new Point(u.x+u.width+i.width,u.y),l[1]=new Point(u.x,u.y+u.height+i.height),a=2;continue}const d=this.Uv(l,a,o,r,u.width,u.height,i),m=l[d];if(m){const g=new Point(m.x+u.width+i.width,m.y),p=new Point(m.x,m.y+u.height+i.height);d+1<a&&l.splice(d+1,0,null),l[d]=g,l[d+1]=p,a++,this.isFixed(f)||(f.centerX=m.x+f.width/2,f.centerY=m.y+f.height/2)}}U._(l)}Uv(t,e,i,s,n,o,r){let l=9e19,a=-1;t:for(let h=0;h<e;h++){const c=t[h];if(c!==null){const f=c.x-i,u=c.y-s,d=f*f+u*u;if(d<l){for(let m=h-1;m>=0;m--)if(t[m]!==null&&t[m].y>c.y&&t[m].x-c.x<n+r.width)continue t;for(let m=h+1;m<e;m++)if(t[m]!==null&&t[m].x>c.x&&t[m].y-c.y<o+r.height)continue t;a=h,l=d}}}return a}BT(){if(this.network===null||!this.comments)return;const t=this.network.vertexes.iterator;for(;t.next();){const e=t.value;this.addComments(e)}}addComments(t){if(this.network===null)return;const e=t.node;if(e!==null){const i=e.findNodesConnected();for(;i.next();){const s=i.value;if(s.category!=="Comment"||!s.isVisible())continue;let n=this.network.findVertex(s);n===null&&(n=this.network.addNode(s)),n.charge=this.defaultCommentElectricalCharge;let o=null;const r=n.destinationEdges;for(;r.next();){const l=r.value;if(l.toVertex===t){o=l;break}}if(o===null){const l=n.sourceEdges;for(;l.next();){const a=l.value;if(a.fromVertex===t){o=a;break}}}o===null&&(o=this.network.linkVertexes(t,n,null)),o.length=this.defaultCommentSpringLength}}}Bv(t,e){const i=t.bounds,s=i.x,n=i.y,o=i.width,r=i.height,l=e.bounds,a=l.x,h=l.y,c=l.width,f=l.height;if(s+o<a)if(n>h+f){const u=s+o-a,d=n-h-f;return Math.sqrt(u*u+d*d)}else if(n+r<h){const u=s+o-a,d=n+r-h;return Math.sqrt(u*u+d*d)}else return a-(s+o);else if(s>a+c)if(n>h+f){const u=s-a-c,d=n-h-f;return Math.sqrt(u*u+d*d)}else if(n+r<h){const u=s-a-c,d=n+r-h;return Math.sqrt(u*u+d*d)}else return s-(a+c);else return n>h+f?n-(h+f):n+r<h?h-(n+r):.1}H3(t){const e=t.vertexes;if(e.size===0){this.dr=null;return}let i=1/0,s=1/0,n=-1/0,o=-1/0;e.each(d=>{const m=d.bounds,g=d.focus,p=m.x+g.x,y=m.y+g.y;p<i&&(i=p),p>n&&(n=p),y<s&&(s=y),y>o&&(o=y)});const r=n-i,l=o-s,a=Math.max(r,l,1)*1.01,h=(i+n)/2,c=(s+o)/2,f=h-a/2,u=c-a/2;this.dr===null?this.dr=new Quadtree(f,u,a,a,1,50):(this.dr.clear(),this.dr.bounds.e(f,u,a,a)),e.each(d=>{const m=d.bounds,g=d.focus,p=m.x+g.x,y=m.y+g.y;d.VT.e(p,y,0,0),this.dr&&this.dr.set(d,d.VT)}),this.dr.computeAggregates(ForceDirectedLayout.q3,ForceDirectedLayout.j3)}static q3(t,e){let i=0,s=0,n=0;for(const[l,a]of t){const h=2*l.charge;i+=h,s+=a.x*h,n+=a.y*h}let o=i===0?e.x+e.width/2:s/i,r=i===0?e.y+e.height/2:n/i;return[i,o,r]}static j3(t,e){let i=0,s=0,n=0;for(const l of t){const a=l[0]||0,h=l[1]||0,c=l[2]||0;i+=a,s+=h*a,n+=c*a}let o=i===0?e.x+e.width/2:s/i,r=i===0?e.y+e.height/2:n/i;return[i,o,r]}Vv(t,e,i,s){const n=s.aggregates;if(n===null||n.length<3)return;const o=n[0];if(o===0)return;const r=n[1],l=n[2],a=e-r,h=i-l,c=a*a+h*h,f=this.infinityDistance;if(c>f*f)return;const u=s.bounds.width,d=this.Dw;if(!s.isLeaf&&u*u<c*d*d){if(c>1){const g=Math.sqrt(c),x=2*t.charge*o/c;this.Rl.x+=x*a/g,this.Rl.y+=x*h/g}}else if(s.isLeaf)for(const[g,p]of s.objects){if(g===t||!this.shouldInteract(t,g))continue;const y=p.x,x=p.y,b=e-y,k=i-x,P=b*b+k*k;if(P>1){const S=Math.sqrt(P),T=2*t.charge,N=2*g.charge,M=T*N/P;this.Rl.x+=M*b/S,this.Rl.y+=M*k/S}else{let S=this.randomNumberGenerator;S===null&&(this.randomNumberGenerator=S=new RandomNumberGenerator(0));const T=S.random(),N=S.random(),M=2*t.charge,C=2*g.charge;this.Rl.x+=M*C*(T-.5),this.Rl.y+=M*C*(N-.5)}}else for(let g=0;g<s.subTrees.length;g++)this.Vv(t,e,i,s.subTrees[g])}Ev(t,e){const i=this._a+e,s=t.vertexes.count;for(this.Mc=this.Cc*Math.sqrt(s);this._a<i&&(this._a++,this.H3(t),!!this.W3(t));)this.Mc*=.985}W3(t){const e=t.vertexes;if(e.size<=0)return!1;const i=e.first();if(!i)return!1;i.forceX=0,i.forceY=0;let s=i.centerX,n=s,o=i.centerY,r=o;e.each(f=>{f.forceX=0,f.forceY=0;const u=f.centerX,d=f.centerY;s=Math.min(s,u),n=Math.max(n,u),o=Math.min(o,d),r=Math.max(r,d)});let l=0,a=0;e.each(f=>{const u=f.bounds,d=f.focus,m=u.x+d.x,g=u.y+d.y;l=f.charge*this.electricalFieldX(m,g),a=f.charge*this.electricalFieldY(m,g),l+=f.mass*this.gravitationalFieldX(m,g),a+=f.mass*this.gravitationalFieldY(m,g),f.forceX+=l,f.forceY+=a,this.dr!==null&&(this.Rl.e(0,0),this.Vv(f,m,g,this.dr),f.forceX+=this.Rl.x,f.forceY+=this.Rl.y)});const h=t.edges.iterator;for(;h.next();){const f=h.value,u=f.fromVertex,d=f.toVertex,m=u.bounds,g=u.focus,p=m.x+g.x,y=m.y+g.y,x=d.bounds,b=d.focus,k=x.x+b.x,P=x.y+b.y,S=this.Bv(u,d);if(S>1){let N=.1*f.stiffness*(S-f.length);l=N*.5*(u.width+d.height)*(p-k)/S,a=N*.5*(u.width+d.height)*(y-P)/S}u.forceX-=l,u.forceY-=a,d.forceX+=l,d.forceY+=a}let c=0;return e.each(f=>{this.isFixed(f)?this.moveFixedVertex(f):c=Math.max(c,this.moveVertex(f)||0)}),c>this.epsilonDistance*this.epsilonDistance}K3(t,e,i,s){const n=this._a+i,o=Math.sqrt(s);this.Mc=this.Nc*t.vertexes.count;const r=t.vertexes.toArray();let l=0,a=0,h=0;for(;this._a<n;){this._a++,a=l,l=0;for(let c=0;c<r.length;c++){r[c].forceX=0,r[c].forceY=0;for(let u=0;u<r.length;u++){if(c===u)continue;const d=this.Bv(r[c],r[u]),m=e[r[c].idInCluster][r[u].idInCluster],g=(d-this.Nc*o*m)/d;r[c].forceX+=g*(r[u].x-r[c].x),r[c].forceY+=g*(r[u].y-r[c].y)}const f=Math.sqrt(r[c].forceX*r[c].forceX+r[c].forceY*r[c].forceY);if(f>0){r[c].forceX=this.Mc*r[c].forceX/f,r[c].forceY=this.Mc*r[c].forceY/f,this.isFixed(r[c])||(r[c].x+=r[c].forceX,r[c].y+=r[c].forceY);const u=r[c].hierarchicalVertexes.iterator;for(;u.next();){const d=u.value;this.isFixed(d)||(d.centerX+=r[c].forceX,d.centerY+=r[c].forceY)}}l+=f*f}if(l>=a){if(h++,h>=5)break}else h=0;this.Mc*=.95}}moveVertex(t){let e=t.forceX,i=t.forceY;const s=e*e+i*i,n=Math.min(this.Mc,this.moveLimit),o=Math.max(n,this.epsilonDistance),r=o*o;if(s>r){const l=o/Math.sqrt(s);e*=l,i*=l}return t.centerX+=e,t.centerY+=i,e*e+i*i}shouldInteract(t,e){return!0}moveFixedVertex(t){}commitLayout(){this.Fw(),this.commitNodes(),this.isRouting&&this.commitLinks()}Fw(){if(this.network===null||!this.setsPortSpots)return;const t=this.network.edges.iterator;for(;t.next();){const i=t.value.link;i!==null&&(i.fromSpot=Spot.Default,i.toSpot=Spot.Default)}}commitNodes(){if(!this.network)return;let t=0,e=0;if(this.arrangesToOrigin){const n=Rect.l();this.Px(this.network,n);const o=this.arrangementOrigin;t=o.x-n.x,e=o.y-n.y,Rect.i(n)}const i=Rect.l(),s=this.network.vertexes.iterator;for(;s.next();){const n=s.value;(t!==0||e!==0)&&(i.h(n.bounds),i.x+=t,i.y+=e,n.bounds=i),n.commit()}Rect.i(i)}commitLinks(){if(!this.network)return;const t=this.network.edges.iterator;for(;t.next();)t.value.commit()}springStiffness(t){const e=t.stiffness;return isNaN(e)?this.mu:e}springLength(t){const e=t.length;return isNaN(e)?this.Cc:e}electricalCharge(t){const e=t.charge;return isNaN(e)?this.pu:e}electricalFieldX(t,e){return 0}electricalFieldY(t,e){return 0}gravitationalMass(t){const e=t.mass;return isNaN(e)?this.yu:e}gravitationalFieldX(t,e){return 0}gravitationalFieldY(t,e){return 0}isFixed(t){return t.isFixed}get currentIteration(){return this._a}get arrangementSpacing(){return this.Gs}set arrangementSpacing(t){this.Gs.equals(t)||(this.Gs.h(t),this.g())}get arrangesToOrigin(){return this.Jg}set arrangesToOrigin(t){this.Jg!==t&&(U.s(t,"boolean",ForceDirectedLayout,"arrangesToOrigin"),this.Jg=t,this.g())}get setsPortSpots(){return this.Kn}set setsPortSpots(t){this.Kn!==t&&(U.s(t,"boolean",ForceDirectedLayout,"setsPortSpots"),this.Kn=t,this.g())}get comments(){return this.Ki}set comments(t){this.Ki!==t&&(U.s(t,"boolean",ForceDirectedLayout,"comments"),this.Ki=t,this.g())}get maxPrelayoutIterations(){return this.$g}set maxPrelayoutIterations(t){this.$g!==t&&(U.s(t,"number",ForceDirectedLayout,"maxPrelayoutIterations"),t>=0&&(this.$g=t,this.g()))}get maxIterations(){return this.Zg}set maxIterations(t){this.Zg!==t&&(U.s(t,"number",ForceDirectedLayout,"maxIterations"),t>=0&&(this.Zg=t,this.g()))}get epsilonDistance(){return this.Qg}set epsilonDistance(t){this.Qg!==t&&(U.s(t,"number",ForceDirectedLayout,"epsilonDistance"),t>0&&(this.Qg=t,this.g()))}get infinityDistance(){return this._g}set infinityDistance(t){this._g!==t&&(U.s(t,"number",ForceDirectedLayout,"infinityDistance"),t>1&&(this._g=t,this.g()))}get moveLimit(){return this.tm}set moveLimit(t){this.tm!==t&&t>=0&&(U.s(t,"number",ForceDirectedLayout,"moveLimit"),this.tm=t,this.g())}get randomNumberGenerator(){return this.em}set randomNumberGenerator(t){this.em!==t&&(t!==null&&!U.nt(t.random)&&U.n('ForceDirectedLayout.randomNumberGenerator must have a "random()" function on it: '+t),this.em=t)}get defaultSpringStiffness(){return this.mu}set defaultSpringStiffness(t){this.mu!==t&&(U.s(t,"number",ForceDirectedLayout,"defaultSpringStiffness"),this.mu=t,this.g())}get defaultSpringLength(){return this.Cc}set defaultSpringLength(t){this.Cc!==t&&(U.s(t,"number",ForceDirectedLayout,"defaultSpringLength"),this.Cc=t,this.g())}get defaultElectricalCharge(){return this.pu}set defaultElectricalCharge(t){this.pu!==t&&(U.s(t,"number",ForceDirectedLayout,"defaultElectricalCharge"),this.pu=t,this.g())}get defaultGravitationalMass(){return this.yu}set defaultGravitationalMass(t){this.yu!==t&&(U.s(t,"number",ForceDirectedLayout,"defaultGravitationalMass"),this.yu=t,this.g())}get defaultCommentSpringLength(){return this.im}set defaultCommentSpringLength(t){this.im!==t&&(U.s(t,"number",ForceDirectedLayout,"defaultCommentSpringLength"),this.im=t,this.g())}get defaultCommentElectricalCharge(){return this.sm}set defaultCommentElectricalCharge(t){this.sm!==t&&(U.s(t,"number",ForceDirectedLayout,"defaultCommentElectricalCharge"),this.sm=t,this.g())}get prelayoutQuality(){return this.wu}set prelayoutQuality(t){this.wu!==t&&(U.s(t,"number",ForceDirectedLayout,"prelayoutQuality"),this.wu=t,this.g())}get prelayoutSpread(){return this.Nc}set prelayoutSpread(t){this.Nc!==t&&(U.s(t,"number",ForceDirectedLayout,"prelayoutSpread"),this.Nc=t,this.g())}get theta(){return this.Dw}set theta(t){this.Dw!==t&&(U.s(t,"number",ForceDirectedLayout,"theta"),this.Dw=t,this.g())}}class ForceDirectedNetwork extends LayoutNetwork{constructor(t){super(t)}createVertex(){return new ForceDirectedVertex(this)}createEdge(){return new ForceDirectedEdge(this)}}class ForceDirectedVertex extends LayoutVertex{tP;eP;iP;sP;nP;hierarchicalVertexes;idInCluster;VT;constructor(t){super(t),this.tP=!1,this.eP=NaN,this.iP=NaN,this.sP=0,this.nP=0,this.hierarchicalVertexes=new List,this.idInCluster=-1,this.VT=new Rect(0,0,0,0)}get isFixed(){return this.tP}set isFixed(t){this.tP!==t&&(U.s(t,"boolean",ForceDirectedVertex,"isFixed"),this.tP=t)}get charge(){return this.eP}set charge(t){this.eP!==t&&(U.s(t,"number",ForceDirectedVertex,"charge"),this.eP=t)}get mass(){return this.iP}set mass(t){this.iP!==t&&(U.s(t,"number",ForceDirectedVertex,"mass"),this.iP=t)}get forceX(){return this.sP}set forceX(t){this.sP!==t&&(U.s(t,"number",ForceDirectedVertex,"forceX"),this.sP=t)}get forceY(){return this.nP}set forceY(t){this.nP!==t&&(U.s(t,"number",ForceDirectedVertex,"forceY"),this.nP=t)}}class ForceDirectedEdge extends LayoutEdge{oP;rP;constructor(t){super(t),this.oP=NaN,this.rP=NaN}get stiffness(){return this.oP}set stiffness(t){this.oP!==t&&(U.s(t,"number",ForceDirectedEdge,"stiffness"),this.oP=t)}get length(){return this.rP}set length(t){this.rP!==t&&(U.s(t,"number",ForceDirectedEdge,"length"),this.rP=t)}}class RandomNumberGenerator{I;R;Q;M;A;seed;constructor(t){t===void 0&&(t=42),this.seed=t,this.A=48271,this.M=2147483647,this.Q=this.M/this.A,this.R=this.M%this.A,this.I=1/this.M,this.random()}random(){const t=this.seed/this.Q,e=this.seed%this.Q,i=this.A*e-this.R*t;return i>0?this.seed=i:this.seed=i+this.M,this.seed*this.I}}var LayeredDigraphCycleRemove=(w=>(w[w.DepthFirst=0]="DepthFirst",w[w.Greedy=1]="Greedy",w[w.FromLayers=2]="FromLayers",w))(LayeredDigraphCycleRemove||{}),LayeredDigraphLayering=(w=>(w[w.OptimalLinkLength=10]="OptimalLinkLength",w[w.LongestPathSink=11]="LongestPathSink",w[w.LongestPathSource=12]="LongestPathSource",w))(LayeredDigraphLayering||{}),LayeredDigraphInit=(w=>(w[w.DepthFirstOut=20]="DepthFirstOut",w[w.DepthFirstIn=21]="DepthFirstIn",w[w.Naive=22]="Naive",w))(LayeredDigraphInit||{}),LayeredDigraphAggressive=(w=>(w[w.None=30]="None",w[w.Less=31]="Less",w[w.More=32]="More",w))(LayeredDigraphAggressive||{}),LayeredDigraphPack=(w=>(w[w.None=0]="None",w[w.Expand=1]="Expand",w[w.Straighten=2]="Straighten",w[w.Median=4]="Median",w[w.MaybeExpand=8]="MaybeExpand",w[w.All=15]="All",w))(LayeredDigraphPack||{}),LayeredDigraphAlign=(w=>(w[w.None=0]="None",w[w.UpperLeft=1]="UpperLeft",w[w.UpperRight=2]="UpperRight",w[w.LowerLeft=4]="LowerLeft",w[w.LowerRight=8]="LowerRight",w[w.All=15]="All",w))(LayeredDigraphAlign||{});class LayeredDigraphLayout extends Layout{Ys;si;k;xu;bu;ku;Tc;Pu;gr;Su;Kn;tt;vw;Gt;nm;Ks;re;Hs;ys;ws;It;om;rm;lP;mn;Mu;pr;Hn;qn;zT;th;constructor(t){super(),this.Ys=25,this.si=25,this.k=0,this.xu=0,this.bu=10,this.ku=20,this.Tc=4,this.Pu=31,this.gr=15,this.Su=10,this.Kn=!0,this.tt=-1,this.vw=-1,this.Gt=-1,this.nm=0,this.Ks=0,this.re=new Int16Array(0),this.Hs=new Float32Array(0),this.ys=new Float32Array(0),this.ws=new Float32Array(0),this.It=new Float32Array(0),this.om=0,this.rm=new Int16Array(0),this.lP=new Int16Array(0),this.mn=0,this.Mu=null,this.pr=new Point,this.Hn=[],this.Hn.length=100,this.qn=15,this.zT=0,this.th=!0,t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Ys=this.Ys,t.si=this.si,t.k=this.k,t.xu=this.xu,t.bu=this.bu,t.ku=this.ku,t.Tc=this.Tc,t.Pu=this.Pu,t.gr=this.gr,t.Su=this.Su,t.Kn=this.Kn,t.qn=this.qn,t.th=this.th}ge(t){t in LayeredDigraphAggressive?this.aggressiveOption=t:t in LayeredDigraphCycleRemove?this.cycleRemoveOption=t:t in LayeredDigraphInit?this.initializeOption=t:t in LayeredDigraphLayering?this.layeringOption=t:super.ge(t)}createNetwork(){return new LayeredDigraphNetwork(this)}doLayout(t){this.network===null&&(this.network=this.makeNetwork(t)),this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin),this.J3(),this.network.vertexes.count>0&&(this.network.deleteSelfEdges(),this.cycleRemoveOption!==2&&this.removeCycles(),this.$3(),this.cycleRemoveOption===2&&this.removeCycles(),this.Z3(),this.Q3(),this._3(),this.reduceCrossings(),this.straightenAndPack(),this.updateParts()),this.network=null,this.isValidLayout=!0}linkMinLength(t){return 1}linkLengthWeight(t){return 1}linkStraightenWeight(t){const e=t.fromVertex.node||t.fromVertex.data,i=t.toVertex.node||t.toVertex.data;return e===null&&i===null?8:e===null||i===null?4:1}nodeMinLayerSpace(t,e){return t.node===null&&t.data===null?0:this.k===90||this.k===270?e?t.focus.y+10:t.bounds.height-t.focus.y+10:e?t.focus.x+10:t.bounds.width-t.focus.x+10}nodeMinColumnSpace(t,e){if(t.node===null&&t.data===null)return 0;const i=e?t.aP:t.hP;if(i!==null)return i;const s=this.k;return s===90||s===270?e?t.aP=t.focus.x/this.si+1|0:t.hP=(t.bounds.width-t.focus.x)/this.si+1|0:e?t.aP=t.focus.y/this.si+1|0:t.hP=(t.bounds.height-t.focus.y)/this.si+1|0}ni(){const t=this.network.vertexes.count;this.rm.length<t*2&&(this.rm=new Int16Array(t*2));let e=0;const i=this.network.vertexes.iterator;for(;i.next();){const s=i.value;this.rm[e]=s.column,e++,this.rm[e]=s.index,e++}return this.rm}as(t){let e=0;const i=this.network.vertexes.iterator;for(;i.next();){const s=i.value;s.column=t[e],e++,s.index=t[e],e++}}zv(t,e){const i=this.eh(t),s=this.re[t];this.lP.length<s*s&&(this.lP=new Int16Array(s*s));const n=this.lP;for(let o=0;o<s;o++){let r=0;const l=i[o],a=l.near;let h=0;a!==null&&a!==l&&a.layer===l.layer&&(r+=Math.max(0,Math.abs(a.index-l.index)-1));let c,f=0,u,d=0,m=0,g=0,p,y=0,x,b=0,k=0,P=0,S;if(e>=0){for(c=i[o].Lo,f=0;f<c.length;f++)if(u=c[f],u.valid&&u.fromVertex.layer!==t)for(d=u.fromVertex.index,m=u.portToPos,g=u.portFromPos,y=f+1;y<c.length;y++)x=c[y],x.valid&&x.fromVertex.layer!==t&&(b=x.fromVertex.index,k=x.portToPos,P=x.portFromPos,m<k&&(d>b||d===b&&g>P)&&r++,k<m&&(b>d||b===d&&P>g)&&r++)}if(e<=0){for(c=i[o].hr,f=0;f<c.length;f++)if(u=c[f],u.valid&&u.toVertex.layer!==t)for(d=u.toVertex.index,m=u.portToPos,g=u.portFromPos,y=f+1;y<c.length;y++)x=c[y],x.valid&&x.toVertex.layer!==t&&(b=x.toVertex.index,k=x.portToPos,P=x.portFromPos,g<P&&(d>b||d===b&&m>k)&&r++,P<g&&(b>d||b===d&&k>m)&&r++)}for(n[o*s+o]=r,h=o+1;h<s;h++){let T=0,N=0;if(e>=0){for(p=i[o].Lo,S=i[h].Lo,f=0;f<p.length;f++)if(u=p[f],u.valid&&u.fromVertex.layer!==t)for(d=u.fromVertex.index,m=u.portToPos,g=u.portFromPos,y=0;y<S.length;y++)x=S[y],x.valid&&x.fromVertex.layer!==t&&(b=x.fromVertex.index,k=x.portToPos,P=x.portFromPos,(d<b||d===b&&g<P)&&N++,(b<d||b===d&&P<g)&&T++)}if(e<=0){for(p=i[o].hr,S=i[h].hr,f=0;f<p.length;f++)if(u=p[f],u.valid&&u.toVertex.layer!==t)for(d=u.toVertex.index,m=u.portToPos,g=u.portFromPos,y=0;y<S.length;y++)x=S[y],x.valid&&x.toVertex.layer!==t&&(b=x.toVertex.index,k=x.portToPos,P=x.portFromPos,(d<b||d===b&&m<k)&&N++,(b<d||b===d&&k<m)&&T++)}n[o*s+h]=T,n[h*s+o]=N}}return this.ih(t,i),n}countCrossings(){let t=0;for(let e=0;e<=this.tt;e++){const i=this.zv(e,1),s=this.re[e];for(let n=0;n<s;n++)for(let o=n;o<s;o++)t+=i[n*s+o]}return t}tU(t,e,i){const s=this.eh(t),n=this.re[t];let o=0;for(let r=0;r<n;r++){let l=null;e<=0&&(l=s[r].Lo);let a=null;e>=0&&(a=s[r].hr);let h,c=0,f=0;if(l!==null)for(let u=0;u<l.length;u++)h=l[u],h.valid&&h.fromVertex.layer!==t&&(c=h.fromVertex.column+h.portFromColOffset,f=h.toVertex.column+h.portToColOffset,i?o+=Math.abs(c-f)*this.linkStraightenWeight(h):o+=Math.abs(c-f));if(a!==null)for(let u=0;u<a.length;u++)h=a[u],h.valid&&h.toVertex.layer!==t&&(c=h.fromVertex.column+h.portFromColOffset,f=h.toVertex.column+h.portToColOffset,i?o+=(Math.abs(c-f)+1)*this.linkStraightenWeight(h):o+=Math.abs(c-f))}return this.ih(t,s),o}cP(t){let e=0;for(let i=0;i<=this.tt;i++)e+=this.tU(i,1,t);return e}Rw(){let t=1/0;this.Gt=-1;const e=this.network.vertexes.iterator;for(;e.next();){const i=e.value;t=Math.min(t,i.column-this.nodeMinColumnSpace(i,!0)),this.Gt=Math.max(this.Gt,i.column+this.nodeMinColumnSpace(i,!1))}for(e.reset();e.next();){const i=e.value;i.column-=t}this.Gt-=t}Ow(t,e){const i=this.eh(t),s=this.re[t],n=new Float32Array(s);for(let o=0;o<s;o++){const r=i[o];let l=null;e<=0&&(l=r.Lo);let a=null;e>=0&&(a=r.hr);let h=0,c=0;const f=r.near;f!==null&&f.layer===r.layer&&(h+=f.column-1,c++);let u;if(l!==null)for(let d=0;d<l.length;d++){u=l[d];const m=u.fromVertex;u.valid&&!u.rev&&m.layer!==t&&(h+=m.column,c++)}if(a!==null)for(let d=0;d<a.length;d++){u=a[d];const m=u.toVertex;u.valid&&!u.rev&&m.layer!==t&&(h+=m.column,c++)}c===0?n[o]=-1:n[o]=h/c}return this.ih(t,i),n}Xv(t,e){const i=this.eh(t),s=this.re[t],n=new Int16Array(s);for(let o=0;o<s;o++){const r=i[o];let l=null;e<=0&&(l=r.Lo);let a=null;e>=0&&(a=r.hr);let h=0;const c=[],f=r.near;f!==null&&f.layer===r.layer&&(c[h]=f.column-1,h++);let u;if(l!==null)for(let d=0;d<l.length;d++){u=l[d];const m=u.fromVertex;u.valid&&!u.rev&&m.layer!==t&&(c[h]=m.column+u.portFromColOffset,h++)}if(a!==null)for(let d=0;d<a.length;d++){u=a[d];const m=u.toVertex;u.valid&&!u.rev&&m.layer!==t&&(c[h]=m.column+u.portToColOffset,h++)}if(h===0)n[o]=-1;else{c.sort((m,g)=>m-g);const d=h>>1;(h&1)!==0?n[o]=c[d]:n[o]=c[d-1]+c[d]>>1}}return this.ih(t,i),n}Iw(t,e,i,s,n){if(t.component===i){t.component=e;let o=0,r=0;if(s){const l=t.destinationEdges;for(;l.next();){const a=l.value,h=a.toVertex;o=t.layer-h.layer,r=this.linkMinLength(a),o===r&&this.Iw(h,e,i,s,n)}}if(n){const l=t.sourceEdges;for(;l.next();){const a=l.value,h=a.fromVertex;o=h.layer-t.layer,r=this.linkMinLength(a),o===r&&this.Iw(h,e,i,s,n)}}}}XT(t,e,i,s,n){if(t.component===i){if(t.component=e,s){const o=t.destinationEdges;for(;o.next();){const l=o.value.toVertex;this.XT(l,e,i,s,n)}}if(n){const o=t.sourceEdges;for(;o.next();){const l=o.value.fromVertex;this.XT(l,e,i,s,n)}}}}removeCycles(){const t=this.network.edges.iterator;for(;t.next();){const e=t.value;e.rev=!1}switch(this.xu){default:case 1:this.eU();break;case 0:this.iU();break;case 2:this.sU();break}}sU(){const t=this.network,e=t.vertexes.iterator;let i=1/0;for(;e.next();){const s=e.value;i=Math.min(i,s.layer)}if(i<1/0){if(i<0)for(e.reset();e.next();){const r=e.value;r.layer-=i}const s=[];for(e.reset();e.next();){const r=e.value,l=s[r.layer];l===void 0?s[r.layer]=[r]:l.push(r)}let n=0;for(let r=0;r<s.length;r++){const l=s[r];if(!l||l.length===0)n++;else if(r>0)for(let a=0;a<l.length;a++){const h=l[a];h.layer-=n}}const o=t.edges.iterator;for(;o.next();){const r=o.value,l=r.fromVertex,a=r.toVertex;l.layer<a.layer&&(t.reverseEdge(r),r.rev=!0)}}}eU(){const t=this.network;let e=0,i=t.vertexes.count-1;const s=[];s.length=i+1;const n=t.vertexes.iterator;for(;n.next();){const r=n.value;r.oi=!0}for(;this.nU(t)!==null;){let r;for(r=this.Gv(t);r!==null;)s[i]=r,i--,r.oi=!1,r=this.Gv(t);for(r=this.Yv(t);r!==null;)s[e]=r,e++,r.oi=!1,r=this.Yv(t);r=this.oU(t),r!==null&&(s[e]=r,e++,r.oi=!1)}for(let r=0;r<t.vertexes.count;r++)s[r].index=r;const o=t.edges.iterator;for(;o.next();){const r=o.value,l=r.fromVertex,a=r.toVertex;l.index>a.index&&(t.reverseEdge(r),r.rev=!0)}}nU(t){const e=t.vertexes.iterator;for(;e.next();){const i=e.value;if(i.oi)return i}return null}Gv(t){const e=t.vertexes.iterator;for(;e.next();){const i=e.value;if(i.oi){let s=!0;const n=i.destinationEdges;for(;n.next();)if(n.value.toVertex.oi){s=!1;break}if(s)return i}}return null}Yv(t){const e=t.vertexes.iterator;for(;e.next();){const i=e.value;if(i.oi){let s=!0;const n=i.sourceEdges;for(;n.next();)if(n.value.fromVertex.oi){s=!1;break}if(s)return i}}return null}oU(t){let e=null,i=0;const s=this.network.vertexes.iterator;for(;s.next();){const n=s.value;if(n.oi){let o=0;const r=n.destinationEdges;for(;r.next();)r.value.toVertex.oi&&o++;let l=0;const a=n.sourceEdges;for(;a.next();)a.value.fromVertex.oi&&l++;(e===null||i<o-l)&&(e=n,i=o-l)}}return e}iU(){const t=this.network.vertexes.iterator;for(;t.next();){const i=t.value;i.Cu=-1,i.no=-1}const e=this.network.edges.iterator;for(;e.next();){const i=e.value;i.forest=!1}for(this.om=0,t.reset();t.next();){const i=t.value;i.sourceEdges.count===0&&this.GT(i)}for(t.reset();t.next();){const i=t.value;i.Cu===-1&&this.GT(i)}for(e.reset();e.next();){const i=e.value;if(!i.forest){const s=i.fromVertex,n=s.Cu,o=s.no,r=i.toVertex,l=r.Cu,a=r.no;l<n&&o<a&&(this.network.reverseEdge(i),i.rev=!0)}}}GT(t){t.Cu=this.om,this.om++;const e=t.destinationEdges;for(;e.next();){const i=e.value,s=i.toVertex;s.Cu===-1&&(i.forest=!0,this.GT(s))}t.no=this.om,this.om++}$3(){const t=this.network.vertexes.iterator;for(;t.next();){const s=t.value;s.layer=-1}for(this.tt=-1,this.assignLayers(),t.reset();t.next();){const s=t.value;this.tt=Math.max(this.tt,s.layer)}this.tt>=9999&&U.n("LayeredDigraphLayout, too many layers: "+this.tt);const e=this.direction==0||this.direction==180,i=[];for(const s=this.network.vertexes.iterator;s.next();){const n=s.value;if(n.node===null||n.centered)continue;const o=n.layer;let r=i[o];r===void 0&&(r=0);const l=e?n.width:n.height;l>r&&(i[o]=l)}for(const s=this.network.vertexes.iterator;s.next();){const n=s.value;if(n.node===null||n.centered)continue;const o=i[n.layer];e?(n.focusX=o/2,n.focusY=n.focus.y,n.width=o):(n.focusX=n.focus.x,n.focusY=o/2,n.height=o)}}assignLayers(){switch(this.bu){case 11:this.Kv();break;case 12:this.rU();break;default:case 10:this.lU();break}}Kv(){const t=this.network.vertexes.iterator;for(;t.next();){const e=t.value,i=this.Hv(e);this.tt=Math.max(i,this.tt)}}Hv(t){let e=0;if(t.layer===-1){const i=t.destinationEdges;for(;i.next();){const s=i.value,n=s.toVertex,o=this.linkMinLength(s);e=Math.max(e,this.Hv(n)+o)}t.layer=e}else e=t.layer;return e}rU(){let t=0;const e=this.network.vertexes.iterator;for(;e.next();){const i=e.value;t=this.qv(i),this.tt=Math.max(t,this.tt)}for(e.reset();e.next();){const i=e.value;i.layer=this.tt-i.layer}}qv(t){let e=0;if(t.layer===-1){const i=t.sourceEdges;for(;i.next();){const s=i.value,n=s.fromVertex,o=this.linkMinLength(s);e=Math.max(e,this.qv(n)+o)}t.layer=e}else e=t.layer;return e}lU(){this.Kv();const t=this.network.vertexes.iterator;for(;t.next();){const i=t.value;i.oi=!1}for(t.reset();t.next();){const i=t.value;i.sourceEdges.count===0&&this.jv(i)}let e=1/0;for(t.reset();t.next();){const i=t.value;e=Math.min(e,i.layer)}for(this.tt=-1,t.reset();t.next();){const i=t.value;i.layer-=e,this.tt=Math.max(this.tt,i.layer)}}jv(t){if(!t.oi){t.oi=!0;const e=t.destinationEdges;for(;e.next();){const s=e.value.toVertex;this.jv(s)}this.aU(t),this.hU(t)}}aU(t){const e=this.network.vertexes.iterator;for(;e.next();){const r=e.value;r.component=-1}const i=0,s=1,n=t.Lo;let o=n.length;for(let r=0;r<o;r++){const l=n[r],a=l.fromVertex,h=l.toVertex,c=this.linkMinLength(l);a.layer-h.layer>c&&this.Iw(a,i,-1,!0,!1)}for(this.Iw(t,s,-1,!0,!0);t.component!==i;){let r=0,l=1/0,a=0,h=null;const c=this.network.vertexes.iterator;for(;c.next();){const f=c.value;if(f.component===s){let u=0,d=!1;const m=f.Lo;o=m.length;for(let p=0;p<o;p++){const y=m[p],x=y.fromVertex;if(u+=this.linkLengthWeight(y),x.component!==s){r+=this.linkLengthWeight(y);const b=x.layer-f.layer,k=this.linkMinLength(y);l=Math.min(l,b-k)}}const g=f.hr;o=g.length;for(let p=0;p<o;p++){const y=g[p],x=y.toVertex;u-=this.linkLengthWeight(y),x.component!==s?r-=this.linkLengthWeight(y):d=!0}(h===null||u<a)&&!d&&(h=f,a=u)}}if(r>0){for(e.reset();e.next();){const f=e.value;f.component===s&&(f.layer+=l)}t.component=i}else h.component=i}}hU(t){const e=this.network.vertexes.iterator;for(;e.next();){const n=e.value;n.component=-1}const i=0,s=1;for(this.Iw(t,s,-1,!0,!1);t.component!==i;){let n=0,o=1/0,r=0,l=null;const a=this.network.vertexes.iterator;for(;a.next();){const h=a.value;if(h.component===s){let c=0,f=!1;const u=h.Lo;let d=u.length;for(let g=0;g<d;g++){const p=u[g],y=p.fromVertex;c+=this.linkLengthWeight(p),y.component!==s?n+=this.linkLengthWeight(p):f=!0}const m=h.hr;d=m.length;for(let g=0;g<d;g++){const p=m[g],y=p.toVertex;if(c-=this.linkLengthWeight(p),y.component!==s){n-=this.linkLengthWeight(p);const x=h.layer-y.layer,b=this.linkMinLength(p);o=Math.min(o,x-b)}}(l===null||c>r)&&!f&&(l=h,r=c)}}if(n<0){for(e.reset();e.next();){const h=e.value;h.component===s&&(h.layer-=o)}t.component=i}else l.component=i}}Z3(){const t=this.network,e=[],i=t.edges.iterator;for(;i.next();){const s=i.value;s.valid=!1,e.push(s)}for(let s=0;s<e.length;s++){const n=e[s];let o=n.fromVertex;const r=n.toVertex;if(n.valid||(o.node===null&&o.data===null||r.node===null&&r.data===null)&&o.layer===r.layer)continue;let l=0,a=0,h=0,c=0;if(n.link!==null){const P=n.link;if(P===null)continue;const S=o.node,T=r.node;if(S===null||T===null)continue;let N=P.fromNode,M=P.toNode,C=P.fromPort;for(;C!==null&&!C.isVisibleObject();)C=C.panel;let L=P.toPort;for(;L!==null&&!L.isVisibleObject();)L=L.panel;if(n.rev){const z=N,X=C;N=M,C=L,M=z,L=X}const A=o.focus,D=r.focus,F=n.rev?r.bounds:o.bounds,v=Point.l();S!==N?F.isReal()&&N.isVisible()?N.actualBounds.isReal()?(N.getRelativePoint(C,Spot.Center,v),v.x+=N.actualBounds.x-F.x,v.y+=N.actualBounds.y-F.y):(N.getRelativePoint(C,Spot.Center,v),v.isReal()||v.h(A)):v.h(A):F.isReal()?(N.getRelativePoint(C,Spot.Center,v),v.isReal()||v.h(A)):v.h(A);const R=n.rev?o.bounds:r.bounds,O=Point.l();T!==M?R.isReal()&&M.isVisible()?M.actualBounds.isReal()?(M.getRelativePoint(L,Spot.Center,O),O.x+=M.actualBounds.x-R.x,O.y+=M.actualBounds.y-R.y):(M.getRelativePoint(L,Spot.Center,O),O.isReal()||O.h(D)):O.h(D):R.isReal()?(M.getRelativePoint(L,Spot.Center,O),O.isReal()||O.h(D)):O.h(D),this.k===90||this.k===270?(l=Math.round((v.x-A.x)/this.si),h=v.x,a=Math.round((O.x-D.x)/this.si),c=O.x):(l=Math.round((v.y-A.y)/this.si),h=v.y,a=Math.round((O.y-D.y)/this.si),c=O.y),Point.i(v),Point.i(O),n.portFromColOffset=l,n.portFromPos=h,n.portToColOffset=a,n.portToPos=c}else n.portFromColOffset=0,n.portFromPos=0,n.portToColOffset=0,n.portToPos=0;let f=o.layer;const u=r.layer,d=this.cU(n),m=d===1||d===3,g=d===2||d===3;let p,y,x=null,b;g&&(x=this.fU(o,r),b=1,y=t.createVertex(),y.node=null,y.fP=1,y.layer=f,y.near=o,t.addVertex(y),p=t.linkVertexes(o,y,n.link),p.valid=!1,p.rev=n.rev,p.portFromColOffset=l,p.portToColOffset=0,p.portFromPos=h,p.portToPos=0,o=y);let k=1;if(m&&k--,f-u>k&&f>0){for(n.valid=!1,y=t.createVertex(),y.node=null,y.fP=2,y.layer=f-1,x&&b<x.length&&y.layer===x[b].layer&&(y.near=x[b++]),t.addVertex(y),p=t.linkVertexes(o,y,n.link),p.valid=!0,p.rev=n.rev,p.portFromColOffset=g?0:l,p.portToColOffset=0,p.portFromPos=g?0:h,p.portToPos=0,o=y,f--;f-u>k&&f>0;)y=t.createVertex(),y.node=null,y.fP=3,y.layer=f-1,x&&b<x.length&&y.layer===x[b].layer&&(y.near=x[b++]),t.addVertex(y),p=t.linkVertexes(o,y,n.link),p.valid=!0,p.rev=n.rev,p.portFromColOffset=0,p.portToColOffset=0,p.portFromPos=0,p.portToPos=0,o=y,f--;p=t.linkVertexes(y,r,n.link),p.valid=!m,m&&(y.near=r),p.rev=n.rev,p.portFromColOffset=0,p.portToColOffset=a,p.portFromPos=0,p.portToPos=c}else n.valid=!0}}cU(t){let e=0;const i=t.link;if(i!==null){const s=i.fromPort,n=i.toPort;if(s!==null&&n!==null){const o=i.fromNode,r=i.toNode;if(o!==null&&r!==null){const l=this.uP(!0),a=this.uP(!1),h=this.setsPortSpots?l:i.computeSpot(!0,s),c=this.setsPortSpots?a:i.computeSpot(!1,n),f=i.isOrthogonal;if(h.isSide()&&h.includesSide(a)&&c.isSide()&&c.includesSide(l))return 0;const u=i.getLinkPoint(o,s,h,!0,f,r,n,Point.l()),d=i.getLinkDirection(o,s,u,h,!0,f,r,n);Point.i(u),(!h.isNone()&&d===this.Wv(t,!0)||this.setsPortSpots&&o!==null&&o.ports.count===1&&t.rev)&&(e+=1);const m=i.getLinkPoint(r,n,c,!1,f,o,s,Point.l()),g=i.getLinkDirection(r,n,m,c,!1,f,o,s);Point.i(m),(!c.isNone()&&g===this.Wv(t,!1)||this.setsPortSpots&&r!==null&&r.ports.count===1&&t.rev)&&(e+=2)}}}return e}Wv(t,e){return this.k===90?e&&!t.rev||!e&&t.rev?270:90:this.k===180?e&&!t.rev||!e&&t.rev?0:180:this.k===270?e&&!t.rev||!e&&t.rev?90:270:e&&!t.rev||!e&&t.rev?180:0}fU(t,e){const i=[];return i.push(e),this.Jv(t,i)?i.reverse():[]}Jv(t,e){const i=e[e.length-1].sourceEdges.iterator;for(;i.next();){const s=i.value;if(s.rev||!s.valid)continue;const n=s.fromVertex;if(e.push(n),n===t||this.Jv(t,e))return!0;e.pop()}return!1}Q3(){this.re.length!==this.tt+1&&(this.re=new Int16Array(this.tt+1));const t=this.re;for(let i=0;i<=this.tt;i++)t[i]=0;const e=this.network.vertexes.iterator;for(;e.next();){const i=e.value;i.index=-1}this.initializeIndices(),this.vw=-1,this.nm=0,this.Ks=0;for(let i=0;i<=this.tt;i++)t[i]>t[this.Ks]&&(this.vw=t[i]-1,this.Ks=i),t[i]<t[this.nm]&&(this.nm=i);this.Mu=[];for(let i=0;i<t.length;i++)this.Mu[i]=[];for(e.reset();e.next();){const i=e.value,s=i.layer,n=this.Mu[s];n[i.index]=i}}initializeIndices(){switch(this.ku){default:case 22:this.uU();break;case 20:this.dU();break;case 21:this.gU();break}}uU(){let t=null;const e=this.network.vertexes.iterator;for(;e.next();){const i=e.value;if(i.near&&(t===null&&(t=new Map),i.layer===i.near.layer)){const s=t.get(i.near)||[];s.push(i),t.set(i.near,s)}}for(e.reset();e.next();){const i=e.value;if(i.near)continue;const s=i.layer;if(i.index=this.re[s],this.re[s]++,!t)continue;const n=t.get(i);Array.isArray(n)&&n.forEach(o=>{o.index=this.re[s],this.re[s]++})}}dU(){let t=null;const e=this.network.vertexes.iterator;for(;e.next();){const i=e.value;if(i.near&&(t===null&&(t=new Map),i.layer===i.near.layer)){const s=t.get(i.near)||[];s.push(i),t.set(i.near,s)}}for(let i=this.tt;i>=0;i--)for(e.reset();e.next();){const s=e.value;s.layer===i&&s.index===-1&&this.$v(s,t)}}$v(t,e){if(t.near)return;const i=t.layer;if(t.index=this.re[i],this.re[i]++,e){const o=e.get(t);Array.isArray(o)&&o.forEach(r=>{r.index=this.re[i],this.re[i]++})}const s=t.hr;let n=!0;for(;n;){n=!1;for(let o=0;o<s.length-1;o++){const r=s[o],l=s[o+1];r.portFromColOffset>l.portFromColOffset&&(n=!0,s[o]=l,s[o+1]=r)}}for(let o=0;o<s.length;o++){const r=s[o];if(r.valid){const l=r.toVertex;l.index===-1&&this.$v(l,e)}}}gU(){let t=null;const e=this.network.vertexes.iterator;for(;e.next();){const i=e.value;if(i.near&&(t===null&&(t=new Map),i.layer===i.near.layer)){const s=t.get(i.near)||[];s.push(i),t.set(i.near,s)}}for(let i=0;i<=this.tt;i++)for(e.reset();e.next();){const s=e.value;s.layer===i&&s.index===-1&&this.Zv(s,t)}}Zv(t,e){if(t.near)return;const i=t.layer;if(t.index=this.re[i],this.re[i]++,e){const a=e.get(t);Array.isArray(a)&&a.forEach(h=>{h.index=this.re[i],this.re[i]++})}const s=t.Lo;let n=!0,o=0;for(;n;)for(n=!1,o=0;o<s.length-1;o++){const a=s[o],h=s[o+1];a.portToColOffset>h.portToColOffset&&(n=!0,s[o]=h,s[o+1]=a)}let r,l;for(o=0;o<s.length;o++)l=s[o],l.valid&&(r=l.fromVertex,r.index===-1&&this.Zv(r,e))}_3(){this.Gt=-1;for(let t=0;t<=this.tt;t++){const e=this.eh(t);let i=0;const s=this.re[t];for(let n=0;n<s;n++){const o=e[n];i+=this.nodeMinColumnSpace(o,!0),o.column=i,i+=1,i+=this.nodeMinColumnSpace(o,!1)}this.Gt=Math.max(this.Gt,i-1),this.ih(t,e)}}reduceCrossings(){let t=this.countCrossings(),e=this.ni(),i=0,s=0,n=0;for(i=0;i<this.Tc;i++){for(s=0;s<=this.tt;s++)this.dP(s,1),this.xs(s,1,!1,1);for(n=this.countCrossings(),n<t&&(t=n,e=this.ni()),s=this.tt;s>=0;s--)this.dP(s,-1),this.xs(s,-1,!1,-1);n=this.countCrossings(),n<t&&(t=n,e=this.ni())}for(this.as(e),i=0;i<this.Tc;i++){for(s=0;s<=this.tt;s++)this.dP(s,0),this.xs(s,0,!1,0);for(n=this.countCrossings(),n<t&&(t=n,e=this.ni()),s=this.tt;s>=0;s--)this.dP(s,0),this.xs(s,0,!1,0);n=this.countCrossings(),n<t&&(t=n,e=this.ni())}this.as(e);let o=!1,r=0,l=0,a=0,h=0;switch(this.Pu){case 30:break;case 32:for(a=t+1;(h=this.countCrossings())<a;)for(a=h,r=this.tt;r>=0;r--)for(l=0;l<=r;l++){for(o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.xs(s,-1,!1,-1)||o;for(n=this.countCrossings(),n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.xs(s,1,!1,1)||o;for(n=this.countCrossings(),n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.xs(s,1,!1,1)||o;for(n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.xs(s,-1,!1,-1)||o;for(n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.xs(s,0,!1,0)||o;for(n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.xs(s,0,!1,0)||o;n>=t?this.as(e):(t=n,e=this.ni())}break;default:case 31:for(r=this.tt,l=0,a=t+1;(h=this.countCrossings())<a;){for(a=h,o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.xs(s,-1,!1,-1)||o;for(n=this.countCrossings(),n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.xs(s,1,!1,1)||o;for(n=this.countCrossings(),n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.xs(s,1,!1,1)||o;for(n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.xs(s,-1,!1,-1)||o;for(n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=r;s>=l;s--)o=this.xs(s,0,!1,0)||o;for(n>=t?this.as(e):(t=n,e=this.ni()),o=!0;o;)for(o=!1,s=l;s<=r;s++)o=this.xs(s,0,!1,0)||o;n>=t?this.as(e):(t=n,e=this.ni())}break}this.as(e)}dP(t,e){let i=0,s=!1;const n=this.eh(t),o=this.re[t],r=this.Xv(t,e),l=this.Ow(t,e);for(i=0;i<o;i++)l[i]===-1&&(l[i]=n[i].column),r[i]===-1&&(r[i]=n[i].column);let a=!0,h;for(;a;)for(a=!1,i=0;i<o-1;i++)if(r[i+1]<r[i]||r[i+1]===r[i]&&l[i+1]<l[i]){s=!0,a=!0;const f=r[i];r[i]=r[i+1],r[i+1]=f;const u=l[i];l[i]=l[i+1],l[i+1]=u,h=n[i],n[i]=n[i+1],n[i+1]=h}let c=0;for(i=0;i<o;i++)h=n[i],h.index=i,c+=this.nodeMinColumnSpace(h,!0),h.column=c,c+=1,c+=this.nodeMinColumnSpace(h,!1);return this.ih(t,n),s}xs(t,e,i,s){const n=this.eh(t),o=this.re[t],r=this.zv(t,e);let l=0,a;if(!i||s>0)for(a=new Float32Array(o),l=0;l<o;l++)a[l]=-1;else a=this.Ow(t,-1);let h;if(!i||s<0)for(h=new Float32Array(o),l=0;l<o;l++)h[l]=-1;else h=this.Ow(t,1);let c=!1,f=!0;for(;f;)for(f=!1,l=0;l<o-1;l++){const u=r[n[l].index*o+n[l+1].index],d=r[n[l+1].index*o+n[l].index];let m=0,g=0;const p=n[l].column,y=n[l+1].column,x=this.nodeMinColumnSpace(n[l],!0),b=this.nodeMinColumnSpace(n[l],!1),k=this.nodeMinColumnSpace(n[l+1],!0),P=this.nodeMinColumnSpace(n[l+1],!1),S=p-x+k,T=y-b+P;let N=0,M=0,C=0,L=0,A=0,D=0,F=0,v,R=0,O,z=0;const X=n[l].sourceEdges.iterator;if(i&&s<=0)for(;X.next();){const J=X.value;v=J.fromVertex,J.valid&&v.layer!==t&&(C=this.linkStraightenWeight(J),L=J.portFromColOffset,A=J.portToColOffset,D=v.column,N+=(Math.abs(p+A-(D+L))+1)*C,M+=(Math.abs(T+A-(D+L))+1)*C)}for(X.reset();X.next();){const J=X.value;if(v=J.fromVertex,J.valid&&v.layer===t){for(R=0;R<n.length&&n[R]!==v;)R++;R<l&&(m+=2*(l-R),g+=2*(l+1-R)),R===l+1&&(m+=1),R>l+1&&(m+=4*(R-l),g+=4*(R-(l+1)))}}const E=n[l].destinationEdges.iterator;if(i&&s>=0)for(;E.next();){const J=E.value;O=J.toVertex,J.valid&&O.layer!==t&&(C=this.linkStraightenWeight(J),L=J.portFromColOffset,A=J.portToColOffset,F=O.column,N+=(Math.abs(p+L-(F+A))+1)*C,M+=(Math.abs(T+L-(F+A))+1)*C)}for(E.reset();E.next();){const J=E.value;if(O=J.toVertex,J.valid&&O.layer===t){for(z=0;z<n.length&&n[z]!==O;)z++;z===l+1&&(g+=1)}}const Y=n[l+1].sourceEdges.iterator;if(i&&s<=0)for(;Y.next();){const J=Y.value;v=J.fromVertex,J.valid&&v.layer!==t&&(C=this.linkStraightenWeight(J),L=J.portFromColOffset,A=J.portToColOffset,D=v.column,N+=(Math.abs(y+A-(D+L))+1)*C,M+=(Math.abs(S+A-(D+L))+1)*C)}for(Y.reset();Y.next();){const J=Y.value;if(v=J.fromVertex,J.valid&&v.layer===t){for(R=0;R<n.length&&n[R]!==v;)R++;R<l&&(m+=2*(l+1-R),g+=2*(l-R)),R===l&&(g+=1),R>l+1&&(m+=4*(R-(l+1)),g+=4*(R-l))}}const V=n[l+1].destinationEdges.iterator;if(i&&s>=0)for(;V.next();){const J=V.value;O=J.toVertex,J.valid&&O.layer!==t&&(C=this.linkStraightenWeight(J),L=J.portFromColOffset,A=J.portToColOffset,F=O.column,N+=(Math.abs(y+L-(F+A))+1)*C,M+=(Math.abs(S+L-(F+A))+1)*C)}for(V.reset();V.next();){const J=V.value;if(O=J.toVertex,J.valid&&O.layer===t){for(z=0;z<n.length&&n[z]!==O;)z++;z===l&&(m+=1)}}let H=0,q=0;const W=a[n[l].index],Z=h[n[l].index],B=a[n[l+1].index],$=h[n[l+1].index];if(W!==-1&&(H+=Math.abs(W-p),q+=Math.abs(W-T)),Z!==-1&&(H+=Math.abs(Z-p),q+=Math.abs(Z-T)),B!==-1&&(H+=Math.abs(B-y),q+=Math.abs(B-S)),$!==-1&&(H+=Math.abs($-y),q+=Math.abs($-S)),g<m-.5||g===m&&d<u-.5||g===m&&d===u&&M<N-.5||g===m&&d===u&&M===N&&q<H-.5){c=!0,f=!0,n[l].column=T,n[l+1].column=S;const J=n[l];n[l]=n[l+1],n[l+1]=J}}for(l=0;l<o;l++)n[l].index=l;return this.ih(t,n),c}straightenAndPack(){if(this.qn!==0){this.mU();return}let t=0,e=!1,i=(this.gr&1)!==0;const s=(this.gr&8)!==0;if(this.network.edges.count>1e3&&s&&(i=!1),i){const n=[];let o=0;for(o=0;o<=this.tt;o++)n[o]=0;let r=0;const l=this.network.vertexes.iterator;for(;l.next();){const h=l.value;t=h.layer,r=h.column;const c=this.nodeMinColumnSpace(h,!1);n[t]=Math.max(n[t],r+c)}const a=8;for(l.reset();l.next();){const h=l.value;t=h.layer,r=h.column,h.column=((this.Gt-n[t])*a>>1)+r*a}this.Gt*=a}if((this.gr&2)!==0){e=!0;let n=0;for(;e&&n<this.Su;){for(e=!1,t=this.Ks+1;t<=this.tt;t++)e=this.lm(t,1)||e;for(t=this.Ks-1;t>=0;t--)e=this.lm(t,-1)||e;e=this.lm(this.Ks,0)||e,n++}}if((this.gr&4)!==0){for(t=this.Ks+1;t<=this.tt;t++)this.YT(t,1);for(t=this.Ks-1;t>=0;t--)this.YT(t,-1);this.YT(this.Ks,0)}if(i&&(this.Qv(-1),this.Qv(1)),(this.gr&2)!==0){e=!0;let n=0;for(;e&&n<this.Su;){for(e=!1,e=this.lm(this.Ks,0)||e,t=this.Ks+1;t<=this.tt;t++)e=this.lm(t,0)||e;for(t=this.Ks-1;t>=0;t--)e=this.lm(t,0)||e;n++}}}lm(t,e){let i=!1;for(;this.pU(t,e);)i=!0;return i}pU(t,e){let i=0;const s=this.eh(t),n=this.re[t],o=this.Ow(t,-1);if(e>0)for(i=0;i<n;i++)o[i]=-1;const r=this.Ow(t,1);if(e<0)for(i=0;i<n;i++)r[i]=-1;let l=!1,a=!0;for(;a;)for(a=!1,i=0;i<n;i++){const h=s[i].column,c=this.nodeMinColumnSpace(s[i],!0),f=this.nodeMinColumnSpace(s[i],!1);let u=0;i-1<0||h-s[i-1].column-1>c+this.nodeMinColumnSpace(s[i-1],!1)?u=h-1:u=h;let d=0;i+1>=n||s[i+1].column-h-1>f+this.nodeMinColumnSpace(s[i+1],!0)?d=h+1:d=h;let m=0,g=0,p=0,y=0,x=0,b=0;if(e<=0){const M=s[i].sourceEdges.iterator;for(;M.next();){const C=M.value,L=C.fromVertex;if(C.valid&&L.layer!==t){y=this.linkStraightenWeight(C),x=C.portFromColOffset,b=C.portToColOffset;const A=L.column;m+=(Math.abs(h+b-(A+x))+1)*y,g+=(Math.abs(u+b-(A+x))+1)*y,p+=(Math.abs(d+b-(A+x))+1)*y}}}if(e>=0){const M=s[i].destinationEdges.iterator;for(;M.next();){const C=M.value,L=C.toVertex;if(C.valid&&L.layer!==t){y=this.linkStraightenWeight(C),x=C.portFromColOffset,b=C.portToColOffset;const A=L.column;m+=(Math.abs(h+x-(A+b))+1)*y,g+=(Math.abs(u+x-(A+b))+1)*y,p+=(Math.abs(d+x-(A+b))+1)*y}}}let k=0,P=0,S=0;const T=o[s[i].index],N=r[s[i].index];T!==-1&&(k+=Math.abs(T-h),P+=Math.abs(T-u),S+=Math.abs(T-d)),N!==-1&&(k+=Math.abs(N-h),P+=Math.abs(N-u),S+=Math.abs(N-d)),g<m||g===m&&P<k?(l=!0,a=!0,s[i].column=u):(p<m||p===m&&S<k)&&(l=!0,a=!0,s[i].column=d)}return this.ih(t,s),this.Rw(),l}YT(t,e){let i=0;const s=this.eh(t),n=this.re[t],o=this.Xv(t,e),r=new Int16Array(o);let l=!1,a=!0;for(;a;)for(a=!1,i=0;i<n;i++){const h=s[i].column,c=this.nodeMinColumnSpace(s[i],!0),f=this.nodeMinColumnSpace(s[i],!1);let u=0,d=0,m=0,g=0,p=0;r[i]===-1?i===0&&i===n-1?u=h:i===0?(d=s[i+1].column,d-h===f+this.nodeMinColumnSpace(s[i+1],!0)?u=h-1:u=h):i===n-1?(m=s[i-1].column,h-m===c+this.nodeMinColumnSpace(s[i-1],!1)?u=h+1:u=h):(m=s[i-1].column,p=m+this.nodeMinColumnSpace(s[i-1],!1)+c+1,d=s[i+1].column,g=d-this.nodeMinColumnSpace(s[i+1],!0)-f-1,u=(p+g)/2|0):i===0&&i===n-1?u=r[i]:i===0?(d=s[i+1].column,g=d-this.nodeMinColumnSpace(s[i+1],!0)-f-1,u=Math.min(r[i],g)):i===n-1?(m=s[i-1].column,p=m+this.nodeMinColumnSpace(s[i-1],!1)+c+1,u=Math.max(r[i],p)):(m=s[i-1].column,p=m+this.nodeMinColumnSpace(s[i-1],!1)+c+1,d=s[i+1].column,g=d-this.nodeMinColumnSpace(s[i+1],!0)-f-1,p<r[i]&&r[i]<g?u=r[i]:p>=r[i]?u=p:g<=r[i]&&(u=g)),u!==h&&(l=!0,a=!0,s[i].column=u)}return this.ih(t,s),this.Rw(),l}yU(){for(let t=0;t<=this.Gt;t++)for(;this.wU(t,1););this.Rw()}wU(t,e){let i=!0;const s=this.network.vertexes.iterator;for(;s.next();){const o=s.value,r=this.nodeMinColumnSpace(o,!0),l=this.nodeMinColumnSpace(o,!1);if(o.column-r<=t&&o.column+l>=t){i=!1;break}}let n=!1;if(i){if(e>0)for(s.reset();s.next();){const o=s.value;o.column>t&&(o.column-=1,n=!0)}if(e<0)for(s.reset();s.next();){const o=s.value;o.column<t&&(o.column+=1,n=!0)}}return n}xU(){this.yU();for(let t=0;t<this.Gt;t++)for(;this.bU(t,1););this.Rw()}bU(t,e){let i=t;e>0&&(i=t+1),e<0&&(i=t-1);let s=0;const n=[],o=[];for(s=0;s<=this.tt;s++)n[s]=!1,o[s]=!1;const r=this.network.vertexes.iterator;for(;r.next();){const h=r.value,c=h.column-this.nodeMinColumnSpace(h,!0),f=h.column+this.nodeMinColumnSpace(h,!1);c<=t&&f>=t&&(n[h.layer]=!0),c<=i&&f>=i&&(o[h.layer]=!0)}let l=!0,a=!1;for(s=0;s<=this.tt;s++)l=l&&!(n[s]&&o[s]);if(l){if(e>0)for(r.reset();r.next();){const h=r.value;h.column>t&&(h.column-=1,a=!0)}if(e<0)for(r.reset();r.next();){const h=r.value;h.column<t&&(h.column+=1,a=!0)}}return a}Qv(t){this.xU();let e=0,i,s=0,n=0,o=0;if(t>0)for(e=0;e<=this.Gt;e++)for(i=this.ni(),s=this.cP(!0),n=s+1;s<n;)n=s,this._v(e,1),o=this.cP(!0),o>s?this.as(i):o<s&&(s=o,i=this.ni());if(t<0)for(e=this.Gt;e>=0;e--)for(i=this.ni(),s=this.cP(!0),n=s+1;s<n;)n=s,this._v(e,-1),o=this.cP(!0),o>s?this.as(i):o<s&&(s=o,i=this.ni());this.Rw()}_v(t,e){this.mn=0;const i=this.network.vertexes.iterator;for(;i.next();){const c=i.value;c.component=-1}if(e>0)for(i.reset();i.next();){const c=i.value;c.column-this.nodeMinColumnSpace(c,!0)<=t&&(c.component=this.mn)}if(e<0)for(i.reset();i.next();){const c=i.value;c.column+this.nodeMinColumnSpace(c,!1)>=t&&(c.component=this.mn)}for(this.mn++,i.reset();i.next();){const c=i.value;c.component===-1&&(this.XT(c,this.mn,-1,!0,!0),this.mn++)}let s=0;const n=[];for(s=0;s<this.mn*this.mn;s++)n[s]=!1;const o=[];for(s=0;s<(this.tt+1)*(this.Gt+1);s++)o[s]=-1;for(i.reset();i.next();){const c=i.value,f=c.layer,u=Math.max(0,c.column-this.nodeMinColumnSpace(c,!0)),d=Math.min(this.Gt,c.column+this.nodeMinColumnSpace(c,!1));for(let m=u;m<=d;m++)o[f*(this.Gt+1)+m]=c.component}for(let c=0;c<=this.tt;c++){if(e>0)for(let f=0;f<this.Gt;f++)o[c*(this.Gt+1)+f]!==-1&&o[c*(this.Gt+1)+f+1]!==-1&&o[c*(this.Gt+1)+f]!==o[c*(this.Gt+1)+f+1]&&(n[o[c*(this.Gt+1)+f]*this.mn+o[c*(this.Gt+1)+f+1]]=!0);if(e<0)for(let f=this.Gt;f>0;f--)o[c*(this.Gt+1)+f]!==-1&&o[c*(this.Gt+1)+f-1]!==-1&&o[c*(this.Gt+1)+f]!==o[c*(this.Gt+1)+f-1]&&(n[o[c*(this.Gt+1)+f]*this.mn+o[c*(this.Gt+1)+f-1]]=!0)}const r=[];for(s=0;s<this.mn;s++)r[s]=!0;const l=[];l.push(0);let a=0;for(;l.length!==0;)if(a=l[l.length-1],l.pop(),r[a])for(r[a]=!1,s=0;s<this.mn;s++)n[a*this.mn+s]&&l.splice(0,0,s);let h=!1;if(e>0)for(i.reset();i.next();){const c=i.value;r[c.component]&&(c.column-=1,h=!0)}if(e<0)for(i.reset();i.next();){const c=i.value;r[c.component]&&(c.column+=1,h=!0)}return h}mU(){const t=U.ot(),e=this.Mu.length;for(let u=0;u<=e;u++)t[u]=[];const i=this.network.vertexes.iterator;for(;i.next();){const u=i.value,d=e-u.layer,m=t[d];m[u.index]=u}const s=new GSet;this.kU(t,s);let n=null,o=null,r=null,l=null;const a=(this.qn&1)!==0,h=(this.qn&2)!==0,c=(this.qn&4)!==0,f=(this.qn&8)!==0;a&&(this.wl(t,s,!0),n=this.gP(t,!0,!1)),t.reverse(),c&&(this.wl(t,s,!1),r=this.gP(t,!1,!1));for(const u of t)u.reverse();f&&(this.wl(t,s,!1),l=this.gP(t,!1,!0)),t.reverse(),h&&(this.wl(t,s,!0),o=this.gP(t,!0,!0)),U._(t),this.PU(n,o,r,l),this.network.vertexes.each(u=>{const d=u,m=U.ot();a&&m.push(n.get(d)),h&&m.push(o.get(d)),c&&m.push(r.get(d)),f&&m.push(l.get(d)),m.sort((b,k)=>b-k);const g=m.length,p=Math.floor((g-1)/2),y=Math.ceil((g-1)/2),x=(m[p]+m[y])/2;U._(m),d.wi=x})}kU(t,e){const i=t.length;for(let s=1;s<i-1;s++){let n=0,o=0;const r=t[s],l=t[s+1];for(let a=0;o<l.length;a++){const h=l[a],c=this.SU(h);if(a===l.length-1||c){let f=r.length-1;for(c&&(f=h.getProperSourceVertexes()[0].index);o<=a;){const d=l[o].getProperSourceEdges();for(const m of d){const p=m.fromVertex.index;(p<n||p>f)&&e.add(m)}o++}n=f}}}}SU(t){if(t.node===null){const e=t.getProperSourceVertexes();if(e.length>0)return e[0].node===null}return!1}wl(t,e,i){this.MU(t);for(const s of t){let n=-1;for(const o of s){const r=i?o.getProperSourceVertexes():o.getProperDestinationVertexes(),l=r.length;if(l>0){r.sort((h,c)=>h.nh-c.nh);const a=(l-1)/2;for(let h=Math.floor(a),c=Math.ceil(a);h<=c;h++)if(o.jn===o){const f=r[h];let u;i?u=f.getDestinationEdge(o):u=o.getDestinationEdge(f),!e.has(u)&&n<f.nh&&(f.jn=o,o.Lc=f.Lc,o.jn=f.Lc,n=f.nh)}}}}}MU(t){for(let e=0;e<t.length;e++){const i=t[e];for(let s=0;s<i.length;s++){const n=i[s];n.Lc=n,n.jn=n,n.tR=e,n.nh=s}}}gP(t,e,i){const s=this.k===90||this.k===270;for(const o of t)for(const r of o)r.hs=r,r.Nu=1/0,r.wi=NaN,r.Wn=0;this.CU(t,e,i);for(const o of t)for(const r of o)r.Lc===r&&this.eR(r,t);for(let o=0;o<t.length;o++){if(t[o].length<=0)continue;const r=t[o][0];if(r.hs===r){r.hs.Nu===1/0&&(r.hs.Nu=0);let l=o,a=0,h;do{for(h=t[l][a];h.jn!==h.Lc;)if(h=h.jn,l++,h.nh>0){const c=this.iR(h,t),f=s?c.width:c.height,u=h.hs.Nu+h.wi+h.Wn-(c.wi+c.Wn+f+this.columnSpacing);c.hs.Nu=Math.min(c.hs.Nu,u)}a=h.nh+1}while(l<t.length&&a<t[l].length&&h.hs===t[l][a].hs)}}const n=new GMap;for(const o of t)for(const r of o){r.wi=r.wi+r.hs.Nu+r.Wn;const l=s?r.width:r.height;n.set(r,i?-r.wi-l:r.wi)}return n}CU(t,e,i){const s=this.k===90||this.k===270;for(const n of t)for(const o of n)if(o.Lc===o){let r=0,l=o;for(;l.jn!==o;){const a=l.jn,h=s?l.width:l.height,c=s?a.width:a.height;let f,u,d,m;e?(d=l.getDestinationEdge(a),f=d.portFromPos,u=d.portToPos,d.link!==null&&(l.node&&l.node!==d.link.fromNode&&(f=s?l.focusX:l.focusY),a.node&&a.node!==d.link.toNode&&(u=s?a.focusX:a.focusY)),i?m=l.Wn+(h-f)-(c-u):m=l.Wn+f-u):(d=a.getDestinationEdge(l),f=d.portToPos,u=d.portFromPos,d.link!==null&&(l.node&&l.node!==d.link.toNode&&(f=s?l.focusX:l.focusY),a.node&&a.node!==d.link.fromNode&&(u=s?a.focusX:a.focusY)),i?m=l.Wn+(h-f)-(c-u):m=l.Wn+f-u),a.Wn=m,r=Math.min(r,m),l=l.jn}l=o;do l.Wn=l.Wn-r,l=l.jn;while(l!==o)}}eR(t,e){if(!isNaN(t.wi))return;t.wi=0;let i=t;do{if(i.nh>0){const s=this.iR(i,e),n=s.Lc;this.eR(n,e),t.hs===t&&(t.hs=n.hs);const o=this.k===90||this.k===270?s.width:s.height;if(t.hs===n.hs){const r=n.wi+s.Wn+o-i.Wn+this.columnSpacing;t.wi=Math.max(t.wi,r)}}i=i.jn}while(i!==t);for(;i.jn!==t;)i=i.jn,i.wi=t.wi,i.hs=t.hs}iR(t,e){const i=t.tR,s=t.nh;return s<1&&U.n("Could not determine previous vertex in layer"),e[i][s-1]}PU(...t){let e=-1;const i=U.ot(),s=U.ot();let n=1/0;for(let o=0;o<4;o++){if(!t[o])continue;const r=this.NU(t[o],i,s,o);r<n&&(e=o,n=r)}for(let o=0;o<4;o++){const r=t[o];if(!r)continue;const l=o===0||o===2?i[e]-i[o]:s[e]-s[o];l!==0&&r.each(a=>{r.set(a.key,a.value+l)})}U._(i),U._(s)}NU(t,e,i,s){if(!t||t.count===0)return e[s]=0,i[s]=0,1/0;let n=1/0,o=-1/0;return t.each(r=>{const l=r.key,a=r.value,h=this.k===90||this.k===270?l.width:l.height;a<n&&(n=a),a+h>o&&(o=a+h)}),e[s]=n,i[s]=o,o-n}commitLayout(){this.Fw(),this.commitNodes(),this.KT(),this.isRouting&&this.commitLinks()}Fw(){if(!this.setsPortSpots)return;const t=this.uP(!0),e=this.uP(!1),i=this.network.edges.iterator;for(;i.next();){const n=i.value.link;n!==null&&(n.fromSpot=t,n.toSpot=e)}}uP(t){return this.k===270?t?Spot.MiddleTop:Spot.MiddleBottom:this.k===90?t?Spot.MiddleBottom:Spot.MiddleTop:this.k===180?t?Spot.MiddleLeft:Spot.MiddleRight:t?Spot.MiddleRight:Spot.MiddleLeft}commitNodes(){this.Hs.length!==this.tt+1&&(this.Hs=new Float32Array(this.tt+1)),this.ys.length!==this.tt+1&&(this.ys=new Float32Array(this.tt+1)),this.ws.length!==this.tt+1&&(this.ws=new Float32Array(this.tt+1)),this.It.length!==this.tt+1&&(this.It=new Float32Array(this.tt+1));for(let d=0;d<=this.tt;d++)this.Hs[d]=0,this.ys[d]=0,this.ws[d]=0,this.It[d]=0;const t=this.network.vertexes.iterator;for(;t.next();){const d=t.value,m=d.layer;this.Hs[m]=Math.max(this.Hs[m],this.nodeMinLayerSpace(d,!0)),this.ys[m]=Math.max(this.ys[m],this.nodeMinLayerSpace(d,!1))}let e=0;const i=this.Ys;for(let d=0;d<=this.tt;d++){let m=i;this.Hs[d]+this.ys[d]<=0&&(m=0),d>0&&(e+=m/2),this.k===90||this.k===0?(e+=this.ys[d],this.ws[d]=e,e+=this.Hs[d]):(e+=this.Hs[d],this.ws[d]=e,e+=this.ys[d]),d<this.tt&&(e+=m/2),this.It[d]=e}const s=e,n=this.arrangementOrigin;for(let d=0;d<=this.tt;d++)this.k===270?this.ws[d]=n.y+this.ws[d]:this.k===90?(this.ws[d]=n.y+s-this.ws[d],this.It[d]=s-this.It[d]):this.k===180?this.ws[d]=n.x+this.ws[d]:(this.ws[d]=n.x+s-this.ws[d],this.It[d]=s-this.It[d]);const o=this.qn!==0;t.reset();const r=this.k===270||this.k===90;let l=1/0,a=1/0,h=1/0,c=-1/0;for(;t.next();){const d=t.value,m=d.layer,g=d.column|0;let p=0,y=0;r?(p=n.x+this.si*g,y=this.ws[m]):(p=this.ws[m],y=n.y+this.si*g),d.centerX=p,d.centerY=y,o&&isFinite(d.wi)&&(r?d.node?d.x=n.x+d.wi:d.centerX=n.x+d.wi:d.node?d.y=n.y+d.wi:d.centerY=n.y+d.wi),l=Math.min(d.x,l),a=Math.min(d.y,a),r?(h=l,c=Math.max(c,d.bounds.right)):(h=a,c=Math.max(c,d.bounds.bottom))}this.zT=c-h;const f=n.x-l,u=n.y-a;for(this.pr=new Point(o&&r?0:f,o&&!r?0:u),t.reset();t.next();){const d=t.value;d.x+=f,d.y+=u,d.commit()}}KT(){let t=0;const e=this.Ys;for(let n=0;n<=this.tt;n++)t+=this.Hs[n],t+=this.ys[n];t+=this.tt*e;const i=[],s=this.qn!==0?this.zT:this.si*this.Gt;for(let n=this.maxLayer;n>=0;n--)this.k===270?n===0?i.push(new Rect(0,0,s,Math.abs(this.It[0]))):i.push(new Rect(0,this.It[n-1],s,Math.abs(this.It[n-1]-this.It[n]))):this.k===90?n===0?i.push(new Rect(0,this.It[0],s,Math.abs(this.It[0]-t))):i.push(new Rect(0,this.It[n],s,Math.abs(this.It[n-1]-this.It[n]))):this.k===180?n===0?i.push(new Rect(0,0,Math.abs(this.It[0]),s)):i.push(new Rect(this.It[n-1],0,Math.abs(this.It[n-1]-this.It[n]),s)):n===0?i.push(new Rect(this.It[0],0,Math.abs(this.It[0]-t),s)):i.push(new Rect(this.It[n],0,Math.abs(this.It[n-1]-this.It[n]),s));this.commitLayers(i,this.pr)}commitLayers(t,e){}commitLinks(){const t=this.network.edges.iterator;let e=null;for(;t.next();)e=t.value.link,e!==null&&e.pointsCount>0&&(e.startRoute(),e.clearPoints(),e.commitRoute());for(t.reset();t.next();)e=t.value.link,e!==null&&e.updateRoute();for(t.reset();t.next();){const i=t.value;if(e=i.link,e===null||e.pointsCount===0)continue;e.startRoute();const s=e;let n=s.fromNode,o=s.toNode,r=s.fromPort,l=s.toPort;if(n!==null){const C=n.findVisibleNode();C!==null&&C!==n&&(n=C,r=C.port)}if(o!==null){const C=o.findVisibleNode();C!==null&&C!==o&&(o=C,l=C.port)}const a=e.computeSpot(!0,r),h=e.computeSpot(!1,l);let c=i.fromVertex,f=i.toVertex;if(i.valid){if(e.curve===9&&e.pointsCount===4)if(c.column===f.column&&this.alignOption===0){const C=e.getLinkPoint(n,r,a,!0,!1,o,l),L=e.getLinkPoint(o,l,h,!1,!1,n,r);C.isReal()||C.set(n.actualBounds.center),L.isReal()||L.set(o.actualBounds.center),e.clearPoints(),e.addPointAt(C.x,C.y),e.addPointAt((2*C.x+L.x)/3,(2*C.y+L.y)/3),e.addPointAt((C.x+2*L.x)/3,(C.y+2*L.y)/3),e.addPointAt(L.x,L.y)}else{let C=!1,L=!1;if(r!==null&&e.Ll(a)&&(C=!0),l!==null&&e.Ll(h)&&(L=!0),C||L){let A=null;C&&(A=e.getLinkPointFromPoint(n,r,r.getDocumentPoint(Spot.Center),e.getPoint(3),!0),A.isReal()||A.set(n.actualBounds.center),e.setPointAt(0,A.x,A.y));let D=null;if(L&&(D=e.getLinkPointFromPoint(o,l,l.getDocumentPoint(Spot.Center),e.getPoint(0),!1),D.isReal()||D.set(o.actualBounds.center),e.setPointAt(3,D.x,D.y)),A){const F=e.getPoint(2);e.setPointAt(1,(A.x*2+F.x)/3,(A.y*2+F.y)/3)}if(D){const F=e.getPoint(1);e.setPointAt(2,(D.x*2+F.x)/3,(D.y*2+F.y)/3)}}}e.commitRoute();continue}if(c.layer===f.layer){e.commitRoute();continue}let u=!1,d=!1;const m=this.Ys;let g=0,p=e.firstPickIndex+1;if(e.isOrthogonal)d=!0,g=e.pointsCount,g>4&&e.points.removeRange(2,g-3);else if(e.curve===9)u=!0,g=e.pointsCount,g>4&&e.points.removeRange(2,g-3),g===4&&(p=2);else{g=e.pointsCount;const C=a===Spot.None,L=h===Spot.None;g>2&&C&&L?e.points.removeRange(1,g-2):g>3&&C&&!L?e.points.removeRange(1,g-3):g>3&&!C&&L?e.points.removeRange(2,g-2):g>4&&!C&&!L&&e.points.removeRange(2,g-3)}let y,x,b=0,k=0,P=0,S=0,T=0,N=0,M=0;if(i.rev){let C=0;for(;f!==null&&c!==f;){y=null,x=null;const L=f.sourceEdges.iterator;for(;L.next();){const A=L.value;if(A.link===i.link&&(y=A.fromVertex,x=A.toVertex,y.node===null))break}if(y===null)break;if(y!==c)if(b=e.getPoint(p-1).x,k=e.getPoint(p-1).y,P=y.centerX,S=y.centerY,d)this.k===180||this.k===0?p===e.firstPickIndex+1?(e.insertPointAt(p++,b,k),e.insertPointAt(p++,b,S)):(x!==null?x.centerY:k)!==S&&(T=this.It[y.layer-1]+this.pr.x,e.insertPointAt(p++,T,k),e.insertPointAt(p++,T,S)):p===e.firstPickIndex+1?(e.insertPointAt(p++,b,k),e.insertPointAt(p++,P,k)):(x!==null?x.centerX:b)!==P&&(T=this.It[y.layer-1]+this.pr.y,e.insertPointAt(p++,b,T),e.insertPointAt(p++,P,T));else if(p===e.firstPickIndex+1)if(N=Math.max(10,this.Hs[f.layer]),M=Math.max(10,this.ys[f.layer]),u)this.k===180?P<=f.bounds.x?(C=f.bounds.x,e.insertPointAt(p++,C-N,S),e.insertPointAt(p++,C,S),e.insertPointAt(p++,C+M,S)):(e.insertPointAt(p++,P-N,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P+M,S)):this.k===90?S>=f.bounds.bottom?(C=f.bounds.y+f.bounds.height,e.insertPointAt(p++,P,C+M),e.insertPointAt(p++,P,C),e.insertPointAt(p++,P,C-N)):(e.insertPointAt(p++,P,S+M),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S-N)):this.k===270?S<=f.bounds.y?(C=f.bounds.y,e.insertPointAt(p++,P,C-N),e.insertPointAt(p++,P,C),e.insertPointAt(p++,P,C+M)):(e.insertPointAt(p++,P,S-N),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S+M)):this.k===0&&(P>=f.bounds.right?(C=f.bounds.x+f.bounds.width,e.insertPointAt(p++,C+M,S),e.insertPointAt(p++,C,S),e.insertPointAt(p++,C-N,S)):(e.insertPointAt(p++,P+M,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P-N,S)));else{e.insertPointAt(p++,b,k);let A=0;this.k===180||this.k===0?((this.k===180?P>=f.bounds.right:P<=f.bounds.x)&&(A=(this.k===0?-N:M)/2),e.insertPointAt(p++,b+A,S)):((this.k===270?S>=f.bounds.bottom:S<=f.bounds.y)&&(A=(this.k===90?-N:M)/2),e.insertPointAt(p++,P,k+A)),e.insertPointAt(p++,P,S)}else N=Math.max(10,this.Hs[y.layer]),M=Math.max(10,this.ys[y.layer]),u?this.k===180?(e.insertPointAt(p++,P-N-Math.max(10,m),S),e.insertPointAt(p++,Math.min(P-N+m/2,P),S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,Math.max(P+M-m/2,P),S),e.insertPointAt(p++,P+M+m,S)):this.k===90?(e.insertPointAt(p++,P,S+M+Math.max(10,m)),e.insertPointAt(p++,P,Math.max(S+M-m/2,S)),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,Math.min(S-N+m/2,S)),e.insertPointAt(p++,P,S-N-m)):this.k===270?(e.insertPointAt(p++,P,S-N-Math.max(10,m)),e.insertPointAt(p++,P,Math.min(S-N+m/2,S)),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,Math.max(S+M-m/2,S)),e.insertPointAt(p++,P,S+M+m)):(e.insertPointAt(p++,P+M+Math.max(10,m),S),e.insertPointAt(p++,Math.max(P+M-m/2,P),S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,Math.min(P-N+m/2,P),S),e.insertPointAt(p++,P-N-m,S)):(this.k===180||this.k===90||this.k,e.insertPointAt(p++,P,S));f=y}if(l===null||a!==Spot.None||d)if(b=e.getPoint(p-1).x,k=e.getPoint(p-1).y,P=e.getPoint(p).x,S=e.getPoint(p).y,d){const L=this.ys[c.layer];let A=0;this.k===180||this.k===0?(A=k,A>=c.bounds.y&&A<=c.bounds.bottom&&(this.k===180?P>=c.bounds.x:P<=c.bounds.right)&&(C=c.centerX+(this.k===180?-L:L),A<c.bounds.y+c.bounds.height/2?A=c.bounds.y-this.si/2:A=c.bounds.bottom+this.si/2,e.insertPointAt(p++,C,k),e.insertPointAt(p++,C,A)),e.insertPointAt(p++,P,A),e.insertPointAt(p++,P,S)):(A=b,A>=c.bounds.x&&A<=c.bounds.right&&(this.k===270?S>=c.bounds.y:S<=c.bounds.bottom)&&(C=c.centerY+(this.k===270?-L:L),A<c.bounds.x+c.bounds.width/2?A=c.bounds.x-this.si/2:A=c.bounds.right+this.si/2,e.insertPointAt(p++,b,C),e.insertPointAt(p++,A,C)),e.insertPointAt(p++,A,S),e.insertPointAt(p++,P,S))}else if(u)N=Math.max(10,this.Hs[c.layer]),M=Math.max(10,this.ys[c.layer]),this.k===180&&P>=c.bounds.x?(C=c.bounds.x+c.bounds.width,e.setPointAt(p-2,C,k),e.setPointAt(p-1,C+M,k)):this.k===90&&S<=c.bounds.bottom?(C=c.bounds.y,e.setPointAt(p-2,b,C),e.setPointAt(p-1,b,C-N)):this.k===270&&S>=c.bounds.y?(C=c.bounds.y+c.bounds.height,e.setPointAt(p-2,b,C),e.setPointAt(p-1,b,C+M)):this.k===0&&P<=c.bounds.right&&(C=c.bounds.x,e.setPointAt(p-2,C,k),e.setPointAt(p-1,C-N,k));else{N=Math.max(10,this.Hs[c.layer]),M=Math.max(10,this.ys[c.layer]);let L=0;this.k===180||this.k===0?((this.k===180?P<=c.bounds.x:P>=c.bounds.right)&&(L=(this.k===0?M:-N)/2),e.insertPointAt(p++,P+L,k)):((this.k===270?S<=c.bounds.y:S>=c.bounds.bottom)&&(L=(this.k===90?M:-N)/2),e.insertPointAt(p++,b,S+L)),e.insertPointAt(p++,P,S)}}else{for(;c!==null&&c!==f;){y=null,x=null;const C=c.destinationEdges.iterator;for(;C.next();){const L=C.value;if(L.link===i.link&&(y=L.toVertex,x=L.fromVertex,x.node!==null&&(x=null),y.node===null))break}if(y===null)break;y!==f&&(b=e.getPoint(p-1).x,k=e.getPoint(p-1).y,P=y.centerX,S=y.centerY,d?this.k===180||this.k===0?(x!==null?x.centerY:k)!==S&&(T=this.It[y.layer]+this.pr.x,p===e.firstPickIndex+1&&(this.k===0?T=Math.max(T,b):T=Math.min(T,b)),e.insertPointAt(p++,T,k),e.insertPointAt(p++,T,S)):(x!==null?x.centerX:b)!==P&&(T=this.It[y.layer]+this.pr.y,p===e.firstPickIndex+1&&(this.k===90?T=Math.max(T,k):T=Math.min(T,k)),e.insertPointAt(p++,b,T),e.insertPointAt(p++,P,T)):(N=Math.max(10,this.Hs[y.layer]),M=Math.max(10,this.ys[y.layer]),u?this.k===180?(e.insertPointAt(p++,P+M+Math.max(10,m),S),e.insertPointAt(p++,Math.max(P+M-m/2,P),S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,Math.min(P-N+m/2,P),S),e.insertPointAt(p++,P-N-m,S)):this.k===90?(e.insertPointAt(p++,P,S-N-Math.max(10,m)),e.insertPointAt(p++,P,Math.min(S-N+m/2,S)),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,Math.max(S+M-m/2,S)),e.insertPointAt(p++,P,S+M+m)):this.k===270?(e.insertPointAt(p++,P,S+M+Math.max(10,m)),e.insertPointAt(p++,P,Math.max(S+M-m/2,S)),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,Math.min(S-N+m/2,S)),e.insertPointAt(p++,P,S-N-m)):(e.insertPointAt(p++,P-N-Math.max(10,m),S),e.insertPointAt(p++,Math.min(P-N+m/2,P),S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,P,S),e.insertPointAt(p++,Math.max(P+M-m/2,P),S),e.insertPointAt(p++,P+M+m,S)):this.k===180?(e.insertPointAt(p++,P+M,S),e.insertPointAt(p++,P-N,S)):this.k===90?(e.insertPointAt(p++,P,S-N),e.insertPointAt(p++,P,S+M)):this.k===270?(e.insertPointAt(p++,P,S+M),e.insertPointAt(p++,P,S-N)):(e.insertPointAt(p++,P-N,S),e.insertPointAt(p++,P+M,S)))),c=y}d&&(b=e.getPoint(p-1).x,k=e.getPoint(p-1).y,P=e.getPoint(p).x,S=e.getPoint(p).y,this.k===180||this.k===0?k!==S&&(this.k===0?T=Math.min(Math.max((P+b)/2,this.It[f.layer]+this.pr.x),P):T=Math.max(Math.min((P+b)/2,this.It[f.layer]+this.pr.x),P),e.insertPointAt(p++,T,k),e.insertPointAt(p++,T,S)):b!==P&&(this.k===90?T=Math.min(Math.max((S+k)/2,this.It[f.layer]+this.pr.y),S):T=Math.max(Math.min((S+k)/2,this.It[f.layer]+this.pr.y),S),e.insertPointAt(p++,b,T),e.insertPointAt(p++,P,T)))}if(s!==null&&u&&e.pointsCount>=4){if(n!==null&&r!==null&&s.Ll(a)){const C=r.getDocumentPoint(Spot.Center);C.isReal()||C.setTo(n.actualBounds.centerX,n.actualBounds.centerY);const L=e.getPoint(3),A=e.getPoint(2);this.direction===90||this.direction===270?(e.setPointAt(1,L.x,(A.y+L.y)/2),e.setPointAt(2,L.x,(A.y+L.y)/2)):(e.setPointAt(1,(A.x+L.x)/2,L.y),e.setPointAt(2,(A.x+L.x)/2,L.y));const D=e.getLinkPointFromPoint(n,r,C,e.getPoint(1),!0);e.setPointAt(0,D.x,D.y)}if(o!==null&&l!==null&&s.Ll(h)){const C=l.getDocumentPoint(Spot.Center);C.isReal()||C.setTo(o.actualBounds.centerX,o.actualBounds.centerY);const L=e.getPoint(e.pointsCount-4),A=e.getLinkPointFromPoint(o,l,C,L,!1),D=e.getPoint(e.pointsCount-3);this.direction===90||this.direction===270?(e.setPointAt(e.pointsCount-2,L.x,(D.y+A.y)/2),e.setPointAt(e.pointsCount-3,L.x,(D.y+A.y)/2)):(e.setPointAt(e.pointsCount-2,(D.x+A.x)/2,L.y),e.setPointAt(e.pointsCount-3,(D.x+A.x)/2,L.y));const F=e.getLinkPointFromPoint(o,l,C,e.getPoint(e.pointsCount-2),!1);e.setPointAt(e.pointsCount-1,F.x,F.y)}}e.commitRoute(),i.commit()}}J3(){this.vw=-1,this.nm=0,this.Ks=0,this.Mu=null;for(let t=0;t<this.Hn.length;t++)this.Hn[t]=null}eh(t){let e;const i=this.re[t];if(i>=this.Hn.length){const n=[];for(let o=0;o<this.Hn.length;o++)n[o]=this.Hn[o];this.Hn=n}this.Hn[i]===void 0||this.Hn[i]===null?e=[]:(e=this.Hn[i],this.Hn[i]=null);const s=this.Mu[t];for(let n=0;n<s.length;n++){const o=s[n];e[o.index]=o}return e}ih(t,e){this.Hn[this.re[t]]=e}get layerSpacing(){return this.Ys}set layerSpacing(t){this.Ys!==t&&(U.s(t,"number",LayeredDigraphLayout,"layerSpacing"),t>=0&&(this.Ys=t,this.g()))}get columnSpacing(){return this.si}set columnSpacing(t){this.si!==t&&(U.s(t,"number",LayeredDigraphLayout,"columnSpacing"),t>0&&(this.si=t,this.g()))}get direction(){return this.k}set direction(t){this.k!==t&&(U.s(t,"number",LayeredDigraphLayout,"direction"),t===0||t===90||t===180||t===270?(this.k=t,this.g()):U.n("LayeredDigraphLayout.direction must be 0, 90, 180, or 270"))}get cycleRemoveOption(){return this.xu}set cycleRemoveOption(t){this.xu!==t&&(t===1||t===0||t===2)&&(this.xu=t,this.g())}get layeringOption(){return this.bu}set layeringOption(t){this.bu!==t&&(t===10||t===11||t===12)&&(this.bu=t,this.g())}get initializeOption(){return this.ku}set initializeOption(t){this.ku!==t&&(t===20||t===21||t===22)&&(this.ku=t,this.g())}get iterations(){return this.Tc}set iterations(t){this.Tc!==t&&t>=0&&(this.Tc=t,this.g())}get aggressiveOption(){return this.Pu}set aggressiveOption(t){this.Pu!==t&&(t===30||t===31||t===32)&&(this.Pu=t,this.g())}get packOption(){return this.gr}set packOption(t){this.gr!==t&&(U.s(t,"number",LayeredDigraphLayout,"packOption"),t>=0&&t<8&&(this.gr=t,this.g()))}get packIterations(){return this.Su}set packIterations(t){this.Su=t}get alignOption(){return this.qn}set alignOption(t){this.qn!==t&&(U.s(t,"number",LayeredDigraphLayout,"align"),t>=0&&t<16&&(this.qn=t,this.g()))}get centered(){return this.th}set centered(t){this.centered!==t&&(U.s(t,"boolean",LayeredDigraphLayout,"centered"),this.th=t,this.g())}get setsPortSpots(){return this.Kn}set setsPortSpots(t){this.Kn!==t&&(U.s(t,"boolean",LayeredDigraphLayout,"setsPortSpots"),this.Kn=t,this.g())}get maxLayer(){return this.tt}get maxIndex(){return this.vw}get maxColumn(){return this.Gt}get minIndexLayer(){return this.nm}get maxIndexLayer(){return this.Ks}static CycleDepthFirst=0;static CycleGreedy=1;static CycleFromLayers=2;static LayerOptimalLinkLength=10;static LayerLongestPathSink=11;static LayerLongestPathSource=12;static InitDepthFirstOut=20;static InitDepthFirstIn=21;static InitNaive=22;static AggressiveNone=30;static AggressiveLess=31;static AggressiveMore=32;static PackNone=0;static PackExpand=1;static PackStraighten=2;static PackMedian=4;static PackAll=15;static AlignNone=0;static AlignUpperLeft=1;static AlignUpperRight=2;static AlignLowerLeft=4;static AlignLowerRight=8;static AlignAll=15}class LayeredDigraphNetwork extends LayoutNetwork{constructor(t){super(t)}createVertex(){const t=new LayeredDigraphVertex(this);return t.centered=this.layout.centered,t}createEdge(){return new LayeredDigraphEdge(this)}}class LayeredDigraphVertex extends LayoutVertex{Ml;Ca;Ft;mP;pP;th;oi;Cu;no;fP;aP;hP;Lc;jn;tR;nh;hs;Nu;wi;Wn;Ew=null;Uw=null;Bw=null;Vw=null;constructor(t){super(t),this.Ml=-1,this.Ca=-1,this.Ft=-1,this.mP=NaN,this.pP=null,this.th=!0,this.oi=!1,this.Cu=NaN,this.no=NaN,this.fP=0,this.aP=null,this.hP=null}static sR(t,e){return t.index-e.index}getProperSourceEdges(){if(!this.Bw){const t=[];for(const e of this.Lo){const i=e;i.valid&&t.push(i)}this.Bw=t}return this.Bw}getProperDestinationEdges(){if(!this.Vw){const t=[];for(const e of this.hr){const i=e;i.valid&&t.push(i)}this.Vw=t}return this.Vw}getDestinationEdge(t){const e=this.getProperDestinationEdges();for(const i of e)if(i.toVertex===t)return i;U.n("Unable to find destination edge to given vertex")}getProperSourceVertexes(){if(!this.Ew){const t=[];for(const e of this.Lo){const i=e;!i.valid||i.fromVertex.layer<=i.toVertex.layer||t.push(i.fromVertex)}t.sort(LayeredDigraphVertex.sR),this.Ew=t}return this.Ew}getProperDestinationVertexes(){if(!this.Uw){const t=[];for(const e of this.hr){const i=e;!i.valid||i.fromVertex.layer<=i.toVertex.layer||t.push(i.toVertex)}t.sort(LayeredDigraphVertex.sR),this.Uw=t}return this.Uw}addSourceEdge(t){super.addSourceEdge(t),this.Ew=null,this.Bw=null}deleteSourceEdge(t){super.deleteSourceEdge(t),this.Ew=null,this.Bw=null}addDestinationEdge(t){super.addDestinationEdge(t),this.Uw=null,this.Vw=null}deleteDestinationEdge(t){super.deleteDestinationEdge(t),this.Uw=null,this.Vw=null}commit(){if(this.centered)super.commit();else{const t=this.node;if(t!==null){const e=this.network.layout;if(!e)return;e.direction===180||e.direction===270?t.moveTo(this.bounds.right-t.actualBounds.width,this.bounds.bottom-t.actualBounds.height):t.moveTo(this.bounds.x,this.bounds.y)}}}get layer(){return this.Ml}set layer(t){this.Ml=t}get column(){return this.Ca}set column(t){this.Ca=t}get index(){return this.Ft}set index(t){this.Ft=t}get component(){return this.mP}set component(t){this.mP!==t&&(U.s(t,"number",LayeredDigraphVertex,"component"),this.mP=t)}get near(){return this.pP}set near(t){this.pP!==t&&(this.pP=t)}get centered(){return this.th}set centered(t){this.th=t}}class LayeredDigraphEdge extends LayoutEdge{oi;yP;wP;xP;bP;kP;PP;constructor(t){super(t),this.oi=!1,this.yP=!1,this.wP=!1,this.xP=NaN,this.bP=NaN,this.kP=0,this.PP=0}get fromVertex(){return this.rs}set fromVertex(t){this.rs!==t&&(this.rs=t)}get toVertex(){return this.ls}set toVertex(t){this.ls!==t&&(this.ls=t)}get valid(){return this.oi}set valid(t){this.oi!==t&&(U.s(t,"boolean",LayeredDigraphEdge,"valid"),this.oi=t)}get rev(){return this.yP}set rev(t){this.yP!==t&&(U.s(t,"boolean",LayeredDigraphEdge,"rev"),this.yP=t)}get forest(){return this.wP}set forest(t){this.wP!==t&&(U.s(t,"boolean",LayeredDigraphEdge,"forest"),this.wP=t)}get portFromPos(){return this.xP}set portFromPos(t){this.xP!==t&&(U.s(t,"number",LayeredDigraphEdge,"portFromPos"),this.xP=t)}get portToPos(){return this.bP}set portToPos(t){this.bP!==t&&(U.s(t,"number",LayeredDigraphEdge,"portToPos"),this.bP=t)}get portFromColOffset(){return this.kP}set portFromColOffset(t){this.kP!==t&&(U.s(t,"number",LayeredDigraphEdge,"portFromColOffset"),this.kP=t)}get portToColOffset(){return this.PP}set portToColOffset(t){this.PP!==t&&(U.s(t,"number",LayeredDigraphEdge,"portToColOffset"),this.PP=t)}}var TreePath=(w=>(w[w.Default=0]="Default",w[w.Destination=1]="Destination",w[w.Source=2]="Source",w))(TreePath||{}),TreeSorting=(w=>(w[w.Forwards=10]="Forwards",w[w.Reverse=11]="Reverse",w[w.Ascending=12]="Ascending",w[w.Descending=13]="Descending",w))(TreeSorting||{}),TreeAlignment=(w=>(w[w.CenterSubtrees=20]="CenterSubtrees",w[w.CenterChildren=21]="CenterChildren",w[w.Start=22]="Start",w[w.End=23]="End",w[w.Bus=24]="Bus",w[w.BusBranching=25]="BusBranching",w[w.TopLeftBus=26]="TopLeftBus",w[w.BottomRightBus=27]="BottomRightBus",w[w.Custom=28]="Custom",w))(TreeAlignment||{}),TreeCompaction=(w=>(w[w.None=30]="None",w[w.Block=31]="Block",w))(TreeCompaction||{}),TreeStyle=(w=>(w[w.Layered=40]="Layered",w[w.LastParents=41]="LastParents",w[w.Alternating=42]="Alternating",w[w.RootOnly=43]="RootOnly",w))(TreeStyle||{}),TreeArrangement=(w=>(w[w.Vertical=50]="Vertical",w[w.Horizontal=51]="Horizontal",w[w.FixedRoots=52]="FixedRoots",w))(TreeArrangement||{}),TreeLayerStyle=(w=>(w[w.Individual=60]="Individual",w[w.Siblings=61]="Siblings",w[w.Uniform=62]="Uniform",w))(TreeLayerStyle||{});class TreeLayout extends Layout{Ve;Ue;Tu;am;HT;Ki;$e;Gs;V;z;SP;bs;constructor(t){super(),this.Ve=new GSet,this.Ue=0,this.bs=1,this.Tu=40,this.am=60,this.HT=[],this.Ki=!0,this.$e=50,this.Gs=new Size(10,10).b();const e=new TreeNetwork(this);this.V=new TreeVertex(e),this.z=new TreeVertex(e),this.SP=[],t&&Object.assign(this,t)}cloneProtected(t){super.cloneProtected(t),t.Ue=this.Ue,t.Tu=this.Tu,t.am=this.am,t.Ki=this.Ki,t.$e=this.$e,t.Gs.h(this.Gs),t.V.copyInheritedPropertiesFrom(this.V),t.z.copyInheritedPropertiesFrom(this.z)}ge(t){t in TreeAlignment?this.alignment=t:t in TreeArrangement?this.arrangement=t:t in TreeCompaction?this.compaction=t:t in TreePath?this.path=t:t in TreeSorting?this.sorting=t:t in TreeStyle?this.treeStyle=t:super.ge(t)}createNetwork(){return new TreeNetwork(this)}makeNetwork(t){const e=this.createNetwork(),i=(s=>{if(s instanceof Node)return!s.isLinkLabel&&s.category!=="Comment";if(s instanceof Link){const n=s.fromNode;if(n===null||n.isLinkLabel||n.category==="Comment")return!1;const o=s.toNode;return!(o===null||o.isLinkLabel||o.category==="Comment")}return!1});return t instanceof Diagram?(e.addParts(t.nodes,!0,i),e.addParts(t.links,!0,i)):t instanceof Group?e.addParts(t.memberParts,!1,i):e.addParts(t.iterator,!1,i),e}doLayout(t){this.network===null&&(this.network=this.makeNetwork(t)),this.arrangement!==52&&(this.arrangementOrigin=this.initialOrigin(this.arrangementOrigin));let e=this.diagram;e===null&&t instanceof Diagram&&(e=t),this.path===0&&e!==null?this.bs=e.isTreePathToChildren?1:2:this.bs=this.path===0?1:this.path,this.network.vertexes.count>0&&(this.FU(),this.vU(),this.RU(),this.OU(),this.BT(),this.IU(),this.arrangeTrees(),this.updateParts()),this.network=null,this.Ve=new GSet,this.isValidLayout=!0}FU(){if(this.network===null)return;this.network.deleteSelfEdges();const t=this.network.vertexes.iterator;for(;t.next();){const n=t.value;n.initialized=!1,n.level=0,n.parent=null,n.children=[]}if(this.Ve.count>0){const n=new GSet,o=this.Ve.iterator;for(;o.next();){const r=o.value;if(r instanceof Node){const l=this.network.findVertex(r);l!==null&&n.add(l)}else r instanceof TreeVertex&&n.add(r)}this.Ve=n}this.Ve.count===0&&this.findRoots();const e=this.Ve.copy().iterator;for(;e.next();){const n=e.value;n.initialized||(n.initialized=!0,this.qT(n))}let i=this.network.vertexes,s=null;for(;s=this.EU(i),s.count>0;){const n=this.nR(s);n!==null&&(this.Ve.add(n),n.initialized=!0,this.qT(n)),i=s}}EU(t){const e=new GSet,i=t.iterator;for(;i.next();){const s=i.value;s.initialized||e.add(s)}return e}findRoots(){if(this.network===null)return;const t=this.network.vertexes,e=t.iterator;for(;e.next();){const i=e.value;switch(this.bs){case 1:i.sourceEdges.count===0&&this.Ve.add(i);break;case 2:i.destinationEdges.count===0&&this.Ve.add(i);break;default:U.n("Unhandled path value "+this.bs.toString())}}if(this.Ve.count===0){const i=this.nR(t);i!==null&&this.Ve.add(i)}}nR(t){let e=999999,i=null;const s=t.iterator;for(;s.next();){const n=s.value;switch(this.bs){case 1:n.sourceEdges.count<e&&(e=n.sourceEdges.count,i=n);break;case 2:n.destinationEdges.count<e&&(e=n.destinationEdges.count,i=n);break;default:U.n("Unhandled path value "+this.bs.toString())}}return i}qT(t){if(t===null)return;switch(this.bs){case 1:if(t.destinationEdges.count>0){const s=new List,n=t.destinationVertexes;for(;n.next();){const o=n.value;this.oR(t,o)&&s.add(o)}s.count>0&&(t.children=s.toArray())}break;case 2:if(t.sourceEdges.count>0){const s=new List,n=t.sourceVertexes;for(;n.next();){const o=n.value;this.oR(t,o)&&s.add(o)}s.count>0&&(t.children=s.toArray())}break;default:U.n("Unhandled path value"+this.bs.toString())}const e=t.children,i=e.length;for(let s=0;s<i;s++){const n=e[s];n.initialized=!0,n.level=t.level+1,n.parent=t,this.Ve.delete(n)}for(let s=0;s<i;s++){const n=e[s];this.qT(n)}}oR(t,e){return e.initialized?this.UU(e,t)||e.level>t.level?!1:(this.BU(e.parent,e),!0):!0}UU(t,e){if(e===null)return!1;let i=e.parent;for(;i!==null&&i!==t;)i=i.parent;return i===t}BU(t,e){if(t===null||e===null)return;const i=t.children;let s=0;for(let n=0;n<i.length;n++)i[n]===e&&s++;if(s>0){const n=new Array(i.length-s);let o=0;for(let r=0;r<i.length;r++)i[r]!==e&&(n[o++]=i[r]);t.children=n}}vU(){const t=this.Ve.iterator;for(;t.next();){const e=t.value;e instanceof TreeVertex&&this.rR(e)}}rR(t){if(t===null)return;this.initializeTreeVertexValues(t),t.alignment===25&&this.sortTreeVertexChildren(t);let e=0,i=t.childrenCount,s=0;const n=t.children,o=n.length;for(let r=0;r<o;r++){const l=n[r];this.rR(l),e+=l.descendantCount+1,i=Math.max(i,l.maxChildrenCount),s=Math.max(s,l.maxGenerationCount)}t.descendantCount=e,t.maxChildrenCount=i,t.maxGenerationCount=i>0?s+1:0}VU(t){switch(this.Tu){default:case 40:return t.parent!==null?t.parent:this.V;case 43:return t.parent===null?this.V:t.parent.parent===null?this.z:t.parent;case 42:return t.parent!==null?t.parent.parent!==null?t.parent.parent:this.z:this.V;case 41:{let e=!0;if(t.childrenCount===0)e=!1;else{const i=t.children,s=i.length;for(let n=0;n<s;n++)if(i[n].childrenCount>0){e=!1;break}}return e&&t.parent!==null?this.z:t.parent!==null?t.parent:this.V}}}initializeTreeVertexValues(t){const e=this.VU(t);if(t.copyInheritedPropertiesFrom(e),t.parent!==null&&t.parent.alignment===25){let i=t.angle;const s=t.parent.children;let n=0;for(;n<s.length&&t!==s[n];)n++;n%2===0?n!==s.length-1&&(i===90?i=180:i===180?i=270:i===270?i=180:i=270):i===90?i=0:i===180?i=90:i===270?i=0:i=90,t.angle=i}t.initialized=!0}RU(){const t=this.Ve.iterator;for(;t.next();){const e=t.value;e instanceof TreeVertex&&this.lR(e)}}lR(t){if(t===null)return;this.assignTreeVertexValues(t);const e=t.children,i=e.length;for(let s=0;s<i;s++){const n=e[s];this.lR(n)}}assignTreeVertexValues(t){}OU(){const t=this.Ve.iterator;for(;t.next();){const e=t.value;e instanceof TreeVertex&&this.aR(e)}}aR(t){if(t===null)return;t.alignment!==25&&this.sortTreeVertexChildren(t);const e=t.children,i=e.length;for(let s=0;s<i;s++){const n=e[s];this.aR(n)}}sortTreeVertexChildren(t){switch(t.sorting){default:case 10:break;case 11:t.children.reverse();break;case 12:t.children.sort(t.comparer);break;case 13:t.children.sort(t.comparer),t.children.reverse();break}}BT(){if(!this.comments||this.network===null)return;const t=this.network.vertexes.iterator;for(;t.next();){const e=t.value;this.addComments(e)}}addComments(t){const e=t.angle,i=t.parent;let s=0,n=21,o=!1;i!==null&&(s=i.angle,n=i.alignment,o=this.isBusAlignment(n));const r=e===90||e===270,l=s===90||s===270,a=t.childrenCount===0;let h=0,c=0,f=0;const u=t.commentSpacing;if(t.node!==null){const d=t.node.findNodesConnected();for(;d.next();){const m=d.value;if(m.category!=="Comment"||!m.canLayout())continue;t.comments===null&&(t.comments=[]),t.comments.push(m),m.ensureBounds();const g=m.measuredBounds;r&&!a||!o&&!l&&a||o&&l&&a?(h=Math.max(h,g.width),c+=g.height+Math.abs(f)):(h+=g.width+Math.abs(f),c=Math.max(c,g.height)),f=u}}if(t.comments!==null){r&&!a||!o&&!l&&a||o&&l&&a?(h+=Math.abs(t.commentMargin),c=Math.max(0,c-t.height)):(c+=Math.abs(t.commentMargin),h=Math.max(0,h-t.width));const d=Rect.O(0,0,t.bounds.width+h,t.bounds.height+c);t.bounds=d,Rect.i(d)}}isBusAlignment(t){return t===24||t===25||t===26||t===27}zw(t){return t===24||t===25}jT(t){const e=t.parent;if(e!==null){const i=e.alignment;if(this.isBusAlignment(i))if(this.zw(i)){const s=e.children;let n=0;for(;n<s.length&&t!==s[n];)n++;return n%2===0}else return i===26}return!1}layoutComments(t){if(t.comments!==null){const i=t.node.measuredBounds,s=t.parent,n=t.angle;let o=0,r=21,l=!1;s!==null&&(o=s.angle,r=s.alignment,l=this.isBusAlignment(r));const a=n===90||n===270,h=o===90||o===270,c=t.childrenCount===0,f=this.jT(t);let u=0;const d=t.comments,m=d.length,g=Point.l();for(let y=0;y<m;y++){const x=d[y],b=x.measuredBounds;if(a&&!c||!l&&!h&&c||l&&h&&c){if(o>135&&!l||h&&f)if(t.commentMargin>=0){g.e(t.bounds.x-t.commentMargin-b.width,t.bounds.y+u),x.move(g);const k=x.findLinksInto();for(;k.next();){const P=k.value;P.fromSpot=Spot.MiddleLeft,P.toSpot=Spot.MiddleRight}}else{g.e(t.bounds.x+t.focus.x*2-t.commentMargin,t.bounds.y+u),x.move(g);const k=x.findLinksInto();for(;k.next();){const P=k.value;P.fromSpot=Spot.MiddleRight,P.toSpot=Spot.MiddleLeft}}else if(t.commentMargin>=0){g.e(t.bounds.x+t.focus.x*2+t.commentMargin,t.bounds.y+u),x.move(g);const k=x.findLinksInto();for(;k.next();){const P=k.value;P.fromSpot=Spot.MiddleRight,P.toSpot=Spot.MiddleLeft}}else{g.e(t.bounds.x+t.commentMargin-b.width,t.bounds.y+u),x.move(g);const k=x.findLinksInto();for(;k.next();){const P=k.value;P.fromSpot=Spot.MiddleLeft,P.toSpot=Spot.MiddleRight}}t.commentSpacing>=0?u+=b.height+t.commentSpacing:u+=t.commentSpacing-b.height}else{if(o>135&&!l||!h&&f)if(t.commentMargin>=0){g.e(t.bounds.x+u,t.bounds.y-t.commentMargin-b.height),x.move(g);const k=x.findLinksInto();for(;k.next();){const P=k.value;P.fromSpot=Spot.MiddleTop,P.toSpot=Spot.MiddleBottom}}else{g.e(t.bounds.x+u,t.bounds.y+t.focus.y*2-t.commentMargin),x.move(g);const k=x.findLinksInto();for(;k.next();){const P=k.value;P.fromSpot=Spot.MiddleBottom,P.toSpot=Spot.MiddleTop}}else if(t.commentMargin>=0){g.e(t.bounds.x+u,t.bounds.y+t.focus.y*2+t.commentMargin),x.move(g);const k=x.findLinksInto();for(;k.next();){const P=k.value;P.fromSpot=Spot.MiddleBottom,P.toSpot=Spot.MiddleTop}}else{g.e(t.bounds.x+u,t.bounds.y+t.commentMargin-b.height),x.move(g);const k=x.findLinksInto();for(;k.next();){const P=k.value;P.fromSpot=Spot.MiddleTop,P.toSpot=Spot.MiddleBottom}}t.commentSpacing>=0?u+=b.width+t.commentSpacing:u+=t.commentSpacing-b.width}}Point.i(g);const p=u-t.commentSpacing-(a?i.height:i.width);if(this.bs===1){const y=t.destinationEdges;for(;y.next();){const b=y.value.link;b!==null&&!b.isAvoiding&&(b.fromEndSegmentLength=p>0?p:NaN)}}else{const y=t.sourceEdges;for(;y.next();){const b=y.value.link;b!==null&&!b.isAvoiding&&(b.toEndSegmentLength=p>0?p:NaN)}}}}IU(){if(this.network===null)return;if(this.layerStyle===62){const e=[];let i=this.network.vertexes.iterator;for(;i.next();){const s=i.value;let n=s.parent;n===null&&(n=s);const o=n.angle===0||n.angle===180;let r=e[s.level];r===void 0&&(r=0),e[s.level]=Math.max(r,o?s.width:s.height)}for(let s=0;s<e.length;s++)e[s]===void 0&&(e[s]=0);for(this.HT=e,i=this.network.vertexes.iterator;i.next();){const s=i.value;let n=s.parent;n===null&&(n=s),n.angle===0||n.angle===180?(n.angle===180&&(s.focusX+=e[s.level]-s.width),s.width=e[s.level]):(n.angle===270&&(s.focusY+=e[s.level]-s.height),s.height=e[s.level])}}else if(this.layerStyle===61){const e=this.network.vertexes.iterator;for(;e.next();){const i=e.value,s=i.angle===0||i.angle===180;let n=-1;for(let o=0;o<i.children.length;o++){const r=i.children[o];n=Math.max(n,s?r.width:r.height)}if(n>=0)for(let o=0;o<i.children.length;o++){const r=i.children[o];s?(i.angle===180&&(r.focusX+=n-r.width),r.width=n):(i.angle===270&&(r.focusY+=n-r.height),r.height=n)}}}const t=this.Ve.iterator;for(;t.next();){const e=t.value;e instanceof TreeVertex&&this.layoutTree(e)}}layoutTree(t){if(t===null)return;const e=t.children,i=e.length;for(let s=0;s<i;s++){const n=e[s];this.layoutTree(n)}switch(t.compaction){case 30:this.hR(t);break;default:case 31:t.alignment===25?this.hR(t):this.zU(t);break}}hR(t){if(t.childrenCount===0){let v=!1,R=0,O=21;t.parent!==null&&(R=t.parent.angle,O=t.parent.alignment,v=this.isBusAlignment(O));const z=this.jT(t);t.B.e(0,0),t.yt.e(t.width,t.height),t.parent!==null&&t.comments!==null&&((R===180||R===270)&&!v||z)?R===180&&!v||(R===90||R===270)&&z?t.ht.e(t.width-t.focus.x*2,0):t.ht.e(0,t.height-t.focus.y*2):t.ht.e(0,0);return}const e=this.orthoAngle(t),i=e===90||e===270;let s=0;const n=t.children,o=n.length;for(let v=0;v<o;v++){const R=n[v];s=Math.max(s,i?R.yt.width:R.yt.height)}const r=t.alignment,l=r===22,a=r===23,h=this.isBusAlignment(r),c=Math.max(0,t.breadthLimit),f=this.computeLayerSpacing(t),u=t.nodeSpacing,d=this.computeNodeIndent(t),m=l||a?0:d/2,g=t.rowSpacing;let p=0;(l||a)&&(p=Math.max(0,t.rowIndent));const y=t.width,x=t.height;let b=0,k=0,P=0,S=0,T=0,N=0,M=0,C=0,L=0,A=0;if(h&&!this.zw(r)&&e>135&&n.reverse(),this.zw(r))if(o>1)for(let v=0;v<o;v++){const R=n[v],O=R.yt;v%2===0&&v!==o-1?L=Math.max(L,(i?O.width:O.height)+this.computeBusNodeSpacing(R)-u):v%2!==0&&(A=Math.max(A,(i?O.width:O.height)+this.computeBusNodeSpacing(R)-u))}else o===1&&(L=i?n[0].yt.width:n[0].yt.height);if(h)switch(r){case 24:case 25:const v=Rect.l();e<135?this.cR(t,n,L,A,b,k,v):this.fR(t,n,L,A,b,k,v),L=v.x,b=v.width,k=v.height,Rect.i(v);break;case 26:for(let R=0;R<o;R++){const O=n[R],z=O.yt,X=M===0?0:g;i?(O.B.e(s-z.width,T+X),b=Math.max(b,z.width),k=Math.max(k,T+X+z.height),T+=X+z.height):(O.B.e(S+X,s-z.height),b=Math.max(b,S+X+z.width),k=Math.max(k,z.height),S+=X+z.width),M++}break;case 27:for(let R=0;R<o;R++){const O=n[R],z=O.yt,X=M===0?0:g;i?(O.B.e(u/2+t.focus.x,T+X),b=Math.max(b,z.width),k=Math.max(k,T+X+z.height),T+=X+z.height):(O.B.e(S+X,u/2+t.focus.y),b=Math.max(b,S+X+z.width),k=Math.max(k,z.height),S+=X+z.width),M++}break}else for(let v=0;v<o;v++){const R=n[v],O=R.yt;if(i){c>0&&M>0&&S+u+O.width>c&&(S<s&&this.Ac(t,r,s-S,0,C,v-1),N++,M=0,C=v,P=k,S=0,T=e>135?-k-g:k+g);const z=M===0?m:u;this.MP(R,0,T),R.B.e(S+z,T),b=Math.max(b,S+z+O.width),k=Math.max(k,P+(N===0?0:g)+O.height),S+=z+O.width}else{c>0&&M>0&&T+u+O.height>c&&(T<s&&this.Ac(t,r,0,s-T,C,v-1),N++,M=0,C=v,P=b,T=0,S=e>135?-b-g:b+g);const z=M===0?m:u;this.MP(R,S,0),R.B.e(S,T+z),k=Math.max(k,T+z+O.height),b=Math.max(b,P+(N===0?0:g)+O.width),T+=z+O.height}M++}N>0&&(i?(k+=Math.max(0,f),S<b&&this.Ac(t,r,b-S,0,C,o-1),p>0&&(a||this.Lu(t,p,0,0,o-1),b+=p)):(b+=Math.max(0,f),T<k&&this.Ac(t,r,0,k-T,C,o-1),p>0&&(a||this.Lu(t,0,p,0,o-1),k+=p)));let D=0,F=0;switch(r){case 20:i?D+=b/2-t.focus.x-d/2:F+=k/2-t.focus.y-d/2;break;default:case 21:if(N>0)i?D+=b/2-t.focus.x-d/2:F+=k/2-t.focus.y-d/2;else{const R=o;if(i){const O=n[0].B.x+n[0].ht.x,z=n[R-1].B.x+n[R-1].ht.x+n[R-1].focus.x*2;D+=O+(z-O)/2-t.focus.x-d/2}else{const O=n[0].B.y+n[0].ht.y,z=n[R-1].B.y+n[R-1].ht.y+n[R-1].focus.y*2;F+=O+(z-O)/2-t.focus.y-d/2}}break;case 22:i?(D-=d,b+=d):(F-=d,k+=d);break;case 23:i?(D+=b-t.width+d,b+=d):(F+=k-t.height+d,k+=d);break;case 24:case 25:i?o>1?D+=L+u/2-t.focus.x:D+=n[0].focus.x-t.focus.x+n[0].ht.x:o>1?F+=L+u/2-t.focus.y:F+=n[0].focus.y-t.focus.y+n[0].ht.y;break;case 26:i?D+=b+u/2-t.focus.x:F+=k+u/2-t.focus.y;break;case 27:break;case 28:const v=this.customAlignment(t,D,F,b,k);D=v[0],F=v[1],b=v[2],k=v[3];break}for(let v=0;v<o;v++){const R=n[v];i?R.B.e(R.B.x+R.ht.x-D,R.B.y+(e>135?(h?-k:-R.yt.height)+R.ht.y-f:x+f+R.ht.y)):R.B.e(R.B.x+(e>135?(h?-b:-R.yt.width)+R.ht.x-f:y+f+R.ht.x),R.B.y+R.ht.y-F)}i?(b=this.WT(t,b,D),D<0&&(D=0),e>135&&(F+=k+f),k=Math.max(Math.max(k,x),k+x+f)):(e>135&&(D+=b+f),b=Math.max(Math.max(b,y),b+y+f),k=this.JT(t,k,F),F<0&&(F=0)),t.ht.e(D,F),t.yt.e(b,k)}customAlignment(t,e,i,s,n){return[e,i,s,n]}cR(t,e,i,s,n,o,r){const l=e.length;if(l===0)return r.e(i,0,n,o),r;if(l===1){const y=e[0];return n=y.yt.width,o=y.yt.height,r.e(i,0,n,o),r}const a=t.nodeSpacing,h=t.rowSpacing,f=this.orthoAngle(t)===90;let u=0,d=0,m=0;for(let y=0;y<l;y++){if(y%2!==0||l>1&&y===l-1)continue;const x=e[y],b=x.yt,k=u===0?0:h;if(f){const P=this.computeBusNodeSpacing(x)-a;x.B.e(i-(b.width+P),m+k),n=Math.max(n,b.width+P),o=Math.max(o,m+k+b.height),m+=k+b.height}else{const P=this.computeBusNodeSpacing(x)-a;x.B.e(d+k,i-(b.height+P)),o=Math.max(o,b.height+P),n=Math.max(n,d+k+b.width),d+=k+b.width}u++}u=0;const g=d,p=m;f?(d=i+a,m=0):(d=0,m=i+a);for(let y=0;y<l;y++){if(y%2===0)continue;const x=e[y],b=x.yt,k=u===0?0:h;if(f){const P=this.computeBusNodeSpacing(x)-a;x.B.e(d+P,m+k),n=Math.max(n,d+b.width+P),o=Math.max(o,m+k+b.height),m+=k+b.height}else{const P=this.computeBusNodeSpacing(x)-a;x.B.e(d+k,m+P),n=Math.max(n,d+k+b.width),o=Math.max(o,m+b.height+P),d+=k+b.width}u++}if(l>1&&l%2===1){const y=e[l-1],x=y.yt,b=this.computeBusLastRowSpacing(y,f?Math.max(Math.abs(p),Math.abs(m)):Math.max(Math.abs(g),Math.abs(d)));if(f){y.B.e(i+a/2-y.focus.x-y.ht.x,o+b);const k=i+a/2-y.focus.x-y.ht.x;n=Math.max(n,k+x.width),k<0&&(n-=k),o=Math.max(o,Math.max(p,m)+b+x.height),y.B.x<0&&(i=this.CP(t,y.B.x,!1,i,a))}else{y.B.e(n+b,i+a/2-y.focus.y-y.ht.y),n=Math.max(n,Math.max(g,d)+b+x.width);const k=i+a/2-y.focus.y-y.ht.y;o=Math.max(o,k+x.height),k<0&&(o-=k),y.B.y<0&&(i=this.CP(t,y.B.y,!0,i,a))}}return r.e(i,0,n,o),r}fR(t,e,i,s,n,o,r){const l=e.length;if(l===0)return r.e(i,0,n,o),r;if(l===1){const y=e[0];return n=y.yt.width,o=y.yt.height,r.e(i,0,n,o),r}const a=t.nodeSpacing,h=t.rowSpacing,f=this.orthoAngle(t)===270;let u=0,d=0,m=0;for(let y=0;y<l;y++){if(y%2!==0||l>1&&y===l-1)continue;const x=e[y],b=x.yt,k=u===0?0:h;if(f){const P=this.computeBusNodeSpacing(x)-a;m-=k+b.height,x.B.e(i-(b.width+P),m),n=Math.max(n,b.width+P),o=Math.max(o,Math.abs(m))}else{const P=this.computeBusNodeSpacing(x)-a;d-=k+b.width,x.B.e(d,i-(b.height+P)),o=Math.max(o,b.height+P),n=Math.max(n,Math.abs(d))}u++}u=0;const g=d,p=m;f?(d=i+a,m=0):(d=0,m=i+a);for(let y=0;y<l;y++){if(y%2===0)continue;const x=e[y],b=x.yt,k=u===0?0:h;if(f){const P=this.computeBusNodeSpacing(x)-a;m-=k+b.height,x.B.e(d+P,m),n=Math.max(n,d+b.width+P),o=Math.max(o,Math.abs(m))}else{const P=this.computeBusNodeSpacing(x)-a;d-=k+b.width,x.B.e(d,m+P),o=Math.max(o,m+b.height+P),n=Math.max(n,Math.abs(d))}u++}if(l>1&&l%2===1){const y=e[l-1],x=y.yt,b=this.computeBusLastRowSpacing(y,f?Math.max(Math.abs(p),Math.abs(m)):Math.max(Math.abs(g),Math.abs(d)));if(f){y.B.e(i+a/2-y.focus.x-y.ht.x,-o-x.height-b);const k=i+a/2-y.focus.x-y.ht.x;n=Math.max(n,k+x.width),k<0&&(n-=k),o=Math.max(o,Math.abs(Math.min(p,m))+b+x.height),y.B.x<0&&(i=this.CP(t,y.B.x,!1,i,a))}else{y.B.e(-n-x.width-b,i+a/2-y.focus.y-y.ht.y),n=Math.max(n,Math.abs(Math.min(g,d))+b+x.width);const k=i+a/2-y.focus.y-y.ht.y;o=Math.max(o,k+x.height),k<0&&(o-=k),y.B.y<0&&(i=this.CP(t,y.B.y,!0,i,a))}}for(let y=0;y<l;y++){const x=e[y];f?x.B.e(x.B.x,x.B.y+o):x.B.e(x.B.x+n,x.B.y)}return r.e(i,0,n,o),r}computeBusNodeSpacing(t){return t.parent===null?0:t.parent.nodeSpacing}computeBusLastRowSpacing(t,e){return t.parent===null?0:t.parent.rowSpacing}CP(t,e,i,s,n){const o=t.children,r=o.length;for(let a=0;a<r;a++)i?o[a].B.e(o[a].B.x,o[a].B.y-e):o[a].B.e(o[a].B.x-e,o[a].B.y);const l=o[r-1];return Math.max(s,i?l.ht.y+l.focus.y-n/2:l.ht.x+l.focus.x-n/2)}WT(t,e,i){switch(t.alignment){case 21:case 20:let s=e;return i+t.width>s&&(s=i+t.width),i<0&&(s-=i),s;case 22:return t.width>e?t.width:e;case 23:return t.focus.x*2>e?t.width:e+t.width-t.focus.x*2;case 24:case 25:const n=Math.min(0,i),o=Math.max(e,i+t.width);return Math.max(t.width,o-n);case 26:return t.width-t.focus.x+t.nodeSpacing/2+e;case 27:return Math.max(t.width,t.focus.x+t.nodeSpacing/2+e);default:return e}}JT(t,e,i){switch(t.alignment){case 21:case 20:let s=e;return i+t.height>s&&(s=i+t.height),i<0&&(s-=i),s;case 22:return t.height>e?t.height:e;case 23:return t.focus.y*2>e?t.height:e+t.height-t.focus.y*2;case 24:case 25:const n=Math.min(0,i),o=Math.max(e,i+t.height);return Math.max(t.height,o-n);case 26:return t.height-t.focus.y+t.nodeSpacing/2+e;case 27:return Math.max(t.height,t.focus.y+t.nodeSpacing/2+e);default:return e}}$T(t,e,i){switch(t){case 20:e/=2,i/=2;break;case 21:e/=2,i/=2;break;case 22:e=0,i=0;break;case 23:break;default:U.n("Unhandled alignment value "+t.toString())}return new Point(e,i)}Ac(t,e,i,s,n,o){const r=this.$T(e,i,s);this.Lu(t,r.x,r.y,n,o)}Lu(t,e,i,s,n){if(e===0&&i===0)return;const o=t.children;for(let r=s;r<=n;r++){const a=o[r].B;a.x+=e,a.y+=i}}MP(t,e,i){const s=t.parent;switch(this.bs){case 1:{const n=t.sourceEdges;for(;n.next();){const o=n.value;o.fromVertex===s&&o.relativePoint.e(e,i)}break}case 2:{const n=t.destinationEdges;for(;n.next();){const o=n.value;o.toVertex===s&&o.relativePoint.e(e,i)}break}default:U.n("Unhandled path value "+this.bs.toString())}}zU(t){if(t.childrenCount===0){const V=t.parent;let H=!1,q=0,W=21;V!==null&&(q=V.angle,W=V.alignment,H=this.isBusAlignment(W));const Z=this.jT(t);t.B.e(0,0),t.yt.e(t.width,t.height),t.parent!==null&&t.comments!==null&&((q===180||q===270)&&!H||Z)?q===180&&!H||(q===90||q===270)&&Z?t.ht.e(t.width-t.focus.x*2,0):t.ht.e(0,t.height-t.focus.y*2):t.ht.e(0,0),t.hm=null,t.cm=null;return}const e=this.orthoAngle(t),i=e===90||e===270;let s=0;const n=t.children,o=n.length;for(let V=0;V<o;V++){const H=n[V];s=Math.max(s,i?H.yt.width:H.yt.height)}const r=t.alignment,l=r===22,a=r===23,h=this.isBusAlignment(r),c=Math.max(0,t.breadthLimit),f=this.computeLayerSpacing(t),u=t.nodeSpacing,d=this.computeNodeIndent(t),m=t.rowSpacing;let g=0;(l||a)&&(g=Math.max(0,t.rowIndent));const p=t.width,y=t.height;let x=0,b=0,k=0,P=null,S=null,T=0,N=0,M=0,C=0,L=0,A=0,D=0,F=0,v=0;if(h&&!this.zw(r)&&e>135&&n.reverse(),this.zw(r))if(o>1)for(let V=0;V<o;V++)V%2===0&&V!==o-1?F=Math.max(F,i?n[V].yt.width:n[V].yt.height):V%2!==0&&(v=Math.max(v,i?n[V].yt.width:n[V].yt.height));else o===1&&(F=i?n[0].yt.width:n[0].yt.height);if(h){switch(r){case 24:const V=Rect.l();e<135?this.cR(t,n,F,v,x,b,V):this.fR(t,n,F,v,x,b,V),F=V.x,x=V.width,b=V.height,Rect.i(V);break;case 26:for(let H=0;H<o;H++){const q=n[H],W=q.yt,Z=A===0?0:m;i?(q.B.e(s-W.width,C+Z),x=Math.max(x,W.width),b=Math.max(b,C+Z+W.height),C+=Z+W.height):(q.B.e(M+Z,s-W.height),x=Math.max(x,M+Z+W.width),b=Math.max(b,W.height),M+=Z+W.width),A++}break;case 27:for(let H=0;H<o;H++){const q=n[H],W=q.yt,Z=A===0?0:m;i?(q.B.e(u/2+t.focus.x,C+Z),x=Math.max(x,W.width),b=Math.max(b,C+Z+W.height),C+=Z+W.height):(q.B.e(M+Z,u/2+t.focus.y),x=Math.max(x,M+Z+W.width),b=Math.max(b,W.height),M+=Z+W.width),A++}break}P=this.xi(2),S=this.xi(2),i?(P[0].e(0,0),P[1].e(0,b),S[0].e(x,0),S[1].e(x,b)):(P[0].e(0,0),P[1].e(x,0),S[0].e(0,b),S[1].e(x,b))}else for(let V=0;V<o;V++){const H=n[V],q=H.yt;if(i){c>0&&A>0&&M+u+q.width>c&&(M<s&&this.Ac(t,r,s-M,0,D,V-1),L++,A=0,D=V,k=b,M=0,C=e>135?-b-m:b+m),this.MP(H,0,C);let W=0;if(A===0)P=H.hm,S=H.cm,T=q.width,N=q.height,(P===null||S===null||e!==this.orthoAngle(H))&&(P=this.xi(2),S=this.xi(2),P[0].e(0,0),P[1].e(0,N),S[0].e(T,0),S[1].e(T,N));else{const Z=U.ot(),B=Rect.l();this.uR(t,H,P,S,T,N,Z,B),W=B.x,P=Z[0],S=Z[1],T=B.width,N=B.height,U._(Z),M<q.width&&W<0&&(this.Lu(t,-W,0,D,V-1),this.NP(P,-W,0),this.NP(S,-W,0),W=0),Rect.i(B)}H.B.e(W,C),x=Math.max(x,T),b=Math.max(b,k+(L===0?0:m)+q.height),M=T}else{c>0&&A>0&&C+u+q.height>c&&(C<s&&this.Ac(t,r,0,s-C,D,V-1),L++,A=0,D=V,k=x,C=0,M=e>135?-x-m:x+m),this.MP(H,M,0);let W=0;if(A===0)P=H.hm,S=H.cm,T=q.width,N=q.height,(P===null||S===null||e!==this.orthoAngle(H))&&(P=this.xi(2),S=this.xi(2),P[0].e(0,0),P[1].e(T,0),S[0].e(0,N),S[1].e(T,N));else{const Z=U.ot(),B=Rect.l();this.uR(t,H,P,S,T,N,Z,B),W=B.x,P=Z[0],S=Z[1],T=B.width,N=B.height,U._(Z),C<q.height&&W<0&&(this.Lu(t,0,-W,D,V-1),this.NP(P,0,-W),this.NP(S,0,-W),W=0),Rect.i(B)}H.B.e(M,W),b=Math.max(b,N),x=Math.max(x,k+(L===0?0:m)+q.width),C=N}A++}L>0&&(i?(b+=Math.max(0,f),M<x&&this.Ac(t,r,x-M,0,D,o-1),g>0&&(a||this.Lu(t,g,0,0,o-1),x+=g)):(x+=Math.max(0,f),C<b&&this.Ac(t,r,0,b-C,D,o-1),g>0&&(a||this.Lu(t,0,g,0,o-1),b+=g)));let R=0,O=0;switch(r){case 20:i?R+=x/2-t.focus.x-d/2:O+=b/2-t.focus.y-d/2;break;default:case 21:if(L>0)i?R+=x/2-t.focus.x-d/2:O+=b/2-t.focus.y-d/2;else{const H=o;if(i){const q=n[0].B.x+n[0].ht.x,W=n[H-1].B.x+n[H-1].ht.x+n[H-1].focus.x*2;R+=q+(W-q)/2-t.focus.x-d/2}else{const q=n[0].B.y+n[0].ht.y,W=n[H-1].B.y+n[H-1].ht.y+n[H-1].focus.y*2;O+=q+(W-q)/2-t.focus.y-d/2}}break;case 22:i?(R-=d,x+=d):(O-=d,b+=d);break;case 23:i?(R+=x-t.width+d,x+=d):(O+=b-t.height+d,b+=d);break;case 24:i?o>1?R+=F+u/2-t.focus.x:R+=n[0].focus.x-t.focus.x+n[0].ht.x:o>1?O+=F+u/2-t.focus.y:O+=n[0].focus.y-t.focus.y+n[0].ht.y;break;case 26:i?R+=x+u/2-t.focus.x:O+=b+u/2-t.focus.y;break;case 27:break;case 28:const V=this.customAlignment(t,R,O,x,b);R=V[0],O=V[1],x=V[2],b=V[3];break}for(let V=0;V<o;V++){const H=n[V];i?H.B.e(H.B.x+H.ht.x-R,H.B.y+(e>135?(h?-b:-H.yt.height)+H.ht.y-f:y+f+H.ht.y)):H.B.e(H.B.x+(e>135?(h?-x:-H.yt.width)+H.ht.x-f:p+f+H.ht.x),H.B.y+H.ht.y-O)}let z=0,X=0;if(h)i?(x=this.WT(t,x,R),R<0&&(R=0),e>135&&(O+=b+f),b+=y+f,r===27&&(z+=u/2+t.focus.x),X+=y+f):(e>135&&(R+=x+f),x+=p+f,b=this.JT(t,b,O),O<0&&(O=0),r===27&&(X+=u/2+t.focus.y),z+=p+f);else if(i){if(t.comments===null){if(p>x){const V=this.$T(r,p-x,0);z=V.x,X=V.y,x=p,R=0}}else x=this.WT(t,x,R);R<0&&(z-=R,R=0),e>135&&(O+=b+f),b=Math.max(Math.max(b,y),b+y+f),X+=y+f}else{if(e>135&&(R+=x+f),x=Math.max(Math.max(x,p),x+p+f),t.comments===null){if(y>b){const V=this.$T(r,0,y-b);z=V.x,X=V.y,b=y,O=0}}else b=this.JT(t,b,O);O<0&&(X-=O,O=0),z+=p+f}let E,Y;if(L>0)E=this.xi(4),Y=this.xi(4),i?(E[2].e(0,y+f),E[3].e(E[2].x,b),Y[2].e(x,E[2].y),Y[3].e(Y[2].x,E[3].y)):(E[2].e(p+f,0),E[3].e(x,E[2].y),Y[2].e(E[2].x,b),Y[3].e(E[3].x,Y[2].y));else{E=this.xi(P.length+2),Y=this.xi(S.length+2);for(let V=0;V<P.length;V++){const H=P[V];E[V+2].e(H.x+z,H.y+X)}for(let V=0;V<S.length;V++){const H=S[V];Y[V+2].e(H.x+z,H.y+X)}}i?(E[0].e(R,0),E[1].e(E[0].x,y),E[2].y<E[1].y&&(E[2].x>E[0].x?E[2].h(E[1]):E[1].h(E[2])),E[3].y<E[2].y&&(E[3].x>E[0].x?E[3].h(E[2]):E[2].h(E[3])),Y[0].e(R+p,0),Y[1].e(Y[0].x,y),Y[2].y<Y[1].y&&(Y[2].x<Y[0].x?Y[2].h(Y[1]):Y[1].h(Y[2])),Y[3].y<Y[2].y&&(Y[3].x<Y[0].x?Y[3].h(Y[2]):Y[2].h(Y[3])),E[2].y-=f/2,Y[2].y-=f/2):(E[0].e(0,O),E[1].e(p,E[0].y),E[2].x<E[1].x&&(E[2].y>E[0].y?E[2].h(E[1]):E[1].h(E[2])),E[3].x<E[2].x&&(E[3].y>E[0].y?E[3].h(E[2]):E[2].h(E[3])),Y[0].e(0,O+y),Y[1].e(p,Y[0].y),Y[2].x<Y[1].x&&(Y[2].y<Y[0].y?Y[2].h(Y[1]):Y[1].h(Y[2])),Y[3].x<Y[2].x&&(Y[3].y<Y[0].y?Y[3].h(Y[2]):Y[2].h(Y[3])),E[2].x-=f/2,Y[2].x-=f/2),this.pn(P),this.pn(S),t.hm=E,t.cm=Y,t.ht.e(R,O),t.yt.e(x,b)}NP(t,e,i){for(let s=0;s<t.length;s++){const n=t[s];n.x+=e,n.y+=i}}uR(t,e,i,s,n,o,r,l){const a=this.orthoAngle(t),h=a===90||a===270,c=t.nodeSpacing,f=i,u=s,d=n,m=o;let g=e.hm,p=e.cm;const y=e.yt,x=h?Math.max(m,y.height):Math.max(d,y.width);if((g===null||a!==this.orthoAngle(e))&&(g=this.xi(2),p=this.xi(2),h?(g[0].e(0,0),g[1].e(0,y.height),p[0].e(y.width,0),p[1].e(p[0].x,g[1].y)):(g[0].e(0,0),g[1].e(y.width,0),p[0].e(0,y.height),p[1].e(g[1].x,p[0].y))),h){const b=d;let k=b-this.XU(u,g,b);return k+=c,i=this.GU(f,g,k),s=this.YU(u,p,k),n=Math.max(0,k)+y.width,o=x,this.pn(f),this.pn(g),this.pn(u),this.pn(p),r[0]=i,r[1]=s,l.e(k,0,n,o),l}else{const b=m;let k=b-this.KU(u,g,b);return k+=c,i=this.HU(f,g,k),s=this.qU(u,p,k),n=x,o=Math.max(0,k)+y.height,this.pn(f),this.pn(g),this.pn(u),this.pn(p),r[0]=i,r[1]=s,l.e(k,0,n,o),l}}HU(t,e,i){if(t===null||t.length<2||e===null||e.length<2)return null;const s=this.xi(t.length+e.length);let n=0,o=0,r=0;for(;o<e.length&&e[o].x<t[0].x;){const h=e[o++];s[r++].e(h.x,h.y+i)}for(;n<t.length;){const h=t[n++];s[r++].e(h.x,h.y)}const l=t[t.length-1].x;for(;o<e.length&&e[o].x<=l;)o++;for(;o<e.length&&e[o].x>l;){const h=e[o++];s[r++].e(h.x,h.y+i)}const a=this.xi(r);for(n=0;n<r;n++)a[n].h(s[n]);return this.pn(s),a}GU(t,e,i){if(t===null||t.length<2||e===null||e.length<2)return null;const s=this.xi(t.length+e.length);let n=0,o=0,r=0;for(;o<e.length&&e[o].y<t[0].y;){const h=e[o++];s[r++].e(h.x+i,h.y)}for(;n<t.length;){const h=t[n++];s[r++].e(h.x,h.y)}const l=t[t.length-1].y;for(;o<e.length&&e[o].y<=l;)o++;for(;o<e.length&&e[o].y>l;){const h=e[o++];s[r++].e(h.x+i,h.y)}const a=this.xi(r);for(n=0;n<r;n++)a[n].h(s[n]);return this.pn(s),a}qU(t,e,i){if(t===null||t.length<2||e===null||e.length<2)return null;const s=this.xi(t.length+e.length);let n=0,o=0,r=0;for(;n<t.length&&t[n].x<e[0].x;){const h=t[n++];s[r++].e(h.x,h.y)}for(;o<e.length;){const h=e[o++];s[r++].e(h.x,h.y+i)}const l=e[e.length-1].x;for(;n<t.length&&t[n].x<=l;)n++;for(;n<t.length&&t[n].x>l;){const h=t[n++];s[r++].e(h.x,h.y)}const a=this.xi(r);for(n=0;n<r;n++)a[n].h(s[n]);return this.pn(s),a}YU(t,e,i){if(t===null||t.length<2||e===null||e.length<2)return null;const s=this.xi(t.length+e.length);let n=0,o=0,r=0;for(;n<t.length&&t[n].y<e[0].y;){const h=t[n++];s[r++].e(h.x,h.y)}for(;o<e.length;){const h=e[o++];s[r++].e(h.x+i,h.y)}const l=e[e.length-1].y;for(;n<t.length&&t[n].y<=l;)n++;for(;n<t.length&&t[n].y>l;){const h=t[n++];s[r++].e(h.x,h.y)}const a=this.xi(r);for(n=0;n<r;n++)a[n].h(s[n]);return this.pn(s),a}KU(t,e,i){let s=9999999;if(t===null||t.length<2||e===null||e.length<2)return s;let n=0,o=0;for(;n<t.length&&o<e.length;){const r=t[n],l=e[o],a=l.x;let h=l.y;h+=i;let c=r;n+1<t.length&&(c=t[n+1]);let f=l,u=f.x,d=f.y;o+1<e.length&&(f=e[o+1],u=f.x,d=f.y,d+=i);let m=s;r.x===a?m=h-r.y:r.x>a&&r.x<u?m=h+(r.x-a)/(u-a)*(d-h)-r.y:a>r.x&&a<c.x&&(m=h-(r.y+(a-r.x)/(c.x-r.x)*(c.y-r.y))),m<s&&(s=m),c.x<=r.x?n++:u<=a?o++:(c.x<=u&&n++,u<=c.x&&o++)}return s}XU(t,e,i){let s=9999999;if(t===null||t.length<2||e===null||e.length<2)return s;let n=0,o=0;for(;n<t.length&&o<e.length;){const r=t[n],l=e[o];let a=l.x;const h=l.y;a+=i;let c=r;n+1<t.length&&(c=t[n+1]);let f=l,u=f.x,d=f.y;o+1<e.length&&(f=e[o+1],u=f.x,d=f.y,u+=i);let m=s;r.y===h?m=a-r.x:r.y>h&&r.y<d?m=a+(r.y-h)/(d-h)*(u-a)-r.x:h>r.y&&h<c.y&&(m=a-(r.x+(h-r.y)/(c.y-r.y)*(c.x-r.x))),m<s&&(s=m),c.y<=r.y?n++:d<=h?o++:(c.y<=d&&n++,d<=c.y&&o++)}return s}xi(t){const e=this.SP[t];if(e!==void 0){const s=e.pop();if(s!==void 0)return s}const i=[];for(let s=0;s<t;s++)i[s]=new Point;return i}pn(t){if(!t)return;const e=t.length;let i=this.SP[e];i===void 0&&(i=[],this.SP[e]=i),i.push(t)}arrangeTrees(){if(this.$e===52){const t=this.Ve.iterator;for(;t.next();){const e=t.value;if(!(e instanceof TreeVertex))continue;const i=e.node;if(i===null)continue;const s=i.position;let n=s.x,o=s.y;isFinite(n)||(n=0),isFinite(o)||(o=0),this.ZT(e,n,o)}}else{const t=[],e=this.Ve.iterator;for(;e.next();){const o=e.value;o instanceof TreeVertex&&t.push(o)}switch(this.sorting){default:case 10:break;case 11:t.reverse();break;case 12:t.sort(this.comparer);break;case 13:t.sort(this.comparer),t.reverse();break}const i=this.arrangementOrigin;let s=i.x,n=i.y;for(let o=0;o<t.length;o++){const r=t[o];switch(this.ZT(r,s+r.ht.x,n+r.ht.y),this.$e){case 50:n+=r.yt.height+this.Gs.height;break;default:case 51:s+=r.yt.width+this.Gs.width;break}}}}ZT(t,e,i){if(t===null)return;t.x=e,t.y=i;const s=t.children,n=s.length;for(let o=0;o<n;o++){const r=s[o];this.ZT(r,e+r.B.x,i+r.B.y)}}commitLayout(){this.Fw(),this.commitNodes(),this.KT(),this.isRouting&&this.commitLinks()}commitNodes(){if(this.network===null)return;const t=this.network.vertexes.iterator;for(;t.next();)t.value.commit();for(t.reset();t.next();){const e=t.value;this.layoutComments(e)}}KT(){if(this.network===null||this.layerStyle!==62)return;const t=this.HT,e=[];let i;const s=this.network.vertexes.iterator;for(;s.next();){const a=s.value;i===void 0?i=a.bounds.copy():i.unionRect(a.bounds);let h=e[a.level];h===void 0?h=this.computeLayerSpacing(a):h=Math.max(h,this.computeLayerSpacing(a)),e[a.level]=h}if(!i)return;for(let a=0;a<e.length;a++)e[a]===void 0&&(e[a]=0);let n;this.angle===90||this.angle===270?(i.inflate(this.nodeSpacing/2,this.layerSpacing),n=new Point(-this.nodeSpacing/2,-this.layerSpacing/2)):(i.inflate(this.layerSpacing,this.nodeSpacing/2),n=new Point(-this.layerSpacing/2,-this.nodeSpacing/2));const o=[],r=this.angle===90||this.angle===270?i.width:i.height;let l=0;if(this.angle===180||this.angle===270)for(let a=0;a<t.length;a++)l+=t[a]+e[a];for(let a=0;a<t.length;a++){const h=t[a]+e[a];this.angle===270?(l-=h,o.push(new Rect(0,l,r,h))):this.angle===90?(o.push(new Rect(0,l,r,h)),l+=h):this.angle===180?(l-=h,o.push(new Rect(l,0,h,r))):(o.push(new Rect(l,0,h,r)),l+=h)}this.commitLayers(o,n)}commitLayers(t,e){}commitLinks(){if(this.network===null)return;const t=this.network.edges.iterator;for(;t.next();)t.value.commit()}Fw(){const t=this.Ve.iterator;for(;t.next();){const e=t.value;e instanceof TreeVertex&&this.dR(e)}}dR(t){if(t===null)return;this.setPortSpots(t);const e=t.children,i=e.length;for(let s=0;s<i;s++){const n=e[s];this.dR(n)}}setPortSpots(t){const e=t.alignment;if(this.isBusAlignment(e))this.jU(t,e);else{const i=this.orthoAngle(t);if(this.bs===1){const s=t.destinationEdges;for(;s.next();){const o=s.value.link;if(o!==null){if(t.setsPortSpot)if(t.portSpot.isDefault())switch(i){case 0:o.fromSpot=Spot.MiddleRight;break;case 90:o.fromSpot=Spot.MiddleBottom;break;case 180:o.fromSpot=Spot.MiddleLeft;break;default:o.fromSpot=Spot.MiddleTop;break}else o.fromSpot=t.portSpot;if(t.setsChildPortSpot)if(t.childPortSpot.isDefault())switch(i){case 0:o.toSpot=Spot.MiddleLeft;break;case 90:o.toSpot=Spot.MiddleTop;break;case 180:o.toSpot=Spot.MiddleRight;break;default:o.toSpot=Spot.MiddleBottom;break}else o.toSpot=t.childPortSpot}}}else{const s=t.sourceEdges;for(;s.next();){const o=s.value.link;if(o!==null){if(t.setsPortSpot)if(t.portSpot.isDefault())switch(i){case 0:o.toSpot=Spot.MiddleRight;break;case 90:o.toSpot=Spot.MiddleBottom;break;case 180:o.toSpot=Spot.MiddleLeft;break;default:o.toSpot=Spot.MiddleTop;break}else o.toSpot=t.portSpot;if(t.setsChildPortSpot)if(t.childPortSpot.isDefault())switch(i){case 0:o.fromSpot=Spot.MiddleLeft;break;case 90:o.fromSpot=Spot.MiddleTop;break;case 180:o.fromSpot=Spot.MiddleRight;break;default:o.fromSpot=Spot.MiddleBottom;break}else o.fromSpot=t.childPortSpot}}}}}jU(t,e){const i=this.bs===1,s=this.orthoAngle(t);let n;switch(s){case 0:n=Spot.MiddleRight;break;case 90:n=Spot.MiddleBottom;break;case 180:n=Spot.MiddleLeft;break;default:n=Spot.MiddleTop;break}const o=t.children,r=o.length;switch(e){case 24:case 25:{for(let l=0;l<r;l++){const a=o[l],h=(i?a.sourceEdges:a.destinationEdges).first();if(h===null)continue;const c=h.link;if(c!==null){let f=s===90||s===270?Spot.MiddleLeft:Spot.MiddleTop;if(r===1||l===r-1&&r%2===1)switch(s){case 0:f=Spot.MiddleLeft;break;case 90:f=Spot.MiddleTop;break;case 180:f=Spot.MiddleRight;break;default:f=Spot.MiddleBottom;break}else l%2===0&&(f=s===90||s===270?Spot.MiddleRight:Spot.MiddleBottom);i?(t.setsPortSpot&&(c.fromSpot=n),t.setsChildPortSpot&&(c.toSpot=f)):(t.setsPortSpot&&(c.fromSpot=f),t.setsChildPortSpot&&(c.toSpot=n))}}break}case 26:{const l=s===90||s===270?Spot.MiddleRight:Spot.MiddleBottom,a=i?t.destinationEdges:t.sourceEdges;for(;a.next();){const c=a.value.link;c!==null&&(i?(t.setsPortSpot&&(c.fromSpot=n),t.setsChildPortSpot&&(c.toSpot=l)):(t.setsPortSpot&&(c.fromSpot=l),t.setsChildPortSpot&&(c.toSpot=n)))}break}case 27:{const l=s===90||s===270?Spot.MiddleLeft:Spot.MiddleTop,a=i?t.destinationEdges:t.sourceEdges;for(;a.next();){const c=a.value.link;c!==null&&(i?(t.setsPortSpot&&(c.fromSpot=n),t.setsChildPortSpot&&(c.toSpot=l)):(t.setsPortSpot&&(c.fromSpot=l),t.setsChildPortSpot&&(c.toSpot=n)))}break}}}orthoAngle(t){const e=t.angle;return e<=45?0:e<=135?90:e<=225?180:e<=315?270:0}computeLayerSpacing(t){const e=this.orthoAngle(t),i=e===90||e===270;let s=t.layerSpacing;if(t.layerSpacingParentOverlap>0){const n=Math.min(1,t.layerSpacingParentOverlap);s-=i?t.height*n:t.width*n}return s<(i?-t.height:-t.width)&&(s=i?-t.height:-t.width),s}computeNodeIndent(t){const e=this.orthoAngle(t),i=e===90||e===270;let s=t.nodeIndent;if(t.nodeIndentPastParent>0){const n=Math.min(1,t.nodeIndentPastParent);s+=i?t.width*n:t.height*n}return s=Math.max(0,s),s}get roots(){return this.Ve}set roots(t){this.Ve!==t&&(this.Ve=t,this.g())}get path(){return this.Ue}set path(t){this.Ue!==t&&(this.Ue=t,this.g())}get treeStyle(){return this.Tu}set treeStyle(t){this.Tu!==t&&(t===40||t===42||t===41||t===43)&&(this.Tu=t,this.g())}get layerStyle(){return this.am}set layerStyle(t){this.am!==t&&(t===60||t===61||t===62)&&(this.am=t,this.g())}get comments(){return this.Ki}set comments(t){this.Ki!==t&&(U.s(t,"boolean",TreeLayout,"comments"),this.Ki=t,this.g())}get arrangement(){return this.$e}set arrangement(t){this.$e!==t&&(t===50||t===51||t===52)&&(this.$e=t,this.g())}get arrangementSpacing(){return this.Gs}set arrangementSpacing(t){this.Gs.equals(t)||(this.Gs.h(t),this.g())}get rootDefaults(){return this.V}set rootDefaults(t){this.V!==t&&(this.V=t,this.g())}get alternateDefaults(){return this.z}set alternateDefaults(t){this.z!==t&&(this.z=t,this.g())}get sorting(){return this.V.sorting}set sorting(t){this.V.sorting!==t&&(this.V.sorting=t,this.g())}get comparer(){return this.V.comparer}set comparer(t){this.V.comparer!==t&&(U.S(t,TreeLayout,"comparer"),this.V.comparer=t,this.g())}get angle(){return this.V.angle}set angle(t){this.V.angle!==t&&(U.s(t,"number",TreeLayout,"angle"),t===0||t===90||t===180||t===270?(this.V.angle=t,this.g()):U.n("TreeLayout.angle must be 0, 90, 180, or 270"))}get alignment(){return this.V.alignment}set alignment(t){this.V.alignment!==t&&(this.V.alignment=t,this.g())}get nodeIndent(){return this.V.nodeIndent}set nodeIndent(t){this.V.nodeIndent!==t&&(U.s(t,"number",TreeLayout,"nodeIndent"),t>=0&&(this.V.nodeIndent=t,this.g()))}get nodeIndentPastParent(){return this.V.nodeIndentPastParent}set nodeIndentPastParent(t){this.V.nodeIndentPastParent!==t&&(U.s(t,"number",TreeLayout,"nodeIndentPastParent"),t>=0&&t<=1&&(this.V.nodeIndentPastParent=t,this.g()))}get nodeSpacing(){return this.V.nodeSpacing}set nodeSpacing(t){this.V.nodeSpacing!==t&&(U.s(t,"number",TreeLayout,"nodeSpacing"),this.V.nodeSpacing=t,this.g())}get layerSpacing(){return this.V.layerSpacing}set layerSpacing(t){this.V.layerSpacing!==t&&(U.s(t,"number",TreeLayout,"layerSpacing"),this.V.layerSpacing=t,this.g())}get layerSpacingParentOverlap(){return this.V.layerSpacingParentOverlap}set layerSpacingParentOverlap(t){this.V.layerSpacingParentOverlap!==t&&(U.s(t,"number",TreeLayout,"layerSpacingParentOverlap"),t>=0&&t<=1&&(this.V.layerSpacingParentOverlap=t,this.g()))}get compaction(){return this.V.compaction}set compaction(t){this.V.compaction!==t&&(t===30||t===31)&&(this.V.compaction=t,this.g())}get breadthLimit(){return this.V.breadthLimit}set breadthLimit(t){this.V.breadthLimit!==t&&(U.s(t,"number",TreeLayout,"breadthLimit"),t>=0&&(this.V.breadthLimit=t,this.g()))}get rowSpacing(){return this.V.rowSpacing}set rowSpacing(t){this.V.rowSpacing!==t&&(U.s(t,"number",TreeLayout,"rowSpacing"),this.V.rowSpacing=t,this.g())}get rowIndent(){return this.V.rowIndent}set rowIndent(t){this.V.rowIndent!==t&&(U.s(t,"number",TreeLayout,"rowIndent"),t>=0&&(this.V.rowIndent=t,this.g()))}get commentSpacing(){return this.V.commentSpacing}set commentSpacing(t){this.V.commentSpacing!==t&&(U.s(t,"number",TreeLayout,"commentSpacing"),this.V.commentSpacing=t,this.g())}get commentMargin(){return this.V.commentMargin}set commentMargin(t){this.V.commentMargin!==t&&(U.s(t,"number",TreeLayout,"commentMargin"),this.V.commentMargin=t,this.g())}get setsPortSpot(){return this.V.setsPortSpot}set setsPortSpot(t){this.V.setsPortSpot!==t&&(U.s(t,"boolean",TreeLayout,"setsPortSpot"),this.V.setsPortSpot=t,this.g())}get portSpot(){return this.V.portSpot}set portSpot(t){this.V.portSpot.equals(t)||(this.V.portSpot=t,this.g())}get setsChildPortSpot(){return this.V.setsChildPortSpot}set setsChildPortSpot(t){this.V.setsChildPortSpot!==t&&(U.s(t,"boolean",TreeLayout,"setsChildPortSpot"),this.V.setsChildPortSpot=t,this.g())}get childPortSpot(){return this.V.childPortSpot}set childPortSpot(t){this.V.childPortSpot.equals(t)||(this.V.childPortSpot=t,this.g())}get alternateSorting(){return this.z.sorting}set alternateSorting(t){this.z.sorting!==t&&(this.z.sorting=t,this.g())}get alternateComparer(){return this.z.comparer}set alternateComparer(t){this.z.comparer!==t&&(U.S(t,TreeLayout,"alternateComparer"),this.z.comparer=t,this.g())}get alternateAngle(){return this.z.angle}set alternateAngle(t){this.z.angle!==t&&(U.s(t,"number",TreeLayout,"alternateAngle"),(t===0||t===90||t===180||t===270)&&(this.z.angle=t,this.g()))}get alternateAlignment(){return this.z.alignment}set alternateAlignment(t){this.z.alignment!==t&&(this.z.alignment=t,this.g())}get alternateNodeIndent(){return this.z.nodeIndent}set alternateNodeIndent(t){this.z.nodeIndent!==t&&(U.s(t,"number",TreeLayout,"alternateNodeIndent"),t>=0&&(this.z.nodeIndent=t,this.g()))}get alternateNodeIndentPastParent(){return this.z.nodeIndentPastParent}set alternateNodeIndentPastParent(t){this.z.nodeIndentPastParent!==t&&(U.s(t,"number",TreeLayout,"alternateNodeIndentPastParent"),t>=0&&t<=1&&(this.z.nodeIndentPastParent=t,this.g()))}get alternateNodeSpacing(){return this.z.nodeSpacing}set alternateNodeSpacing(t){this.z.nodeSpacing!==t&&(U.s(t,"number",TreeLayout,"alternateNodeSpacing"),this.z.nodeSpacing=t,this.g())}get alternateLayerSpacing(){return this.z.layerSpacing}set alternateLayerSpacing(t){this.z.layerSpacing!==t&&(U.s(t,"number",TreeLayout,"alternateLayerSpacing"),this.z.layerSpacing=t,this.g())}get alternateLayerSpacingParentOverlap(){return this.z.layerSpacingParentOverlap}set alternateLayerSpacingParentOverlap(t){this.z.layerSpacingParentOverlap!==t&&(U.s(t,"number",TreeLayout,"alternateLayerSpacingParentOverlap"),t>=0&&t<=1&&(this.z.layerSpacingParentOverlap=t,this.g()))}get alternateCompaction(){return this.z.compaction}set alternateCompaction(t){this.z.compaction!==t&&(t===30||t===31)&&(this.z.compaction=t,this.g())}get alternateBreadthLimit(){return this.z.breadthLimit}set alternateBreadthLimit(t){this.z.breadthLimit!==t&&(U.s(t,"number",TreeLayout,"alternateBreadthLimit"),t>=0&&(this.z.breadthLimit=t,this.g()))}get alternateRowSpacing(){return this.z.rowSpacing}set alternateRowSpacing(t){this.z.rowSpacing!==t&&(U.s(t,"number",TreeLayout,"alternateRowSpacing"),this.z.rowSpacing=t,this.g())}get alternateRowIndent(){return this.z.rowIndent}set alternateRowIndent(t){this.z.rowIndent!==t&&(U.s(t,"number",TreeLayout,"alternateRowIndent"),t>=0&&(this.z.rowIndent=t,this.g()))}get alternateCommentSpacing(){return this.z.commentSpacing}set alternateCommentSpacing(t){this.z.commentSpacing!==t&&(U.s(t,"number",TreeLayout,"alternateCommentSpacing"),this.z.commentSpacing=t,this.g())}get alternateCommentMargin(){return this.z.commentMargin}set alternateCommentMargin(t){this.z.commentMargin!==t&&(U.s(t,"number",TreeLayout,"alternateCommentMargin"),this.z.commentMargin=t,this.g())}get alternateSetsPortSpot(){return this.z.setsPortSpot}set alternateSetsPortSpot(t){this.z.setsPortSpot!==t&&(U.s(t,"boolean",TreeLayout,"alternateSetsPortSpot"),this.z.setsPortSpot=t,this.g())}get alternatePortSpot(){return this.z.portSpot}set alternatePortSpot(t){this.z.portSpot.equals(t)||(this.z.portSpot=t,this.g())}get alternateSetsChildPortSpot(){return this.z.setsChildPortSpot}set alternateSetsChildPortSpot(t){this.z.setsChildPortSpot!==t&&(U.s(t,"boolean",TreeLayout,"alternateSetsChildPortSpot"),this.z.setsChildPortSpot=t,this.g())}get alternateChildPortSpot(){return this.z.childPortSpot}set alternateChildPortSpot(t){this.z.childPortSpot.equals(t)||(this.z.childPortSpot=t,this.g())}static PathDefault=0;static PathDestination=1;static PathSource=2;static SortingForwards=10;static SortingReverse=11;static SortingAscending=12;static SortingDescending=13;static AlignmentCenterSubtrees=20;static AlignmentCenterChildren=21;static AlignmentStart=22;static AlignmentEnd=23;static AlignmentBus=24;static AlignmentBusBranching=25;static AlignmentTopLeftBus=26;static AlignmentBottomRightBus=27;static CompactionNone=30;static CompactionBlock=31;static StyleLayered=40;static StyleLastParents=41;static StyleAlternating=42;static StyleRootOnly=43;static ArrangementVertical=50;static ArrangementHorizontal=51;static ArrangementFixedRoots=52;static LayerIndividual=60;static LayerSiblings=61;static LayerUniform=62}class TreeNetwork extends LayoutNetwork{constructor(t){super(t)}createVertex(){return new TreeVertex(this)}createEdge(){return new TreeEdge(this)}}class TreeVertex extends LayoutVertex{B;yt;ht;TP;LP;AP;Pr;DP;FP;vP;Ki;hm;cm;Ni;Ti;Yt;pe;Xw;Gw;Yw;Ys;Kw;Hw;qw;jw;Ww;Jw;$w;Zw;Qw;_w;tx;constructor(t){super(t),this.TP=!1,this.LP=null,this.AP=[],this.Pr=0,this.DP=0,this.FP=0,this.vP=0,this.Ki=null,this.B=new Point(0,0),this.yt=new Size(0,0),this.ht=new Point(0,0),this.hm=null,this.cm=null,this.Ni=10,this.Ti=LayoutVertex.standardComparer,this.Yt=0,this.pe=21,this.Xw=0,this.Gw=0,this.Yw=20,this.Ys=50,this.Kw=0,this.Hw=31,this.qw=0,this.jw=25,this.Ww=10,this.Jw=10,this.$w=20,this.Zw=!0,this.Qw=Spot.Default,this._w=!0,this.tx=Spot.Default}copyInheritedPropertiesFrom(t){t!==null&&(this.Ni=t.sorting,this.Ti=t.comparer,this.Yt=t.angle,this.pe=t.alignment,this.Xw=t.nodeIndent,this.Gw=t.nodeIndentPastParent,this.Yw=t.nodeSpacing,this.Ys=t.layerSpacing,this.Kw=t.layerSpacingParentOverlap,this.Hw=t.compaction,this.qw=t.breadthLimit,this.jw=t.rowSpacing,this.Ww=t.rowIndent,this.Jw=t.commentSpacing,this.$w=t.commentMargin,this.Zw=t.setsPortSpot,this.Qw=t.portSpot,this._w=t.setsChildPortSpot,this.tx=t.childPortSpot)}get initialized(){return this.TP}set initialized(t){this.TP!==t&&(U.s(t,"boolean",TreeVertex,"initialized"),this.TP=t)}get parent(){return this.LP}set parent(t){this.LP!==t&&(this.LP=t)}get children(){return this.AP}set children(t){if(this.AP!==t){if(t!==null&&!Array.isArray(t)&&U.ri(t,"Array",TreeVertex,"children:value"),t!==null){const e=t.length;for(let i=0;i<e;i++){const s=t[i]}}this.AP=t}}get level(){return this.Pr}set level(t){this.Pr!==t&&(U.s(t,"number",TreeVertex,"level"),this.Pr=t)}get descendantCount(){return this.DP}set descendantCount(t){this.DP!==t&&(U.s(t,"number",TreeVertex,"descendantCount"),this.DP=t)}get maxChildrenCount(){return this.FP}set maxChildrenCount(t){this.FP!==t&&(U.s(t,"number",TreeVertex,"maxChildrenCount"),this.FP=t)}get maxGenerationCount(){return this.vP}set maxGenerationCount(t){this.vP!==t&&(U.s(t,"number",TreeVertex,"maxGenerationCount"),this.vP=t)}get comments(){return this.Ki}set comments(t){if(this.Ki!==t){if(t!==null&&!Array.isArray(t)&&U.ri(t,"Array",TreeVertex,"comments:value"),t!==null){const e=t.length;for(let i=0;i<e;i++){const s=t[i]}}this.Ki=t}}get sorting(){return this.Ni}set sorting(t){this.Ni!==t&&(this.Ni=t)}get comparer(){return this.Ti}set comparer(t){this.Ti!==t&&(U.S(t,TreeVertex,"comparer"),this.Ti=t)}get angle(){return this.Yt}set angle(t){this.Yt!==t&&(U.s(t,"number",TreeVertex,"angle"),this.Yt=t)}get alignment(){return this.pe}set alignment(t){this.pe!==t&&(this.pe=t)}get nodeIndent(){return this.Xw}set nodeIndent(t){this.Xw!==t&&(U.s(t,"number",TreeVertex,"nodeIndent"),this.Xw=t)}get nodeIndentPastParent(){return this.Gw}set nodeIndentPastParent(t){this.Gw!==t&&(U.s(t,"number",TreeVertex,"nodeIndentPastParent"),this.Gw=t)}get nodeSpacing(){return this.Yw}set nodeSpacing(t){this.Yw!==t&&(U.s(t,"number",TreeVertex,"nodeSpacing"),this.Yw=t)}get layerSpacing(){return this.Ys}set layerSpacing(t){this.Ys!==t&&(U.s(t,"number",TreeVertex,"layerSpacing"),this.Ys=t)}get layerSpacingParentOverlap(){return this.Kw}set layerSpacingParentOverlap(t){this.Kw!==t&&(U.s(t,"number",TreeVertex,"layerSpacingParentOverlap"),this.Kw=t)}get compaction(){return this.Hw}set compaction(t){this.Hw!==t&&(this.Hw=t)}get breadthLimit(){return this.qw}set breadthLimit(t){this.qw!==t&&(U.s(t,"number",TreeVertex,"breadthLimit"),this.qw=t)}get rowSpacing(){return this.jw}set rowSpacing(t){this.jw!==t&&(U.s(t,"number",TreeVertex,"rowSpacing"),this.jw=t)}get rowIndent(){return this.Ww}set rowIndent(t){this.Ww!==t&&(U.s(t,"number",TreeVertex,"rowIndent"),this.Ww=t)}get commentSpacing(){return this.Jw}set commentSpacing(t){this.Jw!==t&&(U.s(t,"number",TreeVertex,"commentSpacing"),this.Jw=t)}get commentMargin(){return this.$w}set commentMargin(t){this.$w!==t&&(U.s(t,"number",TreeVertex,"commentMargin"),this.$w=t)}get setsPortSpot(){return this.Zw}set setsPortSpot(t){this.Zw!==t&&(U.s(t,"boolean",TreeVertex,"setsPortSpot"),this.Zw=t)}get portSpot(){return this.Qw}set portSpot(t){this.Qw.equals(t)||(this.Qw=t)}get setsChildPortSpot(){return this._w}set setsChildPortSpot(t){this._w!==t&&(U.s(t,"boolean",TreeVertex,"setsChildPortSpot"),this._w=t)}get childPortSpot(){return this.tx}set childPortSpot(t){this.tx.equals(t)||(this.tx=t)}get childrenCount(){return this.children.length}get relativePosition(){return this.B}set relativePosition(t){this.B.set(t)}get subtreeSize(){return this.yt}set subtreeSize(t){this.yt.set(t)}get subtreeOffset(){return this.ht}set subtreeOffset(t){this.ht.set(t)}}class TreeEdge extends LayoutEdge{RP;constructor(t){super(t),this.RP=new Point(0,0)}commit(){const t=this.link;if(t===null||t.isAvoiding)return;const e=this.network.layout;let i=null,s=null;switch(e.bs){case 1:i=this.fromVertex,s=this.toVertex;break;case 2:i=this.toVertex,s=this.fromVertex;break;default:U.n("Unhandled path value "+e.bs.toString())}if(i===null||s===null)return;const n=this.RP;if(n.x===0&&n.y===0){this.WU(i,s);return}const o=i.bounds,r=e.orthoAngle(i),l=e.computeLayerSpacing(i),a=i.rowSpacing;t.updateRoute();const h=t.curve===9,c=t.isOrthogonal;let f=0,u,d;if(t.startRoute(),c||h){for(f=2;t.pointsCount>4;)t.removePoint(2);u=t.getPoint(1),d=t.getPoint(2)}else{for(f=1;t.pointsCount>3;)t.removePoint(1);u=t.getPoint(0),d=t.getPoint(t.pointsCount-1)}const m=t.getPoint(t.pointsCount-1);let g=0;r===0?(i.alignment===23?(g=o.bottom+n.y,n.y===0&&u.y>m.y+i.rowIndent&&(g=Math.min(g,Math.max(u.y,g-e.computeNodeIndent(i))))):i.alignment===22?(g=o.top+n.y,n.y===0&&u.y<m.y-i.rowIndent&&(g=Math.max(g,Math.min(u.y,g+e.computeNodeIndent(i))))):g=o.y+o.height/2+n.y,h?(t.insertPointAt(f,u.x,g),f++,t.insertPointAt(f,o.right+l,g),f++,t.insertPointAt(f,o.right+l+(n.x-a)/3,g),f++,t.insertPointAt(f,o.right+l+(n.x-a)*2/3,g),f++,t.insertPointAt(f,o.right+l+(n.x-a),g),f++,t.insertPointAt(f,d.x,g),f++):(c&&(t.insertPointAt(f,o.right+l/2,u.y),f++),t.insertPointAt(f,o.right+l/2,g),f++,t.insertPointAt(f,o.right+l+n.x-(c?a/2:a),g),f++,c&&(t.insertPointAt(f,t.getPoint(f-1).x,d.y),f++))):r===90?(i.alignment===23?(g=o.right+n.x,n.x===0&&u.x>m.x+i.rowIndent&&(g=Math.min(g,Math.max(u.x,g-e.computeNodeIndent(i))))):i.alignment===22?(g=o.left+n.x,n.x===0&&u.x<m.x-i.rowIndent&&(g=Math.max(g,Math.min(u.x,g+e.computeNodeIndent(i))))):g=o.x+o.width/2+n.x,h?(t.insertPointAt(f,g,u.y),f++,t.insertPointAt(f,g,o.bottom+l),f++,t.insertPointAt(f,g,o.bottom+l+(n.y-a)/3),f++,t.insertPointAt(f,g,o.bottom+l+(n.y-a)*2/3),f++,t.insertPointAt(f,g,o.bottom+l+(n.y-a)),f++,t.insertPointAt(f,g,d.y),f++):(c&&(t.insertPointAt(f,u.x,o.bottom+l/2),f++),t.insertPointAt(f,g,o.bottom+l/2),f++,t.insertPointAt(f,g,o.bottom+l+n.y-(c?a/2:a)),f++,c&&(t.insertPointAt(f,d.x,t.getPoint(f-1).y),f++))):r===180?(i.alignment===23?(g=o.bottom+n.y,n.y===0&&u.y>m.y+i.rowIndent&&(g=Math.min(g,Math.max(u.y,g-e.computeNodeIndent(i))))):i.alignment===22?(g=o.top+n.y,n.y===0&&u.y<m.y-i.rowIndent&&(g=Math.max(g,Math.min(u.y,g+e.computeNodeIndent(i))))):g=o.y+o.height/2+n.y,h?(t.insertPointAt(f,u.x,g),f++,t.insertPointAt(f,o.left-l,g),f++,t.insertPointAt(f,o.left-l+(n.x+a)/3,g),f++,t.insertPointAt(f,o.left-l+(n.x+a)*2/3,g),f++,t.insertPointAt(f,o.left-l+(n.x+a),g),f++,t.insertPointAt(f,d.x,g),f++):(c&&(t.insertPointAt(f,o.left-l/2,u.y),f++),t.insertPointAt(f,o.left-l/2,g),f++,t.insertPointAt(f,o.left-l+n.x+(c?a/2:a),g),f++,c&&(t.insertPointAt(f,t.getPoint(f-1).x,d.y),f++))):r===270?(i.alignment===23?(g=o.right+n.x,n.x===0&&u.x>m.x+i.rowIndent&&(g=Math.min(g,Math.max(u.x,g-e.computeNodeIndent(i))))):i.alignment===22?(g=o.left+n.x,n.x===0&&u.x<m.x-i.rowIndent&&(g=Math.max(g,Math.min(u.x,g+e.computeNodeIndent(i))))):g=o.x+o.width/2+n.x,h?(t.insertPointAt(f,g,u.y),f++,t.insertPointAt(f,g,o.top-l),f++,t.insertPointAt(f,g,o.top-l+(n.y+a)/3),f++,t.insertPointAt(f,g,o.top-l+(n.y+a)*2/3),f++,t.insertPointAt(f,g,o.top-l+(n.y+a)),f++,t.insertPointAt(f,g,d.y),f++):(c&&(t.insertPointAt(f,u.x,o.top-l/2),f++),t.insertPointAt(f,g,o.top-l/2),f++,t.insertPointAt(f,g,o.top-l+n.y+(c?a/2:a)),f++,c&&(t.insertPointAt(f,d.x,t.getPoint(f-1).y),f++))):U.n("Invalid angle "+r),t.commitRoute()}WU(t,e){const i=this.link;if(i===null)return;const s=this.network.layout,n=s.orthoAngle(t),o=s.orthoAngle(e);if(n===o)return;const r=s.computeLayerSpacing(t),l=t.bounds,a=e.bounds;if(n===0&&a.left-l.right<r+1||n===90&&a.top-l.bottom<r+1||n===180&&l.left-a.right<r+1||n===270&&l.top-a.bottom<r+1)return;i.updateRoute();const h=i.curve===9,c=i.isOrthogonal,f=this.fromVertex,u=s.isBusAlignment(f.alignment);if(i.startRoute(),n===0){const d=l.right+r/2;if(h){if(i.pointsCount===4){const m=i.getPoint(3).y;i.setPointAt(1,d-20,i.getPoint(1).y),i.insertPointAt(2,d-20,m),i.insertPointAt(3,d,m),i.insertPointAt(4,d+20,m),i.setPointAt(5,i.getPoint(5).x,m)}}else c?u?i.setPointAt(3,i.getPoint(2).x,i.getPoint(4).y):i.pointsCount===6&&(i.setPointAt(2,d,i.getPoint(2).y),i.setPointAt(3,d,i.getPoint(3).y)):i.pointsCount===4?i.insertPointAt(2,d,i.getPoint(2).y):i.pointsCount===3?i.setPointAt(1,d,i.getPoint(2).y):i.pointsCount===2&&i.insertPointAt(1,d,i.getPoint(1).y)}else if(n===90){const d=l.bottom+r/2;if(h){if(i.pointsCount===4){const m=i.getPoint(3).x;i.setPointAt(1,i.getPoint(1).x,d-20),i.insertPointAt(2,m,d-20),i.insertPointAt(3,m,d),i.insertPointAt(4,m,d+20),i.setPointAt(5,m,i.getPoint(5).y)}}else c?u?i.setPointAt(3,i.getPoint(2).x,i.getPoint(4).y):i.pointsCount===6&&(i.setPointAt(2,i.getPoint(2).x,d),i.setPointAt(3,i.getPoint(3).x,d)):i.pointsCount===4?i.insertPointAt(2,i.getPoint(2).x,d):i.pointsCount===3?i.setPointAt(1,i.getPoint(2).x,d):i.pointsCount===2&&i.insertPointAt(1,i.getPoint(1).x,d)}else if(n===180){const d=l.left-r/2;if(h){if(i.pointsCount===4){const m=i.getPoint(3).y;i.setPointAt(1,d+20,i.getPoint(1).y),i.insertPointAt(2,d+20,m),i.insertPointAt(3,d,m),i.insertPointAt(4,d-20,m),i.setPointAt(5,i.getPoint(5).x,m)}}else c?u?i.setPointAt(3,i.getPoint(2).x,i.getPoint(4).y):i.pointsCount===6&&(i.setPointAt(2,d,i.getPoint(2).y),i.setPointAt(3,d,i.getPoint(3).y)):i.pointsCount===4?i.insertPointAt(2,d,i.getPoint(2).y):i.pointsCount===3?i.setPointAt(1,d,i.getPoint(2).y):i.pointsCount===2&&i.insertPointAt(1,d,i.getPoint(1).y)}else if(n===270){const d=l.top-r/2;if(h){if(i.pointsCount===4){const m=i.getPoint(3).x;i.setPointAt(1,i.getPoint(1).x,d+20),i.insertPointAt(2,m,d+20),i.insertPointAt(3,m,d),i.insertPointAt(4,m,d-20),i.setPointAt(5,m,i.getPoint(5).y)}}else c?u?i.setPointAt(3,i.getPoint(2).x,i.getPoint(4).y):i.pointsCount===6&&(i.setPointAt(2,i.getPoint(2).x,d),i.setPointAt(3,i.getPoint(3).x,d)):i.pointsCount===4?i.insertPointAt(2,i.getPoint(2).x,d):i.pointsCount===3?i.setPointAt(1,i.getPoint(2).x,d):i.pointsCount===2&&i.insertPointAt(1,i.getPoint(1).x,d)}i.commitRoute()}get fromVertex(){return this.rs}set fromVertex(t){this.rs!==t&&(this.rs=t)}get toVertex(){return this.ls}set toVertex(t){this.ls!==t&&(this.ls=t)}get relativePoint(){return this.RP}set relativePoint(t){this.RP.set(t)}}class Themes{constructor(){}static Light={colors:{text:"#0a0a0a",comment:"#ca8a04",link:"#0a0a0a",group:"#a3a3a344",outline:"#a3a3a3",selection:"#0ea5e9",div:"#fff",gridMinor:"#e5e5e5",gridMajor:"#a3a3a3",overviewBox:"#c026d3",tempLink:"#2563eb",tempPort:"#c026d3",adornmentFill:"#0ea5e9",adornmentStroke:"#1e40af",dragSelect:"#c026d3"},fonts:{normal:"10pt sans-serif",bold:"bold 12pt sans-serif"},numbers:{group:1,selection:3},margins:{group:new Margin(5)},arrowheads:{toArrow:"Standard"}};static Dark={colors:{text:"#f5f5f5",comment:"#facc15",link:"#f5f5f5",group:"#a3a3a388",outline:"#a3a3a3",selection:"#38bdf8",div:"#171717",gridMinor:"#262626",gridMajor:"#404040",overviewBox:"#e879f9",tempLink:"#60a5fa",tempPort:"#e879f9",adornmentFill:"#38bdf8",adornmentStroke:"#2563eb",dragSelect:"#e879f9"},fonts:{normal:"10pt sans-serif",bold:"bold 12pt sans-serif"},numbers:{group:1,selection:3},margins:{group:new Margin(5)},arrowheads:{toArrow:"Standard"}}}class ThemeManager{us=new Set;Au=new GMap;OP="light";IP="light";EP=!1;QT=!0;fm="light";gR=t=>{const e=t.matches?"dark":"light";e!==this.fm&&(this.fm=e,this.IP==="system"&&this.updateDiagrams())};constructor(t){t&&Object.assign(this,t),t?.themeMap||(this.Au.set("light",{colors:{...Themes.Light.colors},fonts:{...Themes.Light.fonts},numbers:{...Themes.Light.numbers},margins:{...Themes.Light.margins},arrowheads:{...Themes.Light.arrowheads}}),this.Au.set("dark",{colors:{...Themes.Dark.colors},fonts:{...Themes.Dark.fonts},numbers:{...Themes.Dark.numbers},margins:{...Themes.Dark.margins},arrowheads:{...Themes.Dark.arrowheads}})),root.matchMedia&&(this.fm=root.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")}get themeMap(){return this.Au}set themeMap(t){this.Au!==t&&(this.Au=t,this.updateDiagrams())}get defaultTheme(){return this.OP}set defaultTheme(t){this.OP!==t&&(U.s(t,"string",ThemeManager,"defaultTheme"),this.OP=t,this.updateDiagrams())}get currentTheme(){return this.IP}set currentTheme(t){this.IP!==t&&(U.s(t,"string",ThemeManager,"currentTheme"),this.IP=t,this.updateDiagrams())}get changesDivBackground(){return this.EP}set changesDivBackground(t){if(this.EP!==t&&(this.EP=t,t))for(const i of this.us)i.setDivBackground(this.findValue("div","","fill")),i.D("ThemeChanged",this)}get readsCssVariables(){return this.QT}set readsCssVariables(t){this.QT!==t&&(this.QT=t,this.updateDiagrams())}get preferredColorScheme(){return this.fm}addDiagram(t){return this.us.add(t),this._T(t),this}removeDiagram(t){return this.us.delete(t),this._T(t),this}MO(){this.us.size===0&&root.matchMedia&&root.matchMedia("(prefers-color-scheme: dark)")?.addEventListener("change",this.gR)}CO(){this.us.size===0&&root.matchMedia&&root.matchMedia("(prefers-color-scheme: dark)")?.removeEventListener("change",this.gR)}set(t,e){t===""&&(t=this.OP),t==="system"&&(t=this.fm);let i=this.Au.get(t);return i?i=this.mR(i,e):i=e,this.Au.set(t,i),this.updateDiagrams(),this}findValue(t,e,i){return this.getValue(this.findTheme(this.currentTheme),t,e,i)||this.getValue(this.findTheme(this.defaultTheme),t,e,i)}getValue(t,e,i,s){if(!t)return;i==null&&(i="");let n=t;const o=l=>{if(n===void 0||l==="")return;if(typeof l=="number"||!(Array.isArray(l)||l.includes(".")))return n[l];const a=Array.isArray(l)?l:l.split(".");for(let h=0;h<a.length;h++){const c=a[h];if(c!==""&&(n=n[c],n===void 0))return}return n},r=()=>{if(!(i!==""&&(n=o(i),n===void 0)))return Array.isArray(n)&&typeof e=="number"?n=n[e%n.length]:n=o(e),n};if(n=r(),n===void 0&&typeof s=="string"&&s.length>0){let l=t.targetPropertyMap?.get(s);if(l?n=t[l]:(l=ThemeManager.JU.get(s),n=l?t[l]:t.colors),n=r(),n!==void 0)return n}return n}findTheme(t){return this.themeMap.get(t==="system"?this.fm:t)}updateDiagrams(){for(const t of this.us)this._T(t)}_T(t){const e=t.skipsUndoManager;t.skipsUndoManager=!0,t.updateAllThemeBindings(),this.EP&&t.setDivBackground(this.findValue("div","","fill")),t.skipsUndoManager=e,t.D("ThemeChanged",this)}mR(t,e){for(const i in e)if(U.ex(e,i))try{e[i]?.constructor===Object?t[i]=this.mR(t[i]??{},e[i]):t[i]=e[i]}catch{delete t[i]}return t}static JU=new Map([["background","colors"],["defaultColumnSeparatorStroke","colors"],["defaultRowSeparatorStroke","colors"],["shadowColor","colors"],["fill","colors"],["stroke","colors"],["font","fonts"],["angle","numbers"],["fromEndSegmentLength","numbers"],["fromShortLength","numbers"],["height","numbers"],["opacity","numbers"],["scale","numbers"],["toEndSegmentLength","numbers"],["toShortLength","numbers"],["width","numbers"],["defaultColumnSeparatorStrokeWidth","numbers"],["defaultRowSeparatorStrokeWidth","numbers"],["shadowBlur","numbers"],["corner","numbers"],["curviness","numbers"],["smoothness","numbers"],["parameter1","numbers"],["parameter2","numbers"],["strokeWidth","numbers"],["strokeDashOffset","numbers"],["maxLines","numbers"],["spacingAbove","numbers"],["spacingBelow","numbers"],["position","points"],["shadowOffset","points"],["desiredSize","sizes"],["maxSize","sizes"],["minSize","sizes"],["margin","margins"],["defaultSeparatorPadding","margins"],["padding","margins"],["alignment","spots"],["alignmentFocus","spots"],["fromSpot","spots"],["toSpot","spots"],["defaultAlignment","spots"],["spot1","spots"],["spot2","spots"],["verticalAlignment","spots"],["imageAlignment","spots"],["fromArrow","arrowheads"],["toArrow","arrowheads"]])}class Router{St;a;Ye;Al;constructor(){this.a=Diagram.qm(),this.St="",this.Ye=!0,this.Al=!0}get name(){return this.St}set name(t){this.St=t}get isEnabled(){return this.Ye}set isEnabled(t){this.Ye=t}get isRealtime(){return this.Al}set isRealtime(t){this.Al=t}get diagram(){return this.a}set diagram(t){this.a!==t&&(this.a=t,t.Hl=!0,t.requestUpdate())}invalidateRouter(){this.a!==null&&(this.a.Hl=!0,this.a.requestUpdate())}canRoute(t){if(!this.isEnabled)return!1;const e=this.diagram;return!(e&&(!this.isRealtime&&e.Hu||e.animationManager.isTicking))}isRoutable(t,e){return!0}routeLinks(t,e){}toString(){return this.name!==""?this.name+" Router":U.Jn(this.constructor)}}class AvoidsNodesRouter extends Router{constructor(t){super(),this.name="AvoidsNodes",t&&Object.assign(this,t)}canRoute(t){return(t instanceof Diagram?t.xp:t.diagram?.xp)?super.canRoute(t):!1}isRoutable(t,e){return!(!t.isAvoiding||t.containingGroup!==(e instanceof Group?e:null)||t.toNode===null||t.fromNode===null||t.pointsCount<4)}routeLinks(t,e){const i=e instanceof Diagram?null:e,s=t.iterator,n=this.diagram.getPositions(!0,i,null);for(;s.next();){const o=s.value;if(!this.isRoutable(o,e))continue;o.startRoute();const r=o.pointsCount,l=o.getPoint(1),a=o.getPoint(r-2),h=o.fromNode.actualBounds.copy();h.inflate(Link.za,Link.za),h.unionPoint(o.getPoint(0));const c=o.toNode.actualBounds.copy();c.inflate(Link.za,Link.za),c.unionPoint(o.getPoint(r-1)),this.$U(o,h,c,n)&&this.ZU(o,l,o.WN,a,o.JN,h,c,n),o.commitRoute()}}$U(t,e,i,s){const n=t.diagram,o=t.pointsCount;if(n===null||!t.fromNode||!t.toNode||t.fromNode===t.toNode||!t.layer||t.layer.isTemporary||e.containsPoint(t.getPoint(o-1))&&!t.toNode.isMemberOf(t.fromNode)||i.containsPoint(t.getPoint(0))&&!t.fromNode.isMemberOf(t.toNode)||!t.isOrthogonal)return!1;if(t.segmentIndex===17)return!0;const r=t.getPoint(1),l=t.getPoint(o-2),a=t.getPoint(2);if(!s.isUnoccupied(Math.min(r.x,a.x),Math.min(r.y,a.y),Math.abs(r.x-a.x),Math.abs(r.y-a.y)))return!0;for(let c=2;c<o-3;c++){const f=t.getPoint(c),u=t.getPoint(c+1);if(!s.isUnoccupied(Math.min(f.x,u.x),Math.min(f.y,u.y),Math.abs(f.x-u.x),Math.abs(f.y-u.y)))return!0}const h=t.getPoint(o-3);return!s.isUnoccupied(Math.min(h.x,l.x),Math.min(h.y,l.y),Math.abs(h.x-l.x),Math.abs(h.y-l.y))}ZU(t,e,i,s,n,o,r,l){const a=t.diagram;if(a===null)return;const h=e,c=s;let f=Point.xn,u=Point.xn;if(a.isVirtualized){const g=l.bounds.copy(),p=t.getPoint(2),y=t.getPoint(t.pointsCount-3);g.inflate(-l.cellWidth,-l.cellHeight);const x=Point.l();l.yg(e.x,e.y)||(G.Bl(g.x,g.y,g.x+g.width,g.y+g.height,e.x,e.y,p.x,p.y,x)?(f=e=x.copy(),i=x.directionPoint(p)):G.Bl(g.x,g.y,g.x+g.width,g.y+g.height,p.x,p.y,y.x,y.y,x)?(f=e=x.copy(),i=x.directionPoint(y)):G.Bl(g.x,g.y,g.x+g.width,g.y+g.height,y.x,y.y,s.x,s.y,x)&&(f=e=x.copy(),i=x.directionPoint(s))),l.yg(s.x,s.y)||(G.Bl(g.x,g.y,g.x+g.width,g.y+g.height,s.x,s.y,y.x,y.y,x)?(u=s=x.copy(),n=y.directionPoint(x)):G.Bl(g.x,g.y,g.x+g.width,g.y+g.height,y.x,y.y,p.x,p.y,x)?(u=s=x.copy(),n=p.directionPoint(x)):G.Bl(g.x,g.y,g.x+g.width,g.y+g.height,p.x,p.y,e.x,e.y,x)&&(u=s=x.copy(),n=e.directionPoint(x))),Point.i(x)}const d=o.copy().unionRect(r);d.inflate(l.cellWidth*l.kf,l.cellHeight*l.kf),l.HF(e,i,s,n,d,!0);let m=l.Mo(s.x,s.y);if(!l.fw&&m>=PositionArray.pg&&(l.sD(),d.inflate(l.cellWidth*l.rC,l.cellHeight*l.lC),l.HF(e,i,s,n,d,!1),m=l.Mo(s.x,s.y)),!l.fw&&m<PositionArray.pg&&!l.u3(s.x,s.y)){t.points.removeRange(2,t.pointsCount-3),this.tL(t,l,s.x,s.y,n,!0);const g=0,p=90,y=180,x=270,b=t.getPoint(2);if(t.pointsCount<4)i===g||i===y?(b.x=e.x,b.y=s.y):(b.x=s.x,b.y=e.y),t.setPointAt(2,b.x,b.y),t.insertPointAt(3,b.x,b.y);else{const k=t.getPoint(3);if(i===g||i===y)if(G.c(b.x,k.x)){const P=i===g?Math.max(b.x,e.x):Math.min(b.x,e.x);t.setPointAt(2,P,e.y),t.setPointAt(3,P,k.y)}else G.c(b.y,k.y)?(Math.abs(e.y-b.y)<=l.cellHeight/2&&(t.setPointAt(2,b.x,e.y),t.setPointAt(3,k.x,e.y)),t.insertPointAt(2,b.x,e.y)):t.setPointAt(2,e.x,b.y);else if(i===p||i===x)if(G.c(b.y,k.y)){const P=i===p?Math.max(b.y,e.y):Math.min(b.y,e.y);t.setPointAt(2,e.x,P),t.setPointAt(3,k.x,P)}else G.c(b.x,k.x)?(Math.abs(e.x-b.x)<=l.cellWidth/2&&(t.setPointAt(2,e.x,b.y),t.setPointAt(3,e.x,k.y)),t.insertPointAt(2,e.x,b.y)):t.setPointAt(2,b.x,e.y)}if(f.isReal()){const k=t.getPoint(1),P=t.getPoint(2);k.x!==P.x&&k.y!==P.y?i===g||i===y?t.insertPointAt(2,k.x,P.y):t.insertPointAt(2,P.x,k.y):i===g||i===y?t.insertPointAt(2,h.x,f.y):t.insertPointAt(2,f.x,h.y)}u.isReal()&&(n===g||n===y?t.insertPointAt(t.pointsCount-2,c.x,u.y):t.insertPointAt(t.pointsCount-2,u.x,c.y))}}tL(t,e,i,s,n,o){const c=e.cellWidth,f=e.cellHeight;let u=e.Mo(i,s),d=i,m=s,g=d,p=m;for(n===0?g+=c:n===90?p+=f:n===180?g-=c:p-=f,t.iT&&u>PositionArray.gc&&e.Mo(g,p)!==u-1&&(e.Mo(d-c,m)===u-1?(n=180,g=d-c,p=m):e.Mo(d+c,m)===u-1?(n=0,g=d+c,p=m):e.Mo(d,m-f)===u-1?(n=270,g=d,p=m-f):e.Mo(d,m+f)===u-1&&(n=90,g=d,p=m+f));u>PositionArray.gc&&e.Mo(g,p)===u-1;)d=g,m=p,n===0?g+=c:n===90?p+=f:n===180?g-=c:p-=f,u-=1;if(o?u>PositionArray.gc&&(n===180||n===0?d=Math.floor(d/c)*c+c/2:(n===90||n===270)&&(m=Math.floor(m/f)*f+f/2)):(d=Math.floor(d/c)*c+c/2,m=Math.floor(m/f)*f+f/2),u>PositionArray.gc){let y=n,x=d,b=m;if(n===0?(y=90,b+=f):n===90?(y=180,x-=c):n===180?(y=270,b-=f):n===270&&(y=0,x+=c),e.Mo(x,b)===u-1)this.tL(t,e,x,b,y,!1);else{let P=d,S=m;n===0?(y=270,S-=f):n===90?(y=0,P+=c):n===180?(y=90,S+=f):n===270&&(y=180,P-=c),e.Mo(P,S)===u-1&&this.tL(t,e,P,S,y,!1)}}t.insertPointAt(t.pointsCount-2,d,m)}}ToolManager.prototype.initializeStandardTools=function(){return this.te("Action",new ActionTool,this.mouseDownTools),this.te("Relinking",new RelinkingTool,this.mouseDownTools),this.te("LinkReshaping",new LinkReshapingTool,this.mouseDownTools),this.te("Rotating",new RotatingTool,this.mouseDownTools),this.te("Resizing",new ResizingTool,this.mouseDownTools),this.te("Linking",new LinkingTool,this.mouseMoveTools),this.te("Dragging",new DraggingTool,this.mouseMoveTools),this.te("DragSelecting",new DragSelectingTool,this.mouseMoveTools),this.te("Panning",new PanningTool,this.mouseMoveTools),this.te("ContextMenu",new ContextMenuTool,this.mouseUpTools),this.te("TextEditing",new TextEditingTool,this.mouseUpTools),this.te("ClickCreating",new ClickCreatingTool,this.mouseUpTools),this.te("ClickSelecting",new ClickSelectingTool,this.mouseUpTools),this};Diagram.B2("GraphLinksModel",GraphLinksPartManager);Diagram.B2("TreeModel",TreePartManager);const oldGo=root.go,go={get version(){return Diagram.version},Group,List,Set:GSet,Map:GMap,Point,Size,Rect,Margin,Spot,Quadtree,Geometry,PathFigure,PathSegment,InputEvent,DiagramEvent,ChangedEvent,Model,GraphLinksModel,TreeModel,Binding,ThemeBinding,Transaction,UndoManager,CommandHandler,Tool,DraggingTool,DraggingInfo,DraggingOptions,LinkingBaseTool,LinkingTool,RelinkingTool,LinkReshapingTool,ResizingTool,RotatingTool,ClickSelectingTool,ActionTool,ClickCreatingTool,HTMLInfo,ContextMenuTool,DragSelectingTool,PanningTool,TextEditingTool,ToolManager,Animation,AnimationManager,AnimationTrigger,Layer,Diagram,Palette,Overview,Brush,GraphObject,Panel,RowColumnDefinition,Shape,TextBlock,Picture,Part,Adornment,Node,Link,Placeholder,Layout,LayoutNetwork,LayoutVertex,LayoutEdge,GridLayout,PanelLayout,CircularLayout,CircularNetwork,CircularVertex,CircularEdge,ForceDirectedLayout,ForceDirectedNetwork,ForceDirectedVertex,ForceDirectedEdge,LayeredDigraphLayout,LayeredDigraphNetwork,LayeredDigraphVertex,LayeredDigraphEdge,TreeLayout,TreeNetwork,TreeVertex,TreeEdge,Themes,ThemeManager,Router,AnimationStyle,AutoScale,CycleMode,Flip,TextFormat,ImageStretch,LayoutConditions,LinkAdjusting,Curve,Routing,Orientation,TextOverflow,PortSpreading,ScrollMode,CollapsePolicy,Sizing,TriggerStart,Stretch,ViewboxStretch,Wrap,BrushType,ColorSpace,GeometryStretch,GeometryType,SegmentType,BindingMode,ChangeType,CircularArrangement,CircularDirection,CircularNodeDiameterFormula,CircularSorting,GridAlignment,GridArrangement,GridSorting,LayeredDigraphAggressive,LayeredDigraphAlign,LayeredDigraphCycleRemove,LayeredDigraphInit,LayeredDigraphLayering,LayeredDigraphPack,TreeAlignment,TreeArrangement,TreeCompaction,TreeLayerStyle,TreePath,TreeSorting,TreeStyle,GestureMode,LinkingDirection,ReshapingBehavior,TextEditingAccept,TextEditingStarting,TextEditingState,WheelMode,Figures,Arrowheads,PanelTypes,ToolNames,Builders,LayerNames};for(const w in go){const t=go[w];U.nt(t)&&t!==TextFormat&&(t.className=w)}U.Z(oldGo)&&oldGo.version&&U.jt("WARNING: a `go` object on the root object is already defined.  "+("Debug"in oldGo?"debug ":"")+"version: "+oldGo.version+", replaced with version: "+go.version);Diagram.prototype.go=go;root.go=go;
})();


        export default (typeof global !== "undefined") ? global.go : self.go;
  export const go = (typeof global !== "undefined") ? global.go : self.go;
  export const Group = go.Group;
  export const List = go.List;
  const GSet = go.Set;
  export { GSet as Set };
  const GMap = go.Map;
  export { GMap as Map };
  export const Point = go.Point;
  export const Size = go.Size;
  export const Rect = go.Rect;
  export const Margin = go.Margin;
  export const Spot = go.Spot;
  export const Quadtree = go.Quadtree;
  export const Geometry = go.Geometry;
  export const PathFigure = go.PathFigure;
  export const PathSegment = go.PathSegment;
  export const InputEvent = go.InputEvent;
  export const DiagramEvent = go.DiagramEvent;
  export const ChangedEvent = go.ChangedEvent;
  export const Model = go.Model;
  export const GraphLinksModel = go.GraphLinksModel;
  export const TreeModel = go.TreeModel;
  export const Binding = go.Binding;
  export const ThemeBinding = go.ThemeBinding;
  export const Transaction = go.Transaction;
  export const UndoManager = go.UndoManager;
  export const CommandHandler = go.CommandHandler;
  export const Tool = go.Tool;
  export const DraggingTool = go.DraggingTool;
  export const DraggingInfo = go.DraggingInfo;
  export const DraggingOptions = go.DraggingOptions;
  export const LinkingBaseTool = go.LinkingBaseTool;
  export const LinkingTool = go.LinkingTool;
  export const RelinkingTool = go.RelinkingTool;
  export const LinkReshapingTool = go.LinkReshapingTool;
  export const ResizingTool = go.ResizingTool;
  export const RotatingTool = go.RotatingTool;
  export const ClickSelectingTool = go.ClickSelectingTool;
  export const ActionTool = go.ActionTool;
  export const ClickCreatingTool = go.ClickCreatingTool;
  export const HTMLInfo = go.HTMLInfo;
  export const ContextMenuTool = go.ContextMenuTool;
  export const DragSelectingTool = go.DragSelectingTool;
  export const PanningTool = go.PanningTool;
  export const TextEditingTool = go.TextEditingTool;
  export const ToolManager = go.ToolManager;
  export const Animation = go.Animation;
  export const AnimationManager = go.AnimationManager;
  export const AnimationTrigger = go.AnimationTrigger;
  export const Layer = go.Layer;
  export const Diagram = go.Diagram;
  export const Palette = go.Palette;
  export const Overview = go.Overview;
  export const Brush = go.Brush;
  export const GraphObject = go.GraphObject;
  export const Panel = go.Panel;
  export const RowColumnDefinition = go.RowColumnDefinition;
  export const Shape = go.Shape;
  export const TextBlock = go.TextBlock;
  export const Picture = go.Picture;
  export const Part = go.Part;
  export const Adornment = go.Adornment;
  export const Node = go.Node;
  export const Link = go.Link;
  export const Placeholder = go.Placeholder;
  export const Layout = go.Layout;
  export const LayoutNetwork = go.LayoutNetwork;
  export const LayoutVertex = go.LayoutVertex;
  export const LayoutEdge = go.LayoutEdge;
  export const GridLayout = go.GridLayout;
  export const PanelLayout = go.PanelLayout;
  export const CircularLayout = go.CircularLayout;
  export const CircularNetwork = go.CircularNetwork;
  export const CircularVertex = go.CircularVertex;
  export const CircularEdge = go.CircularEdge;
  export const ForceDirectedLayout = go.ForceDirectedLayout;
  export const ForceDirectedNetwork = go.ForceDirectedNetwork;
  export const ForceDirectedVertex = go.ForceDirectedVertex;
  export const ForceDirectedEdge = go.ForceDirectedEdge;
  export const LayeredDigraphLayout = go.LayeredDigraphLayout;
  export const LayeredDigraphNetwork = go.LayeredDigraphNetwork;
  export const LayeredDigraphVertex = go.LayeredDigraphVertex;
  export const LayeredDigraphEdge = go.LayeredDigraphEdge;
  export const TreeLayout = go.TreeLayout;
  export const TreeNetwork = go.TreeNetwork;
  export const TreeVertex = go.TreeVertex;
  export const TreeEdge = go.TreeEdge;
  export const Themes = go.Themes;
  export const ThemeManager = go.ThemeManager;
  export const Router = go.Router;
  export const version = go.version;

  export const AnimationStyle = go.AnimationStyle;
  export const AutoScale = go.AutoScale;
  export const Curve = go.Curve;
  export const CycleMode = go.CycleMode;
  export const Flip = go.Flip;
  export const ImageStretch = go.ImageStretch;
  export const LayoutConditions = go.LayoutConditions;
  export const LinkAdjusting = go.LinkAdjusting;
  export const Orientation = go.Orientation;
  export const PortSpreading = go.PortSpreading;
  export const Routing = go.Routing;
  export const ScrollMode = go.ScrollMode;
  export const CollapsePolicy = go.CollapsePolicy;
  export const Sizing = go.Sizing;
  export const TriggerStart = go.TriggerStart;
  export const Stretch = go.Stretch;
  export const TextFormat = go.TextFormat;
  export const TextOverflow = go.TextOverflow;
  export const ViewboxStretch = go.ViewboxStretch;
  export const Wrap = go.Wrap;
  export const BrushType = go.BrushType;
  export const ColorSpace = go.ColorSpace;
  export const GeometryStretch = go.GeometryStretch;
  export const GeometryType = go.GeometryType;
  export const SegmentType = go.SegmentType;
  export const BindingMode = go.BindingMode;
  export const ChangeType = go.ChangeType;
  export const CircularArrangement = go.CircularArrangement;
  export const CircularDirection = go.CircularDirection;
  export const CircularNodeDiameterFormula = go.CircularNodeDiameterFormula;
  export const CircularSorting = go.CircularSorting;
  export const GridAlignment = go.GridAlignment;
  export const GridArrangement = go.GridArrangement;
  export const GridSorting = go.GridSorting;
  export const LayeredDigraphAggressive = go.LayeredDigraphAggressive;
  export const LayeredDigraphAlign = go.LayeredDigraphAlign;
  export const LayeredDigraphCycleRemove = go.LayeredDigraphCycleRemove;
  export const LayeredDigraphInit = go.LayeredDigraphInit;
  export const LayeredDigraphLayering = go.LayeredDigraphLayering;
  export const LayeredDigraphPack = go.LayeredDigraphPack;
  export const TreeAlignment = go.TreeAlignment;
  export const TreeArrangement = go.TreeArrangement;
  export const TreeCompaction = go.TreeCompaction;
  export const TreeLayerStyle = go.TreeLayerStyle;
  export const TreePath = go.TreePath;
  export const TreeSorting = go.TreeSorting;
  export const TreeStyle = go.TreeStyle;
  export const GestureMode = go.GestureMode;
  export const LinkingDirection = go.LinkingDirection;
  export const ReshapingBehavior = go.ReshapingBehavior;
  export const TextEditingAccept = go.TextEditingAccept;
  export const TextEditingStarting = go.TextEditingStarting;
  export const TextEditingState = go.TextEditingState;
  export const WheelMode = go.WheelMode;
  export const Figures = go.Figures;
  export const Arrowheads = go.Arrowheads;
  export const PanelTypes = go.PanelTypes;
  export const ToolNames = go.ToolNames;
  export const Builders = go.Builders;
  export const LayerNames = go.LayerNames;
  