/* eslint-disable */ /* * GoJS v2.0.15 JavaScript Library for HTML Diagrams * Northwoods Software, https://www.nwoods.com/ * GoJS and Northwoods Software are registered trademarks of Northwoods Software Corporation. * Copyright (C) 1998-2019 by Northwoods Software Corporation. All Rights Reserved. * THIS SOFTWARE IS LICENSED. THE LICENSE AGREEMENT IS AT: https://gojs.net/2.0.15/license.html. */ (function () { var t; function aa(a) { var b = 0; return function () { return b < a.length ? { done: !1, value: a[b++] } : { done: !0 }; }; } function ba(a) { var b = 'undefined' != typeof Symbol && Symbol.iterator && a[Symbol.iterator]; return b ? b.call(a) : { next: aa(a) }; } function ca(a) { for (var b, c = []; !(b = a.next()).done; ) c.push(b.value); return c; } var ea = 'function' == typeof Object.create ? Object.create : function (a) { function b() {} b.prototype = a; return new b(); }, ia; if ('function' == typeof Object.setPrototypeOf) ia = Object.setPrototypeOf; else { var ka; a: { var la = { a: !0 }, ma = {}; try { ma.__proto__ = la; ka = ma.a; break a; } catch (a) {} ka = !1; } ia = ka ? function (a, b) { a.__proto__ = b; if (a.__proto__ !== b) throw new TypeError(a + ' is not extensible'); return a; } : null; } var na = ia; function oa(a, b) { a.prototype = ea(b.prototype); a.prototype.constructor = a; if (na) na(a, b); else for (var c in b) if ('prototype' != c) if (Object.defineProperties) { var d = Object.getOwnPropertyDescriptor(b, c); d && Object.defineProperty(a, c, d); } else a[c] = b[c]; a.jA = b.prototype; } var pa = 'undefined' != typeof window && window === self ? self : 'undefined' != typeof global && null != global ? global : self, qa = 'function' == typeof Object.defineProperties ? Object.defineProperty : function (a, b, c) { a != Array.prototype && a != Object.prototype && (a[b] = c.value); }; function ra(a) { if (a) { for (var b = pa, c = ['Array', 'prototype', 'fill'], d = 0; d < c.length - 1; d++) { var e = c[d]; e in b || (b[e] = {}); b = b[e]; } c = c[c.length - 1]; d = b[c]; a = a(d); a != d && null != a && qa(b, c, { writable: !0, value: a }); } } ra(function (a) { return a ? a : function (a, c, d) { var b = this.length || 0; 0 > c && (c = Math.max(0, b + c)); if (null == d || d > b) d = b; d = Number(d); 0 > d && (d = Math.max(0, b + d)); for (c = Number(c || 0); c < d; c++) this[c] = a; return this; }; }); var w = ('object' === typeof self && self.self === self && self) || ('object' === typeof global && global.global === global && global) || ('object' === typeof window && window.window === window && window) || {}; void 0 === w.requestAnimationFrame && (w.requestAnimationFrame = w.setImmediate); function sa() {} function ta(a, b) { var c = -1; return function () { var d = this, e = arguments; -1 !== c && w.clearTimeout(c); c = ua(function () { c = -1; a.apply(d, e); }, b); }; } function ua(a, b) { return w.setTimeout(a, b); } function va(a) { return w.document.createElement(a); } function A(a) { throw Error(a); } function wa(a, b) { a = 'The object is frozen, so its properties cannot be set: ' + a.toString(); void 0 !== b && (a += ' to value: ' + b); A(a); } function ya(a, b, c, d) { c = null === c ? '*' : 'string' === typeof c ? c : 'function' === typeof c && 'string' === typeof c.className ? c.className : ''; void 0 !== d && (c += '.' + d); A(c + ' is not in the range ' + b + ': ' + a); } function za(a) { w.console && w.console.log(a); } function Aa() { w.console && w.console.log( 'Warning: List/Map/Set constructors no longer take an argument that enforces type.Instead they take an optional collection of Values to add to the collection. See 2.0 changelog for details.', ); } function Ca(a) { return 'object' === typeof a && null !== a; } function Ea(a) { return ( Array.isArray(a) || (w.NodeList && a instanceof w.NodeList) || (w.HTMLCollection && a instanceof w.HTMLCollection) ); } function Ga(a) { return Array.prototype.slice.call(a); } function Ia(a, b, c) { Array.isArray(a) ? b >= a.length ? a.push(c) : a.splice(b, 0, c) : A('Cannot insert an object into an HTMLCollection or NodeList: ' + c + ' at ' + b); } function Ja(a, b) { Array.isArray(a) ? b >= a.length ? a.pop() : a.splice(b, 1) : A('Cannot remove an object from an HTMLCollection or NodeList at ' + b); } function Ka() { var a = La.pop(); return void 0 === a ? [] : a; } function Oa(a) { a.length = 0; La.push(a); } function Pa(a) { if ('function' === typeof a) { if (a.className) return a.className; if (a.name) return a.name; var b = a.toString(); b = b.substring(9, b.indexOf('(')).trim(); if ('' !== b) return (a._className = b); } else if (Ca(a) && a.constructor) return Pa(a.constructor); return typeof a; } function Qa(a) { var b = a; Ca(a) && (a.text ? (b = a.text) : a.name ? (b = a.name) : void 0 !== a.key ? (b = a.key) : void 0 !== a.id ? (b = a.id) : a.constructor === Object && (a.Text ? (b = a.Text) : a.Name ? (b = a.Name) : void 0 !== a.Key ? (b = a.Key) : void 0 !== a.Id ? (b = a.Id) : void 0 !== a.ID && (b = a.ID))); return void 0 === b ? 'undefined' : null === b ? 'null' : b.toString(); } function Sa(a, b) { if (a.hasOwnProperty(b)) return !0; for (a = Object.getPrototypeOf(a); a && a !== Function; ) { if (a.hasOwnProperty(b)) return !0; var c = a.aA; if (c && c[b]) return !0; a = Object.getPrototypeOf(a); } return !1; } function Ta(a, b, c) { Object.defineProperty(Ua.prototype, a, { get: b, set: c }); } function Va() { var a = Wa; if (0 === a.length) for (var b = w.document.getElementsByTagName('canvas'), c = b.length, d = 0; d < c; d++) { var e = b[d]; e.parentElement && e.parentElement.C && a.push(e.parentElement.C); } return a; } function Za(a) { for (var b = [], c = 0; 256 > c; c++) b['0123456789abcdef'.charAt(c >> 4) + '0123456789abcdef'.charAt(c & 15)] = String.fromCharCode(c); a.length % 2 && (a = '0' + a); c = []; for (var d = 0, e = 0; e < a.length; e += 2) c[d++] = b[a.substr(e, 2)]; a = c.join(''); a = '' === a ? '0' : a; b = []; for (c = 0; 256 > c; c++) b[c] = c; for (c = d = 0; 256 > c; c++) (d = (d + b[c] + 119) % 256), (e = b[c]), (b[c] = b[d]), (b[d] = e); d = c = 0; for (var f = '', g = 0; g < a.length; g++) (c = (c + 1) % 256), (d = (d + b[c]) % 256), (e = b[c]), (b[c] = b[d]), (b[d] = e), (f += String.fromCharCode(a.charCodeAt(g) ^ b[(b[c] + b[d]) % 256])); return f; } var bb = void 0 !== w.navigator && 0 < w.navigator.userAgent.indexOf('MSIE 9.0'), cb = void 0 !== w.navigator && 0 < w.navigator.userAgent.indexOf('MSIE 10.0'), db = void 0 !== w.navigator && 0 < w.navigator.userAgent.indexOf('Trident/7'), gb = void 0 !== w.navigator && 0 < w.navigator.userAgent.indexOf('Edge/'), ib = void 0 !== w.navigator && void 0 !== w.navigator.platform && 0 <= w.navigator.platform.toUpperCase().indexOf('MAC'), mb = void 0 !== w.navigator && void 0 !== w.navigator.platform && null !== w.navigator.platform.match(/(iPhone|iPod|iPad)/i), La = []; Object.freeze([]); var Wa = []; sa.className = 'Util'; sa.Dx = '32ab5ff3b26f42dc0ed90f224d2913b5'; sa.adym = 'gojs.net'; sa.vfo = '28e646fdb263'; sa.className = 'Util'; function D(a, b, c) { nb(this); this.l = a; this.Ua = b; this.u = c; } D.prototype.toString = function () { return 'EnumValue.' + this.Ua; }; function qb(a, b) { return void 0 === b || null === b || '' === b ? null : a[b]; } pa.Object.defineProperties(D.prototype, { classType: { get: function () { return this.l; }, }, name: { get: function () { return this.Ua; }, }, value: { get: function () { return this.u; }, }, }); D.className = 'EnumValue'; function sb() { this.lw = []; } sb.prototype.toString = function () { return this.lw.join(''); }; sb.prototype.add = function (a) { '' !== a && this.lw.push(a); }; sb.className = 'StringBuilder'; function tb() {} tb.className = 'PropertyCollection'; function ub() {} ub.prototype.reset = function () {}; ub.prototype.next = function () { return !1; }; ub.prototype.dd = function () { return !1; }; ub.prototype.first = function () { return null; }; ub.prototype.any = function () { return !1; }; ub.prototype.all = function () { return !0; }; ub.prototype.each = function () { return this; }; ub.prototype.map = function () { return this; }; ub.prototype.filter = function () { return this; }; ub.prototype.xd = function () {}; ub.prototype.toString = function () { return 'EmptyIterator'; }; pa.Object.defineProperties(ub.prototype, { iterator: { get: function () { return this; }, }, count: { get: function () { return 0; }, }, }); ub.prototype.first = ub.prototype.first; ub.prototype.hasNext = ub.prototype.dd; ub.prototype.next = ub.prototype.next; ub.prototype.reset = ub.prototype.reset; var xb = null; ub.className = 'EmptyIterator'; xb = new ub(); function yb(a) { this.key = -1; this.value = a; } yb.prototype.reset = function () { this.key = -1; }; yb.prototype.next = function () { return -1 === this.key ? ((this.key = 0), !0) : !1; }; yb.prototype.dd = function () { return this.next(); }; yb.prototype.first = function () { this.key = 0; return this.value; }; yb.prototype.any = function (a) { this.key = -1; return a(this.value); }; yb.prototype.all = function (a) { this.key = -1; return a(this.value); }; yb.prototype.each = function (a) { this.key = -1; a(this.value); return this; }; yb.prototype.map = function (a) { return new yb(a(this.value)); }; yb.prototype.filter = function (a) { return a(this.value) ? new yb(this.value) : xb; }; yb.prototype.xd = function () { this.value = null; }; yb.prototype.toString = function () { return 'SingletonIterator(' + this.value + ')'; }; pa.Object.defineProperties(yb.prototype, { iterator: { get: function () { return this; }, }, count: { get: function () { return 1; }, }, }); yb.prototype.first = yb.prototype.first; yb.prototype.hasNext = yb.prototype.dd; yb.prototype.next = yb.prototype.next; yb.prototype.reset = yb.prototype.reset; yb.className = 'SingletonIterator'; function zb(a) { this.pb = a; this.Ye = null; a.Ja = null; this.la = a.Ba; this.Sa = -1; } zb.prototype.reset = function () { var a = this.pb; a.Ja = null; this.la = a.Ba; this.Sa = -1; }; zb.prototype.next = function () { var a = this.pb; if (a.Ba !== this.la && 0 > this.key) return !1; a = a.j; var b = a.length, c = ++this.Sa, d = this.Ye; if (null !== d) for (; c < b; ) { var e = a[c]; if (d(e)) return (this.key = this.Sa = c), (this.value = e), !0; c++; } else { if (c < b) return (this.key = c), (this.value = a[c]), !0; this.xd(); } return !1; }; zb.prototype.dd = function () { return this.next(); }; zb.prototype.first = function () { var a = this.pb; this.la = a.Ba; this.Sa = 0; a = a.j; var b = a.length, c = this.Ye; if (null !== c) { for (var d = 0; d < b; ) { var e = a[d]; if (c(e)) return (this.key = this.Sa = d), (this.value = e); d++; } return null; } return 0 < b ? ((a = a[0]), (this.key = 0), (this.value = a)) : null; }; zb.prototype.any = function (a) { var b = this.pb; b.Ja = null; this.Sa = -1; b = b.j; for (var c = b.length, d = this.Ye, e = 0; e < c; e++) { var f = b[e]; if ((null === d || d(f)) && a(f)) return !0; } return !1; }; zb.prototype.all = function (a) { var b = this.pb; b.Ja = null; this.Sa = -1; b = b.j; for (var c = b.length, d = this.Ye, e = 0; e < c; e++) { var f = b[e]; if ((null === d || d(f)) && !a(f)) return !1; } return !0; }; zb.prototype.each = function (a) { var b = this.pb; b.Ja = null; this.Sa = -1; b = b.j; for (var c = b.length, d = this.Ye, e = 0; e < c; e++) { var f = b[e]; (null === d || d(f)) && a(f); } return this; }; zb.prototype.map = function (a) { var b = this.pb; b.Ja = null; this.Sa = -1; var c = []; b = b.j; for (var d = b.length, e = this.Ye, f = 0; f < d; f++) { var g = b[f]; (null === e || e(g)) && c.push(a(g)); } a = new E(); a.j = c; a.kb(); return a.iterator; }; zb.prototype.filter = function (a) { var b = this.pb; b.Ja = null; this.Sa = -1; var c = []; b = b.j; for (var d = b.length, e = this.Ye, f = 0; f < d; f++) { var g = b[f]; (null === e || e(g)) && a(g) && c.push(g); } a = new E(); a.j = c; a.kb(); return a.iterator; }; zb.prototype.xd = function () { this.key = -1; this.value = null; this.la = -1; this.Ye = null; this.pb.Ja = this; }; zb.prototype.toString = function () { return 'ListIterator@' + this.Sa + '/' + this.pb.count; }; pa.Object.defineProperties(zb.prototype, { iterator: { get: function () { return this; }, }, predicate: { get: function () { return this.Ye; }, set: function (a) { this.Ye = a; }, }, count: { get: function () { var a = this.Ye; if (null !== a) { for (var b = 0, c = this.pb.j, d = c.length, e = 0; e < d; e++) a(c[e]) && b++; return b; } return this.pb.j.length; }, }, }); zb.prototype.first = zb.prototype.first; zb.prototype.hasNext = zb.prototype.dd; zb.prototype.next = zb.prototype.next; zb.prototype.reset = zb.prototype.reset; zb.className = 'ListIterator'; function Ab(a) { this.pb = a; a.Sg = null; this.la = a.Ba; this.Sa = a.j.length; } Ab.prototype.reset = function () { var a = this.pb; a.Sg = null; this.la = a.Ba; this.Sa = a.j.length; }; Ab.prototype.next = function () { var a = this.pb; if (a.Ba !== this.la && 0 > this.key) return !1; var b = --this.Sa; if (0 <= b) return (this.key = b), (this.value = a.j[b]), !0; this.xd(); return !1; }; Ab.prototype.dd = function () { return this.next(); }; Ab.prototype.first = function () { var a = this.pb; this.la = a.Ba; var b = a.j; this.Sa = a = b.length - 1; return 0 <= a ? ((b = b[a]), (this.key = a), (this.value = b)) : null; }; Ab.prototype.any = function (a) { var b = this.pb; b.Sg = null; b = b.j; var c = b.length; this.Sa = c; for (--c; 0 <= c; c--) if (a(b[c])) return !0; return !1; }; Ab.prototype.all = function (a) { var b = this.pb; b.Sg = null; b = b.j; var c = b.length; this.Sa = c; for (--c; 0 <= c; c--) if (!a(b[c])) return !1; return !0; }; Ab.prototype.each = function (a) { var b = this.pb; b.Sg = null; b = b.j; var c = b.length; this.Sa = c; for (--c; 0 <= c; c--) a(b[c]); return this; }; Ab.prototype.map = function (a) { var b = this.pb; b.Sg = null; var c = []; b = b.j; var d = b.length; this.Sa = d; for (--d; 0 <= d; d--) c.push(a(b[d])); a = new E(); a.j = c; a.kb(); return a.iterator; }; Ab.prototype.filter = function (a) { var b = this.pb; b.Sg = null; var c = []; b = b.j; var d = b.length; this.Sa = d; for (--d; 0 <= d; d--) { var e = b[d]; a(e) && c.push(e); } a = new E(); a.j = c; a.kb(); return a.iterator; }; Ab.prototype.xd = function () { this.key = -1; this.value = null; this.la = -1; this.pb.Sg = this; }; Ab.prototype.toString = function () { return 'ListIteratorBackwards(' + this.Sa + '/' + this.pb.count + ')'; }; pa.Object.defineProperties(Ab.prototype, { iterator: { get: function () { return this; }, }, count: { get: function () { return this.pb.j.length; }, }, }); Ab.prototype.first = Ab.prototype.first; Ab.prototype.hasNext = Ab.prototype.dd; Ab.prototype.next = Ab.prototype.next; Ab.prototype.reset = Ab.prototype.reset; Ab.className = 'ListIteratorBackwards'; function E(a) { nb(this); this.v = !1; this.j = []; this.Ba = 0; this.Sg = this.Ja = null; void 0 !== a && ('function' === typeof a || 'string' === typeof a ? Aa() : this.addAll(a)); } t = E.prototype; t.kb = function () { var a = this.Ba; a++; 999999999 < a && (a = 0); this.Ba = a; }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { this.v = !1; return this; }; t.toString = function () { return 'List()#' + Bb(this); }; t.add = function (a) { if (null === a) return this; this.v && wa(this, a); this.j.push(a); this.kb(); return this; }; t.push = function (a) { this.add(a); }; t.addAll = function (a) { if (null === a) return this; this.v && wa(this); var b = this.j; if (Ea(a)) for (var c = a.length, d = 0; d < c; d++) b.push(a[d]); else for (a = a.iterator; a.next(); ) b.push(a.value); this.kb(); return this; }; t.clear = function () { this.v && wa(this); this.j.length = 0; this.kb(); }; t.contains = function (a) { return null === a ? !1 : -1 !== this.j.indexOf(a); }; t.has = function (a) { return this.contains(a); }; t.indexOf = function (a) { return null === a ? -1 : this.j.indexOf(a); }; t.N = function (a) { var b = this.j; (0 > a || a >= b.length) && ya(a, '0 <= i < length', E, 'elt:i'); return b[a]; }; t.get = function (a) { return this.N(a); }; t.gd = function (a, b) { var c = this.j; (0 > a || a >= c.length) && ya(a, '0 <= i < length', E, 'setElt:i'); this.v && wa(this, a); c[a] = b; }; t.set = function (a, b) { this.gd(a, b); }; t.first = function () { var a = this.j; return 0 === a.length ? null : a[0]; }; t.Sb = function () { var a = this.j, b = a.length; return 0 < b ? a[b - 1] : null; }; t.pop = function () { this.v && wa(this); var a = this.j; return 0 < a.length ? a.pop() : null; }; E.prototype.any = function (a) { for (var b = this.j, c = b.length, d = 0; d < c; d++) if (a(b[d])) return !0; return !1; }; E.prototype.all = function (a) { for (var b = this.j, c = b.length, d = 0; d < c; d++) if (!a(b[d])) return !1; return !0; }; E.prototype.each = function (a) { for (var b = this.j, c = b.length, d = 0; d < c; d++) a(b[d]); return this; }; E.prototype.map = function (a) { for (var b = new E(), c = [], d = this.j, e = d.length, f = 0; f < e; f++) c.push(a(d[f])); b.j = c; b.kb(); return b; }; E.prototype.filter = function (a) { for (var b = new E(), c = [], d = this.j, e = d.length, f = 0; f < e; f++) { var g = d[f]; a(g) && c.push(g); } b.j = c; b.kb(); return b; }; t = E.prototype; t.Ib = function (a, b) { 0 > a && ya(a, '>= 0', E, 'insertAt:i'); this.v && wa(this, a); var c = this.j; a >= c.length ? c.push(b) : c.splice(a, 0, b); this.kb(); }; t.remove = function (a) { if (null === a) return !1; this.v && wa(this, a); var b = this.j; a = b.indexOf(a); if (-1 === a) return !1; a === b.length - 1 ? b.pop() : b.splice(a, 1); this.kb(); return !0; }; t.delete = function (a) { return this.remove(a); }; t.mb = function (a) { var b = this.j; (0 > a || a >= b.length) && ya(a, '0 <= i < length', E, 'removeAt:i'); this.v && wa(this, a); a === b.length - 1 ? b.pop() : b.splice(a, 1); this.kb(); }; t.removeRange = function (a, b) { var c = this.j, d = c.length; if (0 > a) a = 0; else if (a >= d) return this; if (0 > b) return this; b >= d && (b = d - 1); if (a > b) return this; this.v && wa(this); for (var e = a, f = b + 1; f < d; ) c[e++] = c[f++]; c.length = d - (b - a + 1); this.kb(); return this; }; E.prototype.copy = function () { var a = new E(), b = this.j; 0 < b.length && (a.j = Array.prototype.slice.call(b)); return a; }; t = E.prototype; t.Na = function () { for (var a = this.j, b = this.count, c = Array(b), d = 0; d < b; d++) c[d] = a[d]; return c; }; t.Rv = function () { for (var a = new F(), b = this.j, c = this.count, d = 0; d < c; d++) a.add(b[d]); return a; }; t.sort = function (a) { this.v && wa(this); this.j.sort(a); this.kb(); return this; }; t.Wi = function (a, b, c) { var d = this.j, e = d.length; void 0 === b && (b = 0); void 0 === c && (c = e); this.v && wa(this); var f = c - b; if (1 >= f) return this; (0 > b || b >= e - 1) && ya(b, '0 <= from < length', E, 'sortRange:from'); if (2 === f) return ( (c = d[b]), (e = d[b + 1]), 0 < a(c, e) && ((d[b] = e), (d[b + 1] = c), this.kb()), this ); if (0 === b) if (c >= e) d.sort(a); else for (b = d.slice(0, c), b.sort(a), a = 0; a < c; a++) d[a] = b[a]; else if (c >= e) for (c = d.slice(b), c.sort(a), a = b; a < e; a++) d[a] = c[a - b]; else for (e = d.slice(b, c), e.sort(a), a = b; a < c; a++) d[a] = e[a - b]; this.kb(); return this; }; t.reverse = function () { this.v && wa(this); this.j.reverse(); this.kb(); return this; }; pa.Object.defineProperties(E.prototype, { _dataArray: { get: function () { return this.j; }, }, count: { get: function () { return this.j.length; }, }, size: { get: function () { return this.j.length; }, }, length: { get: function () { return this.j.length; }, }, iterator: { get: function () { if (0 >= this.j.length) return xb; var a = this.Ja; return null !== a ? (a.reset(), a) : new zb(this); }, }, iteratorBackwards: { get: function () { if (0 >= this.j.length) return xb; var a = this.Sg; return null !== a ? (a.reset(), a) : new Ab(this); }, }, }); E.prototype.reverse = E.prototype.reverse; E.prototype.sortRange = E.prototype.Wi; E.prototype.sort = E.prototype.sort; E.prototype.toSet = E.prototype.Rv; E.prototype.toArray = E.prototype.Na; E.prototype.removeRange = E.prototype.removeRange; E.prototype.removeAt = E.prototype.mb; E.prototype['delete'] = E.prototype.delete; E.prototype.remove = E.prototype.remove; E.prototype.insertAt = E.prototype.Ib; E.prototype.pop = E.prototype.pop; E.prototype.last = E.prototype.Sb; E.prototype.first = E.prototype.first; E.prototype.set = E.prototype.set; E.prototype.setElt = E.prototype.gd; E.prototype.get = E.prototype.get; E.prototype.elt = E.prototype.N; E.prototype.indexOf = E.prototype.indexOf; E.prototype.has = E.prototype.has; E.prototype.contains = E.prototype.contains; E.prototype.clear = E.prototype.clear; E.prototype.addAll = E.prototype.addAll; E.prototype.push = E.prototype.push; E.prototype.add = E.prototype.add; E.prototype.thaw = E.prototype.ha; E.prototype.freeze = E.prototype.freeze; E.className = 'List'; function Cb(a) { this.hg = a; a.Ja = null; this.la = a.Ba; this.na = null; } Cb.prototype.reset = function () { var a = this.hg; a.Ja = null; this.la = a.Ba; this.na = null; }; Cb.prototype.next = function () { var a = this.hg; if (a.Ba !== this.la && null === this.key) return !1; var b = this.na; b = null === b ? a.fa : b.oa; if (null !== b) return (this.na = b), (this.value = b.value), (this.key = b.key), !0; this.xd(); return !1; }; Cb.prototype.dd = function () { return this.next(); }; Cb.prototype.first = function () { var a = this.hg; this.la = a.Ba; a = a.fa; if (null !== a) { this.na = a; var b = a.value; this.key = a.key; return (this.value = b); } return null; }; Cb.prototype.any = function (a) { var b = this.hg; this.na = b.Ja = null; for (b = b.fa; null !== b; ) { if (a(b.value)) return !0; b = b.oa; } return !1; }; Cb.prototype.all = function (a) { var b = this.hg; this.na = b.Ja = null; for (b = b.fa; null !== b; ) { if (!a(b.value)) return !1; b = b.oa; } return !0; }; Cb.prototype.each = function (a) { var b = this.hg; this.na = b.Ja = null; for (b = b.fa; null !== b; ) a(b.value), (b = b.oa); return this; }; Cb.prototype.map = function (a) { var b = this.hg; b.Ja = null; var c = new E(); for (b = b.fa; null !== b; ) c.add(a(b.value)), (b = b.oa); return c.iterator; }; Cb.prototype.filter = function (a) { var b = this.hg; b.Ja = null; var c = new E(); for (b = b.fa; null !== b; ) { var d = b.value; a(d) && c.add(d); b = b.oa; } return c.iterator; }; Cb.prototype.xd = function () { this.value = this.key = null; this.la = -1; this.hg.Ja = this; }; Cb.prototype.toString = function () { return null !== this.na ? 'SetIterator@' + this.na.value : 'SetIterator'; }; pa.Object.defineProperties(Cb.prototype, { iterator: { get: function () { return this; }, }, count: { get: function () { return this.hg.Cb; }, }, }); Cb.prototype.first = Cb.prototype.first; Cb.prototype.hasNext = Cb.prototype.dd; Cb.prototype.next = Cb.prototype.next; Cb.prototype.reset = Cb.prototype.reset; Cb.className = 'SetIterator'; function F(a) { nb(this); this.v = !1; this.Db = {}; this.Cb = 0; this.Ja = null; this.Ba = 0; this.Ue = this.fa = null; void 0 !== a && ('function' === typeof a || 'string' === typeof a ? Aa() : this.addAll(a)); } t = F.prototype; t.kb = function () { var a = this.Ba; a++; 999999999 < a && (a = 0); this.Ba = a; }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { this.v = !1; return this; }; t.toString = function () { return 'Set()#' + Bb(this); }; t.add = function (a) { if (null === a) return this; this.v && wa(this, a); var b = a; Ca(a) && (b = Db(a)); void 0 === this.Db[b] && (this.Cb++, (a = new Fb(a, a)), (this.Db[b] = a), (b = this.Ue), null === b ? (this.fa = a) : ((a.wl = b), (b.oa = a)), (this.Ue = a), this.kb()); return this; }; t.addAll = function (a) { if (null === a) return this; this.v && wa(this); if (Ea(a)) for (var b = a.length, c = 0; c < b; c++) this.add(a[c]); else for (a = a.iterator; a.next(); ) this.add(a.value); return this; }; t.contains = function (a) { if (null === a) return !1; var b = a; return Ca(a) && ((b = Bb(a)), void 0 === b) ? !1 : void 0 !== this.Db[b]; }; t.has = function (a) { return this.contains(a); }; t.sy = function (a) { if (null === a) return !0; for (a = a.iterator; a.next(); ) if (!this.contains(a.value)) return !1; return !0; }; t.ty = function (a) { if (null === a) return !0; for (a = a.iterator; a.next(); ) if (this.contains(a.value)) return !0; return !1; }; t.first = function () { var a = this.fa; return null === a ? null : a.value; }; F.prototype.any = function (a) { for (var b = this.fa; null !== b; ) { if (a(b.value)) return !0; b = b.oa; } return !1; }; F.prototype.all = function (a) { for (var b = this.fa; null !== b; ) { if (!a(b.value)) return !1; b = b.oa; } return !0; }; F.prototype.each = function (a) { for (var b = this.fa; null !== b; ) a(b.value), (b = b.oa); return this; }; F.prototype.map = function (a) { for (var b = new F(), c = this.fa; null !== c; ) b.add(a(c.value)), (c = c.oa); return b; }; F.prototype.filter = function (a) { for (var b = new F(), c = this.fa; null !== c; ) { var d = c.value; a(d) && b.add(d); c = c.oa; } return b; }; t = F.prototype; t.remove = function (a) { if (null === a) return !1; this.v && wa(this, a); var b = a; if (Ca(a) && ((b = Bb(a)), void 0 === b)) return !1; a = this.Db[b]; if (void 0 === a) return !1; var c = a.oa, d = a.wl; null !== c && (c.wl = d); null !== d && (d.oa = c); this.fa === a && (this.fa = c); this.Ue === a && (this.Ue = d); delete this.Db[b]; this.Cb--; this.kb(); return !0; }; t.delete = function (a) { return this.remove(a); }; t.oq = function (a) { if (null === a) return this; this.v && wa(this); if (Ea(a)) for (var b = a.length, c = 0; c < b; c++) this.remove(a[c]); else for (a = a.iterator; a.next(); ) this.remove(a.value); return this; }; t.Oz = function (a) { if (null === a || 0 === this.count) return this; this.v && wa(this); var b = new F(); b.addAll(a); a = []; for (var c = this.iterator; c.next(); ) { var d = c.value; b.contains(d) || a.push(d); } this.oq(a); return this; }; t.clear = function () { this.v && wa(this); this.Db = {}; this.Cb = 0; null !== this.Ja && this.Ja.reset(); this.Ue = this.fa = null; this.kb(); }; F.prototype.copy = function () { var a = new F(), b = this.Db, c; for (c in b) a.add(b[c].value); return a; }; F.prototype.Na = function () { var a = Array(this.Cb), b = this.Db, c = 0, d; for (d in b) (a[c] = b[d].value), c++; return a; }; F.prototype.Qv = function () { var a = new E(), b = this.Db, c; for (c in b) a.add(b[c].value); return a; }; function nb(a) { a.__gohashid = Gb++; } function Db(a) { var b = a.__gohashid; void 0 === b && ((b = Gb++), (a.__gohashid = b)); return b; } function Bb(a) { return a.__gohashid; } pa.Object.defineProperties(F.prototype, { count: { get: function () { return this.Cb; }, }, size: { get: function () { return this.Cb; }, }, iterator: { get: function () { if (0 >= this.Cb) return xb; var a = this.Ja; return null !== a ? (a.reset(), a) : new Cb(this); }, }, }); F.prototype.toList = F.prototype.Qv; F.prototype.toArray = F.prototype.Na; F.prototype.clear = F.prototype.clear; F.prototype.retainAll = F.prototype.Oz; F.prototype.removeAll = F.prototype.oq; F.prototype['delete'] = F.prototype.delete; F.prototype.remove = F.prototype.remove; F.prototype.first = F.prototype.first; F.prototype.containsAny = F.prototype.ty; F.prototype.containsAll = F.prototype.sy; F.prototype.has = F.prototype.has; F.prototype.contains = F.prototype.contains; F.prototype.addAll = F.prototype.addAll; F.prototype.add = F.prototype.add; F.prototype.thaw = F.prototype.ha; F.prototype.freeze = F.prototype.freeze; var Gb = 1; F.className = 'Set'; F.uniqueHash = nb; F.hashIdUnique = Db; F.hashId = Bb; function Hb(a) { this.ja = a; this.la = a.Ba; this.na = null; } Hb.prototype.reset = function () { this.la = this.ja.Ba; this.na = null; }; Hb.prototype.next = function () { var a = this.ja; if (a.Ba !== this.la && null === this.key) return !1; var b = this.na; b = null === b ? a.fa : b.oa; if (null !== b) return (this.na = b), (this.value = this.key = a = b.key), !0; this.xd(); return !1; }; Hb.prototype.dd = function () { return this.next(); }; Hb.prototype.first = function () { var a = this.ja; this.la = a.Ba; a = a.fa; return null !== a ? ((this.na = a), (this.value = this.key = a = a.key)) : null; }; Hb.prototype.any = function (a) { var b = this.ja; this.na = null; for (b = b.fa; null !== b; ) { if (a(b.key)) return !0; b = b.oa; } return !1; }; Hb.prototype.all = function (a) { var b = this.ja; this.na = null; for (b = b.fa; null !== b; ) { if (!a(b.key)) return !1; b = b.oa; } return !0; }; Hb.prototype.each = function (a) { var b = this.ja; this.na = null; for (b = b.fa; null !== b; ) a(b.key), (b = b.oa); return this; }; Hb.prototype.map = function (a) { var b = this.ja; this.na = null; var c = new E(); for (b = b.fa; null !== b; ) c.add(a(b.key)), (b = b.oa); return c.iterator; }; Hb.prototype.filter = function (a) { var b = this.ja; this.na = null; var c = new E(); for (b = b.fa; null !== b; ) { var d = b.key; a(d) && c.add(d); b = b.oa; } return c.iterator; }; Hb.prototype.xd = function () { this.value = this.key = null; this.la = -1; }; Hb.prototype.toString = function () { return null !== this.na ? 'MapKeySetIterator@' + this.na.value : 'MapKeySetIterator'; }; pa.Object.defineProperties(Hb.prototype, { iterator: { get: function () { return this; }, }, count: { get: function () { return this.ja.Cb; }, }, }); Hb.prototype.first = Hb.prototype.first; Hb.prototype.hasNext = Hb.prototype.dd; Hb.prototype.next = Hb.prototype.next; Hb.prototype.reset = Hb.prototype.reset; Hb.className = 'MapKeySetIterator'; function Ib(a) { F.call(this); nb(this); this.v = !0; this.ja = a; } oa(Ib, F); t = Ib.prototype; t.freeze = function () { return this; }; t.ha = function () { return this; }; t.toString = function () { return 'MapKeySet(' + this.ja.toString() + ')'; }; t.add = function () { A('This Set is read-only: ' + this.toString()); return this; }; t.contains = function (a) { return this.ja.contains(a); }; t.has = function (a) { return this.contains(a); }; t.remove = function () { A('This Set is read-only: ' + this.toString()); return !1; }; t.delete = function (a) { return this.remove(a); }; t.clear = function () { A('This Set is read-only: ' + this.toString()); }; t.first = function () { var a = this.ja.fa; return null !== a ? a.key : null; }; Ib.prototype.any = function (a) { for (var b = this.ja.fa; null !== b; ) { if (a(b.key)) return !0; b = b.oa; } return !1; }; Ib.prototype.all = function (a) { for (var b = this.ja.fa; null !== b; ) { if (!a(b.key)) return !1; b = b.oa; } return !0; }; Ib.prototype.each = function (a) { for (var b = this.ja.fa; null !== b; ) a(b.key), (b = b.oa); return this; }; Ib.prototype.map = function (a) { for (var b = new F(), c = this.ja.fa; null !== c; ) b.add(a(c.key)), (c = c.oa); return b; }; Ib.prototype.filter = function (a) { for (var b = new F(), c = this.ja.fa; null !== c; ) { var d = c.key; a(d) && b.add(d); c = c.oa; } return b; }; Ib.prototype.copy = function () { return new Ib(this.ja); }; Ib.prototype.Rv = function () { var a = new F(), b = this.ja.Db, c; for (c in b) a.add(b[c].key); return a; }; Ib.prototype.Na = function () { var a = this.ja.Db, b = Array(this.ja.Cb), c = 0, d; for (d in a) (b[c] = a[d].key), c++; return b; }; Ib.prototype.Qv = function () { var a = new E(), b = this.ja.Db, c; for (c in b) a.add(b[c].key); return a; }; pa.Object.defineProperties(Ib.prototype, { count: { get: function () { return this.ja.Cb; }, }, size: { get: function () { return this.ja.Cb; }, }, iterator: { get: function () { return 0 >= this.ja.Cb ? xb : new Hb(this.ja); }, }, }); Ib.prototype.toList = Ib.prototype.Qv; Ib.prototype.toArray = Ib.prototype.Na; Ib.prototype.toSet = Ib.prototype.Rv; Ib.prototype.first = Ib.prototype.first; Ib.prototype.clear = Ib.prototype.clear; Ib.prototype['delete'] = Ib.prototype.delete; Ib.prototype.remove = Ib.prototype.remove; Ib.prototype.has = Ib.prototype.has; Ib.prototype.contains = Ib.prototype.contains; Ib.prototype.add = Ib.prototype.add; Ib.prototype.thaw = Ib.prototype.ha; Ib.prototype.freeze = Ib.prototype.freeze; Ib.className = 'MapKeySet'; function Jb(a) { this.ja = a; a.Te = null; this.la = a.Ba; this.na = null; } Jb.prototype.reset = function () { var a = this.ja; a.Te = null; this.la = a.Ba; this.na = null; }; Jb.prototype.next = function () { var a = this.ja; if (a.Ba !== this.la && null === this.key) return !1; var b = this.na; b = null === b ? a.fa : b.oa; if (null !== b) return (this.na = b), (this.value = b.value), (this.key = b.key), !0; this.xd(); return !1; }; Jb.prototype.dd = function () { return this.next(); }; Jb.prototype.first = function () { var a = this.ja; this.la = a.Ba; a = a.fa; if (null !== a) { this.na = a; var b = a.value; this.key = a.key; return (this.value = b); } return null; }; Jb.prototype.any = function (a) { var b = this.ja; this.na = b.Te = null; for (b = b.fa; null !== b; ) { if (a(b.value)) return !0; b = b.oa; } return !1; }; Jb.prototype.all = function (a) { var b = this.ja; this.na = b.Te = null; for (b = b.fa; null !== b; ) { if (!a(b.value)) return !1; b = b.oa; } return !0; }; Jb.prototype.each = function (a) { var b = this.ja; this.na = b.Te = null; for (b = b.fa; null !== b; ) a(b.value), (b = b.oa); return this; }; Jb.prototype.map = function (a) { var b = this.ja; this.na = b.Te = null; var c = new E(); for (b = b.fa; null !== b; ) c.add(a(b.value)), (b = b.oa); return c.iterator; }; Jb.prototype.filter = function (a) { var b = this.ja; this.na = b.Te = null; var c = new E(); for (b = b.fa; null !== b; ) { var d = b.value; a(d) && c.add(d); b = b.oa; } return c.iterator; }; Jb.prototype.xd = function () { this.value = this.key = null; this.la = -1; this.ja.Te = this; }; Jb.prototype.toString = function () { return null !== this.na ? 'MapValueSetIterator@' + this.na.value : 'MapValueSetIterator'; }; pa.Object.defineProperties(Jb.prototype, { iterator: { get: function () { return this; }, }, count: { get: function () { return this.ja.Cb; }, }, }); Jb.prototype.first = Jb.prototype.first; Jb.prototype.hasNext = Jb.prototype.dd; Jb.prototype.next = Jb.prototype.next; Jb.prototype.reset = Jb.prototype.reset; Jb.className = 'MapValueSetIterator'; function Fb(a, b) { this.key = a; this.value = b; this.wl = this.oa = null; } Fb.prototype.toString = function () { return '{' + this.key + ':' + this.value + '}'; }; Fb.className = 'KeyValuePair'; function Kb(a) { this.ja = a; a.Ja = null; this.la = a.Ba; this.na = null; } Kb.prototype.reset = function () { var a = this.ja; a.Ja = null; this.la = a.Ba; this.na = null; }; Kb.prototype.next = function () { var a = this.ja; if (a.Ba !== this.la && null === this.key) return !1; var b = this.na; b = null === b ? a.fa : b.oa; if (null !== b) return (this.na = b), (this.key = b.key), (this.value = b.value), !0; this.xd(); return !1; }; Kb.prototype.dd = function () { return this.next(); }; Kb.prototype.first = function () { var a = this.ja; this.la = a.Ba; a = a.fa; return null !== a ? ((this.na = a), (this.key = a.key), (this.value = a.value), a) : null; }; Kb.prototype.any = function (a) { var b = this.ja; this.na = b.Ja = null; for (b = b.fa; null !== b; ) { if (a(b)) return !0; b = b.oa; } return !1; }; Kb.prototype.all = function (a) { var b = this.ja; this.na = b.Ja = null; for (b = b.fa; null !== b; ) { if (!a(b)) return !1; b = b.oa; } return !0; }; Kb.prototype.each = function (a) { var b = this.ja; this.na = b.Ja = null; for (b = b.fa; null !== b; ) a(b), (b = b.oa); return this; }; Kb.prototype.map = function (a) { var b = this.ja; this.na = b.Ja = null; var c = new E(); for (b = b.fa; null !== b; ) c.add(a(b)), (b = b.oa); return c.iterator; }; Kb.prototype.filter = function (a) { var b = this.ja; this.na = b.Ja = null; var c = new E(); for (b = b.fa; null !== b; ) a(b) && c.add(b), (b = b.oa); return c.iterator; }; Kb.prototype.xd = function () { this.value = this.key = null; this.la = -1; this.ja.Ja = this; }; Kb.prototype.toString = function () { return null !== this.na ? 'MapIterator@' + this.na : 'MapIterator'; }; pa.Object.defineProperties(Kb.prototype, { iterator: { get: function () { return this; }, }, count: { get: function () { return this.ja.Cb; }, }, }); Kb.prototype.first = Kb.prototype.first; Kb.prototype.hasNext = Kb.prototype.dd; Kb.prototype.next = Kb.prototype.next; Kb.prototype.reset = Kb.prototype.reset; Kb.className = 'MapIterator'; function Lb(a) { nb(this); this.v = !1; this.Db = {}; this.Cb = 0; this.Te = this.Ja = null; this.Ba = 0; this.Ue = this.fa = null; void 0 !== a && ('function' === typeof a || 'string' === typeof a ? Aa() : this.addAll(a)); } t = Lb.prototype; t.kb = function () { var a = this.Ba; a++; 999999999 < a && (a = 0); this.Ba = a; }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { this.v = !1; return this; }; t.toString = function () { return 'Map()#' + Bb(this); }; t.add = function (a, b) { this.v && wa(this, a); var c = a; Ca(a) && (c = Db(a)); var d = this.Db[c]; void 0 === d ? (this.Cb++, (a = new Fb(a, b)), (this.Db[c] = a), (c = this.Ue), null === c ? (this.fa = a) : ((a.wl = c), (c.oa = a)), (this.Ue = a), this.kb()) : (d.value = b); return this; }; t.set = function (a, b) { return this.add(a, b); }; t.addAll = function (a) { if (null === a) return this; if (Ea(a)) for (var b = a.length, c = 0; c < b; c++) { var d = a[c]; this.add(d.key, d.value); } else for (a = a.iterator; a.next(); ) (b = a.value), this.add(b.key, b.value); return this; }; t.first = function () { return this.fa; }; Lb.prototype.any = function (a) { for (var b = this.fa; null !== b; ) { if (a(b)) return !0; b = b.oa; } return !1; }; Lb.prototype.all = function (a) { for (var b = this.fa; null !== b; ) { if (!a(b)) return !1; b = b.oa; } return !0; }; Lb.prototype.each = function (a) { for (var b = this.fa; null !== b; ) a(b), (b = b.oa); return this; }; Lb.prototype.map = function (a) { for (var b = new Lb(), c = this.fa; null !== c; ) b.add(c.key, a(c)), (c = c.oa); return b; }; Lb.prototype.filter = function (a) { for (var b = new Lb(), c = this.fa; null !== c; ) a(c) && b.add(c.key, c.value), (c = c.oa); return b; }; t = Lb.prototype; t.contains = function (a) { var b = a; return Ca(a) && ((b = Bb(a)), void 0 === b) ? !1 : void 0 !== this.Db[b]; }; t.has = function (a) { return this.contains(a); }; t.J = function (a) { var b = a; if (Ca(a) && ((b = Bb(a)), void 0 === b)) return null; a = this.Db[b]; return void 0 === a ? null : a.value; }; t.get = function (a) { return this.J(a); }; t.remove = function (a) { if (null === a) return !1; this.v && wa(this, a); var b = a; if (Ca(a) && ((b = Bb(a)), void 0 === b)) return !1; a = this.Db[b]; if (void 0 === a) return !1; var c = a.oa, d = a.wl; null !== c && (c.wl = d); null !== d && (d.oa = c); this.fa === a && (this.fa = c); this.Ue === a && (this.Ue = d); delete this.Db[b]; this.Cb--; this.kb(); return !0; }; t.delete = function (a) { return this.remove(a); }; t.clear = function () { this.v && wa(this); this.Db = {}; this.Cb = 0; null !== this.Ja && this.Ja.reset(); null !== this.Te && this.Te.reset(); this.Ue = this.fa = null; this.kb(); }; Lb.prototype.copy = function () { var a = new Lb(), b = this.Db, c; for (c in b) { var d = b[c]; a.add(d.key, d.value); } return a; }; Lb.prototype.Na = function () { var a = this.Db, b = Array(this.Cb), c = 0, d; for (d in a) { var e = a[d]; b[c] = new Fb(e.key, e.value); c++; } return b; }; Lb.prototype.Yd = function () { return new Ib(this); }; pa.Object.defineProperties(Lb.prototype, { count: { get: function () { return this.Cb; }, }, size: { get: function () { return this.Cb; }, }, iterator: { get: function () { if (0 >= this.count) return xb; var a = this.Ja; return null !== a ? (a.reset(), a) : new Kb(this); }, }, iteratorKeys: { get: function () { return 0 >= this.count ? xb : new Hb(this); }, }, iteratorValues: { get: function () { if (0 >= this.count) return xb; var a = this.Te; return null !== a ? (a.reset(), a) : new Jb(this); }, }, }); Lb.prototype.toKeySet = Lb.prototype.Yd; Lb.prototype.toArray = Lb.prototype.Na; Lb.prototype.clear = Lb.prototype.clear; Lb.prototype['delete'] = Lb.prototype.delete; Lb.prototype.remove = Lb.prototype.remove; Lb.prototype.get = Lb.prototype.get; Lb.prototype.getValue = Lb.prototype.J; Lb.prototype.has = Lb.prototype.has; Lb.prototype.contains = Lb.prototype.contains; Lb.prototype.first = Lb.prototype.first; Lb.prototype.addAll = Lb.prototype.addAll; Lb.prototype.set = Lb.prototype.set; Lb.prototype.add = Lb.prototype.add; Lb.prototype.thaw = Lb.prototype.ha; Lb.prototype.freeze = Lb.prototype.freeze; Lb.className = 'Map'; function G(a, b) { void 0 === a ? (this.G = this.F = 0) : 'number' === typeof a && 'number' === typeof b ? ((this.F = a), (this.G = b)) : A('Invalid arguments to Point constructor: ' + a + ', ' + b); this.v = !1; } G.prototype.assign = function (a) { this.F = a.F; this.G = a.G; return this; }; G.prototype.h = function (a, b) { this.F = a; this.G = b; return this; }; G.prototype.wg = function (a, b) { this.F = a; this.G = b; return this; }; G.prototype.set = function (a) { this.F = a.F; this.G = a.G; return this; }; G.prototype.copy = function () { var a = new G(); a.F = this.F; a.G = this.G; return a; }; t = G.prototype; t.ga = function () { this.v = !0; Object.freeze(this); return this; }; t.I = function () { return Object.isFrozen(this) ? this : this.copy().freeze(); }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { Object.isFrozen(this) && A('cannot thaw constant: ' + this); this.v = !1; return this; }; function Nb(a) { if ('string' === typeof a) { a = a.split(' '); for (var b = 0, c = 0; '' === a[b]; ) b++; var d = a[b++]; d && (c = parseFloat(d)); for (var e = 0; '' === a[b]; ) b++; (d = a[b++]) && (e = parseFloat(d)); return new G(c, e); } return new G(); } function Ob(a) { return a.x.toString() + ' ' + a.y.toString(); } t.toString = function () { return 'Point(' + this.x + ',' + this.y + ')'; }; t.A = function (a) { return a instanceof G ? this.F === a.x && this.G === a.y : !1; }; t.Fi = function (a, b) { return this.F === a && this.G === b; }; t.Qa = function (a) { return H.w(this.F, a.x) && H.w(this.G, a.y); }; t.add = function (a) { this.F += a.x; this.G += a.y; return this; }; t.Xd = function (a) { this.F -= a.x; this.G -= a.y; return this; }; t.offset = function (a, b) { this.F += a; this.G += b; return this; }; G.prototype.rotate = function (a) { if (0 === a) return this; var b = this.F, c = this.G; if (0 === b && 0 === c) return this; 360 <= a ? (a -= 360) : 0 > a && (a += 360); if (90 === a) { a = 0; var d = 1; } else 180 === a ? ((a = -1), (d = 0)) : 270 === a ? ((a = 0), (d = -1)) : ((d = (a * Math.PI) / 180), (a = Math.cos(d)), (d = Math.sin(d))); this.F = a * b - d * c; this.G = d * b + a * c; return this; }; t = G.prototype; t.scale = function (a, b) { this.F *= a; this.G *= b; return this; }; t.Ce = function (a) { var b = a.x - this.F; a = a.y - this.G; return b * b + a * a; }; t.cd = function (a, b) { a -= this.F; b -= this.G; return a * a + b * b; }; t.normalize = function () { var a = this.F, b = this.G, c = Math.sqrt(a * a + b * b); 0 < c && ((this.F = a / c), (this.G = b / c)); return this; }; t.Wa = function (a) { return Pb(a.x - this.F, a.y - this.G); }; t.direction = function (a, b) { return Pb(a - this.F, b - this.G); }; function Pb(a, b) { if (0 === a) return 0 < b ? 90 : 0 > b ? 270 : 0; if (0 === b) return 0 < a ? 0 : 180; if (isNaN(a) || isNaN(b)) return 0; var c = (180 * Math.atan(Math.abs(b / a))) / Math.PI; 0 > a ? (c = 0 > b ? c + 180 : 180 - c) : 0 > b && (c = 360 - c); return c; } t.Hz = function (a, b, c, d) { H.Si(a, b, c, d, this.F, this.G, this); return this; }; t.Iz = function (a, b) { H.Si(a.x, a.y, b.x, b.y, this.F, this.G, this); return this; }; t.Tz = function (a, b, c, d) { H.Wp(this.F, this.G, a, b, c, d, this); return this; }; t.Uz = function (a, b) { H.Wp(this.F, this.G, a.x, a.y, b.width, b.height, this); return this; }; t.Vi = function (a, b) { this.F = a.x + b.x * a.width + b.offsetX; this.G = a.y + b.y * a.height + b.offsetY; return this; }; t.rk = function (a, b, c, d, e) { this.F = a + e.x * c + e.offsetX; this.G = b + e.y * d + e.offsetY; return this; }; t.transform = function (a) { a.ta(this); return this; }; function Qb(a, b) { b.Ud(a); return a; } function Rb(a, b, c, d, e, f) { var g = e - c, h = f - d, k = g * g + h * h; c -= a; d -= b; var l = -c * g - d * h; if (0 >= l || l >= k) return (g = e - a), (h = f - b), Math.min(c * c + d * d, g * g + h * h); a = g * d - h * c; return (a * a) / k; } function Sb(a, b, c, d) { a = c - a; b = d - b; return a * a + b * b; } function Tb(a, b, c, d) { a = c - a; b = d - b; if (0 === a) return 0 < b ? 90 : 0 > b ? 270 : 0; if (0 === b) return 0 < a ? 0 : 180; if (isNaN(a) || isNaN(b)) return 0; d = (180 * Math.atan(Math.abs(b / a))) / Math.PI; 0 > a ? (d = 0 > b ? d + 180 : 180 - d) : 0 > b && (d = 360 - d); return d; } t.o = function () { return isFinite(this.x) && isFinite(this.y); }; G.alloc = function () { var a = $b.pop(); return void 0 === a ? new G() : a; }; G.allocAt = function (a, b) { var c = $b.pop(); if (void 0 === c) return new G(a, b); c.x = a; c.y = b; return c; }; G.free = function (a) { $b.push(a); }; pa.Object.defineProperties(G.prototype, { x: { get: function () { return this.F; }, set: function (a) { this.F = a; }, }, y: { get: function () { return this.G; }, set: function (a) { this.G = a; }, }, }); G.prototype.isReal = G.prototype.o; G.prototype.setSpot = G.prototype.rk; G.prototype.setRectSpot = G.prototype.Vi; G.prototype.snapToGridPoint = G.prototype.Uz; G.prototype.snapToGrid = G.prototype.Tz; G.prototype.projectOntoLineSegmentPoint = G.prototype.Iz; G.prototype.projectOntoLineSegment = G.prototype.Hz; G.prototype.direction = G.prototype.direction; G.prototype.directionPoint = G.prototype.Wa; G.prototype.normalize = G.prototype.normalize; G.prototype.distanceSquared = G.prototype.cd; G.prototype.distanceSquaredPoint = G.prototype.Ce; G.prototype.scale = G.prototype.scale; G.prototype.rotate = G.prototype.rotate; G.prototype.offset = G.prototype.offset; G.prototype.subtract = G.prototype.Xd; G.prototype.add = G.prototype.add; G.prototype.equalsApprox = G.prototype.Qa; G.prototype.equalTo = G.prototype.Fi; G.prototype.equals = G.prototype.A; G.prototype.set = G.prototype.set; G.prototype.setTo = G.prototype.wg; var ac = null, bc = null, cc = null, dc = null, ec = null, $b = []; G.className = 'Point'; G.parse = Nb; G.stringify = Ob; G.distanceLineSegmentSquared = Rb; G.distanceSquared = Sb; G.direction = Tb; G.Origin = ac = new G(0, 0).ga(); G.InfiniteTopLeft = bc = new G(-Infinity, -Infinity).ga(); G.InfiniteBottomRight = cc = new G(Infinity, Infinity).ga(); G.SixPoint = dc = new G(6, 6).ga(); G.NoPoint = ec = new G(NaN, NaN).ga(); G.parse = Nb; G.stringify = Ob; G.distanceLineSegmentSquared = Rb; G.distanceSquared = Sb; G.direction = Tb; function M(a, b) { void 0 === a ? (this.Z = this.$ = 0) : 'number' === typeof a && (0 <= a || isNaN(a)) && 'number' === typeof b && (0 <= b || isNaN(b)) ? ((this.$ = a), (this.Z = b)) : A('Invalid arguments to Size constructor: ' + a + ', ' + b); this.v = !1; } var fc, gc, hc, ic, kc, lc, mc; M.prototype.assign = function (a) { this.$ = a.$; this.Z = a.Z; return this; }; M.prototype.h = function (a, b) { this.$ = a; this.Z = b; return this; }; M.prototype.wg = function (a, b) { this.$ = a; this.Z = b; return this; }; M.prototype.set = function (a) { this.$ = a.$; this.Z = a.Z; return this; }; M.prototype.copy = function () { var a = new M(); a.$ = this.$; a.Z = this.Z; return a; }; t = M.prototype; t.ga = function () { this.v = !0; Object.freeze(this); return this; }; t.I = function () { return Object.isFrozen(this) ? this : this.copy().freeze(); }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { Object.isFrozen(this) && A('cannot thaw constant: ' + this); this.v = !1; return this; }; function nc(a) { if ('string' === typeof a) { a = a.split(' '); for (var b = 0, c = 0; '' === a[b]; ) b++; var d = a[b++]; d && (c = parseFloat(d)); for (var e = 0; '' === a[b]; ) b++; (d = a[b++]) && (e = parseFloat(d)); return new M(c, e); } return new M(); } function oc(a) { return a.width.toString() + ' ' + a.height.toString(); } t.toString = function () { return 'Size(' + this.width + ',' + this.height + ')'; }; t.A = function (a) { return a instanceof M ? this.$ === a.width && this.Z === a.height : !1; }; t.Fi = function (a, b) { return this.$ === a && this.Z === b; }; t.Qa = function (a) { return H.w(this.$, a.width) && H.w(this.Z, a.height); }; t.o = function () { return isFinite(this.width) && isFinite(this.height); }; M.alloc = function () { var a = pc.pop(); return void 0 === a ? new M() : a; }; M.free = function (a) { pc.push(a); }; pa.Object.defineProperties(M.prototype, { width: { get: function () { return this.$; }, set: function (a) { 0 > a && ya(a, '>= 0', M, 'width'); this.$ = a; }, }, height: { get: function () { return this.Z; }, set: function (a) { 0 > a && ya(a, '>= 0', M, 'height'); this.Z = a; }, }, }); M.prototype.isReal = M.prototype.o; M.prototype.equalsApprox = M.prototype.Qa; M.prototype.equalTo = M.prototype.Fi; M.prototype.equals = M.prototype.A; M.prototype.set = M.prototype.set; M.prototype.setTo = M.prototype.wg; var pc = []; M.className = 'Size'; M.parse = nc; M.stringify = oc; M.ZeroSize = fc = new M(0, 0).ga(); M.OneSize = gc = new M(1, 1).ga(); M.SixSize = hc = new M(6, 6).ga(); M.EightSize = ic = new M(8, 8).ga(); M.TenSize = kc = new M(10, 10).ga(); M.InfiniteSize = lc = new M(Infinity, Infinity).ga(); M.NoSize = mc = new M(NaN, NaN).ga(); M.parse = nc; M.stringify = oc; function N(a, b, c, d) { void 0 === a ? (this.Z = this.$ = this.G = this.F = 0) : a instanceof G ? ((c = a.x), (a = a.y), b instanceof G ? ((d = b.x), (b = b.y), (this.F = Math.min(c, d)), (this.G = Math.min(a, b)), (this.$ = Math.abs(c - d)), (this.Z = Math.abs(a - b))) : b instanceof M ? ((this.F = c), (this.G = a), (this.$ = b.$), (this.Z = b.Z)) : A('Incorrect arguments supplied to Rect constructor')) : 'number' === typeof a && 'number' === typeof b && 'number' === typeof c && (0 <= c || isNaN(c)) && 'number' === typeof d && (0 <= d || isNaN(d)) ? ((this.F = a), (this.G = b), (this.$ = c), (this.Z = d)) : A('Invalid arguments to Rect constructor: ' + a + ', ' + b + ', ' + c + ', ' + d); this.v = !1; } t = N.prototype; t.assign = function (a) { this.F = a.F; this.G = a.G; this.$ = a.$; this.Z = a.Z; return this; }; t.h = function (a, b, c, d) { this.F = a; this.G = b; this.$ = c; this.Z = d; return this; }; function sc(a, b, c) { a.$ = b; a.Z = c; } t.wg = function (a, b, c, d) { this.F = a; this.G = b; this.$ = c; this.Z = d; return this; }; t.set = function (a) { this.F = a.F; this.G = a.G; this.$ = a.$; this.Z = a.Z; return this; }; t.jd = function (a) { this.F = a.x; this.G = a.y; return this; }; t.Rz = function (a) { this.$ = a.$; this.Z = a.Z; return this; }; N.prototype.copy = function () { var a = new N(); a.F = this.F; a.G = this.G; a.$ = this.$; a.Z = this.Z; return a; }; t = N.prototype; t.ga = function () { this.v = !0; Object.freeze(this); return this; }; t.I = function () { return Object.isFrozen(this) ? this : this.copy().freeze(); }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { Object.isFrozen(this) && A('cannot thaw constant: ' + this); this.v = !1; return this; }; function tc(a) { if ('string' === typeof a) { a = a.split(' '); for (var b = 0, c = 0; '' === a[b]; ) b++; var d = a[b++]; d && (c = parseFloat(d)); for (var e = 0; '' === a[b]; ) b++; (d = a[b++]) && (e = parseFloat(d)); for (var f = 0; '' === a[b]; ) b++; (d = a[b++]) && (f = parseFloat(d)); for (var g = 0; '' === a[b]; ) b++; (d = a[b++]) && (g = parseFloat(d)); return new N(c, e, f, g); } return new N(); } function uc(a) { return ( a.x.toString() + ' ' + a.y.toString() + ' ' + a.width.toString() + ' ' + a.height.toString() ); } t.toString = function () { return 'Rect(' + this.x + ',' + this.y + ',' + this.width + ',' + this.height + ')'; }; t.A = function (a) { return a instanceof N ? this.F === a.x && this.G === a.y && this.$ === a.width && this.Z === a.height : !1; }; t.Fi = function (a, b, c, d) { return this.F === a && this.G === b && this.$ === c && this.Z === d; }; t.Qa = function (a) { return H.w(this.F, a.x) && H.w(this.G, a.y) && H.w(this.$, a.width) && H.w(this.Z, a.height); }; function xc(a, b) { return H.ca(a.F, b.x) && H.ca(a.G, b.y) && H.ca(a.$, b.width) && H.ca(a.Z, b.height); } t.da = function (a) { return this.F <= a.x && this.F + this.$ >= a.x && this.G <= a.y && this.G + this.Z >= a.y; }; t.nf = function (a) { return ( this.F <= a.x && a.x + a.width <= this.F + this.$ && this.G <= a.y && a.y + a.height <= this.G + this.Z ); }; t.contains = function (a, b, c, d) { void 0 === c && (c = 0); void 0 === d && (d = 0); return this.F <= a && a + c <= this.F + this.$ && this.G <= b && b + d <= this.G + this.Z; }; t.reset = function () { this.Z = this.$ = this.G = this.F = 0; }; t.offset = function (a, b) { this.F += a; this.G += b; return this; }; t.Uc = function (a, b) { return yc(this, b, a, b, a); }; t.Np = function (a) { return yc(this, a.top, a.right, a.bottom, a.left); }; t.Pv = function (a) { return yc(this, -a.top, -a.right, -a.bottom, -a.left); }; t.jz = function (a, b, c, d) { return yc(this, a, b, c, d); }; function yc(a, b, c, d, e) { var f = a.$; c + e <= -f ? ((a.F += f / 2), (a.$ = 0)) : ((a.F -= e), (a.$ += c + e)); c = a.Z; b + d <= -c ? ((a.G += c / 2), (a.Z = 0)) : ((a.G -= b), (a.Z += b + d)); return a; } t.nz = function (a) { return zc(this, a.x, a.y, a.width, a.height); }; t.hv = function (a, b, c, d) { return zc(this, a, b, c, d); }; function zc(a, b, c, d, e) { var f = Math.max(a.F, b), g = Math.max(a.G, c); b = Math.min(a.F + a.$, b + d); c = Math.min(a.G + a.Z, c + e); a.F = f; a.G = g; a.$ = Math.max(0, b - f); a.Z = Math.max(0, c - g); return a; } t.Ic = function (a) { return this.iv(a.x, a.y, a.width, a.height); }; t.iv = function (a, b, c, d) { var e = this.$, f = this.F; if ( Infinity !== e && Infinity !== c && ((e += f), (c += a), isNaN(c) || isNaN(e) || f > c || a > e) ) return !1; a = this.Z; c = this.G; return Infinity !== a && Infinity !== d && ((a += c), (d += b), isNaN(d) || isNaN(a) || c > d || b > a) ? !1 : !0; }; function Ac(a, b, c) { var d = a.$, e = a.F, f = b.x - c; if (e > b.width + c + c + f || f > d + e) return !1; d = a.Z; a = a.G; e = b.y - c; return a > b.height + c + c + e || e > d + a ? !1 : !0; } t.Je = function (a) { return Bc(this, a.x, a.y, 0, 0); }; t.Jc = function (a) { return Bc(this, a.F, a.G, a.$, a.Z); }; t.Wv = function (a, b, c, d) { void 0 === c && (c = 0); void 0 === d && (d = 0); return Bc(this, a, b, c, d); }; function Bc(a, b, c, d, e) { var f = Math.min(a.F, b), g = Math.min(a.G, c); b = Math.max(a.F + a.$, b + d); c = Math.max(a.G + a.Z, c + e); a.F = f; a.G = g; a.$ = b - f; a.Z = c - g; return a; } t.rk = function (a, b, c) { this.F = a - c.offsetX - c.x * this.$; this.G = b - c.offsetY - c.y * this.Z; return this; }; function Cc(a, b, c, d, e, f, g, h) { void 0 === g && (g = 0); void 0 === h && (h = 0); return a <= e && e + g <= a + c && b <= f && f + h <= b + d; } function Dc(a, b, c, d, e, f, g, h) { return a > g + e || e > c + a ? !1 : b > h + f || f > d + b ? !1 : !0; } t.o = function () { return isFinite(this.x) && isFinite(this.y) && isFinite(this.width) && isFinite(this.height); }; t.pz = function () { return 0 === this.width && 0 === this.height; }; N.alloc = function () { var a = Fc.pop(); return void 0 === a ? new N() : a; }; N.allocAt = function (a, b, c, d) { var e = Fc.pop(); return void 0 === e ? new N(a, b, c, d) : e.h(a, b, c, d); }; N.free = function (a) { Fc.push(a); }; pa.Object.defineProperties(N.prototype, { x: { get: function () { return this.F; }, set: function (a) { this.F = a; }, }, y: { get: function () { return this.G; }, set: function (a) { this.G = a; }, }, width: { get: function () { return this.$; }, set: function (a) { 0 > a && ya(a, '>= 0', N, 'width'); this.$ = a; }, }, height: { get: function () { return this.Z; }, set: function (a) { 0 > a && ya(a, '>= 0', N, 'height'); this.Z = a; }, }, left: { get: function () { return this.F; }, set: function (a) { this.F = a; }, }, top: { get: function () { return this.G; }, set: function (a) { this.G = a; }, }, right: { get: function () { return this.F + this.$; }, set: function (a) { this.F += a - (this.F + this.$); }, }, bottom: { get: function () { return this.G + this.Z; }, set: function (a) { this.G += a - (this.G + this.Z); }, }, position: { get: function () { return new G(this.F, this.G); }, set: function (a) { this.F = a.x; this.G = a.y; }, }, size: { get: function () { return new M(this.$, this.Z); }, set: function (a) { this.$ = a.width; this.Z = a.height; }, }, center: { get: function () { return new G(this.F + this.$ / 2, this.G + this.Z / 2); }, set: function (a) { this.F = a.x - this.$ / 2; this.G = a.y - this.Z / 2; }, }, centerX: { get: function () { return this.F + this.$ / 2; }, set: function (a) { this.F = a - this.$ / 2; }, }, centerY: { get: function () { return this.G + this.Z / 2; }, set: function (a) { this.G = a - this.Z / 2; }, }, }); N.prototype.isEmpty = N.prototype.pz; N.prototype.isReal = N.prototype.o; N.prototype.setSpot = N.prototype.rk; N.prototype.union = N.prototype.Wv; N.prototype.unionRect = N.prototype.Jc; N.prototype.unionPoint = N.prototype.Je; N.prototype.intersects = N.prototype.iv; N.prototype.intersectsRect = N.prototype.Ic; N.prototype.intersect = N.prototype.hv; N.prototype.intersectRect = N.prototype.nz; N.prototype.grow = N.prototype.jz; N.prototype.subtractMargin = N.prototype.Pv; N.prototype.addMargin = N.prototype.Np; N.prototype.inflate = N.prototype.Uc; N.prototype.offset = N.prototype.offset; N.prototype.contains = N.prototype.contains; N.prototype.containsRect = N.prototype.nf; N.prototype.containsPoint = N.prototype.da; N.prototype.equalsApprox = N.prototype.Qa; N.prototype.equalTo = N.prototype.Fi; N.prototype.equals = N.prototype.A; N.prototype.setSize = N.prototype.Rz; N.prototype.setPoint = N.prototype.jd; N.prototype.set = N.prototype.set; N.prototype.setTo = N.prototype.wg; var Gc = null, Hc = null, Fc = []; N.className = 'Rect'; N.parse = tc; N.stringify = uc; N.contains = Cc; N.intersects = Dc; N.ZeroRect = Gc = new N(0, 0, 0, 0).ga(); N.NoRect = Hc = new N(NaN, NaN, NaN, NaN).ga(); N.parse = tc; N.stringify = uc; N.contains = Cc; N.intersects = Dc; function Ic(a, b, c, d) { void 0 === a ? (this.le = this.be = this.ve = this.xe = 0) : void 0 === b ? (this.left = this.bottom = this.right = this.top = a) : void 0 === c ? ((this.top = a), (this.right = b), (this.bottom = a), (this.left = b)) : void 0 !== d ? ((this.top = a), (this.right = b), (this.bottom = c), (this.left = d)) : A('Invalid arguments to Margin constructor: ' + a + ', ' + b + ', ' + c + ', ' + d); this.v = !1; } Ic.prototype.assign = function (a) { this.xe = a.xe; this.ve = a.ve; this.be = a.be; this.le = a.le; return this; }; Ic.prototype.wg = function (a, b, c, d) { this.xe = a; this.ve = b; this.be = c; this.le = d; return this; }; Ic.prototype.set = function (a) { this.xe = a.xe; this.ve = a.ve; this.be = a.be; this.le = a.le; return this; }; Ic.prototype.copy = function () { var a = new Ic(); a.xe = this.xe; a.ve = this.ve; a.be = this.be; a.le = this.le; return a; }; t = Ic.prototype; t.ga = function () { this.v = !0; Object.freeze(this); return this; }; t.I = function () { return Object.isFrozen(this) ? this : this.copy().freeze(); }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { Object.isFrozen(this) && A('cannot thaw constant: ' + this); this.v = !1; return this; }; function Jc(a) { if ('string' === typeof a) { a = a.split(' '); for (var b = 0, c = NaN; '' === a[b]; ) b++; var d = a[b++]; d && (c = parseFloat(d)); if (isNaN(c)) return new Ic(); for (var e = NaN; '' === a[b]; ) b++; (d = a[b++]) && (e = parseFloat(d)); if (isNaN(e)) return new Ic(c); for (var f = NaN; '' === a[b]; ) b++; (d = a[b++]) && (f = parseFloat(d)); if (isNaN(f)) return new Ic(c, e); for (var g = NaN; '' === a[b]; ) b++; (d = a[b++]) && (g = parseFloat(d)); return isNaN(g) ? new Ic(c, e) : new Ic(c, e, f, g); } return new Ic(); } function Kc(a) { return ( a.top.toString() + ' ' + a.right.toString() + ' ' + a.bottom.toString() + ' ' + a.left.toString() ); } t.toString = function () { return 'Margin(' + this.top + ',' + this.right + ',' + this.bottom + ',' + this.left + ')'; }; t.A = function (a) { return a instanceof Ic ? this.xe === a.top && this.ve === a.right && this.be === a.bottom && this.le === a.left : !1; }; t.Fi = function (a, b, c, d) { return this.xe === a && this.ve === b && this.be === c && this.le === d; }; t.Qa = function (a) { return ( H.w(this.xe, a.top) && H.w(this.ve, a.right) && H.w(this.be, a.bottom) && H.w(this.le, a.left) ); }; t.o = function () { return ( isFinite(this.top) && isFinite(this.right) && isFinite(this.bottom) && isFinite(this.left) ); }; Ic.alloc = function () { var a = Lc.pop(); return void 0 === a ? new Ic() : a; }; Ic.free = function (a) { Lc.push(a); }; pa.Object.defineProperties(Ic.prototype, { top: { get: function () { return this.xe; }, set: function (a) { this.xe = a; }, }, right: { get: function () { return this.ve; }, set: function (a) { this.ve = a; }, }, bottom: { get: function () { return this.be; }, set: function (a) { this.be = a; }, }, left: { get: function () { return this.le; }, set: function (a) { this.le = a; }, }, }); Ic.prototype.isReal = Ic.prototype.o; Ic.prototype.equalsApprox = Ic.prototype.Qa; Ic.prototype.equalTo = Ic.prototype.Fi; Ic.prototype.equals = Ic.prototype.A; Ic.prototype.set = Ic.prototype.set; Ic.prototype.setTo = Ic.prototype.wg; var Oc = null, Pc = null, Lc = []; Ic.className = 'Margin'; Ic.parse = Jc; Ic.stringify = Kc; Ic.ZeroMargin = Oc = new Ic(0, 0, 0, 0).ga(); Ic.TwoMargin = Pc = new Ic(2, 2, 2, 2).ga(); Ic.parse = Jc; Ic.stringify = Kc; function Qc() { this.m11 = 1; this.m21 = this.m12 = 0; this.m22 = 1; this.dy = this.dx = 0; } Qc.prototype.set = function (a) { this.m11 = a.m11; this.m12 = a.m12; this.m21 = a.m21; this.m22 = a.m22; this.dx = a.dx; this.dy = a.dy; return this; }; Qc.prototype.copy = function () { var a = new Qc(); a.m11 = this.m11; a.m12 = this.m12; a.m21 = this.m21; a.m22 = this.m22; a.dx = this.dx; a.dy = this.dy; return a; }; t = Qc.prototype; t.toString = function () { return ( 'Transform(' + this.m11 + ',' + this.m12 + ',' + this.m21 + ',' + this.m22 + ',' + this.dx + ',' + this.dy + ')' ); }; t.A = function (a) { return a instanceof Qc ? this.m11 === a.m11 && this.m12 === a.m12 && this.m21 === a.m21 && this.m22 === a.m22 && this.dx === a.dx && this.dy === a.dy : !1; }; t.bt = function () { return ( 0 === this.dx && 0 === this.dy && 1 === this.m11 && 0 === this.m12 && 0 === this.m21 && 1 === this.m22 ); }; t.reset = function () { this.m11 = 1; this.m21 = this.m12 = 0; this.m22 = 1; this.dy = this.dx = 0; return this; }; t.multiply = function (a) { var b = this.m12 * a.m11 + this.m22 * a.m12, c = this.m11 * a.m21 + this.m21 * a.m22, d = this.m12 * a.m21 + this.m22 * a.m22, e = this.m11 * a.dx + this.m21 * a.dy + this.dx, f = this.m12 * a.dx + this.m22 * a.dy + this.dy; this.m11 = this.m11 * a.m11 + this.m21 * a.m12; this.m12 = b; this.m21 = c; this.m22 = d; this.dx = e; this.dy = f; return this; }; t.ov = function (a) { var b = 1 / (a.m11 * a.m22 - a.m12 * a.m21), c = a.m22 * b, d = -a.m12 * b, e = -a.m21 * b, f = a.m11 * b, g = b * (a.m21 * a.dy - a.m22 * a.dx); a = b * (a.m12 * a.dx - a.m11 * a.dy); b = this.m11 * c + this.m21 * d; c = this.m12 * c + this.m22 * d; d = this.m11 * e + this.m21 * f; e = this.m12 * e + this.m22 * f; this.dx = this.m11 * g + this.m21 * a + this.dx; this.dy = this.m12 * g + this.m22 * a + this.dy; this.m11 = b; this.m12 = c; this.m21 = d; this.m22 = e; return this; }; t.at = function () { var a = 1 / (this.m11 * this.m22 - this.m12 * this.m21), b = -this.m12 * a, c = -this.m21 * a, d = this.m11 * a, e = a * (this.m21 * this.dy - this.m22 * this.dx), f = a * (this.m12 * this.dx - this.m11 * this.dy); this.m11 = this.m22 * a; this.m12 = b; this.m21 = c; this.m22 = d; this.dx = e; this.dy = f; return this; }; Qc.prototype.rotate = function (a, b, c) { 360 <= a ? (a -= 360) : 0 > a && (a += 360); if (0 === a) return this; this.translate(b, c); if (90 === a) { a = 0; var d = 1; } else 180 === a ? ((a = -1), (d = 0)) : 270 === a ? ((a = 0), (d = -1)) : ((d = (a * Math.PI) / 180), (a = Math.cos(d)), (d = Math.sin(d))); var e = this.m12 * a + this.m22 * d, f = this.m11 * -d + this.m21 * a, g = this.m12 * -d + this.m22 * a; this.m11 = this.m11 * a + this.m21 * d; this.m12 = e; this.m21 = f; this.m22 = g; this.translate(-b, -c); return this; }; t = Qc.prototype; t.translate = function (a, b) { this.dx += this.m11 * a + this.m21 * b; this.dy += this.m12 * a + this.m22 * b; return this; }; t.scale = function (a, b) { void 0 === b && (b = a); this.m11 *= a; this.m12 *= a; this.m21 *= b; this.m22 *= b; return this; }; t.ta = function (a) { var b = a.x, c = a.y; return a.h(b * this.m11 + c * this.m21 + this.dx, b * this.m12 + c * this.m22 + this.dy); }; t.Ud = function (a) { var b = 1 / (this.m11 * this.m22 - this.m12 * this.m21), c = a.x, d = a.y; return a.h( c * this.m22 * b + d * -this.m21 * b + b * (this.m21 * this.dy - this.m22 * this.dx), c * -this.m12 * b + d * this.m11 * b + b * (this.m12 * this.dx - this.m11 * this.dy), ); }; t.Vv = function (a) { var b = a.F, c = a.G, d = b + a.$, e = c + a.Z, f = this.m11, g = this.m12, h = this.m21, k = this.m22, l = this.dx, m = this.dy, n = b * f + c * h + l, p = b * g + c * k + m, q = d * f + c * h + l, r = d * g + c * k + m; c = b * f + e * h + l; b = b * g + e * k + m; f = d * f + e * h + l; d = d * g + e * k + m; e = Math.min(n, q); n = Math.max(n, q); q = Math.min(p, r); p = Math.max(p, r); e = Math.min(e, c); n = Math.max(n, c); q = Math.min(q, b); p = Math.max(p, b); e = Math.min(e, f); n = Math.max(n, f); q = Math.min(q, d); p = Math.max(p, d); a.F = e; a.G = q; a.$ = n - e; a.Z = p - q; return a; }; Qc.alloc = function () { var a = Rc.pop(); return void 0 === a ? new Qc() : a; }; Qc.free = function (a) { Rc.push(a); }; Qc.prototype.transformRect = Qc.prototype.Vv; Qc.prototype.invertedTransformPoint = Qc.prototype.Ud; Qc.prototype.transformPoint = Qc.prototype.ta; Qc.prototype.scale = Qc.prototype.scale; Qc.prototype.translate = Qc.prototype.translate; Qc.prototype.rotate = Qc.prototype.rotate; Qc.prototype.invert = Qc.prototype.at; Qc.prototype.multiplyInverted = Qc.prototype.ov; Qc.prototype.multiply = Qc.prototype.multiply; Qc.prototype.reset = Qc.prototype.reset; Qc.prototype.isIdentity = Qc.prototype.bt; Qc.prototype.equals = Qc.prototype.A; Qc.prototype.set = Qc.prototype.set; var Rc = []; Qc.className = 'Transform'; Qc.xF = '54a702f3e53909c447824c6706603faf4c'; function O(a, b, c, d) { void 0 === a ? (this.Nd = this.Md = this.G = this.F = 0) : (void 0 === b && (b = 0), void 0 === c && (c = 0), void 0 === d && (d = 0), (this.x = a), (this.y = b), (this.offsetX = c), (this.offsetY = d)); this.v = !1; } var Sc, Tc, Uc, Vc, cd, dd, ed, fd, gd, hd, id, jd, pd, qd, rd, sd, td, ud, vd, wd, zd, Ad, Bd, Cd, Dd, Ed, Fd, Gd, Hd, Id, Jd, Kd, Sd, Td, Ud, Vd; O.prototype.assign = function (a) { this.F = a.F; this.G = a.G; this.Md = a.Md; this.Nd = a.Nd; return this; }; O.prototype.wg = function (a, b, c, d) { this.F = a; this.G = b; this.Md = c; this.Nd = d; return this; }; O.prototype.set = function (a) { this.F = a.F; this.G = a.G; this.Md = a.Md; this.Nd = a.Nd; return this; }; O.prototype.copy = function () { var a = new O(); a.F = this.F; a.G = this.G; a.Md = this.Md; a.Nd = this.Nd; return a; }; t = O.prototype; t.ga = function () { this.v = !0; Object.freeze(this); return this; }; t.I = function () { return Object.isFrozen(this) ? this : this.copy().freeze(); }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { Object.isFrozen(this) && A('cannot thaw constant: ' + this); this.v = !1; return this; }; function Wd(a, b) { a.F = NaN; a.G = NaN; a.Md = b; return a; } function Xd(a) { if ('string' === typeof a) { a = a.trim(); if ('None' === a) return Sc; if ('TopLeft' === a) return Tc; if ('Top' === a || 'TopCenter' === a || 'MiddleTop' === a) return Uc; if ('TopRight' === a) return Vc; if ('Left' === a || 'LeftCenter' === a || 'MiddleLeft' === a) return cd; if ('Center' === a) return dd; if ('Right' === a || 'RightCenter' === a || 'MiddleRight' === a) return ed; if ('BottomLeft' === a) return fd; if ('Bottom' === a || 'BottomCenter' === a || 'MiddleBottom' === a) return gd; if ('BottomRight' === a) return hd; if ('TopSide' === a) return id; if ('LeftSide' === a) return jd; if ('RightSide' === a) return pd; if ('BottomSide' === a) return qd; if ('TopBottomSides' === a) return rd; if ('LeftRightSides' === a) return sd; if ('TopLeftSides' === a) return td; if ('TopRightSides' === a) return ud; if ('BottomLeftSides' === a) return vd; if ('BottomRightSides' === a) return wd; if ('NotTopSide' === a) return zd; if ('NotLeftSide' === a) return Ad; if ('NotRightSide' === a) return Bd; if ('NotBottomSide' === a) return Cd; if ('AllSides' === a) return Dd; if ('Default' === a) return Ed; a = a.split(' '); for (var b = 0, c = 0; '' === a[b]; ) b++; var d = a[b++]; void 0 !== d && 0 < d.length && (c = parseFloat(d)); for (var e = 0; '' === a[b]; ) b++; d = a[b++]; void 0 !== d && 0 < d.length && (e = parseFloat(d)); for (var f = 0; '' === a[b]; ) b++; d = a[b++]; void 0 !== d && 0 < d.length && (f = parseFloat(d)); for (var g = 0; '' === a[b]; ) b++; d = a[b++]; void 0 !== d && 0 < d.length && (g = parseFloat(d)); return new O(c, e, f, g); } return new O(); } function Yd(a) { return a.gb() ? a.x.toString() + ' ' + a.y.toString() + ' ' + a.offsetX.toString() + ' ' + a.offsetY.toString() : a.toString(); } t.toString = function () { return this.gb() ? 0 === this.Md && 0 === this.Nd ? 'Spot(' + this.x + ',' + this.y + ')' : 'Spot(' + this.x + ',' + this.y + ',' + this.offsetX + ',' + this.offsetY + ')' : this.A(Sc) ? 'None' : this.A(Tc) ? 'TopLeft' : this.A(Uc) ? 'Top' : this.A(Vc) ? 'TopRight' : this.A(cd) ? 'Left' : this.A(dd) ? 'Center' : this.A(ed) ? 'Right' : this.A(fd) ? 'BottomLeft' : this.A(gd) ? 'Bottom' : this.A(hd) ? 'BottomRight' : this.A(id) ? 'TopSide' : this.A(jd) ? 'LeftSide' : this.A(pd) ? 'RightSide' : this.A(qd) ? 'BottomSide' : this.A(rd) ? 'TopBottomSides' : this.A(sd) ? 'LeftRightSides' : this.A(td) ? 'TopLeftSides' : this.A(ud) ? 'TopRightSides' : this.A(vd) ? 'BottomLeftSides' : this.A(wd) ? 'BottomRightSides' : this.A(zd) ? 'NotTopSide' : this.A(Ad) ? 'NotLeftSide' : this.A(Bd) ? 'NotRightSide' : this.A(Cd) ? 'NotBottomSide' : this.A(Dd) ? 'AllSides' : this.A(Ed) ? 'Default' : 'None'; }; t.A = function (a) { return a instanceof O ? (this.F === a.x || (isNaN(this.F) && isNaN(a.x))) && (this.G === a.y || (isNaN(this.G) && isNaN(a.y))) && this.Md === a.offsetX && this.Nd === a.offsetY : !1; }; t.sv = function () { return new O(0.5 - (this.F - 0.5), 0.5 - (this.G - 0.5), -this.Md, -this.Nd); }; t.rf = function (a) { if (!this.sf()) return !1; if (!a.sf()) if (a.A(Fd)) a = jd; else if (a.A(Gd)) a = pd; else if (a.A(Hd)) a = id; else if (a.A(Id)) a = qd; else return !1; a = a.offsetY; return (this.Nd & a) === a; }; t.gb = function () { return !isNaN(this.x) && !isNaN(this.y); }; t.jc = function () { return isNaN(this.x) || isNaN(this.y); }; t.sf = function () { return isNaN(this.x) && isNaN(this.y) && 1 === this.offsetX && 0 !== this.offsetY; }; t.dt = function () { return isNaN(this.x) && isNaN(this.y) && 0 === this.offsetX && 0 === this.offsetY; }; t.Kb = function () { return isNaN(this.x) && isNaN(this.y) && -1 === this.offsetX && 0 === this.offsetY; }; O.alloc = function () { var a = Zd.pop(); return void 0 === a ? new O() : a; }; O.free = function (a) { Zd.push(a); }; pa.Object.defineProperties(O.prototype, { x: { get: function () { return this.F; }, set: function (a) { this.F = a; }, }, y: { get: function () { return this.G; }, set: function (a) { this.G = a; }, }, offsetX: { get: function () { return this.Md; }, set: function (a) { this.Md = a; }, }, offsetY: { get: function () { return this.Nd; }, set: function (a) { this.Nd = a; }, }, }); O.prototype.isDefault = O.prototype.Kb; O.prototype.isNone = O.prototype.dt; O.prototype.isSide = O.prototype.sf; O.prototype.isNoSpot = O.prototype.jc; O.prototype.isSpot = O.prototype.gb; O.prototype.includesSide = O.prototype.rf; O.prototype.opposite = O.prototype.sv; O.prototype.equals = O.prototype.A; O.prototype.set = O.prototype.set; O.prototype.setTo = O.prototype.wg; var Zd = []; O.className = 'Spot'; O.parse = Xd; O.stringify = Yd; O.None = Sc = Wd(new O(0, 0, 0, 0), 0).ga(); O.Default = Ed = Wd(new O(0, 0, -1, 0), -1).ga(); O.TopLeft = Tc = new O(0, 0, 0, 0).ga(); O.TopCenter = Uc = new O(0.5, 0, 0, 0).ga(); O.TopRight = Vc = new O(1, 0, 0, 0).ga(); O.LeftCenter = cd = new O(0, 0.5, 0, 0).ga(); O.Center = dd = new O(0.5, 0.5, 0, 0).ga(); O.RightCenter = ed = new O(1, 0.5, 0, 0).ga(); O.BottomLeft = fd = new O(0, 1, 0, 0).ga(); O.BottomCenter = gd = new O(0.5, 1, 0, 0).ga(); O.BottomRight = hd = new O(1, 1, 0, 0).ga(); O.MiddleTop = Jd = Uc; O.MiddleLeft = Kd = cd; O.MiddleRight = Sd = ed; O.MiddleBottom = Td = gd; O.Top = Hd = Uc; O.Left = Fd = cd; O.Right = Gd = ed; O.Bottom = Id = gd; O.TopSide = id = Wd(new O(0, 0, 1, 1), 1).ga(); O.LeftSide = jd = Wd(new O(0, 0, 1, 2), 1).ga(); O.RightSide = pd = Wd(new O(0, 0, 1, 4), 1).ga(); O.BottomSide = qd = Wd(new O(0, 0, 1, 8), 1).ga(); O.TopBottomSides = rd = Wd(new O(0, 0, 1, 9), 1).ga(); O.LeftRightSides = sd = Wd(new O(0, 0, 1, 6), 1).ga(); O.TopLeftSides = td = Wd(new O(0, 0, 1, 3), 1).ga(); O.TopRightSides = ud = Wd(new O(0, 0, 1, 5), 1).ga(); O.BottomLeftSides = vd = Wd(new O(0, 0, 1, 10), 1).ga(); O.BottomRightSides = wd = Wd(new O(0, 0, 1, 12), 1).ga(); O.NotTopSide = zd = Wd(new O(0, 0, 1, 14), 1).ga(); O.NotLeftSide = Ad = Wd(new O(0, 0, 1, 13), 1).ga(); O.NotRightSide = Bd = Wd(new O(0, 0, 1, 11), 1).ga(); O.NotBottomSide = Cd = Wd(new O(0, 0, 1, 7), 1).ga(); O.AllSides = Dd = Wd(new O(0, 0, 1, 15), 1).ga(); Ud = new O(0.156, 0.156).ga(); Vd = new O(0.844, 0.844).ga(); O.parse = Xd; O.stringify = Yd; var H = { Zz: '7da71ca0ad381e90', Ag: ((Math.sqrt(2) - 1) / 3) * 4, dw: null, sqrt: function (a) { if (0 >= a) return 0; var b = H.dw; if (null === b) { b = []; for (var c = 0; 2e3 >= c; c++) b[c] = Math.sqrt(c); H.dw = b; } return 1 > a ? ((c = 1 / a), 2e3 >= c ? 1 / b[c | 0] : Math.sqrt(a)) : 2e3 >= a ? b[a | 0] : Math.sqrt(a); }, w: function (a, b) { a -= b; return 0.5 > a && -0.5 < a; }, ca: function (a, b) { a -= b; return 5e-8 > a && -5e-8 < a; }, Tb: function (a, b, c, d, e, f, g) { 0 >= e && (e = 1e-6); if (a < c) { var h = a; var k = c; } else (h = c), (k = a); if (b < d) { var l = b; var m = d; } else (l = d), (m = b); if (a === c) return l <= g && g <= m && a - e <= f && f <= a + e; if (b === d) return h <= f && f <= k && b - e <= g && g <= b + e; k += e; h -= e; if (h <= f && f <= k && ((m += e), (l -= e), l <= g && g <= m)) if (k - h > m - l) if (a - c > e || c - a > e) { if (((f = ((d - b) / (c - a)) * (f - a) + b), f - e <= g && g <= f + e)) return !0; } else return !0; else if (b - d > e || d - b > e) { if (((g = ((c - a) / (d - b)) * (g - b) + a), g - e <= f && f <= g + e)) return !0; } else return !0; return !1; }, Js: function (a, b, c, d, e, f, g, h, k, l, m, n) { if (H.Tb(a, b, g, h, n, c, d) && H.Tb(a, b, g, h, n, e, f)) return H.Tb(a, b, g, h, n, l, m); var p = (a + c) / 2, q = (b + d) / 2, r = (c + e) / 2, u = (d + f) / 2; e = (e + g) / 2; f = (f + h) / 2; d = (p + r) / 2; c = (q + u) / 2; r = (r + e) / 2; u = (u + f) / 2; var x = (d + r) / 2, v = (c + u) / 2; return H.Js(a, b, p, q, d, c, x, v, k, l, m, n) || H.Js(x, v, r, u, e, f, g, h, k, l, m, n); }, ny: function (a, b, c, d, e, f, g, h, k) { var l = (c + e) / 2, m = (d + f) / 2; k.h( (((a + c) / 2 + l) / 2 + (l + (e + g) / 2) / 2) / 2, (((b + d) / 2 + m) / 2 + (m + (f + h) / 2) / 2) / 2, ); return k; }, my: function (a, b, c, d, e, f, g, h) { var k = (c + e) / 2, l = (d + f) / 2; return Tb( ((a + c) / 2 + k) / 2, ((b + d) / 2 + l) / 2, (k + (e + g) / 2) / 2, (l + (f + h) / 2) / 2, ); }, Sl: function (a, b, c, d, e, f, g, h, k, l) { if (H.Tb(a, b, g, h, k, c, d) && H.Tb(a, b, g, h, k, e, f)) Bc(l, a, b, 0, 0), Bc(l, g, h, 0, 0); else { var m = (a + c) / 2, n = (b + d) / 2, p = (c + e) / 2, q = (d + f) / 2; e = (e + g) / 2; f = (f + h) / 2; d = (m + p) / 2; c = (n + q) / 2; p = (p + e) / 2; q = (q + f) / 2; var r = (d + p) / 2, u = (c + q) / 2; H.Sl(a, b, m, n, d, c, r, u, k, l); H.Sl(r, u, p, q, e, f, g, h, k, l); } return l; }, Ae: function (a, b, c, d, e, f, g, h, k, l) { if (H.Tb(a, b, g, h, k, c, d) && H.Tb(a, b, g, h, k, e, f)) 0 === l.length && (l.push(a), l.push(b)), l.push(g), l.push(h); else { var m = (a + c) / 2, n = (b + d) / 2, p = (c + e) / 2, q = (d + f) / 2; e = (e + g) / 2; f = (f + h) / 2; d = (m + p) / 2; c = (n + q) / 2; p = (p + e) / 2; q = (q + f) / 2; var r = (d + p) / 2, u = (c + q) / 2; H.Ae(a, b, m, n, d, c, r, u, k, l); H.Ae(r, u, p, q, e, f, g, h, k, l); } return l; }, vv: function (a, b, c, d, e, f, g, h, k, l) { if (H.Tb(a, b, e, f, l, c, d)) return H.Tb(a, b, e, f, l, h, k); var m = (a + c) / 2, n = (b + d) / 2; c = (c + e) / 2; d = (d + f) / 2; var p = (m + c) / 2, q = (n + d) / 2; return H.vv(a, b, m, n, p, q, g, h, k, l) || H.vv(p, q, c, d, e, f, g, h, k, l); }, hA: function (a, b, c, d, e, f, g) { g.h(((a + c) / 2 + (c + e) / 2) / 2, ((b + d) / 2 + (d + f) / 2) / 2); return g; }, uv: function (a, b, c, d, e, f, g, h) { if (H.Tb(a, b, e, f, g, c, d)) Bc(h, a, b, 0, 0), Bc(h, e, f, 0, 0); else { var k = (a + c) / 2, l = (b + d) / 2; c = (c + e) / 2; d = (d + f) / 2; var m = (k + c) / 2, n = (l + d) / 2; H.uv(a, b, k, l, m, n, g, h); H.uv(m, n, c, d, e, f, g, h); } return h; }, mq: function (a, b, c, d, e, f, g, h) { if (H.Tb(a, b, e, f, g, c, d)) 0 === h.length && (h.push(a), h.push(b)), h.push(e), h.push(f); else { var k = (a + c) / 2, l = (b + d) / 2; c = (c + e) / 2; d = (d + f) / 2; var m = (k + c) / 2, n = (l + d) / 2; H.mq(a, b, k, l, m, n, g, h); H.mq(m, n, c, d, e, f, g, h); } return h; }, Op: function (a, b, c, d, e, f, g, h, k, l, m, n, p, q) { if (H.Tb(a, b, g, h, p, c, d) && H.Tb(a, b, g, h, p, e, f)) { var r = (a - g) * (l - n) - (b - h) * (k - m); if (0 === r) return !1; p = ((a * h - b * g) * (k - m) - (a - g) * (k * n - l * m)) / r; r = ((a * h - b * g) * (l - n) - (b - h) * (k * n - l * m)) / r; if ((k > m ? k - m : m - k) < (l > n ? l - n : n - l)) { if ((b < h ? (g = b) : ((g = h), (h = b)), r < g || r > h)) return !1; } else if ((a < g ? (h = a) : ((h = g), (g = a)), p < h || p > g)) return !1; q.h(p, r); return !0; } r = (a + c) / 2; var u = (b + d) / 2; c = (c + e) / 2; d = (d + f) / 2; e = (e + g) / 2; f = (f + h) / 2; var x = (r + c) / 2, v = (u + d) / 2; c = (c + e) / 2; d = (d + f) / 2; var z = (x + c) / 2, y = (v + d) / 2, B = (m - k) * (m - k) + (n - l) * (n - l), C = !1; H.Op(a, b, r, u, x, v, z, y, k, l, m, n, p, q) && ((a = (q.x - k) * (q.x - k) + (q.y - l) * (q.y - l)), a < B && ((B = a), (C = !0))); a = q.x; b = q.y; H.Op(z, y, c, d, e, f, g, h, k, l, m, n, p, q) && ((q.x - k) * (q.x - k) + (q.y - l) * (q.y - l) < B ? (C = !0) : q.h(a, b)); return C; }, Pp: function (a, b, c, d, e, f, g, h, k, l, m, n, p) { var q = 0; if (H.Tb(a, b, g, h, p, c, d) && H.Tb(a, b, g, h, p, e, f)) { p = (a - g) * (l - n) - (b - h) * (k - m); if (0 === p) return q; var r = ((a * h - b * g) * (k - m) - (a - g) * (k * n - l * m)) / p, u = ((a * h - b * g) * (l - n) - (b - h) * (k * n - l * m)) / p; if (r >= m) return q; if ((k > m ? k - m : m - k) < (l > n ? l - n : n - l)) { if ((b < h ? ((a = b), (b = h)) : (a = h), u < a || u > b)) return q; } else if ((a < g ? ((b = a), (a = g)) : (b = g), r < b || r > a)) return q; 0 < p ? q++ : 0 > p && q--; } else { r = (a + c) / 2; u = (b + d) / 2; var x = (c + e) / 2, v = (d + f) / 2; e = (e + g) / 2; f = (f + h) / 2; d = (r + x) / 2; c = (u + v) / 2; x = (x + e) / 2; v = (v + f) / 2; var z = (d + x) / 2, y = (c + v) / 2; q += H.Pp(a, b, r, u, d, c, z, y, k, l, m, n, p); q += H.Pp(z, y, x, v, e, f, g, h, k, l, m, n, p); } return q; }, Si: function (a, b, c, d, e, f, g) { if (H.ca(a, c)) { b < d ? ((c = b), (b = d)) : (c = d); if (f < c) return g.h(a, c), !1; if (f > b) return g.h(a, b), !1; g.h(a, f); return !0; } if (H.ca(b, d)) { a < c ? ((d = a), (a = c)) : (d = c); if (e < d) return g.h(d, b), !1; if (e > a) return g.h(a, b), !1; g.h(e, b); return !0; } e = ((a - e) * (a - c) + (b - f) * (b - d)) / ((c - a) * (c - a) + (d - b) * (d - b)); if (-5e-6 > e) return g.h(a, b), !1; if (1.000005 < e) return g.h(c, d), !1; g.h(a + e * (c - a), b + e * (d - b)); return !0; }, Ge: function (a, b, c, d, e, f, g, h, k) { if (H.w(a, c) && H.w(b, d)) return k.h(a, b), !1; if (H.ca(e, g)) return H.ca(a, c) ? (H.Si(a, b, c, d, e, f, k), !1) : H.Si(a, b, c, d, e, ((d - b) / (c - a)) * (e - a) + b, k); h = (h - f) / (g - e); if (H.ca(a, c)) { c = h * (a - e) + f; b < d ? ((e = b), (b = d)) : (e = d); if (c < e) return k.h(a, e), !1; if (c > b) return k.h(a, b), !1; k.h(a, c); return !0; } g = (d - b) / (c - a); if (H.ca(h, g)) return H.Si(a, b, c, d, e, f, k), !1; e = (g * a - h * e + f - b) / (g - h); if (H.ca(g, 0)) { a < c ? ((d = a), (a = c)) : (d = c); if (e < d) return k.h(d, b), !1; if (e > a) return k.h(a, b), !1; k.h(e, b); return !0; } return H.Si(a, b, c, d, e, g * (e - a) + b, k); }, eA: function (a, b, c, d, e) { return H.Ge(c.x, c.y, d.x, d.y, a.x, a.y, b.x, b.y, e); }, dA: function (a, b, c, d, e, f, g, h, k, l) { function m(c, d) { var e = (c - a) * (c - a) + (d - b) * (d - b); e < n && ((n = e), k.h(c, d)); } var n = Infinity; m(k.x, k.y); var p = 0, q = 0, r = 0, u = 0; e < g ? ((p = e), (q = g)) : ((p = g), (q = e)); f < h ? ((r = e), (u = g)) : ((r = g), (u = e)); p = (q - p) / 2 + l; l = (u - r) / 2 + l; e = (e + g) / 2; f = (f + h) / 2; if (0 === p || 0 === l) return k; if (0.5 > (c > a ? c - a : a - c)) { p = 1 - ((c - e) * (c - e)) / (p * p); if (0 > p) return k; p = Math.sqrt(p); d = -l * p + f; m(c, l * p + f); m(c, d); } else { c = (d - b) / (c - a); d = 1 / (p * p) + (c * c) / (l * l); h = (2 * c * (b - c * a)) / (l * l) - (2 * c * f) / (l * l) - (2 * e) / (p * p); p = h * h - 4 * d * ((2 * c * a * f) / (l * l) - (2 * b * f) / (l * l) + (f * f) / (l * l) + (e * e) / (p * p) - 1 + ((b - c * a) * (b - c * a)) / (l * l)); if (0 > p) return k; p = Math.sqrt(p); l = (-h + p) / (2 * d); m(l, c * l - c * a + b); p = (-h - p) / (2 * d); m(p, c * p - c * a + b); } return k; }, Tc: function (a, b, c, d, e, f, g, h, k) { var l = 1e21, m = a, n = b; if (H.Ge(a, b, a, d, e, f, g, h, k)) { var p = (k.x - e) * (k.x - e) + (k.y - f) * (k.y - f); p < l && ((l = p), (m = k.x), (n = k.y)); } H.Ge(c, b, c, d, e, f, g, h, k) && ((p = (k.x - e) * (k.x - e) + (k.y - f) * (k.y - f)), p < l && ((l = p), (m = k.x), (n = k.y))); H.Ge(a, b, c, b, e, f, g, h, k) && ((b = (k.x - e) * (k.x - e) + (k.y - f) * (k.y - f)), b < l && ((l = b), (m = k.x), (n = k.y))); H.Ge(a, d, c, d, e, f, g, h, k) && ((a = (k.x - e) * (k.x - e) + (k.y - f) * (k.y - f)), a < l && ((l = a), (m = k.x), (n = k.y))); k.h(m, n); return 1e21 > l; }, cA: function (a, b, c, d, e, f, g, h, k) { c = a - c; g = e - g; 0 === c || 0 === g ? 0 === c ? ((b = (f - h) / g), (h = a), (e = b * h + (f - b * e))) : ((f = (b - d) / c), (h = e), (e = f * h + (b - f * a))) : ((d = (b - d) / c), (h = (f - h) / g), (a = b - d * a), (h = (f - h * e - a) / (d - h)), (e = d * h + a)); k.h(h, e); return k; }, Zs: function (a, b, c) { var d = b.x, e = b.y, f = c.x, g = c.y, h = a.left, k = a.right, l = a.top, m = a.bottom; return d === f ? (e < g ? ((f = e), (e = g)) : (f = g), h <= d && d <= k && f <= m && e >= l) : e === g ? (d < f ? ((g = d), (d = f)) : (g = f), l <= e && e <= m && g <= k && d >= h) : a.da(b) || a.da(c) || H.Ys(h, l, k, l, d, e, f, g) || H.Ys(k, l, k, m, d, e, f, g) || H.Ys(k, m, h, m, d, e, f, g) || H.Ys(h, m, h, l, d, e, f, g) ? !0 : !1; }, Ys: function (a, b, c, d, e, f, g, h) { return ( 0 >= H.Ls(a, b, c, d, e, f) * H.Ls(a, b, c, d, g, h) && 0 >= H.Ls(e, f, g, h, a, b) * H.Ls(e, f, g, h, c, d) ); }, Ls: function (a, b, c, d, e, f) { c -= a; d -= b; a = e - a; b = f - b; f = a * d - b * c; 0 === f && ((f = a * c + b * d), 0 < f && ((f = (a - c) * c + (b - d) * d), 0 > f && (f = 0))); return 0 > f ? -1 : 0 < f ? 1 : 0; }, jq: function (a) { 0 > a && (a += 360); 360 <= a && (a -= 360); return a; }, Zw: function (a, b, c, d, e, f) { var g = Math.PI; f || ((d *= g / 180), (e *= g / 180)); var h = d > e ? -1 : 1; f = []; var k = g / 2, l = d; d = Math.min(2 * g, Math.abs(e - d)); if (1e-5 > d) return ( (k = l + h * Math.min(d, k)), (h = a + c * Math.cos(l)), (l = b + c * Math.sin(l)), (a += c * Math.cos(k)), (b += c * Math.sin(k)), (c = (h + a) / 2), (k = (l + b) / 2), f.push([h, l, c, k, c, k, a, b]), f ); for (; 1e-5 < d; ) (e = l + h * Math.min(d, k)), f.push(H.vy(c, l, e, a, b)), (d -= Math.abs(e - l)), (l = e); return f; }, vy: function (a, b, c, d, e) { var f = (c - b) / 2, g = a * Math.cos(f), h = a * Math.sin(f), k = -h, l = g * g + k * k, m = l + g * g + k * h; l = ((4 / 3) * (Math.sqrt(2 * l * m) - m)) / (g * h - k * g); h = g - l * k; g = k + l * g; k = -g; l = f + b; f = Math.cos(l); l = Math.sin(l); return [ d + a * Math.cos(b), e + a * Math.sin(b), d + h * f - g * l, e + h * l + g * f, d + h * f - k * l, e + h * l + k * f, d + a * Math.cos(c), e + a * Math.sin(c), ]; }, Wp: function (a, b, c, d, e, f, g) { c = Math.floor((a - c) / e) * e + c; d = Math.floor((b - d) / f) * f + d; var h = c; c + e - a < e / 2 && (h = c + e); a = d; d + f - b < f / 2 && (a = d + f); g.h(h, a); return g; }, jx: function (a, b) { var c = Math.max(a, b); a = Math.min(a, b); var d; do (b = c % a), (c = d = a), (a = b); while (0 < b); return d; }, Ay: function (a, b, c, d) { var e = 0 > c, f = 0 > d; if (a < b) { var g = 1; var h = 0; } else (g = 0), (h = 1); var k = 0 === g ? a : b; var l = 0 === g ? c : d; if (0 === g ? e : f) l = -l; g = h; c = 0 === g ? c : d; if (0 === g ? e : f) c = -c; return H.By(k, 0 === g ? a : b, l, c, 0, 0); }, By: function (a, b, c, d, e, f) { if (0 < d) if (0 < c) { e = a * a; f = b * b; a *= c; var g = b * d, h = -f + g, k = -f + Math.sqrt(a * a + g * g); b = h; for (var l = 0; 9999999999 > l; ++l) { b = 0.5 * (h + k); if (b === h || b === k) break; var m = a / (b + e), n = g / (b + f); m = m * m + n * n - 1; if (0 < m) h = b; else if (0 > m) k = b; else break; } c = (e * c) / (b + e) - c; d = (f * d) / (b + f) - d; c = Math.sqrt(c * c + d * d); } else c = Math.abs(d - b); else (d = a * a - b * b), (f = a * c), f < d ? ((d = f / d), (f = b * Math.sqrt(Math.abs(1 - d * d))), (c = a * d - c), (c = Math.sqrt(c * c + f * f))) : (c = Math.abs(c - a)); return c; }, Ke: new tb(), Bm: new tb(), }; H.za = H.Zz; function $d(a) { nb(this); this.v = !1; void 0 === a && (a = ae); this.va = a; this.Bc = this.mc = this.bd = this.ad = 0; this.hj = new E(); this.mr = this.hj.Ba; this.Vq = new N().freeze(); this.ra = !0; this.Nm = this.zk = null; this.Om = NaN; this.df = Tc; this.ef = hd; this.cl = this.el = NaN; this.Ff = be; } $d.prototype.copy = function () { var a = new $d(); a.va = this.va; a.ad = this.ad; a.bd = this.bd; a.mc = this.mc; a.Bc = this.Bc; for (var b = this.hj.j, c = b.length, d = a.hj, e = 0; e < c; e++) { var f = b[e].copy(); d.add(f); } a.mr = this.mr; a.Vq.assign(this.Vq); a.ra = this.ra; a.zk = this.zk; a.Nm = this.Nm; a.Om = this.Om; a.df = this.df.I(); a.ef = this.ef.I(); a.el = this.el; a.cl = this.cl; a.Ff = this.Ff; return a; }; t = $d.prototype; t.ga = function () { this.freeze(); Object.freeze(this); return this; }; t.freeze = function () { this.v = !0; var a = this.figures; a.freeze(); a = a.j; for (var b = a.length, c = 0; c < b; c++) a[c].freeze(); return this; }; t.ha = function () { Object.isFrozen(this) && A('cannot thaw constant: ' + this); this.v = !1; var a = this.figures; a.ha(); a = a.j; for (var b = a.length, c = 0; c < b; c++) a[c].ha(); return this; }; t.Qa = function (a) { if (!(a instanceof $d)) return !1; if (this.type !== a.type) return this.type === ce && a.type === ae ? de(this, a) : a.type === ce && this.type === ae ? de(a, this) : !1; if (this.type === ae) { var b = this.figures.j; a = a.figures.j; var c = b.length; if (c !== a.length) return !1; for (var d = 0; d < c; d++) if (!b[d].Qa(a[d])) return !1; return !0; } return ( H.w(this.startX, a.startX) && H.w(this.startY, a.startY) && H.w(this.endX, a.endX) && H.w(this.endY, a.endY) ); }; function de(a, b) { return a.type !== ce || b.type !== ae ? !1 : 1 === b.figures.count && ((b = b.figures.N(0)), 1 === b.segments.count && H.w(a.startX, b.startX) && H.w(a.startY, b.startY) && ((b = b.segments.N(0)), b.type === ie && H.w(a.endX, b.endX) && H.w(a.endY, b.endY))) ? !0 : !1; } function je(a) { return a.toString(); } t.fb = function (a) { a.classType === $d && (this.type = a); }; t.toString = function (a) { void 0 === a && (a = -1); switch (this.type) { case ce: return 0 > a ? 'M' + this.startX.toString() + ' ' + this.startY.toString() + 'L' + this.endX.toString() + ' ' + this.endY.toString() : 'M' + this.startX.toFixed(a) + ' ' + this.startY.toFixed(a) + 'L' + this.endX.toFixed(a) + ' ' + this.endY.toFixed(a); case ke: var b = new N(this.startX, this.startY, 0, 0); b.Wv(this.endX, this.endY, 0, 0); return 0 > a ? 'M' + b.x.toString() + ' ' + b.y.toString() + 'H' + b.right.toString() + 'V' + b.bottom.toString() + 'H' + b.left.toString() + 'z' : 'M' + b.x.toFixed(a) + ' ' + b.y.toFixed(a) + 'H' + b.right.toFixed(a) + 'V' + b.bottom.toFixed(a) + 'H' + b.left.toFixed(a) + 'z'; case le: b = new N(this.startX, this.startY, 0, 0); b.Wv(this.endX, this.endY, 0, 0); if (0 > a) return ( (a = b.left.toString() + ' ' + (b.y + b.height / 2).toString()), 'M' + a + 'A' + (b.width / 2).toString() + ' ' + (b.height / 2).toString() + ' 0 0 1 ' + (b.right.toString() + ' ' + (b.y + b.height / 2).toString()) + 'A' + (b.width / 2).toString() + ' ' + (b.height / 2).toString() + ' 0 0 1 ' + a ); var c = b.left.toFixed(a) + ' ' + (b.y + b.height / 2).toFixed(a); return ( 'M' + c + 'A' + (b.width / 2).toFixed(a) + ' ' + (b.height / 2).toFixed(a) + ' 0 0 1 ' + (b.right.toFixed(a) + ' ' + (b.y + b.height / 2).toFixed(a)) + 'A' + (b.width / 2).toFixed(a) + ' ' + (b.height / 2).toFixed(a) + ' 0 0 1 ' + c ); case ae: b = ''; c = this.figures.j; for (var d = c.length, e = 0; e < d; e++) { var f = c[e]; 0 < e && (b += ' x '); f.isFilled && (b += 'F '); b += f.toString(a); } return b; default: return this.type.toString(); } }; function me(a, b) { function c() { return u >= B - 1 ? !0 : null !== k[u + 1].match(/[UuBbMmZzLlHhVvCcSsQqTtAaFfXx]/); } function d() { u++; return k[u]; } function e() { var a = new G(parseFloat(d()), parseFloat(d())); x === x.toLowerCase() && ((a.x = y.x + a.x), (a.y = y.y + a.y)); return a; } function f() { return (y = e()); } function g() { return (z = e()); } function h() { var a = v.toLowerCase(); return 'c' !== a && 's' !== a && 'q' !== a && 't' !== a ? y : new G(2 * y.x - z.x, 2 * y.y - z.y); } void 0 === b && (b = !1); a = a.replace(/,/gm, ' '); a = a.replace(/([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])/gm, '$1 $2'); a = a.replace(/([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])/gm, '$1 $2'); a = a.replace(/([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])([^\s])/gm, '$1 $2'); a = a.replace(/([^\s])([UuBbMmZzLlHhVvCcSsQqTtAaFfXx])/gm, '$1 $2'); a = a.replace(/([0-9])([+\-])/gm, '$1 $2'); a = a.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm, '$1 $3 $4 '); a = a.replace(/[\s\r\t\n]+/gm, ' '); a = a.replace(/^\s+|\s+$/g, ''); var k = a.split(' '); for (a = 0; a < k.length; a++) { var l = k[a]; if (null !== l.match(/(\.[0-9]*)(\.)/gm)) { for (var m = Ka(), n = '', p = !1, q = 0; q < l.length; q++) { var r = l[q]; '.' !== r || p ? ('.' === r ? (m.push(n), (n = '.')) : (n += r)) : ((p = !0), (n += r)); } m.push(n); k.splice(a, 1); for (l = 0; l < m.length; l++) k.splice(a + l, 0, m[l]); a += m.length - 1; Oa(m); } } var u = -1, x = '', v = ''; m = new G(0, 0); var z = new G(0, 0), y = new G(0, 0), B = k.length; a = ne(null); n = l = !1; p = !0; for (q = null; !(u >= B - 1); ) if (((v = x), (x = d()), '' !== x)) switch (x.toUpperCase()) { case 'X': p = !0; n = l = !1; break; case 'M': q = f(); null === a.ec || !0 === p ? (oe(a, q.x, q.y, l, !n), (p = !1)) : a.moveTo(q.x, q.y); for (m = y; !c(); ) (q = f()), a.lineTo(q.x, q.y); break; case 'L': for (; !c(); ) (q = f()), a.lineTo(q.x, q.y); break; case 'H': for (; !c(); ) (y = new G((x === x.toLowerCase() ? y.x : 0) + parseFloat(d()), y.y)), a.lineTo(y.x, y.y); break; case 'V': for (; !c(); ) (y = new G(y.x, (x === x.toLowerCase() ? y.y : 0) + parseFloat(d()))), a.lineTo(y.x, y.y); break; case 'C': for (; !c(); ) { q = e(); r = g(); var C = f(); pe(a, q.x, q.y, r.x, r.y, C.x, C.y); } break; case 'S': for (; !c(); ) (q = h()), (r = g()), (C = f()), pe(a, q.x, q.y, r.x, r.y, C.x, C.y); break; case 'Q': for (; !c(); ) (q = g()), (r = f()), te(a, q.x, q.y, r.x, r.y); break; case 'T': for (; !c(); ) (z = q = h()), (r = f()), te(a, q.x, q.y, r.x, r.y); break; case 'B': for (; !c(); ) { q = parseFloat(d()); r = parseFloat(d()); C = parseFloat(d()); var I = parseFloat(d()), L = parseFloat(d()), J = L, U = !1; c() || ((J = parseFloat(d())), c() || (U = 0 !== parseFloat(d()))); x === x.toLowerCase() && ((C += y.x), (I += y.y)); a.arcTo(q, r, C, I, L, J, U); } break; case 'A': for (; !c(); ) (q = Math.abs(parseFloat(d()))), (r = Math.abs(parseFloat(d()))), (C = parseFloat(d())), (I = !!parseFloat(d())), (L = !!parseFloat(d())), (J = f()), ue(a, q, r, C, I, L, J.x, J.y); break; case 'Z': ve(a); y = m; break; case 'F': q = ''; for (r = 1; k[u + r]; ) if (null !== k[u + r].match(/[Uu]/)) r++; else if (null === k[u + r].match(/[UuBbMmZzLlHhVvCcSsQqTtAaFfXx]/)) r++; else { q = k[u + r]; break; } q.match(/[Mm]/) ? (l = !0) : 0 < a.ec.segments.length && (a.ec.isFilled = !0); break; case 'U': q = ''; for (r = 1; k[u + r]; ) if (null !== k[u + r].match(/[Ff]/)) r++; else if (null === k[u + r].match(/[UuBbMmZzLlHhVvCcSsQqTtAaFfXx]/)) r++; else { q = k[u + r]; break; } q.match(/[Mm]/) ? (n = !0) : a.tq(!1); } m = a.Ts; we = a; if (b) for (b = m.figures.iterator; b.next(); ) b.value.isFilled = !0; return m; } function xe(a, b) { for (var c = a.length, d = G.alloc(), e = 0; e < c; e++) { var f = a[e]; d.x = f[0]; d.y = f[1]; b.ta(d); f[0] = d.x; f[1] = d.y; d.x = f[2]; d.y = f[3]; b.ta(d); f[2] = d.x; f[3] = d.y; d.x = f[4]; d.y = f[5]; b.ta(d); f[4] = d.x; f[5] = d.y; d.x = f[6]; d.y = f[7]; b.ta(d); f[6] = d.x; f[7] = d.y; } G.free(d); } t.mv = function () { if (this.ra || this.mr !== this.figures.Ba) return !0; for (var a = this.figures.j, b = a.length, c = 0; c < b; c++) if (a[c].mv()) return !0; return !1; }; $d.prototype.computeBounds = function () { this.ra = !1; this.Nm = this.zk = null; this.Om = NaN; this.mr = this.figures.Ba; for (var a = this.figures.j, b = a.length, c = 0; c < b; c++) { var d = a[c]; d.ra = !1; var e = d.segments; d.ts = e.Ba; d = e.j; e = d.length; for (var f = 0; f < e; f++) { var g = d[f]; g.ra = !1; g.Le = null; } } a = this.Vq; a.ha(); isNaN(this.el) || isNaN(this.cl) ? a.h(0, 0, 0, 0) : a.h(0, 0, this.el, this.cl); ye(this, a, !1); Bc(a, 0, 0, 0, 0); a.freeze(); }; $d.prototype.Yw = function () { var a = new N(); ye(this, a, !0); return a; }; function ye(a, b, c) { switch (a.type) { case ce: case ke: case le: c ? b.h(a.ad, a.bd, 0, 0) : Bc(b, a.ad, a.bd, 0, 0); Bc(b, a.mc, a.Bc, 0, 0); break; case ae: var d = a.figures; a = d.j; d = d.length; for (var e = 0; e < d; e++) { var f = a[e]; c && 0 === e ? b.h(f.startX, f.startY, 0, 0) : Bc(b, f.startX, f.startY, 0, 0); for (var g = f.segments.j, h = g.length, k = f.startX, l = f.startY, m = 0; m < h; m++) { var n = g[m]; switch (n.type) { case ie: case ze: k = n.endX; l = n.endY; Bc(b, k, l, 0, 0); break; case Ae: H.Sl(k, l, n.point1X, n.point1Y, n.point2X, n.point2Y, n.endX, n.endY, 0.5, b); k = n.endX; l = n.endY; break; case Be: H.uv(k, l, n.point1X, n.point1Y, n.endX, n.endY, 0.5, b); k = n.endX; l = n.endY; break; case Ce: case De: var p = n.type === Ce ? Ee(n, f) : Fe(n, f, k, l), q = p.length; if (0 === q) { k = n.centerX; l = n.centerY; Bc(b, k, l, 0, 0); break; } n = null; for (var r = 0; r < q; r++) (n = p[r]), H.Sl(n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], 0.5, b); null !== n && ((k = n[6]), (l = n[7])); break; default: A('Unknown Segment type: ' + n.type); } } } break; default: A('Unknown Geometry type: ' + a.type); } } $d.prototype.normalize = function () { this.v && wa(this); var a = this.Yw(); this.offset(-a.x, -a.y); return new G(-a.x, -a.y); }; $d.prototype.offset = function (a, b) { this.v && wa(this); this.transform(1, 0, 0, 1, a, b); return this; }; $d.prototype.scale = function (a, b) { this.v && wa(this); this.transform(a, 0, 0, b, 0, 0); return this; }; $d.prototype.rotate = function (a, b, c) { this.v && wa(this); void 0 === b && (b = 0); void 0 === c && (c = 0); var d = Qc.alloc(); d.reset(); d.rotate(a, b, c); this.transform(d.m11, d.m12, d.m21, d.m22, d.dx, d.dy); Qc.free(d); return this; }; t = $d.prototype; t.transform = function (a, b, c, d, e, f) { switch (this.type) { case ce: case ke: case le: var g = this.ad; var h = this.bd; this.ad = g * a + h * c + e; this.bd = g * b + h * d + f; g = this.mc; h = this.Bc; this.mc = g * a + h * c + e; this.Bc = g * b + h * d + f; break; case ae: for (var k = this.figures.j, l = k.length, m = 0; m < l; m++) { var n = k[m]; g = n.startX; h = n.startY; n.startX = g * a + h * c + e; n.startY = g * b + h * d + f; n = n.segments.j; for (var p = n.length, q = 0; q < p; q++) { var r = n[q]; switch (r.type) { case ie: case ze: g = r.endX; h = r.endY; r.endX = g * a + h * c + e; r.endY = g * b + h * d + f; break; case Ae: g = r.point1X; h = r.point1Y; r.point1X = g * a + h * c + e; r.point1Y = g * b + h * d + f; g = r.point2X; h = r.point2Y; r.point2X = g * a + h * c + e; r.point2Y = g * b + h * d + f; g = r.endX; h = r.endY; r.endX = g * a + h * c + e; r.endY = g * b + h * d + f; break; case Be: g = r.point1X; h = r.point1Y; r.point1X = g * a + h * c + e; r.point1Y = g * b + h * d + f; g = r.endX; h = r.endY; r.endX = g * a + h * c + e; r.endY = g * b + h * d + f; break; case Ce: g = r.centerX; h = r.centerY; r.centerX = g * a + h * c + e; r.centerY = g * b + h * d + f; 0 !== b && ((g = (180 * Math.atan2(b, a)) / Math.PI), 0 > g && (g += 360), (r.startAngle += g)); 0 > a && ((r.startAngle = 180 - r.startAngle), (r.sweepAngle = -r.sweepAngle)); 0 > d && ((r.startAngle = -r.startAngle), (r.sweepAngle = -r.sweepAngle)); r.radiusX *= Math.sqrt(a * a + c * c); void 0 !== r.radiusY && (r.radiusY *= Math.sqrt(b * b + d * d)); break; case De: g = r.endX; h = r.endY; r.endX = g * a + h * c + e; r.endY = g * b + h * d + f; 0 !== b && ((g = (180 * Math.atan2(b, a)) / Math.PI), 0 > g && (g += 360), (r.xAxisRotation += g)); 0 > a && ((r.xAxisRotation = 180 - r.xAxisRotation), (r.isClockwiseArc = !r.isClockwiseArc)); 0 > d && ((r.xAxisRotation = -r.xAxisRotation), (r.isClockwiseArc = !r.isClockwiseArc)); r.radiusX *= Math.sqrt(a * a + c * c); r.radiusY *= Math.sqrt(b * b + d * d); break; default: A('Unknown Segment type: ' + r.type); } } } } this.ra = !0; return this; }; t.da = function (a, b, c, d) { var e = a.x; a = a.y; for ( var f = this.bounds.x - 20, g = 0, h, k, l, m, n, p = this.figures.j, q = p.length, r = 0; r < q; r++ ) { var u = p[r]; if (u.isFilled) { if (c && u.da(e, a, b)) return !0; var x = u.segments; h = u.startX; k = u.startY; for (var v = h, z = k, y = x.j, B = 0; B <= x.length; B++) { var C = void 0; if (B !== x.length) { C = y[B]; var I = C.type; m = C.endX; n = C.endY; } else (I = ie), (m = v), (n = z); switch (I) { case ze: v = Ge(e, a, f, a, h, k, v, z); if (isNaN(v)) return !0; g += v; v = m; z = n; break; case ie: h = Ge(e, a, f, a, h, k, m, n); if (isNaN(h)) return !0; g += h; break; case Ae: l = H.Pp(h, k, C.point1X, C.point1Y, C.point2X, C.point2Y, m, n, f, a, e, a, 0.5); g += l; break; case Be: l = H.Pp( h, k, (h + 2 * C.point1X) / 3, (k + 2 * C.point1Y) / 3, (2 * C.point1X + m) / 3, (2 * C.point1Y + n) / 3, m, n, f, a, e, a, 0.5, ); g += l; break; case Ce: case De: I = C.type === Ce ? Ee(C, u) : Fe(C, u, h, k); var L = I.length; if (0 === L) { h = Ge(e, a, f, a, h, k, C.centerX, C.centerY); if (isNaN(h)) return !0; g += h; break; } C = null; for (var J = 0; J < L; J++) { C = I[J]; if (0 === J) { l = Ge(e, a, f, a, h, k, C[0], C[1]); if (isNaN(l)) return !0; g += l; } l = H.Pp(C[0], C[1], C[2], C[3], C[4], C[5], C[6], C[7], f, a, e, a, 0.5); g += l; } null !== C && ((m = C[6]), (n = C[7])); break; default: A('Unknown Segment type: ' + C.type); } h = m; k = n; } if (0 !== g) return !0; g = 0; } else if (u.da(e, a, d ? b : b + 2)) return !0; } return 0 !== g; }; function Ge(a, b, c, d, e, f, g, h) { if (H.Tb(e, f, g, h, 0.05, a, b)) return NaN; var k = (a - c) * (f - h); if (0 === k) return 0; var l = ((a * d - b * c) * (e - g) - (a - c) * (e * h - f * g)) / k; b = ((a * d - b * c) * (f - h)) / k; if (l >= a) return 0; if ((e > g ? e - g : g - e) < (f > h ? f - h : h - f)) if (f < h) { if (b < f || b > h) return 0; } else { if (b < h || b > f) return 0; } else if (e < g) { if (l < e || l > g) return 0; } else if (l < g || l > e) return 0; return 0 < k ? 1 : -1; } function He(a, b, c, d) { a = a.figures.j; for (var e = a.length, f = 0; f < e; f++) if (a[f].da(b, c, d)) return !0; return !1; } t.dv = function (a, b) { 0 > a ? (a = 0) : 1 < a && (a = 1); void 0 === b && (b = new G()); if (this.type === ce) return ( b.h( this.startX + a * (this.endX - this.startX), this.startY + a * (this.endY - this.startY), ), b ); for ( var c = this.flattenedSegments, d = this.flattenedLengths, e = c.length, f = this.flattenedTotalLength * a, g = 0, h = 0; h < e; h++ ) { var k = d[h], l = k.length; for (a = 0; a < l; a++) { var m = k[a]; if (g + m >= f) return ( (d = (f - g) / m), (c = c[h]), (e = c[2 * a]), (h = c[2 * a + 1]), b.h(e + (c[2 * a + 2] - e) * d, h + (c[2 * a + 3] - h) * d), b ); g += m; } } b.h(NaN, NaN); return b; }; t.kx = function (a) { if (this.type === ce) { var b = this.startX, c = this.startY, d = this.endX, e = this.endY; if (b !== d || c !== e) { var f = a.x; a = a.y; if (b === d) { if (c < e) { var g = c; d = e; } else (g = e), (d = c); return a <= g ? g === c ? 0 : 1 : a >= d ? d === c ? 0 : 1 : Math.abs(a - c) / (d - g); } return c === e ? (b < d ? (g = b) : ((g = d), (d = b)), f <= g ? (g === b ? 0 : 1) : f >= d ? (d === b ? 0 : 1) : Math.abs(f - b) / (d - g)) : ((f - b) * (f - b) + (a - c) * (a - c)) / ((d - b) * (d - b) + (e - c) * (e - c)); } } else if (this.type === ke) { g = this.startX; var h = this.startY, k = this.endX; e = this.endY; if (g !== k || h !== e) { b = k - g; c = e - h; f = 2 * b + 2 * c; d = a.x; a = a.y; d = Math.min(Math.max(d, g), k); a = Math.min(Math.max(a, h), e); g = Math.abs(d - g); k = Math.abs(d - k); h = Math.abs(a - h); e = Math.abs(a - e); var l = Math.min(g, k, h, e); if (l === h) return d / f; if (l === k) return (b + a) / f; if (l === e) return (2 * b + c - d) / f; if (l === g) return (2 * b + 2 * c - a) / f; } } else { b = this.flattenedSegments; c = this.flattenedLengths; f = this.flattenedTotalLength; d = G.alloc(); e = Infinity; h = g = 0; k = b.length; for (var m = (l = 0), n = 0; n < k; n++) for (var p = b[n], q = c[n], r = p.length, u = 0; u < r; u += 2) { var x = p[u], v = p[u + 1]; if (0 !== u) { H.Si(l, m, x, v, a.x, a.y, d); var z = (d.x - a.x) * (d.x - a.x) + (d.y - a.y) * (d.y - a.y); z < e && ((e = z), (g = h), (g += Math.sqrt((d.x - l) * (d.x - l) + (d.y - m) * (d.y - m)))); h += q[(u - 2) / 2]; } l = x; m = v; } G.free(d); a = g / f; return 0 > a ? 0 : 1 < a ? 1 : a; } return 0; }; function Te(a) { if (null === a.zk) { var b = (a.zk = []), c = (a.Nm = []), d = [], e = []; if (a.type === ce) d.push(a.startX), d.push(a.startY), d.push(a.endX), d.push(a.endY), b.push(d), e.push( Math.sqrt( (a.startX - a.endX) * (a.startX - a.endX) + (a.startY - a.endY) * (a.startY - a.endY), ), ), c.push(e); else if (a.type === ke) d.push(a.startX), d.push(a.startY), d.push(a.endX), d.push(a.startY), d.push(a.endX), d.push(a.endY), d.push(a.startX), d.push(a.endY), d.push(a.startX), d.push(a.startY), b.push(d), e.push(Math.abs(a.startX - a.endX)), e.push(Math.abs(a.startY - a.endY)), e.push(Math.abs(a.startX - a.endX)), e.push(Math.abs(a.startY - a.endY)), c.push(e); else if (a.type === le) { var f = new Ue(); f.startX = a.endX; f.startY = (a.startY + a.endY) / 2; var g = new Ve(Ce); g.startAngle = 0; g.sweepAngle = 360; g.centerX = (a.startX + a.endX) / 2; g.centerY = (a.startY + a.endY) / 2; g.radiusX = Math.abs(a.startX - a.endX) / 2; g.radiusY = Math.abs(a.startY - a.endY) / 2; f.add(g); a = Ee(g, f); e = a.length; if (0 === e) d.push(g.centerX), d.push(g.centerY); else { g = f.startX; f = f.startY; for (var h = 0; h < e; h++) { var k = a[h]; H.Ae(g, f, k[2], k[3], k[4], k[5], k[6], k[7], 0.5, d); g = k[6]; f = k[7]; } } b.push(d); c.push(We(d)); } else for (a = a.figures.iterator; a.next(); ) { e = a.value; d = []; d.push(e.startX); d.push(e.startY); g = e.startX; f = e.startY; h = g; k = f; for (var l = e.segments.j, m = l.length, n = 0; n < m; n++) { var p = l[n]; switch (p.type) { case ze: 4 <= d.length && (b.push(d), c.push(We(d))); d = []; d.push(p.endX); d.push(p.endY); g = p.endX; f = p.endY; h = g; k = f; break; case ie: d.push(p.endX); d.push(p.endY); g = p.endX; f = p.endY; break; case Ae: H.Ae(g, f, p.point1X, p.point1Y, p.point2X, p.point2Y, p.endX, p.endY, 0.5, d); g = p.endX; f = p.endY; break; case Be: H.mq(g, f, p.point1X, p.point1Y, p.endX, p.endY, 0.5, d); g = p.endX; f = p.endY; break; case Ce: var q = Ee(p, e), r = q.length; if (0 === r) { d.push(p.centerX); d.push(p.centerY); g = p.centerX; f = p.centerY; break; } for (var u = 0; u < r; u++) { var x = q[u]; H.Ae(g, f, x[2], x[3], x[4], x[5], x[6], x[7], 0.5, d); g = x[6]; f = x[7]; } break; case De: q = Fe(p, e, g, f); r = q.length; if (0 === r) { d.push(p.centerX); d.push(p.centerY); g = p.centerX; f = p.centerY; break; } for (u = 0; u < r; u++) (x = q[u]), H.Ae(g, f, x[2], x[3], x[4], x[5], x[6], x[7], 0.5, d), (g = x[6]), (f = x[7]); break; default: A('Segment not of valid type: ' + p.type); } p.isClosed && (d.push(h), d.push(k)); } 4 <= d.length && (b.push(d), c.push(We(d))); } } } function We(a) { for (var b = [], c = 0, d = 0, e = a.length, f = 0; f < e; f += 2) { var g = a[f], h = a[f + 1]; 0 !== f && b.push(Math.sqrt(Sb(c, d, g, h))); c = g; d = h; } return b; } t.add = function (a) { this.hj.add(a); return this; }; t.xm = function (a, b, c, d, e, f, g, h) { this.v && wa(this); this.df = new O(a, b, e, f).freeze(); this.ef = new O(c, d, g, h).freeze(); return this; }; pa.Object.defineProperties($d.prototype, { flattenedSegments: { get: function () { Te(this); return this.zk; }, }, flattenedLengths: { get: function () { Te(this); return this.Nm; }, }, flattenedTotalLength: { get: function () { var a = this.Om; if (isNaN(a)) { if (this.type === ce) { a = Math.abs(this.endX - this.startX); var b = Math.abs(this.endY - this.startY); a = Math.sqrt(a * a + b * b); } else if (this.type === ke) a = 2 * Math.abs(this.endX - this.startX) + 2 * Math.abs(this.endY - this.startY); else { b = this.flattenedLengths; for (var c = b.length, d = (a = 0); d < c; d++) for (var e = b[d], f = e.length, g = 0; g < f; g++) a += e[g]; } this.Om = a; } return a; }, }, type: { get: function () { return this.va; }, set: function (a) { this.va !== a && (this.v && wa(this, a), (this.va = a), (this.ra = !0)); }, }, startX: { get: function () { return this.ad; }, set: function (a) { this.ad !== a && (this.v && wa(this, a), (this.ad = a), (this.ra = !0)); }, }, startY: { get: function () { return this.bd; }, set: function (a) { this.bd !== a && (this.v && wa(this, a), (this.bd = a), (this.ra = !0)); }, }, endX: { get: function () { return this.mc; }, set: function (a) { this.mc !== a && (this.v && wa(this, a), (this.mc = a), (this.ra = !0)); }, }, endY: { get: function () { return this.Bc; }, set: function (a) { this.Bc !== a && (this.v && wa(this, a), (this.Bc = a), (this.ra = !0)); }, }, figures: { get: function () { return this.hj; }, set: function (a) { this.hj !== a && (this.v && wa(this, a), (this.hj = a), (this.ra = !0)); }, }, spot1: { get: function () { return this.df; }, set: function (a) { this.v && wa(this, a); this.df = a.I(); }, }, spot2: { get: function () { return this.ef; }, set: function (a) { this.v && wa(this, a); this.ef = a.I(); }, }, defaultStretch: { get: function () { return this.Ff; }, set: function (a) { this.v && wa(this, a); this.Ff = a; }, }, bounds: { get: function () { this.mv() && this.computeBounds(); return this.Vq; }, }, }); $d.prototype.setSpots = $d.prototype.xm; $d.prototype.add = $d.prototype.add; $d.prototype.getFractionForPoint = $d.prototype.kx; $d.prototype.getPointAlongPath = $d.prototype.dv; $d.prototype.transform = $d.prototype.transform; $d.prototype.rotate = $d.prototype.rotate; $d.prototype.scale = $d.prototype.scale; $d.prototype.offset = $d.prototype.offset; $d.prototype.normalize = $d.prototype.normalize; $d.prototype.computeBoundsWithoutOrigin = $d.prototype.Yw; $d.prototype.equalsApprox = $d.prototype.Qa; var ce = new D($d, 'Line', 0), ke = new D($d, 'Rectangle', 1), le = new D($d, 'Ellipse', 2), ae = new D($d, 'Path', 3); $d.className = 'Geometry'; $d.stringify = je; $d.fillPath = function (a) { a = a.split(/[Xx]/); for (var b = a.length, c = '', d = 0; d < b; d++) { var e = a[d]; c = null !== e.match(/[Ff]/) ? 0 === d ? c + e : c + ('X' + (' ' === e[0] ? '' : ' ') + e) : c + ((0 === d ? '' : 'X ') + 'F' + (' ' === e[0] ? '' : ' ') + e); } return c; }; $d.parse = me; $d.Line = ce; $d.Rectangle = ke; $d.Ellipse = le; $d.Path = ae; function Ue(a, b, c, d) { nb(this); this.v = !1; void 0 === c && (c = !0); this.Cr = c; void 0 === d && (d = !0); this.Gr = d; void 0 !== a ? (this.ad = a) : (this.ad = 0); void 0 !== b ? (this.bd = b) : (this.bd = 0); this.Bl = new E(); this.ts = this.Bl.Ba; this.ra = !0; } Ue.prototype.copy = function () { var a = new Ue(); a.Cr = this.Cr; a.Gr = this.Gr; a.ad = this.ad; a.bd = this.bd; for (var b = this.Bl.j, c = b.length, d = a.Bl, e = 0; e < c; e++) { var f = b[e].copy(); d.add(f); } a.ts = this.ts; a.ra = this.ra; return a; }; t = Ue.prototype; t.Qa = function (a) { if (!(a instanceof Ue && H.w(this.startX, a.startX) && H.w(this.startY, a.startY))) return !1; var b = this.segments.j; a = a.segments.j; var c = b.length; if (c !== a.length) return !1; for (var d = 0; d < c; d++) if (!b[d].Qa(a[d])) return !1; return !0; }; t.toString = function (a) { void 0 === a && (a = -1); var b = 0 > a ? 'M' + this.startX.toString() + ' ' + this.startY.toString() : 'M' + this.startX.toFixed(a) + ' ' + this.startY.toFixed(a); for (var c = this.segments.j, d = c.length, e = 0; e < d; e++) b += ' ' + c[e].toString(a); return b; }; t.freeze = function () { this.v = !0; var a = this.segments; a.freeze(); var b = a.j; a = a.length; for (var c = 0; c < a; c++) b[c].freeze(); return this; }; t.ha = function () { this.v = !1; var a = this.segments; a.ha(); a = a.j; for (var b = a.length, c = 0; c < b; c++) a[c].ha(); return this; }; t.mv = function () { if (this.ra) return !0; var a = this.segments; if (this.ts !== a.Ba) return !0; a = a.j; for (var b = a.length, c = 0; c < b; c++) if (a[c].ra) return !0; return !1; }; t.add = function (a) { this.Bl.add(a); return this; }; t.da = function (a, b, c) { for ( var d = this.startX, e = this.startY, f = d, g = e, h = this.segments.j, k = h.length, l = 0; l < k; l++ ) { var m = h[l]; switch (m.type) { case ze: f = m.endX; g = m.endY; d = m.endX; e = m.endY; break; case ie: if (H.Tb(d, e, m.endX, m.endY, c, a, b)) return !0; d = m.endX; e = m.endY; break; case Ae: if (H.Js(d, e, m.point1X, m.point1Y, m.point2X, m.point2Y, m.endX, m.endY, 0.5, a, b, c)) return !0; d = m.endX; e = m.endY; break; case Be: if (H.vv(d, e, m.point1X, m.point1Y, m.endX, m.endY, 0.5, a, b, c)) return !0; d = m.endX; e = m.endY; break; case Ce: case De: var n = m.type === Ce ? Ee(m, this) : Fe(m, this, d, e), p = n.length; if (0 === p) { if (H.Tb(d, e, m.centerX, m.centerY, c, a, b)) return !0; d = m.centerX; e = m.centerY; break; } for (var q = null, r = 0; r < p; r++) if ( ((q = n[r]), (0 === r && H.Tb(d, e, q[0], q[1], c, a, b)) || H.Js(q[0], q[1], q[2], q[3], q[4], q[5], q[6], q[7], 0.5, a, b, c)) ) return !0; null !== q && ((d = q[6]), (e = q[7])); break; default: A('Unknown Segment type: ' + m.type); } if (m.isClosed && (d !== f || e !== g) && H.Tb(d, e, f, g, c, a, b)) return !0; } return !1; }; pa.Object.defineProperties(Ue.prototype, { isFilled: { get: function () { return this.Cr; }, set: function (a) { this.v && wa(this, a); this.Cr = a; }, }, isShadowed: { get: function () { return this.Gr; }, set: function (a) { this.v && wa(this, a); this.Gr = a; }, }, startX: { get: function () { return this.ad; }, set: function (a) { this.v && wa(this, a); this.ad = a; this.ra = !0; }, }, startY: { get: function () { return this.bd; }, set: function (a) { this.v && wa(this, a); this.bd = a; this.ra = !0; }, }, segments: { get: function () { return this.Bl; }, set: function (a) { this.v && wa(this, a); this.Bl = a; this.ra = !0; }, }, }); Ue.prototype.add = Ue.prototype.add; Ue.prototype.equalsApprox = Ue.prototype.Qa; Ue.className = 'PathFigure'; function Ve(a, b, c, d, e, f, g, h) { nb(this); this.v = !1; void 0 === a && (a = ie); this.va = a; void 0 !== b ? (this.mc = b) : (this.mc = 0); void 0 !== c ? (this.Bc = c) : (this.Bc = 0); void 0 === d && (d = 0); void 0 === e && (e = 0); void 0 === f && (f = 0); void 0 === g && (g = 0); a === De ? ((a = f % 360), 0 > a && (a += 360), (this.ue = a), (this.oi = 0), (this.pi = Math.max(d, 0)), (this.$g = Math.max(e, 0)), (this.il = 'boolean' === typeof g ? !!g : !1), (this.Fk = !!h)) : ((this.ue = d), (this.oi = e), a === Ce && (f = Math.max(f, 0)), (this.pi = f), 'number' === typeof g ? (a === Ce && (g = Math.max(g, 0)), (this.$g = g)) : (this.$g = 0), (this.Fk = this.il = !1)); this.mj = !1; this.ra = !0; this.Le = null; } Ve.prototype.copy = function () { var a = new Ve(); a.va = this.va; a.mc = this.mc; a.Bc = this.Bc; a.ue = this.ue; a.oi = this.oi; a.pi = this.pi; a.$g = this.$g; a.il = this.il; a.Fk = this.Fk; a.mj = this.mj; a.ra = this.ra; return a; }; t = Ve.prototype; t.Qa = function (a) { if (!(a instanceof Ve) || this.type !== a.type || this.isClosed !== a.isClosed) return !1; switch (this.type) { case ze: case ie: return H.w(this.endX, a.endX) && H.w(this.endY, a.endY); case Ae: return ( H.w(this.endX, a.endX) && H.w(this.endY, a.endY) && H.w(this.point1X, a.point1X) && H.w(this.point1Y, a.point1Y) && H.w(this.point2X, a.point2X) && H.w(this.point2Y, a.point2Y) ); case Be: return ( H.w(this.endX, a.endX) && H.w(this.endY, a.endY) && H.w(this.point1X, a.point1X) && H.w(this.point1Y, a.point1Y) ); case Ce: return ( H.w(this.startAngle, a.startAngle) && H.w(this.sweepAngle, a.sweepAngle) && H.w(this.centerX, a.centerX) && H.w(this.centerY, a.centerY) && H.w(this.radiusX, a.radiusX) && H.w(this.radiusY, a.radiusY) ); case De: return ( this.isClockwiseArc === a.isClockwiseArc && this.isLargeArc === a.isLargeArc && H.w(this.xAxisRotation, a.xAxisRotation) && H.w(this.endX, a.endX) && H.w(this.endY, a.endY) && H.w(this.radiusX, a.radiusX) && H.w(this.radiusY, a.radiusY) ); default: return !1; } }; t.fb = function (a) { a.classType === Ve && (this.type = a); }; t.toString = function (a) { void 0 === a && (a = -1); switch (this.type) { case ze: a = 0 > a ? 'M' + this.endX.toString() + ' ' + this.endY.toString() : 'M' + this.endX.toFixed(a) + ' ' + this.endY.toFixed(a); break; case ie: a = 0 > a ? 'L' + this.endX.toString() + ' ' + this.endY.toString() : 'L' + this.endX.toFixed(a) + ' ' + this.endY.toFixed(a); break; case Ae: a = 0 > a ? 'C' + this.point1X.toString() + ' ' + this.point1Y.toString() + ' ' + this.point2X.toString() + ' ' + this.point2Y.toString() + ' ' + this.endX.toString() + ' ' + this.endY.toString() : 'C' + this.point1X.toFixed(a) + ' ' + this.point1Y.toFixed(a) + ' ' + this.point2X.toFixed(a) + ' ' + this.point2Y.toFixed(a) + ' ' + this.endX.toFixed(a) + ' ' + this.endY.toFixed(a); break; case Be: a = 0 > a ? 'Q' + this.point1X.toString() + ' ' + this.point1Y.toString() + ' ' + this.endX.toString() + ' ' + this.endY.toString() : 'Q' + this.point1X.toFixed(a) + ' ' + this.point1Y.toFixed(a) + ' ' + this.endX.toFixed(a) + ' ' + this.endY.toFixed(a); break; case Ce: a = 0 > a ? 'B' + this.startAngle.toString() + ' ' + this.sweepAngle.toString() + ' ' + this.centerX.toString() + ' ' + this.centerY.toString() + ' ' + this.radiusX.toString() + ' ' + this.radiusY.toString() : 'B' + this.startAngle.toFixed(a) + ' ' + this.sweepAngle.toFixed(a) + ' ' + this.centerX.toFixed(a) + ' ' + this.centerY.toFixed(a) + ' ' + this.radiusX.toFixed(a) + ' ' + this.radiusY.toFixed(a); break; case De: a = 0 > a ? 'A' + this.radiusX.toString() + ' ' + this.radiusY.toString() + ' ' + this.xAxisRotation.toString() + ' ' + (this.isLargeArc ? 1 : 0) + ' ' + (this.isClockwiseArc ? 1 : 0) + ' ' + this.endX.toString() + ' ' + this.endY.toString() : 'A' + this.radiusX.toFixed(a) + ' ' + this.radiusY.toFixed(a) + ' ' + this.xAxisRotation.toFixed(a) + ' ' + (this.isLargeArc ? 1 : 0) + ' ' + (this.isClockwiseArc ? 1 : 0) + ' ' + this.endX.toFixed(a) + ' ' + this.endY.toFixed(a); break; default: a = this.type.toString(); } return a + (this.mj ? 'z' : ''); }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { this.v = !1; return this; }; t.close = function () { this.mj = !0; return this; }; function Ee(a, b) { if (null !== a.Le && !1 === b.ra) return a.Le; var c = a.radiusX, d = a.radiusY; void 0 === d && (d = c); if (0 === c || 0 === d) return (a.Le = []), a.Le; b = a.ue; var e = a.oi, f = H.Zw(0, 0, c < d ? c : d, a.startAngle, a.startAngle + a.sweepAngle, !1); if (c !== d) { var g = Qc.alloc(); g.reset(); c < d ? g.scale(1, d / c) : g.scale(c / d, 1); xe(f, g); Qc.free(g); } c = f.length; for (d = 0; d < c; d++) (g = f[d]), (g[0] += b), (g[1] += e), (g[2] += b), (g[3] += e), (g[4] += b), (g[5] += e), (g[6] += b), (g[7] += e); a.Le = f; return a.Le; } function Fe(a, b, c, d) { function e(a, b, c, d) { return ( (a * d < b * c ? -1 : 1) * Math.acos((a * c + b * d) / (Math.sqrt(a * a + b * b) * Math.sqrt(c * c + d * d))) ); } if (null !== a.Le && !1 === b.ra) return a.Le; b = a.pi; var f = a.$g; 0 === b && (b = 1e-4); 0 === f && (f = 1e-4); var g = (Math.PI / 180) * a.ue, h = a.il, k = a.Fk, l = a.mc, m = a.Bc, n = Math.cos(g), p = Math.sin(g), q = (n * (c - l)) / 2 + (p * (d - m)) / 2; g = (-p * (c - l)) / 2 + (n * (d - m)) / 2; var r = (q * q) / (b * b) + (g * g) / (f * f); 1 < r && ((b *= Math.sqrt(r)), (f *= Math.sqrt(r))); r = (h === k ? -1 : 1) * Math.sqrt((b * b * f * f - b * b * g * g - f * f * q * q) / (b * b * g * g + f * f * q * q)); isNaN(r) && (r = 0); h = (r * b * g) / f; r = (r * -f * q) / b; isNaN(h) && (h = 0); isNaN(r) && (r = 0); c = (c + l) / 2 + n * h - p * r; d = (d + m) / 2 + p * h + n * r; m = e(1, 0, (q - h) / b, (g - r) / f); n = (q - h) / b; l = (g - r) / f; q = (-q - h) / b; h = (-g - r) / f; g = e(n, l, q, h); q = (n * q + l * h) / (Math.sqrt(n * n + l * l) * Math.sqrt(q * q + h * h)); -1 >= q ? (g = Math.PI) : 1 <= q && (g = 0); !k && 0 < g && (g -= 2 * Math.PI); k && 0 > g && (g += 2 * Math.PI); k = b > f ? 1 : b / f; q = b > f ? f / b : 1; b = H.Zw(0, 0, b > f ? b : f, m, m + g, !0); f = Qc.alloc(); f.reset(); f.translate(c, d); f.rotate(a.ue, 0, 0); f.scale(k, q); xe(b, f); Qc.free(f); a.Le = b; return a.Le; } pa.Object.defineProperties(Ve.prototype, { isClosed: { get: function () { return this.mj; }, set: function (a) { this.mj !== a && ((this.mj = a), (this.ra = !0)); }, }, type: { get: function () { return this.va; }, set: function (a) { this.v && wa(this, a); this.va = a; this.ra = !0; }, }, endX: { get: function () { return this.mc; }, set: function (a) { this.v && wa(this, a); this.mc = a; this.ra = !0; }, }, endY: { get: function () { return this.Bc; }, set: function (a) { this.v && wa(this, a); this.Bc = a; this.ra = !0; }, }, point1X: { get: function () { return this.ue; }, set: function (a) { this.v && wa(this, a); this.ue = a; this.ra = !0; }, }, point1Y: { get: function () { return this.oi; }, set: function (a) { this.v && wa(this, a); this.oi = a; this.ra = !0; }, }, point2X: { get: function () { return this.pi; }, set: function (a) { this.v && wa(this, a); this.pi = a; this.ra = !0; }, }, point2Y: { get: function () { return this.$g; }, set: function (a) { this.v && wa(this, a); this.$g = a; this.ra = !0; }, }, centerX: { get: function () { return this.ue; }, set: function (a) { this.v && wa(this, a); this.ue = a; this.ra = !0; }, }, centerY: { get: function () { return this.oi; }, set: function (a) { this.v && wa(this, a); this.oi = a; this.ra = !0; }, }, radiusX: { get: function () { return this.pi; }, set: function (a) { 0 > a && ya(a, '>= zero', Ve, 'radiusX'); this.v && wa(this, a); this.pi = a; this.ra = !0; }, }, radiusY: { get: function () { return this.$g; }, set: function (a) { 0 > a && ya(a, '>= zero', Ve, 'radiusY'); this.v && wa(this, a); this.$g = a; this.ra = !0; }, }, startAngle: { get: function () { return this.mc; }, set: function (a) { this.mc !== a && (this.v && wa(this, a), (a %= 360), 0 > a && (a += 360), (this.mc = a), (this.ra = !0)); }, }, sweepAngle: { get: function () { return this.Bc; }, set: function (a) { this.v && wa(this, a); 360 < a && (a = 360); -360 > a && (a = -360); this.Bc = a; this.ra = !0; }, }, isClockwiseArc: { get: function () { return this.Fk; }, set: function (a) { this.v && wa(this, a); this.Fk = a; this.ra = !0; }, }, isLargeArc: { get: function () { return this.il; }, set: function (a) { this.v && wa(this, a); this.il = a; this.ra = !0; }, }, xAxisRotation: { get: function () { return this.ue; }, set: function (a) { a %= 360; 0 > a && (a += 360); this.v && wa(this, a); this.ue = a; this.ra = !0; }, }, }); Ve.prototype.equalsApprox = Ve.prototype.Qa; var ze = new D(Ve, 'Move', 0), ie = new D(Ve, 'Line', 1), Ae = new D(Ve, 'Bezier', 2), Be = new D(Ve, 'QuadraticBezier', 3), Ce = new D(Ve, 'Arc', 4), De = new D(Ve, 'SvgArc', 4); Ve.className = 'PathSegment'; Ve.Move = ze; Ve.Line = ie; Ve.Bezier = Ae; Ve.QuadraticBezier = Be; Ve.Arc = Ce; Ve.SvgArc = De; function Xe() { this.C = null; this.Cu = new G(0, 0).freeze(); this.St = new G(0, 0).freeze(); this.Oq = this.Vr = 0; this.Pq = 1; this.Kr = ''; this.Es = this.fr = !1; this.er = this.Rq = 0; this.Dg = this.tr = this.Er = !1; this.lr = null; this.Cs = 0; this.Qd = this.Bs = null; } Xe.prototype.copy = function () { var a = new Xe(); return this.clone(a); }; Xe.prototype.clone = function (a) { a.C = this.C; a.Cu.assign(this.viewPoint); a.St.assign(this.documentPoint); a.Vr = this.Vr; a.Oq = this.Oq; a.Pq = this.Pq; a.Kr = this.Kr; a.fr = this.fr; a.Es = this.Es; a.Rq = this.Rq; a.er = this.er; a.Er = this.Er; a.tr = this.tr; a.Dg = this.Dg; a.lr = this.lr; a.Cs = this.Cs; a.Bs = this.Bs; a.Qd = this.Qd; return a; }; Xe.prototype.toString = function () { var a = '^'; 0 !== this.modifiers && (a += 'M:' + this.modifiers); 0 !== this.button && (a += 'B:' + this.button); '' !== this.key && (a += 'K:' + this.key); 0 !== this.clickCount && (a += 'C:' + this.clickCount); 0 !== this.delta && (a += 'D:' + this.delta); this.handled && (a += 'h'); this.bubbles && (a += 'b'); null !== this.documentPoint && (a += '@' + this.documentPoint.toString()); return a; }; Xe.prototype.Zp = function (a, b) { var c = this.diagram; if (null === c) return b; Ye(c, this.event, a, b); return b; }; Xe.prototype.az = function (a, b) { var c = this.diagram; if (null === c) return b; Ye(c, this.event, a, b); b.assign(c.xt(b)); return b; }; pa.Object.defineProperties(Xe.prototype, { diagram: { get: function () { return this.C; }, set: function (a) { this.C = a; }, }, viewPoint: { get: function () { return this.Cu; }, set: function (a) { this.Cu.assign(a); }, }, documentPoint: { get: function () { return this.St; }, set: function (a) { this.St.assign(a); }, }, modifiers: { get: function () { return this.Vr; }, set: function (a) { this.Vr = a; }, }, button: { get: function () { return this.Oq; }, set: function (a) { this.Oq = a; if (null === this.event) switch (a) { case 0: this.buttons = 1; break; case 1: this.buttons = 4; break; case 2: this.buttons = 2; } }, }, buttons: { get: function () { return this.Pq; }, set: function (a) { this.Pq = a; }, }, key: { get: function () { return this.Kr; }, set: function (a) { this.Kr = a; }, }, down: { get: function () { return this.fr; }, set: function (a) { this.fr = a; }, }, up: { get: function () { return this.Es; }, set: function (a) { this.Es = a; }, }, clickCount: { get: function () { return this.Rq; }, set: function (a) { this.Rq = a; }, }, delta: { get: function () { return this.er; }, set: function (a) { this.er = a; }, }, isMultiTouch: { get: function () { return this.Er; }, set: function (a) { this.Er = a; }, }, handled: { get: function () { return this.tr; }, set: function (a) { this.tr = a; }, }, bubbles: { get: function () { return this.Dg; }, set: function (a) { this.Dg = a; }, }, event: { get: function () { return this.lr; }, set: function (a) { this.lr = a; }, }, isTouchEvent: { get: function () { var a = w.TouchEvent, b = this.event; return a && b instanceof a ? !0 : (a = w.PointerEvent) && b instanceof a && ('touch' === b.pointerType || 'pen' === b.pointerType); }, }, timestamp: { get: function () { return this.Cs; }, set: function (a) { this.Cs = a; }, }, targetDiagram: { get: function () { return this.Bs; }, set: function (a) { this.Bs = a; }, }, targetObject: { get: function () { return this.Qd; }, set: function (a) { this.Qd = a; }, }, control: { get: function () { return 0 !== (this.modifiers & 1); }, set: function (a) { this.modifiers = a ? this.modifiers | 1 : this.modifiers & -2; }, }, shift: { get: function () { return 0 !== (this.modifiers & 4); }, set: function (a) { this.modifiers = a ? this.modifiers | 4 : this.modifiers & -5; }, }, alt: { get: function () { return 0 !== (this.modifiers & 2); }, set: function (a) { this.modifiers = a ? this.modifiers | 2 : this.modifiers & -3; }, }, meta: { get: function () { return 0 !== (this.modifiers & 8); }, set: function (a) { this.modifiers = a ? this.modifiers | 8 : this.modifiers & -9; }, }, left: { get: function () { var a = this.event; return null === a || ('mousedown' !== a.type && 'mouseup' !== a.type && 'pointerdown' !== a.type && 'pointerup' !== a.type) ? 0 !== (this.buttons & 1) : 0 === this.button; }, set: function (a) { this.buttons = a ? this.buttons | 1 : this.buttons & -2; }, }, right: { get: function () { var a = this.event; return null === a || ('mousedown' !== a.type && 'mouseup' !== a.type && 'pointerdown' !== a.type && 'pointerup' !== a.type) ? 0 !== (this.buttons & 2) : 2 === this.button; }, set: function (a) { this.buttons = a ? this.buttons | 2 : this.buttons & -3; }, }, middle: { get: function () { var a = this.event; return null === a || ('mousedown' !== a.type && 'mouseup' !== a.type && 'pointerdown' !== a.type && 'pointerup' !== a.type) ? 0 !== (this.buttons & 4) : 1 === this.button; }, set: function (a) { this.buttons = a ? this.buttons | 4 : this.buttons & -5; }, }, }); Xe.prototype.getMultiTouchDocumentPoint = Xe.prototype.az; Xe.prototype.getMultiTouchViewPoint = Xe.prototype.Zp; Xe.className = 'InputEvent'; function Ze() { this.C = null; this.Ua = ''; this.fs = this.zs = null; } Ze.prototype.copy = function () { var a = new Ze(); a.C = this.C; a.Ua = this.Ua; a.zs = this.zs; a.fs = this.fs; return a; }; Ze.prototype.toString = function () { var a = '*' + this.name; null !== this.subject && (a += ':' + this.subject.toString()); null !== this.parameter && (a += '(' + this.parameter.toString() + ')'); return a; }; pa.Object.defineProperties(Ze.prototype, { diagram: { get: function () { return this.C; }, set: function (a) { this.C = a; }, }, name: { get: function () { return this.Ua; }, set: function (a) { this.Ua = a; }, }, subject: { get: function () { return this.zs; }, set: function (a) { this.zs = a; }, }, parameter: { get: function () { return this.fs; }, set: function (a) { this.fs = a; }, }, }); Ze.className = 'DiagramEvent'; function $e() { this.Vm = af; this.Ej = this.Ur = ''; this.Bo = this.Co = this.Ho = this.Io = this.Go = this.C = this.Zb = null; } $e.prototype.clear = function () { this.Bo = this.Co = this.Ho = this.Io = this.Go = this.C = this.Zb = null; }; $e.prototype.copy = function () { var a = new $e(); a.Vm = this.Vm; a.Ur = this.Ur; a.Ej = this.Ej; a.Zb = this.Zb; a.C = this.C; a.Go = this.Go; var b = this.Io; a.Io = Ca(b) && 'function' === typeof b.I ? b.I() : b; b = this.Ho; a.Ho = Ca(b) && 'function' === typeof b.I ? b.I() : b; b = this.Co; a.Co = Ca(b) && 'function' === typeof b.I ? b.I() : b; b = this.Bo; a.Bo = Ca(b) && 'function' === typeof b.I ? b.I() : b; return a; }; $e.prototype.fb = function (a) { a.classType === $e && (this.change = a); }; $e.prototype.toString = function () { var a = ''; a = this.change === bf ? a + '* ' : this.change === af ? a + (null !== this.model ? '!m' : '!d') : a + ((null !== this.model ? '!m' : '!d') + this.change); this.propertyName && 'string' === typeof this.propertyName && (a += ' ' + this.propertyName); this.modelChange && this.modelChange !== this.propertyName && (a += ' ' + this.modelChange); a += ': '; this.change === bf ? null !== this.oldValue && (a += ' ' + this.oldValue) : (null !== this.object && (a += Qa(this.object)), null !== this.oldValue && (a += ' old: ' + Qa(this.oldValue)), null !== this.oldParam && (a += ' ' + this.oldParam), null !== this.newValue && (a += ' new: ' + Qa(this.newValue)), null !== this.newParam && (a += ' ' + this.newParam)); return a; }; $e.prototype.J = function (a) { return a ? this.oldValue : this.newValue; }; $e.prototype.cz = function (a) { return a ? this.oldParam : this.newParam; }; $e.prototype.canUndo = function () { return null !== this.model || null !== this.diagram ? !0 : !1; }; $e.prototype.undo = function () { this.canUndo() && (null !== this.model ? this.model.Sj(this, !0) : null !== this.diagram && this.diagram.Sj(this, !0)); }; $e.prototype.canRedo = function () { return null !== this.model || null !== this.diagram ? !0 : !1; }; $e.prototype.redo = function () { this.canRedo() && (null !== this.model ? this.model.Sj(this, !1) : null !== this.diagram && this.diagram.Sj(this, !1)); }; pa.Object.defineProperties($e.prototype, { model: { get: function () { return this.Zb; }, set: function (a) { this.Zb = a; }, }, diagram: { get: function () { return this.C; }, set: function (a) { this.C = a; }, }, change: { get: function () { return this.Vm; }, set: function (a) { this.Vm = a; }, }, modelChange: { get: function () { return this.Ur; }, set: function (a) { this.Ur = a; }, }, propertyName: { get: function () { return this.Ej; }, set: function (a) { this.Ej = a; }, }, isTransactionFinished: { get: function () { return ( this.Vm === bf && ('CommittedTransaction' === this.Ej || 'FinishedUndo' === this.Ej || 'FinishedRedo' === this.Ej) ); }, }, object: { get: function () { return this.Go; }, set: function (a) { this.Go = a; }, }, oldValue: { get: function () { return this.Io; }, set: function (a) { this.Io = a; }, }, oldParam: { get: function () { return this.Ho; }, set: function (a) { this.Ho = a; }, }, newValue: { get: function () { return this.Co; }, set: function (a) { this.Co = a; }, }, newParam: { get: function () { return this.Bo; }, set: function (a) { this.Bo = a; }, }, }); $e.prototype.redo = $e.prototype.redo; $e.prototype.canRedo = $e.prototype.canRedo; $e.prototype.undo = $e.prototype.undo; $e.prototype.canUndo = $e.prototype.canUndo; $e.prototype.getParam = $e.prototype.cz; $e.prototype.getValue = $e.prototype.J; $e.prototype.clear = $e.prototype.clear; var bf = new D($e, 'Transaction', -1), af = new D($e, 'Property', 0), cf = new D($e, 'Insert', 1), df = new D($e, 'Remove', 2); $e.className = 'ChangedEvent'; $e.Transaction = bf; $e.Property = af; $e.Insert = cf; $e.Remove = df; function ef() { this.u = new E().freeze(); this.Ua = ''; this.l = !1; } ef.prototype.toString = function (a) { var b = 'Transaction: ' + this.name + ' ' + this.changes.count.toString() + (this.isComplete ? '' : ', incomplete'); if (void 0 !== a && 0 < a) { a = this.changes.count; for (var c = 0; c < a; c++) { var d = this.changes.N(c); null !== d && (b += '\n ' + d.toString()); } } return b; }; ef.prototype.clear = function () { var a = this.changes; a.ha(); for (var b = a.count - 1; 0 <= b; b--) { var c = a.N(b); null !== c && c.clear(); } a.clear(); a.freeze(); }; ef.prototype.canUndo = function () { return this.isComplete; }; ef.prototype.undo = function () { if (this.canUndo()) for (var a = this.changes.count - 1; 0 <= a; a--) { var b = this.changes.N(a); null !== b && b.undo(); } }; ef.prototype.canRedo = function () { return this.isComplete; }; ef.prototype.redo = function () { if (this.canRedo()) for (var a = this.changes.count, b = 0; b < a; b++) { var c = this.changes.N(b); null !== c && c.redo(); } }; pa.Object.defineProperties(ef.prototype, { changes: { get: function () { return this.u; }, }, name: { get: function () { return this.Ua; }, set: function (a) { this.Ua = a; }, }, isComplete: { get: function () { return this.l; }, set: function (a) { this.l = a; }, }, }); ef.prototype.redo = ef.prototype.redo; ef.prototype.canRedo = ef.prototype.canRedo; ef.prototype.undo = ef.prototype.undo; ef.prototype.canUndo = ef.prototype.canUndo; ef.prototype.clear = ef.prototype.clear; ef.className = 'Transaction'; function ff() { this.ju = new F(); this.Dc = !1; this.K = new E().freeze(); this.ge = -1; this.u = 999; this.ie = !1; this.cr = null; this.Ai = 0; this.l = !1; this.re = new E().freeze(); this.sl = new E(); this.Zt = !0; this.du = !1; } ff.prototype.toString = function (a) { var b = 'UndoManager ' + this.historyIndex + '<' + this.history.count + '<=' + this.maxHistoryLength; b += '['; for (var c = this.nestedTransactionNames.count, d = 0; d < c; d++) 0 < d && (b += ' '), (b += this.nestedTransactionNames.N(d)); b += ']'; if (void 0 !== a && 0 < a) for (c = this.history.count, d = 0; d < c; d++) b += '\n ' + this.history.N(d).toString(a - 1); return b; }; ff.prototype.clear = function () { var a = this.history; a.ha(); for (var b = a.count - 1; 0 <= b; b--) { var c = a.N(b); null !== c && c.clear(); } a.clear(); this.ge = -1; a.freeze(); this.ie = !1; this.cr = null; this.Ai = 0; this.re.ha(); this.re.clear(); this.re.freeze(); this.sl.clear(); }; ff.prototype.copyProperties = function (a) { this.isEnabled = a.isEnabled; this.maxHistoryLength = a.maxHistoryLength; this.checksTransactionLevel = a.checksTransactionLevel; }; t = ff.prototype; t.Rw = function (a) { this.ju.add(a); }; t.yx = function (a) { this.ju.remove(a); }; t.Aa = function (a) { void 0 === a && (a = ''); null === a && (a = ''); if (this.isUndoingRedoing) return !1; !0 === this.Zt && ((this.Zt = !1), this.Ai++, this.yb('StartingFirstTransaction', a, this.currentTransaction), 0 < this.Ai && this.Ai--); this.isEnabled && (this.re.ha(), this.re.add(a), this.re.freeze(), null === this.currentTransaction ? this.sl.add(0) : this.sl.add(this.currentTransaction.changes.count)); this.Ai++; var b = 1 === this.transactionLevel; b && this.yb('StartedTransaction', a, this.currentTransaction); return b; }; t.Za = function (a) { void 0 === a && (a = ''); return jf(this, !0, a); }; t.wf = function () { return jf(this, !1, ''); }; function jf(a, b, c) { if (a.isUndoingRedoing) return !1; a.checksTransactionLevel && 1 > a.transactionLevel && za('Ending transaction without having started a transaction: ' + c); var d = 1 === a.transactionLevel; d && b && a.yb('CommittingTransaction', c, a.currentTransaction); var e = 0; if (0 < a.transactionLevel && (a.Ai--, a.isEnabled)) { var f = a.re.count; 0 < f && ('' === c && (c = a.re.N(0)), a.re.ha(), a.re.mb(f - 1), a.re.freeze()); f = a.sl.count; 0 < f && ((e = a.sl.N(f - 1)), a.sl.mb(f - 1)); } f = a.currentTransaction; if (d) { if (b) { a.du = !1; if (a.isEnabled && null !== f) { b = f; b.isComplete = !0; b.name = c; d = a.history; d.ha(); for (e = d.count - 1; e > a.historyIndex; e--) (f = d.N(e)), null !== f && f.clear(), d.mb(e), (a.du = !0); e = a.maxHistoryLength; 0 <= e && (0 === e ? d.clear() : d.count >= e && ((f = d.N(0)), null !== f && f.clear(), d.mb(0), a.ge--)); 0 !== e && (d.add(b), a.ge++); d.freeze(); f = b; } a.yb('CommittedTransaction', c, f); } else { a.ie = !0; try { a.isEnabled && null !== f && ((f.isComplete = !0), f.undo()); } finally { a.yb('RolledBackTransaction', c, f), (a.ie = !1); } null !== f && f.clear(); } a.cr = null; return !0; } if (a.isEnabled && !b && null !== f) { a = e; c = f.changes; for (b = c.count - 1; b >= a; b--) (d = c.N(b)), null !== d && d.undo(), c.ha(), c.mb(b); c.freeze(); } return !1; } ff.prototype.canUndo = function () { if (!this.isEnabled || 0 < this.transactionLevel) return !1; var a = this.transactionToUndo; return null !== a && a.canUndo() ? !0 : !1; }; ff.prototype.undo = function () { if (this.canUndo()) { var a = this.transactionToUndo; try { (this.ie = !0), this.yb('StartingUndo', 'Undo', a), this.ge--, a.undo(); } catch (b) { za('undo error: ' + b.toString()); } finally { this.yb('FinishedUndo', 'Undo', a), (this.ie = !1); } } }; ff.prototype.canRedo = function () { if (!this.isEnabled || 0 < this.transactionLevel) return !1; var a = this.transactionToRedo; return null !== a && a.canRedo() ? !0 : !1; }; ff.prototype.redo = function () { if (this.canRedo()) { var a = this.transactionToRedo; try { (this.ie = !0), this.yb('StartingRedo', 'Redo', a), this.ge++, a.redo(); } catch (b) { za('redo error: ' + b.toString()); } finally { this.yb('FinishedRedo', 'Redo', a), (this.ie = !1); } } }; ff.prototype.yb = function (a, b, c) { void 0 === c && (c = null); var d = new $e(); d.change = bf; d.propertyName = a; d.object = c; d.oldValue = b; for (a = this.models; a.next(); ) (b = a.value), (d.model = b), b.Ks(d); }; ff.prototype.gv = function (a) { if (this.isEnabled && !this.isUndoingRedoing && !this.skipsEvent(a)) { var b = this.currentTransaction; null === b && (this.cr = b = new ef()); var c = a.copy(); b = b.changes; b.ha(); b.add(c); b.freeze(); this.checksTransactionLevel && 0 >= this.transactionLevel && !this.Zt && ((a = a.diagram), (null !== a && !1 === a.Qi) || za('Change not within a transaction: ' + c.toString())); } }; ff.prototype.skipsEvent = function (a) { if (null === a || 0 > a.change.value) return !0; a = a.object; if (void 0 !== a.layer) { if (((a = a.layer), null !== a && a.isTemporary)) return !0; } else if (a.isTemporary) return !0; return !1; }; pa.Object.defineProperties(ff.prototype, { models: { get: function () { return this.ju.iterator; }, }, isEnabled: { get: function () { return this.Dc; }, set: function (a) { this.Dc = a; }, }, transactionToUndo: { get: function () { return 0 <= this.historyIndex && this.historyIndex <= this.history.count - 1 ? this.history.N(this.historyIndex) : null; }, }, transactionToRedo: { get: function () { return this.historyIndex < this.history.count - 1 ? this.history.N(this.historyIndex + 1) : null; }, }, isUndoingRedoing: { get: function () { return this.ie; }, }, history: { get: function () { return this.K; }, }, maxHistoryLength: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, historyIndex: { get: function () { return this.ge; }, }, currentTransaction: { get: function () { return this.cr; }, }, transactionLevel: { get: function () { return this.Ai; }, }, isInTransaction: { get: function () { return 0 < this.Ai; }, }, checksTransactionLevel: { get: function () { return this.l; }, set: function (a) { this.l = a; }, }, nestedTransactionNames: { get: function () { return this.re; }, }, }); ff.prototype.handleChanged = ff.prototype.gv; ff.prototype.redo = ff.prototype.redo; ff.prototype.undo = ff.prototype.undo; ff.prototype.canUndo = ff.prototype.canUndo; ff.prototype.rollbackTransaction = ff.prototype.wf; ff.prototype.commitTransaction = ff.prototype.Za; ff.prototype.startTransaction = ff.prototype.Aa; ff.prototype.removeModel = ff.prototype.yx; ff.prototype.addModel = ff.prototype.Rw; ff.prototype.clear = ff.prototype.clear; ff.className = 'UndoManager'; function kf() { nb(this); this.C = lf; this.Ua = ''; this.Dc = !0; this.Ub = !1; this.Bq = null; this.$x = new Xe(); this.Hs = -1; } kf.prototype.hb = function (a) { this.C = a; }; kf.prototype.toString = function () { return '' !== this.name ? this.name + ' Tool' : Pa(this.constructor); }; kf.prototype.updateAdornments = function () {}; kf.prototype.canStart = function () { return this.isEnabled; }; kf.prototype.doStart = function () {}; kf.prototype.doActivate = function () { this.isActive = !0; }; kf.prototype.doDeactivate = function () { this.isActive = !1; }; kf.prototype.doStop = function () {}; kf.prototype.doCancel = function () { this.transactionResult = null; this.stopTool(); }; kf.prototype.stopTool = function () { var a = this.diagram; a.currentTool === this && ((a.currentTool = null), (a.currentCursor = '')); }; kf.prototype.doMouseDown = function () { !this.isActive && this.canStart() && this.doActivate(); }; kf.prototype.doMouseMove = function () {}; kf.prototype.doMouseUp = function () { this.stopTool(); }; kf.prototype.doMouseWheel = function () {}; kf.prototype.canStartMultiTouch = function () { return !0; }; kf.prototype.standardPinchZoomStart = function () { var a = this.diagram, b = a.lastInput, c = b.Zp(0, G.allocAt(NaN, NaN)), d = b.Zp(1, G.allocAt(NaN, NaN)); if (c.o() && d.o() && (this.doCancel(), a.bm('hasGestureZoom'))) { a.Jo = a.scale; var e = d.x - c.x, f = d.y - c.y; a.Hw = Math.sqrt(e * e + f * f); b.bubbles = !1; } G.free(c); G.free(d); }; kf.prototype.standardPinchZoomMove = function () { var a = this.diagram, b = a.lastInput, c = b.Zp(0, G.allocAt(NaN, NaN)), d = b.Zp(1, G.allocAt(NaN, NaN)); if (c.o() && d.o() && (this.doCancel(), a.bm('hasGestureZoom'))) { var e = d.x - c.x, f = d.y - c.y; f = Math.sqrt(e * e + f * f) / a.Hw; e = new G( (Math.min(d.x, c.x) + Math.max(d.x, c.x)) / 2, (Math.min(d.y, c.y) + Math.max(d.y, c.y)) / 2, ); f *= a.Jo; var g = a.commandHandler; if (f !== a.scale && g.canResetZoom(f)) { var h = a.zoomPoint; a.zoomPoint = e; g.resetZoom(f); a.zoomPoint = h; } b.bubbles = !1; } G.free(c); G.free(d); }; kf.prototype.doKeyDown = function () { 'Esc' === this.diagram.lastInput.key && this.doCancel(); }; kf.prototype.doKeyUp = function () {}; kf.prototype.Aa = function (a) { void 0 === a && (a = this.name); this.transactionResult = null; return this.diagram.Aa(a); }; kf.prototype.yg = function () { var a = this.diagram; return null === this.transactionResult ? a.wf() : a.Za(this.transactionResult); }; kf.prototype.standardMouseSelect = function () { var a = this.diagram; if (a.allowSelect) { var b = a.lastInput, c = a.$l(b.documentPoint, !1); if (null !== c) if (ib ? b.meta : b.control) { a.aa('ChangingSelection', a.selection); for (b = c; null !== b && !b.canSelect(); ) b = b.containingGroup; null !== b && (b.isSelected = !b.isSelected); a.aa('ChangedSelection', a.selection); } else if (b.shift) { if (!c.isSelected) { a.aa('ChangingSelection', a.selection); for (b = c; null !== b && !b.canSelect(); ) b = b.containingGroup; null !== b && (b.isSelected = !0); a.aa('ChangedSelection', a.selection); } } else { if (!c.isSelected) { for (b = c; null !== b && !b.canSelect(); ) b = b.containingGroup; null !== b && a.select(b); } } else !b.left || (ib ? b.meta : b.control) || b.shift || a.Qp(); } }; kf.prototype.standardMouseClick = function (a, b) { void 0 === a && (a = null); void 0 === b && (b = function (a) { return !a.layer.isTemporary; }); var c = this.diagram, d = c.lastInput; a = c.Rb(d.documentPoint, a, b); d.targetObject = a; mf(a, d, c); return d.handled; }; function mf(a, b, c) { b.handled = !1; if (null === a || a.ug()) { var d = 0; b.left ? (d = 1 === b.clickCount ? 1 : 2 === b.clickCount ? 2 : 1) : b.right && 1 === b.clickCount && (d = 3); var e = 'ObjectSingleClicked'; if (null !== a) { switch (d) { case 1: e = 'ObjectSingleClicked'; break; case 2: e = 'ObjectDoubleClicked'; break; case 3: e = 'ObjectContextClicked'; } 0 !== d && c.aa(e, a); } else { switch (d) { case 1: e = 'BackgroundSingleClicked'; break; case 2: e = 'BackgroundDoubleClicked'; break; case 3: e = 'BackgroundContextClicked'; } 0 !== d && c.aa(e); } if (null !== a) for (; null !== a; ) { c = null; switch (d) { case 1: c = a.click; break; case 2: c = a.doubleClick ? a.doubleClick : a.click; break; case 3: c = a.contextClick; } if (null !== c && (c(b, a), b.handled)) break; a = a.panel; } else { a = null; switch (d) { case 1: a = c.click; break; case 2: a = c.doubleClick ? c.doubleClick : c.click; break; case 3: a = c.contextClick; } null !== a && a(b); } } } kf.prototype.standardMouseOver = function () { var a = this.diagram, b = a.lastInput; if (!0 !== a.animationManager.rb) { var c = a.skipsUndoManager; a.skipsUndoManager = !0; var d = a.viewportBounds.da(b.documentPoint) ? a.Rb(b.documentPoint, null, null) : null; b.targetObject = d; var e = !1; if (d !== a.Kk) { var f = a.Kk, g = f; a.Kk = d; this.doCurrentObjectChanged(f, d); for (b.handled = !1; null !== f; ) { var h = f.mouseLeave; if (null !== h) { if (d === f) break; if (null !== d && d.tg(f)) break; h(b, f, d); e = !0; if (b.handled) break; } f = f.panel; } f = g; for (b.handled = !1; null !== d; ) { g = d.mouseEnter; if (null !== g) { if (f === d) break; if (null !== f && f.tg(d)) break; g(b, d, f); e = !0; if (b.handled) break; } d = d.panel; } d = a.Kk; } if (null !== d) { f = d; for (g = ''; null !== f; ) { g = f.cursor; if ('' !== g) break; f = f.panel; } a.currentCursor = g; b.handled = !1; for (f = d; null !== f; ) { d = f.mouseOver; if (null !== d && (d(b, f), (e = !0), b.handled)) break; f = f.panel; } } else (a.currentCursor = ''), (d = a.mouseOver), null !== d && (d(b), (e = !0)); e && a.cc(); a.skipsUndoManager = c; } }; kf.prototype.doCurrentObjectChanged = function () {}; kf.prototype.standardMouseWheel = function () { var a = this.diagram, b = a.lastInput, c = b.delta; if (0 !== c && a.documentBounds.o()) { var d = a.commandHandler, e = a.toolManager.mouseWheelBehavior; if ( null !== d && ((e === nf && !b.shift) || (e === of && b.control)) && (0 < c ? d.canIncreaseZoom() : d.canDecreaseZoom()) ) (e = a.zoomPoint), (a.zoomPoint = b.viewPoint), 0 < c ? d.increaseZoom() : d.decreaseZoom(), (a.zoomPoint = e), (b.bubbles = !1); else if ((e === nf && b.shift) || (e === of && !b.control)) { d = a.position.copy(); var f = 0 < c ? c : -c, g = b.event, h = g.deltaMode; e = g.deltaX; g = g.deltaY; if (cb || db || gb) (h = 1), 0 < e && (e = 3), 0 > e && (e = -3), 0 < g && (g = 3), 0 > g && (g = -3); if (void 0 === h || void 0 === e || void 0 === g || (0 === e && 0 === g) || b.shift) !b.shift && a.allowVerticalScroll ? ((f = 3 * f * a.scrollVerticalLineChange), 0 < c ? a.scroll('pixel', 'up', f) : a.scroll('pixel', 'down', f)) : b.shift && a.allowHorizontalScroll && ((f = 3 * f * a.scrollHorizontalLineChange), 0 < c ? a.scroll('pixel', 'left', f) : a.scroll('pixel', 'right', f)); else { switch (h) { case 0: c = 'pixel'; break; case 1: c = 'line'; break; case 2: c = 'page'; break; default: c = 'pixel'; } 0 !== e && a.allowHorizontalScroll && (0 < e ? a.scroll(c, 'left', -e) : a.scroll(c, 'right', e)); 0 !== g && a.allowVerticalScroll && (0 < g ? a.scroll(c, 'up', -g) : a.scroll(c, 'down', g)); } a.position.A(d) || (b.bubbles = !1); } } }; kf.prototype.standardWaitAfter = function (a, b) { void 0 === b && (b = this.diagram.lastInput); this.cancelWaitAfter(); var c = this, d = b.clone(this.$x); this.Hs = ua(function () { c.doWaitAfter(d); }, a); }; kf.prototype.cancelWaitAfter = function () { -1 !== this.Hs && w.clearTimeout(this.Hs); this.Hs = -1; }; kf.prototype.doWaitAfter = function () {}; kf.prototype.findToolHandleAt = function (a, b) { a = this.diagram.Rb(a, function (a) { for (; null !== a && !(a.panel instanceof pf); ) a = a.panel; return a; }); return null === a ? null : a.part.category === b ? a : null; }; kf.prototype.isBeyondDragSize = function (a, b) { var c = this.diagram; void 0 === a && (a = c.firstInput.viewPoint); void 0 === b && (b = c.lastInput.viewPoint); var d = c.toolManager.dragSize, e = d.width; d = d.height; c.firstInput.isTouchEvent && ((e += 6), (d += 6)); return Math.abs(b.x - a.x) > e || Math.abs(b.y - a.y) > d; }; pa.Object.defineProperties(kf.prototype, { diagram: { get: function () { return this.C; }, set: function (a) { a instanceof P && (this.C = a); }, }, name: { get: function () { return this.Ua; }, set: function (a) { this.Ua = a; }, }, isEnabled: { get: function () { return this.Dc; }, set: function (a) { this.Dc = a; }, }, isActive: { get: function () { return this.Ub; }, set: function (a) { this.Ub = a; }, }, transactionResult: { get: function () { return this.Bq; }, set: function (a) { this.Bq = a; }, }, }); kf.prototype.stopTransaction = kf.prototype.yg; kf.prototype.startTransaction = kf.prototype.Aa; kf.className = 'Tool'; function Ua() { kf.call(this); this.name = 'ToolManager'; this.Kc = new E(); this.Vc = new E(); this.zg = new E(); this.ba = this.La = 850; this.u = new M(2, 2).ga(); this.Vb = 5e3; this.Ma = of; this.K = qf; this.br = this.l = null; this.Lj = -1; } oa(Ua, kf); Ua.prototype.initializeStandardTools = function () {}; Ua.prototype.updateAdornments = function (a) { var b = this.currentToolTip; if (b instanceof pf && this.br === a) { var c = b.adornedObject; (null !== a ? c.part === a : null === c) ? this.showToolTip(b, c) : this.hideToolTip(); } }; Ua.prototype.doMouseDown = function () { var a = this.diagram, b = a.lastInput; b.isTouchEvent && this.gestureBehavior === rf && (b.bubbles = !1); if (b.isMultiTouch) { this.cancelWaitAfter(); if (this.gestureBehavior === sf) { b.bubbles = !0; return; } if (this.gestureBehavior === rf) return; if (a.currentTool.canStartMultiTouch()) { a.currentTool.standardPinchZoomStart(); return; } } for (var c = this.mouseDownTools.length, d = 0; d < c; d++) { var e = this.mouseDownTools.N(d); e.hb(this.diagram); if (e.canStart()) { a.doFocus(); a.currentTool = e; a.currentTool === e && (e.isActive || e.doActivate(), e.doMouseDown()); return; } } 1 === a.lastInput.button && (this.mouseWheelBehavior === of ? (this.mouseWheelBehavior = nf) : this.mouseWheelBehavior === nf && (this.mouseWheelBehavior = of)); this.doActivate(); this.standardWaitAfter(this.holdDelay, b); }; Ua.prototype.doMouseMove = function () { var a = this.diagram, b = a.lastInput; if (b.isMultiTouch) { if (this.gestureBehavior === sf) { b.bubbles = !0; return; } if (this.gestureBehavior === rf) return; if (a.currentTool.canStartMultiTouch()) { a.currentTool.standardPinchZoomMove(); return; } } if (this.isActive) for (var c = this.mouseMoveTools.length, d = 0; d < c; d++) { var e = this.mouseMoveTools.N(d); e.hb(this.diagram); if (e.canStart()) { a.doFocus(); a.currentTool = e; a.currentTool === e && (e.isActive || e.doActivate(), e.doMouseMove()); return; } } tf(this, a); a = b.event; null === a || ('mousemove' !== a.type && 'pointermove' !== a.type && a.cancelable) || (b.bubbles = !0); }; function tf(a, b) { a.standardMouseOver(); a.isBeyondDragSize() && a.standardWaitAfter(a.isActive ? a.holdDelay : a.hoverDelay, b.lastInput); } Ua.prototype.doCurrentObjectChanged = function (a, b) { a = this.currentToolTip; null === a || (null !== b && a instanceof pf && (b === a || b.tg(a))) || this.hideToolTip(); }; Ua.prototype.doWaitAfter = function (a) { var b = this.diagram; b.Da && (this.doMouseHover(), this.isActive || this.doToolTip(), a.isTouchEvent && !b.lastInput.handled && ((a = a.copy()), (a.button = 2), (a.buttons = 2), (b.lastInput = a), (b.Ml = !0), b.doMouseUp())); }; Ua.prototype.doMouseHover = function () { var a = this.diagram, b = a.lastInput; null === b.targetObject && (b.targetObject = a.Rb(b.documentPoint, null, null)); var c = b.targetObject; if (null !== c) for (b.handled = !1; null !== c; ) { a = this.isActive ? c.mouseHold : c.mouseHover; if (null !== a && (a(b, c), b.handled)) break; c = c.panel; } else (c = this.isActive ? a.mouseHold : a.mouseHover), null !== c && c(b); }; Ua.prototype.doToolTip = function () { var a = this.diagram, b = a.lastInput; null === b.targetObject && (b.targetObject = a.Rb(b.documentPoint, null, null)); b = b.targetObject; if (null !== b) { if (((a = this.currentToolTip), !(a instanceof pf) || (b !== a && !b.tg(a)))) { for (; null !== b; ) { a = b.toolTip; if (null !== a) { this.showToolTip(a, b); return; } b = b.panel; } this.hideToolTip(); } } else (b = a.toolTip), null !== b ? this.showToolTip(b, null) : this.hideToolTip(); }; Ua.prototype.showToolTip = function (a, b) { var c = this.diagram; a !== this.currentToolTip && this.hideToolTip(); if (a instanceof pf) { a.layerName = 'Tool'; a.selectable = !1; a.scale = 1 / c.scale; a.category = 'ToolTip'; null !== a.placeholder && (a.placeholder.scale = c.scale); var d = a.diagram; null !== d && d !== c && d.remove(a); c.add(a); null !== b ? (a.adornedObject = b) : (a.data = c.model); a.$b(); this.positionToolTip(a, b); } else a instanceof uf && a !== this.currentToolTip && a.show(b, c, this); this.currentToolTip = a; -1 !== this.Lj && (w.clearTimeout(this.Lj), (this.Lj = -1)); a = this.toolTipDuration; if (0 < a && Infinity !== a) { var e = this; this.Lj = ua(function () { e.hideToolTip(); }, a); } }; Ua.prototype.positionToolTip = function (a) { if (null === a.placeholder) { var b = this.diagram, c = b.lastInput.documentPoint.copy(), d = a.measuredBounds, e = b.viewportBounds; b.lastInput.isTouchEvent && (c.x -= d.width); c.x + d.width > e.right && (c.x -= d.width + 5 / b.scale); c.x < e.x && (c.x = e.x); c.y = c.y + 20 / b.scale + d.height > e.bottom ? c.y - (d.height + 5 / b.scale) : c.y + 20 / b.scale; c.y < e.y && (c.y = e.y); a.position = c; } }; Ua.prototype.hideToolTip = function () { -1 !== this.Lj && (w.clearTimeout(this.Lj), (this.Lj = -1)); var a = this.diagram, b = this.currentToolTip; null !== b && (b instanceof pf ? (a.remove(b), null !== this.br && this.br.vf(b.category), (b.data = null), (b.adornedObject = null)) : b instanceof uf && null !== b.hide && b.hide(a, this), (this.currentToolTip = null)); }; Ua.prototype.doMouseUp = function () { this.cancelWaitAfter(); var a = this.diagram; if (this.isActive) for (var b = this.mouseUpTools.length, c = 0; c < b; c++) { var d = this.mouseUpTools.N(c); d.hb(this.diagram); if (d.canStart()) { a.doFocus(); a.currentTool = d; a.currentTool === d && (d.isActive || d.doActivate(), d.doMouseUp()); return; } } a.doFocus(); this.doDeactivate(); }; Ua.prototype.doMouseWheel = function () { this.standardMouseWheel(); }; Ua.prototype.doKeyDown = function () { var a = this.diagram; null !== a.commandHandler && a.commandHandler.doKeyDown(); }; Ua.prototype.doKeyUp = function () { var a = this.diagram; null !== a.commandHandler && a.commandHandler.doKeyUp(); }; Ua.prototype.findTool = function (a) { for (var b = this.mouseDownTools.length, c = 0; c < b; c++) { var d = this.mouseDownTools.N(c); if (d.name === a) return d; } b = this.mouseMoveTools.length; for (c = 0; c < b; c++) if (((d = this.mouseMoveTools.N(c)), d.name === a)) return d; b = this.mouseUpTools.length; for (c = 0; c < b; c++) if (((d = this.mouseUpTools.N(c)), d.name === a)) return d; return null; }; Ua.prototype.replaceTool = function (a, b) { null !== b && b.hb(this.diagram); for (var c = this.mouseDownTools.length, d = 0; d < c; d++) { var e = this.mouseDownTools.N(d); if (e.name === a) return null !== b ? this.mouseDownTools.gd(d, b) : this.mouseDownTools.mb(d), e; } c = this.mouseMoveTools.length; for (d = 0; d < c; d++) if (((e = this.mouseMoveTools.N(d)), e.name === a)) return null !== b ? this.mouseMoveTools.gd(d, b) : this.mouseMoveTools.mb(d), e; c = this.mouseUpTools.length; for (d = 0; d < c; d++) if (((e = this.mouseUpTools.N(d)), e.name === a)) return null !== b ? this.mouseUpTools.gd(d, b) : this.mouseUpTools.mb(d), e; return null; }; function vf(a, b, c, d) { null !== c && ((c.name = b), c.hb(a.diagram)); a.findTool(b) ? a.replaceTool(b, c) : null !== c && d.add(c); } pa.Object.defineProperties(Ua.prototype, { mouseWheelBehavior: { get: function () { return this.Ma; }, set: function (a) { this.Ma = a; }, }, gestureBehavior: { get: function () { return this.K; }, set: function (a) { this.K = a; }, }, currentToolTip: { get: function () { return this.l; }, set: function (a) { this.l = a; this.br = null !== a && a instanceof pf ? a.adornedPart : null; }, }, mouseDownTools: { get: function () { return this.Kc; }, }, mouseMoveTools: { get: function () { return this.Vc; }, }, mouseUpTools: { get: function () { return this.zg; }, }, hoverDelay: { get: function () { return this.La; }, set: function (a) { this.La = a; }, }, holdDelay: { get: function () { return this.ba; }, set: function (a) { this.ba = a; }, }, dragSize: { get: function () { return this.u; }, set: function (a) { this.u = a.I(); }, }, toolTipDuration: { get: function () { return this.Vb; }, set: function (a) { this.Vb = a; }, }, }); var of = new D(Ua, 'WheelScroll', 0), nf = new D(Ua, 'WheelZoom', 1), wf = new D(Ua, 'WheelNone', 2), qf = new D(Ua, 'GestureZoom', 3), rf = new D(Ua, 'GestureCancel', 4), sf = new D(Ua, 'GestureNone', 5); Ua.className = 'ToolManager'; Ua.WheelScroll = of; Ua.WheelZoom = nf; Ua.WheelNone = wf; Ua.GestureZoom = qf; Ua.GestureCancel = rf; Ua.GestureNone = sf; function xf() { kf.call(this); this.name = 'Dragging'; this.K = this.Kc = !0; this.u = this.Ma = this.ba = this.dg = null; this.xn = this.Vc = !1; this.Hl = new G(NaN, NaN); this.xs = new G(); this.Vb = !0; this.Rk = 100; this.Kg = []; this.zg = new F().freeze(); this.La = new yf(); } oa(xf, kf); xf.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; if ( (a.isReadOnly && !a.allowDragOut) || (!a.allowMove && !a.allowCopy && !a.allowDragOut) || !a.allowSelect ) return !1; var b = a.lastInput; return !b.left || (a.currentTool !== this && (!this.isBeyondDragSize() || (b.isTouchEvent && b.timestamp - a.firstInput.timestamp < this.Rk))) ? !1 : null !== this.findDraggablePart(); }; xf.prototype.findDraggablePart = function () { var a = this.diagram; a = a.$l(a.firstInput.documentPoint, !1); if (null === a) return null; for (; null !== a && !a.canSelect(); ) a = a.containingGroup; return null !== a && (a.canMove() || a.canCopy()) ? a : null; }; xf.prototype.standardMouseSelect = function () { var a = this.diagram; if (a.allowSelect) { var b = a.$l(a.firstInput.documentPoint, !1); if (null !== b) { for (; null !== b && !b.canSelect(); ) b = b.containingGroup; this.currentPart = b; null === this.currentPart || this.currentPart.isSelected || (a.aa('ChangingSelection', a.selection), (b = a.lastInput), (ib ? b.meta : b.control) || b.shift || Hf(a), (this.currentPart.isSelected = !0), a.aa('ChangedSelection', a.selection)); } } }; xf.prototype.doActivate = function () { var a = this.diagram; null === this.currentPart && this.standardMouseSelect(); var b = this.currentPart; null !== b && (b.canMove() || b.canCopy()) && ((If = null), (this.isActive = !0), this.Hl.set(a.position), Jf(this, a.selection), (this.Kg.length = 0), (this.draggedParts = this.computeEffectiveCollection(a.selection, this.dragOptions)), (a.sk = !0), !0 === a.Ee('temporaryPixelRatio') && 30 < a.Uw && Kf(a), Lf(a, this.draggedParts), this.Aa('Drag'), (this.startPoint = a.firstInput.documentPoint), (a.isMouseCaptured = !0), a.allowDragOut && ((this.isDragOutStarted = !0), (this.xn = !1), (If = this), (Mf = this.diagram), this.doSimulatedDragOut())); }; function Jf(a, b) { if (a.dragsLink) { var c = a.diagram; c.allowRelink && (c.model.dk() && 1 === b.count && b.first() instanceof S ? ((a.draggedLink = b.first()), a.draggedLink.canRelinkFrom() && a.draggedLink.canRelinkTo() && a.draggedLink.Tj(), (a.dg = c.toolManager.findTool('Relinking')), null === a.dg && ((a.dg = new Nf()), a.dg.hb(c))) : ((a.draggedLink = null), (a.dg = null))); } } xf.prototype.computeEffectiveCollection = function (a, b) { return this.diagram.commandHandler.computeEffectiveCollection(a, b); }; xf.prototype.pd = function (a) { return void 0 === a ? new Of(ac) : this.isGridSnapEnabled ? new Of(new G(Math.round(a.x), Math.round(a.y))) : new Of(a.copy()); }; xf.prototype.doDeactivate = function () { this.isActive = !1; var a = this.diagram; a.xf(); Pf(this); Qf(a, this.draggedParts); this.draggedParts = this.currentPart = null; this.xn = this.isDragOutStarted = !1; if (0 < Rf.count) { for (var b = Rf, c = b.length, d = 0; d < c; d++) { var e = b.N(d); Sf(e); Tf(e); Pf(e); e.diagram.xf(); } b.clear(); } Sf(this); this.Hl.h(NaN, NaN); If = Mf = null; Tf(this); a.isMouseCaptured = !1; a.currentCursor = ''; a.sk = !1; this.yg(); Uf(a, !0); }; function Pf(a) { var b = a.diagram, c = b.skipsUndoManager; b.skipsUndoManager = !0; Vf(a, b.lastInput, null); b.skipsUndoManager = c; a.Kg.length = 0; } function Wf() { var a = If; Tf(a); Xf(a); var b = a.diagram; a.Hl.o() && (b.position = a.Hl); b.xf(); } xf.prototype.doCancel = function () { Tf(this); Xf(this); var a = this.diagram; this.Hl.o() && (a.position = this.Hl); this.stopTool(); }; xf.prototype.doKeyDown = function () { this.isActive && ('Esc' === this.diagram.lastInput.key ? this.doCancel() : this.doMouseMove()); }; xf.prototype.doKeyUp = function () { this.isActive && this.doMouseMove(); }; function Yf(a, b) { var c = Infinity, d = Infinity, e = -Infinity, f = -Infinity; for (a = a.iterator; a.next(); ) { var g = a.value; if (g.bc() && g.isVisible()) { var h = g.location; g = h.x; h = h.y; isNaN(g) || isNaN(h) || (g < c && (c = g), h < d && (d = h), g > e && (e = g), h > f && (f = h)); } } Infinity === c ? b.h(0, 0, 0, 0) : b.h(c, d, e - c, f - d); } function Zf(a, b) { if (null === a.copiedParts) { var c = a.diagram; if ((!b || (!c.isReadOnly && !c.isModelReadOnly)) && null !== a.draggedParts) { var d = c.undoManager; d.isEnabled && d.isInTransaction ? null !== d.currentTransaction && 0 < d.currentTransaction.changes.count && (c.undoManager.wf(), c.Aa('Drag')) : Xf(a); c.skipsUndoManager = !b; c.partManager.addsToTemporaryLayer = !b; a.startPoint = c.firstInput.documentPoint; b = a.copiesEffectiveCollection ? a.draggedParts.Yd() : c.selection; c = c.Yj(b, c, !0); for (b = c.iterator; b.next(); ) b.value.location = b.key.location; b = N.alloc(); Yf(c, b); N.free(b); b = new Lb(); for (d = a.draggedParts.iterator; d.next(); ) { var e = d.key; e.bc() && e.canCopy() && ((e = c.J(e)), null !== e && (e.$b(), b.add(e, a.pd(e.location)))); } for (c = c.iterator; c.next(); ) (d = c.value), d instanceof S && d.canCopy() && b.add(d, a.pd()); a.copiedParts = b; Jf(a, b.Yd()); null !== a.draggedLink && ((c = a.draggedLink), (b = c.routeBounds), $f(c, a.startPoint.x - (b.x + b.width / 2), a.startPoint.y - (b.y + b.height / 2))); } } } function Tf(a) { var b = a.diagram; if ( null !== a.copiedParts && (b.qt(a.copiedParts.Yd(), !1), (a.copiedParts = null), null !== a.draggedParts) ) for (var c = a.draggedParts.iterator; c.next(); ) c.key instanceof S && (c.value.point = new G(0, 0)); b.skipsUndoManager = !1; b.partManager.addsToTemporaryLayer = !1; a.startPoint = b.firstInput.documentPoint; } function Sf(a) { if (null !== a.draggedLink) { if (a.dragsLink && null !== a.dg) { var b = a.dg; b.diagram.remove(b.temporaryFromNode); b.diagram.remove(b.temporaryToNode); } a.draggedLink = null; a.dg = null; } } function ag(a, b, c) { var d = a.diagram, e = a.startPoint, f = G.alloc(); f.assign(d.lastInput.documentPoint); a.moveParts(b, f.Xd(e), c); G.free(f); !0 === d.Ee('temporaryPixelRatio') && null === d.jh && 30 < d.Uw && (Kf(d), d.nt()); } xf.prototype.moveParts = function (a, b, c) { var d = this.diagram; null !== d && bg(d, a, b, this.dragOptions, c); }; function Xf(a) { if (null !== a.draggedParts) { for (var b = a.diagram, c = a.draggedParts.iterator; c.next(); ) { var d = c.key; d.bc() && (d.location = c.value.point); } for (c = a.draggedParts.iterator; c.next(); ) if (((d = c.key), d instanceof S && d.suspendsRouting)) { var e = c.value.point; a.draggedParts.add(d, a.pd()); $f(d, -e.x, -e.y); } b.fd(); } } function dg(a, b) { if (null === b) return !0; b = b.part; return null === b || b instanceof pf || b.layer.isTemporary || (a.draggedParts && a.draggedParts.contains(b)) || (a.copiedParts && a.copiedParts.contains(b)) ? !0 : !1; } function eg(a, b) { var c = a.diagram; a.dragsLink && (null !== a.draggedLink && ((a.draggedLink.fromNode = null), (a.draggedLink.toNode = null)), fg(a, !1)); var d = gg(c, b, null, function (b) { return !dg(a, b); }), e = c.lastInput; e.targetObject = d; var f = c.skipsUndoManager, g = !1; try { c.skipsUndoManager = !0; g = Vf(a, e, d); if (!a.isActive && null === If) return; if (null === d || c.handlesDragDropForTopLevelParts) { var h = c.mouseDragOver; null !== h && (h(e), (g = !0)); } if (!a.isActive && null === If) return; a.doDragOver(b, d); if (!a.isActive && null === If) return; } finally { (c.skipsUndoManager = f), g && c.fd(); } c.isReadOnly || (!c.allowMove && !c.allowCopy) || (!c.allowHorizontalScroll && !c.allowVerticalScroll) || c.Ns(e.viewPoint); } function Vf(a, b, c) { var d = !1, e = a.Kg.length, f = 0 < e ? a.Kg[0] : null; if (c === f) return !1; b.handled = !1; for (var g = 0; g < e; g++) { var h = a.Kg[g], k = h.mouseDragLeave; if (null !== k && (k(b, h, c), (d = !0), b.handled)) break; } a.Kg.length = 0; if ((!a.isActive && null === If) || null === c) return d; b.handled = !1; for (e = c; null !== e; ) a.Kg.push(e), (e = hg(e)); e = a.Kg.length; for ( c = 0; c < e && ((g = a.Kg[c]), (h = g.mouseDragEnter), null === h || (h(b, g, f), (d = !0), !b.handled)); c++ ); return d; } function hg(a) { var b = a.panel; return null !== b ? b : a instanceof T && !(a instanceof ig) && ((a = a.containingGroup), null !== a && a.handlesDragDropForMembers) ? a : null; } function jg(a, b, c) { var d = a.dg; if (null === d) return null; var e = a.diagram.qg(b, d.portGravity, function (a) { return d.findValidLinkablePort(a, c); }); a = G.alloc(); var f = Infinity, g = null; for (e = e.iterator; e.next(); ) { var h = e.value; if (null !== h.part) { var k = h.ma(dd, a); k = b.Ce(k); k < f && ((g = h), (f = k)); } } G.free(a); return g; } function fg(a, b) { var c = a.draggedLink; if (null !== c && !(2 > c.pointsCount)) { var d = a.diagram; if (!d.isReadOnly) { var e = a.dg; if (null !== e) { var f = null, g = null; null === c.fromNode && ((f = jg(a, c.i(0), !1)), null !== f && (g = f.part)); var h = null, k = null; null === c.toNode && ((h = jg(a, c.i(c.pointsCount - 1), !0)), null !== h && (k = h.part)); e.isValidLink(g, f, k, h) ? b ? ((c.defaultFromPoint = c.i(0)), (c.defaultToPoint = c.i(c.pointsCount - 1)), (c.suspendsRouting = !1), (c.fromNode = g), null !== f && (c.fromPortId = f.portId), (c.toNode = k), null !== h && (c.toPortId = h.portId), c.fromPort !== d.tx && d.aa('LinkRelinked', c, d.tx), c.toPort !== d.ux && d.aa('LinkRelinked', c, d.ux)) : kg(e, g, f, k, h) : kg(e, null, null, null, null); } } } } xf.prototype.doDragOver = function () {}; function lg(a, b) { var c = a.diagram; a.dragsLink && fg(a, !0); Pf(a); var d = gg(c, b, null, function (b) { return !dg(a, b); }), e = c.lastInput; e.targetObject = d; if (null !== d) { e.handled = !1; for (var f = d; null !== f; ) { var g = f.mouseDrop; if (null !== g && (g(e, f), e.handled)) break; mg(a, e, f); f = hg(f); } } else (f = c.mouseDrop), null !== f && f(e); if (a.isActive || null !== If) { for (e = (a.copiedParts || a.draggedParts).iterator; e.next(); ) (f = e.key), f instanceof V && f.linksConnected.each(function (a) { a.suspendsRouting = !1; }); a.doDropOnto(b, d); if (a.isActive || null !== If) { b = N.alloc(); for (d = c.selection.iterator; d.next(); ) (e = d.value), e instanceof V && ng(a, c, e, b); N.free(b); } } } function mg(a, b, c) { a = a.diagram; c instanceof T && null === c.containingGroup && !(c instanceof ig) && a.handlesDragDropForTopLevelParts && ((c = a.mouseDrop), null !== c && c(b)); } function ng(a, b, c, d) { var e = !1; c.getAvoidableRect(d); b.viewportBounds.nf(d) && (e = !0); b = b.links; for (a = a.copiedParts || a.draggedParts; b.next(); ) { var f = b.value; if (!e || og(f)) (a.contains(f) && a.contains(c)) || (!f.Vd(c) && f.isAvoiding && Ac(f.actualBounds, d, 0) && f.Ra()); } } xf.prototype.doDropOnto = function () {}; xf.prototype.doMouseMove = function () { if (this.isActive) { var a = this.diagram, b = a.lastInput; this.simulatedMouseMove(b.event, null, b.targetDiagram || null) || null === this.currentPart || null === this.draggedParts || (this.mayCopy() ? ((a.currentCursor = 'copy'), Zf(this, !1), Lf(a, this.copiedParts), ag(this, this.copiedParts, !1), Qf(a, this.copiedParts)) : this.mayMove() ? (Tf(this), ag(this, this.draggedParts, !0)) : this.mayDragOut() ? ((a.currentCursor = 'no-drop'), Zf(this, !1), ag(this, this.copiedParts, !1)) : Tf(this), eg(this, a.lastInput.documentPoint)); } }; xf.prototype.doMouseUp = function () { if (this.isActive) { var a = this.diagram, b = a.lastInput; if (!this.simulatedMouseUp(b.event, null, b.documentPoint, b.targetDiagram)) { var c = !1; (b = this.mayCopy()) && null !== this.copiedParts ? (Tf(this), Zf(this, !0), Lf(a, this.copiedParts), ag(this, this.copiedParts, !1), Qf(a, this.copiedParts), null !== this.copiedParts && a.Hv(this.copiedParts.Yd())) : ((c = !0), Tf(this), this.mayMove() && (ag(this, this.draggedParts, !0), eg(this, a.lastInput.documentPoint))); this.xn = !0; lg(this, a.lastInput.documentPoint); if (this.isActive) { var d = b ? this.copiedParts.Yd() : this.draggedParts.Yd(); this.copiedParts = null; if (c && null !== this.draggedParts) for (c = this.draggedParts.iterator; c.next(); ) { var e = c.key; e instanceof V && ((e = e.containingGroup), null === e || null === e.placeholder || this.draggedParts.contains(e) || e.placeholder.s()); } a.Xa(); Qf(a, this.draggedParts); this.transactionResult = b ? 'Copy' : 'Move'; a.aa(b ? 'SelectionCopied' : 'SelectionMoved', d); } this.stopTool(); } } }; xf.prototype.simulatedMouseMove = function (a, b, c) { if (null === If) return !1; var d = If.diagram; c instanceof P || (c = null); var e = Mf; c !== e && (null !== e && e !== d && (e.xf(), (If.isDragOutStarted = !1), (e = e.toolManager.findTool('Dragging')), null !== e && e.doSimulatedDragLeave()), (Mf = c), null !== c && c !== d && (Wf(), (e = c.toolManager.findTool('Dragging')), null !== e && (Rf.contains(e) || Rf.add(e), e.doSimulatedDragEnter()))); if (null === c || c === d || !c.allowDrop || c.isReadOnly || !c.allowInsert) return !1; d = c.toolManager.findTool('Dragging'); null !== d && (null !== a ? (void 0 !== a.targetTouches && (0 < a.targetTouches.length ? (a = a.targetTouches[0]) : 0 < a.changedTouches.length && (a = a.changedTouches[0])), (b = c.getMouse(a))) : null === b && (b = new G()), (c.lastInput.documentPoint = b), (c.lastInput.viewPoint = c.wt(b)), (c.lastInput.down = !1), (c.lastInput.up = !1), d.doSimulatedDragOver()); return !0; }; xf.prototype.simulatedMouseUp = function (a, b, c, d) { if (null === If) return !1; null === d && (d = b); b = Mf; var e = If.diagram; if (d !== b) { var f = b.toolManager.findTool('Dragging'); if (null !== b && b !== e && null !== f) return b.xf(), (If.isDragOutStarted = !1), f.doSimulatedDragLeave(), !1; Mf = d; b = d.toolManager.findTool('Dragging'); null !== d && null !== b && (Wf(), Rf.contains(b) || Rf.add(b), b.doSimulatedDragEnter()); } return null === d ? (If.doCancel(), !0) : d !== this.diagram ? (null !== a ? (void 0 !== a.targetTouches && (0 < a.targetTouches.length ? (a = a.targetTouches[0]) : 0 < a.changedTouches.length && (a = a.changedTouches[0])), (c = d.getMouse(a))) : null === c && (c = new G()), (d.lastInput.documentPoint = c), (d.lastInput.viewPoint = d.wt(c)), (d.lastInput.down = !1), (d.lastInput.up = !0), (a = d.toolManager.findTool('Dragging')), null !== a && a.doSimulatedDrop(), (a = If), null !== a && ((d = a.mayCopy()), (a.transactionResult = d ? 'Copy' : 'Move'), a.stopTool()), !0) : !1; }; xf.prototype.mayCopy = function () { if (!this.isCopyEnabled) return !1; var a = this.diagram; if ( a.isReadOnly || a.isModelReadOnly || !a.allowInsert || !a.allowCopy || (ib ? !a.lastInput.alt : !a.lastInput.control) ) return !1; for (a = a.selection.iterator; a.next(); ) { var b = a.value; if (b.bc() && b.canCopy()) return !0; } return null !== this.draggedLink && this.dragsLink && this.draggedLink.canCopy() ? !0 : !1; }; xf.prototype.mayDragOut = function () { if (!this.isCopyEnabled) return !1; var a = this.diagram; if (!a.allowDragOut || !a.allowCopy || a.allowMove) return !1; for (a = a.selection.iterator; a.next(); ) { var b = a.value; if (b.bc() && b.canCopy()) return !0; } return null !== this.draggedLink && this.dragsLink && this.draggedLink.canCopy() ? !0 : !1; }; xf.prototype.mayMove = function () { var a = this.diagram; if (a.isReadOnly || !a.allowMove) return !1; for (a = a.selection.iterator; a.next(); ) { var b = a.value; if (b.bc() && b.canMove()) return !0; } return null !== this.draggedLink && this.dragsLink && this.draggedLink.canMove() ? !0 : !1; }; xf.prototype.computeBorder = function (a, b, c) { return this.xn || null === this.draggedParts || this.draggedParts.contains(a) ? null : c.assign(b); }; xf.prototype.Yy = function () { return If; }; xf.prototype.mayDragIn = function () { var a = this.diagram; if (!a.allowDrop || a.isReadOnly || a.isModelReadOnly || !a.allowInsert) return !1; var b = If; return null === b || b.diagram.model.dataFormat !== a.model.dataFormat ? !1 : !0; }; xf.prototype.doSimulatedDragEnter = function () { if (this.mayDragIn()) { var a = this.diagram; a.animationManager.vd(); pg(a); a.animationManager.vd(); a = If; null !== a && ((a.diagram.currentCursor = 'copy'), (a.diagram.sk = !1)); } }; xf.prototype.doSimulatedDragLeave = function () { var a = If; null !== a && a.doSimulatedDragOut(); this.doCancel(); }; xf.prototype.doSimulatedDragOver = function () { var a = this.diagram, b = If; null !== b && null !== b.draggedParts && this.mayDragIn() && ('auto' === a.currentCursor && (a.currentCursor = 'copy'), qg(this, b.draggedParts.Yd(), !1, a.firstInput), ag(this, this.copiedParts, !1), eg(this, a.lastInput.documentPoint)); }; xf.prototype.doSimulatedDrop = function () { var a = this.diagram, b = If; if (null !== b) { var c = b.diagram; b.xn = !0; Tf(this); this.mayDragIn() && (this.Aa('Drop'), qg(this, b.draggedParts.Yd(), !0, a.lastInput), ag(this, this.copiedParts, !1), null !== this.copiedParts && a.Hv(this.copiedParts.Yd()), lg(this, a.lastInput.documentPoint), a.Xa(), (b = a.selection), null !== this.copiedParts ? (this.transactionResult = 'ExternalCopy') : (b = new F()), (this.copiedParts = null), a.doFocus(), a.aa('ExternalObjectsDropped', b, c), this.yg()); } }; function qg(a, b, c, d) { if (null === a.copiedParts) { var e = a.diagram; if (!e.isReadOnly && !e.isModelReadOnly) { e.skipsUndoManager = !c; e.partManager.addsToTemporaryLayer = !c; a.startPoint = d.documentPoint; c = e.Yj(b, e, !0); var f = N.alloc(); Yf(b, f); d = f.x + f.width / 2; e = f.y + f.height / 2; N.free(f); f = a.xs; var g = new Lb(), h = G.alloc(); for (b = b.iterator; b.next(); ) { var k = b.value, l = c.J(k); k.bc() && k.canCopy() ? ((k = k.location), h.h(f.x - (d - k.x), f.y - (e - k.y)), (l.location = h), l.$b(), g.add(l, a.pd(h))) : l instanceof S && k.canCopy() && ($f(l, f.x - d, f.y - e), g.add(l, a.pd())); } G.free(h); a.copiedParts = g; Jf(a, g.Yd()); null !== a.draggedLink && ((c = a.draggedLink), (d = c.routeBounds), $f(c, a.startPoint.x - (d.x + d.width / 2), a.startPoint.y - (d.y + d.height / 2))); } } } xf.prototype.doSimulatedDragOut = function () { var a = this.diagram; a.sk = !1; this.mayCopy() || this.mayMove() ? (a.currentCursor = '') : (a.currentCursor = 'no-drop'); }; xf.prototype.computeMove = function (a, b, c, d) { c = this.diagram; return null !== c ? c.computeMove(a, b, this.dragOptions, d) : new G(); }; pa.Object.defineProperties(xf.prototype, { isCopyEnabled: { get: function () { return this.Kc; }, set: function (a) { this.Kc = a; }, }, copiesEffectiveCollection: { get: function () { return this.K; }, set: function (a) { this.K = a; }, }, dragOptions: { get: function () { return this.La; }, set: function (a) { this.La = a; }, }, isGridSnapEnabled: { get: function () { return this.dragOptions.isGridSnapEnabled; }, set: function (a) { this.dragOptions.isGridSnapEnabled = a; }, }, isComplexRoutingRealtime: { get: function () { return this.Vb; }, set: function (a) { this.Vb = a; }, }, isGridSnapRealtime: { get: function () { return this.dragOptions.isGridSnapRealtime; }, set: function (a) { this.dragOptions.isGridSnapRealtime = a; }, }, gridSnapCellSize: { get: function () { return this.dragOptions.gridSnapCellSize; }, set: function (a) { null === this.diagram || this.dragOptions.gridSnapCellSize.A(a) || ((a = a.I()), (this.dragOptions.gridSnapCellSize = a)); }, }, gridSnapCellSpot: { get: function () { return this.dragOptions.gridSnapCellSpot; }, set: function (a) { this.dragOptions.gridSnapCellSpot.A(a) || ((a = a.I()), (this.dragOptions.gridSnapCellSpot = a)); }, }, gridSnapOrigin: { get: function () { return this.dragOptions.gridSnapOrigin; }, set: function (a) { this.dragOptions.gridSnapOrigin.A(a) || ((a = a.I()), (this.dragOptions.gridSnapOrigin = a)); }, }, dragsLink: { get: function () { return this.dragOptions.dragsLink; }, set: function (a) { this.dragOptions.dragsLink = a; }, }, dragsTree: { get: function () { return this.dragOptions.dragsTree; }, set: function (a) { this.dragOptions.dragsTree = a; }, }, currentPart: { get: function () { return this.ba; }, set: function (a) { this.ba = a; }, }, copiedParts: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, draggedParts: { get: function () { return this.Ma; }, set: function (a) { this.Ma = a; }, }, draggingParts: { get: function () { return null !== this.copiedParts ? this.copiedParts.Yd() : null !== this.draggedParts ? this.draggedParts.Yd() : this.zg; }, }, draggedLink: { get: function () { return this.diagram.draggedLink; }, set: function (a) { this.diagram.draggedLink = a; }, }, isDragOutStarted: { get: function () { return this.Vc; }, set: function (a) { this.Vc = a; }, }, startPoint: { get: function () { return this.xs; }, set: function (a) { this.xs.A(a) || this.xs.assign(a); }, }, delay: { get: function () { return this.Rk; }, set: function (a) { this.Rk = a; }, }, }); xf.prototype.getDraggingSource = xf.prototype.Yy; var Rf = null, If = null, Mf = null; xf.className = 'DraggingTool'; Rf = new E(); Ta( 'draggingTool', function () { return this.findTool('Dragging'); }, function (a) { vf(this, 'Dragging', a, this.mouseMoveTools); }, ); Ua.prototype.doCancel = function () { null !== If && If.doCancel(); kf.prototype.doCancel.call(this); }; function rg() { kf.call(this); this.zg = 100; this.ba = !1; var a = new S(), b = new W(); b.isPanelMain = !0; b.stroke = 'blue'; a.add(b); b = new W(); b.toArrow = 'Standard'; b.fill = 'blue'; b.stroke = 'blue'; a.add(b); a.layerName = 'Tool'; this.Gm = a; a = new V(); b = new W(); b.portId = ''; b.figure = 'Rectangle'; b.fill = null; b.stroke = 'magenta'; b.strokeWidth = 2; b.desiredSize = gc; a.add(b); a.selectable = !1; a.layerName = 'Tool'; this.Em = a; this.Fm = b; a = new V(); b = new W(); b.portId = ''; b.figure = 'Rectangle'; b.fill = null; b.stroke = 'magenta'; b.strokeWidth = 2; b.desiredSize = gc; a.add(b); a.selectable = !1; a.layerName = 'Tool'; this.zq = a; this.Aq = b; this.Vc = this.Kc = this.Ma = this.La = this.Vb = null; this.K = !0; this.Px = new Lb(); this.Cm = this.ji = this.Dm = null; } oa(rg, kf); rg.prototype.doStop = function () { this.diagram.xf(); this.originalToPort = this.originalToNode = this.originalFromPort = this.originalFromNode = this.originalLink = null; this.validPortsCache.clear(); this.targetPort = null; }; rg.prototype.copyPortProperties = function (a, b, c, d, e) { if (null !== a && null !== b && null !== c && null !== d) { var f = b.De(), g = M.alloc(); g.width = b.naturalBounds.width * f; g.height = b.naturalBounds.height * f; d.desiredSize = g; M.free(g); e ? ((d.toSpot = b.toSpot), (d.toEndSegmentLength = b.toEndSegmentLength)) : ((d.fromSpot = b.fromSpot), (d.fromEndSegmentLength = b.fromEndSegmentLength)); c.locationSpot = dd; f = G.alloc(); c.location = b.ma(dd, f); G.free(f); d.angle = b.Li(); null !== this.portTargeted && this.portTargeted(a, b, c, d, e); } }; rg.prototype.setNoTargetPortProperties = function (a, b, c) { null !== b && ((b.desiredSize = gc), (b.fromSpot = Sc), (b.toSpot = Sc)); null !== a && (a.location = this.diagram.lastInput.documentPoint); null !== this.portTargeted && this.portTargeted(null, null, a, b, c); }; rg.prototype.doMouseDown = function () { this.isActive && this.doMouseMove(); }; rg.prototype.doMouseMove = function () { if (this.isActive) { var a = this.diagram; this.targetPort = this.findTargetPort(this.isForwards); if (null !== this.targetPort && this.targetPort.part instanceof V) { var b = this.targetPort.part; this.isForwards ? this.copyPortProperties( b, this.targetPort, this.temporaryToNode, this.temporaryToPort, !0, ) : this.copyPortProperties( b, this.targetPort, this.temporaryFromNode, this.temporaryFromPort, !1, ); } else this.isForwards ? this.setNoTargetPortProperties(this.temporaryToNode, this.temporaryToPort, !0) : this.setNoTargetPortProperties(this.temporaryFromNode, this.temporaryFromPort, !1); (a.allowHorizontalScroll || a.allowVerticalScroll) && a.Ns(a.lastInput.viewPoint); } }; rg.prototype.findValidLinkablePort = function (a, b) { if (null === a) return null; var c = a.part; if (!(c instanceof V)) return null; for (; null !== a; ) { var d = b ? a.toLinkable : a.fromLinkable; if ( !0 === d && (null !== a.portId || a instanceof V) && (b ? this.isValidTo(c, a) : this.isValidFrom(c, a)) ) return a; if (!1 === d) break; a = a.panel; } return null; }; rg.prototype.findTargetPort = function (a) { var b = this.diagram, c = b.lastInput.documentPoint, d = this.portGravity; 0 >= d && (d = 0.1); var e = this, f = b.qg( c, d, function (b) { return e.findValidLinkablePort(b, a); }, null, !0, ); d = Infinity; b = null; for (f = f.iterator; f.next(); ) { var g = f.value, h = g.part; if (h instanceof V) { var k = g.ma(dd, G.alloc()), l = c.x - k.x, m = c.y - k.y; G.free(k); k = l * l + m * m; k < d && ((l = this.validPortsCache.J(g)), null !== l ? l && ((b = g), (d = k)) : (a && this.isValidLink(this.originalFromNode, this.originalFromPort, h, g)) || (!a && this.isValidLink(h, g, this.originalToNode, this.originalToPort)) ? (this.validPortsCache.add(g, !0), (b = g), (d = k)) : this.validPortsCache.add(g, !1)); } } return null !== b && ((c = b.part), c instanceof V && (null === c.layer || c.layer.allowLink)) ? b : null; }; rg.prototype.isValidFrom = function (a, b) { if (null === a || null === b) return this.isUnconnectedLinkValid; if ( this.diagram.currentTool === this && ((null !== a.layer && !a.layer.allowLink) || !0 !== b.fromLinkable) ) return !1; var c = b.fromMaxLinks; if (Infinity > c) { if (null !== this.originalLink && a === this.originalFromNode && b === this.originalFromPort) return !0; b = b.portId; null === b && (b = ''); if (a.Vp(b).count >= c) return !1; } return !0; }; rg.prototype.isValidTo = function (a, b) { if (null === a || null === b) return this.isUnconnectedLinkValid; if ( this.diagram.currentTool === this && ((null !== a.layer && !a.layer.allowLink) || !0 !== b.toLinkable) ) return !1; var c = b.toMaxLinks; if (Infinity > c) { if (null !== this.originalLink && a === this.originalToNode && b === this.originalToPort) return !0; b = b.portId; null === b && (b = ''); if (a.sd(b).count >= c) return !1; } return !0; }; rg.prototype.isInSameNode = function (a, b) { if (null === a || null === b) return !1; if (a === b) return !0; a = a.part; b = b.part; return null !== a && a === b; }; rg.prototype.isLinked = function (a, b) { if (null === a || null === b) return !1; var c = a.part; if (!(c instanceof V)) return !1; a = a.portId; null === a && (a = ''); var d = b.part; if (!(d instanceof V)) return !1; b = b.portId; null === b && (b = ''); for (b = d.sd(b); b.next(); ) if (((d = b.value), d.fromNode === c && d.fromPortId === a)) return !0; return !1; }; rg.prototype.isValidLink = function (a, b, c, d) { if ( !this.isValidFrom(a, b) || !this.isValidTo(c, d) || !( null === b || null === d || (((b.fromLinkableSelfNode && d.toLinkableSelfNode) || !this.isInSameNode(b, d)) && ((b.fromLinkableDuplicates && d.toLinkableDuplicates) || !this.isLinked(b, d))) ) || (null !== this.originalLink && ((null !== a && this.isLabelDependentOnLink(a, this.originalLink)) || (null !== c && this.isLabelDependentOnLink(c, this.originalLink)))) || (null !== a && null !== c && ((null === a.data && null !== c.data) || (null !== a.data && null === c.data))) || !this.isValidCycle(a, c, this.originalLink) ) return !1; if (null !== a) { var e = a.linkValidation; if (null !== e && !e(a, b, c, d, this.originalLink)) return !1; } if (null !== c && ((e = c.linkValidation), null !== e && !e(a, b, c, d, this.originalLink))) return !1; e = this.linkValidation; return null !== e ? e(a, b, c, d, this.originalLink) : !0; }; rg.prototype.isLabelDependentOnLink = function (a, b) { if (null === a) return !1; var c = a.labeledLink; if (null === c) return !1; if (c === b) return !0; var d = new F(); d.add(a); return sg(this, c, b, d); }; function sg(a, b, c, d) { if (b === c) return !0; var e = b.fromNode; if (null !== e && e.isLinkLabel && (d.add(e), sg(a, e.labeledLink, c, d))) return !0; b = b.toNode; return null !== b && b.isLinkLabel && (d.add(b), sg(a, b.labeledLink, c, d)) ? !0 : !1; } rg.prototype.isValidCycle = function (a, b, c) { void 0 === c && (c = null); if (null === a || null === b) return this.isUnconnectedLinkValid; var d = this.diagram.validCycle; if (d !== tg) { if (d === ug) { d = c || this.temporaryLink; if (null !== d && !d.isTreeLink) return !0; for (d = b.linksConnected; d.next(); ) { var e = d.value; if (e !== c && e.isTreeLink && e.toNode === b) return !1; } return !vg(this, a, b, c, !0); } if (d === wg) { d = c || this.temporaryLink; if (null !== d && !d.isTreeLink) return !0; for (d = a.linksConnected; d.next(); ) if (((e = d.value), e !== c && e.isTreeLink && e.fromNode === a)) return !1; return !vg(this, a, b, c, !0); } if (d === xg) return a === b ? (a = !0) : ((d = new F()), d.add(b), (a = yg(this, d, a, b, c))), !a; if (d === zg) return !vg(this, a, b, c, !1); if (d === Ag) return a === b ? (a = !0) : ((d = new F()), d.add(b), (a = Hg(this, d, a, b, c))), !a; } return !0; }; function vg(a, b, c, d, e) { if (b === c) return !0; if (null === b || null === c) return !1; for (var f = b.linksConnected; f.next(); ) { var g = f.value; if ( g !== d && (!e || g.isTreeLink) && g.toNode === b && ((g = g.fromNode), g !== b && vg(a, g, c, d, e)) ) return !0; } return !1; } function yg(a, b, c, d, e) { if (c === d) return !0; if (null === c || null === d || b.contains(c)) return !1; b.add(c); for (var f = c.linksConnected; f.next(); ) { var g = f.value; if (g !== e && g.toNode === c && ((g = g.fromNode), g !== c && yg(a, b, g, d, e))) return !0; } return !1; } function Hg(a, b, c, d, e) { if (c === d) return !0; if (null === c || null === d || b.contains(c)) return !1; b.add(c); for (var f = c.linksConnected; f.next(); ) { var g = f.value; if (g !== e) { var h = g.fromNode; g = g.toNode; h = h === c ? g : h; if (h !== c && Hg(a, b, h, d, e)) return !0; } } return !1; } pa.Object.defineProperties(rg.prototype, { portGravity: { get: function () { return this.zg; }, set: function (a) { 0 <= a && (this.zg = a); }, }, isUnconnectedLinkValid: { get: function () { return this.ba; }, set: function (a) { this.ba = a; }, }, temporaryLink: { get: function () { return this.Gm; }, set: function (a) { this.Gm = a; }, }, temporaryFromNode: { get: function () { return this.Em; }, set: function (a) { this.Em = a; }, }, temporaryFromPort: { get: function () { return this.Fm; }, set: function (a) { this.Fm = a; }, }, temporaryToNode: { get: function () { return this.zq; }, set: function (a) { this.zq = a; }, }, temporaryToPort: { get: function () { return this.Aq; }, set: function (a) { this.Aq = a; }, }, originalLink: { get: function () { return this.Vb; }, set: function (a) { this.Vb = a; }, }, originalFromNode: { get: function () { return this.La; }, set: function (a) { this.La = a; }, }, originalFromPort: { get: function () { return this.Ma; }, set: function (a) { this.Ma = a; }, }, originalToNode: { get: function () { return this.Kc; }, set: function (a) { this.Kc = a; }, }, originalToPort: { get: function () { return this.Vc; }, set: function (a) { this.Vc = a; }, }, isForwards: { get: function () { return this.K; }, set: function (a) { this.K = a; }, }, validPortsCache: { get: function () { return this.Px; }, }, targetPort: { get: function () { return this.Dm; }, set: function (a) { this.Dm = a; }, }, linkValidation: { get: function () { return this.ji; }, set: function (a) { this.ji = a; }, }, portTargeted: { get: function () { return this.Cm; }, set: function (a) { this.Cm = a; }, }, }); rg.className = 'LinkingBaseTool'; function Ig() { rg.call(this); this.name = 'Linking'; this.u = {}; this.l = null; this.L = Jg; this.Dh = null; } oa(Ig, rg); Ig.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; return a.isReadOnly || a.isModelReadOnly || !a.allowLink || !a.model.ct() || !a.lastInput.left || (a.currentTool !== this && !this.isBeyondDragSize()) ? !1 : null !== this.findLinkablePort(); }; Ig.prototype.findLinkablePort = function () { var a = this.diagram, b = this.startObject; null === b && (b = a.Rb(a.firstInput.documentPoint, null, null)); if (null === b || !(b.part instanceof V)) return null; a = this.direction; if (a === Jg || a === Kg) { var c = this.findValidLinkablePort(b, !1); if (null !== c) return (this.isForwards = !0), c; } if (a === Jg || a === Lg) if (((b = this.findValidLinkablePort(b, !0)), null !== b)) return (this.isForwards = !1), b; return null; }; Ig.prototype.doActivate = function () { var a = this.diagram, b = this.findLinkablePort(); null !== b && (this.Aa(this.name), (a.isMouseCaptured = !0), (a.currentCursor = 'pointer'), this.isForwards ? (null === this.temporaryToNode || this.temporaryToNode.location.o() || (this.temporaryToNode.location = a.lastInput.documentPoint), (this.originalFromPort = b), (b = this.originalFromPort.part), b instanceof V && (this.originalFromNode = b), this.copyPortProperties( this.originalFromNode, this.originalFromPort, this.temporaryFromNode, this.temporaryFromPort, !1, )) : (null === this.temporaryFromNode || this.temporaryFromNode.location.o() || (this.temporaryFromNode.location = a.lastInput.documentPoint), (this.originalToPort = b), (b = this.originalToPort.part), b instanceof V && (this.originalToNode = b), this.copyPortProperties( this.originalToNode, this.originalToPort, this.temporaryToNode, this.temporaryToPort, !0, )), a.add(this.temporaryFromNode), a.add(this.temporaryToNode), null !== this.temporaryLink && (null !== this.temporaryFromNode && (this.temporaryLink.fromNode = this.temporaryFromNode), null !== this.temporaryToNode && (this.temporaryLink.toNode = this.temporaryToNode), (this.temporaryLink.isTreeLink = this.isNewTreeLink()), this.temporaryLink.Ra(), a.add(this.temporaryLink)), (this.isActive = !0)); }; Ig.prototype.doDeactivate = function () { this.isActive = !1; var a = this.diagram; a.remove(this.temporaryLink); a.remove(this.temporaryFromNode); a.remove(this.temporaryToNode); a.isMouseCaptured = !1; a.currentCursor = ''; this.yg(); }; Ig.prototype.doStop = function () { rg.prototype.doStop.call(this); this.startObject = null; }; Ig.prototype.doMouseUp = function () { if (this.isActive) { var a = this.diagram, b = (this.transactionResult = null), c = null, d = null, e = null, f = (this.targetPort = this.findTargetPort(this.isForwards)); if (null !== f) { var g = f.part; g instanceof V && (this.isForwards ? (null !== this.originalFromNode && ((b = this.originalFromNode), (c = this.originalFromPort)), (d = g), (e = f)) : ((b = g), (c = f), null !== this.originalToNode && ((d = this.originalToNode), (e = this.originalToPort)))); } else this.isForwards ? null !== this.originalFromNode && this.isUnconnectedLinkValid && ((b = this.originalFromNode), (c = this.originalFromPort)) : null !== this.originalToNode && this.isUnconnectedLinkValid && ((d = this.originalToNode), (e = this.originalToPort)); null !== b || null !== d ? ((g = this.insertLink(b, c, d, e)), null !== g ? (null === f && (this.isForwards ? (g.defaultToPoint = a.lastInput.documentPoint) : (g.defaultFromPoint = a.lastInput.documentPoint)), a.allowSelect && a.select(g), (this.transactionResult = this.name), a.aa('LinkDrawn', g)) : (a.model.Mu(), this.doNoLink(b, c, d, e))) : this.isForwards ? this.doNoLink(this.originalFromNode, this.originalFromPort, null, null) : this.doNoLink(null, null, this.originalToNode, this.originalToPort); } this.stopTool(); }; Ig.prototype.isNewTreeLink = function () { var a = this.archetypeLinkData; if (null === a) return !0; if (a instanceof S) return a.isTreeLink; var b = this.diagram; if (null === b) return !0; a = b.partManager.getLinkCategoryForData(a); b = b.partManager.findLinkTemplateForCategory(a); return null !== b ? b.isTreeLink : !0; }; Ig.prototype.insertLink = function (a, b, c, d) { return this.diagram.partManager.insertLink(a, b, c, d); }; Ig.prototype.doNoLink = function () {}; pa.Object.defineProperties(Ig.prototype, { archetypeLinkData: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, archetypeLabelNodeData: { get: function () { return this.l; }, set: function (a) { this.l = a; }, }, direction: { get: function () { return this.L; }, set: function (a) { this.L = a; }, }, startObject: { get: function () { return this.Dh; }, set: function (a) { this.Dh = a; }, }, }); var Jg = new D(Ig, 'Either', 0), Kg = new D(Ig, 'ForwardsOnly', 0), Lg = new D(Ig, 'BackwardsOnly', 0); Ig.className = 'LinkingTool'; Ig.Either = Jg; Ig.ForwardsOnly = Kg; Ig.BackwardsOnly = Lg; function Nf() { rg.call(this); this.name = 'Relinking'; var a = new W(); a.figure = 'Diamond'; a.desiredSize = ic; a.fill = 'lightblue'; a.stroke = 'dodgerblue'; a.cursor = 'pointer'; a.segmentIndex = 0; this.u = a; a = new W(); a.figure = 'Diamond'; a.desiredSize = ic; a.fill = 'lightblue'; a.stroke = 'dodgerblue'; a.cursor = 'pointer'; a.segmentIndex = -1; this.Dh = a; this.l = null; this.Gw = new N(); } oa(Nf, rg); Nf.prototype.updateAdornments = function (a) { if (null !== a && a instanceof S) { var b = 'RelinkFrom', c = null; if (a.isSelected && !this.diagram.isReadOnly) { var d = a.selectionObject; null !== d && a.canRelinkFrom() && a.actualBounds.o() && a.isVisible() && d.actualBounds.o() && d.tf() && ((c = a.ak(b)), null === c && ((c = this.makeAdornment(d, !1)), a.qh(b, c))); } null === c && a.vf(b); b = 'RelinkTo'; c = null; a.isSelected && !this.diagram.isReadOnly && ((d = a.selectionObject), null !== d && a.canRelinkTo() && a.actualBounds.o() && a.isVisible() && d.actualBounds.o() && d.tf() && ((c = a.ak(b)), null === c ? ((c = this.makeAdornment(d, !0)), a.qh(b, c)) : c.s())); null === c && a.vf(b); } }; Nf.prototype.makeAdornment = function (a, b) { var c = new pf(); c.type = X.Link; b = b ? this.toHandleArchetype : this.fromHandleArchetype; null !== b && c.add(b.copy()); c.adornedObject = a; return c; }; Nf.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; if (a.isReadOnly || a.isModelReadOnly || !a.allowRelink || !a.model.ct() || !a.lastInput.left) return !1; var b = this.findToolHandleAt(a.firstInput.documentPoint, 'RelinkFrom'); null === b && (b = this.findToolHandleAt(a.firstInput.documentPoint, 'RelinkTo')); return null !== b; }; Nf.prototype.doActivate = function () { var a = this.diagram; if (null === this.originalLink) { var b = this.handle; null === b && ((b = this.findToolHandleAt(a.firstInput.documentPoint, 'RelinkFrom')), null === b && (b = this.findToolHandleAt(a.firstInput.documentPoint, 'RelinkTo'))); if (null === b) return; var c = b.part; if (!(c instanceof pf && c.adornedPart instanceof S)) return; this.handle = b; this.isForwards = null === c || 'RelinkTo' === c.category; this.originalLink = c.adornedPart; } this.Aa(this.name); a.isMouseCaptured = !0; a.currentCursor = 'pointer'; this.originalFromPort = this.originalLink.fromPort; this.originalFromNode = this.originalLink.fromNode; this.originalToPort = this.originalLink.toPort; this.originalToNode = this.originalLink.toNode; this.Gw.set(this.originalLink.actualBounds); null !== this.originalLink && 0 < this.originalLink.pointsCount && (null === this.originalLink.fromNode && (null !== this.temporaryFromPort && (this.temporaryFromPort.desiredSize = fc), null !== this.temporaryFromNode && (this.temporaryFromNode.location = this.originalLink.i(0))), null === this.originalLink.toNode && (null !== this.temporaryToPort && (this.temporaryToPort.desiredSize = fc), null !== this.temporaryToNode && (this.temporaryToNode.location = this.originalLink.i( this.originalLink.pointsCount - 1, )))); this.copyPortProperties( this.originalFromNode, this.originalFromPort, this.temporaryFromNode, this.temporaryFromPort, !1, ); this.copyPortProperties( this.originalToNode, this.originalToPort, this.temporaryToNode, this.temporaryToPort, !0, ); a.add(this.temporaryFromNode); a.add(this.temporaryToNode); null !== this.temporaryLink && (null !== this.temporaryFromNode && (this.temporaryLink.fromNode = this.temporaryFromNode), null !== this.temporaryToNode && (this.temporaryLink.toNode = this.temporaryToNode), this.copyLinkProperties(this.originalLink, this.temporaryLink), this.temporaryLink.Ra(), a.add(this.temporaryLink)); this.isActive = !0; }; Nf.prototype.copyLinkProperties = function (a, b) { if (null !== a && null !== b) { b.adjusting = a.adjusting; b.corner = a.corner; var c = a.curve; if (c === Mg || c === Ng) c = Og; b.curve = c; b.curviness = a.curviness; b.isTreeLink = a.isTreeLink; b.points = a.points; b.routing = a.routing; b.smoothness = a.smoothness; b.fromSpot = a.fromSpot; b.fromEndSegmentLength = a.fromEndSegmentLength; b.fromShortLength = a.fromShortLength; b.toSpot = a.toSpot; b.toEndSegmentLength = a.toEndSegmentLength; b.toShortLength = a.toShortLength; } }; Nf.prototype.doDeactivate = function () { this.isActive = !1; var a = this.diagram; a.remove(this.temporaryLink); a.remove(this.temporaryFromNode); a.remove(this.temporaryToNode); a.isMouseCaptured = !1; a.currentCursor = ''; this.yg(); }; Nf.prototype.doStop = function () { rg.prototype.doStop.call(this); this.handle = null; }; Nf.prototype.doMouseUp = function () { if (this.isActive) { var a = this.diagram; this.transactionResult = null; var b = this.originalFromNode, c = this.originalFromPort, d = this.originalToNode, e = this.originalToPort, f = this.originalLink; this.targetPort = this.findTargetPort(this.isForwards); if (null !== this.targetPort) { var g = this.targetPort.part; g instanceof V && (this.isForwards ? ((d = g), (e = this.targetPort)) : ((b = g), (c = this.targetPort))); } else this.isUnconnectedLinkValid ? this.isForwards ? (e = d = null) : (c = b = null) : (f = null); null !== f ? (this.reconnectLink(f, this.isForwards ? d : b, this.isForwards ? e : c, this.isForwards), null === this.targetPort && (this.isForwards ? (f.defaultToPoint = a.lastInput.documentPoint) : (f.defaultFromPoint = a.lastInput.documentPoint), f.Ra()), a.allowSelect && (f.isSelected = !0), (this.transactionResult = this.name), a.aa('LinkRelinked', f, this.isForwards ? this.originalToPort : this.originalFromPort)) : this.doNoRelink(this.originalLink, this.isForwards); this.originalLink.cq(this.Gw); } this.stopTool(); }; Nf.prototype.reconnectLink = function (a, b, c, d) { c = null !== c && null !== c.portId ? c.portId : ''; d ? ((a.toNode = b), (a.toPortId = c)) : ((a.fromNode = b), (a.fromPortId = c)); return !0; }; Nf.prototype.doNoRelink = function () {}; function kg(a, b, c, d, e) { null !== b ? (a.copyPortProperties(b, c, a.temporaryFromNode, a.temporaryFromPort, !1), a.diagram.add(a.temporaryFromNode)) : a.diagram.remove(a.temporaryFromNode); null !== d ? (a.copyPortProperties(d, e, a.temporaryToNode, a.temporaryToPort, !0), a.diagram.add(a.temporaryToNode)) : a.diagram.remove(a.temporaryToNode); } pa.Object.defineProperties(Nf.prototype, { fromHandleArchetype: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, toHandleArchetype: { get: function () { return this.Dh; }, set: function (a) { this.Dh = a; }, }, handle: { get: function () { return this.l; }, set: function (a) { if (null !== a && !(a.part instanceof pf)) throw Error('new handle is not in an Adornment: ' + a); this.l = a; }, }, }); Nf.className = 'RelinkingTool'; Ta( 'linkingTool', function () { return this.findTool('Linking'); }, function (a) { vf(this, 'Linking', a, this.mouseMoveTools); }, ); Ta( 'relinkingTool', function () { return this.findTool('Relinking'); }, function (a) { vf(this, 'Relinking', a, this.mouseDownTools); }, ); function Pg() { kf.call(this); this.name = 'LinkReshaping'; var a = new W(); a.figure = 'Rectangle'; a.desiredSize = hc; a.fill = 'lightblue'; a.stroke = 'dodgerblue'; this.u = a; a = new W(); a.figure = 'Diamond'; a.desiredSize = ic; a.fill = 'lightblue'; a.stroke = 'dodgerblue'; a.cursor = 'move'; this.K = a; this.ba = 3; this.Gt = this.l = null; this.ul = new G(); this.es = new E(); } oa(Pg, kf); Pg.prototype.ev = function (a) { return a && a.ks && 0 !== a.ks.value ? a.ks : Qg; }; Pg.prototype.wm = function (a, b) { a.ks = b; }; Pg.prototype.updateAdornments = function (a) { if (null !== a && a instanceof S) { var b = null; if (a.isSelected && !this.diagram.isReadOnly) { var c = a.path; null !== c && a.canReshape() && a.actualBounds.o() && a.isVisible() && c.actualBounds.o() && c.tf() && ((b = a.ak(this.name)), null === b || b.Dw !== a.pointsCount || b.Ow !== a.resegmentable) && ((b = this.makeAdornment(c)), null !== b && ((b.Dw = a.pointsCount), (b.Ow = a.resegmentable), a.qh(this.name, b))); } null === b && a.vf(this.name); } }; Pg.prototype.makeAdornment = function (a) { var b = a.part, c = b.pointsCount, d = b.isOrthogonal, e = null; if (null !== b.points && 1 < c) { e = new pf(); e.type = X.Link; c = b.firstPickIndex; var f = b.lastPickIndex, g = d ? 1 : 0; if (b.resegmentable && b.computeCurve() !== Rg) for (var h = c + g; h < f - g; h++) { var k = this.makeResegmentHandle(a, h); null !== k && ((k.segmentIndex = h), (k.segmentFraction = 0.5), (k.fromMaxLinks = 999), e.add(k)); } for (g = c + 1; g < f; g++) if (((h = this.makeHandle(a, g)), null !== h)) { h.segmentIndex = g; if (g !== c) if (g === c + 1 && d) { k = b.i(c); var l = b.i(c + 1); H.w(k.x, l.x) && H.w(k.y, l.y) && (l = b.i(c - 1)); H.w(k.x, l.x) ? (this.wm(h, Sg), (h.cursor = 'n-resize')) : H.w(k.y, l.y) && (this.wm(h, Tg), (h.cursor = 'w-resize')); } else g === f - 1 && d ? ((k = b.i(f - 1)), (l = b.i(f)), H.w(k.x, l.x) && H.w(k.y, l.y) && (k = b.i(f + 1)), H.w(k.x, l.x) ? (this.wm(h, Sg), (h.cursor = 'n-resize')) : H.w(k.y, l.y) && (this.wm(h, Tg), (h.cursor = 'w-resize'))) : g !== f && (this.wm(h, Ug), (h.cursor = 'move')); e.add(h); } e.adornedObject = a; } return e; }; Pg.prototype.makeHandle = function () { var a = this.handleArchetype; return null === a ? null : a.copy(); }; Pg.prototype.makeResegmentHandle = function () { var a = this.midHandleArchetype; return null === a ? null : a.copy(); }; Pg.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; return !a.isReadOnly && a.allowReshape && a.lastInput.left ? null !== this.findToolHandleAt(a.firstInput.documentPoint, this.name) : !1; }; Pg.prototype.doActivate = function () { var a = this.diagram; null === this.handle && (this.handle = this.findToolHandleAt(a.firstInput.documentPoint, this.name)); if (null !== this.handle) { var b = this.handle.part.adornedPart; if (b instanceof S) { this.Gt = b; a.isMouseCaptured = !0; this.Aa(this.name); if (b.resegmentable && 999 === this.handle.fromMaxLinks) { var c = b.points.copy(), d = this.getResegmentingPoint(); c.Ib(this.handle.segmentIndex + 1, d); b.isOrthogonal && c.Ib(this.handle.segmentIndex + 1, d); b.points = c; b.Jb(); b.updateAdornments(); this.handle = this.findToolHandleAt(a.firstInput.documentPoint, this.name); if (null === this.handle) { this.doDeactivate(); return; } } this.ul = b.i(this.handle.segmentIndex); this.es = b.points.copy(); this.isActive = !0; } } }; Pg.prototype.doDeactivate = function () { this.yg(); this.Gt = this.handle = null; this.isActive = this.diagram.isMouseCaptured = !1; }; Pg.prototype.doCancel = function () { var a = this.adornedLink; null !== a && (a.points = this.es); this.stopTool(); }; Pg.prototype.getResegmentingPoint = function () { return this.handle.ma(dd); }; Pg.prototype.doMouseMove = function () { var a = this.diagram; this.isActive && ((a = this.computeReshape(a.lastInput.documentPoint)), this.reshape(a)); }; Pg.prototype.doMouseUp = function () { var a = this.diagram; if (this.isActive) { var b = this.computeReshape(a.lastInput.documentPoint); this.reshape(b); b = this.adornedLink; if (null !== b && b.resegmentable) { var c = this.handle.segmentIndex, d = b.i(c - 1), e = b.i(c), f = b.i(c + 1); if (b.isOrthogonal) { if (c > b.firstPickIndex + 1 && c < b.lastPickIndex - 1) { var g = b.i(c - 2); if ( Math.abs(d.x - e.x) < this.resegmentingDistance && Math.abs(d.y - e.y) < this.resegmentingDistance && (Vg(this, g, d, e, f, !0) || Vg(this, g, d, e, f, !1)) ) { var h = b.points.copy(); Vg(this, g, d, e, f, !0) ? (h.gd(c - 2, new G(g.x, (f.y + g.y) / 2)), h.gd(c + 1, new G(f.x, (f.y + g.y) / 2))) : (h.gd(c - 2, new G((f.x + g.x) / 2, g.y)), h.gd(c + 1, new G((f.x + g.x) / 2, f.y))); h.mb(c); h.mb(c - 1); b.points = h; b.Jb(); } else (g = b.i(c + 2)), Math.abs(e.x - f.x) < this.resegmentingDistance && Math.abs(e.y - f.y) < this.resegmentingDistance && (Vg(this, d, e, f, g, !0) || Vg(this, d, e, f, g, !1)) && ((h = b.points.copy()), Vg(this, d, e, f, g, !0) ? (h.gd(c - 1, new G(d.x, (d.y + g.y) / 2)), h.gd(c + 2, new G(g.x, (d.y + g.y) / 2))) : (h.gd(c - 1, new G((d.x + g.x) / 2, d.y)), h.gd(c + 2, new G((d.x + g.x) / 2, g.y))), h.mb(c + 1), h.mb(c), (b.points = h), b.Jb()); } } else (g = G.alloc()), H.Si(d.x, d.y, f.x, f.y, e.x, e.y, g) && g.Ce(e) < this.resegmentingDistance * this.resegmentingDistance && ((d = b.points.copy()), d.mb(c), (b.points = d), b.Jb()), G.free(g); } a.Xa(); this.transactionResult = this.name; a.aa('LinkReshaped', this.adornedLink, this.es); } this.stopTool(); }; function Vg(a, b, c, d, e, f) { return f ? Math.abs(b.y - c.y) < a.resegmentingDistance && Math.abs(c.y - d.y) < a.resegmentingDistance && Math.abs(d.y - e.y) < a.resegmentingDistance : Math.abs(b.x - c.x) < a.resegmentingDistance && Math.abs(c.x - d.x) < a.resegmentingDistance && Math.abs(d.x - e.x) < a.resegmentingDistance; } Pg.prototype.reshape = function (a) { var b = this.adornedLink; b.Ch(); var c = this.handle.segmentIndex, d = this.ev(this.handle); if (b.isOrthogonal) if (c === b.firstPickIndex + 1) (c = b.firstPickIndex + 1), d === Sg ? (b.M(c, b.i(c - 1).x, a.y), b.M(c + 1, b.i(c + 2).x, a.y)) : d === Tg && (b.M(c, a.x, b.i(c - 1).y), b.M(c + 1, a.x, b.i(c + 2).y)); else if (c === b.lastPickIndex - 1) (c = b.lastPickIndex - 1), d === Sg ? (b.M(c - 1, b.i(c - 2).x, a.y), b.M(c, b.i(c + 1).x, a.y)) : d === Tg && (b.M(c - 1, a.x, b.i(c - 2).y), b.M(c, a.x, b.i(c + 1).y)); else { d = c; var e = b.i(d), f = b.i(d - 1), g = b.i(d + 1); H.w(f.x, e.x) && H.w(e.y, g.y) ? (H.w(f.x, b.i(d - 2).x) && !H.w(f.y, b.i(d - 2).y) ? (b.m(d, a.x, f.y), c++, d++) : b.M(d - 1, a.x, f.y), H.w(g.y, b.i(d + 2).y) && !H.w(g.x, b.i(d + 2).x) ? b.m(d + 1, g.x, a.y) : b.M(d + 1, g.x, a.y)) : H.w(f.y, e.y) && H.w(e.x, g.x) ? (H.w(f.y, b.i(d - 2).y) && !H.w(f.x, b.i(d - 2).x) ? (b.m(d, f.x, a.y), c++, d++) : b.M(d - 1, f.x, a.y), H.w(g.x, b.i(d + 2).x) && !H.w(g.y, b.i(d + 2).y) ? b.m(d + 1, a.x, g.y) : b.M(d + 1, a.x, g.y)) : H.w(f.x, e.x) && H.w(e.x, g.x) ? (H.w(f.x, b.i(d - 2).x) && !H.w(f.y, b.i(d - 2).y) ? (b.m(d, a.x, f.y), c++, d++) : b.M(d - 1, a.x, f.y), H.w(g.x, b.i(d + 2).x) && !H.w(g.y, b.i(d + 2).y) ? b.m(d + 1, a.x, g.y) : b.M(d + 1, a.x, g.y)) : H.w(f.y, e.y) && H.w(e.y, g.y) && (H.w(f.y, b.i(d - 2).y) && !H.w(f.x, b.i(d - 2).x) ? (b.m(d, f.x, a.y), c++, d++) : b.M(d - 1, f.x, a.y), H.w(g.y, b.i(d + 2).y) && !H.w(g.x, b.i(d + 2).x) ? b.m(d + 1, g.x, a.y) : b.M(d + 1, g.x, a.y)); b.M(c, a.x, a.y); } else b.M(c, a.x, a.y), (d = b.fromNode), (e = b.fromPort), null !== d && ((f = d.findVisibleNode()), null !== f && f !== d && ((d = f), (e = d.port))), 1 === c && b.computeSpot(!0, e).jc() && ((f = e.ma(dd, G.alloc())), (d = b.getLinkPointFromPoint(d, e, f, a, !0, G.alloc())), b.M(0, d.x, d.y), G.free(f), G.free(d)), (d = b.toNode), (e = b.toPort), null !== d && ((f = d.findVisibleNode()), null !== f && f !== d && ((d = f), (e = d.port))), c === b.pointsCount - 2 && b.computeSpot(!1, e).jc() && ((c = e.ma(dd, G.alloc())), (a = b.getLinkPointFromPoint(d, e, c, a, !1, G.alloc())), b.M(b.pointsCount - 1, a.x, a.y), G.free(c), G.free(a)); b.mf(); }; Pg.prototype.computeReshape = function (a) { var b = this.adornedLink, c = this.handle.segmentIndex; switch (this.ev(this.handle)) { case Ug: return a; case Sg: return new G(b.i(c).x, a.y); case Tg: return new G(a.x, b.i(c).y); default: case Qg: return b.i(c); } }; pa.Object.defineProperties(Pg.prototype, { handleArchetype: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, midHandleArchetype: { get: function () { return this.K; }, set: function (a) { this.K = a; }, }, handle: { get: function () { return this.l; }, set: function (a) { if (null !== a && !(a.part instanceof pf)) throw Error('new handle is not in an Adornment: ' + a); this.l = a; }, }, adornedLink: { get: function () { return this.Gt; }, }, resegmentingDistance: { get: function () { return this.ba; }, set: function (a) { this.ba = a; }, }, originalPoint: { get: function () { return this.ul; }, }, originalPoints: { get: function () { return this.es; }, }, }); Pg.prototype.setReshapingBehavior = Pg.prototype.wm; Pg.prototype.getReshapingBehavior = Pg.prototype.ev; var Qg = new D(Pg, 'None', 0), Tg = new D(Pg, 'Horizontal', 1), Sg = new D(Pg, 'Vertical', 2), Ug = new D(Pg, 'All', 3); Pg.className = 'LinkReshapingTool'; Pg.None = Qg; Pg.Horizontal = Tg; Pg.Vertical = Sg; Pg.All = Ug; Ta( 'linkReshapingTool', function () { return this.findTool('LinkReshaping'); }, function (a) { vf(this, 'LinkReshaping', a, this.mouseDownTools); }, ); function Wg() { kf.call(this); this.name = 'Resizing'; this.Sf = new M(1, 1).freeze(); this.Rf = new M(9999, 9999).freeze(); this.Eg = new M(NaN, NaN).freeze(); this.K = !1; this.$d = null; var a = new W(); a.alignmentFocus = dd; a.figure = 'Rectangle'; a.desiredSize = hc; a.fill = 'lightblue'; a.stroke = 'dodgerblue'; a.strokeWidth = 1; a.cursor = 'pointer'; this.u = a; this.l = null; this.ul = new G(); this.Fw = new M(); this.Ko = new G(); this.Xt = new M(0, 0); this.Wt = new M(Infinity, Infinity); this.Vt = new M(1, 1); this.Cw = !0; } oa(Wg, kf); Wg.prototype.updateAdornments = function (a) { if (!(null === a || a instanceof S)) { if (a.isSelected && !this.diagram.isReadOnly) { var b = a.resizeObject, c = a.ak(this.name); if ( null !== b && a.canResize() && a.actualBounds.o() && a.isVisible() && b.actualBounds.o() && b.tf() ) { if (null === c || c.adornedObject !== b) c = this.makeAdornment(b); if (null !== c) { b = b.Li(); og(a) && this.updateResizeHandles(c, b); a.qh(this.name, c); return; } } } a.vf(this.name); } }; Wg.prototype.makeAdornment = function (a) { var b = a.part.resizeAdornmentTemplate; if (null === b) { b = new pf(); b.type = X.Spot; b.locationSpot = dd; var c = new Xg(); c.isPanelMain = !0; b.add(c); b.add(this.makeHandle(a, Tc)); b.add(this.makeHandle(a, Vc)); b.add(this.makeHandle(a, hd)); b.add(this.makeHandle(a, fd)); b.add(this.makeHandle(a, Jd)); b.add(this.makeHandle(a, Sd)); b.add(this.makeHandle(a, Td)); b.add(this.makeHandle(a, Kd)); } else if ((Yg(b), (b = b.copy()), null === b)) return null; b.adornedObject = a; return b; }; Wg.prototype.makeHandle = function (a, b) { a = this.handleArchetype; if (null === a) return null; a = a.copy(); a.alignment = b; return a; }; Wg.prototype.updateResizeHandles = function (a, b) { if (null !== a) if (!a.alignment.Kb() && ('pointer' === a.cursor || 0 < a.cursor.indexOf('resize'))) a: { var c = a.alignment; c.jc() && (c = dd); if (0 >= c.x) b = 0 >= c.y ? b + 225 : 1 <= c.y ? b + 135 : b + 180; else if (1 <= c.x) 0 >= c.y ? (b += 315) : 1 <= c.y && (b += 45); else if (0 >= c.y) b += 270; else if (1 <= c.y) b += 90; else break a; 0 > b ? (b += 360) : 360 <= b && (b -= 360); a.cursor = 22.5 > b ? 'e-resize' : 67.5 > b ? 'se-resize' : 112.5 > b ? 's-resize' : 157.5 > b ? 'sw-resize' : 202.5 > b ? 'w-resize' : 247.5 > b ? 'nw-resize' : 292.5 > b ? 'n-resize' : 337.5 > b ? 'ne-resize' : 'e-resize'; } else if (a instanceof X) for (a = a.elements; a.next(); ) this.updateResizeHandles(a.value, b); }; Wg.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; return !a.isReadOnly && a.allowResize && a.lastInput.left ? null !== this.findToolHandleAt(a.firstInput.documentPoint, this.name) : !1; }; Wg.prototype.doActivate = function () { var a = this.diagram; null === this.handle && (this.handle = this.findToolHandleAt(a.firstInput.documentPoint, this.name)); null !== this.handle && ((this.adornedObject = this.handle.part.adornedObject), null !== this.adornedObject && (this.ul.set(this.adornedObject.ma(this.handle.alignment.sv())), this.Ko.set(this.adornedObject.part.location), this.Fw.set(this.adornedObject.desiredSize), (this.Vt = this.computeCellSize()), (this.Xt = this.computeMinSize()), (this.Wt = this.computeMaxSize()), (a.isMouseCaptured = !0), (this.Cw = a.animationManager.isEnabled), (a.animationManager.isEnabled = !1), this.Aa(this.name), (this.isActive = !0))); }; Wg.prototype.doDeactivate = function () { var a = this.diagram; this.yg(); this.$d = this.handle = null; this.isActive = a.isMouseCaptured = !1; a.animationManager.isEnabled = this.Cw; }; Wg.prototype.doCancel = function () { null !== this.adornedObject && ((this.adornedObject.desiredSize = this.originalDesiredSize), (this.adornedObject.part.location = this.originalLocation)); this.stopTool(); }; Wg.prototype.doMouseMove = function () { var a = this.diagram; if (this.isActive) { var b = this.Xt, c = this.Wt, d = this.Vt, e = this.adornedObject.Vs(a.lastInput.documentPoint, G.alloc()), f = this.computeReshape(); b = this.computeResize(e, this.handle.alignment, b, c, d, f); this.resize(b); a.fd(); G.free(e); } }; Wg.prototype.doMouseUp = function () { var a = this.diagram; if (this.isActive) { var b = this.Xt, c = this.Wt, d = this.Vt, e = this.adornedObject.Vs(a.lastInput.documentPoint, G.alloc()), f = this.computeReshape(); b = this.computeResize(e, this.handle.alignment, b, c, d, f); this.resize(b); G.free(e); a.Xa(); this.transactionResult = this.name; a.aa('PartResized', this.adornedObject, this.originalDesiredSize); } this.stopTool(); }; Wg.prototype.resize = function (a) { var b = this.diagram, c = this.adornedObject, d = c.part; c.desiredSize = a.size; d.$b(); a = this.adornedObject.ma(this.handle.alignment.sv()); d instanceof ig ? ((c = new E()), c.add(d), b.moveParts(c, this.ul.copy().Xd(a), !0)) : (d.location = d.location.copy().Xd(a).add(this.ul)); }; Wg.prototype.computeResize = function (a, b, c, d, e, f) { b.jc() && (b = dd); var g = this.adornedObject.naturalBounds, h = g.x, k = g.y, l = g.x + g.width, m = g.y + g.height, n = 1; if (!f) { n = g.width; var p = g.height; 0 >= n && (n = 1); 0 >= p && (p = 1); n = p / n; } p = G.alloc(); H.Wp(a.x, a.y, h, k, e.width, e.height, p); a = g.copy(); 0 >= b.x ? 0 >= b.y ? ((a.x = Math.max(p.x, l - d.width)), (a.x = Math.min(a.x, l - c.width)), (a.width = Math.max(l - a.x, c.width)), (a.y = Math.max(p.y, m - d.height)), (a.y = Math.min(a.y, m - c.height)), (a.height = Math.max(m - a.y, c.height)), f || (1 <= a.height / a.width ? ((a.height = Math.max(Math.min(n * a.width, d.height), c.height)), (a.width = a.height / n)) : ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)), (a.height = n * a.width)), (a.x = l - a.width), (a.y = m - a.height))) : 1 <= b.y ? ((a.x = Math.max(p.x, l - d.width)), (a.x = Math.min(a.x, l - c.width)), (a.width = Math.max(l - a.x, c.width)), (a.height = Math.max(Math.min(p.y - k, d.height), c.height)), f || (1 <= a.height / a.width ? ((a.height = Math.max(Math.min(n * a.width, d.height), c.height)), (a.width = a.height / n)) : ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)), (a.height = n * a.width)), (a.x = l - a.width))) : ((a.x = Math.max(p.x, l - d.width)), (a.x = Math.min(a.x, l - c.width)), (a.width = l - a.x), f || ((a.height = Math.max(Math.min(n * a.width, d.height), c.height)), (a.width = a.height / n), (a.y = k + 0.5 * (m - k - a.height)))) : 1 <= b.x ? 0 >= b.y ? ((a.width = Math.max(Math.min(p.x - h, d.width), c.width)), (a.y = Math.max(p.y, m - d.height)), (a.y = Math.min(a.y, m - c.height)), (a.height = Math.max(m - a.y, c.height)), f || (1 <= a.height / a.width ? ((a.height = Math.max(Math.min(n * a.width, d.height), c.height)), (a.width = a.height / n)) : ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)), (a.height = n * a.width)), (a.y = m - a.height))) : 1 <= b.y ? ((a.width = Math.max(Math.min(p.x - h, d.width), c.width)), (a.height = Math.max(Math.min(p.y - k, d.height), c.height)), f || (1 <= a.height / a.width ? ((a.height = Math.max(Math.min(n * a.width, d.height), c.height)), (a.width = a.height / n)) : ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)), (a.height = n * a.width)))) : ((a.width = Math.max(Math.min(p.x - h, d.width), c.width)), f || ((a.height = Math.max(Math.min(n * a.width, d.height), c.height)), (a.width = a.height / n), (a.y = k + 0.5 * (m - k - a.height)))) : 0 >= b.y ? ((a.y = Math.max(p.y, m - d.height)), (a.y = Math.min(a.y, m - c.height)), (a.height = m - a.y), f || ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)), (a.height = n * a.width), (a.x = h + 0.5 * (l - h - a.width)))) : 1 <= b.y && ((a.height = Math.max(Math.min(p.y - k, d.height), c.height)), f || ((a.width = Math.max(Math.min(a.height / n, d.width), c.width)), (a.height = n * a.width), (a.x = h + 0.5 * (l - h - a.width)))); G.free(p); return a; }; Wg.prototype.computeReshape = function () { var a = Zg; this.adornedObject instanceof W && (a = $g(this.adornedObject)); return !(a === ah || this.diagram.lastInput.shift); }; Wg.prototype.computeMinSize = function () { var a = this.adornedObject.minSize.copy(), b = this.minSize; !isNaN(b.width) && b.width > a.width && (a.width = b.width); !isNaN(b.height) && b.height > a.height && (a.height = b.height); return a; }; Wg.prototype.computeMaxSize = function () { var a = this.adornedObject.maxSize.copy(), b = this.maxSize; !isNaN(b.width) && b.width < a.width && (a.width = b.width); !isNaN(b.height) && b.height < a.height && (a.height = b.height); return a; }; Wg.prototype.computeCellSize = function () { var a = new M(NaN, NaN), b = this.adornedObject.part; null !== b && ((b = b.resizeCellSize), !isNaN(b.width) && 0 < b.width && (a.width = b.width), !isNaN(b.height) && 0 < b.height && (a.height = b.height)); b = this.cellSize; isNaN(a.width) && !isNaN(b.width) && 0 < b.width && (a.width = b.width); isNaN(a.height) && !isNaN(b.height) && 0 < b.height && (a.height = b.height); b = this.diagram; (isNaN(a.width) || isNaN(a.height)) && b && ((b = b.grid), null !== b && b.visible && this.isGridSnapEnabled && ((b = b.gridCellSize), isNaN(a.width) && !isNaN(b.width) && 0 < b.width && (a.width = b.width), isNaN(a.height) && !isNaN(b.height) && 0 < b.height && (a.height = b.height))); if (isNaN(a.width) || 0 === a.width || Infinity === a.width) a.width = 1; if (isNaN(a.height) || 0 === a.height || Infinity === a.height) a.height = 1; return a; }; pa.Object.defineProperties(Wg.prototype, { handleArchetype: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, handle: { get: function () { return this.l; }, set: function (a) { if (null !== a && !(a.part instanceof pf)) throw Error('new handle is not in an Adornment: ' + a); this.l = a; }, }, adornedObject: { get: function () { return this.$d; }, set: function (a) { if (null !== a && a.part instanceof pf) throw Error('new handle must not be in an Adornment: ' + a); this.$d = a; }, }, minSize: { get: function () { return this.Sf; }, set: function (a) { if (!this.Sf.A(a)) { var b = a.width; isNaN(b) && (b = 0); a = a.height; isNaN(a) && (a = 0); this.Sf.h(b, a); } }, }, maxSize: { get: function () { return this.Rf; }, set: function (a) { if (!this.Rf.A(a)) { var b = a.width; isNaN(b) && (b = Infinity); a = a.height; isNaN(a) && (a = Infinity); this.Rf.h(b, a); } }, }, cellSize: { get: function () { return this.Eg; }, set: function (a) { this.Eg.A(a) || this.Eg.assign(a); }, }, isGridSnapEnabled: { get: function () { return this.K; }, set: function (a) { this.K = a; }, }, originalDesiredSize: { get: function () { return this.Fw; }, }, originalLocation: { get: function () { return this.Ko; }, }, }); Wg.className = 'ResizingTool'; Ta( 'resizingTool', function () { return this.findTool('Resizing'); }, function (a) { vf(this, 'Resizing', a, this.mouseDownTools); }, ); function bh() { kf.call(this); this.name = 'Rotating'; this.Ma = 45; this.La = 2; this.Ko = new G(); this.$d = null; var a = new W(); a.figure = 'Ellipse'; a.desiredSize = ic; a.fill = 'lightblue'; a.stroke = 'dodgerblue'; a.strokeWidth = 1; a.cursor = 'pointer'; this.u = a; this.l = null; this.Ew = 0; this.qu = new G(NaN, NaN); this.K = 0; this.ba = 50; } oa(bh, kf); bh.prototype.updateAdornments = function (a) { if (null !== a) { if (a.Ah()) { var b = a.rotateObject; if (b === a || b === a.path || b.isPanelMain) return; } if ( a.isSelected && !this.diagram.isReadOnly && ((b = a.rotateObject), null !== b && a.canRotate() && a.actualBounds.o() && a.isVisible() && b.actualBounds.o() && b.tf()) ) { var c = a.ak(this.name); if (null === c || c.adornedObject !== b) c = this.makeAdornment(b); if (null !== c) { c.angle = b.Li(); null === c.placeholder && (c.location = this.computeAdornmentLocation(b)); a.qh(this.name, c); return; } } a.vf(this.name); } }; bh.prototype.makeAdornment = function (a) { var b = a.part.rotateAdornmentTemplate; if (null === b) { b = new pf(); b.type = X.Position; b.locationSpot = dd; var c = this.handleArchetype; null !== c && b.add(c.copy()); } else if ((Yg(b), (b = b.copy()), null === b)) return null; b.adornedObject = a; return b; }; bh.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; return !a.isReadOnly && a.allowRotate && a.lastInput.left ? null !== this.findToolHandleAt(a.firstInput.documentPoint, this.name) : !1; }; bh.prototype.doActivate = function () { var a = this.diagram; if (null === this.adornedObject) { null === this.handle && (this.handle = this.findToolHandleAt(a.firstInput.documentPoint, this.name)); if (null === this.handle) return; this.adornedObject = this.handle.part.adornedObject; } null !== this.adornedObject && ((this.Ew = this.adornedObject.angle), (this.qu = this.computeRotationPoint(this.adornedObject)), (this.Ko = this.adornedObject.part.location.copy()), (a.isMouseCaptured = !0), (a.delaysLayout = !0), this.Aa(this.name), (this.isActive = !0)); }; bh.prototype.computeRotationPoint = function (a) { var b = a.part, c = b.locationObject; return b.rotationSpot.gb() ? a.ma(b.rotationSpot) : a === b || a === c ? c.ma(b.locationSpot) : a.ma(dd); }; bh.prototype.computeAdornmentLocation = function (a) { var b = this.rotationPoint; b.o() || (b = this.computeRotationPoint(a)); b = a.Vs(b); var c = this.handleAngle; 0 > c ? (c += 360) : 360 <= c && (c -= 360); c = Math.round(45 * Math.round(c / 45)); var d = this.handleDistance; 0 === c ? (b.x = a.naturalBounds.width + d) : 45 === c ? ((b.x = a.naturalBounds.width + d), (b.y = a.naturalBounds.height + d)) : 90 === c ? (b.y = a.naturalBounds.height + d) : 135 === c ? ((b.x = -d), (b.y = a.naturalBounds.height + d)) : 180 === c ? (b.x = -d) : 225 === c ? ((b.x = -d), (b.y = -d)) : 270 === c ? (b.y = -d) : 315 === c && ((b.x = a.naturalBounds.width + d), (b.y = -d)); return a.ma(b); }; bh.prototype.doDeactivate = function () { var a = this.diagram; this.yg(); this.$d = this.handle = null; this.qu = new G(NaN, NaN); this.isActive = a.isMouseCaptured = !1; }; bh.prototype.doCancel = function () { this.diagram.delaysLayout = !1; this.rotate(this.originalAngle); this.stopTool(); }; bh.prototype.doMouseMove = function () { var a = this.diagram; this.isActive && ((a = this.computeRotate(a.lastInput.documentPoint)), this.rotate(a)); }; bh.prototype.doMouseUp = function () { var a = this.diagram; if (this.isActive) { a.delaysLayout = !1; var b = this.computeRotate(a.lastInput.documentPoint); this.rotate(b); a.Xa(); this.transactionResult = this.name; a.aa('PartRotated', this.adornedObject, this.originalAngle); } this.stopTool(); }; bh.prototype.rotate = function (a) { var b = this.adornedObject; if (null !== b) { b.angle = a; b = b.part; b.$b(); var c = b.locationObject, d = b.rotateObject; if (c === d || c.tg(d)) (c = this.Ko.copy()), (b.location = c .Xd(this.rotationPoint) .rotate(a - this.originalAngle) .add(this.rotationPoint)); } }; bh.prototype.computeRotate = function (a) { a = this.rotationPoint.Wa(a) - this.handleAngle; var b = this.adornedObject.panel; null !== b && (a -= b.Li()); 360 <= a ? (a -= 360) : 0 > a && (a += 360); b = Math.min(Math.abs(this.snapAngleMultiple), 180); var c = Math.min(Math.abs(this.snapAngleEpsilon), b / 2); !this.diagram.lastInput.shift && 0 < b && 0 < c && (a % b < c ? (a = Math.floor(a / b) * b) : a % b > b - c && (a = (Math.floor(a / b) + 1) * b)); 360 <= a ? (a -= 360) : 0 > a && (a += 360); return a; }; pa.Object.defineProperties(bh.prototype, { handleArchetype: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, handle: { get: function () { return this.l; }, set: function (a) { if (null !== a && !(a.part instanceof pf)) throw Error('new handle is not in an Adornment: ' + a); this.l = a; }, }, adornedObject: { get: function () { return this.$d; }, set: function (a) { if (null !== a && a.part instanceof pf) throw Error('new handle must not be in an Adornment: ' + a); this.$d = a; }, }, snapAngleMultiple: { get: function () { return this.Ma; }, set: function (a) { this.Ma = a; }, }, snapAngleEpsilon: { get: function () { return this.La; }, set: function (a) { this.La = a; }, }, originalAngle: { get: function () { return this.Ew; }, }, rotationPoint: { get: function () { return this.qu; }, }, handleAngle: { get: function () { return this.K; }, set: function (a) { this.K = a; }, }, handleDistance: { get: function () { return this.ba; }, set: function (a) { this.ba = a; }, }, }); bh.className = 'RotatingTool'; Ta( 'rotatingTool', function () { return this.findTool('Rotating'); }, function (a) { vf(this, 'Rotating', a, this.mouseDownTools); }, ); function ch() { kf.call(this); this.name = 'ClickSelecting'; } oa(ch, kf); ch.prototype.canStart = function () { return !this.isEnabled || this.isBeyondDragSize() ? !1 : !0; }; ch.prototype.doMouseUp = function () { this.isActive && (this.standardMouseSelect(), !this.standardMouseClick() && this.diagram.lastInput.isTouchEvent && this.diagram.toolManager.doToolTip()); this.stopTool(); }; ch.className = 'ClickSelectingTool'; function dh() { kf.call(this); this.name = 'Action'; this.wk = null; } oa(dh, kf); dh.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram, b = a.lastInput, c = a.Rb(b.documentPoint, function (a) { for (; null !== a.panel && !a.isActionable; ) a = a.panel; return a; }); if (null !== c) { if (!c.isActionable) return !1; this.wk = c; a.Kk = a.Rb(b.documentPoint, null, null); return !0; } return !1; }; dh.prototype.doMouseDown = function () { if (this.isActive) { var a = this.diagram.lastInput, b = this.wk; null !== b && ((a.targetObject = b), null !== b.actionDown && b.actionDown(a, b)); } else this.canStart() && this.doActivate(); }; dh.prototype.doMouseMove = function () { if (this.isActive) { var a = this.diagram.lastInput, b = this.wk; null !== b && ((a.targetObject = b), null !== b.actionMove && b.actionMove(a, b)); } }; dh.prototype.doMouseUp = function () { if (this.isActive) { var a = this.diagram.lastInput, b = this.wk; if (null === b) return; a.targetObject = b; null !== b.actionUp && b.actionUp(a, b); this.standardMouseClick( function (a) { for (; null !== a.panel && (!a.isActionable || a !== b); ) a = a.panel; return a; }, function (a) { return a === b; }, ); } this.stopTool(); }; dh.prototype.doCancel = function () { var a = this.diagram.lastInput, b = this.wk; null !== b && ((a.targetObject = b), null !== b.actionCancel && b.actionCancel(a, b), this.stopTool()); }; dh.prototype.doStop = function () { this.wk = null; }; dh.className = 'ActionTool'; function eh() { kf.call(this); this.name = 'ClickCreating'; this.aj = null; this.u = !0; this.l = !1; this.ww = new G(0, 0); } oa(eh, kf); eh.prototype.canStart = function () { if (!this.isEnabled || null === this.archetypeNodeData) return !1; var a = this.diagram; if ( a.isReadOnly || a.isModelReadOnly || !a.allowInsert || !a.lastInput.left || this.isBeyondDragSize() ) return !1; if (this.isDoubleClick) { if ( (1 === a.lastInput.clickCount && (this.ww = a.lastInput.viewPoint.copy()), 2 !== a.lastInput.clickCount || this.isBeyondDragSize(this.ww)) ) return !1; } else if (1 !== a.lastInput.clickCount) return !1; return a.currentTool !== this && null !== a.$l(a.lastInput.documentPoint, !0) ? !1 : !0; }; eh.prototype.doMouseUp = function () { var a = this.diagram; this.isActive && this.insertPart(a.lastInput.documentPoint); this.stopTool(); }; eh.prototype.insertPart = function (a) { var b = this.diagram, c = this.archetypeNodeData; if (null === c) return null; this.Aa(this.name); var d = null; c instanceof T ? c.bc() && (Yg(c), (d = c.copy()), null !== d && b.add(d)) : null !== c && ((c = b.model.copyNodeData(c)), Ca(c) && (b.model.kf(c), (d = b.vc(c)))); null !== d && ((c = G.allocAt(a.x, a.y)), this.isGridSnapEnabled && fh(this.diagram, d, a, c), (d.location = c), b.allowSelect && b.select(d), G.free(c)); b.Xa(); this.transactionResult = this.name; b.aa('PartCreated', d); this.yg(); return d; }; pa.Object.defineProperties(eh.prototype, { archetypeNodeData: { get: function () { return this.aj; }, set: function (a) { this.aj = a; }, }, isDoubleClick: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, isGridSnapEnabled: { get: function () { return this.l; }, set: function (a) { this.l = a; }, }, }); eh.className = 'ClickCreatingTool'; function gh() { kf.call(this); this.name = 'DragSelecting'; this.Rk = 175; this.u = !1; var a = new T(); a.layerName = 'Tool'; a.selectable = !1; var b = new W(); b.name = 'SHAPE'; b.figure = 'Rectangle'; b.fill = null; b.stroke = 'magenta'; a.add(b); this.l = a; } oa(gh, kf); gh.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; if (!a.allowSelect) return !1; var b = a.lastInput; return !b.left || (a.currentTool !== this && (!this.isBeyondDragSize() || b.timestamp - a.firstInput.timestamp < this.delay || null !== a.$l(b.documentPoint, !0))) ? !1 : !0; }; gh.prototype.doActivate = function () { var a = this.diagram; this.isActive = !0; a.isMouseCaptured = !0; a.skipsUndoManager = !0; a.add(this.box); this.doMouseMove(); }; gh.prototype.doDeactivate = function () { var a = this.diagram; a.xf(); a.remove(this.box); a.skipsUndoManager = !1; this.isActive = a.isMouseCaptured = !1; }; gh.prototype.doMouseMove = function () { var a = this.diagram; if (this.isActive && null !== this.box) { var b = this.computeBoxBounds(), c = this.box.$a('SHAPE'); null === c && (c = this.box.zb()); var d = M.alloc().h(b.width, b.height); b = G.alloc().h(b.x, b.y); c.desiredSize = d; this.box.position = b; M.free(d); G.free(b); (a.allowHorizontalScroll || a.allowVerticalScroll) && a.Ns(a.lastInput.viewPoint); } }; gh.prototype.doMouseUp = function () { if (this.isActive) { var a = this.diagram; a.remove(this.box); try { (a.currentCursor = 'wait'), a.aa('ChangingSelection', a.selection), this.selectInRect(this.computeBoxBounds()), a.aa('ChangedSelection', a.selection); } finally { a.currentCursor = ''; } } this.stopTool(); }; gh.prototype.computeBoxBounds = function () { var a = this.diagram; return new N(a.firstInput.documentPoint, a.lastInput.documentPoint); }; gh.prototype.selectInRect = function (a) { var b = this.diagram, c = b.lastInput; a = b.ix(a, this.isPartialInclusion); if (ib ? c.meta : c.control) if (c.shift) for (a = a.iterator; a.next(); ) (b = a.value), b.isSelected && (b.isSelected = !1); else for (a = a.iterator; a.next(); ) (b = a.value), (b.isSelected = !b.isSelected); else if (c.shift) for (a = a.iterator; a.next(); ) (b = a.value), b.isSelected || (b.isSelected = !0); else { c = new E(); for (b = b.selection.iterator; b.next(); ) { var d = b.value; a.contains(d) || c.add(d); } for (b = c.iterator; b.next(); ) b.value.isSelected = !1; for (a = a.iterator; a.next(); ) (b = a.value), b.isSelected || (b.isSelected = !0); } }; pa.Object.defineProperties(gh.prototype, { delay: { get: function () { return this.Rk; }, set: function (a) { this.Rk = a; }, }, isPartialInclusion: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, box: { get: function () { return this.l; }, set: function (a) { this.l = a; }, }, }); gh.className = 'DragSelectingTool'; function hh() { kf.call(this); this.name = 'Panning'; this.lu = new G(); this.Zx = new G(); this.Dg = !1; var a = this; this.Iw = function () { w.document.removeEventListener('scroll', a.Iw, !1); a.stopTool(); }; } oa(hh, kf); hh.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; return (!a.allowHorizontalScroll && !a.allowVerticalScroll) || !a.lastInput.left || (a.currentTool !== this && !this.isBeyondDragSize()) ? !1 : !0; }; hh.prototype.doActivate = function () { var a = this.diagram; this.Dg ? ((a.lastInput.bubbles = !0), w.document.addEventListener('scroll', this.Iw, !1)) : ((a.currentCursor = 'move'), (a.isMouseCaptured = !0), this.lu.assign(a.position)); this.isActive = !0; }; hh.prototype.doDeactivate = function () { var a = this.diagram; a.currentCursor = ''; this.isActive = a.isMouseCaptured = !1; }; hh.prototype.doCancel = function () { var a = this.diagram; a.position = this.lu; a.isMouseCaptured = !1; this.stopTool(); }; hh.prototype.doMouseMove = function () { this.move(); }; hh.prototype.doMouseUp = function () { this.move(); this.stopTool(); }; hh.prototype.move = function () { var a = this.diagram; if (this.isActive && a) if (this.Dg) a.lastInput.bubbles = !0; else { var b = a.position, c = a.firstInput.documentPoint, d = a.lastInput.documentPoint, e = b.x + c.x - d.x; c = b.y + c.y - d.y; a.allowHorizontalScroll || (e = b.x); a.allowVerticalScroll || (c = b.y); a.position = this.Zx.h(e, c); } }; pa.Object.defineProperties(hh.prototype, { bubbles: { get: function () { return this.Dg; }, set: function (a) { this.Dg = a; }, }, originalPosition: { get: function () { return this.lu; }, }, }); hh.className = 'PanningTool'; Ta( 'clickCreatingTool', function () { return this.findTool('ClickCreating'); }, function (a) { vf(this, 'ClickCreating', a, this.mouseUpTools); }, ); Ta( 'clickSelectingTool', function () { return this.findTool('ClickSelecting'); }, function (a) { vf(this, 'ClickSelecting', a, this.mouseUpTools); }, ); Ta( 'panningTool', function () { return this.findTool('Panning'); }, function (a) { vf(this, 'Panning', a, this.mouseMoveTools); }, ); Ta( 'dragSelectingTool', function () { return this.findTool('DragSelecting'); }, function (a) { vf(this, 'DragSelecting', a, this.mouseMoveTools); }, ); Ta( 'actionTool', function () { return this.findTool('Action'); }, function (a) { vf(this, 'Action', a, this.mouseDownTools); }, ); function uf() { this.ba = this.K = this.l = this.u = null; } pa.Object.defineProperties(uf.prototype, { mainElement: { get: function () { return this.K; }, set: function (a) { this.K = a; }, }, show: { get: function () { return this.u; }, set: function (a) { this.u !== a && (this.u = a); }, }, hide: { get: function () { return this.l; }, set: function (a) { this.l !== a && (this.l = a); }, }, valueFunction: { get: function () { return this.ba; }, set: function (a) { this.ba = a; }, }, }); uf.className = 'HTMLInfo'; function ih(a, b, c) { this.text = a; this.Xw = b; this.visible = c; } ih.className = 'ContextMenuButtonInfo'; function jh() { kf.call(this); this.name = 'ContextMenu'; this.u = this.Mt = this.l = null; this.Bw = new G(); this.Nt = null; this.cu = !1; var a = this; this.Au = function () { a.stopTool(); }; } oa(jh, kf); function kh(a) { var b = new uf(); b.show = function (a, b, c) { c.showDefaultContextMenu(); }; b.hide = function (a, b) { b.hideDefaultContextMenu(); }; lh = b; a.Au = function () { a.stopTool(); }; b = va('div'); var c = va('div'); b.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'; c.style.cssText = 'z-index:10001;position: fixed;display: none;top: 0;left: 0;width: 100%;height: 100%;background-color: black;opacity: 0.8;'; var d = va('style'); w.document.getElementsByTagName('head')[0].appendChild(d); d.sheet.insertRule('.goCXul { list-style: none; }', 0); d.sheet.insertRule( '.goCXli {font:700 1.5em Helvetica, Arial, sans-serif;position: relative;min-width: 60px; }', 0, ); d.sheet.insertRule( '.goCXa {color: #444;display: inline-block;padding: 4px;text-decoration: none;margin: 2px;border: 1px solid gray;border-radius: 10px; }', 0, ); b.addEventListener('contextmenu', mh, !1); b.addEventListener('selectstart', mh, !1); c.addEventListener('contextmenu', mh, !1); b.className = 'goCXforeground'; c.className = 'goCXbackground'; w.document.body && (w.document.body.appendChild(b), w.document.body.appendChild(c)); nh = b; oh = c; ph = !0; } function mh(a) { a.preventDefault(); return !1; } jh.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; return this.isBeyondDragSize() || !a.lastInput.right ? !1 : (a.lastInput.isTouchEvent && null !== this.defaultTouchContextMenu) || null !== this.findObjectWithContextMenu() ? !0 : !1; }; jh.prototype.doStart = function () { this.Bw.set(this.diagram.firstInput.documentPoint); }; jh.prototype.doStop = function () { this.hideContextMenu(); this.currentObject = null; }; jh.prototype.findObjectWithContextMenu = function (a) { void 0 === a && (a = null); var b = this.diagram, c = b.lastInput, d = null; a instanceof P || (a instanceof Y ? (d = a) : (d = b.Rb(c.documentPoint, null, function (a) { return !a.layer.isTemporary; }))); if (null !== d) { for (a = d; null !== a; ) { if (null !== a.contextMenu) return a; a = a.panel; } if (b.lastInput.isTouchEvent && this.defaultTouchContextMenu) return d.part; } else if (null !== b.contextMenu) return b; return null; }; jh.prototype.doActivate = function () {}; jh.prototype.doMouseDown = function () { kf.prototype.doMouseDown.call(this); if (this.isActive && this.currentContextMenu instanceof pf) { var a = this.diagram.toolManager.findTool('Action'); null !== a && a.canStart() && (a.doActivate(), a.doMouseDown(), a.doDeactivate()); } this.diagram.toolManager.mouseDownTools.contains(this) && qh(this); }; jh.prototype.doMouseUp = function () { if (this.isActive && this.currentContextMenu instanceof pf) { var a = this.diagram.toolManager.findTool('Action'); null !== a && a.canStart() && (a.doActivate(), a.doCancel(), a.doDeactivate()); } qh(this); }; function qh(a) { var b = a.diagram; if (a.isActive) { var c = a.currentContextMenu; if (null !== c) { if (!(c instanceof uf)) { var d = b.Rb(b.lastInput.documentPoint, null, null); null !== d && d.tg(c) && a.standardMouseClick(null, null); } a.stopTool(); a.canStart() && ((b.currentTool = a), a.doMouseUp()); } } else a.canStart() && (rh(a, !0), a.isActive || a.stopTool()); } function rh(a, b, c) { void 0 === c && (c = null); if ( !a.cu && ((a.cu = !0), b && a.standardMouseSelect(), (b = a.standardMouseClick()), (a.cu = !1), !b) ) if ( ((a.isActive = !0), (b = lh), null === c && (c = a.findObjectWithContextMenu()), null !== c) ) { var d = c.contextMenu; null !== d ? ((a.currentObject = c instanceof Y ? c : null), a.showContextMenu(d, a.currentObject)) : null !== b && a.showContextMenu(b, a.currentObject); } else null !== b && a.showContextMenu(b, null); } jh.prototype.doMouseMove = function () { var a = this.diagram.toolManager.findTool('Action'); null !== a && a.doMouseMove(); this.isActive && this.diagram.toolManager.doMouseMove(); }; jh.prototype.showContextMenu = function (a, b) { var c = this.diagram; a !== this.currentContextMenu && this.hideContextMenu(); if (a instanceof pf) { a.layerName = 'Tool'; a.selectable = !1; a.scale = 1 / c.scale; a.category = this.name; null !== a.placeholder && (a.placeholder.scale = c.scale); var d = a.diagram; null !== d && d !== c && d.remove(a); c.add(a); null !== b ? (a.adornedObject = b) : (a.data = c.model); a.$b(); this.positionContextMenu(a, b); } else a instanceof uf && a.show(b, c, this); this.currentContextMenu = a; }; jh.prototype.positionContextMenu = function (a) { if (null === a.placeholder) { var b = this.diagram, c = b.lastInput.documentPoint.copy(), d = a.measuredBounds, e = b.viewportBounds; b.lastInput.isTouchEvent && (c.x -= d.width); c.x + d.width > e.right && (c.x -= d.width + 5 / b.scale); c.x < e.x && (c.x = e.x); c.y + d.height > e.bottom && (c.y -= d.height + 5 / b.scale); c.y < e.y && (c.y = e.y); a.position = c; } }; jh.prototype.hideContextMenu = function () { var a = this.diagram, b = this.currentContextMenu; null !== b && (b instanceof pf ? (a.remove(b), null !== this.Mt && this.Mt.vf(b.category), (b.data = null), (b.adornedObject = null)) : b instanceof uf && (null !== b.hide ? b.hide(a, this) : null !== b.mainElement && (b.mainElement.style.display = 'none')), (this.currentContextMenu = null), this.standardMouseOver()); }; function sh() { var a = new E(); a.add( new ih( 'Copy', function (a) { a.commandHandler.copySelection(); }, function (a) { return a.commandHandler.canCopySelection(); }, ), ); a.add( new ih( 'Cut', function (a) { a.commandHandler.cutSelection(); }, function (a) { return a.commandHandler.canCutSelection(); }, ), ); a.add( new ih( 'Delete', function (a) { a.commandHandler.deleteSelection(); }, function (a) { return a.commandHandler.canDeleteSelection(); }, ), ); a.add( new ih( 'Paste', function (a) { a.commandHandler.pasteSelection(a.lastInput.documentPoint); }, function (a) { return a.commandHandler.canPasteSelection(); }, ), ); a.add( new ih( 'Select All', function (a) { a.commandHandler.selectAll(); }, function (a) { return a.commandHandler.canSelectAll(); }, ), ); a.add( new ih( 'Undo', function (a) { a.commandHandler.undo(); }, function (a) { return a.commandHandler.canUndo(); }, ), ); a.add( new ih( 'Redo', function (a) { a.commandHandler.redo(); }, function (a) { return a.commandHandler.canRedo(); }, ), ); a.add( new ih( 'Scroll To Part', function (a) { a.commandHandler.scrollToPart(); }, function (a) { return a.commandHandler.canScrollToPart(); }, ), ); a.add( new ih( 'Zoom To Fit', function (a) { a.commandHandler.zoomToFit(); }, function (a) { return a.commandHandler.canZoomToFit(); }, ), ); a.add( new ih( 'Reset Zoom', function (a) { a.commandHandler.resetZoom(); }, function (a) { return a.commandHandler.canResetZoom(); }, ), ); a.add( new ih( 'Group Selection', function (a) { a.commandHandler.groupSelection(); }, function (a) { return a.commandHandler.canGroupSelection(); }, ), ); a.add( new ih( 'Ungroup Selection', function (a) { a.commandHandler.ungroupSelection(); }, function (a) { return a.commandHandler.canUngroupSelection(); }, ), ); a.add( new ih( 'Edit Text', function (a) { a.commandHandler.editTextBlock(); }, function (a) { return a.commandHandler.canEditTextBlock(); }, ), ); return a; } jh.prototype.showDefaultContextMenu = function () { var a = this.diagram; null === this.Nt && (this.Nt = sh()); nh.innerHTML = ''; oh.addEventListener('click', this.Au, !1); var b = this, c = va('ul'); c.className = 'goCXul'; nh.appendChild(c); c.innerHTML = ''; for (var d = this.Nt.iterator; d.next(); ) { var e = d.value, f = e.visible; if ('function' === typeof e.Xw && ('function' !== typeof f || f(a))) { f = va('li'); f.className = 'goCXli'; var g = va('a'); g.className = 'goCXa'; g.href = '#'; g.Rx = e.Xw; g.addEventListener( 'click', function (c) { this.Rx(a); b.stopTool(); c.preventDefault(); return !1; }, !1, ); g.textContent = e.text; f.appendChild(g); c.appendChild(f); } } nh.style.display = 'block'; oh.style.display = 'block'; }; jh.prototype.hideDefaultContextMenu = function () { null !== this.currentContextMenu && this.currentContextMenu === lh && ((nh.style.display = 'none'), (oh.style.display = 'none'), oh.removeEventListener('click', this.Au, !1), (this.currentContextMenu = null)); }; pa.Object.defineProperties(jh.prototype, { currentContextMenu: { get: function () { return this.l; }, set: function (a) { this.l = a; this.Mt = a instanceof pf ? a.adornedPart : null; }, }, defaultTouchContextMenu: { get: function () { !1 === ph && null === lh && th && kh(this); return lh; }, set: function (a) { null === a && (ph = !0); lh = a; }, }, currentObject: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, mouseDownPoint: { get: function () { return this.Bw; }, }, }); var lh = null, ph = !1, oh = null, nh = null; jh.className = 'ContextMenuTool'; Ta( 'contextMenuTool', function () { return this.findTool('ContextMenu'); }, function (a) { vf(this, 'ContextMenu', a, this.mouseUpTools); }, ); function uh() { kf.call(this); this.name = 'TextEditing'; this.kh = new vh(); this.Ma = null; this.La = wh; this.xi = null; this.la = xh; this.K = 1; this.ba = !0; this.u = null; this.l = new uf(); this.Ot = null; yh(this, this.l); } oa(uh, kf); function yh(a, b) { if (th) { var c = va('textarea'); a.Ot = c; c.addEventListener( 'input', function () { if (null !== a.textBlock) { var b = a.sx(this.value); this.style.width = 20 + b.measuredBounds.width * this.Vz + 'px'; this.rows = b.lineCount; } }, !1, ); c.addEventListener( 'keydown', function (b) { if (null !== a.textBlock) { var c = b.which; 13 === c ? (!1 === a.textBlock.isMultiline && b.preventDefault(), a.acceptText(zh)) : 9 === c ? (a.acceptText(Ah), b.preventDefault()) : 27 === c && (a.doCancel(), null !== a.diagram && a.diagram.doFocus()); } }, !1, ); c.addEventListener( 'focus', function () { if (null !== a.currentTextEditor && a.state !== xh) { var b = a.Ot; a.la === Bh && (a.la = Ch); 'function' === typeof b.select && a.selectsTextOnActivate && (b.select(), b.setSelectionRange(0, 9999)); } }, !1, ); c.addEventListener( 'blur', function () { if (null !== a.currentTextEditor && a.state !== xh) { var b = a.Ot; 'function' === typeof b.focus && b.focus(); 'function' === typeof b.select && a.selectsTextOnActivate && (b.select(), b.setSelectionRange(0, 9999)); } }, !1, ); b.valueFunction = function () { return c.value; }; b.mainElement = c; b.show = function (a, b, f) { if (a instanceof vh && f instanceof uh) if (f.state === Gh) (c.style.border = '3px solid red'), c.focus(); else { var d = a.ma(dd), e = b.position, k = b.scale, l = a.De() * k; l < f.minimumEditorScale && (l = f.minimumEditorScale); var m = a.naturalBounds.width * l + 6, n = a.naturalBounds.height * l + 2, p = (d.x - e.x) * k; d = (d.y - e.y) * k; c.value = a.text; b.div.style.font = a.font; c.style.position = 'absolute'; c.style.zIndex = '100'; c.style.font = 'inherit'; c.style.fontSize = 100 * l + '%'; c.style.lineHeight = 'normal'; c.style.width = m + 'px'; c.style.left = ((p - m / 2) | 0) - 1 + 'px'; c.style.top = ((d - n / 2) | 0) - 1 + 'px'; c.style.textAlign = a.textAlign; c.style.margin = '0'; c.style.padding = '1px'; c.style.border = '0'; c.style.outline = 'none'; c.style.whiteSpace = 'pre-wrap'; c.style.overflow = 'hidden'; c.rows = a.lineCount; c.Vz = l; c.className = 'goTXarea'; b.div.appendChild(c); c.focus(); f.selectsTextOnActivate && (c.select(), c.setSelectionRange(0, 9999)); } }; b.hide = function (a) { a.div.removeChild(c); }; } } uh.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; if (null === a || a.isReadOnly || !a.lastInput.left || this.isBeyondDragSize()) return !1; var b = a.Rb(a.lastInput.documentPoint); if (!(null !== b && b instanceof vh && b.editable && b.part.canEdit())) return !1; b = b.part; return null === b || (this.starting === wh && !b.isSelected) || (this.starting === Hh && 2 > a.lastInput.clickCount) ? !1 : !0; }; uh.prototype.doStart = function () { this.isActive || null === this.textBlock || this.doActivate(); }; uh.prototype.doActivate = function () { if (!this.isActive) { var a = this.diagram; if (null !== a) { var b = this.textBlock; null === b && (b = a.Rb(a.lastInput.documentPoint)); if (null !== b && b instanceof vh && ((this.textBlock = b), null !== b.part)) { this.isActive = !0; this.la = Bh; var c = this.defaultTextEditor; null !== b.textEditor && (c = b.textEditor); this.kh = this.textBlock.copy(); var d = new N(this.textBlock.ma(Tc), this.textBlock.ma(hd)); a.Gv(d); c.show(b, a, this); this.currentTextEditor = c; } } } }; uh.prototype.doCancel = function () { this.stopTool(); }; uh.prototype.doMouseUp = function () { !this.isActive && this.canStart() && this.doActivate(); }; uh.prototype.doMouseDown = function () { this.isActive && this.acceptText(Ih); }; uh.prototype.acceptText = function (a) { switch (a) { case Ih: if (this.la === Jh) this.currentTextEditor instanceof HTMLElement && this.currentTextEditor.focus(); else if (this.la === Bh || this.la === Gh || this.la === Ch) (this.la = Kh), Lh(this); break; case Mh: case zh: case Ah: if (zh !== a || !0 !== this.textBlock.isMultiline) if (this.la === Bh || this.la === Gh || this.la === Ch) (this.la = Kh), Lh(this); } }; function Lh(a) { var b = a.textBlock, c = a.diagram, d = a.currentTextEditor; if (null !== b && null !== d) { var e = b.text, f = ''; null !== d.valueFunction && (f = d.valueFunction()); a.isValidText(b, e, f) ? (a.Aa(a.name), (a.la = Jh), (a.transactionResult = a.name), (b.text = f), null !== b.textEdited && b.textEdited(b, e, f), null !== c && c.aa('TextEdited', b, e), a.yg(), a.stopTool(), null !== c && c.doFocus()) : ((a.la = Gh), null !== b.errorFunction && b.errorFunction(a, e, f), d.show(b, c, a)); } } uh.prototype.doDeactivate = function () { var a = this.diagram; null !== a && ((this.la = xh), (this.textBlock = null), null !== this.currentTextEditor && this.currentTextEditor.hide(a, this), (this.isActive = !1)); }; uh.prototype.isValidText = function (a, b, c) { var d = this.textValidation; if (null !== d && !d(a, b, c)) return !1; d = a.textValidation; return null === d || d(a, b, c) ? !0 : !1; }; uh.prototype.sx = function (a) { var b = this.kh; b.text = a; b.measure(this.textBlock.jl, Infinity); return b; }; pa.Object.defineProperties(uh.prototype, { textBlock: { get: function () { return this.Ma; }, set: function (a) { this.Ma = a; }, }, currentTextEditor: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, defaultTextEditor: { get: function () { return this.l; }, set: function (a) { this.l = a; }, }, starting: { get: function () { return this.La; }, set: function (a) { this.La = a; }, }, textValidation: { get: function () { return this.xi; }, set: function (a) { this.xi = a; }, }, minimumEditorScale: { get: function () { return this.K; }, set: function (a) { this.K = a; }, }, selectsTextOnActivate: { get: function () { return this.ba; }, set: function (a) { this.ba = a; }, }, state: { get: function () { return this.la; }, set: function (a) { this.la !== a && (this.la = a); }, }, }); uh.prototype.measureTemporaryTextBlock = uh.prototype.sx; var Mh = new D(uh, 'LostFocus', 0), Ih = new D(uh, 'MouseDown', 1), Ah = new D(uh, 'Tab', 2), zh = new D(uh, 'Enter', 3), Nh = new D(uh, 'SingleClick', 0), wh = new D(uh, 'SingleClickSelected', 1), Hh = new D(uh, 'DoubleClick', 2), xh = new D(uh, 'StateNone', 0), Bh = new D(uh, 'StateActive', 1), Ch = new D(uh, 'StateEditing', 2), Kh = new D(uh, 'StateValidating', 3), Gh = new D(uh, 'StateInvalid', 4), Jh = new D(uh, 'StateValidated', 5); uh.className = 'TextEditingTool'; uh.LostFocus = Mh; uh.MouseDown = Ih; uh.Tab = Ah; uh.Enter = zh; uh.SingleClick = Nh; uh.SingleClickSelected = wh; uh.DoubleClick = Hh; uh.StateNone = xh; uh.StateActive = Bh; uh.StateEditing = Ch; uh.StateValidating = Kh; uh.StateInvalid = Gh; uh.StateValidated = Jh; Ta( 'textEditingTool', function () { return this.findTool('TextEditing'); }, function (a) { vf(this, 'TextEditing', a, this.mouseUpTools); }, ); function Oh() { Ph || (Qh(), (Ph = !0)); this.ow = Rh; this.C = lf; this.qn = this.rn = null; this.$i = this.sn = this.tn = 0; this.Bk = this.ni = this.rb = this.Hr = this.Mf = !1; this.Nf = this.Dc = !0; this.Zq = this.Yq = this.nw = null; this.mw = 0; this.ar = new Lb(); this.Ut = 600; this.Tx = new G(0, 0); this.kw = this.jw = this.Lw = !1; this.ae = new F(); this.yj = new Lb(); this.bs = new F(); this.$q = null; } Oh.prototype.hb = function (a) { this.C = a; }; function Rh(a, b, c, d) { a /= d / 2; return 1 > a ? (c / 2) * a * a + b : (-c / 2) * (--a * (a - 2) - 1) + b; } Oh.prototype.canStart = function () { return !0; }; t = Oh.prototype; t.Ti = function (a, b) { this.Dc && (void 0 !== b && (this.$q = b), (this.Nf || this.C.Qi) && this.canStart(a) && (this.ae.add(a), this.Mf && this.vd(), (this.ni = this.rb = !0))); }; t.Gz = function (a, b) { this.Dc && (void 0 !== b && (this.$q = b), this.Nf || this.C.Qi) && (this.ae.add(a), this.canStart(a) && (this.Mf && this.vd(), (this.rb = !0))); }; function Sh(a) { if (a.Dc) if ((a.ae.contains('Model') && !a.Nf) || !a.Bk) a.ae.clear(), (a.rb = !1), (a.ni = !1); else if ((a.ae.clear(), a.rb && 0 === a.$i)) { var b = +new Date(); a.$i = b; w.requestAnimationFrame(function () { if (!1 !== a.rb && !a.Mf && a.$i === b) { var c = a.C; c.Ee('temporaryPixelRatio') && Kf(c); Th(c); a.rb = !1; a.ni = !1; c.aa('AnimationStarting'); Uh(a, b); } }); } } t.sh = function (a, b, c, d, e, f) { if (!(!this.rb || ('position' === b && c.A(d)) || (a instanceof T && !a.isAnimated))) { var g = this.yj; if (g.contains(a)) { var h = g.J(a); g = h.start; var k = h.end; void 0 === g[b] && (g[b] = Vh(c)); k[b] = Vh(d); } else (h = {}), (k = {}), (h[b] = Vh(c)), (k[b] = Vh(d)), (d = h.position), d instanceof G && !d.o() && this.ae.contains('Expand SubGraph') && d.assign(k.position), (h = new Wh(h, k, e)), g.add(a, h); e && 0 === b.indexOf('position:') && a instanceof T ? (h.Vu.location = Vh(a.location)) : e && (h.Vu[b] = Vh(c)); f && (h.ot = !0); this.Bk = !0; } }; function Vh(a) { return a instanceof G ? a.copy() : a instanceof M ? a.copy() : a; } function Xh(a, b) { if (!a.Mf) return !1; a = a.yj.J(b); return null !== a && a.ot; } function Uh(a, b) { function c() { if (!1 !== e.Mf && e.$i === b) { var a = +new Date(), f = a > r ? l : a - q; Yh(e); Zh(e, d, p, g, f, l); e.Yq && e.Yq(); pg(d); $h(e); a > r ? ai(e) : w.requestAnimationFrame(c); } } var d = a.C; if (null !== d) { var e = a, f = a.$q || {}, g = f.bA || a.ow, h = f.fA || null, k = f.gA || null, l = f.duration || a.Ut, m = a.Tx; for (f = a.yj.iterator; f.next(); ) { var n = f.value.start.position; n instanceof G && (n.o() || n.assign(m)); } a.nw = g; a.Yq = h; a.Zq = k; a.mw = l; a.ar = a.yj; var p = a.ar; for (f = p.iterator; f.next(); ) (h = f.value.end), h['position:placeholder'] && ((k = f.key.findVisibleNode()), k instanceof ig && null !== k.placeholder && ((m = k.placeholder), (k = m.ma(Tc)), (m = m.padding), (k.x += m.left), (k.y += m.top), (h['position:placeholder'] = k))); a.Mf = !0; Yh(a); Zh(a, d, p, g, 0, l); pg(a.C, !0); $h(a); var q = +new Date(), r = q + l; e.$i === b && w.requestAnimationFrame(function () { c(); }); } } function Yh(a) { if (!a.Hr) { var b = a.C; a.Lw = b.skipsUndoManager; a.jw = b.skipsModelSourceBindings; a.kw = b.sk; b.skipsUndoManager = !0; b.skipsModelSourceBindings = !0; b.sk = !0; a.Hr = !0; } } function $h(a) { var b = a.C; b.skipsUndoManager = a.Lw; b.skipsModelSourceBindings = a.jw; b.sk = a.kw; a.Hr = !1; } function Zh(a, b, c, d, e, f) { for (c = c.iterator; c.next(); ) { var g = c.key, h = c.value, k = h.start, l = h.end, m = bi; for (n in l) ('position' === n && (l['position:placeholder'] || l['position:node'])) || null === m.get(n) || m.get(n)(g, k[n], l[n], d, e, f, h); } d = b.kv; b.kv = !0; var n = a.ow; 0 !== a.tn && 0 !== a.sn && ((c = a.tn), (b.Ca = n(e, c, a.sn - c, f))); null !== a.rn && null !== a.qn && ((c = a.rn), (a = a.qn), (b.sa = new G(n(e, c.x, a.x - c.x, f), n(e, c.y, a.y - c.y, f)))); b.kv = d; } t.vd = function () { !0 === this.rb && ((this.ni = this.rb = !1), this.ae.clear(), (this.$i = 0), this.Bk && this.C.cc()); this.Mf && this.Dc && ai(this); }; function ai(a) { a.Mf = !1; a.Bk = !1; Yh(a); for (var b = a.C, c = a.nw, d = a.mw, e = a.ar, f = a.bs.iterator; f.next(); ) f.value.s(); e = e.iterator; for (f = bi; e.next(); ) { var g = e.key, h = e.value, k = h.start, l = h.end, m = h.Vu, n; for (n in l) if (null !== f.get(n)) { var p = n; !h.Qu || ('position:node' !== p && 'position:placeholder' !== p) || (p = 'position'); f.get(p)(g, k[n], void 0 !== m[n] ? m[n] : h.Qu ? k[n] : l[n], c, d, d); } h.Qu && void 0 !== m.location && g instanceof T && (g.location = m.location); h.ot && g instanceof T && g.Lb(!1); } for (c = a.C.links; c.next(); ) (d = c.value), null !== d.bh && ((d.points = d.bh), (d.bh = null)); b.ft.clear(); Uf(b, !1); b.Xa(); b.R(); b.fd(); ci(b); $h(a); a.Zq && a.Zq(); a.$i = 0; a.ar.clear(); a.Zq = null; a.Yq = null; a.rn = null; a.qn = null; a.tn = 0; a.sn = 0; a.yj.clear(); 0 < a.bs.count && a.bs.clear(); a.$q = null; b.aa('AnimationFinished'); b.cc(); } t.Mp = function (a, b) { if (this.ni && (this.ae.contains('Expand Tree') || this.ae.contains('Expand SubGraph'))) { var c = b.actualBounds, d = null; b instanceof ig && (d = b.placeholder); null !== d ? ((c = d.ma(Tc)), (d = d.padding), (c.x += d.left), (c.y += d.top), this.sh(a, 'position', c, a.position, !1)) : this.sh(a, 'position', new G(c.x + c.width / 2, c.y + c.height / 2), a.position, !1); this.sh(a, 'scale', 0.01, a.scale, !1); if (a instanceof ig) for (a = a.memberParts; a.next(); ) (d = a.value), d instanceof V && this.Mp(d, b); } }; t.Lp = function (a, b) { if ( a.isVisible() && this.ni && (this.ae.contains('Collapse Tree') || this.ae.contains('Collapse SubGraph')) ) { var c = null; b instanceof ig && (c = b.placeholder); null !== c ? this.sh(a, 'position:placeholder', a.position, c, !0) : this.sh(a, 'position:node', a.position, b, !0); this.sh(a, 'scale', a.scale, 0.01, !0); this.rb && ((c = this.yj), c.contains(a) && (c.J(a).ot = !0)); if (a instanceof ig) for (a = a.memberParts; a.next(); ) (c = a.value), c instanceof V && this.Lp(c, b); } }; function di(a, b, c) { a.rb && !b.A(c) && (null === a.rn && b.o() && null === a.qn && (a.rn = b.copy()), (a.qn = c.copy()), (a.Bk = !0)); } function ei(a, b, c) { a.rb && a.C.Qi && (0 === a.tn && 0 === a.sn && (a.tn = b), (a.sn = c), (a.Bk = !0)); } function Qh() { var a = new Lb(); a.add('position', function (a, c, d, e, f, g) { f !== g ? a.vt(e(f, c.x, d.x - c.x, g), e(f, c.y, d.y - c.y, g)) : (a.position = new G(e(f, c.x, d.x - c.x, g), e(f, c.y, d.y - c.y, g))); }); a.add('position:placeholder', function (a, c, d, e, f, g) { f !== g ? a.vt(e(f, c.x, d.x - c.x, g), e(f, c.y, d.y - c.y, g)) : (a.position = new G(e(f, c.x, d.x - c.x, g), e(f, c.y, d.y - c.y, g))); }); a.add('position:node', function (a, c, d, e, f, g) { var b = a.actualBounds, k = d.actualBounds; d = k.x + k.width / 2 - b.width / 2; b = k.y + k.height / 2 - b.height / 2; f !== g ? a.vt(e(f, c.x, d - c.x, g), e(f, c.y, b - c.y, g)) : (a.position = new G(e(f, c.x, d - c.x, g), e(f, c.y, b - c.y, g))); }); a.add('opacity', function (a, c, d, e, f, g) { a.opacity = e(f, c, d - c, g); }); a.add('scale', function (a, c, d, e, f, g) { a.scale = e(f, c, d - c, g); }); a.add('angle', function (a, c, d, e, f, g) { a.angle = e(f, c, d - c, g); }); a.add('visible', function (a, c, d, e, f, g) { a.visible = f !== g ? c : d; }); bi = a; } pa.Object.defineProperties(Oh.prototype, { animationReasons: { get: function () { return this.ae; }, }, isEnabled: { get: function () { return this.Dc; }, set: function (a) { this.Dc = a; }, }, duration: { get: function () { return this.Ut; }, set: function (a) { 1 > a && ya(a, '>= 1', Oh, 'duration'); this.Ut = a; }, }, isAnimating: { get: function () { return this.Mf; }, }, isTicking: { get: function () { return this.Hr; }, }, isInitial: { get: function () { return this.Nf; }, set: function (a) { this.Nf = a; }, }, }); Oh.prototype.stopAnimation = Oh.prototype.vd; Oh.prototype.addToAnimation = Oh.prototype.sh; Oh.prototype.prepareAnimation = Oh.prototype.Gz; Oh.prototype.prepareAutomaticAnimation = Oh.prototype.Ti; var bi = null, Ph = !1; Oh.className = 'AnimationManager'; function Wh(a, b, c) { this.start = a; this.end = b; this.Vu = {}; this.Qu = c; this.ot = !1; } Wh.className = 'AnimationStates'; function fi() { nb(this); this.C = null; this.Fa = new E(); this.Ua = ''; this.lb = 1; this.u = !1; this.Cj = this.K = this.Oh = this.Nh = this.Mh = this.Lh = this.Jh = this.Kh = this.Ih = this.Qh = this.Hh = this.Ph = this.Gh = this.Fh = !0; this.l = !1; this.Lo = []; } t = fi.prototype; t.hb = function (a) { this.C = a; }; t.toString = function (a) { void 0 === a && (a = 0); var b = 'Layer "' + this.name + '"'; if (0 >= a) return b; for (var c = 0, d = 0, e = 0, f = 0, g = 0, h = this.Fa.iterator; h.next(); ) { var k = h.value; k instanceof ig ? e++ : k instanceof V ? d++ : k instanceof S ? f++ : k instanceof pf ? g++ : c++; } h = ''; 0 < c && (h += c + ' Parts '); 0 < d && (h += d + ' Nodes '); 0 < e && (h += e + ' Groups '); 0 < f && (h += f + ' Links '); 0 < g && (h += g + ' Adornments '); if (1 < a) for (a = this.Fa.iterator; a.next(); ) (c = a.value), (h += '\n ' + c.toString()), (d = c.data), null !== d && Bb(d) && (h += ' #' + Bb(d)), c instanceof V ? (h += ' ' + Qa(d)) : c instanceof S && (h += ' ' + Qa(c.fromNode) + ' ' + Qa(c.toNode)); return b + ' ' + this.Fa.count + ': ' + h; }; t.Rb = function (a, b, c) { void 0 === b && (b = null); void 0 === c && (c = null); if (!1 === this.Cj) return null; var d = !1; null !== this.diagram && this.diagram.viewportBounds.da(a) && (d = !0); for (var e = G.alloc(), f = this.Fa.j, g = f.length; g--; ) { var h = f[g]; if ( (!0 !== d || !1 !== og(h)) && h.isVisible() && (e.assign(a), Qb(e, h.rd), (h = h.Rb(e, b, c)), null !== h && (null !== b && (h = b(h)), null !== h && (null === c || c(h)))) ) return G.free(e), h; } G.free(e); return null; }; t.Hi = function (a, b, c, d) { void 0 === b && (b = null); void 0 === c && (c = null); d instanceof E || d instanceof F || (d = new F()); if (!1 === this.Cj) return d; var e = !1; null !== this.diagram && this.diagram.viewportBounds.da(a) && (e = !0); for (var f = G.alloc(), g = this.Fa.j, h = g.length; h--; ) { var k = g[h]; if ((!0 !== e || !1 !== og(k)) && k.isVisible()) { f.assign(a); Qb(f, k.rd); var l = k; k.Hi(f, b, c, d) && (null !== b && (l = b(l)), null === l || (null !== c && !c(l)) || d.add(l)); } } G.free(f); return d; }; t.pg = function (a, b, c, d, e) { void 0 === b && (b = null); void 0 === c && (c = null); void 0 === d && (d = !1); e instanceof E || e instanceof F || (e = new F()); if (!1 === this.Cj) return e; var f = !1; null !== this.diagram && this.diagram.viewportBounds.nf(a) && (f = !0); for (var g = this.Fa.j, h = g.length; h--; ) { var k = g[h]; if ((!0 !== f || !1 !== og(k)) && k.isVisible()) { var l = k; k.pg(a, b, c, d, e) && (null !== b && (l = b(l)), null === l || (null !== c && !c(l)) || e.add(l)); } } return e; }; t.qg = function (a, b, c, d, e, f) { void 0 === c && (c = null); void 0 === d && (d = null); void 0 === e && (e = !0); if (!1 !== e && !0 !== e) { if (e instanceof E || e instanceof F) f = e; e = !0; } f instanceof E || f instanceof F || (f = new F()); if (!1 === this.Cj) return f; var g = !1; null !== this.diagram && this.diagram.viewportBounds.da(a) && (g = !0); for (var h = G.alloc(), k = G.alloc(), l = this.Fa.j, m = l.length; m--; ) { var n = l[m]; if ((!0 !== g || !1 !== og(n)) && n.isVisible()) { h.assign(a); Qb(h, n.rd); k.h(a.x + b, a.y); Qb(k, n.rd); var p = n; n.qg(h, k, c, d, e, f) && (null !== c && (p = c(p)), null === p || (null !== d && !d(p)) || f.add(p)); } } G.free(h); G.free(k); return f; }; t.hd = function (a, b) { if (this.visible) { var c = void 0 === b ? a.viewportBounds : b; var d = this.Fa.j, e = d.length; a = Ka(); b = Ka(); for (var f = 0; f < e; f++) { var g = d[f]; g.Aw = f; (g instanceof S && !1 === g.Lc) || (g instanceof pf && null !== g.adornedPart) || (Ac(g.actualBounds, c, 10) ? (g.hd(!0), a.push(g)) : (g.hd(!1), null !== g.adornments && 0 < g.adornments.count && b.push(g))); } for (c = 0; c < a.length; c++) for (d = a[c], gi(d), d = d.adornments; d.next(); ) (e = d.value), e.measure(Infinity, Infinity), e.arrange(), e.hd(!0); for (c = 0; c < b.length; c++) (d = b[c]), d.updateAdornments(), hi(d, !0); Oa(a); Oa(b); } }; t.hc = function (a, b, c) { if (this.visible && 0 !== this.lb && (void 0 === c && (c = !0), c || !this.isTemporary)) { c = this.Fa.j; var d = c.length; if (0 !== d) { 1 !== this.lb && (a.globalAlpha = this.lb); var e = this.Lo; e.length = 0; for (var f = b.scale, g = 0; g < d; g++) { var h = c[g]; if (og(h)) { if (h instanceof S && (h.isOrthogonal && e.push(h), !1 === h.Lc)) continue; var k = h.actualBounds; k.width * f > b.oe || k.height * f > b.oe ? h.hc(a, b) : ii(a, h); } } a.globalAlpha = 1; } } }; function ii(a, b) { var c = b.actualBounds, d = b.naturalBounds; if (0 !== c.width && 0 !== c.height && !isNaN(c.x) && !isNaN(c.y) && b.isVisible()) { var e = b.transform; null !== b.areaBackground && (ji(b, a, b.areaBackground, !0, !0, d, c), a.fillRect(c.x, c.y, c.width, c.height)); null === b.areaBackground && null === b.background && (ji(b, a, 'rgba(0,0,0,0.3)', !0, !1, d, c), a.fillRect(c.x, c.y, c.width, c.height)); null !== b.background && (a.transform(e.m11, e.m12, e.m21, e.m22, e.dx, e.dy), ji(b, a, b.background, !0, !1, d, c), a.fillRect(0, 0, d.width / 2, d.height / 2), e.bt() || ((b = 1 / (e.m11 * e.m22 - e.m12 * e.m21)), a.transform( e.m22 * b, -e.m12 * b, -e.m21 * b, e.m11 * b, b * (e.m21 * e.dy - e.m22 * e.dx), b * (e.m12 * e.dx - e.m11 * e.dy), ))); } } t.g = function (a, b, c, d, e) { var f = this.diagram; null !== f && f.ab(af, a, this, b, c, d, e); }; t.Pi = function (a, b, c) { var d = this.Fa; b.gi = this; if (a >= d.count) a = d.count; else if (d.N(a) === b) return -1; d.Ib(a, b); b.aq(c); d = this.diagram; null !== d && (c ? d.R() : d.Pi(b)); ki(this, a, b); return a; }; t.xc = function (a, b, c) { if (!c && b.layer !== this && null !== b.layer) return b.layer.xc(a, b, c); var d = this.Fa; if (0 > a || a >= d.length) { if (((a = d.indexOf(b)), 0 > a)) return -1; } else if (d.N(a) !== b && ((a = d.indexOf(b)), 0 > a)) return -1; b.bq(c); d.mb(a); d = this.diagram; null !== d && (c ? d.R() : d.xc(b)); b.gi = null; return a; }; function ki(a, b, c) { b = li(a, b, c); if (c instanceof ig && null !== c && isNaN(c.zOrder)) { if (0 !== c.memberParts.count) { for (var d = -1, e = a.Fa.j, f = e.length, g = 0; g < f; g++) { var h = e[g]; if (h === c && ((b = g), 0 <= d)) break; if (0 > d && h.containingGroup === c && ((d = g), 0 <= b)) break; } !(0 > d) && d < b && ((e = a.Fa), e.mb(b), e.Ib(d, c)); } c = c.containingGroup; null !== c && ki(a, -1, c); } } function li(a, b, c) { var d = c.zOrder; if (isNaN(d)) return b; a = a.Fa; var e = a.count; if (1 >= e) return b; 0 > b && (b = a.indexOf(c)); if (0 > b) return -1; for (var f = b - 1, g = NaN; 0 <= f; ) { g = a.N(f).zOrder; if (!isNaN(g)) break; f--; } for (var h = b + 1, k = NaN; h < e; ) { k = a.N(h).zOrder; if (!isNaN(k)) break; h++; } if (!isNaN(g) && g > d) for (;;) { if (-1 === f || g <= d) { f++; if (f === b) break; a.mb(b); a.Ib(f, c); return f; } for (g = NaN; 0 <= --f && ((g = a.N(f).zOrder), isNaN(g)); ); } else if (!isNaN(k) && k < d) for (;;) { if (h === e || k >= d) { h--; if (h === b) break; a.mb(b); a.Ib(h, c); return h; } for (k = NaN; ++h < e && ((k = a.N(h).zOrder), isNaN(k)); ); } return b; } t.clear = function () { for (var a = this.Fa.Na(), b = a.length, c = 0; c < b; c++) a[c].hd(!1), this.xc(-1, a[c], !1); this.Lo.length = 0; }; pa.Object.defineProperties(fi.prototype, { parts: { get: function () { return this.Fa.iterator; }, }, partsBackwards: { get: function () { return this.Fa.iteratorBackwards; }, }, diagram: { get: function () { return this.C; }, }, name: { get: function () { return this.Ua; }, set: function (a) { var b = this.Ua; if (b !== a) { var c = this.diagram; if (null !== c) for ('' === b && A('Cannot rename default Layer to: ' + a), c = c.layers; c.next(); ) c.value.name === a && A('Layer.name is already present in this diagram: ' + a); this.Ua = a; this.g('name', b, a); for (a = this.Fa.iterator; a.next(); ) a.value.layerName = this.Ua; } }, }, opacity: { get: function () { return this.lb; }, set: function (a) { var b = this.lb; b !== a && ((0 > a || 1 < a) && ya(a, '0 <= value <= 1', fi, 'opacity'), (this.lb = a), this.g('opacity', b, a), (a = this.diagram), null !== a && a.R()); }, }, isTemporary: { get: function () { return this.u; }, set: function (a) { var b = this.u; b !== a && ((this.u = a), this.g('isTemporary', b, a)); }, }, visible: { get: function () { return this.K; }, set: function (a) { var b = this.K; if (b !== a) { this.K = a; this.g('visible', b, a); for (b = this.Fa.iterator; b.next(); ) b.value.Lb(a); a = this.diagram; null !== a && a.R(); } }, }, pickable: { get: function () { return this.Cj; }, set: function (a) { var b = this.Cj; b !== a && ((this.Cj = a), this.g('pickable', b, a)); }, }, isBoundsIncluded: { get: function () { return this.l; }, set: function (a) { this.l !== a && ((this.l = a), null !== this.diagram && this.diagram.Xa()); }, }, allowCopy: { get: function () { return this.Fh; }, set: function (a) { var b = this.Fh; b !== a && ((this.Fh = a), this.g('allowCopy', b, a)); }, }, allowDelete: { get: function () { return this.Gh; }, set: function (a) { var b = this.Gh; b !== a && ((this.Gh = a), this.g('allowDelete', b, a)); }, }, allowTextEdit: { get: function () { return this.Ph; }, set: function (a) { var b = this.Ph; b !== a && ((this.Ph = a), this.g('allowTextEdit', b, a)); }, }, allowGroup: { get: function () { return this.Hh; }, set: function (a) { var b = this.Hh; b !== a && ((this.Hh = a), this.g('allowGroup', b, a)); }, }, allowUngroup: { get: function () { return this.Qh; }, set: function (a) { var b = this.Qh; b !== a && ((this.Qh = a), this.g('allowUngroup', b, a)); }, }, allowLink: { get: function () { return this.Ih; }, set: function (a) { var b = this.Ih; b !== a && ((this.Ih = a), this.g('allowLink', b, a)); }, }, allowRelink: { get: function () { return this.Kh; }, set: function (a) { var b = this.Kh; b !== a && ((this.Kh = a), this.g('allowRelink', b, a)); }, }, allowMove: { get: function () { return this.Jh; }, set: function (a) { var b = this.Jh; b !== a && ((this.Jh = a), this.g('allowMove', b, a)); }, }, allowReshape: { get: function () { return this.Lh; }, set: function (a) { var b = this.Lh; b !== a && ((this.Lh = a), this.g('allowReshape', b, a)); }, }, allowResize: { get: function () { return this.Mh; }, set: function (a) { var b = this.Mh; b !== a && ((this.Mh = a), this.g('allowResize', b, a)); }, }, allowRotate: { get: function () { return this.Nh; }, set: function (a) { var b = this.Nh; b !== a && ((this.Nh = a), this.g('allowRotate', b, a)); }, }, allowSelect: { get: function () { return this.Oh; }, set: function (a) { var b = this.Oh; b !== a && ((this.Oh = a), this.g('allowSelect', b, a)); }, }, }); fi.prototype.findObjectsNear = fi.prototype.qg; fi.prototype.findObjectsIn = fi.prototype.pg; fi.prototype.findObjectsAt = fi.prototype.Hi; fi.prototype.findObjectAt = fi.prototype.Rb; fi.className = 'Layer'; function P(a) { function b() { c.removeEventListener(w.document, 'DOMContentLoaded', b, !1); c.setRTL(); } 1 < arguments.length && A('Diagram constructor can only take one optional argument, the DIV HTML element or its id.'); mi || (ni(), (mi = !0)); nb(this); lf = this; Wa = []; this.ob = !0; this.Ak = new Oh(); this.Ak.hb(this); this.Gb = 17; this.Sn = !1; this.ru = 'default'; this.Ia = null; var c = this; th && (null !== w.document.body ? this.setRTL() : c.addEventListener(w.document, 'DOMContentLoaded', b, !1)); this.Pa = new E(); this.wa = this.xa = 0; this.Da = null; this.pu = new Lb(); this.eg = this.Yc = null; this.Ev(); this.dl = null; this.Dv(); this.sa = new G(NaN, NaN).freeze(); this.dr = this.Ca = 1; this.yr = new G(NaN, NaN).freeze(); this.zr = NaN; this.Tr = 1e-4; this.Rr = 100; this.tb = new Qc(); this.Is = new G(NaN, NaN).freeze(); this.pr = new N(NaN, NaN, NaN, NaN).freeze(); this.ti = new Ic(0, 0, 0, 0).freeze(); this.Hj = oi; this.ss = !1; this.ns = this.js = null; this.bj = pi; this.dj = Ed; this.bi = pi; this.Nn = Ed; this.Ar = this.xr = Tc; this.nc = !0; this.On = !1; this.Dd = new F(); this.Xh = new Lb(); this.wn = !0; this.Sm = 250; this.Ck = -1; this.Tm = new Ic(16, 16, 16, 16).freeze(); this.Sk = this.qd = !1; this.Xk = !0; this.Yh = new Xe(); this.Yh.diagram = this; this.Ze = new Xe(); this.Ze.diagram = this; this.rj = new Xe(); this.rj.diagram = this; this.pe = this.Bf = null; this.Ml = !1; this.Qt = this.Rt = null; this.Lq = w.PointerEvent && (cb || db || gb) && w.navigator && !1 !== w.navigator.msPointerEnabled; qi(this); this.zi = new F(); this.Ir = !0; this.Ds = ri; this.Vb = !1; this.Fs = tg; this.Ma = null; si.add('Model', ti); this.ba = this.La = this.Ub = null; this.Xq = ''; this.pn = 'auto'; this.Tf = this.Wr = this.Vf = this.Wf = this.Yf = this.Df = this.Hf = this.Cf = null; this.ur = !1; this.Ef = this.jg = this.Xf = this.Uf = null; this.ku = !1; this.nu = {}; this.vl = [null, null]; this.K = null; this.Pt = this.wu = this.Dh = this.eh = !1; this.Vc = !0; this.nj = this.Yb = !1; this.Zb = null; var d = this; this.zg = function (a) { var b = d.partManager; if (a.model === b.diagram.model && b.diagram.ea) { b.diagram.ea = !1; try { var c = a.change; '' === a.modelChange && c === af && b.updateDataBindings(a.object, a.propertyName); } finally { b.diagram.ea = !0; } } }; this.Cm = function (a) { d.partManager.doModelChanged(a); }; this.Nw = !0; this.ge = -2; this.Dj = new Lb(); this.mu = new E(); this.Of = !1; this.Gh = this.Fh = this.Dq = this.Dc = !0; this.Eq = !1; this.Kq = this.Iq = this.Oh = this.Nh = this.Mh = this.Lh = this.Jh = this.Kh = this.Ih = this.Hq = this.Qh = this.Hh = this.Ph = this.Fq = !0; this.Re = this.Kc = !1; this.Jq = this.Gq = this.wr = this.vr = !0; this.rs = this.ps = 16; this.tu = this.os = !1; this.hp = this.qs = null; this.uu = this.vu = 0; this.eb = new Ic(5).freeze(); this.Bq = new F().freeze(); this.Sr = 999999999; this.zq = new F().freeze(); this.ci = this.lj = this.Rg = !0; this.$h = this.Qg = !1; this.gc = null; this.Cg = !0; this.he = !1; this.Aq = new F(); this.yw = new F(); this.Nb = null; this.Jo = 1; this.Hw = 0; this.ye = { scale: 1, position: new G(), bounds: new N(), ox: !1 }; this.Mw = new N(NaN, NaN, NaN, NaN).freeze(); this.Gp = new M(NaN, NaN).freeze(); this.un = new N(NaN, NaN, NaN, NaN).freeze(); this.Jr = !1; this.hr = null; ui(this); this.Or = this.sr = this.Zr = this.qw = this.pw = this.rw = this.Ug = this.Zh = this.Zf = null; vi(this); this.Eb = null; this.rr = !1; this.Kk = null; this.partManager = new ti(); this.toolManager = new Ua(); this.toolManager.initializeStandardTools(); this.currentTool = this.defaultTool = this.toolManager; this.gr = null; this.Mk = new yf(); this.ds = this.cs = null; this.xp = !1; this.commandHandler = wi(); this.model = xi(); this.eh = !0; this.layout = new yi(); this.eh = !1; this.tw = this.Tt = null; this.Mb = 1; this.jh = null; this.oe = 1; this.vo = 0; this.wo = [0, 0, 0, 0, 0]; this.xo = 0; this.Fd = 1; this.kl = 0; this.Lr = new G(); this.Bu = 500; this.Mq = new G(); this.Se = !1; this.preventDefault = this.nt = this.km = this.lm = this.jm = this.im = this.kk = this.mk = this.lk = this.ik = this.jk = this.$v = this.Sv = this.Tv = this.Uv = this.si = this.bp = this.ri = this.ap = null; this.u = !1; this.ai = new zi(); this.As = !1; void 0 !== a && Ai(this, a); this.ob = !1; } P.prototype.clear = function () { this.model.clear(); Bi = null; Ci = ''; Di(this, !1); this.un = new N(NaN, NaN, NaN, NaN).freeze(); this.R(); }; function Di(a, b) { var c = null; null !== a.Eb && (c = a.Eb.part); a.animationManager.vd(); for (var d = [], e = a.Pa.length, f = 0; f < e; f++) { var g = a.Pa.j[f]; if (b) for (var h = g.parts; h.next(); ) { var k = h.value; k !== c && null === k.data && d.push(k); } g.clear(); } a.partManager.clear(); a.Dd.clear(); a.Xh.clear(); a.zi.clear(); a.Qp(); a.Lu(); a.Kk = null; La = []; null !== c && (a.add(c), a.partManager.parts.remove(c)); if (b) for (b = 0; b < d.length; b++) a.add(d[b]); } function wi() { return null; } P.prototype.reset = function () { this.ob = !0; this.clear(); this.Ak = new Oh(); this.Ak.hb(this); this.Pa = new E(); this.Ev(); this.Dv(); this.sa = new G(NaN, NaN).freeze(); this.Ca = 1; this.yr = new G(NaN, NaN).freeze(); this.zr = NaN; this.Tr = 1e-4; this.Rr = 100; this.Is = new G(NaN, NaN).freeze(); this.pr = new N(NaN, NaN, NaN, NaN).freeze(); this.ti = new Ic(0, 0, 0, 0).freeze(); this.Hj = oi; this.ss = !1; this.ns = this.js = null; this.bj = pi; this.dj = Ed; this.bi = pi; this.Nn = Ed; this.Ar = this.xr = Tc; this.Sm = 250; this.Tm = new Ic(16, 16, 16, 16).freeze(); this.Ir = !0; this.Ds = ri; this.Fs = tg; this.pn = 'auto'; this.Tf = this.Wr = this.Vf = this.Wf = this.Yf = this.Df = this.Hf = this.Cf = null; this.ur = !1; this.Ef = this.jg = this.Xf = this.Uf = null; this.Of = !1; this.Gh = this.Fh = this.Dq = this.Dc = !0; this.Eq = !1; this.Jq = this.Gq = this.wr = this.vr = this.Kq = this.Iq = this.Oh = this.Nh = this.Mh = this.Lh = this.Jh = this.Kh = this.Ih = this.Hq = this.Qh = this.Hh = this.Ph = this.Fq = !0; this.rs = this.ps = 16; this.eb = new Ic(5).freeze(); this.Sr = 999999999; this.gc = null; this.Jr = !1; this.Mb = 1; this.jh = null; this.vo = 0; this.wo = [0, 0, 0, 0, 0]; this.xo = 0; vi(this); this.Eb = null; this.partManager = new ti(); this.toolManager = new Ua(); this.toolManager.initializeStandardTools(); this.ds = this.cs = this.gr = null; this.xp = !1; this.Mk.reset(); this.pu = new Lb(); this.pu.clear(); this.currentTool = this.defaultTool = this.toolManager; this.commandHandler = wi(); this.eh = !0; ui(this); this.layout = new yi(); this.eh = !1; this.model = xi(); this.model.undoManager = new ff(); this.he = !1; this.Xk = !0; this.ob = this.qd = !1; this.R(); this.pe = this.Bf = null; qi(this); this.Xq = ''; }; function vi(a) { a.Zf = new Lb(); var b = new V(), c = new vh(); c.bind(new Ei('text', '', Qa)); b.add(c); a.rw = b; a.Zf.add('', b); b = new V(); c = new vh(); c.stroke = 'brown'; c.bind(new Ei('text', '', Qa)); b.add(c); a.Zf.add('Comment', b); b = new V(); b.selectable = !1; b.avoidable = !1; c = new W(); c.figure = 'Ellipse'; c.fill = 'black'; c.stroke = null; c.desiredSize = new M(3, 3).ga(); b.add(c); a.Zf.add('LinkLabel', b); a.Zh = new Lb(); b = new ig(); b.selectionObjectName = 'GROUPPANEL'; b.type = X.Vertical; c = new vh(); c.font = 'bold 12pt sans-serif'; c.bind(new Ei('text', '', Qa)); b.add(c); c = new X(X.Auto); c.name = 'GROUPPANEL'; var d = new W(); d.figure = 'Rectangle'; d.fill = 'rgba(128,128,128,0.2)'; d.stroke = 'black'; c.add(d); d = new Xg(); d.padding = new Ic(5, 5, 5, 5).ga(); c.add(d); b.add(c); a.pw = b; a.Zh.add('', b); a.Ug = new Lb(); b = new S(); c = new W(); c.isPanelMain = !0; b.add(c); c = new W(); c.toArrow = 'Standard'; c.fill = 'black'; c.stroke = null; c.strokeWidth = 0; b.add(c); a.qw = b; a.Ug.add('', b); b = new S(); c = new W(); c.isPanelMain = !0; c.stroke = 'brown'; b.add(c); a.Ug.add('Comment', b); b = new pf(); b.type = X.Auto; c = new W(); c.fill = null; c.stroke = 'dodgerblue'; c.strokeWidth = 3; b.add(c); c = new Xg(); c.margin = new Ic(1.5, 1.5, 1.5, 1.5).ga(); b.add(c); a.Zr = b; a.sr = b; b = new pf(); b.type = X.Link; c = new W(); c.isPanelMain = !0; c.fill = null; c.stroke = 'dodgerblue'; c.strokeWidth = 3; b.add(c); a.Or = b; } P.prototype.setRTL = function (a) { a = void 0 === a ? this.div : a; null === a && (a = w.document.body); var b = va('div'); b.dir = 'rtl'; b.style.cssText = 'font-size: 14px; width: 1px; height: 1px; position: absolute; top: -1000px; overflow: scroll;'; b.textContent = 'A'; a.appendChild(b); var c = 'reverse'; 0 < b.scrollLeft ? (c = 'default') : ((b.scrollLeft = 1), 0 === b.scrollLeft && (c = 'negative')); a.removeChild(b); this.ru = c; }; P.prototype.setScrollWidth = function (a) { a = void 0 === a ? this.div : a; null === a && (a = w.document.body); var b = 0; if (th) { var c = Ii; b = Ji; null === c && ((c = Ii = va('p')), (c.style.width = '100%'), (c.style.height = '200px'), (c.style.boxSizing = 'content-box'), (b = Ji = va('div')), (b.style.position = 'absolute'), (b.style.visibility = 'hidden'), (b.style.width = '200px'), (b.style.height = '150px'), (b.style.boxSizing = 'content-box'), b.appendChild(c)); b.style.overflow = 'hidden'; a.appendChild(b); var d = c.offsetWidth; b.style.overflow = 'scroll'; c = c.offsetWidth; d === c && (c = b.clientWidth); a.removeChild(b); b = d - c; 0 !== b || mb || (b = 11); } this.Gb = b; }; P.prototype.fb = function (a) { a.classType === P && (this.autoScale = a); }; P.prototype.toString = function (a) { void 0 === a && (a = 0); var b = ''; this.div && this.div.id && (b = this.div.id); b = 'Diagram "' + b + '"'; if (0 >= a) return b; for (var c = this.Pa.iterator; c.next(); ) b += '\n ' + c.value.toString(a - 1); return b; }; P.prototype.addEventListener = function (a, b, c, d) { a.addEventListener(b, c, d); }; P.prototype.removeEventListener = function (a, b, c, d) { a.removeEventListener(b, c, d); }; function Ki(a) { var b = a.Da.Ga; b instanceof HTMLCanvasElement && (a.Lq ? (a.addEventListener(b, 'pointerdown', a.im, !1), a.addEventListener(b, 'pointermove', a.jm, !1), a.addEventListener(b, 'pointerup', a.lm, !1), a.addEventListener(b, 'pointerout', a.km, !1)) : (a.addEventListener(b, 'touchstart', a.Uv, !1), a.addEventListener(b, 'touchmove', a.Tv, !1), a.addEventListener(b, 'touchend', a.Sv, !1), a.addEventListener(b, 'mousemove', a.jk, !1), a.addEventListener(b, 'mousedown', a.ik, !1), a.addEventListener(b, 'mouseup', a.lk, !1), a.addEventListener(b, 'mouseout', a.kk, !1)), a.addEventListener(b, 'mouseenter', a.Cy, !1), a.addEventListener(b, 'mouseleave', a.Dy, !1), a.addEventListener(b, 'wheel', a.mk, !1), a.addEventListener(b, 'keydown', a.sz, !1), a.addEventListener(b, 'keyup', a.uz, !1), a.addEventListener(b, 'blur', a.oy, !1), a.addEventListener(b, 'focus', a.py, !1), a.addEventListener( b, 'selectstart', function (a) { a.preventDefault(); return !1; }, !1, ), a.addEventListener( b, 'contextmenu', function (a) { a.preventDefault(); return !1; }, !1, ), a.addEventListener( b, 'gesturestart', function (b) { a.toolManager.gestureBehavior !== sf && (a.toolManager.gestureBehavior === rf ? b.preventDefault() : (a.Se && a.lastInput.handled) || (b.preventDefault(), (a.Jo = a.scale), a.currentTool.doCancel())); }, !1, ), a.addEventListener( b, 'gesturechange', function (b) { if (a.toolManager.gestureBehavior !== sf) if (a.toolManager.gestureBehavior === rf) b.preventDefault(); else if (!a.Se || !a.lastInput.handled) { b.preventDefault(); var c = b.scale; if (null !== a.Jo) { var e = a.Da.getBoundingClientRect(); b = new G( b.pageX - window.scrollX - (a.xa / e.width) * e.left, b.pageY - window.scrollY - (a.wa / e.height) * e.top, ); c = a.Jo * c; e = a.commandHandler; if (c !== a.scale && e.canResetZoom(c)) { var f = a.zoomPoint; a.zoomPoint = b; e.resetZoom(c); a.zoomPoint = f; } } } }, !1, ), a.addEventListener(w, 'resize', a.$v, !1)); } function Kf(a) { 30 < a.vo && (a.jh = 1); } function Uf(a, b) { null !== a.jh && ((a.jh = null), b && a.nt(), (a.vo = 0), (a.wo = [0, 0, 0, 0, 0]), (a.xo = 0)); } P.prototype.computePixelRatio = function () { return null !== this.jh ? this.jh : w.devicePixelRatio || 1; }; P.prototype.doMouseMove = function () { this.currentTool.doMouseMove(); }; P.prototype.doMouseDown = function () { this.currentTool.doMouseDown(); }; P.prototype.doMouseUp = function () { this.currentTool.doMouseUp(); }; P.prototype.doMouseWheel = function () { this.currentTool.doMouseWheel(); }; P.prototype.doKeyDown = function () { this.currentTool.doKeyDown(); }; P.prototype.doKeyUp = function () { this.currentTool.doKeyUp(); }; P.prototype.doFocus = function () { this.focus(); }; P.prototype.focus = function () { if (this.Da) if (this.scrollsPageOnFocus) this.Da.focus(); else { var a = w.scrollX || w.pageXOffset, b = w.scrollY || w.pageYOffset; this.Da.focus(); w.scrollTo(a, b); } }; P.prototype.py = function () { this.C.aa('GainedFocus'); }; P.prototype.oy = function () { this.C.aa('LostFocus'); }; function Th(a) { if (null !== a.Da) { var b = a.Ia; if (0 !== b.clientWidth && 0 !== b.clientHeight) { a.setScrollWidth(); var c = a.$h ? a.Gb : 0, d = a.Qg ? a.Gb : 0, e = a.Mb; a.Mb = a.computePixelRatio(); a.Mb !== e && ((a.On = !0), a.cc()); if (b.clientWidth !== a.xa + c || b.clientHeight !== a.wa + d) (a.lj = !0), (a.nc = !0), (b = a.layout), null !== b && b.isViewportSized && a.autoScale === pi && ((a.Sk = !0), b.B()), a.Yb || a.cc(); } } } function ui(a) { var b = new fi(); b.name = 'Background'; a.Ql(b); b = new fi(); b.name = ''; a.Ql(b); b = new fi(); b.name = 'Foreground'; a.Ql(b); b = new fi(); b.name = 'Adornment'; b.isTemporary = !0; a.Ql(b); b = new fi(); b.name = 'Tool'; b.isTemporary = !0; b.isBoundsIncluded = !0; a.Ql(b); b = new fi(); b.name = 'Grid'; b.allowSelect = !1; b.pickable = !1; b.isTemporary = !0; a.Qw(b, a.Zl('Background')); } function Li(a) { a.Eb = new X(X.Grid); a.Eb.name = 'GRID'; var b = new W(); b.figure = 'LineH'; b.stroke = 'lightgray'; b.strokeWidth = 0.5; b.interval = 1; a.Eb.add(b); b = new W(); b.figure = 'LineH'; b.stroke = 'gray'; b.strokeWidth = 0.5; b.interval = 5; a.Eb.add(b); b = new W(); b.figure = 'LineH'; b.stroke = 'gray'; b.strokeWidth = 1; b.interval = 10; a.Eb.add(b); b = new W(); b.figure = 'LineV'; b.stroke = 'lightgray'; b.strokeWidth = 0.5; b.interval = 1; a.Eb.add(b); b = new W(); b.figure = 'LineV'; b.stroke = 'gray'; b.strokeWidth = 0.5; b.interval = 5; a.Eb.add(b); b = new W(); b.figure = 'LineV'; b.stroke = 'gray'; b.strokeWidth = 1; b.interval = 10; a.Eb.add(b); b = new T(); b.add(a.Eb); b.layerName = 'Grid'; b.zOrder = 0; b.isInDocumentBounds = !1; b.isAnimated = !1; b.pickable = !1; b.locationObjectName = 'GRID'; a.add(b); a.partManager.parts.remove(b); a.Eb.visible = !1; } function Mi() { this.C.tu ? (this.C.tu = !1) : this.C.isEnabled ? this.C.$w(this) : Ni(this.C); } function Oi(a) { this.C.isEnabled ? ((this.C.vu = a.target.scrollTop), (this.C.uu = a.target.scrollLeft)) : Ni(this.C); } P.prototype.$w = function (a) { if (null !== this.Da) { this.os = !0; var b = this.documentBounds, c = this.viewportBounds, d = this.ti, e = b.x - d.left, f = b.y - d.top, g = b.width + d.left + d.right, h = b.height + d.top + d.bottom, k = b.right + d.right; d = b.bottom + d.bottom; var l = c.x; b = c.y; var m = c.width, n = c.height, p = c.right, q = c.bottom; c = this.scale; var r = a.scrollLeft; if (this.Sn) switch (this.ru) { case 'negative': r = r + a.scrollWidth - a.clientWidth; break; case 'reverse': r = a.scrollWidth - r - a.clientWidth; } var u = r; m < g || n < h ? ((r = G.allocAt(this.position.x, this.position.y)), this.allowHorizontalScroll && this.uu !== u && ((r.x = u / c + e), (this.uu = u)), this.allowVerticalScroll && this.vu !== a.scrollTop && ((r.y = a.scrollTop / c + f), (this.vu = a.scrollTop)), (this.position = r), G.free(r), (this.lj = this.os = !1)) : ((r = G.alloc()), a.Vx && this.allowHorizontalScroll && (e < l && (this.position = r.h(u + e, this.position.y)), k > p && (this.position = r.h( -(this.qs.scrollWidth - this.xa) + u - this.xa / c + k, this.position.y, ))), a.Wx && this.allowVerticalScroll && (f < b && (this.position = r.h(this.position.x, a.scrollTop + f)), d > q && (this.position = r.h( this.position.x, -(this.qs.scrollHeight - this.wa) + a.scrollTop - this.wa / c + d, ))), G.free(r), Pi(this), (this.lj = this.os = !1), (b = this.documentBounds), (c = this.viewportBounds), (k = b.right), (p = c.right), (d = b.bottom), (q = c.bottom), (e = b.x), (l = c.x), (f = b.y), (b = c.y), m >= g && e >= l && k <= p && (this.hp.style.width = '1px'), n >= h && f >= b && d <= q && (this.hp.style.height = '1px')); } }; P.prototype.computeBounds = function () { 0 < this.Dd.count && Qi(this); return Ri(this); }; function Ri(a) { if (a.fixedBounds.o()) { var b = a.fixedBounds.copy(); b.Np(a.eb); return b; } for (var c = !0, d = a.Pa.j, e = d.length, f = 0; f < e; f++) { var g = d[f]; if (g.visible && (!g.isTemporary || g.isBoundsIncluded)) { g = g.Fa.j; for (var h = g.length, k = 0; k < h; k++) { var l = g[k]; l.isInDocumentBounds && l.isVisible() && ((l = l.actualBounds), l.o() && (c ? ((c = !1), (b = l.copy())) : b.Jc(l))); } } } c && (b = new N(0, 0, 0, 0)); b.Np(a.eb); return b; } P.prototype.computePartsBounds = function (a, b) { void 0 === b && (b = !1); var c = null; if (Ea(a)) for (var d = 0; d < a.length; d++) { var e = a[d]; (!b && e instanceof S) || (e.$b(), null === c ? (c = e.actualBounds.copy()) : c.Jc(e.actualBounds)); } else for (a = a.iterator; a.next(); ) (d = a.value), (!b && d instanceof S) || (d.$b(), null === c ? (c = d.actualBounds.copy()) : c.Jc(d.actualBounds)); return null === c ? new N(NaN, NaN, 0, 0) : c; }; function Si(a, b) { if ( (b || a.he) && !a.ob && null !== a.Da && !a.animationManager.isAnimating && a.documentBounds.o() ) { a.ob = !0; var c = a.bj; b && a.bi !== pi && (c = a.bi); var d = c !== pi ? Ti(a, c) : a.scale; c = a.viewportBounds.copy(); var e = a.xa / d, f = a.wa / d, g = null, h = a.animationManager; h.rb && (g = a.sa.copy()); var k = a.dj, l = a.Nn; b && !k.gb() && (l.gb() || l.Kb()) && (k = l.Kb() ? dd : l); Ui(a, a.documentBounds, e, f, k, b); null !== g && di(h, g, a.sa); b = a.scale; a.scale = d; a.ob = !1; d = a.viewportBounds; d.Qa(c) || a.lq(c, d, b, !1); } } function Ti(a, b) { var c = a.dr; if (null === a.Da) return c; a.Rg && Vi(a, a.computeBounds()); var d = a.documentBounds; if (!d.o()) return c; var e = d.width; d = d.height; var f = a.xa, g = a.wa, h = f / e, k = g / d; return b === Wi ? ((b = Math.min(k, h)), b > c && (b = c), b < a.minScale && (b = a.minScale), b > a.maxScale && (b = a.maxScale), b) : b === Xi ? ((b = k > h ? (g - a.Gb) / d : (f - a.Gb) / e), b > c && (b = c), b < a.minScale && (b = a.minScale), b > a.maxScale && (b = a.maxScale), b) : a.scale; } P.prototype.zoomToFit = function () { var a = this.Hj; this.Hj = oi; this.scale = Ti(this, Wi); a !== oi && (Si(this, !1), Ui(this, this.documentBounds, this.xa / this.Ca, this.wa / this.Ca, this.dj, !1)); this.Hj = a; }; t = P.prototype; t.$z = function (a, b) { void 0 === b && (b = Wi); var c = a.width, d = a.height; if (!(0 === c || 0 === d || (isNaN(c) && isNaN(d)))) { var e = 1; if (b === Wi || b === Xi) if (isNaN(c)) e = (this.viewportBounds.height * this.scale) / d; else if (isNaN(d)) e = (this.viewportBounds.width * this.scale) / c; else { e = this.xa; var f = this.wa; e = b === Xi ? f / d > e / c ? (f - (this.Qg ? this.Gb : 0)) / d : (e - (this.$h ? this.Gb : 0)) / c : Math.min(f / d, e / c); } this.scale = e; this.position = new G(a.x, a.y); } }; t.jy = function (a, b) { this.Rg && Vi(this, this.computeBounds()); var c = this.documentBounds, d = this.viewportBounds; this.position = new G( c.x + (a.x * c.width + a.offsetX) - (b.x * d.width - b.offsetX), c.y + (a.y * c.height + a.offsetY) - (b.y * d.height - b.offsetY), ); }; function Ui(a, b, c, d, e, f) { a.sa.ha(); var g = a.sa, h = g.x, k = g.y; if (f || a.scrollMode === oi) e.gb() && (c > b.width && (h = b.x + (e.x * b.width + e.offsetX) - (e.x * c - e.offsetX)), d > b.height && (k = b.y + (e.y * b.height + e.offsetY) - (e.y * d - e.offsetY))), (e = a.ti), (f = c - b.width), c < b.width + e.left + e.right ? ((h = Math.min(h + c / 2, b.right + Math.max(f, e.right) - c / 2)), (h = Math.max(h, b.left - Math.max(f, e.left) + c / 2)), (h -= c / 2)) : h > b.left ? (h = b.left) : h < b.right - c && (h = b.right - c), (c = d - b.height), d < b.height + e.top + e.bottom ? ((k = Math.min(k + d / 2, b.bottom + Math.max(c, e.bottom) - d / 2)), (k = Math.max(k, b.top - Math.max(c, e.top) + d / 2)), (k -= d / 2)) : k > b.top ? (k = b.top) : k < b.bottom - d && (k = b.bottom - d); g.x = isFinite(h) ? h : -a.eb.left; g.y = isFinite(k) ? k : -a.eb.top; null !== a.positionComputation && ((b = a.positionComputation(a, g)), (g.x = b.x), (g.y = b.y)); a.sa.freeze(); } t.$l = function (a, b) { void 0 === b && (b = !0); if (b) { if ( ((a = gg( this, a, function (a) { return a.part; }, function (a) { return a.canSelect(); }, )), a instanceof T) ) return a; } else if ( ((a = gg(this, a, function (a) { return a.part; })), a instanceof T) ) return a; return null; }; t.Rb = function (a, b, c) { void 0 === b && (b = null); void 0 === c && (c = null); Qi(this); for (var d = this.Pa.iteratorBackwards; d.next(); ) { var e = d.value; if (e.visible && ((e = e.Rb(a, b, c)), null !== e)) return e; } return null; }; function gg(a, b, c, d) { void 0 === c && (c = null); void 0 === d && (d = null); Qi(a); for (a = a.Pa.iteratorBackwards; a.next(); ) { var e = a.value; if (e.visible && !e.isTemporary && ((e = e.Rb(b, c, d)), null !== e)) return e; } return null; } t.My = function (a, b, c) { void 0 === b && (b = !0); return Yi( this, a, function (a) { return a.part; }, b ? function (a) { return a instanceof T && a.canSelect(); } : null, c, ); }; function Yi(a, b, c, d, e) { void 0 === c && (c = null); void 0 === d && (d = null); e instanceof E || e instanceof F || (e = new F()); Qi(a); for (a = a.Pa.iteratorBackwards; a.next(); ) { var f = a.value; f.visible && !f.isTemporary && f.Hi(b, c, d, e); } return e; } t.Hi = function (a, b, c, d) { void 0 === b && (b = null); void 0 === c && (c = null); d instanceof E || d instanceof F || (d = new F()); Qi(this); for (var e = this.Pa.iteratorBackwards; e.next(); ) { var f = e.value; f.visible && f.Hi(a, b, c, d); } return d; }; t.ix = function (a, b, c, d) { void 0 === b && (b = !1); void 0 === c && (c = !0); return Zi( this, a, function (a) { return a instanceof T && (!c || a.canSelect()); }, b, d, ); }; t.pg = function (a, b, c, d, e) { void 0 === b && (b = null); void 0 === c && (c = null); void 0 === d && (d = !1); e instanceof E || e instanceof F || (e = new F()); Qi(this); for (var f = this.Pa.iteratorBackwards; f.next(); ) { var g = f.value; g.visible && g.pg(a, b, c, d, e); } return e; }; function Zi(a, b, c, d, e) { var f = null; void 0 === f && (f = null); void 0 === c && (c = null); void 0 === d && (d = !1); e instanceof E || e instanceof F || (e = new F()); Qi(a); for (a = a.Pa.iteratorBackwards; a.next(); ) { var g = a.value; g.visible && !g.isTemporary && g.pg(b, f, c, d, e); } return e; } t.Ny = function (a, b, c, d, e) { void 0 === c && (c = !0); void 0 === d && (d = !0); return $i( this, a, b, function (a) { return a instanceof T && (!d || a.canSelect()); }, c, e, ); }; t.qg = function (a, b, c, d, e, f) { void 0 === c && (c = null); void 0 === d && (d = null); void 0 === e && (e = !0); if (!1 !== e && !0 !== e) { if (e instanceof E || e instanceof F) f = e; e = !0; } f instanceof E || f instanceof F || (f = new F()); Qi(this); for (var g = this.Pa.iteratorBackwards; g.next(); ) { var h = g.value; h.visible && h.qg(a, b, c, d, e, f); } return f; }; function $i(a, b, c, d, e, f) { var g = null; void 0 === g && (g = null); void 0 === d && (d = null); void 0 === e && (e = !0); if (!1 !== e && !0 !== e) { if (e instanceof E || e instanceof F) f = e; e = !0; } f instanceof E || f instanceof F || (f = new F()); Qi(a); for (a = a.Pa.iteratorBackwards; a.next(); ) { var h = a.value; h.visible && !h.isTemporary && h.qg(b, c, g, d, e, f); } return f; } P.prototype.acceptEvent = function (a) { return aj(this, a, a instanceof MouseEvent); }; function aj(a, b, c) { var d = a.Ze; a.Ze = a.rj; a.rj = d; d.diagram = a; d.event = b; c ? bj(a, b, d) : ((d.viewPoint = a.Ze.viewPoint), (d.documentPoint = a.Ze.documentPoint)); a = 0; b.ctrlKey && (a += 1); b.altKey && (a += 2); b.shiftKey && (a += 4); b.metaKey && (a += 8); d.modifiers = a; d.button = b.button; void 0 === b.buttons || bb || (d.buttons = b.buttons); ib && 0 === b.button && b.ctrlKey && (d.button = 2); d.down = !1; d.up = !1; d.clickCount = 1; d.delta = 0; d.handled = !1; d.bubbles = !1; d.timestamp = b.timeStamp; d.isMultiTouch = !1; d.targetDiagram = cj(b); d.targetObject = null; return d; } function cj(a) { var b = a.target.C; if (!b) { var c = a.path; c || 'function' !== typeof a.composedPath || (c = a.composedPath()); c && c[0] && (b = c[0].C); } return b ? b : null; } function dj(a, b, c, d) { var e = ej(a, b, !0, !1, !0, d); bj(a, c, e); e.targetDiagram = cj(b); e.targetObject = null; d || e.clone(a.Yh); return e; } function fj(a, b, c, d) { var e; d = ej(a, b, !1, !1, !1, d); null !== c ? ((e = w.document.elementFromPoint(c.clientX, c.clientY)) && e.C ? ((b = c), (c = e.C)) : ((b = void 0 !== b.targetTouches ? b.targetTouches[0] : b), (c = a)), (d.targetDiagram = c), bj(a, b, d)) : null !== a.Ze ? ((d.documentPoint = a.Ze.documentPoint), (d.viewPoint = a.Ze.viewPoint), (d.targetDiagram = a.Ze.targetDiagram)) : null !== a.Yh && ((d.documentPoint = a.Yh.documentPoint), (d.viewPoint = a.Yh.viewPoint), (d.targetDiagram = a.Yh.targetDiagram)); d.targetObject = null; return d; } function ej(a, b, c, d, e, f) { var g = a.Ze; a.Ze = a.rj; a.rj = g; g.diagram = a; g.clickCount = 1; var h = (g.delta = 0); b.ctrlKey && (h += 1); b.altKey && (h += 2); b.shiftKey && (h += 4); b.metaKey && (h += 8); g.modifiers = h; g.button = 0; g.buttons = 1; g.event = b; g.timestamp = b.timeStamp; a.Lq && b instanceof w.PointerEvent && 'touch' !== b.pointerType && ((g.button = b.button), void 0 === b.buttons || bb || (g.buttons = b.buttons), ib && 0 === b.button && b.ctrlKey && (g.button = 2)); g.down = c; g.up = d; g.handled = !1; g.bubbles = e; g.isMultiTouch = f; return g; } function gj(a, b) { if (a.bubbles) return !0; void 0 !== b.stopPropagation && b.stopPropagation(); !1 !== b.cancelable && b.preventDefault(); b.cancelBubble = !0; return !1; } P.prototype.sz = function (a) { var b = this.C; if (!this.C.isEnabled) return !1; var c = aj(b, a, !1); c.key = String.fromCharCode(a.which); c.down = !0; switch (a.which) { case 8: c.key = 'Backspace'; break; case 33: c.key = 'PageUp'; break; case 34: c.key = 'PageDown'; break; case 35: c.key = 'End'; break; case 36: c.key = 'Home'; break; case 37: c.key = 'Left'; break; case 38: c.key = 'Up'; break; case 39: c.key = 'Right'; break; case 40: c.key = 'Down'; break; case 45: c.key = 'Insert'; break; case 46: c.key = 'Del'; break; case 48: c.key = '0'; break; case 187: case 61: case 107: c.key = 'Add'; break; case 189: case 173: case 109: c.key = 'Subtract'; break; case 27: c.key = 'Esc'; } b.doKeyDown(); return gj(c, a); }; P.prototype.uz = function (a) { var b = this.C; if (!b.isEnabled) return !1; var c = aj(b, a, !1); c.key = String.fromCharCode(a.which); c.up = !0; switch (a.which) { case 8: c.key = 'Backspace'; break; case 33: c.key = 'PageUp'; break; case 34: c.key = 'PageDown'; break; case 35: c.key = 'End'; break; case 36: c.key = 'Home'; break; case 37: c.key = 'Left'; break; case 38: c.key = 'Up'; break; case 39: c.key = 'Right'; break; case 40: c.key = 'Down'; break; case 45: c.key = 'Insert'; break; case 46: c.key = 'Del'; } b.doKeyUp(); return gj(c, a); }; P.prototype.Cy = function (a) { var b = this.C; if (!b.isEnabled) return !1; var c = aj(b, a, !0); null !== b.mouseEnter && b.mouseEnter(c); return gj(c, a); }; P.prototype.Dy = function (a) { var b = this.C; if (!b.isEnabled) return !1; var c = aj(b, a, !0); null !== b.mouseLeave && b.mouseLeave(c); return gj(c, a); }; P.prototype.getMouse = function (a) { var b = this.Da; if (null === b) return new G(0, 0); var c = b.getBoundingClientRect(); b = a.clientX - (this.xa / c.width) * c.left; a = a.clientY - (this.wa / c.height) * c.top; return null !== this.tb ? Qb(new G(b, a), this.tb) : new G(b, a); }; function bj(a, b, c) { var d = a.Da, e = a.xa, f = a.wa, g = 0, h = 0; null !== d && ((d = d.getBoundingClientRect()), (g = b.clientX - (e / d.width) * d.left), (h = b.clientY - (f / d.height) * d.top)); c.viewPoint.h(g, h); null !== a.tb ? ((b = G.allocAt(g, h)), a.tb.Ud(b), c.documentPoint.assign(b), G.free(b)) : c.documentPoint.h(g, h); } function Ye(a, b, c, d) { if (void 0 !== b.targetTouches) { if (2 > b.targetTouches.length) return; b = b.targetTouches[c]; } else if (null !== a.vl[0]) b = a.vl[c]; else return; c = a.Da; null !== c && ((c = c.getBoundingClientRect()), d.h(b.clientX - (a.xa / c.width) * c.left, b.clientY - (a.wa / c.height) * c.top)); } t = P.prototype; t.Xa = function () { this.Rg || ((this.Rg = !0), this.cc(!0)); }; function ci(a) { a.Yb || Qi(a); a.Rg && Vi(a, a.computeBounds()); } t.uf = function () { this.ob || this.Yb || (this.R(), hj(this), Pi(this), this.Xa(), this.fd()); }; t.rz = function () { return this.qd; }; t.xy = function (a) { void 0 === a && (a = null); var b = this.animationManager, c = b.isEnabled; b.vd(); b.isEnabled = !1; pg(this); this.he = !1; b.isEnabled = c; null !== a && ua(a, 1); }; t.cc = function (a) { void 0 === a && (a = !1); if (!0 !== this.qd && !(this.ob || (!1 === a && this.Yb))) { this.qd = !0; var b = this; w.requestAnimationFrame(function () { b.qd && b.fd(); }); } }; t.fd = function () { if (!this.Xk || this.qd) this.Xk && (this.Xk = !1), pg(this); }; function ij(a, b) { a.animationManager.isAnimating || a.ob || !a.lj || Ni(a) || (b && Qi(a), Si(a, !1)); } function pg(a, b) { if (!a.Yb && ((a.qd = !1), null !== a.Ia || a.Gp.o())) { a.Yb = !0; var c = a.animationManager, d = a.mu; if (!c.isTicking && 0 !== d.length) { for (var e = d.j, f = e.length, g = 0; g < f; g++) { var h = e[g]; jj(h, !1); h.s(); } d.clear(); } d = a.yw; 0 < d.count && (d.each(function (a) { a.Zv(); }), d.clear()); e = d = !1; c.isAnimating && ((e = !0), (d = a.skipsUndoManager), (a.skipsUndoManager = !0)); c.rb || Th(a); ij(a, !1); null !== a.Eb && (a.Eb.visible && !a.rr && (kj(a), (a.rr = !0)), !a.Eb.visible && a.rr && (a.rr = !1)); Qi(a); f = !1; if (!a.he || a.Cg) a.he ? lj(a, !a.Sk) : (a.Aa('Initial Layout'), !1 === c.isEnabled && c.vd(), lj(a, !1)), (f = !0); a.Sk = !1; Qi(a); a.wu || c.isAnimating || ci(a); ij(a, !0); f && (a.he || mj(a), a.aa('LayoutCompleted')); Qi(a); f && !a.he && ((a.he = !0), a.Za('Initial Layout'), a.skipsUndoManager || a.undoManager.clear(), ua(function () { a.isModified = !1; }, 1)); a.Ku(); Sh(c); b || a.hc(a.Yc); e && (a.skipsUndoManager = d); a.Yb = !1; } } function mj(a) { var b = a.Pa.j; a.hd(b, b.length, a); a.bi !== pi ? (a.scale = Ti(a, a.bi)) : a.bj !== pi ? (a.scale = Ti(a, a.bj)) : ((b = a.initialScale), isFinite(b) && 0 < b && (a.scale = b)); b = a.initialPosition; if (b.o()) a.position = b; else { b = G.alloc(); b.Vi(a.documentBounds, a.initialDocumentSpot); var c = a.viewportBounds; c = N.allocAt(0, 0, c.width, c.height); var d = G.alloc(); d.Vi(c, a.initialViewportSpot); d.h(b.x - d.x, b.y - d.y); a.position = d; N.free(c); G.free(d); G.free(b); hj(a); ij(a, !0); Si(a, !0); } a.aa('InitialLayoutCompleted'); kj(a); } function Qi(a) { if ((a.Yb || !a.animationManager.isAnimating) && 0 !== a.Dd.count) { for (var b = 0; 23 > b; b++) { var c = a.Dd.iterator; if (null === c || 0 === a.Dd.count) break; a.Dd = new F(); a.Zv(c, a.Dd); } a.nodes.each(function (a) { a instanceof ig && (0 !== (a.S & 65536)) !== !1 && (a.S = a.S ^ 65536); }); } } t.Zv = function (a, b) { for (a.reset(); a.next(); ) { var c = a.value; !c.bc() || c instanceof ig || (c.Ri() ? (c.measure(Infinity, Infinity), c.arrange()) : b.add(c)); } for (a.reset(); a.next(); ) (c = a.value), c instanceof ig && c.isVisible() && nj(this, c); for (a.reset(); a.next(); ) (c = a.value), c instanceof S && c.isVisible() && (c.Ri() ? (c.measure(Infinity, Infinity), c.arrange()) : b.add(c)); for (a.reset(); a.next(); ) (c = a.value), c instanceof pf && c.isVisible() && (c.Ri() ? (c.measure(Infinity, Infinity), c.arrange()) : b.add(c)); }; function nj(a, b) { for (var c = Ka(), d = Ka(), e = b.memberParts; e.next(); ) { var f = e.value; f.isVisible() && (f instanceof ig ? (oj(f) || pj(f) || qj(f)) && nj(a, f) : f instanceof S ? f.fromNode === b || f.toNode === b ? d.push(f) : c.push(f) : (f.measure(Infinity, Infinity), f.arrange())); } a = c.length; for (e = 0; e < a; e++) (f = c[e]), f.measure(Infinity, Infinity), f.arrange(); Oa(c); b.measure(Infinity, Infinity); b.arrange(); a = d.length; for (b = 0; b < a; b++) (c = d[b]), c.measure(Infinity, Infinity), c.arrange(); Oa(d); } t.hd = function (a, b, c, d) { if (this.ci || this.animationManager.isAnimating) for (var e = 0; e < b; e++) a[e].hd(c, d); }; t.hc = function (a, b) { void 0 === b && (b = null); if (null !== this.Ia) { null === this.Da && A('No canvas specified'); var c = this.animationManager; if (!c.rb) { var d = new Date(); rj(this); if ('0' !== this.Ia.style.opacity) { var e = a !== this.Yc, f = this.Pa.j, g = f.length, h = this; this.hd(f, g, h); if (e) a.Rc(!0), Pi(this); else if (!this.nc && null === b && !c.isAnimating) return; g = this.sa; var k = this.Ca, l = Math.round(g.x * k) / k, m = Math.round(g.y * k) / k; c = this.tb; c.reset(); 1 !== k && c.scale(k); (0 === g.x && 0 === g.y) || c.translate(-l, -m); k = this.Mb; a.setTransform(1, 0, 0, 1, 0, 0); a.scale(k, k); a.clearRect(0, 0, this.xa, this.wa); a.setTransform(1, 0, 0, 1, 0, 0); a.scale(k, k); a.transform(c.m11, c.m12, c.m21, c.m22, c.dx, c.dy); l = null !== b ? function (c) { var d = b; if (c.visible && 0 !== c.lb) { var e = c.Fa.j, f = e.length; if (0 !== f) { 1 !== c.lb && (a.globalAlpha = c.lb); c = c.Lo; c.length = 0; for (var g = h.scale, k = 0; k < f; k++) { var l = e[k]; if (og(l) && !d.contains(l)) { if (l instanceof S && (l.isOrthogonal && c.push(l), !1 === l.Lc)) continue; var m = l.actualBounds; m.width * g > h.oe || m.height * g > h.oe ? l.hc(a, h) : ii(a, l); } } a.globalAlpha = 1; } } } : function (b) { b.hc(a, h); }; sj(this, a); g = f.length; for (m = 0; m < g; m++) a.setTransform(1, 0, 0, 1, 0, 0), a.scale(k, k), a.transform(c.m11, c.m12, c.m21, c.m22, c.dx, c.dy), l(f[m]); this.ai && tj(this.ai, this) && this.hr(); e ? (this.Yc.Rc(!0), Pi(this)) : (this.nc = this.ci = !1); e = +new Date() - +d; if (null === this.jh) { d = this.wo; d[this.xo] = e; this.xo = (this.xo + 1) % d.length; for (f = e = 0; f < this.wo.length; f++) e += this.wo[f]; this.vo = e / d.length; } } } } }; function uj(a, b, c, d, e, f, g, h, k, l) { if (null !== a.Ia) { null === a.Da && A('No canvas specified'); void 0 === g && (g = null); void 0 === h && (h = null); void 0 === k && (k = !1); void 0 === l && (l = !1); rj(a); a.Yc.Rc(!0); Pi(a); a.nj = !0; var m = a.Ca; a.Ca = e; var n = a.Pa.j, p = n.length; try { var q = new N(f.x, f.y, d.width / e, d.height / e), r = q.copy(); r.Np(c); kj(a, r); Qi(a); a.hd(n, p, a, q); var u = a.Mb; b.setTransform(1, 0, 0, 1, 0, 0); b.scale(u, u); b.clearRect(0, 0, d.width, d.height); null !== h && '' !== h && ((b.fillStyle = h), b.fillRect(0, 0, d.width, d.height)); var x = Qc.alloc(); x.reset(); x.translate(c.left, c.top); x.scale(e); (0 === f.x && 0 === f.y) || x.translate(-f.x, -f.y); b.setTransform(x.m11, x.m12, x.m21, x.m22, x.dx, x.dy); Qc.free(x); sj(a, b); if (null !== g) { var v = new F(), z = g.iterator; for (z.reset(); z.next(); ) { var y = z.value; (!1 === l && 'Grid' === y.layer.name) || null === y || v.add(y); } var B = function (c) { var d = k; if (c.visible && 0 !== c.lb && (void 0 === d && (d = !0), d || !c.isTemporary)) { d = c.Fa.j; var e = d.length; if (0 !== e) { 1 !== c.lb && (b.globalAlpha = c.lb); c = c.Lo; c.length = 0; for (var f = a.scale, g = 0; g < e; g++) { var h = d[g]; if (og(h) && v.contains(h)) { if (h instanceof S && (h.isOrthogonal && c.push(h), !1 === h.Lc)) continue; var l = h.actualBounds; l.width * f > a.oe || l.height * f > a.oe ? h.hc(b, a) : ii(b, h); } } b.globalAlpha = 1; } } }; } else if (!k && l) { var C = a.grid.part, I = C.layer; B = function (c) { c === I ? C.hc(b, a) : c.hc(b, a, k); }; } else B = function (c) { c.hc(b, a, k); }; for (c = 0; c < p; c++) B(n[c]); a.nj = !1; a.ai && tj(a.ai, a) && a.hr(); } finally { (a.Ca = m), a.Yc.Rc(!0), Pi(a), a.hd(n, p, a), kj(a); } } } t.Ee = function (a) { return this.eg[a]; }; t.Gx = function (a, b) { 'minDrawingLength' === a && (this.oe = b); this.eg[a] = b; this.uf(); }; t.Ev = function () { this.eg = new tb(); this.eg.drawShadows = !0; this.eg.textGreeking = !0; this.eg.viewportOptimizations = mb || cb || db ? !1 : !0; this.eg.temporaryPixelRatio = !0; this.eg.pictureRatioOptimization = !0; this.oe = this.eg.minDrawingLength = 1; }; function sj(a, b) { a = a.eg; null !== a && (void 0 !== a.imageSmoothingEnabled && b.Fx(!!a.imageSmoothingEnabled), (a = a.defaultFont), void 0 !== a && null !== a && (b.font = a)); } t.bm = function (a) { return this.dl[a]; }; t.Qz = function (a, b) { this.dl[a] = b; }; t.Dv = function () { this.dl = new tb(); this.dl.extraTouchArea = 10; this.dl.extraTouchThreshold = 10; this.dl.hasGestureZoom = !0; }; t.Nv = function (a) { vj(this, a); }; function vj(a, b) { var c = a instanceof X, d = a instanceof P, e; for (e in b) { '' === e && A('Setting properties requires non-empty property names'); var f = a, g = e; if (c || d) { var h = e.indexOf('.'); if (0 < h) { var k = e.substring(0, h); if (c) f = a.$a(k); else if (((f = a[k]), void 0 === f || null === f)) f = a.toolManager[k]; Ca(f) ? (g = e.substr(h + 1)) : A( 'Unable to find object named: ' + k + ' in ' + a.toString() + ' when trying to set property: ' + e, ); } } if ('_' !== g[0] && !Sa(f, g)) if (d && 'ModelChanged' === g) { a.Sw(b[g]); continue; } else if (d && 'Changed' === g) { a.rh(b[g]); continue; } else if (d && Sa(a.toolManager, g)) f = a.toolManager; else if (d && wj(a, g)) { a.Oj(g, b[g]); continue; } else if (a instanceof Z && 'Changed' === g) { a.rh(b[g]); continue; } else A('Trying to set undefined property "' + g + '" on object: ' + f.toString()); f[g] = b[e]; '_' === g[0] && f instanceof Y && f.Pw(g); } } t.Ku = function () { if (0 === this.undoManager.transactionLevel && 0 !== this.Xh.count) { for (; 0 < this.Xh.count; ) { var a = this.Xh; this.Xh = new Lb(); for (a = a.iterator; a.next(); ) { var b = a.key; b.cq(a.value); b.ac(); } } this.R(); } }; t.R = function (a) { void 0 === a && (a = null); if (null === a) (this.nc = !0), this.cc(); else { var b = this.viewportBounds; null !== a && a.o() && b.Ic(a) && ((this.nc = !0), this.cc()); } this.aa('InvalidateDraw'); }; t.mx = function (a, b) { if (!0 !== this.nc) { this.nc = !0; var c = !0 === this.Ee('temporaryPixelRatio'); if ( !0 === this.Ee('viewportOptimizations') && this.scrollMode !== xj && this.ti.Fi(0, 0, 0, 0) && b.width === a.width && b.height === a.height ) { var d = this.scale, e = Math.max(a.x, b.x), f = Math.max(a.y, b.y); d = N.allocAt( e, f, Math.max(0, Math.min(a.x + a.width, b.x + b.width) - e) * d, Math.max(0, Math.min(a.y + a.height, b.y + b.height) - f) * d, ); if (!this.As && 0 < d.width && 0 < d.height) { if ( !( this.Yb || ((this.qd = !1), null === this.Ia || ((this.Yb = !0), this.Ku(), this.documentBounds.o() || Vi(this, this.computeBounds()), (e = this.Da), null === e || e instanceof yj)) ) ) { var g = this.Mb; f = this.xa * g; var h = this.wa * g, k = this.scale * g, l = Math.round(Math.round(b.x * k) - Math.round(a.x * k)); b = Math.round(Math.round(b.y * k) - Math.round(a.y * k)); k = this.Tt; a = this.tw; k.width !== f && (k.width = f); k.height !== h && (k.height = h); a.clearRect(0, 0, f, h); k = 190 * g; var m = 70 * g, n = Math.max(l, 0), p = Math.max(b, 0), q = Math.floor(f - n), r = Math.floor(h - p); a.drawImage(e.Ga, n, p, q, r, 0, 0, q, r); tj(this.ai, this) && a.clearRect(0, 0, k, m); e = Ka(); a = Ka(); r = Math.abs(l); q = Math.abs(b); var u = 0 === n ? 0 : f - r; n = G.allocAt(u, 0); r = G.allocAt(r + u, h); a.push( new N( Math.min(n.x, r.x), Math.min(n.y, r.y), Math.abs(n.x - r.x), Math.abs(n.y - r.y), ), ); var x = this.tb; x.reset(); x.scale(g, g); 1 !== this.Ca && x.scale(this.Ca); g = this.sa; (0 !== g.x || 0 !== g.y) && isFinite(g.x) && isFinite(g.y) && x.translate(-g.x, -g.y); Qb(n, x); Qb(r, x); e.push( new N( Math.min(n.x, r.x), Math.min(n.y, r.y), Math.abs(n.x - r.x), Math.abs(n.y - r.y), ), ); u = 0 === p ? 0 : h - q; n.h(0, u); r.h(f, q + u); a.push( new N( Math.min(n.x, r.x), Math.min(n.y, r.y), Math.abs(n.x - r.x), Math.abs(n.y - r.y), ), ); Qb(n, x); Qb(r, x); e.push( new N( Math.min(n.x, r.x), Math.min(n.y, r.y), Math.abs(n.x - r.x), Math.abs(n.y - r.y), ), ); tj(this.ai, this) && ((f = 0 < l ? 0 : -l), (h = 0 < b ? 0 : -b), n.h(f, h), r.h(k + f, m + h), a.push( new N( Math.min(n.x, r.x), Math.min(n.y, r.y), Math.abs(n.x - r.x), Math.abs(n.y - r.y), ), ), Qb(n, x), Qb(r, x), e.push( new N( Math.min(n.x, r.x), Math.min(n.y, r.y), Math.abs(n.x - r.x), Math.abs(n.y - r.y), ), )); G.free(n); G.free(r); ij(this, !1); null === this.Ia && A('No div specified'); null === this.Da && A('No canvas specified'); if (!this.animationManager.rb && ((f = this.Yc), this.nc)) { rj(this); h = this.Mb; f.setTransform(1, 0, 0, 1, 0, 0); f.clearRect(0, 0, this.xa * h, this.wa * h); f.drawImage(this.Tt.Ga, 0 < l ? 0 : Math.round(-l), 0 < b ? 0 : Math.round(-b)); l = this.sa; g = this.Ca; k = Math.round(l.x * g) / g; m = Math.round(l.y * g) / g; b = this.tb; b.reset(); 1 !== g && b.scale(g); (0 === l.x && 0 === l.y) || b.translate(-k, -m); f.save(); f.beginPath(); l = a.length; for (g = 0; g < l; g++) (k = a[g]), 0 !== k.width && 0 !== k.height && f.rect( Math.floor(k.x), Math.floor(k.y), Math.ceil(k.width), Math.ceil(k.height), ); f.clip(); f.setTransform(1, 0, 0, 1, 0, 0); f.scale(h, h); f.transform(b.m11, b.m12, b.m21, b.m22, b.dx, b.dy); b = this.Pa.j; l = b.length; this.hd(b, l, this); sj(this, f); for (h = 0; h < l; h++) if (((p = b[h]), (g = e), p.visible && 0 !== p.lb)) { 1 !== p.lb && (f.globalAlpha = p.lb); k = p.Lo; k.length = 0; m = this.scale; p = p.Fa.j; n = p.length; q = g.length; for (r = 0; r < n; r++) if (((x = p[r]), og(x))) { if (x instanceof S && (x.isOrthogonal && k.push(x), !1 === x.Lc)) continue; u = zj(x, x.actualBounds); a: { var v = 2 / m; for (var z = 4 / m, y = 0; y < q; y++) { var B = g[y]; if ( 0 !== B.width && 0 !== B.height && u.iv(B.x - v, B.y - v, B.width + z, B.height + z) ) { v = !0; break a; } } v = !1; } v && (u.width * m > this.oe || u.height * m > this.oe ? x.hc(f, this) : ii(f, x)); } f.globalAlpha = 1; } f.restore(); f.Rc(!0); this.ai && tj(this.ai, this) && this.hr(); this.nc = this.ci = !1; this.nt(); } Oa(e); Oa(a); this.Yb = !1; } } else this.fd(); N.free(d); c && (Kf(this), this.fd(), Uf(this, !0)); } else c ? (Kf(this), this.fd(), Uf(this, !0)) : this.fd(); } }; function hj(a) { !1 === a.lj && (a.lj = !0); } function Pi(a) { !1 === a.ci && (a.ci = !0); } function rj(a) { !1 !== a.On && ((a.On = !1), Aj(a, a.xa, a.wa)); } function Aj(a, b, c) { var d = a.Mb; a.Da.resize(b * d, c * d, b, c) && ((a.nc = !0), a.Yc.Rc(!0)); } function Ni(a) { var b = a.Da; if (null === b) return !0; var c = a.Ia, d = a.xa, e = a.wa, f = a.Mw.copy(); if (!f.o()) return !0; var g = !1, h = a.$h ? a.Gb : 0, k = a.Qg ? a.Gb : 0, l = c.clientWidth || d + h; c = c.clientHeight || e + k; if (l !== d + h || c !== e + k) (a.$h = !1), (a.Qg = !1), (k = h = 0), (a.xa = l), (a.wa = c), (g = a.On = !0); a.lj = !1; var m = a.documentBounds, n = 0, p = 0, q = 0, r = 0; l = f.width; c = f.height; var u = a.ti; a.contentAlignment.gb() ? (m.width > l && ((n = u.left), (p = u.right)), m.height > c && ((q = u.top), (r = u.bottom))) : ((n = u.left), (p = u.right), (q = u.top), (r = u.bottom)); u = m.width + n + p; var x = m.height + q + r; n = m.x - n; var v = f.x; p = m.right + p; var z = f.right + h; q = m.y - q; var y = f.y; r = m.bottom + r; var B = f.bottom + k, C = '1px', I = '1px'; m = a.scale; var L = !(u < l + h), J = !(x < c + k); a.scrollMode === oi && (L || J) && (L && a.hasHorizontalScrollbar && a.allowHorizontalScroll && ((C = 1), n + 1 < v && (C = Math.max((v - n) * m + a.xa, C)), p > z + 1 && (C = Math.max((p - z) * m + a.xa, C)), l + h + 1 < u && (C = Math.max((u - l + h) * m + a.xa, C)), (C = C.toString() + 'px')), J && a.hasVerticalScrollbar && a.allowVerticalScroll && ((I = 1), q + 1 < y && (I = Math.max((y - q) * m + a.wa, I)), r > B + 1 && (I = Math.max((r - B) * m + a.wa, I)), c + k + 1 < x && (I = Math.max((x - c + k) * m + a.wa, I)), (I = I.toString() + 'px'))); J = '1px' !== C; L = '1px' !== I; (J && L) || (!J && !L) || (L && (z -= a.Gb), J && (B -= a.Gb), u < l + h || !a.hasHorizontalScrollbar || !a.allowHorizontalScroll || ((h = 1), n + 1 < v && (h = Math.max((v - n) * m + a.xa, h)), p > z + 1 && (h = Math.max((p - z) * m + a.xa, h)), l + 1 < u && (h = Math.max((u - l) * m + a.xa, h)), (C = h.toString() + 'px')), (J = '1px' !== C), (h = a.wa), J !== a.Qg && (h = J ? a.wa - a.Gb : a.wa + a.Gb), x < c + k || !a.hasVerticalScrollbar || !a.allowVerticalScroll || ((k = 1), q + 1 < y && (k = Math.max((y - q) * m + h, k)), r > B + 1 && (k = Math.max((r - B) * m + h, k)), c + 1 < x && (k = Math.max((x - c) * m + h, k)), (I = k.toString() + 'px')), (L = '1px' !== I)); if (a.os && J === a.Qg && L === a.$h) return (d === a.xa && e === a.wa) || a.fd(), !1; J !== a.Qg && ('1px' === C ? (a.wa = a.wa + a.Gb) : (a.wa = Math.max(a.wa - a.Gb, 1)), (g = !0)); a.Qg = J; a.hp.style.width = C; L !== a.$h && ('1px' === I ? (a.xa = a.xa + a.Gb) : (a.xa = Math.max(a.xa - a.Gb, 1)), (g = !0), a.Sn && ((k = G.alloc()), L ? ((b.style.left = a.Gb + 'px'), (a.position = k.h(a.sa.x + a.Gb / a.scale, a.sa.y))) : ((b.style.left = '0px'), (a.position = k.h(a.sa.x - a.Gb / a.scale, a.sa.y))), G.free(k))); a.$h = L; a.hp.style.height = I; a.tu = !0; g && (a.On = !0); b = a.qs; k = b.scrollLeft; a.hasHorizontalScrollbar && a.allowHorizontalScroll && (l + 1 < u ? (k = (a.position.x - n) * m) : n + 1 < v ? (k = b.scrollWidth - b.clientWidth) : p > z + 1 && (k = a.position.x * m)); if (a.Sn) switch (a.ru) { case 'negative': k = -(b.scrollWidth - k - b.clientWidth); break; case 'reverse': k = b.scrollWidth - k - b.clientWidth; } b.scrollLeft = k; a.hasVerticalScrollbar && a.allowVerticalScroll && (c + 1 < x ? (b.scrollTop = (a.position.y - q) * m) : q + 1 < y ? (b.scrollTop = b.scrollHeight - b.clientHeight) : r > B + 1 && (b.scrollTop = a.position.y * m)); l = a.xa; c = a.wa; b.style.width = l + (a.$h ? a.Gb : 0) + 'px'; b.style.height = c + (a.Qg ? a.Gb : 0) + 'px'; return d !== l || e !== c || a.animationManager.rb ? (a.lq(f, a.viewportBounds, m, g), !1) : !0; } t.add = function (a) { var b = a.diagram; if ( b !== this && (null !== b && A( 'Cannot add part ' + a.toString() + ' to ' + this.toString() + '. It is already a part of ' + b.toString(), ), (b = this.Zl(a.layerName)), null === b && (b = this.Zl('')), null === b && A( 'Cannot add a Part when unable find a Layer named "' + a.layerName + '" and there is no default Layer', ), a.layer !== b) ) { var c = b.Pi(99999999, a, a.diagram === this); 0 <= c && this.ab(cf, 'parts', b, null, a, null, c); b.isTemporary || this.Xa(); a.B(1); c = a.layerChanged; null !== c && c(a, null, b); } }; t.Pi = function (a) { this.partManager.Pi(a); var b = this; Bj(a, function (a) { Cj(b, a); }); (a instanceof pf || (a instanceof ig && null !== a.placeholder)) && a.s(); null !== a.data && Bj(a, function (a) { Dj(b.partManager, a); }); (!0 !== pj(a) && !0 !== qj(a)) || this.Dd.add(a); Ej(a, !0, this); Fj(a) ? (a.actualBounds.o() && this.R(zj(a, a.actualBounds)), this.Xa()) : a.isVisible() && a.actualBounds.o() && this.R(zj(a, a.actualBounds)); this.cc(); }; t.xc = function (a) { a.Tj(); this.partManager.xc(a); var b = this; null !== a.data && Bj(a, function (a) { Gj(b.partManager, a, b); }); this.Dd.remove(a); Fj(a) ? (a.actualBounds.o() && this.R(zj(a, a.actualBounds)), this.Xa()) : a.isVisible() && a.actualBounds.o() && this.R(zj(a, a.actualBounds)); this.cc(); }; t.remove = function (a) { Hj(this, a, !0); }; function Hj(a, b, c) { var d = b.layer; null !== d && d.diagram === a && ((b.isSelected = !1), (b.isHighlighted = !1), b.B(2), c && b.Zj(), (c = d.xc(-1, b, !1)), 0 <= c && a.ab(df, 'parts', d, b, null, c, null), (a = b.layerChanged), null !== a && a(b, d, null)); } t.qt = function (a, b) { if (Ea(a)) for (var c = a.length, d = 0; d < c; d++) { var e = a[d]; (b && !e.canDelete()) || this.remove(e); } else for (c = new F(), c.addAll(a), a = c.iterator; a.next(); ) (c = a.value), (b && !c.canDelete()) || this.remove(c); }; t.Yj = function (a, b, c) { return this.partManager.Yj(a, b, c); }; P.prototype.moveParts = function (a, b, c, d) { void 0 === d && (d = Ij(this)); if (null !== this.toolManager) { var e = new Lb(); if (null !== a) if (Ea(a)) for (var f = 0; f < a.length; f++) Jj(this, e, a[f], c, d); else for (a = a.iterator; a.next(); ) Jj(this, e, a.value, c, d); else { for (a = this.parts; a.next(); ) Jj(this, e, a.value, c, d); for (a = this.nodes; a.next(); ) Jj(this, e, a.value, c, d); for (a = this.links; a.next(); ) Jj(this, e, a.value, c, d); } bg(this, e, b, d, c); } }; function Jj(a, b, c, d, e, f) { if (!b.contains(c) && (void 0 === f && (f = !1), !d || f || c.canMove() || c.canCopy())) if ((void 0 === e && (e = Ij(a)), c instanceof V)) { b.add(c, a.pd(e, c, c.location)); if (c instanceof ig) for (f = c.memberParts; f.next(); ) Jj(a, b, f.value, d, e, e.hz); for (f = c.linksConnected; f.next(); ) { var g = f.value; if (!b.contains(g)) { var h = g.fromNode, k = g.toNode; null !== h && b.contains(h) && null !== k && b.contains(k) && Jj(a, b, g, d, e); } } if (e.dragsTree) for (c = c.av(); c.next(); ) Jj(a, b, c.value, d, e); } else if (c instanceof S) for (b.add(c, a.pd(e, c)), c = c.labelNodes; c.next(); ) Jj(a, b, c.value, d, e); else c instanceof pf || b.add(c, a.pd(e, c, c.location)); } function bg(a, b, c, d, e) { if (null !== b && 0 !== b.count) { var f = G.alloc(), g = G.alloc(); g.assign(c); isNaN(g.x) && (g.x = 0); isNaN(g.y) && (g.y = 0); (c = a.xp) || Lf(a, b); for (var h = Ka(), k = Ka(), l = b.iterator, m = G.alloc(); l.next(); ) { var n = l.key, p = l.value; if (n.bc()) { var q = Kj(a, n, b); if (null !== q) h.push(new Lj(n, p, q)); else if (!e || n.canMove()) (q = p.point), f.assign(q), a.computeMove(n, f.add(g), d, m), (n.location = m), void 0 === p.shifted && (p.shifted = new G()), p.shifted.assign(m.Xd(q)); } else l.key instanceof S && k.push(l.na); } G.free(m); e = h.length; for (l = 0; l < e; l++) (n = h[l]), f.assign(n.info.point), void 0 === n.fv.shifted && (n.fv.shifted = new G()), (n.node.location = f.add(n.fv.shifted)); e = G.alloc(); l = G.alloc(); n = k.length; for (p = 0; p < n; p++) { var r = k[p]; q = r.key; if (q instanceof S) if (q.suspendsRouting) { q.bh = null; m = q.fromNode; var u = q.toNode; if (null !== a.draggedLink && d.dragsLink) if (((u = r.value.point), null === q.dragComputation)) b.add(q, a.pd(d, q, g)), $f(q, g.x - u.x, g.y - u.y); else { r = G.allocAt(0, 0); (m = q.i(0)) && m.o() && r.assign(m); var x = (m = G.alloc().assign(r).add(g)); d.isGridSnapEnabled && (d.isGridSnapRealtime || a.lastInput.up) && ((x = G.alloc()), fh(a, q, m, x, d)); m.assign(q.dragComputation(q, m, x)).Xd(r); b.add(q, a.pd(d, q, m)); $f(q, m.x - u.x, m.y - u.y); G.free(r); G.free(m); x !== m && G.free(x); } else null !== m && (e.assign(m.location), (x = b.J(m)), null !== x && e.Xd(x.point)), null !== u && (l.assign(u.location), (x = b.J(u)), null !== x && l.Xd(x.point)), null !== m && null !== u ? e.Qa(l) ? ((m = r.value.point), (u = f), u.assign(e), u.Xd(m), b.add(q, a.pd(d, q, e)), $f(q, u.x, u.y)) : ((q.suspendsRouting = !1), q.Ra()) : ((r = r.value.point), (m = null !== m ? e : null !== u ? l : g), b.add(q, a.pd(d, q, m)), $f(q, m.x - r.x, m.y - r.y)); } else if (null === q.fromNode || null === q.toNode) (m = r.value.point), b.add(q, a.pd(d, q, g)), $f(q, g.x - m.x, g.y - m.y); } G.free(f); G.free(g); G.free(e); G.free(l); Oa(h); Oa(k); c || (Qi(a), Qf(a, b)); } } P.prototype.computeMove = function (a, b, c, d) { void 0 === d && (d = new G()); d.assign(b); if (null === a) return d; var e = b, f = c.isGridSnapEnabled; f && (c.isGridSnapRealtime || this.lastInput.up) && ((e = G.alloc()), fh(this, a, b, e, c)); c = null !== a.dragComputation ? a.dragComputation(a, b, e) : e; var g = a.minLocation, h = g.x; isNaN(h) && (h = f ? Math.round(a.location.x) : a.location.x); g = g.y; isNaN(g) && (g = f ? Math.round(a.location.y) : a.location.y); var k = a.maxLocation, l = k.x; isNaN(l) && (l = f ? Math.round(a.location.x) : a.location.x); k = k.y; isNaN(k) && (k = f ? Math.round(a.location.y) : a.location.y); d.h(Math.max(h, Math.min(c.x, l)), Math.max(g, Math.min(c.y, k))); e !== b && G.free(e); return d; }; function Ij(a) { var b = a.toolManager.findTool('Dragging'); return null !== b ? b.dragOptions : a.Mk; } function fh(a, b, c, d, e) { void 0 === e && (e = Ij(a)); d.assign(c); if (null !== b) { var f = a.grid; b = e.gridSnapCellSize; a = b.width; b = b.height; var g = e.gridSnapOrigin, h = g.x; g = g.y; e = e.gridSnapCellSpot; if (null !== f) { var k = f.gridCellSize; isNaN(a) && (a = k.width); isNaN(b) && (b = k.height); f = f.gridOrigin; isNaN(h) && (h = f.x); isNaN(g) && (g = f.y); } f = G.allocAt(0, 0); f.rk(0, 0, a, b, e); H.Wp(c.x, c.y, h + f.x, g + f.y, a, b, d); G.free(f); } } function Lf(a, b) { if (null !== b) for (a.xp = !0, a = b.iterator; a.next(); ) (b = a.key), b instanceof S && (b.suspendsRouting = !0); } function Qf(a, b) { if (null !== b) { for (b = b.iterator; b.next(); ) { var c = b.key; c instanceof S && ((c.suspendsRouting = !1), Mj(c) && c.Ra()); } a.xp = !1; } } function Kj(a, b, c) { b = b.containingGroup; if (null !== b) { a = Kj(a, b, c); if (null !== a) return a; a = c.J(b); if (null !== a) return a; } return null; } t = P.prototype; t.pd = function (a, b, c) { if (void 0 === c) return new Of(ac); var d = a.isGridSnapEnabled; a.iz || null === b.containingGroup || (d = !1); return d ? new Of(new G(Math.round(c.x), Math.round(c.y))) : new Of(c.copy()); }; function Nj(a, b, c) { null !== b.diagram && b.diagram !== a && A('Cannot share a Layer with another Diagram: ' + b + ' of ' + b.diagram); null === c ? null !== b.diagram && A('Cannot add an existing Layer to this Diagram again: ' + b) : (c.diagram !== a && A('Existing Layer must be in this Diagram: ' + c + ' not in ' + c.diagram), b === c && A('Cannot move a Layer before or after itself: ' + b)); if (b.diagram !== a) { b = b.name; a = a.Pa; c = a.count; for (var d = 0; d < c; d++) a.N(d).name === b && A( "Cannot add Layer with the name '" + b + "'; a Layer with the same name is already present in this Diagram.", ); } } t.Ql = function (a) { Nj(this, a, null); a.hb(this); var b = this.Pa, c = b.count - 1; if (!a.isTemporary) for (; 0 <= c && b.N(c).isTemporary; ) c--; b.Ib(c + 1, a); null !== this.Zb && this.ab(cf, 'layers', this, null, a, null, c + 1); this.R(); this.Xa(); }; t.Qw = function (a, b) { Nj(this, a, b); a.hb(this); var c = this.Pa, d = c.indexOf(a); 0 <= d && (c.remove(a), null !== this.Zb && this.ab(df, 'layers', this, a, null, d, null)); var e = c.count, f; for (f = 0; f < e; f++) if (c.N(f) === b) { c.Ib(f, a); break; } null !== this.Zb && this.ab(cf, 'layers', this, null, a, null, f); this.R(); 0 > d && this.Xa(); }; t.by = function (a, b) { Nj(this, a, b); a.hb(this); var c = this.Pa, d = c.indexOf(a); 0 <= d && (c.remove(a), null !== this.Zb && this.ab(df, 'layers', this, a, null, d, null)); var e = c.count, f; for (f = 0; f < e; f++) if (c.N(f) === b) { c.Ib(f + 1, a); break; } null !== this.Zb && this.ab(cf, 'layers', this, null, a, null, f + 1); this.R(); 0 > d && this.Xa(); }; t.Kz = function (a) { a.diagram !== this && A('Cannot remove a Layer from another Diagram: ' + a + ' of ' + a.diagram); if ('' !== a.name) { var b = this.Pa, c = b.indexOf(a); if (b.remove(a)) { for (b = a.Fa.copy().iterator; b.next(); ) { var d = b.value, e = d.layerName; e !== a.name ? (d.layerName = e) : (d.layerName = ''); } null !== this.Zb && this.ab(df, 'layers', this, a, null, c, null); this.R(); this.Xa(); } } }; t.Zl = function (a) { for (var b = this.layers; b.next(); ) { var c = b.value; if (c.name === a) return c; } return null; }; t.Sw = function (a) { null === this.pe && (this.pe = new E()); this.pe.add(a); this.model.rh(a); }; t.Mz = function (a) { null !== this.pe && (this.pe.remove(a), 0 === this.pe.count && (this.pe = null)); this.model.qk(a); }; t.rh = function (a) { null === this.Bf && (this.Bf = new E()); this.Bf.add(a); }; t.qk = function (a) { null !== this.Bf && (this.Bf.remove(a), 0 === this.Bf.count && (this.Bf = null)); }; t.Ks = function (a) { this.skipsUndoManager || this.model.skipsUndoManager || this.model.undoManager.gv(a); a.change !== bf && (this.isModified = !0); if (null !== this.Bf) for (var b = this.Bf, c = b.length, d = 0; d < c; d++) b.N(d)(a); }; t.ab = function (a, b, c, d, e, f, g) { void 0 === f && (f = null); void 0 === g && (g = null); var h = new $e(); h.diagram = this; h.change = a; h.propertyName = b; h.object = c; h.oldValue = d; h.oldParam = f; h.newValue = e; h.newParam = g; this.Ks(h); }; t.g = function (a, b, c, d, e) { this.ab(af, a, this, b, c, d, e); }; t.Sj = function (a, b) { if (null !== a && a.diagram === this) { var c = this.skipsModelSourceBindings; try { this.skipsModelSourceBindings = !0; var d = a.change; if (d === af) { var e = a.object; Oj(e, a.propertyName, a.J(b)); if (e instanceof Y) { var f = e.part; null !== f && f.Jb(); } this.isModified = !0; } else if (d === cf) { var g = a.object, h = a.newParam, k = a.newValue; if (g instanceof X) if ('number' === typeof h && k instanceof Y) { b ? g.xc(h) : g.Ib(h, k); var l = g.part; null !== l && l.Jb(); } else { if ('number' === typeof h && k instanceof Pj) if (b) k.isRow ? g.Bv(h) : g.zv(h); else { var m = k.isRow ? g.getRowDefinition(k.index) : g.getColumnDefinition(k.index); m.Vl(k); } } else if (g instanceof fi) { var n = !0 === a.oldParam; 'number' === typeof h && k instanceof T && (b ? ((k.isSelected = !1), (k.isHighlighted = !1), k.Jb(), g.xc(n ? h : -1, k, n)) : g.Pi(h, k, n)); } else g instanceof P ? 'number' === typeof h && k instanceof fi && (b ? this.Pa.mb(h) : (k.hb(this), this.Pa.Ib(h, k))) : A('unknown ChangedEvent.Insert object: ' + a.toString()); this.isModified = !0; } else if (d === df) { var p = a.object, q = a.oldParam, r = a.oldValue; if (p instanceof X) 'number' === typeof q && r instanceof Y ? b ? p.Ib(q, r) : p.xc(q) : 'number' === typeof q && r instanceof Pj && (b ? ((m = r.isRow ? p.getRowDefinition(r.index) : p.getColumnDefinition(r.index)), m.Vl(r)) : r.isRow ? p.Bv(q) : p.zv(q)); else if (p instanceof fi) { var u = !0 === a.newParam; 'number' === typeof q && r instanceof T && (b ? 0 > p.Fa.indexOf(r) && p.Pi(q, r, u) : ((r.isSelected = !1), (r.isHighlighted = !1), r.Jb(), p.xc(u ? q : -1, r, u))); } else p instanceof P ? 'number' === typeof q && r instanceof fi && (b ? (r.hb(this), this.Pa.Ib(q, r)) : this.Pa.mb(q)) : A('unknown ChangedEvent.Remove object: ' + a.toString()); this.isModified = !0; } else d !== bf && A('unknown ChangedEvent: ' + a.toString()); } finally { this.skipsModelSourceBindings = c; } } }; t.Aa = function (a) { return this.undoManager.Aa(a); }; t.Za = function (a) { return this.undoManager.Za(a); }; t.wf = function () { return this.undoManager.wf(); }; P.prototype.commit = function (a, b) { void 0 === b && (b = ''); var c = this.skipsUndoManager; null === b && ((this.skipsUndoManager = !0), (b = '')); this.undoManager.Aa(b); var d = !1; try { a(this), (d = !0); } finally { d ? this.undoManager.Za(b) : this.undoManager.wf(), (this.skipsUndoManager = c); } }; P.prototype.updateAllTargetBindings = function (a) { this.partManager.updateAllTargetBindings(a); }; t = P.prototype; t.wq = function () { this.partManager.wq(); }; function Qj(a, b, c) { var d = a.animationManager; if (a.ob || a.Yb) (a.Ca = c), ei(d, b, a.Ca); else if (((a.ob = !0), null === a.Da)) a.Ca = c; else { var e = a.viewportBounds.copy(), f = a.xa, g = a.wa; e.width = a.xa / b; e.height = a.wa / b; var h = a.zoomPoint.x, k = a.zoomPoint.y, l = a.contentAlignment; isNaN(h) && (l.sf() ? l.rf(jd) ? (h = 0) : l.rf(pd) && (h = f - 1) : (h = l.gb() ? l.x * (f - 1) : f / 2)); isNaN(k) && (l.sf() ? l.rf(id) ? (k = 0) : l.rf(qd) && (k = g - 1) : (k = l.gb() ? l.y * (g - 1) : g / 2)); null !== a.scaleComputation && (c = a.scaleComputation(a, c)); c < a.minScale && (c = a.minScale); c > a.maxScale && (c = a.maxScale); f = G.allocAt(a.sa.x + h / b - h / c, a.sa.y + k / b - k / c); a.position = f; G.free(f); a.Ca = c; a.lq(e, a.viewportBounds, b, !1); a.ob = !1; Si(a, !1); ei(d, b, a.Ca); a.R(); hj(a); } } t.lq = function (a, b, c, d) { if (!a.A(b)) { void 0 === d && (d = !1); d || hj(this); Pi(this); var e = this.layout; null === e || !e.isViewportSized || this.autoScale !== pi || d || (a.width === b.width && a.height === b.height) || e.B(); e = this.currentTool; !0 === this.Re && e instanceof Ua && ((this.lastInput.documentPoint = this.xt(this.lastInput.viewPoint)), tf(e, this)); this.ob || this.mx(a, b); kj(this); this.ye.scale = c; this.ye.position.x = a.x; this.ye.position.y = a.y; this.ye.bounds.assign(a); this.ye.ox = d; this.aa('ViewportBoundsChanged', this.ye, a); this.isVirtualized && this.links.each(function (a) { a.isAvoiding && a.actualBounds.Ic(b) && a.Ra(); }); } }; function kj(a, b) { void 0 === b && (b = null); var c = a.Eb; if (null !== c && c.visible) { for (var d = M.alloc(), e = 1, f = 1, g = c.Y.j, h = g.length, k = 0; k < h; k++) { var l = g[k], m = l.interval; 2 > m || (Rj(l.figure) ? (f = (f * m) / H.jx(f, m)) : (e = (e * m) / H.jx(e, m))); } g = c.gridCellSize; d.h(f * g.width, e * g.height); if (null !== b) (e = b.width), (f = b.height), (a = b.x), (g = b.y); else { b = N.alloc(); a = a.viewportBounds; b.h(a.x, a.y, a.width, a.height); if (!b.o()) { N.free(b); return; } e = b.width; f = b.height; a = b.x; g = b.y; N.free(b); } c.width = e + 2 * d.width; c.height = f + 2 * d.height; b = G.alloc(); H.Wp(a, g, 0, 0, d.width, d.height, b); b.offset(-d.width, -d.height); M.free(d); c.part.location = b; G.free(b); } } t.Qp = function () { var a = 0 < this.selection.count; a && this.aa('ChangingSelection', this.selection); Hf(this); a && this.aa('ChangedSelection', this.selection); }; function Hf(a) { a = a.selection; if (0 < a.count) { for (var b = a.Na(), c = b.length, d = 0; d < c; d++) b[d].isSelected = !1; a.ha(); a.clear(); a.freeze(); } } t.select = function (a) { null !== a && a.layer.diagram === this && (!a.isSelected || 1 < this.selection.count) && (this.aa('ChangingSelection', this.selection), Hf(this), (a.isSelected = !0), this.aa('ChangedSelection', this.selection)); }; t.Hv = function (a) { this.aa('ChangingSelection', this.selection); Hf(this); if (Ea(a)) for (var b = a.length, c = 0; c < b; c++) { var d = a[c]; d instanceof T || A('Diagram.selectCollection given something that is not a Part: ' + d); d.isSelected = !0; } else for (a = a.iterator; a.next(); ) (b = a.value), b instanceof T || A('Diagram.selectCollection given something that is not a Part: ' + b), (b.isSelected = !0); this.aa('ChangedSelection', this.selection); }; t.Lu = function () { var a = this.highlighteds; if (0 < a.count) { for (var b = a.Na(), c = b.length, d = 0; d < c; d++) b[d].isHighlighted = !1; a.ha(); a.clear(); a.freeze(); } }; t.kz = function (a) { null !== a && a.layer.diagram === this && (!a.isHighlighted || 1 < this.highlighteds.count) && (this.Lu(), (a.isHighlighted = !0)); }; t.lz = function (a) { a = new F().addAll(a); for (var b = this.highlighteds.copy().oq(a).iterator; b.next(); ) b.value.isHighlighted = !1; for (a = a.iterator; a.next(); ) (b = a.value), b instanceof T || A('Diagram.highlightCollection given something that is not a Part: ' + b), (b.isHighlighted = !0); }; t.scroll = function (a, b, c) { void 0 === c && (c = 1); var d = 'up' === b || 'down' === b, e = 0; if ('pixel' === a) e = c; else if ('line' === a) e = c * (d ? this.scrollVerticalLineChange : this.scrollHorizontalLineChange); else if ('page' === a) (a = d ? this.viewportBounds.height : this.viewportBounds.width), (a *= this.scale), 0 !== a && (e = c * Math.max(a - (d ? this.scrollVerticalLineChange : this.scrollHorizontalLineChange), 0)); else { if ('document' === a) { e = this.documentBounds; c = this.viewportBounds; d = G.alloc(); 'up' === b ? (this.position = d.h(c.x, e.y)) : 'left' === b ? (this.position = d.h(e.x, c.y)) : 'down' === b ? (this.position = d.h(c.x, e.bottom - c.height)) : 'right' === b && (this.position = d.h(e.right - c.width, c.y)); G.free(d); return; } A("scrolling unit must be 'pixel', 'line', 'page', or 'document', not: " + a); } e /= this.scale; c = this.position.copy(); 'up' === b ? (c.y = this.position.y - e) : 'down' === b ? (c.y = this.position.y + e) : 'left' === b ? (c.x = this.position.x - e) : 'right' === b ? (c.x = this.position.x + e) : A("scrolling direction must be 'up', 'down', 'left', or 'right', not: " + b); this.position = c; }; t.Gv = function (a) { var b = this.viewportBounds; b.nf(a) || ((a = a.center), (a.x -= b.width / 2), (a.y -= b.height / 2), (this.position = a)); }; t.Ju = function (a) { var b = this.viewportBounds; a = a.center; a.x -= b.width / 2; a.y -= b.height / 2; this.position = a; }; t.wt = function (a) { var b = this.tb; b.reset(); 1 !== this.Ca && b.scale(this.Ca); var c = this.sa; (0 !== c.x || 0 !== c.y) && isFinite(c.x) && isFinite(c.y) && b.translate(-c.x, -c.y); return a.copy().transform(this.tb); }; t.Xz = function (a) { var b = this.tb, c = a.x, d = a.y, e = c + a.width, f = d + a.height, g = b.m11, h = b.m12, k = b.m21, l = b.m22, m = b.dx, n = b.dy, p = c * g + d * k + m; b = c * h + d * l + n; var q = e * g + d * k + m; a = e * h + d * l + n; d = c * g + f * k + m; c = c * h + f * l + n; g = e * g + f * k + m; e = e * h + f * l + n; f = Math.min(p, q); p = Math.max(p, q); q = Math.min(b, a); b = Math.max(b, a); f = Math.min(f, d); p = Math.max(p, d); q = Math.min(q, c); b = Math.max(b, c); f = Math.min(f, g); p = Math.max(p, g); q = Math.min(q, e); b = Math.max(b, e); return new N(f, q, p - f, b - q); }; t.xt = function (a) { var b = this.tb; b.reset(); 1 !== this.Ca && b.scale(this.Ca); var c = this.sa; (0 !== c.x || 0 !== c.y) && isFinite(c.x) && isFinite(c.y) && b.translate(-c.x, -c.y); return Qb(a.copy(), this.tb); }; function Sj(a) { var b = a.isModified; a.Nw !== b && ((a.Nw = b), a.aa('Modified')); } function Tj(a) { a = si.get(a); return null !== a ? new a() : new ti(); } P.prototype.doModelChanged = function (a) { if (a.model === this.model) { var b = a.change, c = a.propertyName; if (b === bf && 'S' === c[0]) if ('StartingFirstTransaction' === c) { var d = this; a = this.toolManager; a.mouseDownTools.each(function (a) { a.hb(d); }); a.mouseMoveTools.each(function (a) { a.hb(d); }); a.mouseUpTools.each(function (a) { a.hb(d); }); this.Yb || this.he || ((this.Sk = !0), this.Xk && (this.qd = !0)); } else 'StartingUndo' === c || 'StartingRedo' === c ? ((a = this.animationManager), a.isAnimating && !this.skipsUndoManager && a.vd(), this.aa('ChangingSelection', this.selection)) : 'StartedTransaction' === c && ((a = this.animationManager), a.isAnimating && !this.skipsUndoManager && a.vd()); else if (this.ea) { this.ea = !1; try { if ('' === a.modelChange && b === bf) { if ('FinishedUndo' === c || 'FinishedRedo' === c) this.aa('ChangedSelection', this.selection), Qi(this); var e = this.animationManager; 'RolledBackTransaction' === c && e.vd(); this.Sk = !0; this.fd(); 0 === this.undoManager.transactionLevel && Sh(e); 'CommittedTransaction' === c && this.undoManager.du && (this.ge = Math.min(this.ge, this.undoManager.historyIndex - 1)); var f = a.isTransactionFinished; f && (Sj(this), this.ft.clear()); if (!this.ku && f) { this.ku = !0; var g = this; ua(function () { g.currentTool.standardMouseOver(); g.ku = !1; }, 10); } } } finally { this.ea = !0; } } } }; function Cj(a, b) { b = b.Y.j; for (var c = b.length, d = 0; d < c; d++) Uj(a, b[d]); } function Uj(a, b) { if (b instanceof Yj) { var c = b.element; if (null !== c && c instanceof HTMLImageElement) { var d = b.Lg; null !== d && (d.Zk instanceof Event && null !== b.Cc && b.Cc(b, d.Zk), !0 === d.Dr && (null !== b.ff && b.ff(b, d.su), null !== b.diagram && b.diagram.mu.add(b))); c = c.getAttribute('src'); d = a.Dj.J(c); if (null === d) (d = []), d.push(b), a.Dj.add(c, d); else { for (a = 0; a < d.length; a++) if (d[a] === b) return; d.push(b); } } } } function ck(a, b) { if (b instanceof Yj) { var c = b.element; if (null !== c && c instanceof HTMLImageElement) { c = c.getAttribute('src'); var d = a.Dj.J(c); if (null !== d) for (var e = 0; e < d.length; e++) if (d[e] === b) { d.splice(e, 1); 0 === d.length && (a.Dj.remove(c), dk(c)); break; } } } } P.prototype.ud = function () { this.partManager.ud(); }; P.prototype.Lp = function (a, b) { this.Ak.Lp(a, b); }; P.prototype.Mp = function (a, b) { this.Ak.Mp(a, b); }; P.prototype.findPartForKey = function (a) { return this.partManager.findPartForKey(a); }; t = P.prototype; t.Hb = function (a) { return this.partManager.Hb(a); }; t.vc = function (a) { return this.partManager.vc(a); }; t.Gi = function (a) { return this.partManager.Gi(a); }; t.uc = function (a) { return this.partManager.uc(a); }; t.Rs = function (a) { for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c]; return this.partManager.Rs.apply(this.partManager, b instanceof Array ? b : ca(ba(b))); }; t.Qs = function (a) { for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c]; return this.partManager.Qs.apply(this.partManager, b instanceof Array ? b : ca(ba(b))); }; function Vi(a, b) { a.Rg = !1; var c = a.un; c.A(b) || ((b = b.I()), (a.un = b), Si(a, !1), a.aa('DocumentBoundsChanged', null, c.copy()), hj(a)); } t.Ry = function () { for (var a = new F(), b = this.nodes; b.next(); ) { var c = b.value; c.isTopLevel && a.add(c); } for (b = this.links; b.next(); ) (c = b.value), c.isTopLevel && a.add(c); return a.iterator; }; t.Qy = function () { return this.zi.iterator; }; t.wz = function (a) { Qi(this); a && ek(this, !0); this.Sk = !0; pg(this); }; function ek(a, b) { for (var c = a.zi.iterator; c.next(); ) fk(a, c.value, b); null !== a.layout && (b ? (a.layout.isValidLayout = !1) : a.layout.B()); } function fk(a, b, c) { if (null !== b) { for (var d = b.rl.iterator; d.next(); ) fk(a, d.value, c); null !== b.layout && (c ? (b.layout.isValidLayout = !1) : b.layout.B()); } } function lj(a, b) { if (a.Cg && !a.Pt) { var c = a.ea; a.ea = !0; var d = a.undoManager.transactionLevel, e = a.layout; try { 0 === d && a.Aa('Layout'); var f = a.animationManager; 1 >= d && !f.isAnimating && !f.rb && (b || f.Ti('Layout')); a.Cg = !1; for (var g = a.zi.iterator; g.next(); ) gk(a, g.value, b, d); e.isValidLayout || (!b || e.isRealtime || null === e.isRealtime || 0 === d ? (e.doLayout(a), Qi(a), (e.isValidLayout = !0)) : (a.Cg = !0)); } finally { 0 === d && a.Za('Layout'), (a.Cg = !e.isValidLayout), (a.ea = c); } } } function gk(a, b, c, d) { if (null !== b) { for (var e = b.rl.iterator; e.next(); ) gk(a, e.value, c, d); e = b.layout; null === e || e.isValidLayout || (!c || e.isRealtime || 0 === d ? ((b.nk = !b.location.o()), e.doLayout(b), b.B(32), nj(a, b), (e.isValidLayout = !0)) : (a.Cg = !0)); } } t.Xy = function () { for (var a = new E(), b = this.nodes; b.next(); ) { var c = b.value; c.isTopLevel && null === c.Ji() && a.add(c); } return a.iterator; }; function qi(a) { function b(a) { var b = a.toLowerCase(), e = new E(); c.add(a, e); c.add(b, e); d.add(a, a); d.add(b, a); } var c = new Lb(), d = new Lb(); b('AnimationStarting'); b('AnimationFinished'); b('BackgroundSingleClicked'); b('BackgroundDoubleClicked'); b('BackgroundContextClicked'); b('ClipboardChanged'); b('ClipboardPasted'); b('DocumentBoundsChanged'); b('ExternalObjectsDropped'); b('GainedFocus'); b('InitialLayoutCompleted'); b('LayoutCompleted'); b('LinkDrawn'); b('LinkRelinked'); b('LinkReshaped'); b('LostFocus'); b('Modified'); b('ObjectSingleClicked'); b('ObjectDoubleClicked'); b('ObjectContextClicked'); b('PartCreated'); b('PartResized'); b('PartRotated'); b('SelectionMoved'); b('SelectionCopied'); b('SelectionDeleting'); b('SelectionDeleted'); b('SelectionGrouped'); b('SelectionUngrouped'); b('ChangingSelection'); b('ChangedSelection'); b('SubGraphCollapsed'); b('SubGraphExpanded'); b('TextEdited'); b('TreeCollapsed'); b('TreeExpanded'); b('ViewportBoundsChanged'); b('InvalidateDraw'); a.Rt = c; a.Qt = d; } function wj(a, b) { var c = a.Qt.J(b); return null !== c ? c : a.Qt.J(b.toLowerCase()); } function hk(a, b) { var c = a.Rt.J(b); if (null !== c) return c; c = a.Rt.J(b.toLowerCase()); if (null !== c) return c; A('Unknown DiagramEvent name: ' + b); return null; } t.Oj = function (a, b) { a = hk(this, a); null !== a && a.add(b); }; t.mm = function (a, b) { a = hk(this, a); null !== a && a.remove(b); }; t.aa = function (a, b, c) { var d = hk(this, a), e = new Ze(); e.diagram = this; a = wj(this, a); null !== a && (e.name = a); void 0 !== b && (e.subject = b); void 0 !== c && (e.parameter = c); b = d.length; if (1 === b) d.N(0)(e); else if (0 !== b) for (d = d.Na(), c = 0; c < b; c++) (0, d[c])(e); }; function ik(a) { if (a.animationManager.isAnimating) return !1; var b = a.currentTool; return b === a.toolManager.findTool('Dragging') ? !a.xp || b.isComplexRoutingRealtime : !0; } t.fk = function (a, b) { void 0 === b && (b = null); return jk(this, !1, null, b).fk(a.x, a.y, a.width, a.height); }; P.prototype.computeOccupiedArea = function () { return this.isVirtualized ? this.viewportBounds.copy() : this.Rg ? Ri(this) : this.documentBounds.copy(); }; function jk(a, b, c, d) { null === a.Nb && (a.Nb = new kk()); if (a.Nb.$s || a.Nb.group !== c || a.Nb.Jx !== d) { if (null === c) { b = a.computeOccupiedArea(); b.Uc(100, 100); a.Nb.initialize(b); b = N.alloc(); for (var e = a.nodes; e.next(); ) { var f = e.value, g = f.layer; null !== g && g.visible && !g.isTemporary && lk(a, f, d, b); } N.free(b); } else { 0 < c.memberParts.count && ((b = a.computePartsBounds(c.memberParts, !1)), b.Uc(20, 20), a.Nb.initialize(b)); b = N.alloc(); for (e = c.memberParts; e.next(); ) (f = e.value), f instanceof V && lk(a, f, d, b); N.free(b); } a.Nb.group = c; a.Nb.Jx = d; a.Nb.$s = !1; } else b && mk(a.Nb); return a.Nb; } function lk(a, b, c, d) { if (b !== c) if (b.isVisible() && b.avoidable && !b.isLinkLabel) { var e = b.getAvoidableRect(d), f = a.Nb.Ul; c = a.Nb.Tl; d = e.x + e.width; b = e.y + e.height; for (var g = e.x; g < d; g += f) { for (var h = e.y; h < b; h += c) nk(a.Nb, g, h); nk(a.Nb, g, b); } for (e = e.y; e < b; e += c) nk(a.Nb, d, e); nk(a.Nb, d, b); } else if (b instanceof ig) for (b = b.memberParts; b.next(); ) (e = b.value), e instanceof V && lk(a, e, c, d); } function ok(a, b) { null !== a.Nb && !a.Nb.$s && (void 0 === b && (b = null), null === b || (b.avoidable && !b.isLinkLabel)) && (a.Nb.$s = !0); } t = P.prototype; t.Ns = function (a) { this.Mq.assign(a); pk(this, this.Mq).Qa(this.position) ? this.xf() : qk(this); }; function qk(a) { -1 === a.Ck && (a.Ck = ua(function () { if (-1 !== a.Ck && (a.xf(), null !== a.lastInput.event)) { var b = pk(a, a.Mq); b.Qa(a.position) || ((a.position = b), (a.lastInput.documentPoint = a.xt(a.Mq)), a.doMouseMove(), (a.Rg = !0), Vi(a, a.documentBounds.copy().Jc(a.computeBounds())), (a.nc = !0), a.fd(), qk(a)); } }, a.Sm)); } t.xf = function () { -1 !== this.Ck && (w.clearTimeout(this.Ck), (this.Ck = -1)); }; function pk(a, b) { var c = a.position, d = a.Tm; if (0 >= d.top && 0 >= d.left && 0 >= d.right && 0 >= d.bottom) return c; var e = a.viewportBounds, f = a.scale; e = N.allocAt(0, 0, e.width * f, e.height * f); var g = G.allocAt(0, 0); if (b.x >= e.x && b.x < e.x + d.left) { var h = Math.max(a.scrollHorizontalLineChange, 1); h |= 0; g.x -= h; b.x < e.x + d.left / 2 && (g.x -= h); b.x < e.x + d.left / 4 && (g.x -= 4 * h); } else b.x <= e.x + e.width && b.x > e.x + e.width - d.right && ((h = Math.max(a.scrollHorizontalLineChange, 1)), (h |= 0), (g.x += h), b.x > e.x + e.width - d.right / 2 && (g.x += h), b.x > e.x + e.width - d.right / 4 && (g.x += 4 * h)); b.y >= e.y && b.y < e.y + d.top ? ((a = Math.max(a.scrollVerticalLineChange, 1)), (a |= 0), (g.y -= a), b.y < e.y + d.top / 2 && (g.y -= a), b.y < e.y + d.top / 4 && (g.y -= 4 * a)) : b.y <= e.y + e.height && b.y > e.y + e.height - d.bottom && ((a = Math.max(a.scrollVerticalLineChange, 1)), (a |= 0), (g.y += a), b.y > e.y + e.height - d.bottom / 2 && (g.y += a), b.y > e.y + e.height - d.bottom / 4 && (g.y += 4 * a)); g.Qa(ac) || (c = new G(c.x + g.x / f, c.y + g.y / f)); N.free(e); G.free(g); return c; } t.ht = function () { return null; }; t.nv = function () { return null; }; t.iy = function (a, b) { this.pu.add(a, b); }; function rk(a, b, c) { function d() { var a = +new Date(); f = !0; for (g.reset(); g.next(); ) if (!g.value[0].nl) { f = !1; break; } f || a - l > k ? b(c, e, h) : w.requestAnimationFrame(d); } for (var e = c.callback, f = !0, g = a.Dj.iterator; g.next(); ) if (!g.value[0].nl) { f = !1; break; } if ('function' !== typeof e || f) return b(c, e, a); var h = a, k = c.callbackTimeout || 300, l = +new Date(); w.requestAnimationFrame(function () { d(); }); return null; } t.yz = function (a) { if (!th) return null; void 0 === a && (a = new tb()); a.returnType = 'Image'; return this.px(a); }; t.px = function (a) { void 0 === a && (a = new tb()); return rk(this, this.zz, a); }; t.zz = function (a, b, c) { var d = sk(c, a, 'canvas', null); if (null === d) return null; c = d.W.canvas; var e = null; if (null !== c) switch (((e = a.returnType), void 0 === e ? (e = 'string') : (e = e.toLowerCase()), e)) { case 'imagedata': e = d.getImageData(0, 0, c.width, c.height); break; case 'image': d = (a.document || document).createElement('img'); d.src = c.toDataURL(a.type, a.details); e = d; break; case 'blob': 'function' !== typeof b && A( 'Error: Diagram.makeImageData called with "returnType: toBlob", but no required "callback" function property defined.', ); if ('function' === typeof c.toBlob) return c.toBlob(b, a.type, a.details), 'toBlob'; if ('function' === typeof c.msToBlob) return b(c.msToBlob()), 'msToBlob'; b(null); return null; default: e = c.toDataURL(a.type, a.details); } return 'function' === typeof b ? (b(e), null) : e; }; function sk(a, b, c, d) { a.animationManager.vd(); a.fd(); if (null === a.Da) return null; 'object' !== typeof b && A('properties argument must be an Object.'); var e = b.size || null, f = b.scale || null; void 0 !== b.scale && isNaN(b.scale) && (f = 'NaN'); var g = b.maxSize; void 0 === b.maxSize && (g = 'SVG' === c ? new M(Infinity, Infinity) : new M(2e3, 2e3)); var h = b.position || null, k = b.parts || null, l = void 0 === b.padding ? 1 : b.padding, m = b.background || null, n = b.omitTemporary; void 0 === n && (n = !0); var p = b.document || document, q = b.elementFinished || null, r = b.showTemporary; void 0 === r && (r = !n); b = b.showGrid; void 0 === b && (b = r); null !== e && isNaN(e.width) && isNaN(e.height) && (e = null); 'number' === typeof l ? (l = new Ic(l)) : l instanceof Ic || A('MakeImage padding must be a Margin or a number.'); l.left = Math.max(l.left, 0); l.right = Math.max(l.right, 0); l.top = Math.max(l.top, 0); l.bottom = Math.max(l.bottom, 0); a.Yc.Rc(!0); n = new tk(null, p); var u = n.context; if (!(e || f || k || h)) { n.width = a.xa + Math.ceil(l.left + l.right); n.height = a.wa + Math.ceil(l.top + l.bottom); if ('SVG' === c) { if (null === d) return null; d.resize(n.width, n.height, n.width, n.height); d.ownerDocument = p; d.Tp = q; uj(a, d.context, l, new M(n.width, n.height), a.Ca, a.sa, k, m, r, b); return d.context; } a.wn = !1; uj(a, u, l, new M(n.width, n.height), a.Ca, a.sa, k, m, r, b); a.wn = !0; return n.context; } var x = a.dr, v = a.documentBounds.copy(); v.Pv(a.eb); if (r) for (var z = a.Pa.j, y = z.length, B = 0; B < y; B++) { var C = z[B]; if (C.visible && C.isTemporary) { C = C.Fa.j; for (var I = C.length, L = 0; L < I; L++) { var J = C[L]; J.isInDocumentBounds && J.isVisible() && ((J = J.actualBounds), J.o() && v.Jc(J)); } } } z = new G(v.x, v.y); if (null !== k) { y = !0; B = k.iterator; for (B.reset(); B.next(); ) if ( ((C = B.value), C instanceof T && ((I = C.layer), (null === I || I.visible) && (null === I || r || !I.isTemporary) && C.isVisible() && ((C = C.actualBounds), C.o()))) ) if (y) { y = !1; var U = C.copy(); } else U.Jc(C); y && (U = new N(0, 0, 0, 0)); v.width = U.width; v.height = U.height; z.x = U.x; z.y = U.y; } null !== h && h.o() && ((z = h), f || (f = x)); U = h = 0; null !== l && ((h = l.left + l.right), (U = l.top + l.bottom)); y = B = 0; null !== e && ((B = e.width), (y = e.height), isFinite(B) && (B = Math.max(0, B - h)), isFinite(y) && (y = Math.max(0, y - U))); null !== e && null !== f ? ('NaN' === f && (f = x), e.o() ? ((e = B), (v = y)) : isNaN(y) ? ((e = B), (v = v.height * f)) : ((e = v.width * f), (v = y))) : null !== e ? e.o() ? ((f = Math.min(B / v.width, y / v.height)), (e = B), (v = y)) : isNaN(y) ? ((f = B / v.width), (e = B), (v = v.height * f)) : ((f = y / v.height), (e = v.width * f), (v = y)) : null !== f ? 'NaN' === f && g.o() ? ((f = Math.min((g.width - h) / v.width, (g.height - U) / v.height)), f > x ? ((f = x), (e = v.width), (v = v.height)) : ((e = g.width), (v = g.height))) : ((e = v.width * f), (v = v.height * f)) : ((f = x), (e = v.width), (v = v.height)); null !== l ? ((e += h), (v += U)) : (l = new Ic(0)); null !== g && ((x = g.width), (g = g.height), isNaN(x) && (x = 2e3), isNaN(g) && (g = 2e3), isFinite(x) && (e = Math.min(e, x)), isFinite(g) && (v = Math.min(v, g))); n.width = Math.ceil(e); n.height = Math.ceil(v); if ('SVG' === c) { if (null === d) return null; d.resize(n.width, n.height, n.width, n.height); d.ownerDocument = p; d.Tp = q; uj(a, d.context, l, new M(Math.ceil(e), Math.ceil(v)), f, z, k, m, r, b); return d.context; } a.wn = !1; uj(a, u, l, new M(Math.ceil(e), Math.ceil(v)), f, z, k, m, r, b); a.wn = !0; return n.context; } pa.Object.defineProperties(P.prototype, { div: { get: function () { return this.Ia; }, set: function (a) { if (this.Ia !== a) { Wa = []; var b = this.Ia; null !== b ? ((b.C = void 0), (b.innerHTML = ''), null !== this.Da && ((b = this.Da.Ga), this.removeEventListener(b, 'touchstart', this.Uv, !1), this.removeEventListener(b, 'touchmove', this.Tv, !1), this.removeEventListener(b, 'touchend', this.Sv, !1), this.Da.ax()), (b = this.toolManager), null !== b && (b.mouseDownTools.each(function (a) { a.cancelWaitAfter(); }), b.mouseMoveTools.each(function (a) { a.cancelWaitAfter(); }), b.mouseUpTools.each(function (a) { a.cancelWaitAfter(); })), b.cancelWaitAfter(), this.currentTool.doCancel(), (this.Yc = this.Da = null), this.removeEventListener(w, 'resize', this.$v, !1), this.removeEventListener(w, 'mousemove', this.jk, !0), this.removeEventListener(w, 'mousedown', this.ik, !0), this.removeEventListener(w, 'mouseup', this.lk, !0), this.removeEventListener(w, 'wheel', this.mk, !0), this.removeEventListener(w, 'mouseout', this.kk, !0), lf === this && (lf = null)) : (this.he = !1); this.Ia = null; if (null !== a) { if ((b = a.C)) b.div = null; Ai(this, a); this.uf(); } } }, }, Uw: { get: function () { return this.vo; }, }, kv: { get: function () { return this.ob; }, set: function (a) { this.ob = a; }, }, Qi: { get: function () { return this.he; }, }, draggedLink: { get: function () { return this.gr; }, set: function (a) { this.gr !== a && ((this.gr = a), null !== a && ((this.cs = a.fromPort), (this.ds = a.toPort))); }, }, tx: { get: function () { return this.cs; }, set: function (a) { this.cs = a; }, }, ux: { get: function () { return this.ds; }, set: function (a) { this.ds = a; }, }, animationManager: { get: function () { return this.Ak; }, }, undoManager: { get: function () { return this.Zb.undoManager; }, }, skipsUndoManager: { get: function () { return this.eh; }, set: function (a) { this.eh = a; this.Zb.skipsUndoManager = a; }, }, delaysLayout: { get: function () { return this.Pt; }, set: function (a) { this.Pt = a; }, }, validCycle: { get: function () { return this.Fs; }, set: function (a) { var b = this.Fs; b !== a && ((this.Fs = a), this.g('validCycle', b, a)); }, }, layers: { get: function () { return this.Pa.iterator; }, }, isModelReadOnly: { get: function () { var a = this.Zb; return null === a ? !1 : a.isReadOnly; }, set: function (a) { var b = this.Zb; null !== b && (b.isReadOnly = a); }, }, isReadOnly: { get: function () { return this.Of; }, set: function (a) { var b = this.Of; b !== a && ((this.Of = a), this.g('isReadOnly', b, a)); }, }, isEnabled: { get: function () { return this.Dc; }, set: function (a) { var b = this.Dc; b !== a && ((this.Dc = a), this.g('isEnabled', b, a)); }, }, allowClipboard: { get: function () { return this.Dq; }, set: function (a) { var b = this.Dq; b !== a && ((this.Dq = a), this.g('allowClipboard', b, a)); }, }, allowCopy: { get: function () { return this.Fh; }, set: function (a) { var b = this.Fh; b !== a && ((this.Fh = a), this.g('allowCopy', b, a)); }, }, allowDelete: { get: function () { return this.Gh; }, set: function (a) { var b = this.Gh; b !== a && ((this.Gh = a), this.g('allowDelete', b, a)); }, }, allowDragOut: { get: function () { return this.Eq; }, set: function (a) { var b = this.Eq; b !== a && ((this.Eq = a), this.g('allowDragOut', b, a)); }, }, allowDrop: { get: function () { return this.Fq; }, set: function (a) { var b = this.Fq; b !== a && ((this.Fq = a), this.g('allowDrop', b, a)); }, }, allowTextEdit: { get: function () { return this.Ph; }, set: function (a) { var b = this.Ph; b !== a && ((this.Ph = a), this.g('allowTextEdit', b, a)); }, }, allowGroup: { get: function () { return this.Hh; }, set: function (a) { var b = this.Hh; b !== a && ((this.Hh = a), this.g('allowGroup', b, a)); }, }, allowUngroup: { get: function () { return this.Qh; }, set: function (a) { var b = this.Qh; b !== a && ((this.Qh = a), this.g('allowUngroup', b, a)); }, }, allowInsert: { get: function () { return this.Hq; }, set: function (a) { var b = this.Hq; b !== a && ((this.Hq = a), this.g('allowInsert', b, a)); }, }, allowLink: { get: function () { return this.Ih; }, set: function (a) { var b = this.Ih; b !== a && ((this.Ih = a), this.g('allowLink', b, a)); }, }, allowRelink: { get: function () { return this.Kh; }, set: function (a) { var b = this.Kh; b !== a && ((this.Kh = a), this.g('allowRelink', b, a)); }, }, allowMove: { get: function () { return this.Jh; }, set: function (a) { var b = this.Jh; b !== a && ((this.Jh = a), this.g('allowMove', b, a)); }, }, allowReshape: { get: function () { return this.Lh; }, set: function (a) { var b = this.Lh; b !== a && ((this.Lh = a), this.g('allowReshape', b, a)); }, }, allowResize: { get: function () { return this.Mh; }, set: function (a) { var b = this.Mh; b !== a && ((this.Mh = a), this.g('allowResize', b, a)); }, }, allowRotate: { get: function () { return this.Nh; }, set: function (a) { var b = this.Nh; b !== a && ((this.Nh = a), this.g('allowRotate', b, a)); }, }, allowSelect: { get: function () { return this.Oh; }, set: function (a) { var b = this.Oh; b !== a && ((this.Oh = a), this.g('allowSelect', b, a)); }, }, allowUndo: { get: function () { return this.Iq; }, set: function (a) { var b = this.Iq; b !== a && ((this.Iq = a), this.g('allowUndo', b, a)); }, }, allowZoom: { get: function () { return this.Kq; }, set: function (a) { var b = this.Kq; b !== a && ((this.Kq = a), this.g('allowZoom', b, a)); }, }, hasVerticalScrollbar: { get: function () { return this.wr; }, set: function (a) { var b = this.wr; b !== a && ((this.wr = a), hj(this), this.R(), this.g('hasVerticalScrollbar', b, a), Si(this, !1)); }, }, hasHorizontalScrollbar: { get: function () { return this.vr; }, set: function (a) { var b = this.vr; b !== a && ((this.vr = a), hj(this), this.R(), this.g('hasHorizontalScrollbar', b, a), Si(this, !1)); }, }, allowHorizontalScroll: { get: function () { return this.Gq; }, set: function (a) { var b = this.Gq; b !== a && ((this.Gq = a), this.g('allowHorizontalScroll', b, a), Si(this, !1)); }, }, allowVerticalScroll: { get: function () { return this.Jq; }, set: function (a) { var b = this.Jq; b !== a && ((this.Jq = a), this.g('allowVerticalScroll', b, a), Si(this, !1)); }, }, scrollHorizontalLineChange: { get: function () { return this.ps; }, set: function (a) { var b = this.ps; b !== a && (0 > a && ya(a, '>= 0', P, 'scrollHorizontalLineChange'), (this.ps = a), this.g('scrollHorizontalLineChange', b, a)); }, }, scrollVerticalLineChange: { get: function () { return this.rs; }, set: function (a) { var b = this.rs; b !== a && (0 > a && ya(a, '>= 0', P, 'scrollVerticalLineChange'), (this.rs = a), this.g('scrollVerticalLineChange', b, a)); }, }, lastInput: { get: function () { return this.rj; }, set: function (a) { this.rj = a; }, }, firstInput: { get: function () { return this.Yh; }, set: function (a) { this.Yh = a; }, }, currentCursor: { get: function () { return this.Xq; }, set: function (a) { '' === a && (a = this.pn); if (this.Xq !== a) { var b = this.Da, c = this.Ia; if (null !== b) { this.Xq = a; var d = b.style.cursor; b.style.cursor = a; c.style.cursor = a; b.style.cursor === d && ((b.style.cursor = '-webkit-' + a), (c.style.cursor = '-webkit-' + a), b.style.cursor === d && ((b.style.cursor = '-moz-' + a), (c.style.cursor = '-moz-' + a), b.style.cursor === d && ((b.style.cursor = a), (c.style.cursor = a)))); } } }, }, defaultCursor: { get: function () { return this.pn; }, set: function (a) { '' === a && (a = 'auto'); var b = this.pn; b !== a && ((this.pn = a), this.g('defaultCursor', b, a)); }, }, click: { get: function () { return this.Cf; }, set: function (a) { var b = this.Cf; b !== a && ((this.Cf = a), this.g('click', b, a)); }, }, doubleClick: { get: function () { return this.Hf; }, set: function (a) { var b = this.Hf; b !== a && ((this.Hf = a), this.g('doubleClick', b, a)); }, }, contextClick: { get: function () { return this.Df; }, set: function (a) { var b = this.Df; b !== a && ((this.Df = a), this.g('contextClick', b, a)); }, }, mouseOver: { get: function () { return this.Yf; }, set: function (a) { var b = this.Yf; b !== a && ((this.Yf = a), this.g('mouseOver', b, a)); }, }, mouseHover: { get: function () { return this.Wf; }, set: function (a) { var b = this.Wf; b !== a && ((this.Wf = a), this.g('mouseHover', b, a)); }, }, mouseHold: { get: function () { return this.Vf; }, set: function (a) { var b = this.Vf; b !== a && ((this.Vf = a), this.g('mouseHold', b, a)); }, }, mouseDragOver: { get: function () { return this.Wr; }, set: function (a) { var b = this.Wr; b !== a && ((this.Wr = a), this.g('mouseDragOver', b, a)); }, }, mouseDrop: { get: function () { return this.Tf; }, set: function (a) { var b = this.Tf; b !== a && ((this.Tf = a), this.g('mouseDrop', b, a)); }, }, handlesDragDropForTopLevelParts: { get: function () { return this.ur; }, set: function (a) { var b = this.ur; b !== a && ((this.ur = a), this.g('handlesDragDropForTopLevelParts', b, a)); }, }, mouseEnter: { get: function () { return this.Uf; }, set: function (a) { var b = this.Uf; b !== a && ((this.Uf = a), this.g('mouseEnter', b, a)); }, }, mouseLeave: { get: function () { return this.Xf; }, set: function (a) { var b = this.Xf; b !== a && ((this.Xf = a), this.g('mouseLeave', b, a)); }, }, toolTip: { get: function () { return this.jg; }, set: function (a) { var b = this.jg; b !== a && ((this.jg = a), this.g('toolTip', b, a)); }, }, contextMenu: { get: function () { return this.Ef; }, set: function (a) { var b = this.Ef; b !== a && ((this.Ef = a), this.g('contextMenu', b, a)); }, }, commandHandler: { get: function () { return this.K; }, set: function (a) { this.K !== a && ((this.K = a), a.hb(this)); }, }, toolManager: { get: function () { return this.Ub; }, set: function (a) { this.Ub !== a && ((this.Ub = a), a.hb(this)); }, }, defaultTool: { get: function () { return this.La; }, set: function (a) { var b = this.La; b !== a && ((this.La = a), a.hb(this), this.currentTool === b && (this.currentTool = a)); }, }, currentTool: { get: function () { return this.ba; }, set: function (a) { var b = this.ba; null !== b && (b.isActive && b.doDeactivate(), b.cancelWaitAfter(), b.doStop()); null === a && (a = this.defaultTool); null !== a && ((this.ba = a), a.hb(this), a.doStart()); }, }, selection: { get: function () { return this.Bq; }, }, maxSelectionCount: { get: function () { return this.Sr; }, set: function (a) { var b = this.Sr; if (b !== a) if (0 <= a && !isNaN(a)) { if ( ((this.Sr = a), this.g('maxSelectionCount', b, a), !this.undoManager.isUndoingRedoing && ((a = this.selection.count - a), 0 < a)) ) { this.aa('ChangingSelection', this.selection); b = this.selection.Na(); for (var c = 0; c < a; c++) b[c].isSelected = !1; this.aa('ChangedSelection', this.selection); } } else ya(a, '>= 0', P, 'maxSelectionCount'); }, }, nodeSelectionAdornmentTemplate: { get: function () { return this.Zr; }, set: function (a) { var b = this.Zr; b !== a && ((this.Zr = a), this.g('nodeSelectionAdornmentTemplate', b, a)); }, }, groupSelectionAdornmentTemplate: { get: function () { return this.sr; }, set: function (a) { var b = this.sr; b !== a && ((this.sr = a), this.g('groupSelectionAdornmentTemplate', b, a)); }, }, linkSelectionAdornmentTemplate: { get: function () { return this.Or; }, set: function (a) { var b = this.Or; b !== a && ((this.Or = a), this.g('linkSelectionAdornmentTemplate', b, a)); }, }, highlighteds: { get: function () { return this.zq; }, }, isModified: { get: function () { var a = this.undoManager; return a.isEnabled ? null !== a.currentTransaction ? !0 : this.u && this.ge !== a.historyIndex : this.u; }, set: function (a) { if (this.u !== a) { this.u = a; var b = this.undoManager; !a && b.isEnabled && (this.ge = b.historyIndex); a || Sj(this); } }, }, model: { get: function () { return this.Zb; }, set: function (a) { var b = this.Zb; if (b !== a) { this.currentTool.doCancel(); null !== b && b.undoManager !== a.undoManager && b.undoManager.isInTransaction && A('Do not replace a Diagram.model while a transaction is in progress.'); Di(this, !0); this.he = !1; this.Xk = !0; this.ge = -2; this.qd = !1; var c = this.Yb; this.Yb = !0; this.animationManager.Ti('Model'); null !== b && (null !== this.pe && this.pe.each(function (a) { b.qk(a); }), b.qk(this.Cm)); this.Zb = a; this.partManager = Tj(this.Zb.constructor.type); a.rh(this.zg); this.partManager.addAllModeledParts(); a.qk(this.zg); a.rh(this.Cm); null !== this.pe && this.pe.each(function (b) { a.rh(b); }); this.Yb = c; this.ob || this.R(); null !== b && a.undoManager.copyProperties(b.undoManager); } }, }, ea: { get: function () { return this.Vc; }, set: function (a) { this.Vc = a; }, }, ft: { get: function () { return this.Aq; }, }, skipsModelSourceBindings: { get: function () { return this.Dh; }, set: function (a) { this.Dh = a; }, }, sk: { get: function () { return this.wu; }, set: function (a) { this.wu = a; }, }, nodeTemplate: { get: function () { return this.Zf.J(''); }, set: function (a) { var b = this.Zf.J(''); b !== a && (this.Zf.add('', a), this.g('nodeTemplate', b, a), this.undoManager.isUndoingRedoing || this.ud()); }, }, nodeTemplateMap: { get: function () { return this.Zf; }, set: function (a) { var b = this.Zf; b !== a && ((this.Zf = a), this.g('nodeTemplateMap', b, a), this.undoManager.isUndoingRedoing || this.ud()); }, }, groupTemplate: { get: function () { return this.Zh.J(''); }, set: function (a) { var b = this.Zh.J(''); b !== a && (this.Zh.add('', a), this.g('groupTemplate', b, a), this.undoManager.isUndoingRedoing || this.ud()); }, }, groupTemplateMap: { get: function () { return this.Zh; }, set: function (a) { var b = this.Zh; b !== a && ((this.Zh = a), this.g('groupTemplateMap', b, a), this.undoManager.isUndoingRedoing || this.ud()); }, }, linkTemplate: { get: function () { return this.Ug.J(''); }, set: function (a) { var b = this.Ug.J(''); b !== a && (this.Ug.add('', a), this.g('linkTemplate', b, a), this.undoManager.isUndoingRedoing || this.ud()); }, }, linkTemplateMap: { get: function () { return this.Ug; }, set: function (a) { var b = this.Ug; b !== a && ((this.Ug = a), this.g('linkTemplateMap', b, a), this.undoManager.isUndoingRedoing || this.ud()); }, }, isMouseOverDiagram: { get: function () { return this.Re; }, set: function (a) { this.Re = a; }, }, isMouseCaptured: { get: function () { return this.Kc; }, set: function (a) { var b = this.Da; null !== b && ((b = b.Ga), b instanceof SVGElement || (a ? ((this.lastInput.bubbles = !1), this.Lq ? (this.removeEventListener(b, 'pointermove', this.jm, !1), this.removeEventListener(b, 'pointerdown', this.im, !1), this.removeEventListener(b, 'pointerup', this.lm, !1), this.removeEventListener(b, 'pointerout', this.km, !1), this.addEventListener(w, 'pointermove', this.jm, !0), this.addEventListener(w, 'pointerdown', this.im, !0), this.addEventListener(w, 'pointerup', this.lm, !0), this.addEventListener(w, 'pointerout', this.km, !0)) : (this.removeEventListener(b, 'mousemove', this.jk, !1), this.removeEventListener(b, 'mousedown', this.ik, !1), this.removeEventListener(b, 'mouseup', this.lk, !1), this.removeEventListener(b, 'mouseout', this.kk, !1), this.addEventListener(w, 'mousemove', this.jk, !0), this.addEventListener(w, 'mousedown', this.ik, !0), this.addEventListener(w, 'mouseup', this.lk, !0), this.addEventListener(w, 'mouseout', this.kk, !0)), this.removeEventListener(b, 'wheel', this.mk, !1), this.addEventListener(w, 'wheel', this.mk, !0), this.addEventListener(w, 'selectstart', this.preventDefault, !1)) : (this.Lq ? (this.removeEventListener(w, 'pointermove', this.jm, !0), this.removeEventListener(w, 'pointerdown', this.im, !0), this.removeEventListener(w, 'pointerup', this.lm, !0), this.removeEventListener(w, 'pointerout', this.km, !0), this.addEventListener(b, 'pointermove', this.jm, !1), this.addEventListener(b, 'pointerdown', this.im, !1), this.addEventListener(b, 'pointerup', this.lm, !1), this.addEventListener(b, 'pointerout', this.km, !1)) : (this.removeEventListener(w, 'mousemove', this.jk, !0), this.removeEventListener(w, 'mousedown', this.ik, !0), this.removeEventListener(w, 'mouseup', this.lk, !0), this.removeEventListener(w, 'mouseout', this.kk, !0), this.addEventListener(b, 'mousemove', this.jk, !1), this.addEventListener(b, 'mousedown', this.ik, !1), this.addEventListener(b, 'mouseup', this.lk, !1), this.addEventListener(b, 'mouseout', this.kk, !1)), this.removeEventListener(w, 'wheel', this.mk, !0), this.removeEventListener(w, 'selectstart', this.preventDefault, !1), this.addEventListener(b, 'wheel', this.mk, !1)), (this.Kc = a))); }, }, position: { get: function () { return this.sa; }, set: function (a) { var b = G.alloc().assign(this.sa); if (!b.A(a)) { var c = this.viewportBounds.copy(); this.sa.assign(a); this.ob || (null === this.Da && !this.Gp.o()) || ((this.ob = !0), (a = this.scale), Ui(this, this.un, this.xa / a, this.wa / a, this.dj, !1), (this.ob = !1)); di(this.animationManager, b, this.sa); this.ob || this.lq(c, this.viewportBounds, this.Ca, !1); } G.free(b); }, }, initialPosition: { get: function () { return this.yr; }, set: function (a) { this.yr.A(a) || (this.yr = a.I()); }, }, initialScale: { get: function () { return this.zr; }, set: function (a) { this.zr !== a && (this.zr = a); }, }, grid: { get: function () { null === this.Eb && Li(this); return this.Eb; }, set: function (a) { var b = this.Eb; if (b !== a) { null === b && (Li(this), (b = this.Eb)); a.type !== X.Grid && A('Diagram.grid must be a Panel of type Panel.Grid'); var c = b.panel; null !== c && c.remove(b); this.Eb = a; a.name = 'GRID'; null !== c && c.add(a); kj(this); this.R(); this.g('grid', b, a); } }, }, viewportBounds: { get: function () { var a = this.Mw, b = this.sa, c = this.Ca; if (null === this.Da) return this.Gp.o() && a.h(b.x, b.y, this.xa / c, this.wa / c), a; a.h(b.x, b.y, Math.max(this.xa, 0) / c, Math.max(this.wa, 0) / c); return a; }, }, viewSize: { get: function () { return this.Gp; }, set: function (a) { var b = this.viewSize; b.A(a) || ((this.Gp = a = a.I()), (this.xa = a.width), (this.wa = a.height), this.Xa(), this.g('viewSize', b, a)); }, }, fixedBounds: { get: function () { return this.pr; }, set: function (a) { var b = this.pr; b.A(a) || ((-Infinity !== a.width && Infinity !== a.height && -Infinity !== a.height) || A('fixedBounds width/height must not be Infinity'), (this.pr = a = a.I()), this.Xa(), this.g('fixedBounds', b, a)); }, }, scrollMargin: { get: function () { return this.ti; }, set: function (a) { 'number' === typeof a && (a = new Ic(a)); var b = this.ti; b.A(a) || ((this.ti = a = a.I()), this.g('scrollMargin', b, a), this.uf()); }, }, scrollMode: { get: function () { return this.Hj; }, set: function (a) { var b = this.Hj; b !== a && ((this.Hj = a), a === oi && Si(this, !1), this.g('scrollMode', b, a), this.uf()); }, }, scrollsPageOnFocus: { get: function () { return this.ss; }, set: function (a) { var b = this.ss; b !== a && ((this.ss = a), this.g('scrollsPageOnFocus', b, a)); }, }, positionComputation: { get: function () { return this.js; }, set: function (a) { var b = this.js; b !== a && ((this.js = a), Si(this, !1), this.g('positionComputation', b, a)); }, }, scaleComputation: { get: function () { return this.ns; }, set: function (a) { var b = this.ns; b !== a && ((this.ns = a), Qj(this, this.scale, this.scale), this.g('scaleComputation', b, a)); }, }, documentBounds: { get: function () { return this.un; }, }, isVirtualized: { get: function () { return this.Jr; }, set: function (a) { var b = this.Jr; b !== a && ((this.Jr = a), this.g('isVirtualized', b, a)); }, }, scale: { get: function () { return this.Ca; }, set: function (a) { var b = this.Ca; b !== a && Qj(this, b, a); }, }, defaultScale: { get: function () { return this.dr; }, set: function (a) { this.dr = a; }, }, autoScale: { get: function () { return this.bj; }, set: function (a) { var b = this.bj; b !== a && ((this.bj = a), this.g('autoScale', b, a), a !== pi && Si(this, !1)); }, }, initialAutoScale: { get: function () { return this.bi; }, set: function (a) { var b = this.bi; b !== a && ((this.bi = a), this.g('initialAutoScale', b, a)); }, }, initialViewportSpot: { get: function () { return this.Ar; }, set: function (a) { var b = this.Ar; b !== a && (a.gb() || A('initialViewportSpot must be a specific Spot: ' + a), (this.Ar = a), this.g('initialViewportSpot', b, a)); }, }, initialDocumentSpot: { get: function () { return this.xr; }, set: function (a) { var b = this.xr; b !== a && (a.gb() || A('initialViewportSpot must be a specific Spot: ' + a), (this.xr = a), this.g('initialDocumentSpot', b, a)); }, }, minScale: { get: function () { return this.Tr; }, set: function (a) { var b = this.Tr; b !== a && (0 < a ? ((this.Tr = a), this.g('minScale', b, a), a > this.scale && (this.scale = a)) : ya(a, '> 0', P, 'minScale')); }, }, maxScale: { get: function () { return this.Rr; }, set: function (a) { var b = this.Rr; b !== a && (0 < a ? ((this.Rr = a), this.g('maxScale', b, a), a < this.scale && (this.scale = a)) : ya(a, '> 0', P, 'maxScale')); }, }, zoomPoint: { get: function () { return this.Is; }, set: function (a) { this.Is.A(a) || (this.Is = a = a.I()); }, }, contentAlignment: { get: function () { return this.dj; }, set: function (a) { var b = this.dj; b.A(a) || ((this.dj = a = a.I()), this.g('contentAlignment', b, a), Si(this, !1)); }, }, initialContentAlignment: { get: function () { return this.Nn; }, set: function (a) { var b = this.Nn; b.A(a) || ((this.Nn = a = a.I()), this.g('initialContentAlignment', b, a)); }, }, padding: { get: function () { return this.eb; }, set: function (a) { 'number' === typeof a && (a = new Ic(a)); var b = this.eb; b.A(a) || ((this.eb = a = a.I()), this.Xa(), this.g('padding', b, a)); }, }, partManager: { get: function () { return this.Ma; }, set: function (a) { var b = this.Ma; b !== a && (null !== a.diagram && A('Cannot share PartManagers between Diagrams: ' + a.toString()), null !== b && b.hb(null), (this.Ma = a), a.hb(this)); }, }, nodes: { get: function () { return this.partManager.nodes.iterator; }, }, links: { get: function () { return this.partManager.links.iterator; }, }, parts: { get: function () { return this.partManager.parts.iterator; }, }, layout: { get: function () { return this.gc; }, set: function (a) { var b = this.gc; b !== a && ((this.gc = a), (a.diagram = this), (a.group = null), (this.Cg = !0), this.g('layout', b, a), this.cc()); }, }, isTreePathToChildren: { get: function () { return this.Ir; }, set: function (a) { var b = this.Ir; if ( b !== a && ((this.Ir = a), this.g('isTreePathToChildren', b, a), !this.undoManager.isUndoingRedoing) ) for (a = this.nodes; a.next(); ) uk(a.value); }, }, treeCollapsePolicy: { get: function () { return this.Ds; }, set: function (a) { var b = this.Ds; b !== a && (a !== ri && a !== vk && a !== wk && A('Unknown Diagram.treeCollapsePolicy: ' + a), (this.Ds = a), this.g('treeCollapsePolicy', b, a)); }, }, Fe: { get: function () { return this.Vb; }, set: function (a) { this.Vb = a; }, }, autoScrollInterval: { get: function () { return this.Sm; }, set: function (a) { var b = this.Sm; b !== a && ((this.Sm = a), this.g('autoScrollInterval', b, a)); }, }, autoScrollRegion: { get: function () { return this.Tm; }, set: function (a) { 'number' === typeof a && (a = new Ic(a)); var b = this.Tm; b.A(a) || ((this.Tm = a = a.I()), this.Xa(), this.g('autoScrollRegion', b, a)); }, }, }); pa.Object.defineProperties(P, { licenseKey: { get: function () { return xk.Sb(); }, set: function (a) { xk.add(a); }, }, version: { get: function () { return yk; }, }, }); P.prototype.makeImageData = P.prototype.px; P.prototype.makeImage = P.prototype.yz; P.prototype.addRenderer = P.prototype.iy; P.prototype.makeSVG = P.prototype.nv; P.prototype.makeSvg = P.prototype.ht; P.prototype.stopAutoScroll = P.prototype.xf; P.prototype.doAutoScroll = P.prototype.Ns; P.prototype.isUnoccupied = P.prototype.fk; P.prototype.raiseDiagramEvent = P.prototype.aa; P.prototype.removeDiagramListener = P.prototype.mm; P.prototype.addDiagramListener = P.prototype.Oj; P.prototype.findTreeRoots = P.prototype.Xy; P.prototype.layoutDiagram = P.prototype.wz; P.prototype.findTopLevelGroups = P.prototype.Qy; P.prototype.findTopLevelNodesAndLinks = P.prototype.Ry; P.prototype.findLinksByExample = P.prototype.Qs; P.prototype.findNodesByExample = P.prototype.Rs; P.prototype.findLinkForData = P.prototype.uc; P.prototype.findNodeForData = P.prototype.Gi; P.prototype.findPartForData = P.prototype.vc; P.prototype.findNodeForKey = P.prototype.Hb; P.prototype.findPartForKey = P.prototype.findPartForKey; P.prototype.rebuildParts = P.prototype.ud; P.prototype.transformViewToDoc = P.prototype.xt; P.prototype.transformRectDocToView = P.prototype.Xz; P.prototype.transformDocToView = P.prototype.wt; P.prototype.centerRect = P.prototype.Ju; P.prototype.scrollToRect = P.prototype.Gv; P.prototype.scroll = P.prototype.scroll; P.prototype.highlightCollection = P.prototype.lz; P.prototype.highlight = P.prototype.kz; P.prototype.clearHighlighteds = P.prototype.Lu; P.prototype.selectCollection = P.prototype.Hv; P.prototype.select = P.prototype.select; P.prototype.clearSelection = P.prototype.Qp; P.prototype.updateAllRelationshipsFromData = P.prototype.wq; P.prototype.updateAllTargetBindings = P.prototype.updateAllTargetBindings; P.prototype.commit = P.prototype.commit; P.prototype.rollbackTransaction = P.prototype.wf; P.prototype.commitTransaction = P.prototype.Za; P.prototype.startTransaction = P.prototype.Aa; P.prototype.raiseChanged = P.prototype.g; P.prototype.raiseChangedEvent = P.prototype.ab; P.prototype.removeChangedListener = P.prototype.qk; P.prototype.addChangedListener = P.prototype.rh; P.prototype.removeModelChangedListener = P.prototype.Mz; P.prototype.addModelChangedListener = P.prototype.Sw; P.prototype.findLayer = P.prototype.Zl; P.prototype.removeLayer = P.prototype.Kz; P.prototype.addLayerAfter = P.prototype.by; P.prototype.addLayerBefore = P.prototype.Qw; P.prototype.addLayer = P.prototype.Ql; P.prototype.moveParts = P.prototype.moveParts; P.prototype.copyParts = P.prototype.Yj; P.prototype.removeParts = P.prototype.qt; P.prototype.remove = P.prototype.remove; P.prototype.add = P.prototype.add; P.prototype.clearDelayedGeometries = P.prototype.Ku; P.prototype.setProperties = P.prototype.Nv; P.prototype.resetInputOptions = P.prototype.Dv; P.prototype.setInputOption = P.prototype.Qz; P.prototype.getInputOption = P.prototype.bm; P.prototype.resetRenderingHints = P.prototype.Ev; P.prototype.setRenderingHint = P.prototype.Gx; P.prototype.getRenderingHint = P.prototype.Ee; P.prototype.maybeUpdate = P.prototype.fd; P.prototype.requestUpdate = P.prototype.cc; P.prototype.delayInitialization = P.prototype.xy; P.prototype.isUpdateRequested = P.prototype.rz; P.prototype.redraw = P.prototype.uf; P.prototype.invalidateDocumentBounds = P.prototype.Xa; P.prototype.findObjectsNear = P.prototype.qg; P.prototype.findPartsNear = P.prototype.Ny; P.prototype.findObjectsIn = P.prototype.pg; P.prototype.findPartsIn = P.prototype.ix; P.prototype.findObjectsAt = P.prototype.Hi; P.prototype.findPartsAt = P.prototype.My; P.prototype.findObjectAt = P.prototype.Rb; P.prototype.findPartAt = P.prototype.$l; P.prototype.alignDocument = P.prototype.jy; P.prototype.zoomToRect = P.prototype.$z; P.prototype.zoomToFit = P.prototype.zoomToFit; P.prototype.diagramScroll = P.prototype.$w; P.prototype.focus = P.prototype.focus; P.prototype.reset = P.prototype.reset; P.useDOM = function (a) { th = a ? void 0 !== w.document : !1; }; P.isUsingDOM = function () { return th; }; var lf = null, si = new Lb(), Ji = null, Ii = null, th = void 0 !== w.document, Bi = null, Ci = '', pi = new D(P, 'None', 0), Wi = new D(P, 'Uniform', 1), Xi = new D(P, 'UniformToFill', 2), tg = new D(P, 'CycleAll', 10), xg = new D(P, 'CycleNotDirected', 11), zg = new D(P, 'CycleNotDirectedFast', 12), Ag = new D(P, 'CycleNotUndirected', 13), ug = new D(P, 'CycleDestinationTree', 14), wg = new D(P, 'CycleSourceTree', 15), oi = new D(P, 'DocumentScroll', 1), xj = new D(P, 'InfiniteScroll', 2), ri = new D(P, 'TreeParentCollapsed', 21), vk = new D(P, 'AllParentsCollapsed', 22), wk = new D(P, 'AnyParentsCollapsed', 23), xk = new E(), yk = '2.0.15', zk = null, mi = !1; function ni() { if (th) { var a = w.document.createElement('canvas'), b = a.getContext('2d'), c = Za('7ca11abfd022028846'); b[c] = Za('398c3597c01238'); for ( var d = [ '5da73c80a36455d4038e4972187c3cae51fd22', sa.Dx + '4ae6247590da4bb21c324ba3a84e385776', Qc.xF + 'fb236cdfda5de14c134ba1a95a2d4c7cc6f93c1387', H.za, ], e = 1; 5 > e; e++ ) b[Za('7ca11abfd7330390')](Za(d[e - 1]), 10, 15 * e); b[c] = Za('39f046ebb36e4b'); for (c = 1; 5 > c; c++) b[Za('7ca11abfd7330390')](Za(d[c - 1]), 10, 15 * c); zk = a; } } P.className = 'Diagram'; P.fromDiv = function (a) { var b = a; 'string' === typeof a && (b = w.document.getElementById(a)); return b instanceof HTMLDivElement && b.C instanceof P ? b.C : null; }; P.inherit = function (a, b) { function c() {} if (Object.getPrototypeOf(a).prototype) throw Error('Used go.Diagram.inherit defining already defined class \n' + a); c.prototype = b.prototype; a.prototype = new c(); a.prototype.constructor = a; }; P.None = pi; P.Uniform = Wi; P.UniformToFill = Xi; P.CycleAll = tg; P.CycleNotDirected = xg; P.CycleNotDirectedFast = zg; P.CycleNotUndirected = Ag; P.CycleDestinationTree = ug; P.CycleSourceTree = wg; P.DocumentScroll = oi; P.InfiniteScroll = xj; P.TreeParentCollapsed = ri; P.AllParentsCollapsed = vk; P.AnyParentsCollapsed = wk; function zi() { this.Xx = null; this.l = 'zz@orderNum'; '63ad05bbe23a1786468a4c741b6d2' === this._tk ? (this.Oe = this.l = !0) : (this.Oe = null); } function tj(a, b) { b.Yc.setTransform(b.Mb, 0, 0, b.Mb, 0, 0); if (null === a.Oe) { b = 'f'; var c = w[Za('76a715b2f73f148a')][Za('72ba13b5')]; a.Oe = !0; if (th) { var d = P[Za('76a115b6ed251eaf4692')]; if (d) for (var e = xk.iterator; e.next(); ) { d = e.value; d = Za(d).split(Za('39e9')); if (6 > d.length) break; var f = Za(d[1]).split('.'); if ('7da71ca0' !== d[4]) break; var g = Za(sa[Za('6cae19')]).split('.'); if (f[0] > g[0] || (f[0] === g[0] && f[1] >= g[1])) { f = c[Za('76ad18b4f73e')]; for (g = c[Za('73a612b6fb191d')](Za('35e7')) + 2; g < f; g++) b += c[g]; f = b[Za('73a612b6fb191d')](Za(d[2])); 0 > f && Za(d[2]) !== Za('7da71ca0ad381e90') && (f = b[Za('73a612b6fb191d')](Za('76a715b2ef3e149757'))); 0 > f && (f = b[Za('73a612b6fb191d')](Za('76a715b2ef3e149757'))); a.Oe = !(0 <= f && f < b[Za('73a612b6fb191d')](Za('35'))); if (!a.Oe) break; f = Za(d[2]); if ('#' !== f[0]) break; g = w.document.createElement('div'); for (var h = d[0].replace(/[A-Za-z]/g, ''); 4 > h.length; ) h += '9'; h = h.substr(h.length - 4); d = ''; d += ['gsh', 'gsf'][parseInt(h.substr(0, 1), 10) % 2]; d += ['Header', 'Background', 'Display', 'Feedback'][ parseInt(h.substr(0, 1), 10) % 4 ]; g[Za('79a417a0f0181a8946')] = d; if (w.document[Za('78a712aa')]) { w.document[Za('78a712aa')][Za('7bb806b6ed32388c4a875b')](g); h = w.getComputedStyle(g).getPropertyValue(Za('78a704b7e62456904c9b12701b6532a8')); w.document[Za('78a712aa')][Za('68ad1bbcf533388c4a875b')](g); if (!h) break; if ( -1 !== h.indexOf(parseInt(f[1] + f[2], 16)) && -1 !== h.indexOf(parseInt(f[3] + f[4], 16)) ) { a.Oe = !1; break; } else if (bb || cb || db || gb) for (d = '.' + d, f = 0; f < document.styleSheets.length; f++) { g = document.styleSheets[f].rules || document.styleSheets[f].cssRules; for (var k in g) if (d === g[k].selectorText) { a.Oe = !1; break; } } } else (a.Oe = null), (a.Oe = !1); } } else { k = c[Za('76ad18b4f73e')]; for (e = c[Za('73a612b6fb191d')](Za('35e7')) + 2; e < k; e++) b += c[e]; c = b[Za('73a612b6fb191d')](Za('7da71ca0ad381e90')); a.Oe = !(0 <= c && c < b[Za('73a612b6fb191d')](Za('35'))); } } } return 0 < a.Oe && a !== a.Xx ? !0 : !1; } function Ai(a, b) { if (th) { (void 0 !== b && null !== b) || A('Diagram setup requires an argument DIV.'); null !== a.Ia && A('Diagram has already completed setup.'); 'string' === typeof b ? (a.Ia = w.document.getElementById(b)) : b instanceof HTMLDivElement ? (a.Ia = b) : A('No DIV or DIV id supplied: ' + b); null === a.Ia && A('Invalid DIV id; could not get element with id: ' + b); void 0 !== a.Ia.C && A('Invalid div id; div already has a Diagram associated with it.'); 'static' === w.getComputedStyle(a.Ia, null).position && (a.Ia.style.position = 'relative'); a.Ia.style['-webkit-tap-highlight-color'] = 'rgba(255, 255, 255, 0)'; a.Ia.style['-ms-touch-action'] = 'none'; a.Ia.innerHTML = ''; a.Ia.C = a; var c = a.As ? new yj(a) : new tk(a); void 0 !== c.style && ((c.style.position = 'absolute'), (c.style.top = '0px'), (c.style.left = '0px'), 'rtl' === w.getComputedStyle(a.Ia, null).getPropertyValue('direction') && (a.Sn = !0), (c.style.zIndex = '2'), (c.style.userSelect = 'none'), (c.style.webkitUserSelect = 'none'), (c.style.MozUserSelect = 'none')); a.Da = c; a.Yc = c.context; b = a.Yc; a.Mb = a.computePixelRatio(); a.xa = a.Ia.clientWidth || 1; a.wa = a.Ia.clientHeight || 1; Aj(a, a.xa, a.wa); a.hr = b.W[Za('7eba17a4ca3b1a8346')][Za('78a118b7')](b.W, zk, 4, 4); a.hr = function () { return true; }; a.Ia.insertBefore(c.Ga, a.Ia.firstChild); c = new tk(null); c.width = 1; c.height = 1; a.Tt = c; a.tw = c.context; if (th) { c = va('div'); var d = va('div'); c.style.position = 'absolute'; c.style.overflow = 'auto'; c.style.width = a.xa + 'px'; c.style.height = a.wa + 'px'; c.style.zIndex = '1'; d.style.position = 'absolute'; d.style.width = '1px'; d.style.height = '1px'; a.Ia.appendChild(c); c.appendChild(d); c.onscroll = Mi; c.onmousedown = Oi; c.ontouchstart = Oi; c.C = a; c.Vx = !0; c.Wx = !0; a.qs = c; a.hp = d; } a.nt = ta(function () { a.jh = null; a.R(); }, 300); a.$v = ta(function () { Th(a); }, 250); a.preventDefault = function (a) { a.preventDefault(); return !1; }; a.jk = function (b) { if (a.isEnabled) { a.Re = !0; var c = aj(a, b, !0); a.doMouseMove(); a.currentTool.isBeyondDragSize() && (a.Fd = 0); gj(c, b); } }; a.ik = function (b) { if (a.isEnabled) if (((a.Re = !0), a.Se)) b.preventDefault(); else { var c = aj(a, b, !0); c.down = !0; c.clickCount = b.detail; if (cb || db) b.timeStamp - a.kl < a.Bu && !a.currentTool.isBeyondDragSize() ? a.Fd++ : (a.Fd = 1), (a.kl = b.timeStamp), (c.clickCount = a.Fd); c.clone(a.firstInput); a.doMouseDown(); 1 === b.button ? b.preventDefault() : gj(c, b); } }; a.lk = function (b) { if (a.isEnabled) if (a.Se && 2 === b.button) b.preventDefault(); else if ((a.Se && 0 === b.button && (a.Se = !1), a.Ml)) b.preventDefault(); else { a.Re = !0; var c = aj(a, b, !0); c.up = !0; c.clickCount = b.detail; if (cb || db) c.clickCount = a.Fd; c.bubbles = b.bubbles; c.targetDiagram = cj(b); a.doMouseUp(); a.xf(); gj(c, b); } }; a.mk = function (b) { if (a.isEnabled) { var c = aj(a, b, !0); c.bubbles = !0; var d = 0, e = 0; c.delta = 0; void 0 !== b.deltaX ? (0 !== b.deltaX && (d = 0 < b.deltaX ? 1 : -1), 0 !== b.deltaY && (e = 0 < b.deltaY ? 1 : -1), (c.delta = Math.abs(b.deltaX) > Math.abs(b.deltaY) ? -d : -e)) : void 0 !== b.wheelDeltaX ? (0 !== b.wheelDeltaX && (d = 0 < b.wheelDeltaX ? -1 : 1), 0 !== b.wheelDeltaY && (e = 0 < b.wheelDeltaY ? -1 : 1), (c.delta = Math.abs(b.wheelDeltaX) > Math.abs(b.wheelDeltaY) ? -d : -e)) : void 0 !== b.wheelDelta && 0 !== b.wheelDelta && (c.delta = 0 < b.wheelDelta ? 1 : -1); a.doMouseWheel(); gj(c, b); } }; a.kk = function (b) { a.isEnabled && ((a.Re = !1), aj(a, b, !0), (b = a.currentTool), b.cancelWaitAfter(), b.standardMouseOver()); }; a.Uv = function (b) { if (a.isEnabled) { a.Ml = !1; a.Se = !0; var c = dj(a, b, b.targetTouches[0], 1 < b.touches.length), d = null; 0 < b.targetTouches.length ? (d = b.targetTouches[0]) : 0 < b.changedTouches.length && (d = b.changedTouches[0]); if (null !== d) { var e = d.screenX; d = d.screenY; var k = a.Lr; b.timeStamp - a.kl < a.Bu && !(25 < Math.abs(k.x - e) || 25 < Math.abs(k.y - d)) ? a.Fd++ : (a.Fd = 1); c.clickCount = a.Fd; a.kl = b.timeStamp; a.Lr.h(e, d); } a.doMouseDown(); gj(c, b); } }; a.Tv = function (b) { if (a.isEnabled) { var c = null; 0 < b.targetTouches.length ? (c = b.targetTouches[0]) : 0 < b.changedTouches.length && (c = b.changedTouches[0]); c = fj(a, b, c, 1 < b.touches.length); a.doMouseMove(); gj(c, b); } }; a.Sv = function (b) { if (a.isEnabled) if (a.Ml) b.preventDefault(); else if (!(1 < b.touches.length)) { var c = null, d = null; 0 < b.targetTouches.length ? (d = b.targetTouches[0]) : 0 < b.changedTouches.length && (d = b.changedTouches[0]); var e = ej(a, b, !1, !0, !1, !1); null !== d && ((c = w.document.elementFromPoint(d.clientX, d.clientY)), null !== c && c.C instanceof P && c.C !== a && bj(c.C, d, e), bj(a, d, e), (e.clickCount = a.Fd)); null === c ? (e.targetDiagram = cj(b)) : c.C ? (e.targetDiagram = c.C) : (e.targetDiagram = null); e.targetObject = null; a.doMouseUp(); gj(e, b); a.Se = !1; } }; a.im = function (b) { if (a.isEnabled) { a.Re = !0; var c = a.nu; void 0 === c[b.pointerId] && (c[b.pointerId] = b); c = a.vl; var d = !1; if (null !== c[0] && c[0].pointerId === b.pointerId) c[0] = b; else if (null !== c[1] && c[1].pointerId === b.pointerId) (c[1] = b), (d = !0); else if (null === c[0]) c[0] = b; else if (null === c[1]) (c[1] = b), (d = !0); else { b.preventDefault(); return; } if ('touch' === b.pointerType || 'pen' === b.pointerType) (a.Ml = !1), (a.Se = !0); c = dj(a, b, b, d); d = a.Lr; var e = 'touch' === b.pointerType || 'pen' === b.pointerType ? 25 : 10; b.timeStamp - a.kl < a.Bu && !(Math.abs(d.x - b.screenX) > e || Math.abs(d.y - b.screenY) > e) ? a.Fd++ : (a.Fd = 1); c.clickCount = a.Fd; a.kl = b.timeStamp; a.Lr.wg(b.screenX, b.screenY); a.doMouseDown(); 1 === b.button ? b.preventDefault() : gj(c, b); } }; a.jm = function (b) { if (a.isEnabled) { a.Re = !0; var c = a.vl; if (null !== c[0] && c[0].pointerId === b.pointerId) c[0] = b; else { if (null !== c[1] && c[1].pointerId === b.pointerId) { c[1] = b; return; } if (null === c[0]) c[0] = b; else return; } c[0].pointerId === b.pointerId && ((c = fj(a, b, b, null !== c[1])), a.doMouseMove(), gj(c, b)); } }; a.lm = function (b) { if (a.isEnabled) { a.Re = !0; var c = 'touch' === b.pointerType || 'pen' === b.pointerType, d = a.nu; if (c && a.Ml) delete d[b.pointerId], b.preventDefault(); else if (((d = a.vl), null !== d[0] && d[0].pointerId === b.pointerId)) { d[0] = null; d = ej(a, b, !1, !0, !0, !1); var e = w.document.elementFromPoint(b.clientX, b.clientY); null !== e && e.C instanceof P && e.C !== a && bj(e.C, b, d); bj(a, b, d); d.clickCount = a.Fd; null === e ? (d.targetDiagram = cj(b)) : e.C ? (d.targetDiagram = e.C) : (d.targetDiagram = null); d.targetObject = null; a.doMouseUp(); gj(d, b); c && (a.Se = !1); } else null !== d[1] && d[1].pointerId === b.pointerId && (d[1] = null); } }; a.km = function (b) { if (a.isEnabled) { a.Re = !1; var c = a.nu; c[b.pointerId] && delete c[b.pointerId]; c = a.vl; null !== c[0] && c[0].pointerId === b.pointerId && (c[0] = null); null !== c[1] && c[1].pointerId === b.pointerId && (c[1] = null); 'touch' !== b.pointerType && 'pen' !== b.pointerType && ((b = a.currentTool), b.cancelWaitAfter(), b.standardMouseOver()); } }; b.Rc(!0); Ki(a); } } zi.className = 'DiagramHelper'; function Of(a) { this.l = void 0 === a ? new G() : a; this.u = new G(); } pa.Object.defineProperties(Of.prototype, { point: { get: function () { return this.l; }, set: function (a) { this.l = a; }, }, shifted: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, }); Of.className = 'DraggingInfo'; function Lj(a, b, c) { this.node = a; this.info = b; this.fv = c; } Lj.className = 'DraggingNodeInfoPair'; function yf() { this.reset(); } yf.prototype.reset = function () { this.isGridSnapEnabled = !1; this.isGridSnapRealtime = !0; this.gridSnapCellSize = new M(NaN, NaN).freeze(); this.gridSnapCellSpot = Tc; this.gridSnapOrigin = new G(NaN, NaN).freeze(); this.iz = this.dragsTree = this.dragsLink = !1; this.hz = !0; }; function Ak(a) { 1 < arguments.length && A('Palette constructor can only take one optional argument, the DIV HTML element or its id.'); P.call(this, a); this.allowDragOut = !0; this.allowMove = !1; this.isReadOnly = !0; this.contentAlignment = Uc; this.layout = new Bk(); } oa(Ak, P); Ak.className = 'Palette'; function Ck(a) { 1 < arguments.length && A( 'Overview constructor can only take one optional argument, the DIV HTML element or its id.', ); P.call(this, a); this.animationManager.isEnabled = !1; this.ob = !0; this.$f = null; this.ir = !0; this.Gx('drawShadows', !1); var b = new T(), c = new W(); c.stroke = 'magenta'; c.strokeWidth = 2; c.fill = 'transparent'; c.name = 'BOXSHAPE'; b.selectable = !0; b.selectionAdorned = !1; b.selectionObjectName = 'BOXSHAPE'; b.locationObjectName = 'BOXSHAPE'; b.resizeObjectName = 'BOXSHAPE'; b.cursor = 'move'; b.add(c); this.l = b; this.allowDelete = this.allowCopy = !1; this.allowSelect = !0; this.autoScrollRegion = new Ic(0, 0, 0, 0); this.yu = new tk(null); this.Yx = this.yu.context; vf(this.toolManager, 'Dragging', new Dk(), this.toolManager.mouseMoveTools); var d = this; this.click = function () { var a = d.$f; if (null !== a) { var b = a.viewportBounds, c = d.lastInput.documentPoint; a.position = new G(c.x - b.width / 2, c.y - b.height / 2); } }; this.Gm = function () { d.Xa(); Ek(d); }; this.Em = function () { null !== d.$f && (d.Xa(), d.R()); }; this.Fm = function () { d.R(); }; this.Dm = function () { null !== d.$f && Ek(d); }; this.autoScale = Wi; this.ob = !1; } oa(Ck, P); function Fk(a) { a.ob || a.Yb || !1 !== a.qd || ((a.qd = !0), w.requestAnimationFrame(function () { if (a.qd && !a.Yb && ((a.qd = !1), null !== a.Ia)) { a.Yb = !0; Qi(a); a.documentBounds.o() || Vi(a, a.computeBounds()); null === a.Ia && A('No div specified'); null === a.Da && A('No canvas specified'); gi(a.box); if (a.nc) { var b = a.$f; if (null !== b && !b.animationManager.isAnimating && !b.animationManager.rb) { b = a.Yc; var c = a.yu; b.setTransform(1, 0, 0, 1, 0, 0); b.clearRect(0, 0, a.Da.width, a.Da.height); b.drawImage(c.Ga, 0, 0); c = a.tb; c.reset(); 1 !== a.scale && c.scale(a.scale); (0 === a.position.x && 0 === a.position.y) || c.translate(-a.position.x, -a.position.y); b.scale(a.Mb, a.Mb); b.transform(c.m11, c.m12, c.m21, c.m22, c.dx, c.dy); c = a.Pa.j; for (var d = c.length, e = 0; e < d; e++) c[e].hc(b, a); a.ci = !1; a.nc = !1; } } a.Yb = !1; } })); } Ck.prototype.computePixelRatio = function () { return 1; }; Ck.prototype.hc = function () { null === this.Ia && A('No div specified'); null === this.Da && A('No canvas specified'); if (!(this.Da instanceof yj) && (gi(this.box), this.nc)) { var a = this.$f; if (null !== a && !a.animationManager.isAnimating) { rj(this); var b = a.grid; null === b || !b.visible || isNaN(b.width) || isNaN(b.height) || ((b = N.alloc().assign(this.viewportBounds).Jc(a.viewportBounds)), kj(a, b), N.free(b), Qi(a)); var c = this.Da; b = this.Yc; var d = this.yu, e = this.Yx; d.width = c.width; d.height = c.height; b.Rc(!0); b.setTransform(1, 0, 0, 1, 0, 0); b.clearRect(0, 0, c.width, c.height); d = this.tb; d.reset(); 1 !== this.scale && d.scale(this.scale); (0 === this.position.x && 0 === this.position.y) || d.translate(-this.position.x, -this.position.y); b.scale(this.Mb, this.Mb); b.transform(d.m11, d.m12, d.m21, d.m22, d.dx, d.dy); d = this.ir; var f = this.viewportBounds; a = a.Pa.j; for (var g = a.length, h = 0; h < g; h++) { var k = a[h], l = d; if (k.visible && 0 !== k.lb && (void 0 === l && (l = !0), l || !k.isTemporary)) { 1 !== k.lb && (b.globalAlpha = k.lb); l = this.scale; k = k.Fa.j; for (var m = k.length, n = 0; n < m; n++) { var p = k[n], q = p.actualBounds; q.Ic(f) && (q.width * l > this.oe || q.height * l > this.oe ? p.hc(b, this) : ii(b, p)); } b.globalAlpha = 1; } } e.drawImage(c.Ga, 0, 0); c = this.Pa.j; e = c.length; for (d = 0; d < e; d++) c[d].hc(b, this); this.nc = this.ci = !1; } } }; function Ek(a) { var b = a.box; if (null !== b) { var c = a.$f; if (null !== c) { a.nc = !0; c = c.viewportBounds; var d = b.selectionObject, e = M.alloc(); e.h(c.width, c.height); d.desiredSize = e; M.free(e); a = 2 / a.scale; d instanceof W && (d.strokeWidth = a); b.location = new G(c.x - a / 2, c.y - a / 2); b.isSelected = !0; } } } Ck.prototype.computeBounds = function () { var a = this.$f; if (null === a) return Gc; var b = a.documentBounds.copy(); b.Jc(a.viewportBounds); return b; }; Ck.prototype.mx = function () { !0 !== this.nc && ((this.nc = !0), Fk(this)); }; Ck.prototype.lq = function (a, b, c, d) { this.ob || (Pi(this), this.R(), hj(this), this.Xa(), Ek(this), (this.ye.scale = c), (this.ye.position.x = a.x), (this.ye.position.y = a.y), this.ye.bounds.assign(a), (this.ye.ox = d), this.aa('ViewportBoundsChanged', this.ye, a)); }; pa.Object.defineProperties(Ck.prototype, { observed: { get: function () { return this.$f; }, set: function (a) { var b = this.$f; a instanceof Ck && A('Overview.observed Diagram may not be an Overview itself: ' + a); b !== a && (null !== b && (this.remove(this.box), b.mm('ViewportBoundsChanged', this.Gm), b.mm('DocumentBoundsChanged', this.Em), b.mm('InvalidateDraw', this.Fm), b.mm('AnimationFinished', this.Dm)), (this.$f = a), null !== a && (a.Oj('ViewportBoundsChanged', this.Gm), a.Oj('DocumentBoundsChanged', this.Em), a.Oj('InvalidateDraw', this.Fm), a.Oj('AnimationFinished', this.Dm), this.add(this.box), Ek(this)), this.Xa(), this.g('observed', b, a)); }, }, box: { get: function () { return this.l; }, set: function (a) { var b = this.l; b !== a && ((this.l = a), this.remove(b), this.add(this.l), Ek(this), this.g('box', b, a)); }, }, drawsTemporaryLayers: { get: function () { return this.ir; }, set: function (a) { this.ir !== a && ((this.ir = a), this.uf()); }, }, }); Ck.className = 'Overview'; function Dk() { xf.call(this); this.l = null; } oa(Dk, xf); Dk.prototype.canStart = function () { if (!this.isEnabled) return !1; var a = this.diagram; if (null === a || !a.allowMove || !a.allowSelect) return !1; var b = a.observed; if (null === b) return !1; var c = a.lastInput; if ( !c.left || (a.currentTool !== this && (!this.isBeyondDragSize() || (c.isTouchEvent && c.timestamp - a.firstInput.timestamp < this.delay))) ) return !1; null === this.findDraggablePart() && ((c = b.viewportBounds), (this.l = new G(c.width / 2, c.height / 2)), (a = a.firstInput.documentPoint), (b.position = new G(a.x - this.l.x, a.y - this.l.y))); return !0; }; Dk.prototype.doActivate = function () { this.l = null; xf.prototype.doActivate.call(this); }; Dk.prototype.moveParts = function () { var a = this.diagram, b = a.observed; if (null !== b) { var c = a.box; if (null !== c) { if (null === this.l) { var d = a.firstInput.documentPoint; c = c.location; this.l = new G(d.x - c.x, d.y - c.y); } a = a.lastInput.documentPoint; b.position = new G(a.x - this.l.x, a.y - this.l.y); } } }; Dk.className = 'OverviewDraggingTool'; function Gk() { nb(this); this.C = lf; this.Ub = this.K = this.u = !0; this.ba = this.La = this.Vb = this.Ma = !1; this.ki = this.l = null; this.Vc = 1.05; this.eu = NaN; this.zw = null; this.Eu = NaN; this.Du = Gc; this.fg = null; this.Kc = 200; } Gk.prototype.toString = function () { return 'CommandHandler'; }; Gk.prototype.hb = function (a) { this.C = a; }; Gk.prototype.doKeyDown = function () { var a = this.diagram, b = a.lastInput, c = ib ? b.meta : b.control, d = b.shift, e = b.alt, f = b.key; !c || ('C' !== f && 'Insert' !== f) ? (c && 'X' === f) || (d && 'Del' === f) ? this.canCutSelection() && this.cutSelection() : (c && 'V' === f) || (d && 'Insert' === f) ? this.canPasteSelection() && this.pasteSelection() : (c && 'Y' === f) || (e && d && 'Backspace' === f) ? this.canRedo() && this.redo() : (c && 'Z' === f) || (e && 'Backspace' === f) ? this.canUndo() && this.undo() : 'Del' === f || 'Backspace' === f ? this.canDeleteSelection() && this.deleteSelection() : c && 'A' === f ? this.canSelectAll() && this.selectAll() : 'Esc' === f ? this.canStopCommand() && this.stopCommand() : 'Up' === f ? a.allowVerticalScroll && (c ? a.scroll('pixel', 'up') : a.scroll('line', 'up')) : 'Down' === f ? a.allowVerticalScroll && (c ? a.scroll('pixel', 'down') : a.scroll('line', 'down')) : 'Left' === f ? a.allowHorizontalScroll && (c ? a.scroll('pixel', 'left') : a.scroll('line', 'left')) : 'Right' === f ? a.allowHorizontalScroll && (c ? a.scroll('pixel', 'right') : a.scroll('line', 'right')) : 'PageUp' === f ? d && a.allowHorizontalScroll ? a.scroll('page', 'left') : a.allowVerticalScroll && a.scroll('page', 'up') : 'PageDown' === f ? d && a.allowHorizontalScroll ? a.scroll('page', 'right') : a.allowVerticalScroll && a.scroll('page', 'down') : 'Home' === f ? c && a.allowVerticalScroll ? a.scroll('document', 'up') : !c && a.allowHorizontalScroll && a.scroll('document', 'left') : 'End' === f ? c && a.allowVerticalScroll ? a.scroll('document', 'down') : !c && a.allowHorizontalScroll && a.scroll('document', 'right') : ' ' === f ? this.canScrollToPart() && this.scrollToPart() : 'Subtract' === f ? this.canDecreaseZoom() && this.decreaseZoom() : 'Add' === f ? this.canIncreaseZoom() && this.increaseZoom() : c && '0' === f ? this.canResetZoom() && this.resetZoom() : d && 'Z' === f ? this.canZoomToFit() && this.zoomToFit() : c && !d && 'G' === f ? this.canGroupSelection() && this.groupSelection() : c && d && 'G' === f ? this.canUngroupSelection() && this.ungroupSelection() : b.event && 113 === b.event.which ? this.canEditTextBlock() && this.editTextBlock() : b.event && 93 === b.event.which ? this.canShowContextMenu() && this.showContextMenu() : (b.bubbles = !0) : this.canCopySelection() && this.copySelection(); }; Gk.prototype.doKeyUp = function () { this.diagram.lastInput.bubbles = !0; }; Gk.prototype.stopCommand = function () { var a = this.diagram, b = a.currentTool; b instanceof Ua && a.allowSelect && a.Qp(); null !== b && b.doCancel(); }; Gk.prototype.canStopCommand = function () { return !0; }; Gk.prototype.selectAll = function () { var a = this.diagram; a.R(); try { a.currentCursor = 'wait'; a.aa('ChangingSelection', a.selection); for (var b = a.parts; b.next(); ) b.value.isSelected = !0; for (var c = a.nodes; c.next(); ) c.value.isSelected = !0; for (var d = a.links; d.next(); ) d.value.isSelected = !0; } finally { a.aa('ChangedSelection', a.selection), (a.currentCursor = ''); } }; Gk.prototype.canSelectAll = function () { return this.diagram.allowSelect; }; Gk.prototype.deleteSelection = function () { var a = this.diagram; try { a.currentCursor = 'wait'; a.Aa('Delete'); a.aa('ChangingSelection', a.selection); a.aa('SelectionDeleting', a.selection); for (var b = new F(), c = a.selection.iterator; c.next(); ) Hk( b, c.value, !0, this.deletesTree ? Infinity : 0, this.deletesConnectedLinks ? null : !1, function (a) { return a.canDelete(); }, ); a.qt(b, !0); a.aa('SelectionDeleted', b); } finally { a.aa('ChangedSelection', a.selection), a.Za('Delete'), (a.currentCursor = ''); } }; Gk.prototype.canDeleteSelection = function () { var a = this.diagram; return a.isReadOnly || a.isModelReadOnly || !a.allowDelete || 0 === a.selection.count ? !1 : !0; }; Gk.prototype.copySelection = function () { var a = this.diagram, b = new F(); for (a = a.selection.iterator; a.next(); ) Hk(b, a.value, !0, this.copiesTree ? Infinity : 0, this.copiesConnectedLinks, function (a) { return a.canCopy(); }); this.copyToClipboard(b); }; Gk.prototype.canCopySelection = function () { var a = this.diagram; return a.allowCopy && a.allowClipboard && 0 !== a.selection.count ? !0 : !1; }; Gk.prototype.cutSelection = function () { this.copySelection(); this.deleteSelection(); }; Gk.prototype.canCutSelection = function () { var a = this.diagram; return !a.isReadOnly && !a.isModelReadOnly && a.allowCopy && a.allowDelete && a.allowClipboard && 0 !== a.selection.count ? !0 : !1; }; Gk.prototype.copyToClipboard = function (a) { var b = this.diagram, c = null; if (null === a) (Bi = null), (Ci = ''); else { c = b.model; var d = !1, e = !1, f = null; try { c.fm() && ((d = c.Xj), (c.Xj = this.copiesParentKey)), c.dk() && ((e = c.Wj), (c.Wj = this.copiesGroupKey)), (f = b.Yj(a, null, !0)); } finally { c.fm() && (c.Xj = d), c.dk() && (c.Wj = e), (c = new E()), c.addAll(f), (Bi = c), (Ci = b.model.dataFormat); } } b.aa('ClipboardChanged', c); }; Gk.prototype.pasteFromClipboard = function () { var a = new F(), b = Bi; if (null === b) return a; var c = this.diagram; if (Ci !== c.model.dataFormat) return a; var d = c.model, e = !1, f = !1, g = null; try { d.fm() && ((e = d.Xj), (d.Xj = this.copiesParentKey)), d.dk() && ((f = d.Wj), (d.Wj = this.copiesGroupKey)), (g = c.Yj(b, c, !1)); } finally { for (d.fm() && (d.Xj = e), d.dk() && (d.Wj = f), b = g.iterator; b.next(); ) (c = b.value), (d = b.key), c.location.o() || (d.location.o() ? (c.location = d.location) : !c.position.o() && d.position.o() && (c.position = d.position)), a.add(c); } return a; }; Gk.prototype.pasteSelection = function (a) { void 0 === a && (a = null); var b = this.diagram; try { b.currentCursor = 'wait'; b.Aa('Paste'); b.aa('ChangingSelection', b.selection); var c = this.pasteFromClipboard(); 0 < c.count && Hf(b); for (var d = c.iterator; d.next(); ) d.value.isSelected = !0; b.aa('ChangedSelection', b.selection); if (null !== a) { var e = b.computePartsBounds(b.selection); if (e.o()) { var f = this.computeEffectiveCollection(b.selection, b.Mk); bg(b, f, new G(a.x - e.centerX, a.y - e.centerY), b.Mk, !1); } } b.aa('ClipboardPasted', c); } finally { b.Za('Paste'), (b.currentCursor = ''); } }; Gk.prototype.canPasteSelection = function () { var a = this.diagram; return a.isReadOnly || a.isModelReadOnly || !a.allowInsert || !a.allowClipboard || null === Bi || 0 === Bi.count || Ci !== a.model.dataFormat ? !1 : !0; }; Gk.prototype.undo = function () { this.diagram.undoManager.undo(); }; Gk.prototype.canUndo = function () { var a = this.diagram; return a.isReadOnly || a.isModelReadOnly ? !1 : a.allowUndo && a.undoManager.canUndo(); }; Gk.prototype.redo = function () { this.diagram.undoManager.redo(); }; Gk.prototype.canRedo = function () { var a = this.diagram; return a.isReadOnly || a.isModelReadOnly ? !1 : a.allowUndo && a.undoManager.canRedo(); }; Gk.prototype.decreaseZoom = function (a) { void 0 === a && (a = 1 / this.zoomFactor); var b = this.diagram; b.autoScale === pi && ((a = b.scale * a), a < b.minScale || a > b.maxScale || (b.scale = a)); }; Gk.prototype.canDecreaseZoom = function (a) { void 0 === a && (a = 1 / this.zoomFactor); var b = this.diagram; if (b.autoScale !== pi) return !1; a = b.scale * a; return a < b.minScale || a > b.maxScale ? !1 : b.allowZoom; }; Gk.prototype.increaseZoom = function (a) { void 0 === a && (a = this.zoomFactor); var b = this.diagram; b.autoScale === pi && ((a = b.scale * a), a < b.minScale || a > b.maxScale || (b.scale = a)); }; Gk.prototype.canIncreaseZoom = function (a) { void 0 === a && (a = this.zoomFactor); var b = this.diagram; if (b.autoScale !== pi) return !1; a = b.scale * a; return a < b.minScale || a > b.maxScale ? !1 : b.allowZoom; }; Gk.prototype.resetZoom = function (a) { void 0 === a && (a = this.defaultScale); var b = this.diagram; a < b.minScale || a > b.maxScale || (b.scale = a); }; Gk.prototype.canResetZoom = function (a) { void 0 === a && (a = this.defaultScale); var b = this.diagram; return a < b.minScale || a > b.maxScale ? !1 : b.allowZoom; }; Gk.prototype.zoomToFit = function () { var a = this.diagram, b = a.scale, c = a.position; b === this.Eu && !isNaN(this.eu) && a.documentBounds.A(this.Du) ? ((a.scale = this.eu), (a.position = this.zw), (this.Eu = NaN), (this.Du = Gc)) : ((this.eu = b), (this.zw = c.copy()), a.zoomToFit(), (this.Eu = a.scale), (this.Du = a.documentBounds.copy())); }; Gk.prototype.canZoomToFit = function () { return this.diagram.allowZoom; }; Gk.prototype.scrollToPart = function (a) { void 0 === a && (a = null); var b = this.diagram; if (null === a) { try { null !== this.fg && (this.fg.next() ? (a = this.fg.value) : (this.fg = null)); } catch (k) { this.fg = null; } null === a && (0 < b.highlighteds.count ? (this.fg = b.highlighteds.iterator) : 0 < b.selection.count && (this.fg = b.selection.iterator), null !== this.fg && this.fg.next() && (a = this.fg.value)); } if (null !== a) { var c = b.animationManager; c.Ti('Scroll To Part'); var d = this.scrollToPartPause; if (0 < d) { var e = Ik(this, a, [a]), f = function () { b.Aa(); for ( var a = e.pop(); 0 < e.length && a instanceof V && a.isTreeExpanded && (!(a instanceof ig) || a.isSubGraphExpanded); ) a = e.pop(); 0 < e.length ? (a instanceof T && b.Gv(a.actualBounds), a instanceof V && !a.isTreeExpanded && (a.isTreeExpanded = !0), a instanceof ig && !a.isSubGraphExpanded && (a.isSubGraphExpanded = !0)) : (a instanceof T && b.Ju(a.actualBounds), b.mm('LayoutCompleted', g)); b.Za('Scroll To Part'); }, g = function () { ua(f, (c.isEnabled ? c.duration : 0) + d); }; b.Oj('LayoutCompleted', g); f(); } else { var h = b.position.copy(); b.Ju(a.actualBounds); h.Qa(b.position) && c.vd(); } } }; function Ik(a, b, c) { if (b.isVisible()) return c; if (b instanceof pf) Ik(a, b.adornedPart, c); else if (b instanceof S) { var d = b.fromNode; null !== d && Ik(a, d, c); b = b.toNode; null !== b && Ik(a, b, c); } else b instanceof V && ((d = b.labeledLink), null !== d && Ik(a, d, c), (d = b.rg()), null !== d && (d.isTreeExpanded || d.wasTreeExpanded || c.push(d), Ik(a, d, c))), (b = b.containingGroup), null !== b && (b.isSubGraphExpanded || b.wasSubGraphExpanded || c.push(b), Ik(a, b, c)); return c; } Gk.prototype.canScrollToPart = function (a) { void 0 === a && (a = null); if (null !== a && !(a instanceof T)) return !1; a = this.diagram; return 0 === a.selection.count && 0 === a.highlighteds.count ? !1 : a.allowHorizontalScroll && a.allowVerticalScroll; }; Gk.prototype.collapseTree = function (a) { void 0 === a && (a = null); var b = this.diagram; try { b.Aa('Collapse Tree'); b.animationManager.Ti('Collapse Tree'); var c = new E(); if (null !== a && a.isTreeExpanded) a.collapseTree(), c.add(a); else if (null === a) for (var d = b.selection.iterator; d.next(); ) { var e = d.value; e instanceof V && e.isTreeExpanded && (e.collapseTree(), c.add(e)); } b.aa('TreeCollapsed', c); } finally { b.Za('Collapse Tree'); } }; Gk.prototype.canCollapseTree = function (a) { void 0 === a && (a = null); var b = this.diagram; if (b.isReadOnly) return !1; if (null !== a) { if (!(a instanceof V && a.isTreeExpanded)) return !1; if (0 < a.Xp().count) return !0; } else for (a = b.selection.iterator; a.next(); ) if (((b = a.value), b instanceof V && b.isTreeExpanded && 0 < b.Xp().count)) return !0; return !1; }; Gk.prototype.expandTree = function (a) { void 0 === a && (a = null); var b = this.diagram; try { b.Aa('Expand Tree'); b.animationManager.Ti('Expand Tree'); var c = new E(); if (null !== a && !a.isTreeExpanded) a.expandTree(), c.add(a); else if (null === a) for (var d = b.selection.iterator; d.next(); ) { var e = d.value; e instanceof V && !e.isTreeExpanded && (e.expandTree(), c.add(e)); } b.aa('TreeExpanded', c); } finally { b.Za('Expand Tree'); } }; Gk.prototype.canExpandTree = function (a) { void 0 === a && (a = null); var b = this.diagram; if (b.isReadOnly) return !1; if (null !== a) { if (!(a instanceof V) || a.isTreeExpanded) return !1; if (0 < a.Xp().count) return !0; } else for (a = b.selection.iterator; a.next(); ) if (((b = a.value), b instanceof V && !b.isTreeExpanded && 0 < b.Xp().count)) return !0; return !1; }; Gk.prototype.groupSelection = function () { var a = this.diagram, b = a.model; if (b.ek()) { var c = this.archetypeGroupData; if (null !== c) { var d = null; try { a.currentCursor = 'wait'; a.Aa('Group'); a.aa('ChangingSelection', a.selection); for (var e = new E(), f = a.selection.iterator; f.next(); ) { var g = f.value; g.bc() && g.canGroup() && e.add(g); } for (var h = new E(), k = e.iterator; k.next(); ) { var l = k.value; f = !1; for (var m = e.iterator; m.next(); ) if (l.Vd(m.value)) { f = !0; break; } f || h.add(l); } if (0 < h.count) { var n = h.first().containingGroup; if (null !== n) for (; null !== n; ) { e = !1; for (var p = h.iterator; p.next(); ) if (!p.value.Vd(n)) { e = !0; break; } if (e) n = n.containingGroup; else break; } if (c instanceof ig) Yg(c), (d = c.copy()), null !== d && a.add(d); else if (b.lv(c)) { var q = b.copyNodeData(c); Ca(q) && (b.kf(q), (d = a.Gi(q))); } if (null !== d) { null !== n && this.isValidMember(n, d) && (d.containingGroup = n); for (var r = h.iterator; r.next(); ) { var u = r.value; this.isValidMember(d, u) && (u.containingGroup = d); } a.select(d); } } a.aa('ChangedSelection', a.selection); a.aa('SelectionGrouped', d); } finally { a.Za('Group'), (a.currentCursor = ''); } } } }; Gk.prototype.canGroupSelection = function () { var a = this.diagram; if ( a.isReadOnly || a.isModelReadOnly || !a.allowInsert || !a.allowGroup || !a.model.ek() || null === this.archetypeGroupData ) return !1; for (a = a.selection.iterator; a.next(); ) { var b = a.value; if (b.bc() && b.canGroup()) return !0; } return !1; }; function Jk(a) { var b = Ka(); for (a = a.iterator; a.next(); ) { var c = a.value; c instanceof S || b.push(c); } a = new F(); c = b.length; for (var d = 0; d < c; d++) { for (var e = b[d], f = !0, g = 0; g < c; g++) if (e.Vd(b[g])) { f = !1; break; } f && a.add(e); } Oa(b); return a; } Gk.prototype.isValidMember = function (a, b) { if (null === b || a === b || b instanceof S) return !1; if (null !== a) { if (a === b || a.Vd(b)) return !1; var c = a.memberValidation; if ( (null !== c && !c(a, b)) || (null === a.data && null !== b.data) || (null !== a.data && null === b.data) ) return !1; } c = this.memberValidation; return null !== c ? c(a, b) : !0; }; Gk.prototype.ungroupSelection = function (a) { void 0 === a && (a = null); var b = this.diagram, c = b.model; if (c.ek()) try { b.currentCursor = 'wait'; b.Aa('Ungroup'); b.aa('ChangingSelection', b.selection); var d = new E(); if (null !== a) d.add(a); else for (var e = b.selection.iterator; e.next(); ) { var f = e.value; f instanceof ig && f.canUngroup() && d.add(f); } var g = new E(); if (0 < d.count) { b.Qp(); for (var h = d.iterator; h.next(); ) { var k = h.value; k.expandSubGraph(); var l = k.containingGroup, m = null !== l && null !== l.data ? c.pa(l.data) : void 0; g.addAll(k.memberParts); for (var n = g.iterator; n.next(); ) { var p = n.value; p.isSelected = !0; if (!(p instanceof S)) { var q = p.data; null !== q ? c.tt(q, m) : (p.containingGroup = l); } } b.remove(k); } } b.aa('ChangedSelection', b.selection); b.aa('SelectionUngrouped', d, g); } finally { b.Za('Ungroup'), (b.currentCursor = ''); } }; Gk.prototype.canUngroupSelection = function (a) { void 0 === a && (a = null); var b = this.diagram; if (b.isReadOnly || b.isModelReadOnly || !b.allowDelete || !b.allowUngroup || !b.model.ek()) return !1; if (null !== a) { if (!(a instanceof ig)) return !1; if (a.canUngroup()) return !0; } else for (a = b.selection.iterator; a.next(); ) if (((b = a.value), b instanceof ig && b.canUngroup())) return !0; return !1; }; Gk.prototype.addTopLevelParts = function (a, b) { var c = !0; for (a = Jk(a).iterator; a.next(); ) { var d = a.value; null !== d.containingGroup && (!b || this.isValidMember(null, d) ? (d.containingGroup = null) : (c = !1)); } return c; }; Gk.prototype.collapseSubGraph = function (a) { void 0 === a && (a = null); var b = this.diagram; try { b.Aa('Collapse SubGraph'); b.animationManager.Ti('Collapse SubGraph'); var c = new E(); if (null !== a && a.isSubGraphExpanded) a.collapseSubGraph(), c.add(a); else if (null === a) for (var d = b.selection.iterator; d.next(); ) { var e = d.value; e instanceof ig && e.isSubGraphExpanded && (e.collapseSubGraph(), c.add(e)); } b.aa('SubGraphCollapsed', c); } finally { b.Za('Collapse SubGraph'); } }; Gk.prototype.canCollapseSubGraph = function (a) { void 0 === a && (a = null); var b = this.diagram; if (b.isReadOnly) return !1; if (null !== a) return a instanceof ig && a.isSubGraphExpanded ? !0 : !1; for (a = b.selection.iterator; a.next(); ) if (((b = a.value), b instanceof ig && b.isSubGraphExpanded)) return !0; return !1; }; Gk.prototype.expandSubGraph = function (a) { void 0 === a && (a = null); var b = this.diagram; try { b.Aa('Expand SubGraph'); b.animationManager.Ti('Expand SubGraph'); var c = new E(); if (null !== a && !a.isSubGraphExpanded) a.expandSubGraph(), c.add(a); else if (null === a) for (var d = b.selection.iterator; d.next(); ) { var e = d.value; e instanceof ig && !e.isSubGraphExpanded && (e.expandSubGraph(), c.add(e)); } b.aa('SubGraphExpanded', c); } finally { b.Za('Expand SubGraph'); } }; Gk.prototype.canExpandSubGraph = function (a) { void 0 === a && (a = null); var b = this.diagram; if (b.isReadOnly) return !1; if (null !== a) return a instanceof ig && !a.isSubGraphExpanded ? !0 : !1; for (a = b.selection.iterator; a.next(); ) if (((b = a.value), b instanceof ig && !b.isSubGraphExpanded)) return !0; return !1; }; Gk.prototype.editTextBlock = function (a) { void 0 === a && (a = null); var b = this.diagram, c = b.toolManager.findTool('TextEditing'); if (null !== c) { if (null === a) { a = null; for (var d = b.selection.iterator; d.next(); ) { var e = d.value; if (e.canEdit()) { a = e; break; } } if (null === a) return; a = a.Yl(function (a) { return a instanceof vh && a.editable; }); } null !== a && ((b.currentTool = null), (c.textBlock = a), (b.currentTool = c)); } }; Gk.prototype.canEditTextBlock = function (a) { void 0 === a && (a = null); var b = this.diagram; if ( b.isReadOnly || b.isModelReadOnly || !b.allowTextEdit || null === b.toolManager.findTool('TextEditing') ) return !1; if (null !== a) { if (!(a instanceof vh)) return !1; a = a.part; if (null !== a && a.canEdit()) return !0; } else for (b = b.selection.iterator; b.next(); ) if ( ((a = b.value), a.canEdit() && ((a = a.Yl(function (a) { return a instanceof vh && a.editable; })), null !== a)) ) return !0; return !1; }; Gk.prototype.showContextMenu = function (a) { var b = this.diagram, c = b.toolManager.findTool('ContextMenu'); if ( null !== c && (void 0 === a && (a = 0 < b.selection.count ? b.selection.first() : b), (a = c.findObjectWithContextMenu(a)), null !== a) ) { var d = b.lastInput, e = null; a instanceof Y ? (e = a.ma(dd)) : b.isMouseOverDiagram || ((e = b.viewportBounds), (e = new G(e.x + e.width / 2, e.y + e.height / 2))); null !== e && ((d.viewPoint = b.wt(e)), (d.documentPoint = e), (d.left = !1), (d.right = !0), (d.up = !0)); b.currentTool = c; rh(c, !1, a); } }; Gk.prototype.canShowContextMenu = function (a) { var b = this.diagram, c = b.toolManager.findTool('ContextMenu'); if (null === c) return !1; void 0 === a && (a = 0 < b.selection.count ? b.selection.first() : b); return null === c.findObjectWithContextMenu(a) ? !1 : !0; }; Gk.prototype.computeEffectiveCollection = function (a, b) { var c = this.diagram, d = c.toolManager.findTool('Dragging'), e = c.currentTool === d; void 0 === b && (b = e ? d.dragOptions : c.Mk); d = new Lb(); if (null === a) return d; for (var f = a.iterator; f.next(); ) Jj(c, d, f.value, e, b); if (null !== c.draggedLink && b.dragsLink) return d; for (f = a.iterator; f.next(); ) (a = f.value), a instanceof S && ((b = a.fromNode), null === b || d.contains(b) ? ((b = a.toNode), null === b || d.contains(b) || d.remove(a)) : d.remove(a)); return d; }; pa.Object.defineProperties(Gk.prototype, { diagram: { get: function () { return this.C; }, }, copiesClipboardData: { get: function () { return this.u; }, set: function (a) { this.u = a; }, }, copiesConnectedLinks: { get: function () { return this.K; }, set: function (a) { this.K = a; }, }, deletesConnectedLinks: { get: function () { return this.Ub; }, set: function (a) { this.Ub = a; }, }, copiesTree: { get: function () { return this.Ma; }, set: function (a) { this.Ma = a; }, }, deletesTree: { get: function () { return this.Vb; }, set: function (a) { this.Vb = a; }, }, copiesParentKey: { get: function () { return this.La; }, set: function (a) { this.La = a; }, }, copiesGroupKey: { get: function () { return this.ba; }, set: function (a) { this.ba = a; }, }, archetypeGroupData: { get: function () { return this.l; }, set: function (a) { this.l = a; }, }, memberValidation: { get: function () { return this.ki; }, set: function (a) { this.ki = a; }, }, defaultScale: { get: function () { return this.diagram.defaultScale; }, set: function (a) { this.diagram.defaultScale = a; }, }, zoomFactor: { get: function () { return this.Vc; }, set: function (a) { 1 < a || A('zoomFactor must be larger than 1.0, not: ' + a); this.Vc = a; }, }, scrollToPartPause: { get: function () { return this.Kc; }, set: function (a) { this.Kc = a; }, }, }); Gk.className = 'CommandHandler'; wi = function () { return new Gk(); }; function Y() { nb(this); this.H = 4225027; this.lb = 1; this.cg = null; this.Ua = ''; this.dc = this.ib = null; this.sa = new G(NaN, NaN).freeze(); this.Nc = mc; this.Sf = fc; this.Rf = lc; this.tb = new Qc(); this.Eh = new Qc(); this.Qf = new Qc(); this.Ca = this.Tk = 1; this.zc = 0; this.we = Kk; this.Vg = Oc; this.pc = new N(NaN, NaN, NaN, NaN).freeze(); this.vb = new N(NaN, NaN, NaN, NaN).freeze(); this.qc = new N(0, 0, NaN, NaN).freeze(); this.P = this.Qo = this.Ro = null; this.yk = this.wb = Ed; this.cp = 0; this.ep = 1; this.Fg = 0; this.Ym = 1; this.tp = null; this.ip = -Infinity; this.yl = 0; this.zl = ac; this.Al = Og; this.hn = ''; this.bb = this.O = null; this.Ek = -1; this.Cl = this.kd = this.Th = this.Fl = null; this.ks = Zg; this.Bj = null; } var be, Zg, ah, Kk, Lk, Mk, Nk, Ok, Pk, Qk; Y.prototype.cloneProtected = function (a) { a.H = this.H | 6144; a.lb = this.lb; a.Ua = this.Ua; a.ib = this.ib; a.dc = this.dc; a.sa.assign(this.sa); a.Nc = this.Nc.I(); a.Sf = this.Sf.I(); a.Rf = this.Rf.I(); a.Qf = this.Qf.copy(); a.Ca = this.Ca; a.zc = this.zc; a.we = this.we; a.Vg = this.Vg.I(); a.pc.assign(this.pc); a.vb.assign(this.vb); a.qc.assign(this.qc); a.Qo = this.Qo; null !== this.P && (a.P = this.P.copy()); a.wb = this.wb.I(); a.yk = this.yk.I(); a.cp = this.cp; a.ep = this.ep; a.Fg = this.Fg; a.Ym = this.Ym; a.tp = this.tp; a.ip = this.ip; a.yl = this.yl; a.zl = this.zl.I(); a.Al = this.Al; a.hn = this.hn; null !== this.O && (a.O = this.O.copy()); a.bb = this.bb; a.Ek = this.Ek; null !== this.Th && (a.Th = Ga(this.Th)); null !== this.kd && (a.kd = this.kd.copy()); a.Cl = this.Cl; }; Y.prototype.Pw = function (a) { var b = this.Th; if (Ea(b)) for (var c = 0; c < b.length; c++) { if (b[c] === a) return; } else this.Th = b = []; b.push(a); }; Y.prototype.pf = function (a) { a.Ro = null; a.Bj = null; a.s(); }; Y.prototype.clone = function () { var a = new this.constructor(); this.cloneProtected(a); if (null !== this.Th) for (var b = 0; b < this.Th.length; b++) { var c = this.Th[b]; a[c] = this[c]; } return a; }; Y.prototype.copy = function () { return this.clone(); }; t = Y.prototype; t.fb = function (a) { a.classType === S ? 0 === a.name.indexOf('Orient') ? (this.segmentOrientation = a) : A('Unknown Link enum value for GraphObject.segmentOrientation property: ' + a) : a.classType === Y && (this.stretch = a); }; t.toString = function () { return Pa(this.constructor) + '#' + Bb(this); }; function Rk(a) { null === a.O && (a.O = new Sk()); } t.Hc = function () { if (null === this.P) { var a = new Tk(); a.Og = Sc; a.nh = Sc; a.Mg = 10; a.lh = 10; a.Ng = 0; a.mh = 0; this.P = a; } }; t.ab = function (a, b, c, d, e, f, g) { var h = this.part; if ( null !== h && (h.pk(a, b, c, d, e, f, g), c === this && a === af && Uk(this) && Vk(this, h, b), this instanceof X && c === h && 0 !== (h.H & 16777216) && null !== h.data) ) for (a = this.Y.j, c = a.length, d = 0; d < c; d++) (e = a[d]), e instanceof X && Bj(e, function (a) { null !== a.data && 0 !== (a.H & 16777216) && a.Ea(b); }); }; function Vk(a, b, c) { var d = a.Ii(); if (null !== d) for (var e = a.bb.iterator; e.next(); ) { var f = e.value, g = null; if (null !== f.sourceName) { g = Wk(f, d, a); if (null === g) continue; f.xq(a, g, c, null); } else if (f.isToModel) { var h = b.diagram; null === h || h.skipsModelSourceBindings || f.xq(a, h.model.modelData, c, d); } else { h = d.data; if (null === h) continue; var k = b.diagram; null === k || k.skipsModelSourceBindings || f.xq(a, h, c, d); } g === a && ((h = d.Ps(f.Yi)), null !== h && f.Yv(h, g, c)); } } t.Ps = function (a) { return this.Ek === a ? this : null; }; t.g = function (a, b, c) { this.ab(af, a, this, b, c); }; function Xk(a, b, c, d, e) { var f = a.pc, g = a.Qf; g.reset(); Yk(a, g, b, c, d, e); a.Qf = g; f.h(b, c, d, e); g.bt() || g.Vv(f); } function Zk(a, b, c, d) { if (!1 === a.pickable) return !1; d.multiply(a.transform); return c ? a.Ic(b, d) : a.vh(b, d); } t.hx = function (a, b, c) { if (!1 === this.pickable) return !1; var d = this.naturalBounds; b = a.Ce(b); return c ? Rb(a.x, a.y, 0, 0, 0, d.height) <= b || Rb(a.x, a.y, 0, d.height, d.width, d.height) <= b || Rb(a.x, a.y, d.width, d.height, d.width, 0) <= b || Rb(a.x, a.y, d.width, 0, 0, 0) <= b : a.cd(0, 0) <= b && a.cd(0, d.height) <= b && a.cd(d.width, 0) <= b && a.cd(d.width, d.height) <= b; }; t.Zd = function () { return !0; }; t.da = function (a) { var b = G.alloc(); b.assign(a); this.transform.ta(b); var c = this.actualBounds; if (!c.o()) return G.free(b), !1; var d = this.diagram; if (null !== d && d.Se) { var e = d.bm('extraTouchThreshold'), f = d.bm('extraTouchArea'), g = f / 2, h = this.naturalBounds; d = this.De() * d.scale; var k = 1 / d; if (h.width * d < e && h.height * d < e) return ( (a = Cc(c.x - g * k, c.y - g * k, c.width + f * k, c.height + f * k, b.x, b.y)), G.free(b), a ); } e = !1; if ( this instanceof pf || this instanceof W ? Cc(c.x - 5, c.y - 5, c.width + 10, c.height + 10, b.x, b.y) : c.da(b) ) this.kd && !this.kd.da(b) ? (e = !1) : null !== this.dc && c.da(b) ? (e = !0) : null !== this.ib && this.qc.da(a) ? (e = !0) : (e = this.wh(a)); G.free(b); return e; }; t.wh = function (a) { var b = this.naturalBounds; return Cc(0, 0, b.width, b.height, a.x, a.y); }; t.nf = function (a) { if (0 === this.angle) return this.actualBounds.nf(a); var b = this.naturalBounds; b = N.allocAt(0, 0, b.width, b.height); var c = this.transform, d = !1, e = G.allocAt(a.x, a.y); b.da(c.Ud(e)) && (e.h(a.x, a.bottom), b.da(c.Ud(e)) && (e.h(a.right, a.bottom), b.da(c.Ud(e)) && (e.h(a.right, a.y), b.da(c.Ud(e)) && (d = !0)))); G.free(e); N.free(b); return d; }; t.vh = function (a, b) { if (void 0 === b) return a.nf(this.actualBounds); var c = this.naturalBounds, d = !1, e = G.allocAt(0, 0); a.da(b.ta(e)) && (e.h(0, c.height), a.da(b.ta(e)) && (e.h(c.width, c.height), a.da(b.ta(e)) && (e.h(c.width, 0), a.da(b.ta(e)) && (d = !0)))); G.free(e); return d; }; t.Ic = function (a, b) { if (void 0 === b && ((b = this.transform), 0 === this.angle)) return a.Ic(this.actualBounds); var c = this.naturalBounds, d = G.allocAt(0, 0), e = G.allocAt(0, c.height), f = G.allocAt(c.width, c.height), g = G.allocAt(c.width, 0), h = !1; if (a.da(b.ta(d)) || a.da(b.ta(e)) || a.da(b.ta(f)) || a.da(b.ta(g))) h = !0; else { c = N.allocAt(0, 0, c.width, c.height); var k = G.allocAt(a.x, a.y); c.da(b.Ud(k)) ? (h = !0) : (k.h(a.x, a.bottom), c.da(b.Ud(k)) ? (h = !0) : (k.h(a.right, a.bottom), c.da(b.Ud(k)) ? (h = !0) : (k.h(a.right, a.y), c.da(b.Ud(k)) && (h = !0)))); G.free(k); N.free(c); !h && (H.Zs(a, d, e) || H.Zs(a, e, f) || H.Zs(a, f, g) || H.Zs(a, g, d)) && (h = !0); } G.free(d); G.free(e); G.free(f); G.free(g); return h; }; t.ma = function (a, b) { void 0 === b && (b = new G()); if (a instanceof O) { var c = this.naturalBounds; b.h(a.x * c.width + a.offsetX, a.y * c.height + a.offsetY); } else b.set(a); this.rd.ta(b); return b; }; t.Yp = function (a) { void 0 === a && (a = new N()); var b = this.naturalBounds, c = this.rd, d = G.allocAt(0, 0).transform(c); a.h(d.x, d.y, 0, 0); d.h(b.width, 0).transform(c); Bc(a, d.x, d.y, 0, 0); d.h(b.width, b.height).transform(c); Bc(a, d.x, d.y, 0, 0); d.h(0, b.height).transform(c); Bc(a, d.x, d.y, 0, 0); G.free(d); return a; }; t.Li = function () { var a = this.rd; 1 === a.m11 && 0 === a.m12 ? (a = 0) : ((a = (180 * Math.atan2(a.m12, a.m11)) / Math.PI), 0 > a && (a += 360)); return a; }; t.De = function () { if ((0 !== (this.H & 4096)) === !1) return this.Tk; var a = this.Ca; return null !== this.panel ? a * this.panel.De() : a; }; t.Vs = function (a, b) { void 0 === b && (b = new G()); b.assign(a); this.rd.Ud(b); return b; }; t.Tc = function (a, b, c) { return this.ck(a.x, a.y, b.x, b.y, c); }; t.ck = function (a, b, c, d, e) { var f = this.transform, g = 1 / (f.m11 * f.m22 - f.m12 * f.m21), h = f.m22 * g, k = -f.m12 * g, l = -f.m21 * g, m = f.m11 * g, n = g * (f.m21 * f.dy - f.m22 * f.dx), p = g * (f.m12 * f.dx - f.m11 * f.dy); if (null !== this.areaBackground) return (f = this.actualBounds), H.Tc(f.left, f.top, f.right, f.bottom, a, b, c, d, e); g = a * h + b * l + n; a = a * k + b * m + p; b = c * h + d * l + n; c = c * k + d * m + p; e.h(0, 0); d = this.naturalBounds; c = H.Tc(0, 0, d.width, d.height, g, a, b, c, e); e.transform(f); return c; }; Y.prototype.measure = function (a, b, c, d) { if (!1 !== oj(this)) { var e = this.Vg, f = e.right + e.left; e = e.top + e.bottom; a = Math.max(a - f, 0); b = Math.max(b - e, 0); c = Math.max((c || 0) - f, 0); d = Math.max((d || 0) - e, 0); f = this.angle; e = this.desiredSize; var g = 0; this instanceof W && (g = this.strokeWidth); 90 === f || 270 === f ? ((a = isFinite(e.height) ? e.height + g : a), (b = isFinite(e.width) ? e.width + g : b)) : ((a = isFinite(e.width) ? e.width + g : a), (b = isFinite(e.height) ? e.height + g : b)); e = c || 0; g = d || 0; var h = this instanceof X; switch ($k(this, !0)) { case Zg: g = e = 0; h && (b = a = Infinity); break; case be: isFinite(a) && a > c && (e = a); isFinite(b) && b > d && (g = b); break; case Lk: isFinite(a) && a > c && (e = a); g = 0; h && (b = Infinity); break; case Mk: isFinite(b) && b > d && (g = b), (e = 0), h && (a = Infinity); } h = this.maxSize; var k = this.minSize; e > h.width && k.width < h.width && (e = h.width); g > h.height && k.height < h.height && (g = h.height); c = Math.max(e / this.scale, k.width); d = Math.max(g / this.scale, k.height); h.width < c && (c = Math.min(k.width, c)); h.height < d && (d = Math.min(k.height, d)); a = Math.min(h.width, a); b = Math.min(h.height, b); a = Math.max(c, a); b = Math.max(d, b); if (90 === f || 270 === f) (f = a), (a = b), (b = f), (f = c), (c = d), (d = f); this.pc.ha(); this.hm(a, b, c, d); this.pc.freeze(); this.pc.o() || A( 'Non-real measuredBounds has been set. Object ' + this + ', measuredBounds: ' + this.pc.toString(), ); jj(this, !1); } }; Y.prototype.hm = function () {}; Y.prototype.vg = function () { return !1; }; Y.prototype.arrange = function (a, b, c, d, e) { this.fl(); var f = N.alloc(); f.assign(this.vb); this.vb.ha(); !1 === pj(this) ? this.vb.h(a, b, c, d) : this.uh(a, b, c, d); this.vb.freeze(); void 0 === e ? (this.kd = null) : (this.kd = e); c = !1; if (void 0 !== e) c = !0; else if ( ((e = this.panel), null === e || (e.type !== X.TableRow && e.type !== X.TableColumn) || (e = e.panel), null !== e && ((e = e.qc), (d = this.measuredBounds), null !== this.areaBackground && (d = this.vb), (c = b + d.height), (d = a + d.width), (c = !(0 <= a + 0.05 && d <= e.width + 0.05 && 0 <= b + 0.05 && c <= e.height + 0.05)), this instanceof vh && ((a = this.naturalBounds), this.Qr > a.height || this.metrics.maxLineWidth > a.width))) ) c = !0; this.H = c ? this.H | 256 : this.H & -257; this.vb.o() || A( 'Non-real actualBounds has been set. Object ' + this + ', actualBounds: ' + this.vb.toString(), ); this.kt(f, this.vb); al(this, !1); N.free(f); }; t = Y.prototype; t.uh = function () {}; function bl(a, b, c, d, e) { a.vb.h(b, c, d, e); if (!a.desiredSize.o()) { var f = a.pc; c = a.Vg; b = c.right + c.left; var g = c.top + c.bottom; c = f.width + b; f = f.height + g; d += b; e += g; b = $k(a, !0); c === d && f === e && (b = Zg); switch (b) { case Zg: if (c > d || f > e) jj(a, !0), a.measure(c > d ? d : c, f > e ? e : f, 0, 0); break; case be: jj(a, !0); a.measure(d, e, 0, 0); break; case Lk: jj(a, !0); a.measure(d, f, 0, 0); break; case Mk: jj(a, !0), a.measure(c, e, 0, 0); } } } t.kt = function (a, b) { var c = this.part; null !== c && null !== c.diagram && ((c.selectionObject !== this && c.resizeObject !== this && c.rotateObject !== this) || cl(c, !0), this.R(), xc(a, b) || (c.zh(), this.Fo(c))); }; t.Fo = function (a) { null !== this.portId && (cl(a, !0), a instanceof V && dl(a, this)); }; t.hc = function (a, b) { if (this.visible) { var c = this instanceof X && (this.type === X.TableRow || this.type === X.TableColumn), d = this.vb; if (c || (0 !== d.width && 0 !== d.height && !isNaN(d.x) && !isNaN(d.y))) { var e = this.opacity; if (0 !== e) { var f = 1; 1 !== e && ((f = a.globalAlpha), (a.globalAlpha = f * e)); if (!this.bx(a, b)) if (c) el(this, a, b); else { this instanceof S && this.hk(!1); c = this.transform; var g = this.panel; (0 !== (this.H & 4096)) === !0 && fl(this); var h = this.part, k = !1, l = 0; if (h && b.Ee('drawShadows') && (k = h.isShadowed)) { var m = h.ui; l = Math.max(m.y, m.x) * b.scale * b.Mb; } if (!(m = b.nj)) { var n = this.naturalBounds; m = this.Eh; var p = m.m11, q = m.m21, r = m.dx, u = m.m12, x = m.m22, v = m.dy, z, y = (z = 0); m = z * p + y * q + r; var B = z * u + y * x + v; z = n.width + l; y = 0; var C = z * p + y * q + r; z = z * u + y * x + v; y = Math.min(m, C); var I = Math.min(B, z); var L = Math.max(m + 0, C) - y; var J = Math.max(B + 0, z) - I; m = y; B = I; z = n.width + l; y = n.height + l; C = z * p + y * q + r; z = z * u + y * x + v; y = Math.min(m, C); I = Math.min(B, z); L = Math.max(m + L, C) - y; J = Math.max(B + J, z) - I; m = y; B = I; z = 0; y = n.height + l; C = z * p + y * q + r; z = z * u + y * x + v; y = Math.min(m, C); I = Math.min(B, z); L = Math.max(m + L, C) - y; J = Math.max(B + J, z) - I; m = y; B = I; l = b.viewportBounds; n = l.x; p = l.y; m = !(m > l.$ + n || n > L + m || B > l.Z + p || p > J + B); } if (m) { m = 0 !== (this.H & 256); a.clipInsteadOfFill && (m = !1); this instanceof vh && (a.font = this.font); if (m) { B = g.Zd() ? g.naturalBounds : g.actualBounds; null !== this.kd ? ((n = this.kd), (L = n.x), (J = n.y), (l = n.width), (n = n.height)) : ((L = Math.max(d.x, B.x)), (J = Math.max(d.y, B.y)), (l = Math.min(d.right, B.right) - L), (n = Math.min(d.bottom, B.bottom) - J)); if (L > d.width + d.x || d.x > B.width + B.x) { 1 !== e && (a.globalAlpha = f); return; } a.save(); a.beginPath(); a.rect(L, J, l, n); a.clip(); } if (this.vg()) { if (!h.isVisible()) { 1 !== e && (a.globalAlpha = f); return; } k && ((B = h.ui), a.Ov(B.x * b.scale * b.Mb, B.y * b.scale * b.Mb, h.Od), gl(a), (a.shadowColor = h.Jj)); } !0 === this.shadowVisible ? gl(a) : !1 === this.shadowVisible && hl(a); h = this.naturalBounds; null !== this.dc && (ji(this, a, this.dc, !0, !0, h, d), this.dc instanceof il && this.dc.type === jl ? (a.beginPath(), a.rect(d.x, d.y, d.width, d.height), a.Td(this.dc)) : a.fillRect(d.x, d.y, d.width, d.height)); a.transform(c.m11, c.m12, c.m21, c.m22, c.dx, c.dy); k && ((null !== g && 0 !== (g.H & 512)) || (null !== g && (g.type === X.Auto || g.type === X.Spot) && g.zb() !== this)) && null === this.shadowVisible && hl(a); null !== this.ib && ((l = this.naturalBounds), (L = B = 0), (J = l.width), (l = l.height), (n = 0), this instanceof W && ((l = this.qa.bounds), (B = l.x), (L = l.y), (J = l.width), (l = l.height), (n = this.strokeWidth)), ji(this, a, this.ib, !0, !1, h, d), this.ib instanceof il && this.ib.type === jl ? (a.beginPath(), a.rect(B - n / 2, L - n / 2, J + n, l + n), a.Td(this.ib)) : a.fillRect(B - n / 2, L - n / 2, J + n, l + n)); k && (null !== this.ib || null !== this.dc || (null !== g && 0 !== (g.H & 512)) || (null !== g && (g.type === X.Auto || g.type === X.Spot) && g.zb() !== this)) ? (kl(this, !0), null === this.shadowVisible && hl(a)) : kl(this, !1); this.Ei(a, b); k && (0 !== (this.H & 512)) === !0 && gl(a); this.vg() && k && hl(a); m ? (a.restore(), this instanceof X ? a.Rc(!0) : a.Rc(!1)) : c.bt() || ((b = 1 / (c.m11 * c.m22 - c.m12 * c.m21)), a.transform( c.m22 * b, -c.m12 * b, -c.m21 * b, c.m11 * b, b * (c.m21 * c.dy - c.m22 * c.dx), b * (c.m12 * c.dx - c.m11 * c.dy), )); } } 1 !== e && (a.globalAlpha = f); } } } }; t.bx = function () { return !1; }; function el(a, b, c) { var d = a.vb, e = a.qc; null !== a.dc && (ji(a, b, a.dc, !0, !0, e, d), a.dc instanceof il && a.dc.type === jl ? (b.beginPath(), b.rect(d.x, d.y, d.width, d.height), b.Td(a.dc)) : b.fillRect(d.x, d.y, d.width, d.height)); null !== a.ib && (ji(a, b, a.ib, !0, !1, e, d), a.ib instanceof il && a.ib.type === jl ? (b.beginPath(), b.rect(d.x, d.y, d.width, d.height), b.Td(a.ib)) : b.fillRect(d.x, d.y, d.width, d.height)); a.Ei(b, c); } t.Ei = function () {}; function ji(a, b, c, d, e, f, g) { if (null !== c) { var h = 1, k = 1; if ('string' === typeof c) d ? (b.fillStyle = c) : (b.strokeStyle = c); else if (c.type === ll) d ? (b.fillStyle = c.color) : (b.strokeStyle = c.color); else { h = f.width; k = f.height; e && ((h = g.width), (k = g.height)); if ((f = b instanceof ml) && c.de && (c.type === nl || (c.Hk === h && c.Kt === k))) var l = c.de; else { var m = 0, n = 0, p = 0, q = 0, r = 0, u = 0; u = r = 0; e && ((r = g.x), (u = g.y)); m = c.start.x * h + c.start.offsetX; n = c.start.y * k + c.start.offsetY; p = c.end.x * h + c.end.offsetX; q = c.end.y * k + c.end.offsetY; m += r; p += r; n += u; q += u; if (c.type === ol) l = b.createLinearGradient(m, n, p, q); else if (c.type === jl) (u = isNaN(c.endRadius) ? Math.max(h, k) / 2 : c.endRadius), isNaN(c.startRadius) ? ((r = 0), (u = Math.max(h, k) / 2)) : (r = c.startRadius), (l = b.createRadialGradient(m, n, r, p, q, u)); else if (c.type === nl) try { l = b.createPattern(c.pattern, 'repeat'); } catch (v) { l = null; } if (c.type !== nl && ((e = c.colorStops), null !== e)) for (e = e.iterator; e.next(); ) l.addColorStop(e.key, e.value); if ( f && ((c.de = l), null !== l && ((c.Hk = h), (c.Kt = k)), null === l && c.type === nl && -1 !== c.Hk) ) { c.Hk = -1; var x = a.diagram; null !== x && -1 === c.Hk && ua(function () { x.uf(); }, 600); } } d ? (b.fillStyle = l) : (b.strokeStyle = l); } } } t.tg = function (a) { if (a instanceof X) a: { if (this !== a && null !== a) for (var b = this.panel; null !== b; ) { if (b === a) { a = !0; break a; } b = b.panel; } a = !1; } else a = !1; return a; }; t.tf = function () { if (!this.visible) return !1; var a = this.panel; return null !== a ? a.tf() : !0; }; t.ug = function () { for (var a = this instanceof X ? this : this.panel; null !== a && a.isEnabled; ) a = a.panel; return null === a; }; function fl(a) { if ((0 !== (a.H & 2048)) === !0) { var b = a.tb; b.reset(); if (!a.vb.o() || !a.pc.o()) { pl(a, !1); return; } b.translate(a.vb.x - a.pc.x, a.vb.y - a.pc.y); if (1 !== a.scale || 0 !== a.angle) { var c = a.naturalBounds; Yk(a, b, c.x, c.y, c.width, c.height); } pl(a, !1); ql(a, !0); } (0 !== (a.H & 4096)) === !0 && ((b = a.panel), null === b ? (a.Eh.set(a.tb), (a.Tk = a.scale), ql(a, !1)) : null !== b.rd && ((c = a.Eh), c.reset(), b.Zd() ? c.multiply(b.Eh) : null !== b.panel && c.multiply(b.panel.Eh), c.multiply(a.tb), (a.Tk = a.scale * b.Tk), ql(a, !1))); } function Yk(a, b, c, d, e, f) { 1 !== a.scale && b.scale(a.scale); if (0 !== a.angle) { var g = dd; a.vg() && a.locationSpot.gb() && (g = a.locationSpot); var h = G.alloc(); if (a instanceof T && a.locationObject !== a) for ( c = a.locationObject, d = c.naturalBounds, h.rk(d.x, d.y, d.width, d.height, g), c.Qf.ta(h), h.offset(-c.measuredBounds.x, -c.measuredBounds.y), g = c.panel; null !== g && g !== a; ) g.Qf.ta(h), h.offset(-g.measuredBounds.x, -g.measuredBounds.y), (g = g.panel); else h.rk(c, d, e, f, g); b.rotate(a.angle, h.x, h.y); G.free(h); } } t.s = function (a) { void 0 === a && (a = !1); if (!0 !== oj(this)) { jj(this, !0); al(this, !0); var b = this.panel; null === b || a || b.s(); } }; t.dm = function () { !0 !== oj(this) && (jj(this, !0), al(this, !0)); }; function rl(a) { if (!1 === pj(a)) { var b = a.panel; null !== b ? b.s() : a.vg() && ((b = a.diagram), null !== b && (b.Dd.add(a), a instanceof V && a.ed(), b.cc())); al(a, !0); } } t.fl = function () { (0 !== (this.H & 2048)) === !1 && (pl(this, !0), ql(this, !0)); }; t.jv = function () { ql(this, !0); }; t.R = function () { var a = this.part; null !== a && a.R(); }; function $k(a, b) { var c = a.stretch, d = a.panel; if (null !== d && d.type === X.Table) return sl(a, d.getRowDefinition(a.row), d.getColumnDefinition(a.column), b); if (null !== d && d.type === X.Auto && d.zb() === a) return tl(a, be, b); if (c === Kk) { if (null !== d) { if (d.type === X.Spot && d.zb() === a) return tl(a, be, b); c = d.defaultStretch; return c === Kk ? tl(a, Zg, b) : tl(a, c, b); } return tl(a, Zg, b); } return tl(a, c, b); } function sl(a, b, c, d) { var e = a.stretch; if (e !== Kk) return tl(a, e, d); var f = (e = null); switch (b.stretch) { case Mk: f = !0; break; case be: f = !0; } switch (c.stretch) { case Lk: e = !0; break; case be: e = !0; } b = a.panel.defaultStretch; null === e && (e = b === Lk || b === be); null === f && (f = b === Mk || b === be); return !0 === e && !0 === f ? tl(a, be, d) : !0 === e ? tl(a, Lk, d) : !0 === f ? tl(a, Mk, d) : tl(a, Zg, d); } function tl(a, b, c) { if (c) return b; if (b === Zg) return Zg; c = a.desiredSize; if (c.o()) return Zg; a = a.angle; if (!isNaN(c.width)) if (90 !== a && 270 !== a) { if (b === Lk) return Zg; if (b === be) return Mk; } else { if (b === Mk) return Zg; if (b === be) return Lk; } if (!isNaN(c.height)) if (90 !== a && 270 !== a) { if (b === Mk) return Zg; if (b === be) return Lk; } else { if (b === Lk) return Zg; if (b === be) return Mk; } return b; } function kl(a, b) { a.H = b ? a.H | 512 : a.H & -513; } function Uk(a) { return 0 !== (a.H & 1024); } function ul(a, b) { a.H = b ? a.H | 1024 : a.H & -1025; } function pl(a, b) { a.H = b ? a.H | 2048 : a.H & -2049; } function ql(a, b) { a.H = b ? a.H | 4096 : a.H & -4097; } function oj(a) { return 0 !== (a.H & 8192); } function jj(a, b) { a.H = b ? a.H | 8192 : a.H & -8193; } function pj(a) { return 0 !== (a.H & 16384); } function al(a, b) { a.H = b ? a.H | 16384 : a.H & -16385; } t.Ui = function (a) { this.cg = a; }; t.Mv = function () {}; t.Lv = function (a) { this.sa = a; rl(this); return !0; }; t.vt = function (a, b) { this.sa.h(a, b); this.fl(); }; function vl(a) { var b = a.part; if (b instanceof V && (null !== a.portId || a === b.port)) { var c = b.diagram; null === c || c.undoManager.isUndoingRedoing || dl(b, a); } } function wl(a) { var b = a.diagram; null === b || b.undoManager.isUndoingRedoing || (a instanceof X ? a instanceof V ? a.ed() : a.ym(a, function (a) { vl(a); }) : vl(a)); } t.bind = function (a) { a.Qd = this; var b = this.Ii(); null !== b && xl(b) && A('Cannot add a Binding to a template that has already been copied: ' + a); null === this.bb && (this.bb = new E()); this.bb.add(a); }; t.Ii = function () { for (var a = this instanceof X ? this : this.panel; null !== a; ) { if (null !== a.Rh) return a; a = a.panel; } return null; }; t.Nv = function (a) { vj(this, a); }; function yl(a, b) { for (var c = 1; c < arguments.length; ++c); c = arguments; var d = null, e = null; if ('function' === typeof a) e = a; else if ('string' === typeof a) { var f = zl.J(a); 'function' === typeof f ? ((c = Ga(arguments)), (d = f(c)), Ca(d) || A( 'GraphObject.make invoked object builder "' + a + '", but it did not return an Object', )) : (e = w.go[a]); } null === d && ((void 0 !== e && null !== e && e.constructor) || A( 'GraphObject.make requires a class function or GoJS class name or name of an object builder, not: ' + a, ), (d = new e())); e = 1; if (d instanceof P && 1 < c.length) { f = d; var g = c[1]; if ('string' === typeof g || g instanceof HTMLDivElement) Ai(f, g), e++; } for (; e < c.length; e++) (f = c[e]), void 0 === f ? A( 'Undefined value at argument ' + e + ' for object being constructed by GraphObject.make: ' + d, ) : Al(d, f); return d; } function Al(a, b) { if ('string' === typeof b) if (a instanceof vh) a.text = b; else if (a instanceof W) a.figure = b; else if (a instanceof Yj) a.source = b; else if (a instanceof X) (b = Bl.J(b)), null !== b && (a.type = b); else if (a instanceof il) { var c = qb(il, b); null !== c ? (a.type = c) : A('Unknown Brush type as an argument to GraphObject.make: ' + b); } else a instanceof $d ? ((b = qb($d, b)), null !== b && (a.type = b)) : a instanceof Ve && ((b = qb(Ve, b)), null !== b && (a.type = b)); else if (b instanceof Y) a instanceof X || A('A GraphObject can only be added to a Panel, not to: ' + a), a.add(b); else if (b instanceof Pj) { var d; b.isRow && 'function' === typeof a.getRowDefinition ? (d = a.getRowDefinition(b.index)) : b.isRow || 'function' !== typeof a.getColumnDefinition || (d = a.getColumnDefinition(b.index)); d instanceof Pj ? d.Vl(b) : A( 'A RowColumnDefinition can only be added to an object that implements getRowDefinition/getColumnDefinition, not to: ' + a, ); } else if (b instanceof D) 'function' === typeof a.fb && a.fb(b); else if (b instanceof Cl) a.type = b; else if (b instanceof Ei) a instanceof Y ? a.bind(b) : a instanceof Pj ? a.bind(b) : A('A Binding can only be applied to a GraphObject or RowColumnDefinition, not to: ' + a); else if (b instanceof Ue) a instanceof $d ? a.figures.add(b) : A('A PathFigure can only be added to a Geometry, not to: ' + a); else if (b instanceof Ve) a instanceof Ue ? a.segments.add(b) : A('A PathSegment can only be added to a PathFigure, not to: ' + a); else if (b instanceof yi) a instanceof P ? (a.layout = b) : a instanceof ig ? (a.layout = b) : A('A Layout can only be assigned to a Diagram or a Group, not to: ' + a); else if (Array.isArray(b)) for (c = 0; c < b.length; c++) Al(a, b[c]); else if ('object' === typeof b && null !== b) if (a instanceof il) { c = new tb(); for (var e in b) (d = parseFloat(e)), isNaN(d) ? (c[e] = b[e]) : a.addColorStop(d, b[e]); vj(a, c); } else if (a instanceof Pj) { void 0 !== b.row ? ((e = b.row), (void 0 === e || null === e || Infinity === e || isNaN(e) || 0 > e) && A( 'Must specify non-negative integer row for RowColumnDefinition ' + b + ', not: ' + e, ), (a.isRow = !0), (a.index = e)) : void 0 !== b.column && ((e = b.column), (void 0 === e || null === e || Infinity === e || isNaN(e) || 0 > e) && A( 'Must specify non-negative integer column for RowColumnDefinition ' + b + ', not: ' + e, ), (a.isRow = !1), (a.index = e)); e = new tb(); for (c in b) 'row' !== c && 'column' !== c && (e[c] = b[c]); vj(a, e); } else vj(a, b); else A('Unknown initializer "' + b + '" for object being constructed by GraphObject.make: ' + a); } function Dl(a, b) { zl.add(a, b); } function El(a, b, c) { void 0 === c && (c = null); var d = a[1]; if ('function' === typeof c ? c(d) : 'string' === typeof d) return a.splice(1, 1), d; if (void 0 === b) throw Error( 'no ' + ('function' === typeof c ? 'satisfactory' : 'string') + ' argument for GraphObject builder ' + a[0], ); return b; } pa.Object.defineProperties(Y.prototype, { shadowVisible: { get: function () { return this.Cl; }, set: function (a) { var b = this.Cl; b !== a && ((this.Cl = a), this.R(), this.g('shadowVisible', b, a)); }, }, enabledChanged: { get: function () { return null !== this.O ? this.O.An : null; }, set: function (a) { Rk(this); var b = this.O.An; b !== a && ((this.O.An = a), this.g('enabledChanged', b, a)); }, }, segmentOrientation: { get: function () { return this.Al; }, set: function (a) { var b = this.Al; b !== a && ((this.Al = a), this.s(), this.g('segmentOrientation', b, a), a === Og && (this.angle = 0)); }, }, segmentIndex: { get: function () { return this.ip; }, set: function (a) { a = Math.round(a); var b = this.ip; b !== a && ((this.ip = a), this.s(), this.g('segmentIndex', b, a)); }, }, segmentFraction: { get: function () { return this.yl; }, set: function (a) { isNaN(a) ? (a = 0) : 0 > a ? (a = 0) : 1 < a && (a = 1); var b = this.yl; b !== a && ((this.yl = a), this.s(), this.g('segmentFraction', b, a)); }, }, segmentOffset: { get: function () { return this.zl; }, set: function (a) { var b = this.zl; b.A(a) || ((this.zl = a = a.I()), this.s(), this.g('segmentOffset', b, a)); }, }, stretch: { get: function () { return this.we; }, set: function (a) { var b = this.we; b !== a && ((this.we = a), this.s(), this.g('stretch', b, a)); }, }, name: { get: function () { return this.Ua; }, set: function (a) { var b = this.Ua; b !== a && ((this.Ua = a), null !== this.part && (this.part.wj = null), this.g('name', b, a)); }, }, opacity: { get: function () { return this.lb; }, set: function (a) { var b = this.lb; b !== a && ((0 > a || 1 < a) && ya(a, '0 <= value <= 1', Y, 'opacity'), (this.lb = a), this.g('opacity', b, a), (a = this.diagram), (b = this.part), null !== a && null !== b && a.R(zj(b, b.actualBounds))); }, }, visible: { get: function () { return 0 !== (this.H & 1); }, set: function (a) { var b = 0 !== (this.H & 1); b !== a && ((this.H ^= 1), this.g('visible', b, a), (b = this.panel), null !== b ? b.s() : this.vg() && this.Lb(a), this.R(), wl(this)); }, }, pickable: { get: function () { return 0 !== (this.H & 2); }, set: function (a) { var b = 0 !== (this.H & 2); b !== a && ((this.H ^= 2), this.g('pickable', b, a)); }, }, fromLinkableDuplicates: { get: function () { return 0 !== (this.H & 4); }, set: function (a) { var b = 0 !== (this.H & 4); b !== a && ((this.H ^= 4), this.g('fromLinkableDuplicates', b, a)); }, }, fromLinkableSelfNode: { get: function () { return 0 !== (this.H & 8); }, set: function (a) { var b = 0 !== (this.H & 8); b !== a && ((this.H ^= 8), this.g('fromLinkableSelfNode', b, a)); }, }, toLinkableDuplicates: { get: function () { return 0 !== (this.H & 16); }, set: function (a) { var b = 0 !== (this.H & 16); b !== a && ((this.H ^= 16), this.g('toLinkableDuplicates', b, a)); }, }, toLinkableSelfNode: { get: function () { return 0 !== (this.H & 32); }, set: function (a) { var b = 0 !== (this.H & 32); b !== a && ((this.H ^= 32), this.g('toLinkableSelfNode', b, a)); }, }, isPanelMain: { get: function () { return 0 !== (this.H & 64); }, set: function (a) { var b = 0 !== (this.H & 64); b !== a && ((this.H ^= 64), this.s(), this.g('isPanelMain', b, a)); }, }, isActionable: { get: function () { return 0 !== (this.H & 128); }, set: function (a) { var b = 0 !== (this.H & 128); b !== a && ((this.H ^= 128), this.g('isActionable', b, a)); }, }, areaBackground: { get: function () { return this.dc; }, set: function (a) { var b = this.dc; b !== a && (null !== a && Fl(a, 'GraphObject.areaBackground'), a instanceof il && a.freeze(), (this.dc = a), this.R(), this.g('areaBackground', b, a)); }, }, background: { get: function () { return this.ib; }, set: function (a) { var b = this.ib; b !== a && (null !== a && Fl(a, 'GraphObject.background'), a instanceof il && a.freeze(), (this.ib = a), this.R(), this.g('background', b, a)); }, }, part: { get: function () { if (this.vg()) return this; if (null !== this.Bj) return this.Bj; var a; for (a = this.panel; a; ) { if (a instanceof T) return (this.Bj = a); a = a.panel; } return null; }, }, svg: { get: function () { return this.As; }, set: function (a) { this.As = a; }, }, panel: { get: function () { return this.cg; }, }, layer: { get: function () { var a = this.part; return null !== a ? a.layer : null; }, }, diagram: { get: function () { var a = this.part; return null !== a ? a.diagram : null; }, }, position: { get: function () { return this.sa; }, set: function (a) { var b = a.x, c = a.y, d = this.sa, e = d.x, f = d.y; (e === b || (isNaN(e) && isNaN(b))) && (f === c || (isNaN(f) && isNaN(c))) ? this.Mv() : ((a = a.I()), this.Lv(a, d) && this.g('position', d, a)); }, }, actualBounds: { get: function () { return this.vb; }, }, scale: { get: function () { return this.Ca; }, set: function (a) { var b = this.Ca; b !== a && (0 >= a && A('GraphObject.scale for ' + this + ' must be greater than zero, not: ' + a), (this.Ca = a), this.s(), this.g('scale', b, a)); }, }, angle: { get: function () { return this.zc; }, set: function (a) { var b = this.zc; b !== a && ((a %= 360), 0 > a && (a += 360), b !== a && ((this.zc = a), wl(this), this.s(), this.g('angle', b, a))); }, }, desiredSize: { get: function () { return this.Nc; }, set: function (a) { var b = a.width, c = a.height, d = this.Nc, e = d.width, f = d.height; ((e === b || (isNaN(e) && isNaN(b))) && (f === c || (isNaN(f) && isNaN(c)))) || ((this.Nc = a = a.I()), this.s(), this instanceof W && this.ac(), this.g('desiredSize', d, a), Uk(this) && ((a = this.part), null !== a && (Vk(this, a, 'width'), Vk(this, a, 'height')))); }, }, width: { get: function () { return this.Nc.width; }, set: function (a) { var b = this.Nc.width; b === a || (isNaN(b) && isNaN(a)) || ((b = this.Nc), (this.Nc = a = new M(a, this.Nc.height).freeze()), this.s(), this instanceof W && this.ac(), this.g('desiredSize', b, a), Uk(this) && ((a = this.part), null !== a && Vk(this, a, 'width'))); }, }, height: { get: function () { return this.Nc.height; }, set: function (a) { var b = this.Nc.height; b === a || (isNaN(b) && isNaN(a)) || ((b = this.Nc), (this.Nc = a = new M(this.Nc.width, a).freeze()), this.s(), this instanceof W && this.ac(), this.g('desiredSize', b, a), Uk(this) && ((a = this.part), null !== a && Vk(this, a, 'height'))); }, }, minSize: { get: function () { return this.Sf; }, set: function (a) { var b = this.Sf; b.A(a) || ((a = a.copy()), isNaN(a.width) && (a.width = 0), isNaN(a.height) && (a.height = 0), a.freeze(), (this.Sf = a), this.s(), this.g('minSize', b, a)); }, }, maxSize: { get: function () { return this.Rf; }, set: function (a) { var b = this.Rf; b.A(a) || ((a = a.copy()), isNaN(a.width) && (a.width = Infinity), isNaN(a.height) && (a.height = Infinity), a.freeze(), (this.Rf = a), this.s(), this.g('maxSize', b, a)); }, }, measuredBounds: { get: function () { return this.pc; }, }, naturalBounds: { get: function () { return this.qc; }, }, margin: { get: function () { return this.Vg; }, set: function (a) { 'number' === typeof a && (a = new Ic(a)); var b = this.Vg; b.A(a) || ((this.Vg = a = a.I()), this.s(), this.g('margin', b, a)); }, }, transform: { get: function () { (0 !== (this.H & 2048)) === !0 && fl(this); return this.tb; }, }, rd: { get: function () { (0 !== (this.H & 4096)) === !0 && fl(this); return this.Eh; }, }, alignment: { get: function () { return this.wb; }, set: function (a) { var b = this.wb; b.A(a) || (a.jc() && !a.Kb() && A( 'GraphObject.alignment for ' + this + ' must be a real Spot or Spot.Default, not: ' + a, ), (this.wb = a = a.I()), rl(this), this.g('alignment', b, a)); }, }, column: { get: function () { return this.Fg; }, set: function (a) { a = Math.round(a); var b = this.Fg; b !== a && (0 > a && ya(a, '>= 0', Y, 'column'), (this.Fg = a), this.s(), this.g('column', b, a)); }, }, columnSpan: { get: function () { return this.Ym; }, set: function (a) { a = Math.round(a); var b = this.Ym; b !== a && (1 > a && ya(a, '>= 1', Y, 'columnSpan'), (this.Ym = a), this.s(), this.g('columnSpan', b, a)); }, }, row: { get: function () { return this.cp; }, set: function (a) { a = Math.round(a); var b = this.cp; b !== a && (0 > a && ya(a, '>= 0', Y, 'row'), (this.cp = a), this.s(), this.g('row', b, a)); }, }, rowSpan: { get: function () { return this.ep; }, set: function (a) { a = Math.round(a); var b = this.ep; b !== a && (1 > a && ya(a, '>= 1', Y, 'rowSpan'), (this.ep = a), this.s(), this.g('rowSpan', b, a)); }, }, spanAllocation: { get: function () { return this.tp; }, set: function (a) { var b = this.tp; b !== a && ((this.tp = a), this.s(), this.g('spanAllocation', b, a)); }, }, alignmentFocus: { get: function () { return this.yk; }, set: function (a) { var b = this.yk; b.A(a) || ((this.yk = a = a.I()), this.s(), this.g('alignmentFocus', b, a)); }, }, portId: { get: function () { return this.Qo; }, set: function (a) { var b = this.Qo; if (b !== a) { var c = this.part; null === c || c instanceof V || (A('Cannot set portID on a Link: ' + a), (c = null)); null !== b && null !== c && Gl(c, this); this.Qo = a; null !== a && null !== c && ((c.yh = !0), Hl(c, this)); this.g('portId', b, a); } }, }, toSpot: { get: function () { return null !== this.P ? this.P.nh : Sc; }, set: function (a) { this.Hc(); var b = this.P.nh; b.A(a) || ((a = a.I()), (this.P.nh = a), this.g('toSpot', b, a), vl(this)); }, }, toEndSegmentLength: { get: function () { return null !== this.P ? this.P.lh : 10; }, set: function (a) { this.Hc(); var b = this.P.lh; b !== a && (0 > a && ya(a, '>= 0', Y, 'toEndSegmentLength'), (this.P.lh = a), this.g('toEndSegmentLength', b, a), vl(this)); }, }, toShortLength: { get: function () { return null !== this.P ? this.P.mh : 0; }, set: function (a) { this.Hc(); var b = this.P.mh; b !== a && ((this.P.mh = a), this.g('toShortLength', b, a), vl(this)); }, }, toLinkable: { get: function () { return null !== this.P ? this.P.Bp : null; }, set: function (a) { this.Hc(); var b = this.P.Bp; b !== a && ((this.P.Bp = a), this.g('toLinkable', b, a)); }, }, toMaxLinks: { get: function () { return null !== this.P ? this.P.Cp : Infinity; }, set: function (a) { this.Hc(); var b = this.P.Cp; b !== a && (0 > a && ya(a, '>= 0', Y, 'toMaxLinks'), (this.P.Cp = a), this.g('toMaxLinks', b, a)); }, }, fromSpot: { get: function () { return null !== this.P ? this.P.Og : Sc; }, set: function (a) { this.Hc(); var b = this.P.Og; b.A(a) || ((a = a.I()), (this.P.Og = a), this.g('fromSpot', b, a), vl(this)); }, }, fromEndSegmentLength: { get: function () { return null !== this.P ? this.P.Mg : 10; }, set: function (a) { this.Hc(); var b = this.P.Mg; b !== a && (0 > a && ya(a, '>= 0', Y, 'fromEndSegmentLength'), (this.P.Mg = a), this.g('fromEndSegmentLength', b, a), vl(this)); }, }, fromShortLength: { get: function () { return null !== this.P ? this.P.Ng : 0; }, set: function (a) { this.Hc(); var b = this.P.Ng; b !== a && ((this.P.Ng = a), this.g('fromShortLength', b, a), vl(this)); }, }, fromLinkable: { get: function () { return null !== this.P ? this.P.Cn : null; }, set: function (a) { this.Hc(); var b = this.P.Cn; b !== a && ((this.P.Cn = a), this.g('fromLinkable', b, a)); }, }, fromMaxLinks: { get: function () { return null !== this.P ? this.P.Dn : Infinity; }, set: function (a) { this.Hc(); var b = this.P.Dn; b !== a && (0 > a && ya(a, '>= 0', Y, 'fromMaxLinks'), (this.P.Dn = a), this.g('fromMaxLinks', b, a)); }, }, cursor: { get: function () { return this.hn; }, set: function (a) { var b = this.hn; b !== a && ((this.hn = a), this.g('cursor', b, a)); }, }, click: { get: function () { return null !== this.O ? this.O.Cf : null; }, set: function (a) { Rk(this); var b = this.O.Cf; b !== a && ((this.O.Cf = a), this.g('click', b, a)); }, }, doubleClick: { get: function () { return null !== this.O ? this.O.Hf : null; }, set: function (a) { Rk(this); var b = this.O.Hf; b !== a && ((this.O.Hf = a), this.g('doubleClick', b, a)); }, }, contextClick: { get: function () { return null !== this.O ? this.O.Df : null; }, set: function (a) { Rk(this); var b = this.O.Df; b !== a && ((this.O.Df = a), this.g('contextClick', b, a)); }, }, mouseEnter: { get: function () { return null !== this.O ? this.O.Uf : null; }, set: function (a) { Rk(this); var b = this.O.Uf; b !== a && ((this.O.Uf = a), this.g('mouseEnter', b, a)); }, }, mouseLeave: { get: function () { return null !== this.O ? this.O.Xf : null; }, set: function (a) { Rk(this); var b = this.O.Xf; b !== a && ((this.O.Xf = a), this.g('mouseLeave', b, a)); }, }, mouseOver: { get: function () { return null !== this.O ? this.O.Yf : null; }, set: function (a) { Rk(this); var b = this.O.Yf; b !== a && ((this.O.Yf = a), this.g('mouseOver', b, a)); }, }, mouseHover: { get: function () { return null !== this.O ? this.O.Wf : null; }, set: function (a) { Rk(this); var b = this.O.Wf; b !== a && ((this.O.Wf = a), this.g('mouseHover', b, a)); }, }, mouseHold: { get: function () { return null !== this.O ? this.O.Vf : null; }, set: function (a) { Rk(this); var b = this.O.Vf; b !== a && ((this.O.Vf = a), this.g('mouseHold', b, a)); }, }, mouseDragEnter: { get: function () { return null !== this.O ? this.O.so : null; }, set: function (a) { Rk(this); var b = this.O.so; b !== a && ((this.O.so = a), this.g('mouseDragEnter', b, a)); }, }, mouseDragLeave: { get: function () { return null !== this.O ? this.O.to : null; }, set: function (a) { Rk(this); var b = this.O.to; b !== a && ((this.O.to = a), this.g('mouseDragLeave', b, a)); }, }, mouseDrop: { get: function () { return null !== this.O ? this.O.Tf : null; }, set: function (a) { Rk(this); var b = this.O.Tf; b !== a && ((this.O.Tf = a), this.g('mouseDrop', b, a)); }, }, actionDown: { get: function () { return null !== this.O ? this.O.Im : null; }, set: function (a) { Rk(this); var b = this.O.Im; b !== a && ((this.O.Im = a), this.g('actionDown', b, a)); }, }, actionMove: { get: function () { return null !== this.O ? this.O.Jm : null; }, set: function (a) { Rk(this); var b = this.O.Jm; b !== a && ((this.O.Jm = a), this.g('actionMove', b, a)); }, }, actionUp: { get: function () { return null !== this.O ? this.O.Km : null; }, set: function (a) { Rk(this); var b = this.O.Km; b !== a && ((this.O.Km = a), this.g('actionUp', b, a)); }, }, actionCancel: { get: function () { return null !== this.O ? this.O.Hm : null; }, set: function (a) { Rk(this); var b = this.O.Hm; b !== a && ((this.O.Hm = a), this.g('actionCancel', b, a)); }, }, toolTip: { get: function () { return null !== this.O ? this.O.jg : null; }, set: function (a) { Rk(this); var b = this.O.jg; b !== a && ((this.O.jg = a), this.g('toolTip', b, a)); }, }, contextMenu: { get: function () { return null !== this.O ? this.O.Ef : null; }, set: function (a) { Rk(this); var b = this.O.Ef; b !== a && ((this.O.Ef = a), this.g('contextMenu', b, a)); }, }, }); Y.prototype.setProperties = Y.prototype.Nv; Y.prototype.findTemplateBinder = Y.prototype.Ii; Y.prototype.bind = Y.prototype.bind; Y.prototype.isEnabledObject = Y.prototype.ug; Y.prototype.isVisibleObject = Y.prototype.tf; Y.prototype.isContainedBy = Y.prototype.tg; Y.prototype.getNearestIntersectionPoint = Y.prototype.Tc; Y.prototype.getLocalPoint = Y.prototype.Vs; Y.prototype.getDocumentScale = Y.prototype.De; Y.prototype.getDocumentAngle = Y.prototype.Li; Y.prototype.getDocumentBounds = Y.prototype.Yp; Y.prototype.getDocumentPoint = Y.prototype.ma; Y.prototype.intersectsRect = Y.prototype.Ic; Y.prototype.containedInRect = Y.prototype.vh; Y.prototype.containsRect = Y.prototype.nf; Y.prototype.containsPoint = Y.prototype.da; Y.prototype.raiseChanged = Y.prototype.g; Y.prototype.raiseChangedEvent = Y.prototype.ab; Y.prototype.addCopyProperty = Y.prototype.Pw; var zl = null; Y.className = 'GraphObject'; zl = new Lb(); Dl('Button', function () { function a(a, b) { return ( null !== a.diagram.Rb( a.documentPoint, function (a) { for (; null !== a.panel && !a.isActionable; ) a = a.panel; return a; }, function (a) { return a === b; }, ) ); } var b = yl( X, X.Auto, { isActionable: !0, enabledChanged: function (a, b) { if (a instanceof X) { var c = a.$a('ButtonBorder'); null !== c && (c.fill = b ? a._buttonFillNormal : a._buttonFillDisabled); } }, cursor: 'pointer', _buttonFillNormal: '#F5F5F5', _buttonStrokeNormal: '#BDBDBD', _buttonFillOver: '#E0E0E0', _buttonStrokeOver: '#9E9E9E', _buttonFillPressed: '#BDBDBD', _buttonStrokePressed: '#9E9E9E', _buttonFillDisabled: '#E5E5E5', }, yl(W, { name: 'ButtonBorder', figure: 'RoundedRectangle', spot1: new O(0, 0, 2.76142374915397, 2.761423749153969), spot2: new O(1, 1, -2.76142374915397, -2.761423749153969), parameter1: 2, parameter2: 2, fill: '#F5F5F5', stroke: '#BDBDBD', }), ); b.mouseEnter = function (a, b) { if (b.ug() && b instanceof X && ((a = b.$a('ButtonBorder')), a instanceof W)) { var c = b._buttonFillOver; b._buttonFillNormal = a.fill; a.fill = c; c = b._buttonStrokeOver; b._buttonStrokeNormal = a.stroke; a.stroke = c; } }; b.mouseLeave = function (a, b) { b.ug() && b instanceof X && ((a = b.$a('ButtonBorder')), a instanceof W && ((a.fill = b._buttonFillNormal), (a.stroke = b._buttonStrokeNormal))); }; b.actionDown = function (a, b) { if (b.ug() && b instanceof X && null !== b._buttonFillPressed && 0 === a.button) { var c = b.$a('ButtonBorder'); if (c instanceof W) { a = a.diagram; var d = a.skipsUndoManager; a.skipsUndoManager = !0; var g = b._buttonFillPressed; b._buttonFillOver = c.fill; c.fill = g; g = b._buttonStrokePressed; b._buttonStrokeOver = c.stroke; c.stroke = g; a.skipsUndoManager = d; } } }; b.actionUp = function (b, d) { if (d.ug() && d instanceof X && null !== d._buttonFillPressed && 0 === b.button) { var c = d.$a('ButtonBorder'); if (c instanceof W) { var f = b.diagram, g = f.skipsUndoManager; f.skipsUndoManager = !0; a(b, d) ? ((c.fill = d._buttonFillOver), (c.stroke = d._buttonStrokeOver)) : ((c.fill = d._buttonFillNormal), (c.stroke = d._buttonStrokeNormal)); f.skipsUndoManager = g; } } }; b.actionCancel = function (b, d) { if (d.ug() && d instanceof X && null !== d._buttonFillPressed) { var c = d.$a('ButtonBorder'); if (c instanceof W) { var f = b.diagram, g = f.skipsUndoManager; f.skipsUndoManager = !0; a(b, d) ? ((c.fill = d._buttonFillOver), (c.stroke = d._buttonStrokeOver)) : ((c.fill = d._buttonFillNormal), (c.stroke = d._buttonStrokeNormal)); f.skipsUndoManager = g; } } }; b.actionMove = function (b, d) { if (d.ug() && d instanceof X && null !== d._buttonFillPressed) { var c = b.diagram; if ( 0 === c.firstInput.button && (c.currentTool.standardMouseOver(), a(b, d) && ((b = d.$a('ButtonBorder')), b instanceof W)) ) { var f = c.skipsUndoManager; c.skipsUndoManager = !0; var g = d._buttonFillPressed; b.fill !== g && (b.fill = g); g = d._buttonStrokePressed; b.stroke !== g && (b.stroke = g); c.skipsUndoManager = f; } } }; return b; }); Dl('TreeExpanderButton', function () { var a = yl( 'Button', { _treeExpandedFigure: 'MinusLine', _treeCollapsedFigure: 'PlusLine' }, yl( W, { name: 'ButtonIcon', figure: 'MinusLine', stroke: '#424242', strokeWidth: 2, desiredSize: ic, }, new Ei('figure', 'isTreeExpanded', function (a, c) { c = c.panel; return a ? c._treeExpandedFigure : c._treeCollapsedFigure; }).kq(), ), { visible: !1 }, new Ei('visible', 'isTreeLeaf', function (a) { return !a; }).kq(), ); a.click = function (a, c) { c = c.part; c instanceof pf && (c = c.adornedPart); if (c instanceof V) { var b = c.diagram; if (null !== b) { b = b.commandHandler; if (c.isTreeExpanded) { if (!b.canCollapseTree(c)) return; } else if (!b.canExpandTree(c)) return; a.handled = !0; c.isTreeExpanded ? b.collapseTree(c) : b.expandTree(c); } } }; return a; }); Dl('SubGraphExpanderButton', function () { var a = yl( 'Button', { _subGraphExpandedFigure: 'MinusLine', _subGraphCollapsedFigure: 'PlusLine' }, yl( W, { name: 'ButtonIcon', figure: 'MinusLine', stroke: '#424242', strokeWidth: 2, desiredSize: ic, }, new Ei('figure', 'isSubGraphExpanded', function (a, c) { c = c.panel; return a ? c._subGraphExpandedFigure : c._subGraphCollapsedFigure; }).kq(), ), ); a.click = function (a, c) { c = c.part; c instanceof pf && (c = c.adornedPart); if (c instanceof ig) { var b = c.diagram; if (null !== b) { b = b.commandHandler; if (c.isSubGraphExpanded) { if (!b.canCollapseSubGraph(c)) return; } else if (!b.canExpandSubGraph(c)) return; a.handled = !0; c.isSubGraphExpanded ? b.collapseSubGraph(c) : b.expandSubGraph(c); } } }; return a; }); Dl('ToolTip', function () { return yl( pf, X.Auto, { isShadowed: !0, shadowColor: 'rgba(0, 0, 0, .4)', shadowOffset: new G(0, 3), shadowBlur: 5, }, yl(W, { name: 'Border', figure: 'RoundedRectangle', parameter1: 1, parameter2: 1, fill: '#F5F5F5', stroke: '#F0F0F0', spot1: new O(0, 0, 4, 6), spot2: new O(1, 1, -4, -4), }), ); }); Dl('ContextMenu', function () { return yl( pf, X.Vertical, { background: '#F5F5F5', isShadowed: !0, shadowColor: 'rgba(0, 0, 0, .4)', shadowOffset: new G(0, 3), shadowBlur: 5, }, new Ei('background', '', function (a) { return null !== a.adornedPart && null !== a.placeholder ? null : '#F5F5F5'; }), ); }); Dl('ContextMenuButton', function () { var a = yl('Button'); a.stretch = Lk; var b = a.$a('ButtonBorder'); b instanceof W && ((b.figure = 'Rectangle'), (b.strokeWidth = 0), (b.spot1 = new O(0, 0, 2, 3)), (b.spot2 = new O(1, 1, -2, -2))); return a; }); Dl('PanelExpanderButton', function (a) { var b = El(a, 'COLLAPSIBLE'), c = yl( 'Button', { _buttonExpandedFigure: 'M0 0 M0 6 L4 2 8 6 M8 8', _buttonCollapsedFigure: 'M0 0 M0 2 L4 6 8 2 M8 8', _buttonFillNormal: 'rgba(0, 0, 0, 0)', _buttonStrokeNormal: null, _buttonFillOver: 'rgba(0, 0, 0, .2)', _buttonStrokeOver: null, _buttonFillPressed: 'rgba(0, 0, 0, .4)', _buttonStrokePressed: null, }, yl( W, { name: 'ButtonIcon', strokeWidth: 2 }, new Ei('geometryString', 'visible', function (a) { return a ? c._buttonExpandedFigure : c._buttonCollapsedFigure; }).kq(b), ), ); a = c.$a('ButtonBorder'); a instanceof W && ((a.stroke = null), (a.fill = 'rgba(0, 0, 0, 0)')); c.click = function (a, c) { a = c.diagram; if (null !== a && !a.isReadOnly) { var d = c.Ii(); null === d && (d = c.part); null !== d && ((c = d.$a(b)), null !== c && (a.Aa('Collapse/Expand Panel'), (c.visible = !c.visible), a.Za('Collapse/Expand Panel'))); } }; return c; }); Dl('CheckBoxButton', function (a) { var b = El(a); a = yl( 'Button', { desiredSize: new M(14, 14) }, yl( W, { name: 'ButtonIcon', geometryString: 'M0 0 M0 8.85 L4.9 13.75 16.2 2.45 M16.2 16.2', strokeWidth: 2, stretch: be, geometryStretch: ah, visible: !1, }, '' !== b ? new Ei('visible', b).qx() : [], ), ); a.click = function (a, d) { if (d instanceof X) { var c = a.diagram; if (!(null === c || c.isReadOnly || ('' !== b && c.model.isReadOnly))) { a.handled = !0; var f = d.$a('ButtonIcon'); c.Aa('checkbox'); f.visible = !f.visible; 'function' === typeof d._doClick && d._doClick(a, d); c.Za('checkbox'); } } }; return a; }); Dl('CheckBox', function (a) { a = El(a); a = yl('CheckBoxButton', a, { name: 'Button', isActionable: !1, margin: new Ic(0, 1, 0, 0) }); var b = yl(X, 'Horizontal', a, { isActionable: !0, cursor: a.cursor, margin: 1, _buttonFillNormal: a._buttonFillNormal, _buttonStrokeNormal: a._buttonStrokeNormal, _buttonFillOver: a._buttonFillOver, _buttonStrokeOver: a._buttonStrokeOver, _buttonFillPressed: a._buttonFillPressed, _buttonStrokePressed: a._buttonStrokePressed, _buttonFillDisabled: a._buttonFillDisabled, mouseEnter: a.mouseEnter, mouseLeave: a.mouseLeave, actionDown: a.actionDown, actionUp: a.actionUp, actionCancel: a.actionCancel, actionMove: a.actionMove, click: a.click, _buttonClick: a.click, }); a.mouseEnter = null; a.mouseLeave = null; a.actionDown = null; a.actionUp = null; a.actionCancel = null; a.actionMove = null; a.click = null; return b; }); Y.None = Zg = new D(Y, 'None', 0); Y.Default = Kk = new D(Y, 'Default', 0); Y.Vertical = Mk = new D(Y, 'Vertical', 4); Y.Horizontal = Lk = new D(Y, 'Horizontal', 5); Y.Fill = be = new D(Y, 'Fill', 3); Y.Uniform = ah = new D(Y, 'Uniform', 1); Y.UniformToFill = Nk = new D(Y, 'UniformToFill', 2); Y.FlipVertical = Ok = new D(Y, 'FlipVertical', 1); Y.FlipHorizontal = Pk = new D(Y, 'FlipHorizontal', 2); Y.FlipBoth = Qk = new D(Y, 'FlipBoth', 3); Y.make = yl; Y.getBuilders = function () { var a = new Lb(), b; for (b in zl) if (b !== b.toLowerCase()) { var c = zl.J(b); 'function' === typeof c && a.add(b, c); } a.freeze(); return a; }; Y.defineBuilder = Dl; Y.takeBuilderArgument = El; function Sk() { this.An = this.Ef = this.jg = this.Hm = this.Km = this.Jm = this.Im = this.Tf = this.to = this.so = this.Vf = this.Wf = this.Yf = this.Xf = this.Uf = this.Df = this.Hf = this.Cf = null; } Sk.prototype.copy = function () { var a = new Sk(); a.Cf = this.Cf; a.Hf = this.Hf; a.Df = this.Df; a.Uf = this.Uf; a.Xf = this.Xf; a.Yf = this.Yf; a.Wf = this.Wf; a.Vf = this.Vf; a.so = this.so; a.to = this.to; a.Tf = this.Tf; a.Im = this.Im; a.Jm = this.Jm; a.Km = this.Km; a.Hm = this.Hm; a.jg = this.jg; a.Ef = this.Ef; a.An = this.An; return a; }; Sk.className = 'GraphObjectEventHandlers'; function Il() { this.Oa = [1, 0, 0, 1, 0, 0]; } Il.prototype.copy = function () { var a = new Il(); a.Oa[0] = this.Oa[0]; a.Oa[1] = this.Oa[1]; a.Oa[2] = this.Oa[2]; a.Oa[3] = this.Oa[3]; a.Oa[4] = this.Oa[4]; a.Oa[5] = this.Oa[5]; return a; }; Il.prototype.translate = function (a, b) { this.Oa[4] += this.Oa[0] * a + this.Oa[2] * b; this.Oa[5] += this.Oa[1] * a + this.Oa[3] * b; }; Il.prototype.scale = function (a, b) { this.Oa[0] *= a; this.Oa[1] *= a; this.Oa[2] *= b; this.Oa[3] *= b; }; Il.className = 'STransform'; function Jl(a) { this.type = a; this.r2 = this.y2 = this.x2 = this.r1 = this.y1 = this.x1 = 0; this.Ww = []; this.pattern = null; } Jl.prototype.addColorStop = function (a, b) { this.Ww.push({ offset: a, color: b }); }; Jl.className = 'SGradient'; function yj(a, b) { this.ownerDocument = a = void 0 === b ? w.document : b; this.Dz = 'http://www.w3.org/2000/svg'; void 0 !== a && ((this.Ga = this.ub('svg', { width: '1px', height: '1px', viewBox: '0 0 1 1' })), this.Ga.setAttributeNS( 'http://www.w3.org/2000/xmlns/', 'xmlns', 'http://www.w3.org/2000/svg', ), this.Ga.setAttributeNS( 'http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink', )); this.Tp = null; this.context = new Kl(this); } yj.prototype.resize = function (a, b, c, d) { return this.width !== a || this.height !== b ? ((this.style.width = c + 'px'), (this.style.height = d + 'px'), this.Ga.setAttributeNS(null, 'width', c + 'px'), this.Ga.setAttributeNS(null, 'height', d + 'px'), this.Ga.setAttributeNS(null, 'viewBox', '0 0 ' + c + ' ' + d), this.context.gu.firstElementChild.setAttributeNS(null, 'width', c + 'px'), this.context.gu.firstElementChild.setAttributeNS(null, 'height', d + 'px'), !0) : !1; }; yj.prototype.ub = function (a, b, c) { a = this.ownerDocument.createElementNS(this.Dz, a); if (Ca(b)) for (var d in b) a.setAttributeNS('href' === d ? 'http://www.w3.org/1999/xlink' : '', d, b[d]); void 0 !== c && (a.textContent = c); return a; }; yj.prototype.getBoundingClientRect = function () { return this.Ga.getBoundingClientRect(); }; yj.prototype.focus = function () { this.Ga.focus(); }; yj.prototype.ax = function () { this.ownerDocument = null; }; pa.Object.defineProperties(yj.prototype, { width: { get: function () { return this.Ga.width.baseVal.value; }, set: function (a) { this.Ga.width = a; }, }, height: { get: function () { return this.Ga.height.baseVal.value; }, set: function (a) { this.Ga.height = a; }, }, style: { get: function () { return this.Ga.style; }, }, }); yj.className = 'SVGSurface'; function Kl(a) { this.tk = a; this.svg = a.Ga; this.stack = []; this.wc = []; 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.shadowOffsetY = this.shadowOffsetX = 0; this.strokeStyle = '#000000'; this.textAlign = 'start'; this.clipInsteadOfFill = !1; this.Od = this.pp = this.op = 0; this.eq = null; this.path = []; this.bu = !1; this.gh = null; this.hh = 0; this.Sd = new Il(); Ll(this, 1, 0, 0, 1, 0, 0); var b = Gb++, c = this.ub('clipPath', { id: 'mainClip' + b }); c.appendChild(this.ub('rect', { x: 0, y: 0, width: a.width, height: a.height })); this.gu = c; this.tk.Ga.appendChild(c); this.wc[0].setAttributeNS(null, 'clip-path', 'url(#mainClip' + b + ')'); this.Fz = {}; } t = Kl.prototype; t.reset = function () { this.stack = []; this.wc = []; 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.shadowOffsetY = this.shadowOffsetX = 0; this.strokeStyle = '#000000'; this.textAlign = 'start'; this.clipInsteadOfFill = !1; this.Od = this.pp = this.op = 0; this.eq = null; this.path = []; this.Sd = new Il(); Ll(this, 1, 0, 0, 1, 0, 0); var a = Gb++, b = this.ub('clipPath', { id: 'mainClip' + a }); b.appendChild(this.ub('rect', { x: 0, y: 0, width: this.tk.width, height: this.tk.height })); this.gu = b; this.tk.Ga.appendChild(b); this.wc[0].setAttributeNS(null, 'clip-path', 'url(#mainClip' + a + ')'); }; t.arc = function (a, b, c, d, e, f, g, h) { var k = 2 * Math.PI, l = k - 1e-6, m = c * Math.cos(d), n = c * Math.sin(d), p = a + m, q = b + n, r = f ? 0 : 1; d = f ? d - e : e - d; (1e-6 < Math.abs(g - p) || 1e-6 < Math.abs(h - q)) && this.path.push(['L', p, +q]); 0 > d && (d = (d % k) + k); d > l ? (this.path.push(['A', c, c, 0, 1, r, a - m, b - n]), this.path.push(['A', c, c, 0, 1, r, p, q])) : 1e-6 < d && this.path.push([ 'A', c, c, 0, +(d >= Math.PI), r, a + c * Math.cos(e), b + c * Math.sin(e), ]); }; t.beginPath = function () { this.path = []; }; t.bezierCurveTo = function (a, b, c, d, e, f) { this.path.push(['C', a, b, c, d, e, f]); }; t.clearRect = function () {}; t.clip = function () { this.addPath('clipPath', this.path, this.Sd); this.addPath('clipPath', this.path, new Il()); }; t.closePath = function () { this.path.push(['z']); }; t.createLinearGradient = function (a, b, c, d) { var e = new Jl('linear'); e.x1 = a; e.y1 = b; e.x2 = c; e.y2 = d; return e; }; t.createPattern = function (a) { var b = ''; a instanceof HTMLCanvasElement && (b = a.toDataURL()); a instanceof HTMLImageElement && (b = a.getAttribute('src')); var c = this.Fz; if (c[b]) return 'url(#' + c[b] + ')'; var d = 'PATTERN' + Gb++, e = { x: 0, y: 0, width: a.width, height: a.height, href: b }; a = this.ub('pattern', { width: a.width, height: a.height, id: d, patternUnits: 'userSpaceOnUse', }); a.appendChild(this.ub('image', e)); this.svg.appendChild(a); c[b] = d; return 'url(#' + d + ')'; }; t.createRadialGradient = function (a, b, c, d, e, f) { var g = new Jl('radial'); g.x1 = a; g.y1 = b; g.r1 = c; g.x2 = d; g.y2 = e; g.r2 = f; return g; }; t.drawImage = function (a, b, c, d, e, f, g, h, k) { var l = ''; a instanceof HTMLCanvasElement && (l = a.toDataURL()); a instanceof HTMLImageElement && (l = a.getAttribute('src')); var m = a instanceof HTMLImageElement ? a.naturalWidth : a.width, n = a instanceof HTMLImageElement ? a.naturalHeight : a.height; void 0 === d && ((f = b), (g = c), (h = d = m), (k = e = n)); d = d || 0; e = e || 0; f = f || 0; g = g || 0; h = h || 0; k = k || 0; l = { x: 0, y: 0, width: m || d, height: n || e, href: l, preserveAspectRatio: 'xMidYMid slice', }; (H.ca(d, h) && H.ca(e, k)) || (l.preserveAspectRatio = 'none'); a = ''; h /= d; k /= e; if (0 !== f || 0 !== g) a += ' translate(' + f + ', ' + g + ')'; if (1 !== h || 1 !== k) a += ' scale(' + h + ', ' + k + ')'; if (0 !== b || 0 !== c) a += ' translate(' + -b + ', ' + -c + ')'; if (0 !== b || 0 !== c || d !== m || e !== n) (f = 'CLIP' + Gb++), (g = this.ub('clipPath', { id: f })), g.appendChild(this.ub('rect', { x: b, y: c, width: d, height: e })), this.svg.appendChild(g), (l['clip-path'] = 'url(#' + f + ')'); Ml(this, 'image', l, this.Sd, a); this.addElement('image', l); }; t.fill = function () { this.addPath('fill', this.path, this.Sd); }; t.Td = function () { this.clipInsteadOfFill ? this.clip() : this.fill(); }; t.fillRect = function (a, b, c, d) { a = [a, b, c, d]; a = { x: a[0], y: a[1], width: a[2], height: a[3] }; Ml(this, 'fill', a, this.Sd); this.addElement('rect', a); }; t.fillText = function (a, b, c) { a = [a, b, c]; b = this.textAlign; 'left' === b ? (b = 'start') : 'right' === b ? (b = 'end') : 'center' === b && (b = 'middle'); b = { x: a[1], y: a[2], style: 'font: ' + this.font, 'text-anchor': b }; Ml(this, 'fill', b, this.Sd); this.addElement('text', b, a[0]); }; t.lineTo = function (a, b) { this.path.push(['L', a, b]); }; t.moveTo = function (a, b) { this.path.push(['M', a, b]); }; t.quadraticCurveTo = function (a, b, c, d) { this.path.push(['Q', a, b, c, d]); }; t.rect = function (a, b, c, d) { this.path.push(['M', a, b], ['L', a + c, b], ['L', a + c, b + d], ['L', a, b + d], ['z']); }; t.restore = function () { this.Sd = this.stack.pop(); this.path = this.stack.pop(); var a = this.stack.pop(); this.fillStyle = a.fillStyle; this.font = a.font; this.globalAlpha = a.globalAlpha; this.lineCap = a.lineCap; this.lineDashOffset = a.lineDashOffset; this.lineJoin = a.lineJoin; this.lineWidth = a.lineWidth; this.miterLimit = a.miterLimit; this.shadowBlur = a.shadowBlur; this.shadowColor = a.shadowColor; this.shadowOffsetX = a.shadowOffsetX; this.shadowOffsetY = a.shadowOffsetY; this.strokeStyle = a.strokeStyle; this.textAlign = a.textAlign; }; t.save = function () { this.stack.push({ 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, }); for (var a = [], b = 0; b < this.path.length; b++) a.push(this.path[b]); this.stack.push(a); this.stack.push(this.Sd.copy()); }; t.setTransform = function (a, b, c, d, e, f) { (1 === a && 0 === b && 0 === c && 1 === d && 0 === e && 0 === f) || Ll(this, a, b, c, d, e, f); }; t.scale = function (a, b) { this.Sd.scale(a, b); }; t.translate = function (a, b) { this.Sd.translate(a, b); }; t.transform = function () {}; t.stroke = function () { this.addPath('stroke', this.path, this.Sd); }; t.Xi = function () { this.clipInsteadOfFill || this.stroke(); }; t.ub = function (a, b, c) { return this.tk.ub(a, b, c); }; t.addElement = function (a, b, c) { a = this.ub(a, b, c); 0 < this.wc.length ? this.wc[this.wc.length - 1].appendChild(a) : this.svg.appendChild(a); return (this.eq = a); }; function Ml(a, b, c, d, e) { 1 !== a.globalAlpha && (c.opacity = a.globalAlpha); 'fill' === b ? (a.fillStyle instanceof Jl ? (c.fill = Nl(a, a.fillStyle)) : (/^rgba\(/.test(a.fillStyle) && ((b = /^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec( a.fillStyle, )), (c.fill = 'rgb(' + b[1] + ',' + b[2] + ',' + b[3] + ')'), (c['fill-opacity'] = b[4])), (c.fill = a.fillStyle)), (c.stroke = 'none')) : 'stroke' === b && ((c.fill = 'none'), a.strokeStyle instanceof Jl ? (c.stroke = Nl(a, a.strokeStyle)) : (/^rgba\(/.test(a.strokeStyle) && ((b = /^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec( a.strokeStyle, )), (c.stroke = 'rgb(' + b[1] + ',' + b[2] + ',' + b[3] + ')'), (c['stroke-opacity'] = b[4])), (c.stroke = a.strokeStyle)), (c['stroke-width'] = a.lineWidth), (c['stroke-linecap'] = a.lineCap), (c['stroke-linejoin'] = a.lineJoin), (c['stroke-miterlimit'] = a.miterLimit)); a = d.Oa; a = 'matrix(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' + a[4] + ', ' + a[5] + ')'; void 0 !== e && (a += e); c.transform = a; } function Nl(a, b) { var c = 'GRAD' + Gb++; if ('linear' === b.type) var d = a.ub('linearGradient', { x1: b.x1, x2: b.x2, y1: b.y1, y2: b.y2, id: c, gradientUnits: 'userSpaceOnUse', }); else if ('radial' === b.type) d = a.ub('radialGradient', { x1: b.x1, x2: b.x2, y1: b.y1, y2: b.y2, r1: b.r1, r2: b.r2, id: c, }); else throw Error('invalid gradient'); var e = b.Ww; b = e.length; for (var f = [], g = 0; g < b; g++) { var h = e[g], k = h.color; h = { offset: h.offset, 'stop-color': k }; /^rgba\(/.test(k) && ((k = /^\s*rgba\s*\(([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\s*,\s*([^,\s]+)\)\s*$/i.exec( k, )), (h['stop-color'] = 'rgb(' + k[1] + ',' + k[2] + ',' + k[3] + ')'), (h['stop-opacity'] = k[4])); f.push(h); } f.sort(function (a, b) { return a.offset > b.offset ? 1 : -1; }); for (e = 0; e < b; e++) d.appendChild(a.ub('stop', f[e])); a.svg.appendChild(d); return 'url(#' + c + ')'; } t.addPath = function (a, b, c) { for (var d = [], e = 0; e < b.length; e++) { var f = Ga(b[e]), g = [f.shift()]; if ('A' === g[0]) g.push( f.shift() + ',' + f.shift(), f.shift(), f.shift() + ',' + f.shift(), f.shift() + ',' + f.shift(), ); else for (; f.length; ) g.push(f.shift() + ',' + f.shift()); d.push(g.join(' ')); } b = { d: d.join(' ') }; 'stroke' === a && this.bu && ((b['stroke-dasharray'] = this.gh.toString()), (b['stroke-dashoffset'] = this.hh)); Ml(this, a, b, c); 'clipPath' === a ? ((a = 'CLIP' + Gb++), (c = this.ub('clipPath', { id: a })), c.appendChild(this.ub('path', b)), this.svg.appendChild(c), 0 < this.wc.length && this.wc[this.wc.length - 1].setAttributeNS(null, 'clip-path', 'url(#' + a + ')')) : this.addElement('path', b); }; function Ll(a, b, c, d, e, f, g) { var h = new Il(); h.Oa = [b, c, d, e, f, g]; b = {}; Ml(a, 'g', b, h); h = a.addElement('g', b); a.wc.push(h); } t.tq = function () { if (0 !== this.shadowOffsetX || 0 !== this.shadowOffsetY || 0 !== this.shadowBlur) { var a = 'SHADOW' + Gb++, b = this.addElement( 'filter', { id: a, x: '-100%', y: '-100%', width: '300%', height: '300%' }, null, ); var c = this.ub('feGaussianBlur', { in: 'SourceAlpha', result: 'blur', iA: this.shadowBlur / 2, }); var d = this.ub('feFlood', { in: 'blur', result: 'flood', 'flood-color': this.shadowColor }); var e = this.ub('feComposite', { in: 'flood', in2: 'blur', operator: 'in', result: 'comp' }); var f = this.ub('feOffset', { in: 'comp', result: 'offsetBlur', dx: this.shadowOffsetX, dy: this.shadowOffsetY, }); var g = this.ub('feMerge', {}); g.appendChild(this.ub('feMergeNode', { in: 'offsetBlur' })); g.appendChild(this.ub('feMergeNode', { in: 'SourceGraphic' })); b.appendChild(c); b.appendChild(d); b.appendChild(e); b.appendChild(f); b.appendChild(g); 0 < this.wc.length && this.wc[this.wc.length - 1].setAttributeNS(null, 'filter', 'url(#' + a + ')'); } }; t.Ov = function (a, b, c) { this.op = a; this.pp = b; this.Od = c; }; function hl(a) { a.shadowOffsetX = 0; a.shadowOffsetY = 0; a.shadowBlur = 0; } function gl(a) { a.shadowOffsetX = a.op; a.shadowOffsetY = a.pp; a.shadowBlur = a.Od; } t.Os = function (a, b) { this.bu = !0; this.gh = a; this.hh = b; }; t.Ms = function () { this.bu = !1; }; t.Rc = function () {}; t.Fx = function () {}; Kl.prototype.rotate = function () {}; Kl.prototype.getImageData = function () { return null; }; Kl.prototype.measureText = function () { return null; }; Kl.className = 'SVGContext'; P.prototype.ht = function (a) { var b = new yj(this, w.document); void 0 === a && (a = new tb()); var c = this; return rk( this, function (a, e) { a = sk(c, a, 'SVG', b); a = null !== a ? a.svg : null; return 'function' === typeof e ? (e(a), null) : a; }, a, ); }; P.prototype.makeSvg = P.prototype.ht; P.prototype.nv = function (a) { return this.ht(a); }; P.prototype.makeSVG = P.prototype.nv; Y.prototype.bx = function (a, b) { if (!(a instanceof Kl)) return !1; if (!this.visible) return !0; var c = null, d = a.eq; if (this instanceof X && (this.type === X.TableRow || this.type === X.TableColumn)) return el(this, a, b), !0; var e = this.vb; if (0 === e.width || 0 === e.height || isNaN(e.x) || isNaN(e.y)) return !0; var f = this.transform, g = this.panel; (0 !== (this.H & 4096)) === !0 && fl(this); var h = 0 !== (this.H & 256), k = !1; this instanceof vh && (a.font = this.font); if (h) { k = g.Zd() ? g.naturalBounds : g.actualBounds; if (null !== this.kd) { var l = this.kd; var m = l.x; var n = l.y; var p = l.width; l = l.height; } else (m = Math.max(e.x, k.x)), (n = Math.max(e.y, k.y)), (p = Math.min(e.right, k.right) - m), (l = Math.min(e.bottom, k.bottom) - n); if (m > e.width + e.x || e.x > k.width + k.x || n > e.height + e.y || e.y > k.height + k.y) return !0; k = !0; Ll(a, 1, 0, 0, 1, 0, 0); a.save(); a.beginPath(); a.rect(m, n, p, l); a.clip(); } if (this.vg() && !this.isVisible()) return !0; a.Sd.Oa = [1, 0, 0, 1, 0, 0]; ((this instanceof vh && 1 < this.lineCount) || (this instanceof W && 1 < this.geometry.figures.length)) && Ll(a, 1, 0, 0, 1, 0, 0); m = !1; this.vg() && this.isShadowed && b.Ee('drawShadows') && ((n = this.ui), a.Ov(n.x * b.scale * b.Mb, n.y * b.scale * b.Mb, this.Od), gl(a), (a.shadowColor = this.Jj)); n = !1; this.part && b.Ee('drawShadows') && (n = this.part.isShadowed); !0 === this.shadowVisible ? (gl(a), !1 === m && n && (Ll(a, 1, 0, 0, 1, 0, 0), a.tq(), (m = !0))) : !1 === this.shadowVisible && hl(a); p = this.naturalBounds; null !== this.areaBackground && (ji(this, a, this.areaBackground, !0, !0, p, e), !1 === m && n && (Ll(a, 1, 0, 0, 1, 0, 0), a.tq(), (m = !0)), this.areaBackground instanceof il && this.areaBackground.type === jl ? (a.beginPath(), a.rect(e.x, e.y, e.width, e.height), a.Td(this.areaBackground)) : a.fillRect(e.x, e.y, e.width, e.height)); this instanceof X ? Ll(a, f.m11, f.m12, f.m21, f.m22, f.dx, f.dy) : (a.Sd.Oa = [f.m11, f.m12, f.m21, f.m22, f.dx, f.dy]); if (null !== this.background) { !1 === m && n && (Ll(a, 1, 0, 0, 1, 0, 0), a.tq(), (m = !0)); var q = this.naturalBounds; l = f = 0; var r = q.width; q = q.height; var u = 0; this instanceof W && ((q = this.geometry.bounds), (f = q.x), (l = q.y), (r = q.width), (q = q.height), (u = this.strokeWidth)); ji(this, a, this.background, !0, !1, p, e); this.background instanceof il && this.background.type === jl ? (a.beginPath(), a.rect(f - u / 2, l - u / 2, r + u, q + u), a.Td(this.background)) : a.fillRect(f - u / 2, l - u / 2, r + u, q + u); } n && (null !== this.background || null !== this.areaBackground || (null !== g && 0 !== (g.H & 512)) || (null !== g && (g.type === X.Auto || g.type === X.Spot) && g.zb() !== this)) ? (kl(this, !0), null === this.shadowVisible && hl(a)) : kl(this, !1); this.Ei(a, b); n && (0 !== (this.H & 512)) === !0 && gl(a); this.vg() && n && hl(a); h && (a.restore(), k && a.wc.pop()); this instanceof X && (c = a.wc.pop()); !0 === m && a.wc.pop(); if ( (this instanceof vh && 1 < this.lineCount) || (this instanceof W && 1 < this.geometry.figures.length) ) c = a.wc.pop(); null !== a.tk.Tp && (null === c && (d === a.eq ? (Ll(a, 1, 0, 0, 1, 0, 0), (c = a.wc.pop())) : (c = a.eq)), a.tk.Tp(this, c)); this.svg = c; return !0; }; function tk(a, b) { this.ownerDocument = b = void 0 === b ? w.document : b; this.Tp = null; b = b.createElement('canvas'); b.tabIndex = 0; this.Ga = b; this.Ga.innerHTML = 'This text is displayed if your browser does not support the Canvas HTML element.'; this.context = new ml(b); b.C = a; } tk.prototype.resize = function (a, b, c, d) { return this.width !== a || this.height !== b ? ((this.width = a), (this.height = b), (this.style.width = c + 'px'), (this.style.height = d + 'px'), !0) : !1; }; tk.prototype.toDataURL = function (a, b) { return this.Ga.toDataURL(a, b); }; tk.prototype.getBoundingClientRect = function () { return this.Ga.getBoundingClientRect(); }; tk.prototype.focus = function () { this.Ga.focus(); }; tk.prototype.ax = function () { this.ownerDocument = this.Ga.C = null; }; pa.Object.defineProperties(tk.prototype, { width: { get: function () { return this.Ga.width; }, set: function (a) { this.Ga.width = a; }, }, height: { get: function () { return this.Ga.height; }, set: function (a) { this.Ga.height = a; }, }, style: { get: function () { return this.Ga.style; }, }, }); tk.className = 'CanvasSurface'; function ml(a) { (a.getContext && a.getContext('2d')) || A('Browser does not support HTML Canvas Element'); this.W = a.getContext('2d'); this.Ht = this.Jt = this.It = ''; this.Xm = !1; this.Od = this.pp = this.op = 0; } t = ml.prototype; t.Fx = function (a) { this.W.imageSmoothingEnabled = a; }; t.arc = function (a, b, c, d, e, f) { this.W.arc(a, b, c, d, e, f); }; t.beginPath = function () { this.W.beginPath(); }; t.bezierCurveTo = function (a, b, c, d, e, f) { this.W.bezierCurveTo(a, b, c, d, e, f); }; t.clearRect = function (a, b, c, d) { this.W.clearRect(a, b, c, d); }; t.clip = function () { this.W.clip(); }; t.closePath = function () { this.W.closePath(); }; t.createLinearGradient = function (a, b, c, d) { return this.W.createLinearGradient(a, b, c, d); }; t.createPattern = function (a, b) { return this.W.createPattern(a, b); }; t.createRadialGradient = function (a, b, c, d, e, f) { return this.W.createRadialGradient(a, b, c, d, e, f); }; t.drawImage = function (a, b, c, d, e, f, g, h, k) { void 0 === d ? this.W.drawImage(a, b, c) : this.W.drawImage(a, b, c, d, e, f, g, h, k); }; t.fill = function () { this.W.fill(); }; t.fillRect = function (a, b, c, d) { this.W.fillRect(a, b, c, d); }; t.fillText = function (a, b, c) { this.W.fillText(a, b, c); }; t.getImageData = function (a, b, c, d) { return this.W.getImageData(a, b, c, d); }; t.lineTo = function (a, b) { this.W.lineTo(a, b); }; t.measureText = function (a) { return this.W.measureText(a); }; t.moveTo = function (a, b) { this.W.moveTo(a, b); }; t.quadraticCurveTo = function (a, b, c, d) { this.W.quadraticCurveTo(a, b, c, d); }; t.rect = function (a, b, c, d) { this.W.rect(a, b, c, d); }; t.restore = function () { this.W.restore(); }; ml.prototype.rotate = function (a) { this.W.rotate(a); }; t = ml.prototype; t.save = function () { this.W.save(); }; t.setTransform = function (a, b, c, d, e, f) { this.W.setTransform(a, b, c, d, e, f); }; t.scale = function (a, b) { this.W.scale(a, b); }; t.stroke = function () { this.W.stroke(); }; t.transform = function (a, b, c, d, e, f) { (1 === a && 0 === b && 0 === c && 1 === d && 0 === e && 0 === f) || this.W.transform(a, b, c, d, e, f); }; t.translate = function (a, b) { this.W.translate(a, b); }; t.Td = function (a) { if (a instanceof il && a.type === jl) { var b = a.Hk; a = a.Kt; a > b ? (this.scale(b / a, 1), this.translate((a - b) / 2, 0)) : b > a && (this.scale(1, a / b), this.translate(0, (b - a) / 2)); this.Xm ? this.clip() : this.fill(); a > b ? (this.translate(-(a - b) / 2, 0), this.scale(1 / (b / a), 1)) : b > a && (this.translate(0, -(b - a) / 2), this.scale(1, 1 / (a / b))); } else this.Xm ? this.clip() : this.fill(); }; t.Xi = function () { this.Xm || this.stroke(); }; t.Ov = function (a, b, c) { this.op = a; this.pp = b; this.Od = c; }; t.Os = function (a, b) { var c = this.W; void 0 !== c.setLineDash && (c.setLineDash(a), (c.lineDashOffset = b)); }; t.Ms = function () { var a = this.W; void 0 !== a.setLineDash && (a.setLineDash(Ol), (a.lineDashOffset = 0)); }; t.Rc = function (a) { a && (this.It = ''); this.Ht = this.Jt = ''; }; pa.Object.defineProperties(ml.prototype, { fillStyle: { get: function () { return this.W.fillStyle; }, set: function (a) { this.Ht !== a && (this.Ht = this.W.fillStyle = a); }, }, font: { get: function () { return this.W.font; }, set: function (a) { this.It !== a && (this.It = this.W.font = a); }, }, globalAlpha: { get: function () { return this.W.globalAlpha; }, set: function (a) { this.W.globalAlpha = a; }, }, lineCap: { get: function () { return this.W.lineCap; }, set: function (a) { this.W.lineCap = a; }, }, lineDashOffset: { get: function () { return this.W.lineDashOffset; }, set: function (a) { this.W.lineDashOffset = a; }, }, lineJoin: { get: function () { return this.W.lineJoin; }, set: function (a) { this.W.lineJoin = a; }, }, lineWidth: { get: function () { return this.W.lineWidth; }, set: function (a) { this.W.lineWidth = a; }, }, miterLimit: { get: function () { return this.W.miterLimit; }, set: function (a) { this.W.miterLimit = a; }, }, shadowBlur: { get: function () { return this.W.shadowBlur; }, set: function (a) { this.W.shadowBlur = a; }, }, shadowColor: { get: function () { return this.W.shadowColor; }, set: function (a) { this.W.shadowColor = a; }, }, shadowOffsetX: { get: function () { return this.W.shadowOffsetX; }, set: function (a) { this.W.shadowOffsetX = a; }, }, shadowOffsetY: { get: function () { return this.W.shadowOffsetY; }, set: function (a) { this.W.shadowOffsetY = a; }, }, strokeStyle: { get: function () { return this.W.strokeStyle; }, set: function (a) { this.Jt !== a && (this.Jt = this.W.strokeStyle = a); }, }, textAlign: { get: function () { return this.W.textAlign; }, set: function (a) { this.W.textAlign = a; }, }, imageSmoothingEnabled: { get: function () { return this.W.imageSmoothingEnabled; }, set: function (a) { this.W.imageSmoothingEnabled = a; }, }, clipInsteadOfFill: { get: function () { return this.Xm; }, set: function (a) { this.Xm = a; }, }, }); var Ol = Object.freeze([]); ml.className = 'CanvasSurfaceContext'; function Pl() { this.ba = this.u = this.K = this.l = 0; } Pl.className = 'ColorNumbers'; function il(a) { Ql || (Rl(), (Ql = !0)); nb(this); this.v = !1; void 0 === a ? ((this.va = ll), (this.Gk = 'black')) : 'string' === typeof a ? ((this.va = ll), (this.Gk = a)) : ((this.va = a), (this.Gk = 'black')); a = this.va; a === ol ? ((this.Gl = Uc), (this.Uk = gd)) : (this.Uk = a === jl ? (this.Gl = dd) : (this.Gl = Sc)); this.ys = 0; this.kr = NaN; this.de = this.gs = this.ce = null; this.Kt = this.Hk = 0; } il.prototype.copy = function () { var a = new il(); a.va = this.va; a.Gk = this.Gk; a.Gl = this.Gl.I(); a.Uk = this.Uk.I(); a.ys = this.ys; a.kr = this.kr; null !== this.ce && (a.ce = this.ce.copy()); a.gs = this.gs; return a; }; t = il.prototype; t.freeze = function () { this.v = !0; null !== this.ce && this.ce.freeze(); return this; }; t.ha = function () { Object.isFrozen(this) && A('cannot thaw constant: ' + this); this.v = !1; null !== this.ce && this.ce.ha(); return this; }; t.fb = function (a) { a.classType === il && (this.type = a); }; t.toString = function () { var a = 'Brush('; if (this.type === ll) a += this.color; else if ( ((a = this.type === ol ? a + 'Linear ' : this.type === jl ? a + 'Radial ' : this.type === nl ? a + 'Pattern ' : a + '(unknown) '), (a += this.start + ' ' + this.end), null !== this.colorStops) ) for (var b = this.colorStops.iterator; b.next(); ) a += ' ' + b.key + ':' + b.value; return a + ')'; }; t.addColorStop = function (a, b) { this.v && wa(this); ('number' !== typeof a || !isFinite(a) || 1 < a || 0 > a) && ya(a, '0 <= loc <= 1', il, 'addColorStop:loc'); null === this.ce && (this.ce = new Lb()); this.ce.add(a, b); this.va === ll && (this.type = ol); this.de = null; return this; }; t.xz = function (a, b) { this.v && wa(this); a = void 0 === a || 'number' !== typeof a ? 0.2 : a; b = void 0 === b ? Sl : b; if (this.type === ll) Tl(this.color), (this.color = Ul(a, b)); else if ((this.type === ol || this.type === jl) && null !== this.colorStops) for (var c = this.colorStops.iterator; c.next(); ) Tl(c.value), this.addColorStop(c.key, Ul(a, b)); return this; }; function Vl(a, b, c) { b = void 0 === b || 'number' !== typeof b ? 0.2 : b; c = void 0 === c ? Sl : c; Tl(a); return Ul(b, c); } t.wy = function (a, b) { this.v && wa(this); a = void 0 === a || 'number' !== typeof a ? 0.2 : a; b = void 0 === b ? Sl : b; if (this.type === ll) Tl(this.color), (this.color = Ul(-a, b)); else if ((this.type === ol || this.type === jl) && null !== this.colorStops) for (var c = this.colorStops.iterator; c.next(); ) Tl(c.value), this.addColorStop(c.key, Ul(-a, b)); return this; }; function Wl(a, b, c) { b = void 0 === b || 'number' !== typeof b ? 0.2 : b; c = void 0 === c ? Sl : c; Tl(a); return Ul(-b, c); } function Xl(a, b, c) { Tl(a); a = Yl.l; var d = Yl.K, e = Yl.u, f = Yl.ba; Tl(b); void 0 === c && (c = 0.5); return ( 'rgba(' + Math.round((Yl.l - a) * c + a) + ', ' + Math.round((Yl.K - d) * c + d) + ', ' + Math.round((Yl.u - e) * c + e) + ', ' + Math.round((Yl.ba - f) * c + f) + ')' ); } t.nx = function () { if (this.type === ll) return Zl(this.color); if ((this.type === ol || this.type === jl) && null !== this.colorStops) { var a = this.colorStops; if (this.type === jl) return Zl(a.first().value); if (null !== a.get(0.5)) return Zl(a.get(0.5)); if (2 === a.count) return (a = a.Na()), Zl(Xl(a[0].value, a[1].value)); for (var b = a.iterator, c = -1, d = -1, e = 1, f = 1; b.next(); ) { var g = b.key, h = Math.abs(0.5 - b.key); e > f && h < e ? ((c = g), (e = h)) : f >= e && h < f && ((d = g), (f = h)); } c > d && (c = [d, (d = c)][0]); b = d - c; return Zl(Xl(a.get(c), a.get(d), 1 - e / b)); } return !1; }; function Zl(a) { if (null === a) return null; if (a instanceof il) return a.nx(); Tl(a); return 128 > (299 * Yl.l + 587 * Yl.K + 114 * Yl.u) / 1e3; } function Ul(a, b) { switch (b) { case Sl: var c = 100 * $l(Yl.l); b = 100 * $l(Yl.K); var d = 100 * $l(Yl.u); am.l = 0.4124564 * c + 0.3575761 * b + 0.1804375 * d; am.K = 0.2126729 * c + 0.7151522 * b + 0.072175 * d; am.u = 0.0193339 * c + 0.119192 * b + 0.9503041 * d; am.ba = Yl.ba; c = bm(am.l / cm[0]); b = bm(am.K / cm[1]); d = bm(am.u / cm[2]); dm.l = 116 * b - 16; dm.K = 500 * (c - b); dm.u = 200 * (b - d); dm.ba = am.ba; dm.l = Math.min(100, Math.max(0, dm.l + 100 * a)); a = (dm.l + 16) / 116; c = a - dm.u / 200; am.l = cm[0] * em(dm.K / 500 + a); am.K = cm[1] * (dm.l > fm * gm ? Math.pow(a, 3) : dm.l / fm); am.u = cm[2] * em(c); am.ba = dm.ba; a = -0.969266 * am.l + 1.8760108 * am.K + 0.041556 * am.u; c = 0.0556434 * am.l + -0.2040259 * am.K + 1.0572252 * am.u; Yl.l = 255 * hm((3.2404542 * am.l + -1.5371385 * am.K + -0.4985314 * am.u) / 100); Yl.K = 255 * hm(a / 100); Yl.u = 255 * hm(c / 100); Yl.ba = am.ba; Yl.l = Math.round(Yl.l); 255 < Yl.l ? (Yl.l = 255) : 0 > Yl.l && (Yl.l = 0); Yl.K = Math.round(Yl.K); 255 < Yl.K ? (Yl.K = 255) : 0 > Yl.K && (Yl.K = 0); Yl.u = Math.round(Yl.u); 255 < Yl.u ? (Yl.u = 255) : 0 > Yl.u && (Yl.u = 0); return 'rgba(' + Yl.l + ', ' + Yl.K + ', ' + Yl.u + ', ' + Yl.ba + ')'; case im: b = Yl.l / 255; d = Yl.K / 255; var e = Yl.u / 255, f = Math.max(b, d, e), g = Math.min(b, d, e), h = f - g; g = (f + g) / 2; if (0 === h) c = b = 0; else { switch (f) { case b: c = ((d - e) / h) % 6; break; case d: c = (e - b) / h + 2; break; case e: c = (b - d) / h + 4; } c *= 60; 0 > c && (c += 360); b = h / (1 - Math.abs(2 * g - 1)); } jm.l = Math.round(c); jm.K = Math.round(100 * b); jm.u = Math.round(100 * g); jm.ba = Yl.ba; jm.u = Math.min(100, Math.max(0, jm.u + 100 * a)); return 'hsla(' + jm.l + ', ' + jm.K + '%, ' + jm.u + '%, ' + jm.ba + ')'; default: return A('Unknown color space: ' + b), 'rgba(0, 0, 0, 1)'; } } function Tl(a) { Ql || (Rl(), (Ql = !0)); var b = km; if (null !== b) { b.clearRect(0, 0, 1, 1); b.fillStyle = '#000000'; var c = b.fillStyle; b.fillStyle = a; b.fillStyle !== c ? (b.fillRect(0, 0, 1, 1), (a = b.getImageData(0, 0, 1, 1).data), (Yl.l = a[0]), (Yl.K = a[1]), (Yl.u = a[2]), (Yl.ba = a[3] / 255)) : ((b.fillStyle = '#FFFFFF'), (b.fillStyle = a), (Yl.l = 0), (Yl.K = 0), (Yl.u = 0), (Yl.ba = 1)); } } function $l(a) { a /= 255; return 0.04045 >= a ? a / 12.92 : Math.pow((a + 0.055) / 1.055, 2.4); } function hm(a) { return 0.0031308 >= a ? 12.92 * a : 1.055 * Math.pow(a, 1 / 2.4) - 0.055; } function bm(a) { return a > gm ? Math.pow(a, 1 / 3) : (fm * a + 16) / 116; } function em(a) { var b = a * a * a; return b > gm ? b : (116 * a - 16) / fm; } function Fl(a, b) { 'string' !== typeof a && (a instanceof il || A('Value for ' + b + ' must be a color string or a Brush, not ' + a)); } function Rl() { km = th ? new tk(null).context : null; } pa.Object.defineProperties(il.prototype, { type: { get: function () { return this.va; }, set: function (a) { this.v && wa(this, a); this.va = a; this.start.jc() && (a === ol ? (this.start = Uc) : a === jl && (this.start = dd)); this.end.jc() && (a === ol ? (this.end = gd) : a === jl && (this.end = dd)); this.de = null; }, }, color: { get: function () { return this.Gk; }, set: function (a) { this.v && wa(this, a); this.Gk = a; this.de = null; }, }, start: { get: function () { return this.Gl; }, set: function (a) { this.v && wa(this, a); this.Gl = a.I(); this.de = null; }, }, end: { get: function () { return this.Uk; }, set: function (a) { this.v && wa(this, a); this.Uk = a.I(); this.de = null; }, }, startRadius: { get: function () { return this.ys; }, set: function (a) { this.v && wa(this, a); 0 > a && ya(a, '>= zero', il, 'startRadius'); this.ys = a; this.de = null; }, }, endRadius: { get: function () { return this.kr; }, set: function (a) { this.v && wa(this, a); 0 > a && ya(a, '>= zero', il, 'endRadius'); this.kr = a; this.de = null; }, }, colorStops: { get: function () { return this.ce; }, set: function (a) { this.v && wa(this, a); this.ce = a; this.de = null; }, }, pattern: { get: function () { return this.gs; }, set: function (a) { this.v && wa(this, a); this.gs = a; this.de = null; }, }, }); il.prototype.isDark = il.prototype.nx; il.prototype.darkenBy = il.prototype.wy; il.prototype.lightenBy = il.prototype.xz; il.prototype.addColorStop = il.prototype.addColorStop; var gm = 216 / 24389, fm = 24389 / 27, cm = [95.047, 100, 108.883], km = null, Yl = new Pl(), jm = new Pl(), am = new Pl(), dm = new Pl(), Ql = !1; il.className = 'Brush'; var ll; il.Solid = ll = new D(il, 'Solid', 0); var ol; il.Linear = ol = new D(il, 'Linear', 1); var jl; il.Radial = jl = new D(il, 'Radial', 2); var nl; il.Pattern = nl = new D(il, 'Pattern', 4); var Sl; il.Lab = Sl = new D(il, 'Lab', 5); var im; il.HSL = im = new D(il, 'HSL', 6); il.randomColor = function (a, b) { void 0 === a && (a = 128); void 0 === b && (b = Math.max(a, 255)); var c = Math.abs(b - a); b = Math.floor(a + Math.random() * c).toString(16); var d = Math.floor(a + Math.random() * c).toString(16); a = Math.floor(a + Math.random() * c).toString(16); 2 > b.length && (b = '0' + b); 2 > d.length && (d = '0' + d); 2 > a.length && (a = '0' + a); return '#' + b + d + a; }; il.isValidColor = function (a) { if ('black' === a) return !0; if ('' === a) return !1; Ql || (Rl(), (Ql = !0)); var b = km; if (null === b) return !0; b.fillStyle = '#000000'; var c = b.fillStyle; b.fillStyle = a; if (b.fillStyle !== c) return !0; b.fillStyle = '#FFFFFF'; c = b.fillStyle; b.fillStyle = a; return b.fillStyle !== c; }; il.lighten = function (a) { return Vl(a); }; il.lightenBy = Vl; il.darken = function (a) { return Wl(a); }; il.darkenBy = Wl; il.mix = Xl; il.isDark = Zl; function Cl() { this.name = 'Base'; } Cl.prototype.measure = function () {}; Cl.prototype.Az = function (a, b, c, d, e) { a.measure(b, c, d, e); }; Cl.prototype.arrange = function () {}; Cl.prototype.ly = function (a, b, c, d, e, f) { a.arrange(b, c, d, e, f); }; pa.Object.defineProperties(Cl.prototype, { classType: { get: function () { return X; }, }, }); Cl.prototype.arrangeElement = Cl.prototype.ly; Cl.prototype.measureElement = Cl.prototype.Az; Cl.className = 'PanelLayout'; function lm() { this.name = 'Base'; this.name = 'Position'; } oa(lm, Cl); lm.prototype.measure = function (a, b, c, d, e, f, g) { var h = d.length; a = mm(a); for (var k = 0; k < h; k++) { var l = d[k]; if (l.visible || l === a) { var m = l.margin, n = m.right + m.left; m = m.top + m.bottom; l.measure(b, c, f, g); var p = l.measuredBounds; n = Math.max(p.width + n, 0); m = Math.max(p.height + m, 0); p = l.position.x; var q = l.position.y; isFinite(p) || (p = 0); isFinite(q) || (q = 0); l instanceof W && l.isGeometryPositioned && ((l = l.strokeWidth / 2), (p -= l), (q -= l)); Bc(e, p, q, n, m); } } }; lm.prototype.arrange = function (a, b, c) { var d = b.length, e = a.padding; a = c.x - e.left; c = c.y - e.top; for (e = 0; e < d; e++) { var f = b[e], g = f.measuredBounds, h = f.margin, k = f.position.x, l = f.position.y; k = isNaN(k) ? -a : k - a; l = isNaN(l) ? -c : l - c; if (f instanceof W && f.isGeometryPositioned) { var m = f.strokeWidth / 2; k -= m; l -= m; } f.visible && f.arrange(k + h.left, l + h.top, g.width, g.height); } }; function nm() { this.name = 'Base'; this.name = 'Horizontal'; } oa(nm, Cl); nm.prototype.measure = function (a, b, c, d, e, f, g) { var h = d.length; b = Ka(); f = mm(a); for (var k = 0; k < h; k++) { var l = d[k]; if (l.visible || l === f) { var m = $k(l, !1); if (m !== Zg && m !== Lk) b.push(l); else { l.measure(Infinity, c, 0, g); m = l.margin; l = l.measuredBounds; var n = Math.max(l.height + m.top + m.bottom, 0); e.width += Math.max(l.width + m.right + m.left, 0); e.height = Math.max(e.height, n); } } } d = b.length; a.desiredSize.height ? (c = Math.min(a.desiredSize.height, a.maxSize.height)) : 0 !== e.height && (c = Math.min(e.height, a.maxSize.height)); for (a = 0; a < d; a++) if (((k = b[a]), k.visible || k === f)) (m = k.margin), (h = m.right + m.left), (m = m.top + m.bottom), k.measure(Infinity, c, 0, g), (k = k.measuredBounds), (m = Math.max(k.height + m, 0)), (e.width += Math.max(k.width + h, 0)), (e.height = Math.max(e.height, m)); Oa(b); }; nm.prototype.arrange = function (a, b, c) { for ( var d = b.length, e = a.padding, f = e.top, g = a.isOpposite, h = g ? c.width : e.left, k = 0; k < d; k++ ) { var l = f, m = b[k]; if (m.visible) { var n = m.measuredBounds, p = m.margin, q = p.top + p.bottom, r = f + e.bottom, u = n.height, x = $k(m, !1); if ((isNaN(m.desiredSize.height) && x === be) || x === Mk) u = Math.max(c.height - q - r, 0); q = u + q + r; r = m.alignment; r.Kb() && (r = a.defaultAlignment); r.gb() || (r = dd); g && (h -= n.width + p.left + p.right); m.arrange( h + r.offsetX + p.left, l + r.offsetY + p.top + (c.height * r.y - q * r.y), n.width, u, ); g || (h += n.width + p.left + p.right); } } }; function om() { this.name = 'Base'; this.name = 'Vertical'; } oa(om, Cl); om.prototype.measure = function (a, b, c, d, e, f) { var g = d.length; c = Ka(); for (var h = mm(a), k = 0; k < g; k++) { var l = d[k]; if (l.visible || l === h) { var m = $k(l, !1); if (m !== Zg && m !== Mk) c.push(l); else { var n = l.margin; m = n.right + n.left; n = n.top + n.bottom; l.measure(b, Infinity, f, 0); l = l.measuredBounds; sc(e, Math.max(e.width, Math.max(l.width + m, 0)), e.height + Math.max(l.height + n, 0)); } } } d = c.length; if (0 !== d) { a.desiredSize.width ? (b = Math.min(a.desiredSize.width, a.maxSize.width)) : 0 !== e.width && (b = Math.min(e.width, a.maxSize.width)); for (a = 0; a < d; a++) if (((k = c[a]), k.visible || k === h)) (l = k.margin), (g = l.right + l.left), (l = l.top + l.bottom), k.measure(b, Infinity, f, 0), (k = k.measuredBounds), (l = Math.max(k.height + l, 0)), (e.width = Math.max(e.width, Math.max(k.width + g, 0))), (e.height += l); Oa(c); } }; om.prototype.arrange = function (a, b, c) { for ( var d = b.length, e = a.padding, f = e.left, g = a.isOpposite, h = g ? c.height : e.top, k = 0; k < d; k++ ) { var l = f, m = b[k]; if (m.visible) { var n = m.measuredBounds, p = m.margin, q = p.left + p.right, r = f + e.right, u = n.width, x = $k(m, !1); if ((isNaN(m.desiredSize.width) && x === be) || x === Lk) u = Math.max(c.width - q - r, 0); q = u + q + r; r = m.alignment; r.Kb() && (r = a.defaultAlignment); r.gb() || (r = dd); g && (h -= n.height + p.bottom + p.top); m.arrange( l + r.offsetX + p.left + (c.width * r.x - q * r.x), h + r.offsetY + p.top, u, n.height, ); g || (h += n.height + p.bottom + p.top); } } }; function pm() { this.name = 'Base'; this.name = 'Spot'; } oa(pm, Cl); pm.prototype.measure = function (a, b, c, d, e, f, g) { var h = d.length, k = a.zb(), l = k.margin, m = l.right + l.left, n = l.top + l.bottom; k.measure(b, c, f, g); var p = k.measuredBounds; f = p.width; g = p.height; var q = Math.max(f + m, 0); var r = Math.max(g + n, 0); for ( var u = a.isClipping, x = N.allocAt(-l.left, -l.top, q, r), v = !0, z = mm(a), y = 0; y < h; y++ ) { var B = d[y]; if (B !== k && (B.visible || B === z)) { l = B.margin; q = l.right + l.left; r = l.top + l.bottom; p = $k(B, !1); switch (p) { case be: b = f; c = g; break; case Lk: b = f; break; case Mk: c = g; } B.measure(b, c, 0, 0); p = B.measuredBounds; q = Math.max(p.width + q, 0); r = Math.max(p.height + r, 0); var C = B.alignment; C.Kb() && (C = a.defaultAlignment); C.gb() || (C = dd); var I = B.alignmentFocus; I.Kb() && (I = dd); var L = null; B instanceof X && '' !== B.Bg && (B.arrange(0, 0, p.width, p.height), (L = B.$a(B.Bg)), L === B && (L = null)); if (null !== L) { l = L.naturalBounds; p = L.margin; for ( l = G.allocAt(I.x * l.width - I.offsetX - p.left, I.y * l.height - I.offsetY - p.top); L !== B; ) L.transform.ta(l), (L = L.panel); B = C.x * f + C.offsetX - l.x; p = C.y * g + C.offsetY - l.y; G.free(l); } else (B = C.x * f + C.offsetX - (I.x * p.width + I.offsetX) - l.left), (p = C.y * g + C.offsetY - (I.y * p.height + I.offsetY) - l.top); v ? ((v = !1), e.h(B, p, q, r)) : Bc(e, B, p, q, r); } } v ? e.assign(x) : u ? e.hv(x.x, x.y, x.width, x.height) : Bc(e, x.x, x.y, x.width, x.height); N.free(x); p = k.stretch; p === Kk && (p = $k(k, !1)); switch (p) { case Zg: return; case be: if (!isFinite(b) && !isFinite(c)) return; break; case Lk: if (!isFinite(b)) return; break; case Mk: if (!isFinite(c)) return; } p = k.measuredBounds; f = p.width; g = p.height; q = Math.max(f + m, 0); r = Math.max(g + n, 0); l = k.margin; x = N.allocAt(-l.left, -l.top, q, r); for (b = 0; b < h; b++) (c = d[b]), c === k || (!c.visible && c !== z) || ((l = c.margin), (q = l.right + l.left), (r = l.top + l.bottom), (p = c.measuredBounds), (q = Math.max(p.width + q, 0)), (r = Math.max(p.height + r, 0)), (m = c.alignment), m.Kb() && (m = a.defaultAlignment), m.gb() || (m = dd), (c = c.alignmentFocus), c.Kb() && (c = dd), v ? ((v = !1), e.h( m.x * f + m.offsetX - (c.x * p.width + c.offsetX) - l.left, m.y * g + m.offsetY - (c.y * p.height + c.offsetY) - l.top, q, r, )) : Bc( e, m.x * f + m.offsetX - (c.x * p.width + c.offsetX) - l.left, m.y * g + m.offsetY - (c.y * p.height + c.offsetY) - l.top, q, r, )); v ? e.assign(x) : u ? e.hv(x.x, x.y, x.width, x.height) : Bc(e, x.x, x.y, x.width, x.height); N.free(x); }; pm.prototype.arrange = function (a, b, c) { var d = b.length, e = a.zb(), f = e.measuredBounds, g = f.width; f = f.height; var h = a.padding, k = h.left; h = h.top; var l = k - c.x, m = h - c.y; e.arrange(l, m, g, f); for (var n = 0; n < d; n++) { var p = b[n]; if (p !== e) { var q = p.measuredBounds, r = q.width; q = q.height; m = p.alignment; m.Kb() && (m = a.defaultAlignment); m.gb() || (m = dd); var u = p.alignmentFocus; u.Kb() && (u = dd); l = null; p instanceof X && '' !== p.Bg && ((l = p.$a(p.Bg)), l === p && (l = null)); if (null !== l) { var x = l.naturalBounds; for (u = G.allocAt(u.x * x.width - u.offsetX, u.y * x.height - u.offsetY); l !== p; ) l.transform.ta(u), (l = l.panel); l = m.x * g + m.offsetX - u.x; m = m.y * f + m.offsetY - u.y; G.free(u); } else (l = m.x * g + m.offsetX - (u.x * r + u.offsetX)), (m = m.y * f + m.offsetY - (u.y * q + u.offsetY)); l -= c.x; m -= c.y; p.visible && p.arrange(k + l, h + m, r, q); } } }; function qm() { this.name = 'Base'; this.name = 'Auto'; } oa(qm, Cl); qm.prototype.measure = function (a, b, c, d, e, f, g) { var h = d.length, k = a.zb(), l = k.margin, m = b, n = c, p = l.right + l.left, q = l.top + l.bottom; k.measure(b, c, f, g); l = k.measuredBounds; var r = 0, u = null; k instanceof W && ((u = k), (r = u.strokeWidth * u.scale)); var x = Math.max(l.width + p, 0); l = Math.max(l.height + q, 0); var v = rm(k), z = v.x * x + v.offsetX; v = v.y * l + v.offsetY; var y = sm(k), B = y.x * x + y.offsetX; y = y.y * l + y.offsetY; isFinite(b) && (m = Math.max(Math.abs(z - B) - r, 0)); isFinite(c) && (n = Math.max(Math.abs(v - y) - r, 0)); r = M.alloc(); r.h(0, 0); a = mm(a); for (y = 0; y < h; y++) (v = d[y]), v === k || (!v.visible && v !== a) || ((l = v.margin), (x = l.right + l.left), (z = l.top + l.bottom), v.measure(m, n, 0, 0), (l = v.measuredBounds), (x = Math.max(l.width + x, 0)), (l = Math.max(l.height + z, 0)), r.h(Math.max(x, r.width), Math.max(l, r.height))); if (1 === h) (e.width = x), (e.height = l), M.free(r); else { v = rm(k); y = sm(k); h = d = 0; y.x !== v.x && y.y !== v.y && ((d = r.width / Math.abs(y.x - v.x)), (h = r.height / Math.abs(y.y - v.y))); M.free(r); r = 0; null !== u && ((r = u.strokeWidth * u.scale), $g(u) === ah && (d = h = Math.max(d, h))); d += Math.abs(v.offsetX) + Math.abs(y.offsetX) + r; h += Math.abs(v.offsetY) + Math.abs(y.offsetY) + r; u = k.stretch; u === Kk && (u = $k(k, !1)); switch (u) { case Zg: g = f = 0; break; case be: isFinite(b) && (d = b); isFinite(c) && (h = c); break; case Lk: isFinite(b) && (d = b); g = 0; break; case Mk: (f = 0), isFinite(c) && (h = c); } k.dm(); k.measure(d, h, f, g); e.width = k.measuredBounds.width + p; e.height = k.measuredBounds.height + q; } }; qm.prototype.arrange = function (a, b) { var c = b.length, d = a.zb(), e = d.measuredBounds, f = N.alloc(); f.h(0, 0, 1, 1); var g = d.margin, h = g.left; g = g.top; var k = a.padding, l = k.left; k = k.top; d.arrange(l + h, k + g, e.width, e.height); var m = rm(d), n = sm(d), p = m.y * e.height + m.offsetY, q = n.x * e.width + n.offsetX; n = n.y * e.height + n.offsetY; f.x = m.x * e.width + m.offsetX; f.y = p; Bc(f, q, n, 0, 0); f.x += h + l; f.y += g + k; for (e = 0; e < c; e++) (h = b[e]), h !== d && ((l = h.measuredBounds), (g = h.margin), (k = Math.max(l.width + g.right + g.left, 0)), (m = Math.max(l.height + g.top + g.bottom, 0)), (p = h.alignment), p.Kb() && (p = a.defaultAlignment), p.gb() || (p = dd), (k = f.width * p.x + p.offsetX - k * p.x + g.left + f.x), (g = f.height * p.y + p.offsetY - m * p.y + g.top + f.y), h.visible && (Cc(f.x, f.y, f.width, f.height, k, g, l.width, l.height) ? h.arrange(k, g, l.width, l.height) : h.arrange(k, g, l.width, l.height, new N(f.x, f.y, f.width, f.height)))); N.free(f); }; function tm() { this.name = 'Base'; this.name = 'Table'; } oa(tm, Cl); tm.prototype.measure = function (a, b, c, d, e, f, g) { for (var h = d.length, k = Ka(), l = Ka(), m = 0; m < h; m++) { var n = d[m], p = n instanceof X ? n : null; if (null === p || (p.type !== X.TableRow && p.type !== X.TableColumn) || !n.visible) k.push(n); else { l.push(p); for (var q = p.Y.j, r = q.length, u = 0; u < r; u++) { var x = q[u]; p.type === X.TableRow ? (x.row = n.row) : p.type === X.TableColumn && (x.column = n.column); k.push(x); } } } h = k.length; 0 === h && (a.getRowDefinition(0), a.getColumnDefinition(0)); for (var v = [], z = 0; z < h; z++) { var y = k[z]; jj(y, !0); al(y, !0); v[y.row] || (v[y.row] = []); v[y.row][y.column] || (v[y.row][y.column] = []); v[y.row][y.column].push(y); } Oa(k); var B = Ka(), C = Ka(), I = Ka(), L = { count: 0 }, J = { count: 0 }, U = b, R = c, da = a.sb; h = da.length; for (var ja = 0; ja < h; ja++) { var K = da[ja]; void 0 !== K && (K.actual = 0); } da = a.nb; h = da.length; for (var Q = 0; Q < h; Q++) (K = da[Q]), void 0 !== K && (K.actual = 0); for (var xa = v.length, jb = 0, Ha = 0; Ha < xa; Ha++) v[Ha] && (jb = Math.max(jb, v[Ha].length)); var Da = Math.min(a.topIndex, xa - 1), Fa = Math.min(a.leftIndex, jb - 1), Ra = 0; xa = v.length; for (var Ub = mm(a), $a = 0; $a < xa; $a++) if (v[$a]) { jb = v[$a].length; for (var Xa = a.getRowDefinition($a), Ma = (Xa.actual = 0); Ma < jb; Ma++) if (v[$a][Ma]) { var ha = a.getColumnDefinition(Ma); void 0 === B[Ma] && ((ha.actual = 0), (B[Ma] = !0)); for (var fa = v[$a][Ma], hb = fa.length, kb = 0; kb < hb; kb++) { var Na = fa[kb]; if (Na.visible || Na === Ub) { var ee = 1 < Na.rowSpan || 1 < Na.columnSpan; ee && ($a < Da || Ma < Fa || C.push(Na)); var Ld = Na.margin, vb = Ld.right + Ld.left, zf = Ld.top + Ld.bottom; var Eb = sl(Na, Xa, ha, !1); var qe = Na.desiredSize, Wc = !isNaN(qe.height), Vb = !isNaN(qe.width) && Wc; ee || Eb === Zg || Vb || $a < Da || Ma < Fa || (void 0 !== L[Ma] || (Eb !== be && Eb !== Lk) || ((L[Ma] = -1), L.count++), void 0 !== J[$a] || (Eb !== be && Eb !== Mk) || ((J[$a] = -1), J.count++), I.push(Na)); Na.measure(Infinity, Infinity, 0, 0); if (!($a < Da || Ma < Fa)) { var Md = Na.measuredBounds, Ec = Math.max(Md.width + vb, 0), Ie = Math.max(Md.height + zf, 0); if (1 === Na.rowSpan && (Eb === Zg || Eb === Lk)) { K = a.getRowDefinition($a); var Je = K.tc(); Ra = Math.max(Ie - K.actual, 0); Ra + Je > R && (Ra = Math.max(R - Je, 0)); var Af = 0 === K.actual; K.actual = K.actual + Ra; R = Math.max(R - (Ra + (Af ? Je : 0)), 0); } if (1 === Na.columnSpan && (Eb === Zg || Eb === Mk)) { K = a.getColumnDefinition(Ma); var gf = K.tc(); Ra = Math.max(Ec - K.actual, 0); Ra + gf > U && (Ra = Math.max(U - gf, 0)); var Bf = 0 === K.actual; K.actual = K.actual + Ra; U = Math.max(U - (Ra + (Bf ? gf : 0)), 0); } ee && Na.dm(); } } } } } Oa(B); var Wb = 0, Ya = 0; h = a.columnCount; for (var ab = 0; ab < h; ab++) { var Mc = a.nb[ab]; void 0 !== Mc && ((Wb += Mc.ka), 0 !== Mc.ka && (Wb += Mc.tc())); } h = a.rowCount; for (var Cf = 0; Cf < h; Cf++) { var jc = a.sb[Cf]; void 0 !== jc && ((Ya += jc.ka), 0 !== jc.ka && (Ya += jc.tc())); } U = Math.max(b - Wb, 0); var Nd = (R = Math.max(c - Ya, 0)), qc = U; h = I.length; for (var Od = 0; Od < h; Od++) { var Xb = I[Od], Dh = a.getRowDefinition(Xb.row), Eh = a.getColumnDefinition(Xb.column), Ke = Xb.measuredBounds, pb = Xb.margin, Df = pb.right + pb.left, Le = pb.top + pb.bottom; L[Xb.column] = 0 === Eh.actual && void 0 !== L[Xb.column] ? Math.max(Ke.width + Df, L[Xb.column]) : null; J[Xb.row] = 0 === Dh.actual && void 0 !== J[Xb.row] ? Math.max(Ke.height + Le, J[Xb.row]) : null; } var Yb = 0, Me = 0, Nc; for (Nc in J) 'count' !== Nc && (Yb += J[Nc]); for (Nc in L) 'count' !== Nc && (Me += L[Nc]); for (var eb = M.alloc(), Ne = 0; Ne < h; Ne++) { var rb = I[Ne]; if (rb.visible || rb === Ub) { var rc = a.getRowDefinition(rb.row), lb = a.getColumnDefinition(rb.column), Xc = 0; isFinite(lb.width) ? (Xc = lb.width) : (isFinite(U) && null !== L[rb.column] ? 0 === Me ? (Xc = lb.actual + U) : (Xc = (L[rb.column] / Me) * qc) : null !== L[rb.column] ? (Xc = U) : (Xc = lb.actual || U), (Xc = Math.max(0, Xc - lb.tc()))); var Yc = 0; isFinite(rc.height) ? (Yc = rc.height) : (isFinite(R) && null !== J[rb.row] ? 0 === Yb ? (Yc = rc.actual + R) : (Yc = (J[rb.row] / Yb) * Nd) : null !== J[rb.row] ? (Yc = R) : (Yc = rc.actual || R), (Yc = Math.max(0, Yc - rc.tc()))); eb.h( Math.max(lb.minimum, Math.min(Xc, lb.maximum)), Math.max(rc.minimum, Math.min(Yc, rc.maximum)), ); Eb = sl(rb, rc, lb, !1); switch (Eb) { case Lk: eb.height = Math.max(eb.height, rc.actual + R); break; case Mk: eb.width = Math.max(eb.width, lb.actual + U); } var xd = rb.margin, Bg = xd.right + xd.left, Ef = xd.top + xd.bottom; rb.dm(); rb.measure(eb.width, eb.height, lb.minimum, rc.minimum); var Ff = rb.measuredBounds, hf = Math.max(Ff.width + Bg, 0), kd = Math.max(Ff.height + Ef, 0); isFinite(U) && (hf = Math.min(hf, eb.width)); isFinite(R) && (kd = Math.min(kd, eb.height)); var Pd = 0; Pd = rc.actual; rc.actual = Math.max(rc.actual, kd); Ra = rc.actual - Pd; R = Math.max(R - Ra, 0); Pd = lb.actual; lb.actual = Math.max(lb.actual, hf); Ra = lb.actual - Pd; U = Math.max(U - Ra, 0); } } Oa(I); var ld = M.alloc(), md = Ka(), ob = Ka(); h = C.length; if (0 !== h) for (var fb = 0; fb < xa; fb++) if (v[fb]) { jb = v[fb].length; var nd = a.getRowDefinition(fb); md[fb] = nd.actual; for (var Zc = 0; Zc < jb; Zc++) if (v[fb][Zc]) { var od = a.getColumnDefinition(Zc); ob[Zc] = od.actual; } } for (var vc = 0; vc < h; vc++) { var Ba = C[vc]; if (Ba.visible || Ba === Ub) { var $c = a.getRowDefinition(Ba.row), Zb = a.getColumnDefinition(Ba.column); eb.h( Math.max(Zb.minimum, Math.min(b, Zb.maximum)), Math.max($c.minimum, Math.min(c, $c.maximum)), ); Eb = sl(Ba, $c, Zb, !1); switch (Eb) { case be: 0 !== ob[Zb.index] && (eb.width = Math.min(eb.width, ob[Zb.index])); 0 !== md[$c.index] && (eb.height = Math.min(eb.height, md[$c.index])); break; case Lk: 0 !== ob[Zb.index] && (eb.width = Math.min(eb.width, ob[Zb.index])); break; case Mk: 0 !== md[$c.index] && (eb.height = Math.min(eb.height, md[$c.index])); } isFinite(Zb.width) && (eb.width = Zb.width); isFinite($c.height) && (eb.height = $c.height); ld.h(0, 0); for (var fe = 1; fe < Ba.rowSpan && !(Ba.row + fe >= a.rowCount); fe++) (K = a.getRowDefinition(Ba.row + fe)), (Ra = 0), (Ra = Eb === be || Eb === Mk ? Math.max( K.minimum, 0 === md[Ba.row + fe] ? K.maximum : Math.min(md[Ba.row + fe], K.maximum), ) : Math.max(K.minimum, isNaN(K.Pc) ? K.maximum : Math.min(K.Pc, K.maximum))), (ld.height += Ra); for (var Oe = 1; Oe < Ba.columnSpan && !(Ba.column + Oe >= a.columnCount); Oe++) (K = a.getColumnDefinition(Ba.column + Oe)), (Ra = 0), (Ra = Eb === be || Eb === Lk ? Math.max( K.minimum, 0 === ob[Ba.column + Oe] ? K.maximum : Math.min(ob[Ba.column + Oe], K.maximum), ) : Math.max(K.minimum, isNaN(K.Pc) ? K.maximum : Math.min(K.Pc, K.maximum))), (ld.width += Ra); eb.width += ld.width; eb.height += ld.height; var ge = Ba.margin, wc = ge.right + ge.left, re = ge.top + ge.bottom; Ba.measure(eb.width, eb.height, f, g); for ( var ad = Ba.measuredBounds, wb = Math.max(ad.width + wc, 0), Qd = Math.max(ad.height + re, 0), Mb = 0, se = 0; se < Ba.rowSpan && !(Ba.row + se >= a.rowCount); se++ ) (K = a.getRowDefinition(Ba.row + se)), (Mb += K.total || 0); if (Mb < Qd) { var yd = Qd - Mb, he = Qd - Mb; if (null !== Ba.spanAllocation) for ( var Cg = Ba.spanAllocation, bd = 0; bd < Ba.rowSpan && !(0 >= yd) && !(Ba.row + bd >= a.rowCount); bd++ ) { K = a.getRowDefinition(Ba.row + bd); var Pe = K.ka || 0, Dg = Cg(Ba, K, he); K.actual = Math.min(K.maximum, Pe + Dg); K.ka !== Pe && (yd -= K.ka - Pe); } for (; 0 < yd; ) { var Gf = K.ka || 0; isNaN(K.height) && K.maximum > Gf && ((K.actual = Math.min(K.maximum, Gf + yd)), K.ka !== Gf && (yd -= K.ka - Gf)); if (0 === K.index) break; K = a.getRowDefinition(K.index - 1); } } for (var Qe = 0, Eg = 0; Eg < Ba.columnSpan && !(Ba.column + Eg >= a.columnCount); Eg++) (K = a.getColumnDefinition(Ba.column + Eg)), (Qe += K.total || 0); if (Qe < wb) { var cg = wb - Qe, Fi = wb - Qe; if (null !== Ba.spanAllocation) for ( var Re = Ba.spanAllocation, Se = 0; Se < Ba.columnSpan && !(0 >= cg) && !(Ba.column + Se >= a.columnCount); Se++ ) { K = a.getColumnDefinition(Ba.column + Se); var Fh = K.ka || 0, mt = Re(Ba, K, Fi); K.actual = Math.min(K.maximum, Fh + mt); K.ka !== Fh && (cg -= K.ka - Fh); } for (; 0 < cg; ) { var Vj = K.ka || 0; isNaN(K.width) && K.maximum > Vj && ((K.actual = Math.min(K.maximum, Vj + cg)), K.ka !== Vj && (cg -= K.ka - Vj)); if (0 === K.index) break; K = a.getColumnDefinition(K.index - 1); } } } } Oa(C); M.free(ld); M.free(eb); void 0 !== md && Oa(md); void 0 !== ob && Oa(ob); var Fg = 0, Gg = 0, Wj = a.desiredSize, Oq = a.maxSize; Eb = $k(a, !0); var Gi = (Ya = Wb = 0), Hi = 0; h = a.columnCount; for (var Xj = 0; Xj < h; Xj++) void 0 !== a.nb[Xj] && ((K = a.getColumnDefinition(Xj)), isFinite(K.width) ? ((Gi += K.width), (Gi += K.tc())) : um(K) === vm ? ((Gi += K.ka), (Gi += K.tc())) : 0 !== K.ka && ((Wb += K.ka), (Wb += K.tc()))); isFinite(Wj.width) ? (Fg = Math.min(Wj.width, Oq.width)) : (Fg = Eb !== Zg && isFinite(b) ? b : Wb); Fg = Math.max(Fg, a.minSize.width); Fg = Math.max(Fg - Gi, 0); for (var nt = 0 === Wb ? 1 : Math.max(Fg / Wb, 1), Zj = 0; Zj < h; Zj++) void 0 !== a.nb[Zj] && ((K = a.getColumnDefinition(Zj)), isFinite(K.width) || um(K) === vm || (K.actual = K.ka * nt), (K.position = e.width), 0 !== K.ka && ((e.width += K.ka), (e.width += K.tc()))); h = a.rowCount; for (var ak = 0; ak < h; ak++) void 0 !== a.sb[ak] && ((K = a.getRowDefinition(ak)), isFinite(K.height) ? ((Hi += K.height), (Hi += K.tc())) : um(K) === vm ? ((Hi += K.ka), (Hi += K.tc())) : 0 !== K.ka && ((Ya += K.ka), 0 !== K.ka && (Ya += K.tc()))); isFinite(Wj.height) ? (Gg = Math.min(Wj.height, Oq.height)) : (Gg = Eb !== Zg && isFinite(c) ? c : Ya); Gg = Math.max(Gg, a.minSize.height); Gg = Math.max(Gg - Hi, 0); for (var ot = 0 === Ya ? 1 : Math.max(Gg / Ya, 1), bk = 0; bk < h; bk++) void 0 !== a.sb[bk] && ((K = a.getRowDefinition(bk)), isFinite(K.height) || um(K) === vm || (K.actual = K.ka * ot), (K.position = e.height), 0 !== K.ka && ((e.height += K.ka), 0 !== K.ka && (e.height += K.tc()))); h = l.length; for (var kn = 0; kn < h; kn++) { var Rd = l[kn], ln = 0, mn = 0; Rd.type === X.TableRow ? ((ln = e.width), (K = a.getRowDefinition(Rd.row)), (mn = K.actual)) : ((K = a.getColumnDefinition(Rd.column)), (ln = K.actual), (mn = e.height)); Rd.measuredBounds.h(0, 0, ln, mn); jj(Rd, !1); v[Rd.row] || (v[Rd.row] = []); v[Rd.row][Rd.column] || (v[Rd.row][Rd.column] = []); v[Rd.row][Rd.column].push(Rd); } Oa(l); a.fp = v; }; tm.prototype.arrange = function (a, b, c) { var d = b.length, e = a.padding, f = e.left; e = e.top; for (var g = a.fp, h, k, l = g.length, m = 0, n = 0; n < l; n++) g[n] && (m = Math.max(m, g[n].length)); for (n = Math.min(a.topIndex, l - 1); n !== l && (void 0 === a.sb[n] || 0 === a.sb[n].ka); ) n++; n = Math.min(n, l - 1); n = -a.sb[n].position; for (h = Math.min(a.leftIndex, m - 1); h !== m && (void 0 === a.nb[h] || 0 === a.nb[h].ka); ) h++; h = Math.min(h, m - 1); for (var p = -a.nb[h].position, q = M.alloc(), r = 0; r < l; r++) if (g[r]) { m = g[r].length; var u = a.getRowDefinition(r); k = u.position + n + e; 0 !== u.ka && (k += u.Ou()); for (var x = 0; x < m; x++) if (g[r][x]) { var v = a.getColumnDefinition(x); h = v.position + p + f; 0 !== v.ka && (h += v.Ou()); for (var z = g[r][x], y = z.length, B = 0; B < y; B++) { var C = z[B], I = C.measuredBounds, L = C instanceof X ? C : null; if (null === L || (L.type !== X.TableRow && L.type !== X.TableColumn)) { q.h(0, 0); for (var J = 1; J < C.rowSpan && !(r + J >= a.rowCount); J++) (L = a.getRowDefinition(r + J)), (q.height += L.total); for (J = 1; J < C.columnSpan && !(x + J >= a.columnCount); J++) (L = a.getColumnDefinition(x + J)), (q.width += L.total); var U = v.ka + q.width, R = u.ka + q.height; J = h; L = k; var da = U, ja = R, K = h, Q = k, xa = U, jb = R; h + U > c.width && (xa = Math.max(c.width - h, 0)); k + R > c.height && (jb = Math.max(c.height - k, 0)); var Ha = C.alignment; if (Ha.Kb()) { Ha = a.defaultAlignment; Ha.gb() || (Ha = dd); var Da = Ha.x; var Fa = Ha.y; var Ra = Ha.offsetX; Ha = Ha.offsetY; var Ub = v.alignment, $a = u.alignment; Ub.gb() && ((Da = Ub.x), (Ra = Ub.offsetX)); $a.gb() && ((Fa = $a.y), (Ha = $a.offsetY)); } else (Da = Ha.x), (Fa = Ha.y), (Ra = Ha.offsetX), (Ha = Ha.offsetY); if (isNaN(Da) || isNaN(Fa)) (Fa = Da = 0.5), (Ha = Ra = 0); Ub = I.width; $a = I.height; var Xa = C.margin, Ma = Xa.left + Xa.right, ha = Xa.top + Xa.bottom, fa = sl(C, u, v, !1); !isNaN(C.desiredSize.width) || (fa !== be && fa !== Lk) || (Ub = Math.max(U - Ma, 0)); !isNaN(C.desiredSize.height) || (fa !== be && fa !== Mk) || ($a = Math.max(R - ha, 0)); U = C.maxSize; R = C.minSize; Ub = Math.min(U.width, Ub); $a = Math.min(U.height, $a); Ub = Math.max(R.width, Ub); $a = Math.max(R.height, $a); U = $a + ha; J += da * Da - (Ub + Ma) * Da + Ra + Xa.left; L += ja * Fa - U * Fa + Ha + Xa.top; C.visible && (Cc(K, Q, xa, jb, J, L, I.width, I.height) ? C.arrange(J, L, Ub, $a) : C.arrange(J, L, Ub, $a, new N(K, Q, xa, jb))); } else C.fl(), C.actualBounds.ha(), (da = C.actualBounds), (J = N.allocAt(da.x, da.y, da.width, da.height)), (da.x = L.type === X.TableRow ? f : h), (da.y = L.type === X.TableColumn ? e : k), (da.width = I.width), (da.height = I.height), C.actualBounds.freeze(), al(C, !1), xc(J, da) || ((I = C.part), null !== I && (I.zh(), C.Fo(I))), N.free(J); } } } M.free(q); for (a = 0; a < d; a++) (c = b[a]), (f = c instanceof X ? c : null), null === f || (f.type !== X.TableRow && f.type !== X.TableColumn) || ((f = c.actualBounds), c.naturalBounds.ha(), c.naturalBounds.h(0, 0, f.width, f.height), c.naturalBounds.freeze()); }; function wm() { this.name = 'Base'; this.name = 'TableRow'; } oa(wm, Cl); wm.prototype.measure = function () {}; wm.prototype.arrange = function () {}; function xm() { this.name = 'Base'; this.name = 'TableColumn'; } oa(xm, Cl); xm.prototype.measure = function () {}; xm.prototype.arrange = function () {}; function ym() { this.name = 'Base'; this.name = 'Viewbox'; } oa(ym, Cl); ym.prototype.measure = function (a, b, c, d, e, f, g) { 1 < d.length && A('Viewbox Panel cannot contain more than one GraphObject.'); d = d[0]; d.Ca = 1; d.dm(); d.measure(Infinity, Infinity, f, g); var h = d.measuredBounds, k = d.margin, l = k.right + k.left; k = k.top + k.bottom; if (isFinite(b) || isFinite(c)) { var m = d.scale, n = h.width; h = h.height; var p = Math.max(b - l, 0), q = Math.max(c - k, 0), r = 1; a.viewboxStretch === ah ? 0 !== n && 0 !== h && (r = Math.min(p / n, q / h)) : 0 !== n && 0 !== h && (r = Math.max(p / n, q / h)); 0 === r && (r = 1e-4); d.Ca *= r; m !== d.scale && (jj(d, !0), d.measure(Infinity, Infinity, f, g)); } h = d.measuredBounds; e.width = isFinite(b) ? b : Math.max(h.width + l, 0); e.height = isFinite(c) ? c : Math.max(h.height + k, 0); }; ym.prototype.arrange = function (a, b, c) { b = b[0]; var d = b.measuredBounds, e = b.margin, f = Math.max(d.width + (e.right + e.left), 0); e = Math.max(d.height + (e.top + e.bottom), 0); var g = b.alignment; g.Kb() && (g = a.defaultAlignment); g.gb() || (g = dd); b.arrange( c.width * g.x - f * g.x + g.offsetX, c.height * g.y - e * g.y + g.offsetY, d.width, d.height, ); }; function zm() { this.name = 'Base'; this.name = 'Grid'; } oa(zm, Cl); zm.prototype.measure = function () {}; zm.prototype.arrange = function () {}; function Am() { this.name = 'Base'; this.name = 'Link'; } oa(Am, Cl); Am.prototype.measure = function (a, b, c, d, e) { c = d.length; if (a instanceof pf || a instanceof S) { var f = null, g = null, h = null; a instanceof S && (g = f = a); a instanceof pf && ((h = a), (f = h.adornedPart)); if (f instanceof S) { var k = f; if (0 === c) sc(a.naturalBounds, 0, 0), a.measuredBounds.h(0, 0, 0, 0); else { var l = a instanceof pf ? null : f.path, m = f.routeBounds; b = a.kg; b.h(0, 0, m.width, m.height); var n = k.points; f = f.pointsCount; null !== h ? h.hk(!1) : null !== g && g.hk(!1); var p = m.width, q = m.height; a.location.h(m.x, m.y); a.l.length = 0; null !== l && (Bm(a, p, q, l), (h = l.measuredBounds), b.Jc(h), a.l.push(h)); h = Qc.alloc(); for (var r = G.alloc(), u = G.alloc(), x = 0; x < c; x++) { var v = d[x]; if (v !== l) if (v.isPanelMain && v instanceof W) { Bm(a, p, q, v); var z = v.measuredBounds; b.Jc(z); a.l.push(z); } else if (2 > f) v.measure(Infinity, Infinity, 0, 0), (z = v.measuredBounds), b.Jc(z), a.l.push(z); else { var y = v.segmentIndex; z = v.segmentFraction; var B = v.alignmentFocus; B.jc() && (B = dd); var C = v.segmentOrientation, I = v.segmentOffset; if (y < -f || y >= f) { z = k.midPoint; var L = k.midAngle; if (C !== Og) { var J = k.computeAngle(v, C, L); v.zc = J; } J = z.x - m.x; var U = z.y - m.y; } else { J = 0; if (0 <= y) { U = n.N(y); var R = y < f - 1 ? n.N(y + 1) : U; } else (J = f + y), (U = n.N(J)), (R = 0 < J ? n.N(J - 1) : U); if (U.Qa(R)) { 0 <= y ? ((L = 0 < y ? n.N(y - 1) : U), (J = y < f - 2 ? n.N(y + 2) : R)) : ((L = J < f - 1 ? n.N(J + 1) : U), (J = 1 < J ? n.N(J - 2) : R)); var da = L.Ce(U), ja = R.Ce(J); L = da > ja + 10 ? 0 <= y ? L.Wa(U) : U.Wa(L) : ja > da + 10 ? 0 <= y ? R.Wa(J) : J.Wa(R) : 0 <= y ? L.Wa(J) : J.Wa(L); } else L = 0 <= y ? U.Wa(R) : R.Wa(U); C !== Og && ((J = k.computeAngle(v, C, L)), (v.zc = J)); J = U.x + (R.x - U.x) * z - m.x; U = U.y + (R.y - U.y) * z - m.y; } v.measure(Infinity, Infinity, 0, 0); z = v.measuredBounds; R = v.naturalBounds; var K = 0; v instanceof W && (K = v.strokeWidth); da = R.width + K; ja = R.height + K; h.reset(); h.translate(-z.x, -z.y); h.scale(v.scale, v.scale); h.rotate(C === Og ? v.angle : L, da / 2, ja / 2); (C !== Cm && C !== Dm) || h.rotate(90, da / 2, ja / 2); (C !== Em && C !== Fm) || h.rotate(-90, da / 2, ja / 2); C === Gm && ((45 < L && 135 > L) || (225 < L && 315 > L)) && h.rotate(-L, da / 2, ja / 2); R = new N(0, 0, da, ja); r.Vi(R, B); h.ta(r); B = -r.x + (K / 2) * v.scale; v = -r.y + (K / 2) * v.scale; u.assign(I); K = isNaN(I.x); var Q = isNaN(I.y); if (K || Q) { da = da / 2 + 3; ja = ja / 2 + 3; var xa = 45 <= L && 135 >= L, jb = 225 <= L && 315 >= L; C === Og && (xa || jb) ? ((u.x = Q ? da : I.y), (u.y = K ? ja : I.x), xa ? 0 <= y || !K || (u.y = -ja) : jb && (0 <= y && K && (u.y = -ja), Q && (u.x = -da))) : (K && (u.x = 0 <= y ? da : -da), Q && (u.y = -ja), u.rotate(L)); } else u.rotate(L); J += u.x; U += u.y; R.set(z); R.h(J + B, U + v, z.width, z.height); a.l.push(R); b.Jc(R); } } if (null !== g) for (d = g.labelNodes; d.next(); ) d.value.measure(Infinity, Infinity); a.kg = b; a = a.location; a.h(a.x + b.x, a.y + b.y); sc(e, b.width || 0, b.height || 0); Qc.free(h); G.free(r); G.free(u); } } } }; Am.prototype.arrange = function (a, b) { var c = b.length; if (a instanceof pf || a instanceof S) { var d = null, e = null, f = null; a instanceof S && (e = d = a); a instanceof pf && ((f = a), (d = f.adornedPart)); var g = a instanceof pf ? null : d.path; if (0 !== a.l.length) { var h = a.l, k = 0; if (null !== g && k < a.l.length) { var l = h[k]; k++; g.arrange(l.x - a.kg.x, l.y - a.kg.y, l.width, l.height); } for (l = 0; l < c; l++) { var m = b[l]; if (m !== g && k < a.l.length) { var n = h[k]; k++; m.arrange(n.x - a.kg.x, n.y - a.kg.y, n.width, n.height); } } } b = d.points; c = b.count; if (2 <= c && a instanceof S) for (d = a.labelNodes; d.next(); ) { n = a; g = d.value; h = g.segmentIndex; var p = g.segmentFraction; l = g.alignmentFocus; var q = g.segmentOrientation; k = g.segmentOffset; if (h < -c || h >= c) { var r = n.midPoint; m = n.midAngle; q !== Og && ((n = n.computeAngle(g, q, m)), (g.angle = n)); n = r.x; var u = r.y; } else { var x = 0; 0 <= h ? ((u = b.j[h]), (r = h < c - 1 ? b.j[h + 1] : u)) : ((x = c + h), (u = b.j[x]), (r = 0 < x ? b.j[x - 1] : u)); if (u.Qa(r)) { 0 <= h ? ((m = 0 < h ? b.j[h - 1] : u), (x = h < c - 2 ? b.j[h + 2] : r)) : ((m = x < c - 1 ? b.j[x + 1] : u), (x = 1 < x ? b.j[x - 2] : r)); var v = m.Ce(u), z = r.Ce(x); m = v > z + 10 ? 0 <= h ? m.Wa(u) : u.Wa(m) : z > v + 10 ? 0 <= h ? r.Wa(x) : x.Wa(r) : 0 <= h ? m.Wa(x) : x.Wa(m); } else m = 0 <= h ? u.Wa(r) : r.Wa(u); q !== Og && ((n = n.computeAngle(g, q, m)), (g.angle = n)); n = u.x + (r.x - u.x) * p; u = u.y + (r.y - u.y) * p; } l.dt() ? (g.location = new G(n, u)) : (l.jc() && (l = dd), (r = Qc.alloc()), r.reset(), r.scale(g.scale, g.scale), r.rotate(g.angle, 0, 0), (p = g.naturalBounds), (p = N.allocAt(0, 0, p.width, p.height)), (q = G.alloc()), q.Vi(p, l), r.ta(q), (l = -q.x), (x = -q.y), (k = k.copy()), isNaN(k.x) && (0 <= h ? (k.x = q.x + 3) : (k.x = -(q.x + 3))), isNaN(k.y) && (k.y = -(q.y + 3)), k.rotate(m), (n += k.x), (u += k.y), r.Vv(p), (l += p.x), (x += p.y), (h = G.allocAt(n + l, u + x)), g.move(h), G.free(h), G.free(q), N.free(p), Qc.free(r)); } null !== f ? f.hk(!1) : null !== e && e.hk(!1); } }; function Bm(a, b, c, d) { if (!1 !== oj(d)) { var e = d.strokeWidth; 0 === e && a instanceof pf && a.type === X.Link && a.adornedObject instanceof W && (e = a.adornedObject.strokeWidth); e *= d.Ca; a instanceof S && null !== a.qa ? ((a = a.qa.bounds), Xk(d, a.x - e / 2, a.y - e / 2, a.width + e, a.height + e)) : a instanceof pf && null !== a.adornedPart.qa ? ((a = a.adornedPart.qa.bounds), Xk(d, a.x - e / 2, a.y - e / 2, a.width + e, a.height + e)) : Xk(d, -(e / 2), -(e / 2), b + e, c + e); jj(d, !1); } } function Hm() { this.name = 'Base'; this.name = 'Graduated'; } oa(Hm, Cl); Hm.prototype.measure = function (a, b, c, d, e, f, g) { var h = a.zb(); a.ij = []; var k = h.margin, l = k.right + k.left, m = k.top + k.bottom; h.measure(b, c, f, g); var n = h.measuredBounds, p = new N(-k.left, -k.top, Math.max(n.width + l, 0), Math.max(n.height + m, 0)); a.ij.push(p); e.assign(p); for ( var q = h.geometry, r = h.strokeWidth, u = q.flattenedSegments, x = q.flattenedLengths, v = q.flattenedTotalLength, z = u.length, y = 0, B = 0, C = Ka(), I = 0; I < z; I++ ) { var L = u[I], J = []; B = y = 0; for (var U = L.length, R = 0; R < U; R += 2) { var da = L[R], ja = L[R + 1]; if (0 !== R) { var K = (180 * Math.atan2(ja - B, da - y)) / Math.PI; 0 > K && (K += 360); J.push(K); } y = da; B = ja; } C.push(J); } if (null === a.Pg) { for (var Q = [], xa = a.Y.j, jb = xa.length, Ha = 0; Ha < jb; Ha++) { var Da = xa[Ha], Fa = []; Q.push(Fa); if (Da.visible) for (var Ra = Da.interval, Ub = 0; Ub < jb; Ub++) { var $a = xa[Ub]; if ( $a.visible && Da !== $a && !( (Da instanceof W && !($a instanceof W)) || (Da instanceof vh && !($a instanceof vh)) ) ) { var Xa = $a.interval; Xa > Ra && Fa.push(Xa); } } } a.Pg = Q; } var Ma = a.Pg; var ha = a.Y.j, fa = ha.length, hb = 0, kb = 0, Na = v; a.kj = []; for (var ee, Ld = 0; Ld < fa; Ld++) { var vb = ha[Ld]; ee = []; if (vb.visible && vb !== h) { var zf = vb.interval, Eb = a.graduatedTickUnit; if (!(2 > (Eb * zf * v) / a.graduatedRange)) { var qe = x[0][0], Wc = 0, Vb = 0; kb = v * vb.graduatedStart - 1e-4; Na = v * vb.graduatedEnd + 1e-4; var Md = Eb * zf, Ec = a.graduatedTickBase; if (Ec < a.graduatedMin) { var Ie = (a.graduatedMin - Ec) / Md; Ie = 0 === Ie % 1 ? Ie : Math.floor(Ie + 1); Ec += Ie * Md; } else Ec > a.graduatedMin + Md && (Ec -= Math.floor((Ec - a.graduatedMin) / Md) * Md); for (var Je = Ma[Ld]; Ec <= a.graduatedMax; ) { a: { for (var Af = Je.length, gf = 0; gf < Af; gf++) if (H.ca((Ec - a.graduatedTickBase) % (Je[gf] * a.graduatedTickUnit), 0)) { var Bf = !1; break a; } Bf = !0; } if ( Bf && (null === vb.graduatedSkip || !vb.graduatedSkip(Ec)) && ((hb = ((Ec - a.graduatedMin) * v) / a.graduatedRange), hb > v && (hb = v), kb <= hb && hb <= Na) ) { for (var Wb = C[Wc][Vb], Ya = x[Wc][Vb]; Wc < x.length; ) { for (; hb > qe && Vb < x[Wc].length - 1; ) Vb++, (Wb = C[Wc][Vb]), (Ya = x[Wc][Vb]), (qe += Ya); if (hb <= qe) break; Wc++; Vb = 0; Wb = C[Wc][Vb]; Ya = x[Wc][Vb]; qe += Ya; } var ab = u[Wc], Mc = ab[2 * Vb], Cf = ab[2 * Vb + 1], jc = (hb - (qe - Ya)) / Ya, Nd = new G( Mc + (ab[2 * Vb + 2] - Mc) * jc + r / 2 - q.bounds.x, Cf + (ab[2 * Vb + 3] - Cf) * jc + r / 2 - q.bounds.y, ); Nd.scale(h.scale, h.scale); var qc = Wb, Od = C[Wc]; 1e-4 > jc ? 0 < Vb ? (qc = Od[Vb - 1]) : H.ca(ab[0], ab[ab.length - 2]) && H.ca(ab[1], ab[ab.length - 1]) && (qc = Od[Od.length - 1]) : 0.9999 < jc && (Vb + 1 < Od.length ? (qc = Od[Vb + 1]) : H.ca(ab[0], ab[ab.length - 2]) && H.ca(ab[1], ab[ab.length - 1]) && (qc = Od[0])); Wb !== qc && (180 < Math.abs(Wb - qc) && (Wb < qc ? (Wb += 360) : (qc += 360)), (Wb = ((Wb + qc) / 2) % 360)); if (vb instanceof vh) { var Xb = ''; null !== vb.graduatedFunction ? ((Xb = vb.graduatedFunction(Ec)), (Xb = null !== Xb && void 0 !== Xb ? Xb.toString() : '')) : (Xb = (+Ec.toFixed(2)).toString()); '' !== Xb && ee.push([Nd, Wb, Xb]); } else ee.push([Nd, Wb]); } Ec += Md; } } } a.kj.push(ee); } Oa(C); for (var Dh = a.kj, Eh = d.length, Ke = 0; Ke < Eh; Ke++) { var pb = d[Ke], Df = Dh[Ke]; if (pb.visible && pb !== h && 0 !== Df.length) { if (pb instanceof W) { var Le = a, Yb = e, Me = pb.alignmentFocus; Me.jc() && (Me = Uc); var Nc = pb.angle; pb.zc = 0; pb.measure(Infinity, Infinity, 0, 0); pb.zc = Nc; var eb = pb.measuredBounds, Ne = eb.width, rb = eb.height, rc = N.allocAt(0, 0, Ne, rb), lb = G.alloc(); lb.Vi(rc, Me); N.free(rc); for (var Xc = -lb.x, Yc = -lb.y, xd = new N(), Bg = Df.length, Ef = 0; Ef < Bg; Ef++) for (var Ff = Df[Ef], hf = Ff[0].x, kd = Ff[0].y, Pd = Ff[1], ld = 0; 4 > ld; ld++) { switch (ld) { case 0: lb.h(Xc, Yc); break; case 1: lb.h(Xc + Ne, Yc); break; case 2: lb.h(Xc, Yc + rb); break; case 3: lb.h(Xc + Ne, Yc + rb); } lb.rotate(Pd + pb.angle); lb.offset(hf, kd); 0 === Ef && 0 === ld ? xd.h(lb.x, lb.y, 0, 0) : xd.Je(lb); lb.offset(-hf, -kd); lb.rotate(-Pd - pb.angle); } G.free(lb); Le.ij.push(xd); Bc(Yb, xd.x, xd.y, xd.width, xd.height); } else if (pb instanceof vh) { var md = a, ob = e; null === md.kh && (md.kh = new vh()); var fb = md.kh; Im(fb, pb); var nd = pb.alignmentFocus; nd.jc() && (nd = Uc); for ( var Zc = pb.segmentOrientation, od = pb.segmentOffset, vc = null, Ba = 0, $c = 0, Zb = 0, fe = 0, Oe = Df.length, ge = 0; ge < Oe; ge++ ) { var wc = Df[ge]; Ba = wc[0].x; $c = wc[0].y; Zb = wc[1]; Zc !== Og && ((fe = S.computeAngle(Zc, Zb)), (fb.zc = fe)); fb.text = wc[2]; fb.measure(Infinity, Infinity, 0, 0); var re = fb.measuredBounds, ad = fb.naturalBounds, wb = ad.width, Qd = ad.height, Mb = Qc.alloc(); Mb.reset(); Mb.translate(-re.x, -re.y); Mb.scale(fb.scale, fb.scale); Mb.rotate(Zc === Og ? fb.angle : Zb, wb / 2, Qd / 2); (Zc !== Cm && Zc !== Dm) || Mb.rotate(90, wb / 2, Qd / 2); (Zc !== Em && Zc !== Fm) || Mb.rotate(-90, wb / 2, Qd / 2); Zc === Gm && ((45 < Zb && 135 > Zb) || (225 < Zb && 315 > Zb)) && Mb.rotate(-Zb, wb / 2, Qd / 2); var se = N.allocAt(0, 0, wb, Qd), yd = G.alloc(); yd.Vi(se, nd); Mb.ta(yd); var he = -yd.x, Cg = -yd.y, bd = G.alloc(); bd.assign(od); isNaN(bd.x) && (bd.x = wb / 2 + 3); isNaN(bd.y) && (bd.y = -(Qd / 2 + 3)); bd.rotate(Zb); Ba += bd.x + he; $c += bd.y + Cg; var Pe = new N(Ba, $c, re.width, re.height), Dg = new N(re.x, re.y, re.width, re.height), Gf = new N(ad.x, ad.y, ad.width, ad.height), Qe = new Jm(); Qe.Vl(fb.metrics); wc.push(fe); wc.push(fb.lineCount); wc.push(Qe); wc.push(Pe); wc.push(Dg); wc.push(Gf); 0 === ge ? (vc = Pe.copy()) : vc.Jc(Pe); G.free(bd); G.free(yd); N.free(se); Qc.free(Mb); } md.ij.push(vc); Bc(ob, vc.x, vc.y, vc.width, vc.height); } jj(pb, !1); } } }; Hm.prototype.arrange = function (a, b, c) { if (null !== a.ij) { var d = a.zb(), e = a.kj, f = a.ij, g = 0, h = f[g]; g++; d.arrange(h.x - c.x, h.y - c.y, h.width, h.height); for (var k = b.length, l = 0; l < k; l++) { var m = b[l]; h = e[l]; m.visible && m !== d && 0 !== h.length && ((h = f[g]), g++, m.arrange(h.x - c.x, h.y - c.y, h.width, h.height)); } a.ij = null; } }; function X(a) { Y.call(this); this.va = void 0 === a ? X.Position : a; null === this.va && A('Panel type not specified or PanelLayout not loaded: ' + a); this.Y = new E(); this.eb = Oc; this.va === X.Grid && (this.isAtomic = !0); this.mn = Ed; this.Ff = Kk; this.va === X.Table && Km(this); this.Hp = ah; this.Kn = kc; this.Ln = ac; this.Hn = 0; this.Gn = 100; this.Jn = 10; this.In = 0; this.Rh = this.jb = this.Pg = this.ij = this.kj = null; this.Yn = NaN; this.je = this.fi = null; this.gl = 'category'; this.Ed = null; this.kg = new N(NaN, NaN, NaN, NaN); this.kh = this.fp = this.vi = null; this.Bg = ''; } oa(X, Y); function Km(a) { a.ej = Oc; a.Jg = 1; a.Wh = null; a.Vh = null; a.Ig = 1; a.Hg = null; a.Uh = null; a.sb = []; a.nb = []; a.Gj = Lm; a.cj = Lm; a.yi = 0; a.hi = 0; } X.prototype.cloneProtected = function (a) { Y.prototype.cloneProtected.call(this, a); a.va = this.va; a.eb = this.eb.I(); a.mn = this.mn.I(); a.Ff = this.Ff; if (a.va === X.Table) { a.ej = this.ej.I(); a.Jg = this.Jg; a.Wh = this.Wh; a.Vh = this.Vh; a.Ig = this.Ig; a.Hg = this.Hg; a.Uh = this.Uh; var b = []; if (0 < this.sb.length) for (var c = this.sb, d = c.length, e = 0; e < d; e++) if (void 0 !== c[e]) { var f = c[e].copy(); f.Ui(a); b[e] = f; } a.sb = b; b = []; if (0 < this.nb.length) for (c = this.nb, d = c.length, e = 0; e < d; e++) void 0 !== c[e] && ((f = c[e].copy()), f.Ui(a), (b[e] = f)); a.nb = b; a.Gj = this.Gj; a.cj = this.cj; a.yi = this.yi; a.hi = this.hi; } a.Hp = this.Hp; a.Kn = this.Kn.I(); a.Ln = this.Ln.I(); a.Hn = this.Hn; a.Gn = this.Gn; a.Jn = this.Jn; a.In = this.In; a.kj = this.kj; a.Pg = this.Pg; a.jb = this.jb; a.Rh = this.Rh; a.Yn = this.Yn; a.fi = this.fi; a.je = this.je; a.gl = this.gl; a.kg.assign(this.kg); a.Bg = this.Bg; null !== this.fp && (a.fp = this.fp); }; X.prototype.pf = function (a) { Y.prototype.pf.call(this, a); a.Y = this.Y; for (var b = a.Y.j, c = b.length, d = 0; d < c; d++) b[d].cg = a; a.vi = null; }; X.prototype.copy = function () { var a = Y.prototype.copy.call(this); if (null !== a) { for (var b = this.Y.j, c = b.length, d = 0; d < c; d++) { var e = b[d].copy(); e.Ui(a); e.Bj = null; var f = a.Y, g = f.count; f.Ib(g, e); f = a.part; if (null !== f) { f.wj = null; null !== e.portId && f instanceof V && (f.yh = !0); var h = a.diagram; (null !== h && h.undoManager.isUndoingRedoing) || f.ab(cf, 'elements', a, null, e, null, g); } } return a; } return null; }; t = X.prototype; t.toString = function () { return 'Panel(' + this.type + ')#' + Bb(this); }; t.Fo = function (a) { Y.prototype.Fo.call(this, a); for (var b = this.Y.j, c = b.length, d = 0; d < c; d++) b[d].Fo(a); }; t.Ei = function (a, b) { if (this.va === X.Grid) { b = this.De() * b.scale; 0 >= b && (b = 1); var c = this.gridCellSize, d = c.width; c = c.height; var e = this.naturalBounds, f = this.actualBounds, g = e.width, h = e.height, k = Math.ceil(g / d), l = Math.ceil(h / c), m = this.gridOrigin; a.save(); a.beginPath(); a.rect(0, 0, g, h); a.clip(); for (var n = [], p = this.Y.j, q = p.length, r = 0; r < q; r++) { var u = p[r], x = []; n.push(x); if (u.visible) { u = Rj(u.figure); for (var v = r + 1; v < q; v++) { var z = p[v]; z.visible && Rj(z.figure) === u && ((z = z.interval), 2 <= z && x.push(z)); } } } p = this.Y.j; q = p.length; for (r = 0; r < q; r++) { var y = p[r]; if (y.visible && ((x = y.interval), !(2 > d * x * b))) { u = y.opacity; v = 1; if (1 !== u) { if (0 === u) continue; v = a.globalAlpha; a.globalAlpha = v * u; } z = n[r]; var B = !1, C = y.strokeDashArray; null !== C && ((B = !0), a.Os(C, y.strokeDashOffset)); if ('LineV' === y.figure && null !== y.stroke) { a.lineWidth = y.strokeWidth; ji(this, a, y.stroke, !1, !1, e, f); a.beginPath(); for (C = y = Math.floor(-m.x / d); C <= y + k; C++) { var I = C * d + m.x; 0 <= I && I <= g && Mm(C, x, z) && (a.moveTo(I, 0), a.lineTo(I, h)); } a.stroke(); } else if ('LineH' === y.figure && null !== y.stroke) { a.lineWidth = y.strokeWidth; ji(this, a, y.stroke, !1, !1, e, f); a.beginPath(); for (C = y = Math.floor(-m.y / c); C <= y + l; C++) (I = C * c + m.y), 0 <= I && I <= h && Mm(C, x, z) && (a.moveTo(0, I), a.lineTo(g, I)); a.stroke(); } else if ('BarV' === y.figure && null !== y.fill) for ( ji(this, a, y.fill, !0, !1, e, f), y = y.width, isNaN(y) && (y = d), I = C = Math.floor(-m.x / d); I <= C + k; I++ ) { var L = I * d + m.x; 0 <= L && L <= g && Mm(I, x, z) && a.fillRect(L, 0, y, h); } else if ('BarH' === y.figure && null !== y.fill) for ( ji(this, a, y.fill, !0, !1, e, f), y = y.height, isNaN(y) && (y = c), I = C = Math.floor(-m.y / c); I <= C + l; I++ ) (L = I * c + m.y), 0 <= L && L <= h && Mm(I, x, z) && a.fillRect(0, L, g, y); B && a.Ms(); 1 !== u && (a.globalAlpha = v); } } a.restore(); a.Rc(!1); } else if (this.va === X.Graduated) { d = b.nj; b.nj = !0; e = this.naturalBounds; c = e.width; e = e.height; a.save(); a.beginPath(); a.rect(-1, -1, c + 1, e + 1); a.clip(); c = this.zb(); c.hc(a, b); e = this.De() * b.scale; 0 >= e && (e = 1); f = c.actualBounds; g = this.Y.j; h = this.kj; k = g.length; for (l = 0; l < k; l++) if (((p = g[l]), (m = h[l]), (n = m.length), p.visible && p !== c && 0 !== m.length)) if (p instanceof W) { if ( !( 2 > ((this.graduatedTickUnit * p.interval * c.geometry.flattenedTotalLength) / this.graduatedRange) * e ) ) for ( q = p.measuredBounds, r = p.strokeWidth * p.scale, x = p.alignmentFocus, x.jc() && (x = Uc), u = 0; u < n; u++ ) (v = m[u][0]), (z = m[u][1]), (B = x), (y = p.tb), y.reset(), y.translate(v.x + f.x, v.y + f.y), y.rotate(z + p.angle, 0, 0), y.translate( -q.width * B.x + B.offsetX + r / 2, -q.height * B.y + B.offsetY + r / 2, ), y.scale(p.scale, p.scale), pl(p, !1), p.Eh.set(p.tb), (p.Tk = p.scale), ql(p, !1), p.hc(a, b), p.tb.reset(); } else if (p instanceof vh) for (null === this.kh && (this.kh = new vh()), q = this.kh, Im(q, p), p = 0; p < n; p++) (u = m[p]), 3 < u.length && ((r = u[6]), (q.Ob = u[2]), (q.zc = u[3]), (q.oc = u[4]), (q.nd = u[5]), (q.qc = u[8]), q.arrange(r.x, r.y, r.width, r.height), (r = u[6]), q.arrange(r.x, r.y, r.width, r.height), (x = u[7]), (u = u[8]), (v = q.tb), v.reset(), v.translate(r.x + f.x, r.y + f.y), v.translate(-x.x, -x.y), Yk(q, v, u.x, u.y, u.width, u.height), pl(q, !1), q.Eh.set(q.tb), (q.Tk = q.scale), ql(q, !1), q.hc(a, b)); b.nj = d; a.restore(); a.Rc(!0); } else { this.va === X.Table && ((a.lineCap = 'butt'), Nm(this, a, !0, this.sb, !0), Nm(this, a, !1, this.nb, !0), Om(this, a, !0, this.sb), Om(this, a, !1, this.nb), Nm(this, a, !0, this.sb, !1), Nm(this, a, !1, this.nb, !1)); (d = this.isClipping) && a.save(); c = this.zb(); e = this.Y.j; f = e.length; for (g = 0; g < f; g++) (h = e[g]), d && h === c && (a.clipInsteadOfFill = !0), h.hc(a, b), d && h === c && (a.clipInsteadOfFill = !1); d && (a.restore(), a.Rc(!0)); } }; function Om(a, b, c, d) { for (var e = d.length, f = a.actualBounds, g = a.naturalBounds, h = !0, k = 0; k < e; k++) { var l = d[k]; if (void 0 !== l) if (h) h = !1; else if (0 !== l.actual) { if (c) { if (l.position > f.height) continue; } else if (l.position > f.width) continue; var m = l.separatorStrokeWidth; isNaN(m) && (m = c ? a.Jg : a.Ig); var n = l.separatorStroke; null === n && (n = c ? a.Wh : a.Hg); if (0 !== m && null !== n) { ji(a, b, n, !1, !1, g, f); n = !1; var p = l.separatorDashArray; null === p && (p = c ? a.Vh : a.Uh); null !== p && ((n = !0), b.Os(p, 0)); b.beginPath(); p = l.position + m; c ? p > f.height && (m -= p - f.height) : p > f.width && (m -= p - f.width); l = l.position + m / 2; b.lineWidth = m; m = a.eb; c ? ((l += m.top), (p = f.width - m.right), b.moveTo(m.left, l), b.lineTo(p, l)) : ((l += m.left), (p = f.height - m.bottom), b.moveTo(l, m.top), b.lineTo(l, p)); b.stroke(); n && b.Ms(); } } } } function Nm(a, b, c, d, e) { for (var f = d.length, g = a.actualBounds, h = a.naturalBounds, k = 0; k < f; k++) { var l = d[k]; if (void 0 !== l && null !== l.background && l.coversSeparators !== e && 0 !== l.actual) { var m = c ? g.height : g.width; if (!(l.position > m)) { var n = l.tc(), p = l.separatorStrokeWidth; isNaN(p) && (p = c ? a.Jg : a.Ig); var q = l.separatorStroke; null === q && (q = c ? a.Wh : a.Hg); null === q && (p = 0); n -= p; p = l.position + p; n += l.actual; p + n > m && (n = m - p); 0 >= n || ((m = a.eb), ji(a, b, l.background, !0, !1, h, g), c ? b.fillRect(m.left, p + m.top, g.width - (m.left + m.right), n) : b.fillRect(p + m.left, m.top, n, g.height - (m.top + m.bottom))); } } } } function Mm(a, b, c) { if (0 !== a % b) return !1; b = c.length; for (var d = 0; d < b; d++) if (0 === a % c[d]) return !1; return !0; } function Rj(a) { return 'LineV' === a || 'BarV' === a; } t.ck = function (a, b, c, d, e) { var f = this.Zd(), g = this.transform, h = 1 / (g.m11 * g.m22 - g.m12 * g.m21), k = g.m22 * h, l = -g.m12 * h, m = -g.m21 * h, n = g.m11 * h, p = h * (g.m21 * g.dy - g.m22 * g.dx), q = h * (g.m12 * g.dx - g.m11 * g.dy); if (null !== this.areaBackground) return (g = this.actualBounds), H.Tc(g.left, g.top, g.right, g.bottom, a, b, c, d, e); if (null !== this.background) return ( (f = a * k + b * m + p), (h = a * l + b * n + q), (a = c * k + d * m + p), (k = c * l + d * n + q), e.h(0, 0), (c = this.naturalBounds), (f = H.Tc(0, 0, c.width, c.height, f, h, a, k, e)), e.transform(g), f ); f || ((k = 1), (m = l = 0), (n = 1), (q = p = 0)); h = a * k + b * m + p; a = a * l + b * n + q; k = c * k + d * m + p; c = c * l + d * n + q; e.h(k, c); d = (k - h) * (k - h) + (c - a) * (c - a); l = !1; n = this.Y.j; q = n.length; m = G.alloc(); p = null; b = Infinity; var r = null; this.isClipping && ((r = G.alloc()), (p = this.zb()), (l = p.ck(h, a, k, c, r)) && (b = (h - r.x) * (h - r.x) + (a - r.y) * (a - r.y))); for (var u = 0; u < q; u++) { var x = n[u]; x.visible && x !== p && x.ck(h, a, k, c, m) && ((l = !0), (x = (h - m.x) * (h - m.x) + (a - m.y) * (a - m.y)), x < d && ((d = x), e.set(m))); } this.isClipping && (b > d && e.set(r), G.free(r)); G.free(m); f && e.transform(g); return l; }; t.s = function (a) { Y.prototype.s.call(this, a); a = null; if (this.va === X.Auto || this.va === X.Link) a = this.zb(); for (var b = this.Y.j, c = b.length, d = 0; d < c; d++) { var e = b[d]; (e === a || e.isPanelMain) && e.s(!0); if (!e.desiredSize.o()) { var f = $k(e, !1); (e instanceof Xg || e instanceof X || e instanceof vh || f !== Zg) && e.s(!0); } } }; t.dm = function () { if (!1 === oj(this)) { jj(this, !0); al(this, !0); for (var a = this.Y.j, b = a.length, c = 0; c < b; c++) a[c].dm(); } }; t.fl = function () { if ((0 !== (this.H & 2048)) === !1) { pl(this, !0); ql(this, !0); for (var a = this.Y.j, b = a.length, c = 0; c < b; c++) a[c].jv(); } }; t.jv = function () { ql(this, !0); for (var a = this.Y.j, b = a.length, c = 0; c < b; c++) a[c].jv(); }; t.hm = function (a, b, c, d) { var e = this.kg; e.h(0, 0, 0, 0); var f = this.desiredSize, g = this.minSize; void 0 === c && ((c = g.width), (d = g.height)); c = Math.max(c, g.width); d = Math.max(d, g.height); var h = this.maxSize; isNaN(f.width) || (a = Math.min(f.width, h.width)); isNaN(f.height) || (b = Math.min(f.height, h.height)); a = Math.max(c, a); b = Math.max(d, b); var k = this.eb; a = Math.max(a - k.left - k.right, 0); b = Math.max(b - k.top - k.bottom, 0); var l = this.Y.j; 0 !== l.length && this.va.measure(this, a, b, l, e, c, d); a = e.width + k.left + k.right; k = e.height + k.top + k.bottom; isFinite(f.width) && (a = f.width); isFinite(f.height) && (k = f.height); a = Math.min(h.width, a); k = Math.min(h.height, k); a = Math.max(g.width, a); k = Math.max(g.height, k); a = Math.max(c, a); k = Math.max(d, k); sc(e, a, k); sc(this.naturalBounds, a, k); Xk(this, 0, 0, a, k); }; t.zb = function () { if (null === this.vi) { var a = this.Y.j, b = a.length; if (0 === b) return null; for (var c = 0; c < b; c++) { var d = a[c]; if (!0 === d.isPanelMain) return (this.vi = d); } this.vi = a[0]; } return this.vi; }; function mm(a) { return null !== a.part ? a.part.locationObject : null; } t.uh = function (a, b, c, d) { var e = this.Y.j; this.actualBounds.h(a, b, c, d); if (0 !== e.length) { if (!this.desiredSize.o()) { a = $k(this, !0); var f = this.measuredBounds; b = f.width; f = f.height; var g = this.Vg, h = g.left + g.right; g = g.top + g.bottom; b === c && f === d && (a = Zg); switch (a) { case Zg: if (b > c || f > d) this.s(), this.measure(b > c ? c : b, f > d ? d : f, 0, 0); break; case be: this.s(!0); this.measure(c + h, d + g, 0, 0); break; case Lk: this.s(!0); this.measure(c + h, f + g, 0, 0); break; case Mk: this.s(!0), this.measure(b + h, d + g, 0, 0); } } this.va.arrange(this, e, this.kg); } }; t.wh = function (a) { var b = this.naturalBounds, c = mm(this); if (Cc(0, 0, b.width, b.height, a.x, a.y)) { b = this.Y.j; for (var d = b.length, e = G.allocAt(0, 0); d--; ) { var f = b[d]; if (f.visible || f === c) if ((Qb(e.set(a), f.transform), f.da(e))) return G.free(e), !0; } G.free(e); return null === this.ib && null === this.dc ? !1 : !0; } return !1; }; t.Ps = function (a) { if (this.Ek === a) return this; for (var b = this.Y.j, c = b.length, d = 0; d < c; d++) { var e = b[d].Ps(a); if (null !== e) return e; } return null; }; t.ym = function (a, b) { b(this, a); if (a instanceof X) { a = a.Y.j; for (var c = a.length, d = 0; d < c; d++) this.ym(a[d], b); } }; function Bj(a, b) { Pm(a, a, b); } function Pm(a, b, c) { c(b); b = b.Y.j; for (var d = b.length, e = 0; e < d; e++) { var f = b[e]; f instanceof X && Pm(a, f, c); } } function Qm(a, b) { Rm(a, a, b); } function Rm(a, b, c) { c(b); if (b instanceof X) { b = b.Y.j; for (var d = b.length, e = 0; e < d; e++) Rm(a, b[e], c); } } t.Yl = function (a) { return Sm(this, this, a); }; function Sm(a, b, c) { if (c(b)) return b; if (b instanceof X) { b = b.Y.j; for (var d = b.length, e = 0; e < d; e++) { var f = Sm(a, b[e], c); if (null !== f) return f; } } return null; } t.$a = function (a) { if (this.name === a) return this; var b = this.Y.j, c = b.length; (null === this.fi && null === this.je) || (c = Tm(this)); for (var d = 0; d < c; d++) { var e = b[d]; if (e instanceof X) { var f = e.$a(a); if (null !== f) return f; } if (e.name === a) return e; } return null; }; function Um(a) { a = a.Y.j; for (var b = a.length, c = 0, d = 0; d < b; d++) { var e = a[d]; if (e instanceof X) c = Math.max(c, Um(e)); else if (e instanceof W) { a: { switch (e.Vk) { case 'None': case 'Square': case 'Ellipse': case 'Circle': case 'LineH': case 'LineV': case 'FramedRectangle': case 'RoundedRectangle': case 'Line1': case 'Line2': case 'Border': case 'Cube1': case 'Cube2': case 'Junction': case 'Cylinder1': case 'Cylinder2': case 'Cylinder3': case 'Cylinder4': case 'PlusLine': case 'XLine': case 'ThinCross': case 'ThickCross': e = 0; break a; } e = (e.ih / 2) * e.Kj * e.De(); } c = Math.max(c, e); } } return c; } t.Zd = function () { return !(this.type === X.TableRow || this.type === X.TableColumn); }; t.Rb = function (a, b, c) { if (!1 === this.pickable) return null; void 0 === b && (b = null); void 0 === c && (c = null); if (pj(this)) return null; var d = this.naturalBounds, e = 1 / this.De(), f = this.Zd(), g = f ? a : Qb(G.allocAt(a.x, a.y), this.transform), h = this.diagram, k = 10, l = 5; null !== h && ((k = h.bm('extraTouchArea')), (l = k / 2)); if (Cc(-(l * e), -(l * e), d.width + k * e, d.height + k * e, g.x, g.y)) { if (!this.isAtomic) { e = this.Y.j; var m = e.length; h = G.alloc(); l = (k = this.isClipping) ? this.zb() : null; if (k && (l.Zd() ? Qb(h.set(a), l.transform) : h.set(a), !l.da(h))) return G.free(h), f || G.free(g), null; for (var n = mm(this); m--; ) { var p = e[m]; if (p.visible || p === n) if ((p.Zd() ? Qb(h.set(a), p.transform) : h.set(a), !k || p !== l)) { var q = null; p instanceof X ? (q = p.Rb(h, b, c)) : !0 === p.pickable && p.da(h) && (q = p); if (null !== q && (null !== b && (q = b(q)), null !== q && (null === c || c(q)))) return G.free(h), f || G.free(g), q; } } G.free(h); } if (null === this.background && null === this.areaBackground) return f || G.free(g), null; a = Cc(0, 0, d.width, d.height, g.x, g.y) ? this : null; f || G.free(g); return a; } f || G.free(g); return null; }; t.Hi = function (a, b, c, d) { if (!1 === this.pickable) return !1; void 0 === b && (b = null); void 0 === c && (c = null); var e = this.naturalBounds, f = this.Zd(), g = f ? a : Qb(G.allocAt(a.x, a.y), this.transform); e = Cc(0, 0, e.width, e.height, g.x, g.y); if (this.type === X.TableRow || this.type === X.TableColumn || e) { if (!this.isAtomic) { for (var h = this.Y.j, k = h.length, l = G.alloc(), m = mm(this); k--; ) { var n = h[k]; if (n.visible || n === m) { n.Zd() ? Qb(l.set(a), n.transform) : l.set(a); var p = n; n = n instanceof X ? n : null; (null !== n ? n.Hi(l, b, c, d) : p.da(l)) && !1 !== p.pickable && (null !== b && (p = b(p)), null === p || (null !== c && !c(p)) || d.add(p)); } } G.free(l); } f || G.free(g); return e && (null !== this.background || null !== this.areaBackground); } f || G.free(g); return !1; }; t.pg = function (a, b, c, d, e, f) { if (!1 === this.pickable) return !1; void 0 === b && (b = null); void 0 === c && (c = null); var g = f; void 0 === f && ((g = Qc.alloc()), g.reset()); g.multiply(this.transform); if (this.vh(a, g)) return Vm(this, b, c, e), void 0 === f && Qc.free(g), !0; if (this.Ic(a, g)) { if (!this.isAtomic) for (var h = mm(this), k = this.Y.j, l = k.length; l--; ) { var m = k[l]; if (m.visible || m === h) { var n = m.actualBounds, p = this.naturalBounds; if (!(n.x > p.width || n.y > p.height || 0 > n.x + n.width || 0 > n.y + n.height)) { n = m; m = m instanceof X ? m : null; p = Qc.alloc(); p.set(g); if (null !== m ? m.pg(a, b, c, d, e, p) : Zk(n, a, d, p)) null !== b && (n = b(n)), null === n || (null !== c && !c(n)) || e.add(n); Qc.free(p); } } } void 0 === f && Qc.free(g); return d; } void 0 === f && Qc.free(g); return !1; }; function Vm(a, b, c, d) { for (var e = a.Y.j, f = e.length; f--; ) { var g = e[f]; if (g.visible) { var h = g.actualBounds, k = a.naturalBounds; h.x > k.width || h.y > k.height || 0 > h.x + h.width || 0 > h.y + h.height || (g instanceof X && Vm(g, b, c, d), null !== b && (g = b(g)), null === g || (null !== c && !c(g)) || d.add(g)); } } } t.qg = function (a, b, c, d, e, f) { if (!1 === this.pickable) return !1; void 0 === c && (c = null); void 0 === d && (d = null); var g = this.naturalBounds, h = this.Zd(), k = h ? a : Qb(G.allocAt(a.x, a.y), this.transform), l = h ? b : Qb(G.allocAt(b.x, b.y), this.transform), m = k.Ce(l), n = (0 < k.x && k.x < g.width && 0 < k.y && k.y < g.height) || Rb(k.x, k.y, 0, 0, 0, g.height) <= m || Rb(k.x, k.y, 0, g.height, g.width, g.height) <= m || Rb(k.x, k.y, g.width, g.height, g.width, 0) <= m || Rb(k.x, k.y, g.width, 0, 0, 0) <= m; g = k.cd(0, 0) <= m && k.cd(0, g.height) <= m && k.cd(g.width, 0) <= m && k.cd(g.width, g.height) <= m; h || (G.free(k), G.free(l)); if (n) { if (!this.isAtomic) { k = G.alloc(); l = G.alloc(); m = mm(this); for (var p = this.Y.j, q = p.length; q--; ) { var r = p[q]; if (r.visible || r === m) { var u = r.actualBounds, x = this.naturalBounds; if (!h || !(u.x > x.width || u.y > x.height || 0 > u.x + u.width || 0 > u.y + u.height)) if ( (r.Zd() ? ((u = r.transform), Qb(k.set(a), u), Qb(l.set(b), u)) : (k.set(a), l.set(b)), (u = r), (r = r instanceof X ? r : null), null !== r ? r.qg(k, l, c, d, e, f) : u.hx(k, l, e)) ) null !== c && (u = c(u)), null === u || (null !== d && !d(u)) || f.add(u); } } G.free(k); G.free(l); } return e ? n : g; } return !1; }; function rm(a) { var b = null; a instanceof W && ((b = a.spot1), b === Ed && (b = null), (a = a.geometry), null !== a && null === b && (b = a.spot1)); null === b && (b = Tc); return b; } function sm(a) { var b = null; a instanceof W && ((b = a.spot2), b === Ed && (b = null), (a = a.geometry), null !== a && null === b && (b = a.spot2)); null === b && (b = hd); return b; } t.add = function (a) { this.Ib(this.Y.count, a); }; t.N = function (a) { return this.Y.N(a); }; t.Ib = function (a, b) { b instanceof T && A('Cannot add a Part to a Panel: ' + b + '; use a Panel instead'); if (this === b || this.tg(b)) this === b && A('Cannot make a Panel contain itself: ' + this.toString()), A( 'Cannot make a Panel indirectly contain itself: ' + this.toString() + ' already contains ' + b.toString(), ); var c = b.panel; null !== c && c !== this && A( 'Cannot add a GraphObject that already belongs to another Panel to this Panel: ' + b.toString() + ', already contained by ' + c.toString() + ', cannot be shared by this Panel: ' + this.toString(), ); this.va !== X.Grid || b instanceof W || A('Can only add Shapes to a Grid Panel, not: ' + b); this.va !== X.Graduated || b instanceof W || b instanceof vh || A('Can only add Shapes or TextBlocks to a Graduated Panel, not: ' + b); b.Ui(this); b.Bj = null; if (null !== this.itemArray) { var d = b.data; null !== d && 'object' === typeof d && (null === this.Ed && (this.Ed = new Lb()), this.Ed.add(d, b)); } var e = this.Y; d = -1; if (c === this) { for (var f = -1, g = this.Y.j, h = g.length, k = 0; k < h; k++) if (g[k] === b) { f = k; break; } if (-1 !== f) { if (f === a || (f + 1 >= e.count && a >= e.count)) return; e.mb(f); d = f; } else A( 'element ' + b.toString() + ' has panel ' + c.toString() + ' but is not contained by it.', ); } if (0 > a || a > e.count) a = e.count; e.Ib(a, b); if (0 === a || b.isPanelMain) this.vi = null; oj(this) || this.s(); b.s(!1); null !== b.portId ? (this.yh = !0) : b instanceof X && !0 === b.yh && (this.yh = !0); this.Pg = null; c = this.part; null !== c && ((c.wj = null), (c.Wg = NaN), this.yh && c instanceof V && (c.yh = !0), c.yh && c instanceof V && (c.rc = null), (e = this.diagram), (null !== e && e.undoManager.isUndoingRedoing) || (-1 !== d && c.ab(df, 'elements', this, b, null, d, null), c.ab(cf, 'elements', this, null, b, null, a), this.ug() || Wm(this, b, !1))); }; function Xm(a, b) { a.H = b ? a.H | 16777216 : a.H & -16777217; } t.remove = function (a) { for (var b = this.Y.j, c = b.length, d = -1, e = 0; e < c; e++) if (b[e] === a) { d = e; break; } -1 !== d && this.xc(d, !0); }; t.mb = function (a) { 0 <= a && this.xc(a, !0); }; t.xc = function (a, b) { var c = this.Y, d = c.N(a); d.Bj = null; d.Ui(null); if (null !== this.Ed) { var e = d.data; 'object' === typeof e && this.Ed.remove(e); } c.mb(a); jj(this, !1); this.s(); this.vi === d && (this.vi = null); this.Pg = null; var f = this.part; null !== f && ((f.wj = null), (f.Wg = NaN), f.Jb(), f instanceof V && (d instanceof X ? d.ym(d, function (a, c) { Gl(f, c, b); }) : Gl(f, d, b)), (c = this.diagram), (null !== c && c.undoManager.isUndoingRedoing) || f.ab(df, 'elements', this, d, null, a, null)); }; X.prototype.getRowDefinition = function (a) { 0 > a && ya(a, '>= 0', X, 'getRowDefinition:idx'); a = Math.round(a); var b = this.sb; if (void 0 === b) return null; if (void 0 === b[a]) { var c = new Pj(); c.Ui(this); c.isRow = !0; c.index = a; b[a] = c; } return b[a]; }; X.prototype.Bv = function (a) { 0 > a && ya(a, '>= 0', X, 'removeRowDefinition:idx'); a = Math.round(a); var b = this.sb; void 0 !== b && (this.ab(df, 'coldefs', this, b[a], null, a, null), b[a] && delete b[a], this.s()); }; X.prototype.getColumnDefinition = function (a) { 0 > a && ya(a, '>= 0', X, 'getColumnDefinition:idx'); a = Math.round(a); var b = this.nb; if (void 0 === b) return null; if (void 0 === b[a]) { var c = new Pj(); c.Ui(this); c.isRow = !1; c.index = a; b[a] = c; } return b[a]; }; t = X.prototype; t.zv = function (a) { 0 > a && ya(a, '>= 0', X, 'removeColumnDefinition:idx'); a = Math.round(a); var b = this.nb; void 0 !== b && (this.ab(df, 'coldefs', this, b[a], null, a, null), b[a] && delete b[a], this.s()); }; t.Oy = function (a) { if (0 > a || this.type !== X.Table) return -1; for (var b = 0, c = this.sb, d = c.length, e = this.yi; e < d; e++) { var f = c[e]; if (void 0 !== f && ((b += f.total), a < b)) break; } return e; }; t.Gy = function (a) { if (0 > a || this.type !== X.Table) return -1; for (var b = 0, c = this.nb, d = c.length, e = this.hi; e < d; e++) { var f = c[e]; if (void 0 !== f && ((b += f.total), a < b)) break; } return e; }; t.fz = function (a, b) { void 0 === b && (b = new G(NaN, NaN)); if (this.type !== X.Graduated) return b.h(NaN, NaN), b; a = Math.min(Math.max(a, this.graduatedMin), this.graduatedMax); var c = this.zb(); c.geometry.dv((a - this.graduatedMin) / this.graduatedRange, b); return c.transform.ta(b); }; t.gz = function (a) { if (this.type !== X.Graduated) return NaN; var b = this.zb(); b.transform.Ud(a); return b.geometry.kx(a) * this.graduatedRange + this.graduatedMin; }; function xl(a) { a = a.Rh; return null !== a && a.v; } function Yg(a) { var b = a.Rh; if (null === b) null !== a.data && A('Template cannot have .data be non-null: ' + a), (a.Rh = b = new E()); else if (b.v) return; var c = new E(); Xm(a, !1); a.ym(a, function (a, d) { var e = d.bb; if (null !== e) for (ul(d, !1), e = e.iterator; e.next(); ) { var f = e.value; f.mode === Ym && ul(d, !0); var g = f.sourceName; null !== g && ('/' === g && Xm(a, !0), (g = Wk(f, a, d)), null !== g && (c.add(g), null === g.Fl && (g.Fl = new E()), g.Fl.add(f))); b.add(f); } if (d instanceof X && d.type === X.Table) { if (0 < d.sb.length) for (a = d.sb, e = a.length, f = 0; f < e; f++) if (((g = a[f]), void 0 !== g && null !== g.bb)) for (var h = g.bb.iterator; h.next(); ) { var k = h.value; k.Qd = g; k.yp = 2; k.Nl = g.index; b.add(k); } if (0 < d.nb.length) for (d = d.nb, a = d.length, e = 0; e < a; e++) if (((f = d[e]), void 0 !== f && null !== f.bb)) for (g = f.bb.iterator; g.next(); ) (h = g.value), (h.Qd = f), (h.yp = 1), (h.Nl = f.index), b.add(h); } }); for (var d = c.iterator; d.next(); ) { var e = d.value; if (null !== e.Fl) { ul(e, !0); for (var f = e.Fl.iterator; f.next(); ) { var g = f.value; null === e.bb && (e.bb = new E()); e.bb.add(g); } } e.Fl = null; } for (d = b.iterator; d.next(); ) if (((e = d.value), (f = e.Qd), null !== f)) { e.Qd = null; var h = e.targetProperty, k = h.indexOf('.'); 0 < k && f instanceof X && ((g = h.substring(0, k)), (h = h.substr(k + 1)), (k = f.$a(g)), null !== k ? ((f = k), (e.targetProperty = h)) : za( 'Warning: unable to find GraphObject named "' + g + '" for Binding: ' + e.toString(), )); f instanceof Pj ? ((g = Bb(f.panel)), (e.Yi = void 0 === g ? -1 : g), (f.panel.Ek = e.Yi)) : f instanceof Y ? ((g = Bb(f)), (e.Yi = void 0 === g ? -1 : g), (f.Ek = e.Yi)) : A('Unknown type of binding target: ' + f); } b.freeze(); a instanceof T && a.bc() && a.$b(); } t.uy = function () { var a = this.copy(); Qm(a, function (a) { a instanceof X && ((a.Rh = null), (a.jb = null)); var b = a.bb; null !== b && ((a.bb = null), b.each(function (b) { a.bind(b.copy()); })); }); return a; }; t.Ea = function (a) { var b = this.Rh; if (null !== b) for (void 0 === a && (a = ''), b = b.iterator; b.next(); ) { var c = b.value, d = c.sourceProperty; if ('' === a || '' === d || d === a) if (((d = c.targetProperty), null !== c.converter || '' !== d)) { d = this.data; var e = c.sourceName; if (null !== e) d = '' === e ? this : '/' === e ? this : '.' === e ? this : '..' === e ? this : this.$a(e); else { var f = this.diagram; null !== f && c.isToModel && (d = f.model.modelData); } if (null !== d) { f = this; var g = c.Yi; if (-1 !== g) { if (((f = this.Ps(g)), null === f)) continue; } else null !== c.Qd && (f = c.Qd); '/' === e ? (d = f.part) : '.' === e ? (d = f) : '..' === e && (d = f.panel); e = c.yp; if (0 !== e) { if (!(f instanceof X)) continue; 1 === e ? (f = f.getColumnDefinition(c.Nl)) : 2 === e && (f = f.getRowDefinition(c.Nl)); } void 0 !== f && c.Yv(f, d); } } } }; function Zm(a, b) { a = a.Y.j; for ( var c = a.length, d = b.length, e = 0, f = null; e < c && !((f = a[e]), f instanceof X && null !== f.data); ) e++, (f = a[e]); if (c - e !== d) return !0; if (null === f) return 0 < d; for (var g = 0; e < c && g < d; ) { f = a[e]; if (!(f instanceof X) || f.data !== b[g]) return !0; e++; g++; } return !1; } function Tm(a) { if (a.type === X.Spot || a.type === X.Auto) return Math.min(a.Y.length, 1); if (a.type === X.Link) { a = a.Y; for (var b = a.length, c = 0; c < b; c++) { var d = a.N(c); if (!(d instanceof W && d.isPanelMain)) break; } return c; } return a.type === X.Table && 0 < a.Y.length && ((a = a.Y.N(0)), a.isPanelMain && a instanceof X && (a.type === X.TableRow || a.type === X.TableColumn)) ? 1 : 0; } t.mt = function () { for (var a = Tm(this); this.Y.length > a; ) this.xc(this.Y.length - 1, !1); a = this.itemArray; if (null !== a) for (var b = a.length, c = 0; c < b; c++) $m(this, a[c], c); }; t.gx = function (a) { return void 0 === a || null === a || null === this.Ed ? null : this.Ed.J(a); }; function $m(a, b, c) { if (!(void 0 === b || null === b || 0 > c)) { var d = an(a, b), e = a.itemTemplateMap, f = null; null !== e && (f = e.J(d)); null === f && (bn || ((bn = !0), za('No item template Panel found for category "' + d + '" on ' + a), za(' Using default item template.'), (d = new X()), (e = new vh()), e.bind(new Ei('text', '', Qa)), d.add(e), (cn = d)), (f = cn)); d = f; null !== d && (Yg(d), (d = d.copy()), 0 !== (d.H & 16777216) && ((e = a.Ii()), null !== e && Xm(e, !0)), 'object' === typeof b && (null === a.Ed && (a.Ed = new Lb()), a.Ed.add(b, d)), (e = c + Tm(a)), a.Ib(e, d), (d.jb = b), dn(a, e, c), (d.jb = null), (d.data = b)); } } function dn(a, b, c) { for (a = a.Y; b < a.length; ) { var d = a.N(b); if (d instanceof X) { var e = b, f = c; d.type === X.TableRow ? (d.row = e) : d.type === X.TableColumn && (d.column = e); d.itemIndex = f; } b++; c++; } } function an(a, b) { if (null === b) return ''; a = a.gl; if ('function' === typeof a) a = a(b); else if ('string' === typeof a && 'object' === typeof b) { if ('' === a) return ''; a = en(b, a); } else return ''; if (void 0 === a) return ''; if ('string' === typeof a) return a; A('Panel.getCategoryForItemData found a non-string category for ' + b + ': ' + a); return ''; } function Wm(a, b, c) { var d = b.enabledChanged; null !== d && d(b, c); if (b instanceof X) { b = b.Y.j; d = b.length; for (var e = 0; e < d; e++) { var f = b[e]; (c && f instanceof X && !f.isEnabled) || Wm(a, f, c); } } } function fn(a, b) { Bl.add(a, b); } pa.Object.defineProperties(X.prototype, { type: { get: function () { return this.va; }, set: function (a) { var b = this.va; b !== a && ((this.va = a), this.va === X.Grid ? (this.isAtomic = !0) : this.va === X.Table && Km(this), this.s(), this.g('type', b, a)); }, }, elements: { get: function () { return this.Y.iterator; }, }, naturalBounds: { get: function () { return this.qc; }, }, padding: { get: function () { return this.eb; }, set: function (a) { 'number' === typeof a ? (0 > a && ya(a, '>= 0', X, 'padding'), (a = new Ic(a))) : (0 > a.left && ya(a.left, '>= 0', X, 'padding:value.left'), 0 > a.right && ya(a.right, '>= 0', X, 'padding:value.right'), 0 > a.top && ya(a.top, '>= 0', X, 'padding:value.top'), 0 > a.bottom && ya(a.bottom, '>= 0', X, 'padding:value.bottom')); var b = this.eb; b.A(a) || ((this.eb = a = a.I()), this.s(), this.g('padding', b, a)); }, }, defaultAlignment: { get: function () { return this.mn; }, set: function (a) { var b = this.mn; b.A(a) || ((this.mn = a = a.I()), this.s(), this.g('defaultAlignment', b, a)); }, }, defaultStretch: { get: function () { return this.Ff; }, set: function (a) { var b = this.Ff; b !== a && ((this.Ff = a), this.s(), this.g('defaultStretch', b, a)); }, }, defaultSeparatorPadding: { get: function () { return void 0 === this.ej ? Oc : this.ej; }, set: function (a) { if (void 0 !== this.ej) { 'number' === typeof a && (a = new Ic(a)); var b = this.ej; b.A(a) || ((this.ej = a = a.I()), this.s(), this.g('defaultSeparatorPadding', b, a)); } }, }, defaultRowSeparatorStroke: { get: function () { return void 0 === this.Wh ? null : this.Wh; }, set: function (a) { var b = this.Wh; b !== a && (null === a || 'string' === typeof a || a instanceof il) && (a instanceof il && a.freeze(), (this.Wh = a), this.R(), this.g('defaultRowSeparatorStroke', b, a)); }, }, defaultRowSeparatorStrokeWidth: { get: function () { return void 0 === this.Jg ? 1 : this.Jg; }, set: function (a) { if (void 0 !== this.Jg) { var b = this.Jg; b !== a && isFinite(a) && 0 <= a && ((this.Jg = a), this.s(), this.g('defaultRowSeparatorStrokeWidth', b, a)); } }, }, defaultRowSeparatorDashArray: { get: function () { return void 0 === this.Vh ? null : this.Vh; }, set: function (a) { if (void 0 !== this.Vh) { var b = this.Vh; if (b !== a) { if (null !== a) { for (var c = a.length, d = 0, e = 0; e < c; e++) { var f = a[e]; ('number' === typeof f && 0 <= f && isFinite(f)) || A( 'defaultRowSeparatorDashArray value ' + f + ' at index ' + e + ' must be a positive number or zero.', ); d += f; } if (0 === d) { if (null === b) return; a = null; } } this.Vh = a; this.R(); this.g('defaultRowSeparatorDashArray', b, a); } } }, }, defaultColumnSeparatorStroke: { get: function () { return void 0 === this.Hg ? null : this.Hg; }, set: function (a) { if (void 0 !== this.Hg) { var b = this.Hg; b !== a && (null === a || 'string' === typeof a || a instanceof il) && (a instanceof il && a.freeze(), (this.Hg = a), this.R(), this.g('defaultColumnSeparatorStroke', b, a)); } }, }, defaultColumnSeparatorStrokeWidth: { get: function () { return void 0 === this.Ig ? 1 : this.Ig; }, set: function (a) { if (void 0 !== this.Ig) { var b = this.Ig; b !== a && isFinite(a) && 0 <= a && ((this.Ig = a), this.s(), this.g('defaultColumnSeparatorStrokeWidth', b, a)); } }, }, defaultColumnSeparatorDashArray: { get: function () { return void 0 === this.Uh ? null : this.Uh; }, set: function (a) { if (void 0 !== this.Uh) { var b = this.Uh; if (b !== a) { if (null !== a) { for (var c = a.length, d = 0, e = 0; e < c; e++) { var f = a[e]; ('number' === typeof f && 0 <= f && isFinite(f)) || A( 'defaultColumnSeparatorDashArray value ' + f + ' at index ' + e + ' must be a positive number or zero.', ); d += f; } if (0 === d) { if (null === b) return; a = null; } } this.Uh = a; this.R(); this.g('defaultColumnSeparatorDashArray', b, a); } } }, }, viewboxStretch: { get: function () { return this.Hp; }, set: function (a) { var b = this.Hp; b !== a && ((this.Hp = a), this.s(), this.g('viewboxStretch', b, a)); }, }, gridCellSize: { get: function () { return this.Kn; }, set: function (a) { var b = this.Kn; if (!b.A(a)) { (a.o() && 0 !== a.width && 0 !== a.height) || A('Invalid Panel.gridCellSize: ' + a); this.Kn = a.I(); var c = this.diagram; null !== c && this === c.grid && kj(c); this.R(); this.g('gridCellSize', b, a); } }, }, gridOrigin: { get: function () { return this.Ln; }, set: function (a) { var b = this.Ln; if (!b.A(a)) { a.o() || A('Invalid Panel.gridOrigin: ' + a); this.Ln = a.I(); var c = this.diagram; null !== c && this === c.grid && kj(c); this.R(); this.g('gridOrigin', b, a); } }, }, graduatedMin: { get: function () { return this.Hn; }, set: function (a) { var b = this.Hn; b !== a && ((this.Hn = a), this.s(), this.g('graduatedMin', b, a), Uk(this) && ((a = this.part), null !== a && Vk(this, a, 'graduatedRange'))); }, }, graduatedMax: { get: function () { return this.Gn; }, set: function (a) { var b = this.Gn; b !== a && ((this.Gn = a), this.s(), this.g('graduatedMax', b, a), Uk(this) && ((a = this.part), null !== a && Vk(this, a, 'graduatedRange'))); }, }, graduatedRange: { get: function () { return this.graduatedMax - this.graduatedMin; }, }, graduatedTickUnit: { get: function () { return this.Jn; }, set: function (a) { var b = this.Jn; b !== a && 0 < a && ((this.Jn = a), this.s(), this.g('graduatedTickUnit', b, a)); }, }, graduatedTickBase: { get: function () { return this.In; }, set: function (a) { var b = this.In; b !== a && ((this.In = a), this.s(), this.g('graduatedTickBase', b, a)); }, }, yh: { get: function () { return 0 !== (this.H & 8388608); }, set: function (a) { (0 !== (this.H & 8388608)) !== a && (this.H ^= 8388608); }, }, rowCount: { get: function () { return void 0 === this.sb ? 0 : this.sb.length; }, }, columnCount: { get: function () { return void 0 === this.nb ? 0 : this.nb.length; }, }, rowSizing: { get: function () { return void 0 === this.Gj ? Lm : this.Gj; }, set: function (a) { if (void 0 !== this.Gj) { var b = this.Gj; b !== a && ((this.Gj = a), this.s(), this.g('rowSizing', b, a)); } }, }, columnSizing: { get: function () { return void 0 === this.cj ? Lm : this.cj; }, set: function (a) { if (void 0 !== this.cj) { var b = this.cj; b !== a && ((this.cj = a), this.s(), this.g('columnSizing', b, a)); } }, }, topIndex: { get: function () { return void 0 === this.yi ? 0 : this.yi; }, set: function (a) { if (void 0 !== this.yi) { var b = this.yi; b !== a && ((!isFinite(a) || 0 > a) && A('Panel.topIndex must be greater than zero and a real number, not: ' + a), (this.yi = a), this.s(), this.g('topIndex', b, a)); } }, }, leftIndex: { get: function () { return void 0 === this.hi ? 0 : this.hi; }, set: function (a) { if (void 0 !== this.hi) { var b = this.hi; b !== a && ((!isFinite(a) || 0 > a) && A('Panel.leftIndex must be greater than zero and a real number, not: ' + a), (this.hi = a), this.s(), this.g('leftIndex', b, a)); } }, }, data: { get: function () { return this.jb; }, set: function (a) { var b = this.jb; if (b !== a) { var c = this instanceof T && !(this instanceof pf); Yg(this); this.jb = a; var d = this.diagram; null !== d && (c ? ((c = d.partManager), this instanceof S ? (null !== b && c.Gg.remove(b), null !== a && c.Gg.add(a, this)) : this instanceof T && (null !== b && c.Ne.remove(b), null !== a && c.Ne.add(a, this))) : ((c = this.panel), null !== c && null !== c.Ed && (null !== b && c.Ed.remove(b), null !== a && c.Ed.add(a, this)))); this.g('data', b, a); (null !== d && d.undoManager.isUndoingRedoing) || (null !== a && this.Ea()); } }, }, itemIndex: { get: function () { return this.Yn; }, set: function (a) { var b = this.Yn; b !== a && ((this.Yn = a), this.g('itemIndex', b, a)); }, }, itemArray: { get: function () { return this.fi; }, set: function (a) { var b = this.fi; if (b !== a || (null !== a && Zm(this, a))) { var c = this.diagram; b !== a && (null !== c && null !== b && Gj(c.partManager, this, c), (this.fi = a), null !== c && null !== a && Dj(c.partManager, this)); this.g('itemArray', b, a); (null !== c && c.undoManager.isUndoingRedoing) || this.mt(); } }, }, itemTemplate: { get: function () { return null === this.je ? null : this.je.J(''); }, set: function (a) { if (null === this.je) { if (null === a) return; this.je = new Lb(); } var b = this.je.J(''); b !== a && ((a instanceof T || a.isPanelMain) && A('Panel.itemTemplate must not be a Part or be Panel.isPanelMain: ' + a), this.je.add('', a), this.g('itemTemplate', b, a), (a = this.diagram), (null !== a && a.undoManager.isUndoingRedoing) || this.mt()); }, }, itemTemplateMap: { get: function () { return this.je; }, set: function (a) { var b = this.je; if (b !== a) { for (var c = a.iterator; c.next(); ); this.je = a; this.g('itemTemplateMap', b, a); a = this.diagram; (null !== a && a.undoManager.isUndoingRedoing) || this.mt(); } }, }, itemCategoryProperty: { get: function () { return this.gl; }, set: function (a) { var b = this.gl; b !== a && ((this.gl = a), this.g('itemCategoryProperty', b, a)); }, }, isAtomic: { get: function () { return 0 !== (this.H & 1048576); }, set: function (a) { var b = 0 !== (this.H & 1048576); b !== a && ((this.H ^= 1048576), this.g('isAtomic', b, a)); }, }, isClipping: { get: function () { return 0 !== (this.H & 2097152); }, set: function (a) { var b = 0 !== (this.H & 2097152); b !== a && ((this.H ^= 2097152), this.s(), this.g('isClipping', b, a)); }, }, isOpposite: { get: function () { return 0 !== (this.H & 33554432); }, set: function (a) { var b = 0 !== (this.H & 33554432); b !== a && ((this.H ^= 33554432), this.s(), this.g('isOpposite', b, a)); }, }, isEnabled: { get: function () { return 0 !== (this.H & 4194304); }, set: function (a) { var b = 0 !== (this.H & 4194304); if (b !== a) { var c = null === this.panel || this.panel.ug(); this.H ^= 4194304; this.g('isEnabled', b, a); b = this.diagram; (null !== b && b.undoManager.isUndoingRedoing) || (c && Wm(this, this, a)); } }, }, alignmentFocusName: { get: function () { return this.Bg; }, set: function (a) { var b = this.Bg; b !== a && ((this.Bg = a), this.s(), this.g('alignmentFocusName', b, a)); }, }, }); pa.Object.defineProperties(X, { Position: { get: function () { return Bl.J('Position'); }, }, Horizontal: { get: function () { return Bl.J('Horizontal'); }, }, Vertical: { get: function () { return Bl.J('Vertical'); }, }, Spot: { get: function () { return Bl.J('Spot'); }, }, Auto: { get: function () { return Bl.J('Auto'); }, }, Table: { get: function () { return Bl.J('Table'); }, }, Viewbox: { get: function () { return Bl.J('Viewbox'); }, }, TableRow: { get: function () { return Bl.J('TableRow'); }, }, TableColumn: { get: function () { return Bl.J('TableColumn'); }, }, Link: { get: function () { return Bl.J('Link'); }, }, Grid: { get: function () { return Bl.J('Grid'); }, }, Graduated: { get: function () { return Bl.J('Graduated'); }, }, }); X.prototype.findItemPanelForData = X.prototype.gx; X.prototype.rebuildItemElements = X.prototype.mt; X.prototype.updateTargetBindings = X.prototype.Ea; X.prototype.copyTemplate = X.prototype.uy; X.prototype.graduatedValueForPoint = X.prototype.gz; X.prototype.graduatedPointForValue = X.prototype.fz; X.prototype.findColumnForLocalX = X.prototype.Gy; X.prototype.findRowForLocalY = X.prototype.Oy; X.prototype.removeColumnDefinition = X.prototype.zv; X.prototype.removeRowDefinition = X.prototype.Bv; X.prototype.removeAt = X.prototype.mb; X.prototype.remove = X.prototype.remove; X.prototype.insertAt = X.prototype.Ib; X.prototype.elt = X.prototype.N; X.prototype.add = X.prototype.add; X.prototype.findObject = X.prototype.$a; X.prototype.findInVisualTree = X.prototype.Yl; X.prototype.walkVisualTreeFrom = X.prototype.ym; X.prototype.findMainElement = X.prototype.zb; var bn = !1, cn = null, Bl = new Lb(); X.className = 'Panel'; X.definePanelLayout = fn; fn('Position', new lm()); fn('Vertical', new om()); fn('Auto', new qm()); fn('Link', new Am()); fn('Grid', new zm()); function Pj() { nb(this); this.cg = null; this.Fr = !0; this.Sa = 0; this.Pc = NaN; this.Yg = 0; this.Xg = Infinity; this.wb = Ed; this.sa = this.ka = 0; this.bb = null; this.qp = gn; this.we = Kk; this.mp = this.gg = null; this.np = NaN; this.ib = this.Ij = null; this.gn = !1; } Pj.prototype.copy = function () { var a = new Pj(); a.Fr = this.Fr; a.Sa = this.Sa; a.Pc = this.Pc; a.Yg = this.Yg; a.Xg = this.Xg; a.wb = this.wb; a.ka = this.ka; a.sa = this.sa; a.we = this.we; a.qp = this.qp; null === this.gg ? (a.gg = null) : (a.gg = this.gg.I()); a.mp = this.mp; a.np = this.np; a.Ij = null; null !== this.Ij && (a.separatorDashArray = Ga(this.separatorDashArray)); a.ib = this.ib; a.gn = this.gn; a.bb = this.bb; return a; }; t = Pj.prototype; t.Vl = function (a) { a.isRow ? (this.height = a.height) : (this.width = a.width); this.minimum = a.minimum; this.maximum = a.maximum; this.alignment = a.alignment; this.stretch = a.stretch; this.sizing = a.sizing; this.gg = null === a.separatorPadding ? null : a.separatorPadding.I(); this.separatorStroke = a.separatorStroke; this.separatorStrokeWidth = a.separatorStrokeWidth; this.Ij = null; a.separatorDashArray && (this.Ij = Ga(a.separatorDashArray)); this.background = a.background; this.coversSeparators = a.coversSeparators; this.bb = a.bb; }; t.fb = function (a) { a.classType === Pj && (this.sizing = a); }; t.toString = function () { return ( 'RowColumnDefinition ' + (this.isRow ? '(Row ' : '(Column ') + this.index + ') #' + Bb(this) ); }; t.Ui = function (a) { this.cg = a; }; t.Ou = function () { var a = 0, b = 0, c = this.cg, d = this.isRow; if (null !== c && c.type === X.Table) for (var e = d ? c.sb.length : c.nb.length, f = 0; f < e; f++) { var g = d ? c.sb[f] : c.nb[f]; if (void 0 !== g) { b = g.index; break; } } this.index !== b && ((b = this.separatorStroke), null === b && null !== c && (b = this.isRow ? c.defaultRowSeparatorStroke : c.defaultColumnSeparatorStroke), null !== b && ((a = this.separatorStrokeWidth), isNaN(a) && (null !== c ? (a = this.isRow ? c.defaultRowSeparatorStrokeWidth : c.defaultColumnSeparatorStrokeWidth) : (a = 0)))); b = this.gg; if (null === b) if (null !== c) b = c.defaultSeparatorPadding; else return a; return a + (this.isRow ? b.top : b.left); }; t.tc = function () { var a = 0, b = this.cg, c = 0, d = this.isRow; if (null !== b && b.type === X.Table) for (var e = d ? b.sb.length : b.nb.length, f = 0; f < e; f++) { var g = d ? b.sb[f] : b.nb[f]; if (void 0 !== g) { c = g.index; break; } } this.index !== c && ((c = this.separatorStroke), null === c && null !== b && (c = d ? b.defaultRowSeparatorStroke : b.defaultColumnSeparatorStroke), null !== c && ((a = this.separatorStrokeWidth), isNaN(a) && (null !== b ? (a = d ? b.defaultRowSeparatorStrokeWidth : b.defaultColumnSeparatorStrokeWidth) : (a = 0)))); d = this.gg; if (null === d) if (null !== b) d = b.defaultSeparatorPadding; else return a; return a + (this.isRow ? d.top + d.bottom : d.left + d.right); }; t.yb = function (a, b, c) { var d = this.cg; if ( null !== d && (d.ab(af, a, this, b, c, void 0, void 0), null !== this.bb && ((b = d.diagram), null !== b && !b.skipsModelSourceBindings && ((d = d.Ii()), null !== d && ((b = d.data), null !== b)))) ) for (c = this.bb.iterator; c.next(); ) c.value.xq(this, b, a, d); }; function um(a) { if (a.sizing === gn) { var b = a.cg; return a.isRow ? b.rowSizing : b.columnSizing; } return a.sizing; } t.bind = function (a) { a.Qd = this; var b = this.panel; if (null !== b) { var c = b.Ii(); null !== c && xl(c) && A( 'Cannot add a Binding to a RowColumnDefinition that is already frozen: ' + a + ' on ' + b, ); } null === this.bb && (this.bb = new E()); this.bb.add(a); }; pa.Object.defineProperties(Pj.prototype, { panel: { get: function () { return this.cg; }, }, isRow: { get: function () { return this.Fr; }, set: function (a) { this.Fr = a; }, }, index: { get: function () { return this.Sa; }, set: function (a) { this.Sa = a; }, }, height: { get: function () { return this.Pc; }, set: function (a) { var b = this.Pc; b !== a && (0 > a && ya(a, '>= 0', Pj, 'height'), (this.Pc = a), (this.actual = this.ka), null !== this.panel && this.panel.s(), this.yb('height', b, a)); }, }, width: { get: function () { return this.Pc; }, set: function (a) { var b = this.Pc; b !== a && (0 > a && ya(a, '>= 0', Pj, 'width'), (this.Pc = a), (this.actual = this.ka), null !== this.panel && this.panel.s(), this.yb('width', b, a)); }, }, minimum: { get: function () { return this.Yg; }, set: function (a) { var b = this.Yg; b !== a && ((0 > a || !isFinite(a)) && ya(a, '>= 0', Pj, 'minimum'), (this.Yg = a), (this.actual = this.ka), null !== this.panel && this.panel.s(), this.yb('minimum', b, a)); }, }, maximum: { get: function () { return this.Xg; }, set: function (a) { var b = this.Xg; b !== a && (0 > a && ya(a, '>= 0', Pj, 'maximum'), (this.Xg = a), (this.actual = this.ka), null !== this.panel && this.panel.s(), this.yb('maximum', b, a)); }, }, alignment: { get: function () { return this.wb; }, set: function (a) { var b = this.wb; b.A(a) || ((this.wb = a.I()), null !== this.panel && this.panel.s(), this.yb('alignment', b, a)); }, }, stretch: { get: function () { return this.we; }, set: function (a) { var b = this.we; b !== a && ((this.we = a), null !== this.panel && this.panel.s(), this.yb('stretch', b, a)); }, }, separatorPadding: { get: function () { return this.gg; }, set: function (a) { 'number' === typeof a && (a = new Ic(a)); var b = this.gg; (null !== a && null !== b && b.A(a)) || (null !== a && (a = a.I()), (this.gg = a), null !== this.panel && this.panel.s(), this.yb('separatorPadding', b, a)); }, }, separatorStroke: { get: function () { return this.mp; }, set: function (a) { var b = this.mp; b !== a && (null !== a && Fl(a, 'RowColumnDefinition.separatorStroke'), a instanceof il && a.freeze(), (this.mp = a), null !== this.panel && this.panel.s(), this.yb('separatorStroke', b, a)); }, }, separatorStrokeWidth: { get: function () { return this.np; }, set: function (a) { var b = this.np; b !== a && ((this.np = a), null !== this.panel && this.panel.s(), this.yb('separatorStrokeWidth', b, a)); }, }, separatorDashArray: { get: function () { return this.Ij; }, set: function (a) { var b = this.Ij; if (b !== a) { if (null !== a) { for (var c = a.length, d = 0, e = 0; e < c; e++) { var f = a[e]; ('number' === typeof f && 0 <= f && isFinite(f)) || A( 'separatorDashArray value ' + f + ' at index ' + e + ' must be a positive number or zero.', ); d += f; } if (0 === d) { if (null === b) return; a = null; } } this.Ij = a; null !== this.panel && this.panel.R(); this.yb('separatorDashArray', b, a); } }, }, background: { get: function () { return this.ib; }, set: function (a) { var b = this.ib; b !== a && (null !== a && Fl(a, 'RowColumnDefinition.background'), a instanceof il && a.freeze(), (this.ib = a), null !== this.panel && this.panel.R(), this.yb('background', b, a)); }, }, coversSeparators: { get: function () { return this.gn; }, set: function (a) { var b = this.gn; b !== a && ((this.gn = a), null !== this.panel && this.panel.R(), this.yb('coversSeparators', b, a)); }, }, sizing: { get: function () { return this.qp; }, set: function (a) { var b = this.qp; b !== a && ((this.qp = a), null !== this.panel && this.panel.s(), this.yb('sizing', b, a)); }, }, actual: { get: function () { return this.ka; }, set: function (a) { this.ka = isNaN(this.Pc) ? Math.max(Math.min(this.Xg, a), this.Yg) : Math.max(Math.min(this.Xg, this.Pc), this.Yg); }, }, total: { get: function () { return this.ka + this.tc(); }, set: function (a) { this.ka = isNaN(this.Pc) ? Math.max(Math.min(this.Xg, a), this.Yg) : Math.max(Math.min(this.Xg, this.Pc), this.Yg); this.ka = Math.max(0, this.ka - this.tc()); }, }, position: { get: function () { return this.sa; }, set: function (a) { this.sa = a; }, }, }); Pj.prototype.bind = Pj.prototype.bind; Pj.prototype.computeEffectiveSpacing = Pj.prototype.tc; Pj.prototype.computeEffectiveSpacingTop = Pj.prototype.Ou; var gn = new D(Pj, 'Default', 0), vm = new D(Pj, 'None', 1), Lm = new D(Pj, 'ProportionalExtra', 2); Pj.className = 'RowColumnDefinition'; Pj.Default = gn; Pj.None = vm; Pj.ProportionalExtra = Lm; function W() { Y.call(this); this.Pd = this.qa = null; this.Vk = 'None'; this.Fn = Kk; this.Gc = this.Wk = 'black'; this.ih = 1; this.Il = 'butt'; this.Jl = 'miter'; this.Kj = 10; this.gh = null; this.hh = 0; this.ef = this.df = Ed; this.No = this.Mo = NaN; this.Qn = !1; this.Po = null; this.Yk = this.Pl = 'None'; this.Cd = 1; this.Bd = 0; this.zd = 1; this.Ad = null; } oa(W, Y); W.prototype.cloneProtected = function (a) { Y.prototype.cloneProtected.call(this, a); a.qa = this.qa; a.Vk = this.Vk; a.Fn = this.Fn; a.Pd = this.Pd; a.Wk = this.Wk; a.Gc = this.Gc; a.ih = this.ih; a.Il = this.Il; a.Jl = this.Jl; a.Kj = this.Kj; null !== this.gh && (a.gh = Ga(this.gh)); a.hh = this.hh; a.df = this.df.I(); a.ef = this.ef.I(); a.Mo = this.Mo; a.No = this.No; a.Qn = this.Qn; a.Po = this.Po; a.Pl = this.Pl; a.Yk = this.Yk; a.Cd = this.Cd; a.Bd = this.Bd; a.zd = this.zd; a.Ad = this.Ad; }; t = W.prototype; t.fb = function (a) { a === Zg || a === ah || a === Nk || a === Kk ? (this.geometryStretch = a) : Y.prototype.fb.call(this, a); }; t.toString = function () { return ( 'Shape(' + ('None' !== this.figure ? this.figure : 'None' !== this.toArrow ? this.toArrow : this.fromArrow) + ')#' + Bb(this) ); }; function hn(a, b, c, d) { var e = c.length; if (!(4 > e)) { var f = d.measuredBounds, g = Math.max(1, f.width); f = f.height; for (var h = c[0], k = c[1], l, m, n, p, q, r, u = 0, x = Ka(), v = 2; v < e; v += 2) (l = c[v]), (m = c[v + 1]), (n = l - h), (h = m - k), 0 === n && (n = 0.001), (p = h / n), (q = Math.atan2(h, n)), (r = Math.sqrt(n * n + h * h)), x.push([n, q, p, r]), (u += r), (h = l), (k = m); h = c[0]; k = c[1]; n = d.measuredBounds.width; d instanceof W && (n -= d.strokeWidth); 1 > n && (n = 1); e = c = n; l = g / 2; m = 0 === l ? !1 : !0; v = 0; r = x[v]; n = r[0]; q = r[1]; p = r[2]; r = r[3]; for (var z = 0; 0.1 <= u; ) { 0 === z && (m ? ((e = c), (e -= l), (u -= l), (m = !1)) : (e = c), 0 === e && (e = 1)); if (e > u) { Oa(x); return; } e > r ? ((z = e - r), (e = r)) : (z = 0); var y = Math.sqrt((e * e) / (1 + p * p)); 0 > n && (y = -y); h += y; k += p * y; a.translate(h, k); a.rotate(q); a.translate(-(g / 2), -(f / 2)); 0 === z && d.Ei(a, b); a.translate(g / 2, f / 2); a.rotate(-q); a.translate(-h, -k); u -= e; r -= e; if (0 !== z) { v++; if (v === x.length) { Oa(x); return; } r = x[v]; n = r[0]; q = r[1]; p = r[2]; r = r[3]; e = z; } } Oa(x); } } t.Ei = function (a, b) { var c = this.Gc, d = this.Wk; if (null !== c || null !== d) { var e = this.actualBounds, f = this.naturalBounds; null !== d && ji(this, a, d, !0, !1, f, e); null !== c && ji(this, a, c, !1, !1, f, e); e = this.part; f = this.ih; 0 === f && null !== e && (f = e instanceof pf && e.type === X.Link && 'Selection' === e.category && e.adornedObject instanceof W && e.adornedPart.zb() === e.adornedObject ? e.adornedObject.strokeWidth : 0); a.lineWidth = f; a.lineJoin = this.Jl; a.lineCap = this.Il; a.miterLimit = this.Kj; var g = !1; e && b.Ee('drawShadows') && (g = e.isShadowed); var h = !0; null !== c && null === d && (h = !1); e = !1; var k = this.strokeDashArray; null !== k && ((e = !0), a.Os(k, this.hh)); var l = this.qa; if (null !== l) { if (l.type === ce) a.beginPath(), a.moveTo(l.startX, l.startY), a.lineTo(l.endX, l.endY), null !== d && a.Td(d), 0 !== f && null !== c && a.Xi(); else if (l.type === ke) { var m = l.startX, n = l.startY, p = l.endX, q = l.endY; k = Math.min(m, p); l = Math.min(n, q); m = Math.abs(p - m); n = Math.abs(q - n); a.beginPath(); a.rect(k, l, m, n); null !== d && a.Td(d); if (null !== c) { p = d = c = 0; h && g && ((c = a.shadowOffsetX), (d = a.shadowOffsetY), (p = a.shadowBlur), (a.shadowOffsetX = 0), (a.shadowOffsetY = 0), (a.shadowBlur = 0)); if (0 !== f) { if (0 === m || 0 === n) a.beginPath(), a.rect(k, l, Math.max(m, 0.1), Math.max(n, 0.1)); a.Xi(); } h && g && ((a.shadowOffsetX = c), (a.shadowOffsetY = d), (a.shadowBlur = p)); } } else if (l.type === le) (n = l.startX), (k = l.startY), (p = l.endX), (q = l.endY), (l = Math.abs(p - n) / 2), (m = Math.abs(q - k) / 2), (n = Math.min(n, p) + l), (k = Math.min(k, q) + m), a.beginPath(), a.moveTo(n, k - m), a.bezierCurveTo(n + H.Ag * l, k - m, n + l, k - H.Ag * m, n + l, k), a.bezierCurveTo(n + l, k + H.Ag * m, n + H.Ag * l, k + m, n, k + m), a.bezierCurveTo(n - H.Ag * l, k + m, n - l, k + H.Ag * m, n - l, k), a.bezierCurveTo(n - l, k - H.Ag * m, n - H.Ag * l, k - m, n, k - m), a.closePath(), null !== d && a.Td(d), 0 !== f && null !== c && (h && g ? ((f = a.shadowOffsetX), (g = a.shadowOffsetY), (c = a.shadowBlur), (a.shadowOffsetX = 0), (a.shadowOffsetY = 0), (a.shadowBlur = 0), a.Xi(), (a.shadowOffsetX = f), (a.shadowOffsetY = g), (a.shadowBlur = c)) : a.Xi()); else if (l.type === ae) for (k = l.figures, l = k.length, m = 0; m < l; m++) { n = k.j[m]; a.beginPath(); a.moveTo(n.startX, n.startY); p = n.segments.j; q = p.length; for (var r = null, u = 0; u < q; u++) { var x = p[u]; switch (x.type) { case ze: a.moveTo(x.endX, x.endY); break; case ie: a.lineTo(x.endX, x.endY); break; case Ae: a.bezierCurveTo(x.point1X, x.point1Y, x.point2X, x.point2Y, x.endX, x.endY); break; case Be: a.quadraticCurveTo(x.point1X, x.point1Y, x.endX, x.endY); break; case Ce: if (x.radiusX === x.radiusY) { var v = Math.PI / 180; a.arc( x.point1X, x.point1Y, x.radiusX, x.startAngle * v, (x.startAngle + x.sweepAngle) * v, 0 > x.sweepAngle, null !== r ? r.endX : n.startX, null !== r ? r.endY : n.startY, ); } else if (((r = Ee(x, n)), (v = r.length), 0 === v)) a.lineTo(x.centerX, x.centerY); else for (var z = 0; z < v; z++) { var y = r[z]; 0 === z && a.lineTo(y[0], y[1]); a.bezierCurveTo(y[2], y[3], y[4], y[5], y[6], y[7]); } break; case De: z = v = 0; if (null !== r && r.type === Ce) { r = Ee(r, n); y = r.length; if (0 === y) { a.lineTo(x.centerX, x.centerY); break; } r = r[y - 1] || null; null !== r && ((v = r[6]), (z = r[7])); } else (v = null !== r ? r.endX : n.startX), (z = null !== r ? r.endY : n.startY); r = Fe(x, n, v, z); v = r.length; if (0 === v) { a.lineTo(x.centerX, x.centerY); break; } for (z = 0; z < v; z++) (y = r[z]), a.bezierCurveTo(y[2], y[3], y[4], y[5], y[6], y[7]); break; default: A('Segment not of valid type: ' + x.type); } x.isClosed && a.closePath(); r = x; } g ? ((u = q = p = 0), n.isShadowed ? (!0 === n.isFilled && null !== d ? (a.Td(d), (h = !0)) : (h = !1), 0 !== f && null !== c && (h && ((p = a.shadowOffsetX), (q = a.shadowOffsetY), (u = a.shadowBlur), (a.shadowOffsetX = 0), (a.shadowOffsetY = 0), (a.shadowBlur = 0)), a.Xi(), h && ((a.shadowOffsetX = p), (a.shadowOffsetY = q), (a.shadowBlur = u)))) : (h && ((p = a.shadowOffsetX), (q = a.shadowOffsetY), (u = a.shadowBlur), (a.shadowOffsetX = 0), (a.shadowOffsetY = 0), (a.shadowBlur = 0)), !0 === n.isFilled && null !== d && a.Td(d), 0 !== f && null !== c && a.Xi(), h && ((a.shadowOffsetX = p), (a.shadowOffsetY = q), (a.shadowBlur = u)))) : (!0 === n.isFilled && null !== d && a.Td(d), 0 !== f && null !== c && a.Xi()); } e && a.Ms(); if (null !== this.pathPattern) { e = this.pathPattern; e.measure(Infinity, Infinity); f = e.measuredBounds; e.arrange(0, 0, f.width, f.height); g = this.geometry; a.save(); a.beginPath(); f = Ka(); if (g.type === ce) f.push(g.startX), f.push(g.startY), f.push(g.endX), f.push(g.endY), hn(a, b, f, e); else if (g.type === ae) for (g = g.figures.iterator; g.next(); ) { c = g.value; f.length = 0; f.push(c.startX); f.push(c.startY); d = c.startX; h = c.startY; k = d; l = h; m = c.segments.j; n = m.length; for (p = 0; p < n; p++) { q = m[p]; switch (q.type) { case ze: hn(a, b, f, e); f.length = 0; f.push(q.endX); f.push(q.endY); d = q.endX; h = q.endY; k = d; l = h; break; case ie: f.push(q.endX); f.push(q.endY); d = q.endX; h = q.endY; break; case Ae: H.Ae(d, h, q.point1X, q.point1Y, q.point2X, q.point2Y, q.endX, q.endY, 0.5, f); d = q.endX; h = q.endY; break; case Be: H.mq(d, h, q.point1X, q.point1Y, q.endX, q.endY, 0.5, f); d = q.endX; h = q.endY; break; case Ce: u = Ee(q, c); x = u.length; if (0 === x) { f.push(q.centerX); f.push(q.centerY); d = q.centerX; h = q.centerY; break; } for (r = 0; r < x; r++) (v = u[r]), H.Ae(d, h, v[2], v[3], v[4], v[5], v[6], v[7], 0.5, f), (d = v[6]), (h = v[7]); break; case De: u = Fe(q, c, d, h); x = u.length; if (0 === x) { f.push(q.centerX); f.push(q.centerY); d = q.centerX; h = q.centerY; break; } for (r = 0; r < x; r++) (v = u[r]), H.Ae(d, h, v[2], v[3], v[4], v[5], v[6], v[7], 0.5, f), (d = v[6]), (h = v[7]); break; default: A('Segment not of valid type: ' + q.type); } q.isClosed && (f.push(k), f.push(l), hn(a, b, f, e)); } hn(a, b, f, e); } else if (g.type === ke) f.push(g.startX), f.push(g.startY), f.push(g.endX), f.push(g.startY), f.push(g.endX), f.push(g.endY), f.push(g.startX), f.push(g.endY), f.push(g.startX), f.push(g.startY), hn(a, b, f, e); else if (g.type === le) { h = new Ue(); h.startX = g.endX; h.startY = (g.startY + g.endY) / 2; d = new Ve(Ce); d.startAngle = 0; d.sweepAngle = 360; d.centerX = (g.startX + g.endX) / 2; d.centerY = (g.startY + g.endY) / 2; d.radiusX = Math.abs(g.startX - g.endX) / 2; d.radiusY = Math.abs(g.startY - g.endY) / 2; h.add(d); g = Ee(d, h); c = g.length; if (0 === c) f.push(d.centerX), f.push(d.centerY); else for (d = h.startX, h = h.startY, k = 0; k < c; k++) (l = g[k]), H.Ae(d, h, l[2], l[3], l[4], l[5], l[6], l[7], 0.5, f), (d = l[6]), (h = l[7]); hn(a, b, f, e); } Oa(f); a.restore(); a.Rc(!1); } } } }; t.ma = function (a, b) { void 0 === b && (b = new G()); if (a instanceof O) { a.jc() && A('getDocumentPoint Spot must be a real, specific Spot, not: ' + a.toString()); var c = this.naturalBounds, d = this.strokeWidth; b.h( a.x * (c.width + d) - d / 2 + c.x + a.offsetX, a.y * (c.height + d) - d / 2 + c.y + a.offsetY, ); } else b.set(a); this.rd.ta(b); return b; }; t.Yp = function (a) { void 0 === a && (a = new N()); var b = this.naturalBounds, c = this.rd; b = N.allocAt(b.x, b.y, b.width, b.height); var d = this.strokeWidth; b.Uc(d / 2, d / 2); d = G.allocAt(b.x, b.y).transform(c); a.h(d.x, d.y, 0, 0); d.h(b.right, b.y).transform(c); Bc(a, d.x, d.y, 0, 0); d.h(b.right, b.bottom).transform(c); Bc(a, d.x, d.y, 0, 0); d.h(b.x, b.bottom).transform(c); Bc(a, d.x, d.y, 0, 0); N.free(b); G.free(d); return a; }; t.wh = function (a, b) { var c = this.geometry; if (null === c || (null === this.fill && null === this.stroke)) return !1; var d = c.bounds, e = this.strokeWidth / 2; c.type !== ce || b || (e += 2); var f = N.alloc(); f.assign(d); f.Uc(e + 2, e + 2); if (!f.da(a)) return N.free(f), !1; d = e + 1e-4; if (c.type === ce) { if (null === this.stroke) return !1; d = (c.endX - c.startX) * (a.x - c.startX) + (c.endY - c.startY) * (a.y - c.startY); if (0 > (c.startX - c.endX) * (a.x - c.endX) + (c.startY - c.endY) * (a.y - c.endY) || 0 > d) return !1; N.free(f); return H.Tb(c.startX, c.startY, c.endX, c.endY, e, a.x, a.y); } if (c.type === ke) { b = c.startX; var g = c.startY, h = c.endX; c = c.endY; f.x = Math.min(b, h); f.y = Math.min(g, c); f.width = Math.abs(h - b); f.height = Math.abs(c - g); if (null === this.fill) { f.Uc(-d, -d); if (f.da(a)) return N.free(f), !1; f.Uc(d, d); } null !== this.stroke && f.Uc(e, e); a = f.da(a); N.free(f); return a; } if (c.type === le) { g = c.startX; e = c.startY; h = c.endX; var k = c.endY; c = Math.min(g, h); b = Math.min(e, k); g = Math.abs(h - g) / 2; e = Math.abs(k - e) / 2; c = a.x - (c + g); b = a.y - (b + e); if (null === this.fill) { g -= d; e -= d; if (0 >= g || 0 >= e || 1 >= (c * c) / (g * g) + (b * b) / (e * e)) return N.free(f), !1; g += d; e += d; } null !== this.stroke && ((g += d), (e += d)); N.free(f); return 0 >= g || 0 >= e ? !1 : 1 >= (c * c) / (g * g) + (b * b) / (e * e); } if (c.type === ae) return ( N.free(f), null === this.fill ? He(c, a.x, a.y, e) : c.da(a, e, 1 < this.strokeWidth, b) ); A('Unknown Geometry type: ' + c.type); return !1; }; t.hm = function (a, b, c, d) { var e = this.desiredSize, f = this.ih; a = Math.max(a, 0); b = Math.max(b, 0); if (null !== this.Pd) var g = this.geometry.bounds; else { var h = this.figure, k = jn[h]; if (void 0 === k) { var l = H.Ke[h]; 'string' === typeof l && (l = H.Ke[l]); 'function' === typeof l ? ((k = l(null, 100, 100)), (jn[h] = k)) : A('Unsupported Figure: ' + h); } g = k.bounds; } h = g.width; k = g.height; l = g.width; var m = g.height; switch ($k(this, !0)) { case Zg: d = c = 0; break; case be: l = Math.max(a - f, 0); m = Math.max(b - f, 0); break; case Lk: l = Math.max(a - f, 0); d = 0; break; case Mk: (c = 0), (m = Math.max(b - f, 0)); } isFinite(e.width) && (l = e.width); isFinite(e.height) && (m = e.height); e = this.maxSize; g = this.minSize; c = Math.max(c - f, g.width); d = Math.max(d - f, g.height); l = Math.min(e.width, l); m = Math.min(e.height, m); l = isFinite(l) ? Math.max(c, l) : Math.max(h, c); m = isFinite(m) ? Math.max(d, m) : Math.max(k, d); c = $g(this); switch (c) { case Zg: break; case be: h = l; k = m; break; case ah: c = Math.min(l / h, m / k); isFinite(c) || (c = 1); h *= c; k *= c; break; default: A(c + ' is not a valid geometryStretch.'); } null !== this.Pd ? ((h = Math.max(h, 0.01)), (k = Math.max(k, 0.01)), (g = null !== this.Pd ? this.Pd : this.qa), (e = h), (d = k), (c = g.copy()), (g = g.bounds), (e /= g.width), (d /= g.height), isFinite(e) || (e = 1), isFinite(d) || (d = 1), (1 === e && 1 === d) || c.scale(e, d), (this.qa = c)) : (null !== this.qa && H.ca(this.qa.el, a - f) && H.ca(this.qa.cl, b - f)) || (this.qa = W.makeGeometry(this, h, k)); g = this.qa.bounds; Infinity === a || Infinity === b ? Xk( this, g.x - f / 2, g.y - f / 2, 0 === a && 0 === h ? 0 : g.width + f, 0 === b && 0 === k ? 0 : g.height + f, ) : Xk(this, -(f / 2), -(f / 2), l + f, m + f); }; function $g(a) { var b = a.geometryStretch; return null !== a.Pd ? (b === Kk ? be : b) : b === Kk ? jn[a.figure].defaultStretch : b; } t.uh = function (a, b, c, d) { bl(this, a, b, c, d); }; t.Tc = function (a, b, c) { return this.ck(a.x, a.y, b.x, b.y, c); }; t.ck = function (a, b, c, d, e) { var f = this.transform, g = 1 / (f.m11 * f.m22 - f.m12 * f.m21), h = f.m22 * g, k = -f.m12 * g, l = -f.m21 * g, m = f.m11 * g, n = g * (f.m21 * f.dy - f.m22 * f.dx), p = g * (f.m12 * f.dx - f.m11 * f.dy); f = a * h + b * l + n; g = a * k + b * m + p; h = c * h + d * l + n; k = c * k + d * m + p; n = this.ih / 2; l = this.qa; null === l && (this.measure(Infinity, Infinity), (l = this.qa)); p = l.bounds; m = !1; if (l.type === ce) if (1.5 >= this.strokeWidth) m = H.Ge(l.startX, l.startY, l.endX, l.endY, f, g, h, k, e); else { l.startX === l.endX ? ((d = n), (m = 0)) : ((b = (l.endY - l.startY) / (l.endX - l.startX)), (m = n / Math.sqrt(1 + b * b)), (d = m * b)); b = Ka(); a = new G(); H.Ge(l.startX + d, l.startY + m, l.endX + d, l.endY + m, f, g, h, k, a) && b.push(a); a = new G(); H.Ge(l.startX - d, l.startY - m, l.endX - d, l.endY - m, f, g, h, k, a) && b.push(a); a = new G(); H.Ge(l.startX + d, l.startY + m, l.startX - d, l.startY - m, f, g, h, k, a) && b.push(a); a = new G(); H.Ge(l.endX + d, l.endY + m, l.endX - d, l.endY - m, f, g, h, k, a) && b.push(a); h = b.length; if (0 === h) return Oa(b), !1; m = !0; k = Infinity; for (d = 0; d < h; d++) (a = b[d]), (c = (a.x - f) * (a.x - f) + (a.y - g) * (a.y - g)), c < k && ((k = c), (e.x = a.x), (e.y = a.y)); Oa(b); } else if (l.type === ke) m = H.Tc(p.x - n, p.y - n, p.x + p.width + n, p.y + p.height + n, f, g, h, k, e); else if (l.type === le) { b = N.allocAt(p.x, p.y, p.width, p.height).Uc(n, n); a: if (0 === b.width) m = H.Ge(b.x, b.y, b.x, b.y + b.height, f, g, h, k, e); else if (0 === b.height) m = H.Ge(b.x, b.y, b.x + b.width, b.y, f, g, h, k, e); else { a = b.width / 2; l = b.height / 2; d = b.x + a; m = b.y + l; c = 9999; f !== h && (c = (g - k) / (f - h)); if (9999 > Math.abs(c)) { k = g - m - c * (f - d); if (0 > a * a * c * c + l * l - k * k) { e.x = NaN; e.y = NaN; m = !1; break a; } n = Math.sqrt(a * a * c * c + l * l - k * k); h = (-(a * a * c * k) + a * l * n) / (l * l + a * a * c * c) + d; a = (-(a * a * c * k) - a * l * n) / (l * l + a * a * c * c) + d; l = c * (h - d) + k + m; k = c * (a - d) + k + m; Math.abs((f - h) * (f - h)) + Math.abs((g - l) * (g - l)) < Math.abs((f - a) * (f - a)) + Math.abs((g - k) * (g - k)) ? ((e.x = h), (e.y = l)) : ((e.x = a), (e.y = k)); } else { h = l * l; k = f - d; h -= (h / (a * a)) * k * k; if (0 > h) { e.x = NaN; e.y = NaN; m = !1; break a; } k = Math.sqrt(h); h = m + k; k = m - k; Math.abs(h - g) < Math.abs(k - g) ? ((e.x = f), (e.y = h)) : ((e.x = f), (e.y = k)); } m = !0; } N.free(b); } else if (l.type === ae) { p = G.alloc(); var q = h - f; var r = k - g; var u = q * q + r * r; e.x = h; e.y = k; for (var x = 0; x < l.figures.count; x++) { var v = l.figures.j[x], z = v.segments; q = v.startX; r = v.startY; for (var y = q, B = r, C = 0; C < z.count; C++) { var I = z.j[C], L = I.type; var J = I.endX; var U = I.endY; var R = !1; switch (L) { case ze: y = J; B = U; break; case ie: R = nn(q, r, J, U, f, g, h, k, p); break; case Ae: R = H.Op(q, r, I.point1X, I.point1Y, I.point2X, I.point2Y, J, U, f, g, h, k, 0.6, p); break; case Be: R = H.Op( q, r, (q + 2 * I.point1X) / 3, (r + 2 * I.point1Y) / 3, (2 * I.point1X + J) / 3, (2 * I.point1X + J) / 3, J, U, f, g, h, k, 0.6, p, ); break; case Ce: case De: L = I.type === Ce ? Ee(I, v) : Fe(I, v, q, r); var da = L.length; if (0 === da) { R = nn(q, r, I.centerX, I.centerY, f, g, h, k, p); break; } U = null; for (J = 0; J < da; J++) { U = L[J]; if (0 === J && nn(q, r, U[0], U[1], f, g, h, k, p)) { var ja = on(f, g, p, u, e); ja < u && ((u = ja), (m = !0)); } H.Op(U[0], U[1], U[2], U[3], U[4], U[5], U[6], U[7], f, g, h, k, 0.6, p) && ((ja = on(f, g, p, u, e)), ja < u && ((u = ja), (m = !0))); } J = U[6]; U = U[7]; break; default: A('Unknown Segment type: ' + L); } q = J; r = U; R && ((R = on(f, g, p, u, e)), R < u && ((u = R), (m = !0))); I.isClosed && ((J = y), (U = B), nn(q, r, J, U, f, g, h, k, p) && ((I = on(f, g, p, u, e)), I < u && ((u = I), (m = !0)))); } } f = c - a; g = d - b; h = Math.sqrt(f * f + g * g); 0 !== h && ((f /= h), (g /= h)); e.x -= f * n; e.y -= g * n; G.free(p); } else A('Unknown Geometry type: ' + l.type); if (!m) return !1; this.transform.ta(e); return !0; }; function on(a, b, c, d, e) { a = c.x - a; b = c.y - b; b = a * a + b * b; return b < d ? ((e.x = c.x), (e.y = c.y), b) : d; } function nn(a, b, c, d, e, f, g, h, k) { var l = !1, m = (e - g) * (b - d) - (f - h) * (a - c); if (0 === m) return !1; k.x = ((e * h - f * g) * (a - c) - (e - g) * (a * d - b * c)) / m; k.y = ((e * h - f * g) * (b - d) - (f - h) * (a * d - b * c)) / m; (a > c ? a - c : c - a) < (b > d ? b - d : d - b) ? ((a = b < d ? b : d), (b = b < d ? d : b), (k.y > a || H.ca(k.y, a)) && (k.y < b || H.ca(k.y, b)) && (l = !0)) : ((b = a < c ? a : c), (a = a < c ? c : a), (k.x > b || H.ca(k.x, b)) && (k.x < a || H.ca(k.x, a)) && (l = !0)); return l; } t.vh = function (a, b) { if (void 0 === b) return a.nf(this.actualBounds); var c = this.qa; null === c && (this.measure(Infinity, Infinity), (c = this.qa)); c = c.bounds; var d = this.strokeWidth / 2, e = !1, f = G.alloc(); f.h(c.x - d, c.y - d); a.da(b.ta(f)) && (f.h(c.x - d, c.bottom + d), a.da(b.ta(f)) && (f.h(c.right + d, c.bottom + d), a.da(b.ta(f)) && (f.h(c.right + d, c.y - d), a.da(b.ta(f)) && (e = !0)))); G.free(f); return e; }; t.Ic = function (a, b) { if (this.vh(a, b) || (void 0 === b && ((b = this.transform), a.nf(this.actualBounds)))) return !0; var c = Qc.alloc(); c.set(b); c.at(); var d = a.left, e = a.right, f = a.top; a = a.bottom; var g = G.alloc(); g.h(d, f); c.ta(g); if (this.wh(g, !0)) return G.free(g), !0; g.h(e, f); c.ta(g); if (this.wh(g, !0)) return G.free(g), !0; g.h(d, a); c.ta(g); if (this.wh(g, !0)) return G.free(g), !0; g.h(e, a); c.ta(g); if (this.wh(g, !0)) return G.free(g), !0; var h = G.alloc(), k = G.alloc(); c.set(b); c.ov(this.transform); c.at(); h.x = e; h.y = f; h.transform(c); g.x = d; g.y = f; g.transform(c); b = !1; pn(this, g, h, k) ? (b = !0) : ((g.x = e), (g.y = a), g.transform(c), pn(this, g, h, k) ? (b = !0) : ((h.x = d), (h.y = a), h.transform(c), pn(this, g, h, k) ? (b = !0) : ((g.x = d), (g.y = f), g.transform(c), pn(this, g, h, k) && (b = !0)))); G.free(g); Qc.free(c); G.free(h); G.free(k); return b; }; function pn(a, b, c, d) { if (!a.Tc(b, c, d)) return !1; a = b.x; b = b.y; var e = c.x, f = c.y; c = d.x; d = d.y; if (a === e) return b < f ? ((a = b), (b = f)) : (a = f), d >= a && d <= b; a < e ? ((d = a), (a = e)) : (d = e); return c >= d && c <= a; } t.hx = function (a, b, c) { function d(a, b) { for (var c = a.length, d = 0; d < c; d += 2) if (b.cd(a[d], a[d + 1]) > e) return !0; return !1; } if (c && null !== this.fill && this.wh(a, !0)) return !0; var e = a.Ce(b), f = e; 1.5 < this.strokeWidth && ((e = this.strokeWidth / 2 + Math.sqrt(e)), (e *= e)); b = this.qa; if (null === b && (this.measure(Infinity, Infinity), (b = this.qa), null === b)) return !1; if (!c) { var g = b.bounds, h = g.x, k = g.y, l = g.x + g.width; g = g.y + g.height; if ( Sb(a.x, a.y, h, k) <= e && Sb(a.x, a.y, l, k) <= e && Sb(a.x, a.y, h, g) <= e && Sb(a.x, a.y, l, g) <= e ) return !0; } h = b.startX; k = b.startY; l = b.endX; g = b.endY; if (b.type === ce) { if ( ((c = (h - l) * (a.x - l) + (k - g) * (a.y - g)), Rb(a.x, a.y, h, k, l, g) <= (0 <= (l - h) * (a.x - h) + (g - k) * (a.y - k) && 0 <= c ? e : f)) ) return !0; } else { if (b.type === ke) return ( (b = !1), c && (b = Rb(a.x, a.y, h, k, h, g) <= e || Rb(a.x, a.y, h, k, l, k) <= e || Rb(a.x, a.y, l, k, l, g) <= e || Rb(a.x, a.y, h, g, l, g) <= e), b ); if (b.type === le) { b = a.x - (h + l) / 2; f = a.y - (k + g) / 2; var m = Math.abs(l - h) / 2, n = Math.abs(g - k) / 2; if (0 === m || 0 === n) return Rb(a.x, a.y, h, k, l, g) <= e ? !0 : !1; if (c) { if (((a = H.Ay(m, n, b, f)), a * a <= e)) return !0; } else return Sb(b, f, -m, 0) >= e || Sb(b, f, 0, -n) >= e || Sb(b, f, 0, n) >= e || Sb(b, f, m, 0) >= e ? !1 : !0; } else if (b.type === ae) { l = b.bounds; f = l.x; h = l.y; k = l.x + l.width; l = l.y + l.height; if ( a.x > k && a.x < f && a.y > l && a.y < h && Rb(a.x, a.y, f, h, f, l) > e && Rb(a.x, a.y, f, h, k, h) > e && Rb(a.x, a.y, k, l, f, l) > e && Rb(a.x, a.y, k, l, k, h) > e ) return !1; f = Math.sqrt(e); if (c) { if (null === this.fill ? He(b, a.x, a.y, f) : b.da(a, f, !0)) return !0; } else { c = b.figures; for (b = 0; b < c.count; b++) { f = c.j[b]; g = f.startX; m = f.startY; if (a.cd(g, m) > e) return !1; h = f.segments.j; k = h.length; for (l = 0; l < k; l++) switch (((n = h[l]), n.type)) { case ze: case ie: g = n.endX; m = n.endY; if (a.cd(g, m) > e) return !1; break; case Ae: var p = Ka(); H.Ae(g, m, n.point1X, n.point1Y, n.point2X, n.point2Y, n.endX, n.endY, 0.8, p); g = d(p, a); Oa(p); if (g) return !1; g = n.endX; m = n.endY; if (a.cd(g, m) > e) return !1; break; case Be: p = Ka(); H.mq(g, m, n.point1X, n.point1Y, n.endX, n.endY, 0.8, p); g = d(p, a); Oa(p); if (g) return !1; g = n.endX; m = n.endY; if (a.cd(g, m) > e) return !1; break; case Ce: case De: p = n.type === Ce ? Ee(n, f) : Fe(n, f, g, m); var q = p.length; if (0 === q) { g = n.centerX; m = n.centerY; if (a.cd(g, m) > e) return !1; break; } n = null; for (var r = Ka(), u = 0; u < q; u++) if ( ((n = p[u]), (r.length = 0), H.Ae(n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], 0.8, r), d(r, a)) ) return Oa(r), !1; Oa(r); null !== n && ((g = n[6]), (m = n[7])); break; default: A('Unknown Segment type: ' + n.type); } } return !0; } } } return !1; }; t.ac = function () { this.qa = null; }; function qn(a) { var b = a.diagram; (null !== b && b.undoManager.isUndoingRedoing) || ((a.segmentOrientation = rn), 'None' !== a.Pl ? ((a.segmentIndex = -1), (a.alignmentFocus = Sd)) : 'None' !== a.Yk && ((a.segmentIndex = 0), (a.alignmentFocus = new O(1 - Sd.x, Sd.y)))); } W.makeGeometry = function (a, b, c) { if ('None' !== a.toArrow) var d = sn[a.toArrow]; else 'None' !== a.fromArrow ? (d = sn[a.fromArrow]) : ((d = H.Ke[a.figure]), 'string' === typeof d && (d = H.Ke[d]), void 0 === d && A('Unknown Shape.figure: ' + a.figure), (d = d(a, b, c)), (d.el = b), (d.cl = c)); if (null === d) { var e = H.Ke.Rectangle; 'function' === typeof e && (d = e(a, b, c)); } return d; }; function tn(a) { var b = sn[a]; if (void 0 === b) { var c = a.toLowerCase(); if ('none' === c) return 'None'; b = sn[c]; if (void 0 === b) { var d = null, e; for (e in H.Bm) if (e.toLowerCase() === c) { d = e; break; } if (null !== d) return (a = me(H.Bm[d], !1)), (sn[d] = a), c !== d && (sn[c] = d), d; } } return 'string' === typeof b ? b : b instanceof $d ? a : null; } pa.Object.defineProperties(W.prototype, { geometry: { get: function () { return null !== this.qa ? this.qa : this.Pd; }, set: function (a) { var b = this.qa; if (b !== a) { null !== a ? (this.Pd = this.qa = a.freeze()) : (this.Pd = this.qa = null); var c = this.part; null !== c && (c.Wg = NaN); this.s(); this.g('geometry', b, a); Uk(this) && ((a = this.part), null !== a && Vk(this, a, 'geometryString')); } }, }, geometryString: { get: function () { return null === this.geometry ? '' : this.geometry.toString(); }, set: function (a) { a = me(a); var b = a.normalize(); this.geometry = a; this.position = a = G.allocAt(-b.x, -b.y); G.free(a); }, }, isGeometryPositioned: { get: function () { return this.Qn; }, set: function (a) { var b = this.Qn; b !== a && ((this.Qn = a), this.s(), this.g('isGeometryPositioned', b, a)); }, }, fill: { get: function () { return this.Wk; }, set: function (a) { var b = this.Wk; b !== a && (null !== a && Fl(a, 'Shape.fill'), a instanceof il && a.freeze(), (this.Wk = a), this.R(), this.g('fill', b, a)); }, }, stroke: { get: function () { return this.Gc; }, set: function (a) { var b = this.Gc; b !== a && (null !== a && Fl(a, 'Shape.stroke'), a instanceof il && a.freeze(), (this.Gc = a), this.R(), this.g('stroke', b, a)); }, }, strokeWidth: { get: function () { return this.ih; }, set: function (a) { var b = this.ih; if (b !== a) if (0 <= a) { this.ih = a; this.s(); var c = this.part; null !== c && (c.Wg = NaN); this.g('strokeWidth', b, a); } else ya(a, 'value >= 0', W, 'strokeWidth:value'); }, }, strokeCap: { get: function () { return this.Il; }, set: function (a) { var b = this.Il; b !== a && ('string' !== typeof a || ('butt' !== a && 'round' !== a && 'square' !== a) ? ya(a, '"butt", "round", or "square"', W, 'strokeCap') : ((this.Il = a), this.R(), this.g('strokeCap', b, a))); }, }, strokeJoin: { get: function () { return this.Jl; }, set: function (a) { var b = this.Jl; b !== a && ('string' !== typeof a || ('miter' !== a && 'bevel' !== a && 'round' !== a) ? ya(a, '"miter", "bevel", or "round"', W, 'strokeJoin') : ((this.Jl = a), this.R(), this.g('strokeJoin', b, a))); }, }, strokeMiterLimit: { get: function () { return this.Kj; }, set: function (a) { var b = this.Kj; if (b !== a && 1 <= a) { this.Kj = a; this.R(); var c = this.part; null !== c && (c.Wg = NaN); this.g('strokeMiterLimit', b, a); } }, }, strokeDashArray: { get: function () { return this.gh; }, set: function (a) { var b = this.gh; if (b !== a) { if (null !== a) { for (var c = a.length, d = 0, e = 0; e < c; e++) { var f = a[e]; (0 <= f && isFinite(f)) || A( 'strokeDashArray:value ' + f + ' at index ' + e + ' must be a positive number or zero.', ); d += f; } if (0 === d) { if (null === b) return; a = null; } } this.gh = a; this.R(); this.g('strokeDashArray', b, a); } }, }, strokeDashOffset: { get: function () { return this.hh; }, set: function (a) { var b = this.hh; b !== a && 0 <= a && ((this.hh = a), this.R(), this.g('strokeDashOffset', b, a)); }, }, figure: { get: function () { return this.Vk; }, set: function (a) { var b = this.Vk; if (b !== a) { var c = H.Ke[a]; 'function' === typeof c ? (c = a) : (c = H.Ke[a.toLowerCase()]) || A('Unknown Shape.figure: ' + a); b !== c && ((a = this.part), null !== a && (a.Wg = NaN), (this.Vk = c), (this.Pd = null), this.ac(), this.s(), this.g('figure', b, c)); } }, }, toArrow: { get: function () { return this.Pl; }, set: function (a) { var b = this.Pl; !0 === a ? (a = 'Standard') : !1 === a && (a = ''); if (b !== a) { var c = tn(a); null === c ? A('Unknown Shape.toArrow: ' + a) : b !== c && ((this.Pl = c), (this.Pd = null), this.ac(), this.s(), qn(this), this.g('toArrow', b, c)); } }, }, fromArrow: { get: function () { return this.Yk; }, set: function (a) { var b = this.Yk; !0 === a ? (a = 'Standard') : !1 === a && (a = ''); if (b !== a) { var c = tn(a); null === c ? A('Unknown Shape.fromArrow: ' + a) : b !== c && ((this.Yk = c), (this.Pd = null), this.ac(), this.s(), qn(this), this.g('fromArrow', b, c)); } }, }, spot1: { get: function () { return this.df; }, set: function (a) { var b = this.df; b.A(a) || ((this.df = a = a.I()), this.s(), this.g('spot1', b, a)); }, }, spot2: { get: function () { return this.ef; }, set: function (a) { var b = this.ef; b.A(a) || ((this.ef = a = a.I()), this.s(), this.g('spot2', b, a)); }, }, parameter1: { get: function () { return this.Mo; }, set: function (a) { var b = this.Mo; b !== a && ((this.Mo = a), this.ac(), this.s(), this.g('parameter1', b, a)); }, }, parameter2: { get: function () { return this.No; }, set: function (a) { var b = this.No; b !== a && ((this.No = a), this.ac(), this.s(), this.g('parameter2', b, a)); }, }, naturalBounds: { get: function () { if (null !== this.qa) return this.qc.assign(this.qa.bounds), this.qc; var a = this.desiredSize; return new N(0, 0, a.width, a.height); }, }, pathPattern: { get: function () { return this.Po; }, set: function (a) { var b = this.Po; b !== a && ((this.Po = a), this.R(), this.g('pathPattern', b, a)); }, }, geometryStretch: { get: function () { return this.Fn; }, set: function (a) { var b = this.Fn; b !== a && ((this.Fn = a), this.g('geometryStretch', b, a)); }, }, interval: { get: function () { return this.Cd; }, set: function (a) { var b = this.Cd; a = Math.floor(a); if (b !== a && 0 <= a) { this.Cd = a; var c = this.diagram; null !== c && this.panel === c.grid && kj(c); this.s(); c = this.panel; null !== c && (c.Pg = null); this.g('interval', b, a); } }, }, graduatedStart: { get: function () { return this.Bd; }, set: function (a) { var b = this.Bd; b !== a && (0 > a ? (a = 0) : 1 < a && (a = 1), (this.Bd = a), this.s(), this.g('graduatedStart', b, a)); }, }, graduatedEnd: { get: function () { return this.zd; }, set: function (a) { var b = this.zd; b !== a && (0 > a ? (a = 0) : 1 < a && (a = 1), (this.zd = a), this.s(), this.g('graduatedEnd', b, a)); }, }, graduatedSkip: { get: function () { return this.Ad; }, set: function (a) { var b = this.Ad; b !== a && ((this.Ad = a), this.s(), this.g('graduatedSkip', b, a)); }, }, }); W.prototype.intersectsRect = W.prototype.Ic; W.prototype.containedInRect = W.prototype.vh; W.prototype.getNearestIntersectionPoint = W.prototype.Tc; W.prototype.getDocumentBounds = W.prototype.Yp; W.prototype.getDocumentPoint = W.prototype.ma; var sn = new tb(), jn = new tb(); W.className = 'Shape'; W.getFigureGenerators = function () { var a = new Lb(), b; for (b in H.Ke) b !== b.toLowerCase() && a.add(b, H.Ke[b]); a.freeze(); return a; }; W.defineFigureGenerator = function (a, b) { var c = a.toLowerCase(), d = H.Ke; d[a] = b; d[c] = a; }; W.getArrowheadGeometries = function () { var a = new Lb(); for (d in H.Bm) if (void 0 === sn[d]) { var b = me(H.Bm[d], !1); sn[d] = b; b = d.toLowerCase(); b !== d && (sn[b] = d); } for (var c in sn) if (c !== c.toLowerCase()) { var d = sn[c]; d instanceof $d && a.add(c, d); } a.freeze(); return a; }; W.defineArrowheadGeometry = function (a, b) { var c = null; 'string' === typeof b ? (c = me(b, !1)) : (c = b); b = a.toLowerCase(); ('none' !== b && a !== b) || A('Shape.defineArrowheadGeometry name must not be empty or None or all-lower-case: ' + a); var d = sn; d[a] = c; d[b] = a; }; function vh() { Y.call(this); un || (vn(), (un = !0)); this.Ob = ''; this.Gc = 'black'; this.fe = '13px sans-serif'; this.wi = 'start'; this.yd = Zg; this.Bi = Hd; this.oj = !0; this.di = this.ei = !1; this.ag = wn; this.mg = xn; this.Qr = this.oc = 0; this.hu = this.iu = null; this.nd = new Jm(); this.zn = !1; this.Cc = this.Wm = this.zp = this.xi = this.Ap = null; this.cf = this.bf = 0; this.ne = Infinity; this.jl = 0; this.Cd = 1; this.Bd = 0; this.zd = 1; this.Ad = this.jj = null; } oa(vh, Y); vh.prototype.cloneProtected = function (a) { Y.prototype.cloneProtected.call(this, a); a.Ob = this.Ob; a.Gc = this.Gc; a.fe = this.fe; a.wi = this.wi; a.yd = this.yd; a.Bi = this.Bi; a.oj = this.oj; a.ei = this.ei; a.di = this.di; a.ag = this.ag; a.mg = this.mg; a.oc = this.oc; a.Qr = this.Qr; a.iu = this.iu; a.hu = this.hu; a.nd.Vl(this.nd); a.zn = this.zn; a.Ap = this.Ap; a.xi = this.xi; a.zp = this.zp; a.Wm = this.Wm; a.Cc = this.Cc; a.bf = this.bf; a.cf = this.cf; a.ne = this.ne; a.jl = this.jl; a.Cd = this.Cd; a.Bd = this.Bd; a.zd = this.zd; a.jj = this.jj; a.Ad = this.Ad; }; function Im(a, b) { a.H = b.H | 6144; a.lb = b.opacity; a.ib = b.background; a.dc = b.areaBackground; a.Nc = b.desiredSize.I(); a.Sf = b.minSize.I(); a.Rf = b.maxSize.I(); a.Qf = b.Qf.copy(); a.Ca = b.scale; a.zc = b.angle; a.we = b.stretch; a.Vg = b.margin.I(); a.wb = b.alignment.I(); a.yk = b.alignmentFocus.I(); a.yl = b.segmentFraction; a.zl = b.segmentOffset.I(); a.Al = b.segmentOrientation; null !== b.kd && (a.kd = b.kd.copy()); a.Cl = b.shadowVisible; b instanceof vh && ((a.Ob = b.Ob), (a.Gc = b.Gc), (a.fe = b.fe), (a.wi = b.wi), (a.yd = b.yd), (a.Bi = b.Bi), (a.oj = b.oj), (a.ei = b.ei), (a.di = b.di), (a.ag = b.ag), (a.mg = b.mg), (a.nd.Jf = null), (a.bf = b.bf), (a.cf = b.cf), (a.ne = b.ne), (a.jl = b.jl), (a.Cd = b.Cd), (a.Bd = b.Bd), (a.zd = b.zd), (a.jj = b.jj), (a.Ad = b.Ad)); } t = vh.prototype; t.fb = function (a) { a.classType === vh ? (this.wrap = a) : Y.prototype.fb.call(this, a); }; t.toString = function () { return 22 < this.Ob.length ? 'TextBlock("' + this.Ob.substring(0, 20) + '"...)' : 'TextBlock("' + this.Ob + '")'; }; t.s = function () { Y.prototype.s.call(this); this.hu = this.iu = null; }; t.Ei = function (a, b) { if (null !== this.Gc && 0 !== this.Ob.length && null !== this.fe) { var c = this.naturalBounds, d = this.actualBounds, e = c.width, f = c.height, g = yn(this), h = (a.textAlign = this.wi), k = b.Sn; 'start' === h ? (h = k ? 'right' : 'left') : 'end' === h && (h = k ? 'left' : 'right'); k = this.ei; var l = this.di; ji(this, a, this.Gc, !0, !1, c, d); (k || l) && ji(this, a, this.Gc, !1, !1, c, d); d = 0; c = !1; var m = G.allocAt(0, 0); this.rd.ta(m); var n = G.allocAt(0, g); this.rd.ta(n); var p = m.Ce(n); G.free(m); G.free(n); m = b.scale; 8 > p * m * m && (c = !0); b.Yc !== a && (c = !1); !1 === b.Ee('textGreeking') && (c = !1); b = this.bf; p = this.cf; switch (this.flip) { case Pk: a.translate(e, 0); a.scale(-1, 1); break; case Ok: a.translate(0, f); a.scale(1, -1); break; case Qk: a.translate(e, f), a.scale(-1, -1); } m = this.oc; n = (b + g + p) * m; f > n && ((d = this.Bi), (d = d.y * f - d.y * n + d.offsetY)); n = this.nd; for (var q = 0; q < m; q++) { var r = n.Wc[q]; r > e && (r = e); d += b; var u = n.Ac[q], x = a, v = d, z = h, y = 0; if (c) 'left' === z ? (y = 0) : 'right' === z ? (y = e - r) : 'center' === z && (y = (e - r) / 2), x.fillRect(0 + y, v + 0.25 * g, r, 1); else { 'left' === z ? (y = 0) : 'right' === z ? (y = e) : 'center' === z && (y = e / 2); var B = null !== zn ? zn(this, g) : 0.75 * g; x.fillText(u, 0 + y, v + B); u = (g / 20) | 0; 0 === u && (u = 1); 'right' === z ? (y -= r) : 'center' === z && (y -= r / 2); k && ((z = null !== An ? An(this, g) : 0.8 * g), x.beginPath(), (x.lineWidth = u), x.moveTo(0 + y, v + z), x.lineTo(0 + y + r, v + z), x.stroke()); l && (x.beginPath(), (x.lineWidth = u), (v = (v + g - g / 2.2) | 0), 0 !== u % 2 && (v += 0.5), x.moveTo(0 + y, v), x.lineTo(0 + y + r, v), x.stroke()); } d += g + p; } switch (this.flip) { case Pk: a.scale(-1, 1); a.translate(-e, 0); break; case Ok: a.scale(1, -1); a.translate(0, -f); break; case Qk: a.scale(-1, -1), a.translate(-e, -f); } } }; t.hm = function (a, b, c, d) { this.jl = a; var e = this.fe; null !== Bn && Cn !== e && (Cn = Bn.font = e); e = this.nd; e.reset(); var f; if (isNaN(this.desiredSize.width)) { var g = this.Ob.replace(/\r\n/g, '\n').replace(/\r/g, '\n'); if (0 === g.length) g = 0; else if (this.isMultiline) { for (var h = (f = 0), k = !1; !k; ) { var l = g.indexOf('\n', h); -1 === l && ((l = g.length), (k = !0)); f = Math.max(f, Dn(g.substr(h, l - h).trim())); h = l + 1; } g = f; } else (f = g.indexOf('\n', 0)), 0 <= f && (g = g.substr(0, f)), (g = Dn(g)); g = Math.min(g, a / this.scale); g = Math.max(8, g); } else g = this.desiredSize.width; null !== this.panel && (g = Math.min(g, this.panel.maxSize.width)); f = En(this, g, e); isNaN(this.desiredSize.height) ? (f = Math.min(f, b / this.scale)) : (f = this.desiredSize.height); h = f; if ( 0 !== e.Ec && 1 !== e.Ac.length && this.ag === Fn && ((b = this.fe), (b = this.ag === Fn ? Gn(b) : 0), (k = this.bf + this.cf), (k = Math.max(0, yn(this) + k)), (h = Math.min(this.maxLines - 1, Math.max(Math.floor(h / k + 0.01) - 1, 0))), !(h + 1 >= e.Ac.length)) ) { k = e.Ac[h]; for (b = Math.max(1, a - b); Dn(k) > b && 1 < k.length; ) k = k.substr(0, k.length - 1); k += Hn; b = Dn(k); e.Ac[h] = k; e.Ac = e.Ac.slice(0, h + 1); e.Wc[h] = b; e.Wc = e.Wc.slice(0, h + 1); e.lg = e.Ac.length; e.Ec = Math.max(e.Ec, b); this.oc = e.lg; } if (this.wrap === In || isNaN(this.desiredSize.width)) (g = isNaN(a) ? e.Ec : Math.min(a, e.Ec)), isNaN(this.desiredSize.width) && (g = Math.max(8, g)); g = Math.max(c, g); f = Math.max(d, f); sc(this.qc, g, f); Xk(this, 0, 0, g, f); }; t.uh = function (a, b, c, d) { bl(this, a, b, c, d); }; function Jn(a, b, c, d, e) { b = b.trim(); var f = 0; var g = a.fe; var h = a.bf + a.cf; h = Math.max(0, yn(a) + h); var k = a.ag === Fn ? Gn(g) : 0; if (a.oc >= a.ne) null !== e && e.h(0, h); else { var l = b; if (a.mg === Kn) if (((c.lg = 1), (g = Dn(b)), 0 === k || g <= d)) (c.Ec = Math.max(c.Ec, g)), c.Wc.push(c.Ec), c.Ac.push(b), null !== e && e.h(g, h); else { f = Ln(a, l); l = l.substr(f.length); b = Ln(a, l); for (g = Dn(f + b); 0 < b.length && g <= d; ) (f += b), (l = l.substr(b.length)), (b = Ln(a, l)), (g = Dn((f + b).trim())); f += b.trim(); for (d = Math.max(1, d - k); Dn(f) > d && 1 < f.length; ) f = f.substr(0, f.length - 1); f += Hn; b = Dn(f); c.Wc.push(b); c.Ec = b; c.Ac.push(f); null !== e && e.h(b, h); } else { k = 0; 0 === l.length && ((k = 1), c.Wc.push(0), c.Ac.push(l)); for (; 0 < l.length; ) { var m = Ln(a, l); for (l = l.substr(m.length); Dn(m) > d; ) { var n = 1; g = Dn(m.substr(0, n)); for (b = 0; g <= d; ) n++, (b = g), (g = Dn(m.substr(0, n))); 1 === n ? ((c.Wc[a.oc + k] = g), (f = Math.max(f, g))) : ((c.Wc[a.oc + k] = b), (f = Math.max(f, b))); n--; 1 > n && (n = 1); c.Ac[a.oc + k] = m.substr(0, n); k++; m = m.substr(n); if (a.oc + k > a.ne) break; } b = Ln(a, l); for (g = Dn(m + b); 0 < b.length && g <= d; ) (m += b), (l = l.substr(b.length)), (b = Ln(a, l)), (g = Dn((m + b).trim())); m = m.trim(); if ( '' !== m && ('\u00ad' === m[m.length - 1] && (m = m.substring(0, m.length - 1) + '\u2010'), 0 === b.length ? (c.Wc.push(g), (f = Math.max(f, g))) : ((b = Dn(m)), c.Wc.push(b), (f = Math.max(f, b))), c.Ac.push(m), k++, a.oc + k > a.ne) ) break; } c.lg = Math.min(a.ne, k); c.Ec = Math.max(c.Ec, f); null !== e && e.h(c.Ec, h * c.lg); } } } function Ln(a, b) { if (a.mg === Mn) return b.substr(0, 1); a = b.length; for (var c = 0, d = Nn; c < a && !d.test(b.charAt(c)); ) c++; for (; c < a && d.test(b.charAt(c)); ) c++; return c >= a ? b : b.substr(0, c); } function Dn(a) { return null === Bn ? 8 * a.length : Bn.measureText(a).width; } function yn(a) { if (null !== a.nd.Jf) return a.nd.Jf; var b = a.fe; if (null === Bn) { var c = 16; return (a.nd.Jf = c); } void 0 !== On[b] && 5e3 > Pn ? (c = On[b]) : ((c = 1.3 * Bn.measureText('M').width), (On[b] = c), Pn++); return (a.nd.Jf = c); } function Gn(a) { if (null === Bn) return 6; if (void 0 !== Qn[a] && 5e3 > Rn) var b = Qn[a]; else (b = Bn.measureText(Hn).width), (Qn[a] = b), Rn++; return b; } function En(a, b, c) { var d = a.Ob.replace(/\r\n/g, '\n').replace(/\r/g, '\n'), e = a.bf + a.cf; e = Math.max(0, yn(a) + e); if (0 === d.length) return (c.Ec = 0), (a.oc = 1), e; if (!a.isMultiline) { var f = d.indexOf('\n', 0); 0 <= f && (d = d.substr(0, f)); } f = 0; for (var g = (a.oc = 0), h, k = !1; !k; ) { h = d.indexOf('\n', g); -1 === h && ((h = d.length), (k = !0)); if (g <= h) { g = d.substr(g, h - g); if (a.mg !== Kn) { c.lg = 0; var l = M.alloc(); Jn(a, g, c, b, l); f += l.height; M.free(l); a.oc += c.lg; } else Jn(a, g, c, b, null), (f += e), a.oc++; a.oc === a.ne && (k = !0); } g = h + 1; } return (a.Qr = f); } function vn() { Nn = /[ \u200b\u00ad]/; On = new tb(); Qn = new tb(); Bn = th ? new tk(null).context : null; } pa.Object.defineProperties(vh.prototype, { font: { get: function () { return this.fe; }, set: function (a) { var b = this.fe; b !== a && ((this.fe = a), (this.nd.Jf = null), this.s(), this.g('font', b, a)); }, }, text: { get: function () { return this.Ob; }, set: function (a) { var b = this.Ob; null !== a && void 0 !== a ? (a = a.toString()) : (a = ''); b !== a && ((this.Ob = a), this.s(), this.g('text', b, a)); }, }, textAlign: { get: function () { return this.wi; }, set: function (a) { var b = this.wi; b === a || ('start' !== a && 'end' !== a && 'left' !== a && 'right' !== a && 'center' !== a) || ((this.wi = a), this.R(), this.g('textAlign', b, a)); }, }, flip: { get: function () { return this.yd; }, set: function (a) { var b = this.yd; b !== a && ((this.yd = a), this.R(), this.g('flip', b, a)); }, }, verticalAlignment: { get: function () { return this.Bi; }, set: function (a) { var b = this.Bi; b.A(a) || ((this.Bi = a = a.I()), rl(this), this.g('verticalAlignment', b, a)); }, }, naturalBounds: { get: function () { if (!this.qc.o()) { var a = M.alloc(); Jn(this, this.Ob, this.nd, 999999, a); var b = a.width; M.free(a); a = En(this, b, this.nd); var c = this.desiredSize; isNaN(c.width) || (b = c.width); isNaN(c.height) || (a = c.height); sc(this.qc, b, a); } return this.qc; }, }, isMultiline: { get: function () { return this.oj; }, set: function (a) { var b = this.oj; b !== a && ((this.oj = a), this.s(), this.g('isMultiline', b, a)); }, }, isUnderline: { get: function () { return this.ei; }, set: function (a) { var b = this.ei; b !== a && ((this.ei = a), this.R(), this.g('isUnderline', b, a)); }, }, isStrikethrough: { get: function () { return this.di; }, set: function (a) { var b = this.di; b !== a && ((this.di = a), this.R(), this.g('isStrikethrough', b, a)); }, }, wrap: { get: function () { return this.mg; }, set: function (a) { var b = this.mg; b !== a && ((this.mg = a), this.s(), this.g('wrap', b, a)); }, }, overflow: { get: function () { return this.ag; }, set: function (a) { var b = this.ag; b !== a && ((this.ag = a), this.s(), this.g('overflow', b, a)); }, }, stroke: { get: function () { return this.Gc; }, set: function (a) { var b = this.Gc; b !== a && (null !== a && Fl(a, 'TextBlock.stroke'), a instanceof il && a.freeze(), (this.Gc = a), this.R(), this.g('stroke', b, a)); }, }, lineCount: { get: function () { return this.oc; }, }, editable: { get: function () { return this.zn; }, set: function (a) { var b = this.zn; b !== a && ((this.zn = a), this.g('editable', b, a)); }, }, textEditor: { get: function () { return this.Ap; }, set: function (a) { var b = this.Ap; b !== a && ((this.Ap = a), this.g('textEditor', b, a)); }, }, errorFunction: { get: function () { return this.Cc; }, set: function (a) { var b = this.Cc; b !== a && ((this.Cc = a), this.g('errorFunction', b, a)); }, }, interval: { get: function () { return this.Cd; }, set: function (a) { var b = this.Cd; a = Math.floor(a); if (b !== a && 0 <= a) { this.Cd = a; this.s(); var c = this.panel; null !== c && (c.Pg = null); this.g('interval', b, a); } }, }, graduatedStart: { get: function () { return this.Bd; }, set: function (a) { var b = this.Bd; b !== a && (0 > a ? (a = 0) : 1 < a && (a = 1), (this.Bd = a), this.s(), this.g('graduatedStart', b, a)); }, }, graduatedEnd: { get: function () { return this.zd; }, set: function (a) { var b = this.zd; b !== a && (0 > a ? (a = 0) : 1 < a && (a = 1), (this.zd = a), this.s(), this.g('graduatedEnd', b, a)); }, }, graduatedFunction: { get: function () { return this.jj; }, set: function (a) { var b = this.jj; b !== a && ((this.jj = a), this.s(), this.g('graduatedFunction', b, a)); }, }, graduatedSkip: { get: function () { return this.Ad; }, set: function (a) { var b = this.Ad; b !== a && ((this.Ad = a), this.s(), this.g('graduatedSkip', b, a)); }, }, textValidation: { get: function () { return this.xi; }, set: function (a) { var b = this.xi; b !== a && ((this.xi = a), this.g('textValidation', b, a)); }, }, textEdited: { get: function () { return this.zp; }, set: function (a) { var b = this.zp; b !== a && ((this.zp = a), this.g('textEdited', b, a)); }, }, spacingAbove: { get: function () { return this.bf; }, set: function (a) { var b = this.bf; b !== a && ((this.bf = a), this.g('spacingAbove', b, a)); }, }, spacingBelow: { get: function () { return this.cf; }, set: function (a) { var b = this.cf; b !== a && ((this.cf = a), this.g('spacingBelow', b, a)); }, }, maxLines: { get: function () { return this.ne; }, set: function (a) { var b = this.ne; b !== a && ((a = Math.floor(a)), 0 >= a && ya(a, '> 0', vh, 'maxLines'), (this.ne = a), this.g('maxLines', b, a), this.s()); }, }, metrics: { get: function () { return this.nd; }, }, choices: { get: function () { return this.Wm; }, set: function (a) { var b = this.Wm; b !== a && ((this.Wm = a), this.g('choices', b, a)); }, }, }); var zn = null, An = null, Kn = new D(vh, 'None', 0), In = new D(vh, 'WrapFit', 1), xn = new D(vh, 'WrapDesiredSize', 2), Mn = new D(vh, 'WrapBreakAll', 3), wn = new D(vh, 'OverflowClip', 0), Fn = new D(vh, 'OverflowEllipsis', 1), Nn = null, On = null, Pn = 0, Qn = null, Rn = 0, Hn = '...', Cn = '', Bn = null, un = !1; vh.className = 'TextBlock'; vh.getEllipsis = function () { return Hn; }; vh.setEllipsis = function (a) { Hn = a; Qn = new tb(); Rn = 0; }; vh.getBaseline = function () { return zn; }; vh.setBaseline = function (a) { zn = a; a = Va(); for (var b = a.length, c = 0; c < b; c++) a[c].uf(); }; vh.getUnderline = function () { return An; }; vh.setUnderline = function (a) { An = a; a = Va(); for (var b = a.length, c = 0; c < b; c++) a[c].uf(); }; vh.isValidFont = function (a) { un || (vn(), (un = !0)); if (null === Bn) return !0; var b = Bn.font; if (a === b || '10px sans-serif' === a) return !0; Bn.font = '10px sans-serif'; Bn.font = a; var c = Bn.font; if ('10px sans-serif' !== c) return (Bn.font = b), !0; Bn.font = '19px serif'; var d = Bn.font; Bn.font = a; c = Bn.font; Bn.font = b; return c !== d; }; vh.None = Kn; vh.WrapFit = In; vh.WrapDesiredSize = xn; vh.WrapBreakAll = Mn; vh.OverflowClip = wn; vh.OverflowEllipsis = Fn; function Jm() { this.Ec = this.lg = 0; this.Wc = []; this.Ac = []; this.Jf = null; } Jm.prototype.reset = function () { this.Ec = this.lg = 0; this.Jf = null; this.Wc = []; this.Ac = []; }; Jm.prototype.Vl = function (a) { this.lg = a.lg; this.Jf = a.Jf; this.Ec = a.Ec; this.Wc = Ga(a.Wc); this.Ac = Ga(a.Ac); }; pa.Object.defineProperties(Jm.prototype, { arrSize: { get: function () { return this.Wc; }, }, arrText: { get: function () { return this.Ac; }, }, maxLineWidth: { get: function () { return this.Ec; }, }, fontHeight: { get: function () { return this.Jf; }, }, }); Jm.className = 'TextBlockMetrics'; function Yj() { Y.call(this); this.Lg = null; this.sp = ''; this.fh = Hc; this.al = be; this.ff = this.Cc = null; this.$k = dd; this.yd = Zg; this.Ll = null; this.au = !1; this.nr = !0; this.nl = !1; this.Dl = null; } oa(Yj, Y); Yj.prototype.cloneProtected = function (a) { Y.prototype.cloneProtected.call(this, a); a.element = this.Lg; a.sp = this.sp; a.fh = this.fh.I(); a.al = this.al; a.yd = this.yd; a.Cc = this.Cc; a.ff = this.ff; a.$k = this.$k.I(); a.nr = this.nr; a.Dl = this.Dl; }; t = Yj.prototype; t.fb = function (a) { a === Zg || a === ah || a === Nk ? (this.imageStretch = a) : Y.prototype.fb.call(this, a); }; t.toString = function () { return 'Picture(' + this.source + ')#' + Bb(this); }; function dk(a) { void 0 === a && (a = ''); '' !== a ? Sn[a] && (delete Sn[a], Tn--) : ((Sn = new tb()), (Tn = 0)); } function Un(a, b) { a.Dr = !0; a.Zk = !1; for (var c, d = Va(), e = d.length, f = 0; f < e; f++) { var g = d[f]; c = a.getAttribute('src'); var h = g.Dj.J(c); if (null !== h) for (var k = h.length, l = 0; l < k; l++) (c = h[l]), g.mu.add(c), g.cc(), void 0 === a.su && ((a.su = b), null !== c.ff && c.ff(c, b)); } } function Vn(a, b) { a.Zk = b; for (var c, d = Va(), e = d.length, f = 0; f < e; f++) { var g = d[f], h = a.getAttribute('src'); c = g.Dj.J(h); if (null !== c) { g = c.length; h = Ka(); for (var k = 0; k < g; k++) h.push(c[k]); for (k = 0; k < g; k++) (c = h[k]), null !== c.Cc && c.Cc(c, b); Oa(h); } } } t.Jz = function () { if ('' !== this.source) { dk(this.source); var a = this.source; this.source = ''; this.source = a; } }; t.uf = function () { this.R(); }; t.Ei = function (a, b) { var c = this.Lg; if (null !== c) { var d = c.getAttribute('src'); c instanceof HTMLImageElement && (null === d || '' === d) && A('Element has no source ("src") attribute: ' + c); if (!(c.Zk instanceof Event)) { d = this.naturalBounds; var e = 0, f = 0, g = this.au, h = g ? +c.width : c.naturalWidth; g = g ? +c.height : c.naturalHeight; void 0 === h && c.videoWidth && (h = c.videoWidth); void 0 === g && c.videoHeight && (g = c.videoHeight); h = h || d.width; g = g || d.height; if (0 !== h && 0 !== g) { var k = h, l = g; this.sourceRect.o() && ((e = this.fh.x), (f = this.fh.y), (h = this.fh.width), (g = this.fh.height)); var m = h, n = g, p = this.al, q = this.$k; switch (p) { case Zg: if (this.sourceRect.o()) break; m >= d.width && (e = e + q.offsetX + (m * q.x - d.width * q.x)); n >= d.height && (f = f + q.offsetY + (n * q.y - d.height * q.y)); h = Math.min(d.width, m); g = Math.min(d.height, n); break; case be: m = d.width; n = d.height; break; case ah: case Nk: p === ah ? ((p = Math.min(d.height / n, d.width / m)), (m *= p), (n *= p)) : p === Nk && ((p = Math.max(d.height / n, d.width / m)), (m *= p), (n *= p), m >= d.width && (e = (e + q.offsetX + (m * q.x - d.width * q.x) / m) * h), n >= d.height && (f = (f + q.offsetY + (n * q.y - d.height * q.y) / n) * g), (h *= 1 / (m / d.width)), (g *= 1 / (n / d.height)), (m = d.width), (n = d.height)); } p = this.De() * b.scale; var r = m * p * n * p, u = (h * g) / r, x = c.__goCache; p = null; var v = Wn; if (c.Dr && void 0 !== x && 4 < r && u > v * v) for ( null === x.Di && (Xn(x, 4, k, l, c), Xn(x, 16, k, l, c)), k = x.Di, l = k.length, r = 0; r < l; r++ ) if (k[r].ratio * k[r].ratio < u) p = k[r]; else break; if (!b.wn) { if (null === this.Ll) if (null === this.Lg) this.Ll = !1; else { k = new tk(null).context; k.drawImage(this.Lg, 0, 0); try { k.getImageData(0, 0, 1, 1).data[3] && (this.Ll = !1), (this.Ll = !1); } catch (z) { this.Ll = !0; } } if (this.Ll) return; } k = 0; m < d.width && (k = q.offsetX + (d.width * q.x - m * q.x)); l = 0; n < d.height && (l = q.offsetY + (d.height * q.y - n * q.y)); switch (this.flip) { case Pk: a.translate(Math.min(d.width, m), 0); a.scale(-1, 1); break; case Ok: a.translate(0, Math.min(d.height, n)); a.scale(1, -1); break; case Qk: a.translate(Math.min(d.width, m), Math.min(d.height, n)), a.scale(-1, -1); } if ( b.Ee('pictureRatioOptimization') && !b.nj && void 0 !== x && null !== p && 1 !== p.ratio ) { a.save(); b = p.ratio; try { a.drawImage( p.source, e / b, f / b, Math.min(p.source.width, h / b), Math.min(p.source.height, g / b), k, l, Math.min(d.width, m), Math.min(d.height, n), ); } catch (z) { this.nr = !1; } a.restore(); } else try { a.drawImage(c, e, f, h, g, k, l, Math.min(d.width, m), Math.min(d.height, n)); } catch (z) { this.nr = !1; } switch (this.flip) { case Pk: a.scale(-1, 1); a.translate(-Math.min(d.width, m), 0); break; case Ok: a.scale(1, -1); a.translate(0, -Math.min(d.height, n)); break; case Qk: a.scale(-1, -1), a.translate(-Math.min(d.width, m), -Math.min(d.height, n)); } } } } }; t.hm = function (a, b, c, d) { var e = this.desiredSize, f = $k(this, !0), g = this.Lg, h = this.au; if (h || (!this.nl && g && g.complete)) this.nl = !0; null === g && (isFinite(e.width) || (a = 0), isFinite(e.height) || (b = 0)); isFinite(e.width) || f === be || f === Lk ? (isFinite(a) || (a = this.sourceRect.o() ? this.sourceRect.width : h ? +g.width : g.naturalWidth), (c = 0)) : null !== g && !1 !== this.nl && (a = this.sourceRect.o() ? this.sourceRect.width : h ? +g.width : g.naturalWidth); isFinite(e.height) || f === be || f === Mk ? (isFinite(b) || (b = this.sourceRect.o() ? this.sourceRect.height : h ? +g.height : g.naturalHeight), (d = 0)) : null !== g && !1 !== this.nl && (b = this.sourceRect.o() ? this.sourceRect.height : h ? +g.height : g.naturalHeight); isFinite(e.width) && (a = e.width); isFinite(e.height) && (b = e.height); e = this.maxSize; f = this.minSize; c = Math.max(c, f.width); d = Math.max(d, f.height); a = Math.min(e.width, a); b = Math.min(e.height, b); a = Math.max(c, a); b = Math.max(d, b); null === g || g.complete || (isFinite(a) || (a = 0), isFinite(b) || (b = 0)); sc(this.qc, a, b); Xk(this, 0, 0, a, b); }; t.uh = function (a, b, c, d) { bl(this, a, b, c, d); }; pa.Object.defineProperties(Yj.prototype, { element: { get: function () { return this.Lg; }, set: function (a) { var b = this.Lg; if (b !== a) { null === a || a instanceof HTMLImageElement || a instanceof HTMLVideoElement || a instanceof HTMLCanvasElement || A('Picture.element must be an instance of Image, Canvas, or Video, not: ' + a); this.au = a instanceof HTMLCanvasElement; this.Lg = a; if (null !== a) if (a instanceof HTMLCanvasElement || !0 === a.complete) a.Zk instanceof Event && null !== this.Cc && this.Cc(this, a.Zk), !0 === a.Dr && null !== this.ff && this.ff(this, a.su), (a.Dr = !0), this.desiredSize.o() || (jj(this, !1), this.s()); else { var c = this; a.xw || (a.addEventListener('load', function (b) { Un(a, b); c.desiredSize.o() || (jj(c, !1), c.s()); }), a.addEventListener('error', function (b) { Vn(a, b); }), (a.xw = !0)); } this.g('element', b, a); this.R(); } }, }, source: { get: function () { return this.sp; }, set: function (a) { var b = this.sp; if (b !== a) { this.sp = a; var c = Sn, d = this.diagram, e = null; if (void 0 !== c[a]) e = c[a]; else { 30 < Tn && (dk(), (c = Sn)); e = va('img'); var f = this; e.addEventListener('load', function (a) { Un(e, a); f.desiredSize.o() || (jj(f, !1), f.s()); }); e.addEventListener('error', function (a) { Vn(e, a); }); e.xw = !0; var g = this.Dl; null !== g && (e.crossOrigin = g(this)); e.src = a; c[a] = e; Tn++; } null !== d && ck(d, this); this.element = e; null !== d && Uj(d, this); void 0 === e.__goCache && (e.__goCache = new Yn()); this.s(); this.R(); this.g('source', b, a); } }, }, sourceCrossOrigin: { get: function () { return this.Dl; }, set: function (a) { if (this.Dl !== a && ((this.Dl = a), null !== this.element)) { var b = this.element.getAttribute('src'); null === a && 'string' === typeof b ? (this.element.crossOrigin = null) : null !== a && (this.element.crossOrigin = a(this)); this.element.src = b; } }, }, sourceRect: { get: function () { return this.fh; }, set: function (a) { var b = this.fh; b.A(a) || ((this.fh = a = a.I()), this.R(), this.g('sourceRect', b, a)); }, }, imageStretch: { get: function () { return this.al; }, set: function (a) { var b = this.al; b !== a && ((this.al = a), this.R(), this.g('imageStretch', b, a)); }, }, flip: { get: function () { return this.yd; }, set: function (a) { var b = this.yd; b !== a && ((this.yd = a), this.R(), this.g('flip', b, a)); }, }, imageAlignment: { get: function () { return this.$k; }, set: function (a) { var b = this.$k; b.A(a) || ((this.$k = a = a.I()), this.s(), this.g('imageAlignment', b, a)); }, }, errorFunction: { get: function () { return this.Cc; }, set: function (a) { var b = this.Cc; b !== a && ((this.Cc = a), this.g('errorFunction', b, a)); }, }, successFunction: { get: function () { return this.ff; }, set: function (a) { var b = this.ff; b !== a && ((this.ff = a), this.g('successFunction', b, a)); }, }, naturalBounds: { get: function () { return this.qc; }, }, }); Yj.prototype.redraw = Yj.prototype.uf; Yj.prototype.reloadSource = Yj.prototype.Jz; var Sn = null, Tn = 0, Wn = 4; Yj.className = 'Picture'; Sn = new tb(); Yj.clearCache = dk; function Yn() { this.Di = null; } function Xn(a, b, c, d, e) { null === a.Di && (a.Di = []); var f = new tk(null), g = f.context, h = 1 / b; f.width = c / b; f.height = d / b; 0 !== f.width && 0 !== f.height && ((b = new Zn(f.Ga, b)), (c = 1), 0 < a.Di.length && ((c = a.Di[a.Di.length - 1]), (e = c.source), (c = c.ratio)), g.setTransform(h * c, 0, 0, h * c, 0, 0), g.drawImage(e, 0, 0), a.Di.push(b)); } Yn.className = 'PictureCacheArray'; function Zn(a, b) { this.source = a; this.ratio = b; } Zn.className = 'PictureCacheInstance'; function $n() { this.Ts = new $d(); this.ec = null; } t = $n.prototype; t.reset = function (a) { null !== a ? (a.ha(), (this.Ts = a), a.figures.clear()) : (this.Ts = new $d()); this.ec = null; }; function oe(a, b, c, d, e) { a.ec = new Ue(); a.ec.startX = b; a.ec.startY = c; a.ec.isFilled = d; a.Ts.figures.add(a.ec); void 0 !== e && (a.ec.isShadowed = e); } function ve(a) { var b = a.ec.segments.length; 0 < b && a.ec.segments.N(b - 1).close(); } t.tq = function (a) { this.ec.isShadowed = a; }; t.moveTo = function (a, b, c) { void 0 === c && (c = !1); var d = new Ve(ze); d.endX = a; d.endY = b; c && d.close(); this.ec.segments.add(d); }; t.lineTo = function (a, b, c) { void 0 === c && (c = !1); var d = new Ve(ie); d.endX = a; d.endY = b; c && d.close(); this.ec.segments.add(d); }; function pe(a, b, c, d, e, f, g) { var h; void 0 === h && (h = !1); var k = new Ve(Ae); k.point1X = b; k.point1Y = c; k.point2X = d; k.point2Y = e; k.endX = f; k.endY = g; h && k.close(); a.ec.segments.add(k); } function te(a, b, c, d, e) { var f; void 0 === f && (f = !1); var g = new Ve(Be); g.point1X = b; g.point1Y = c; g.endX = d; g.endY = e; f && g.close(); a.ec.segments.add(g); } t.arcTo = function (a, b, c, d, e, f, g) { void 0 === f && (f = 0); void 0 === g && (g = !1); var h = new Ve(Ce); h.startAngle = a; h.sweepAngle = b; h.centerX = c; h.centerY = d; h.radiusX = e; h.radiusY = 0 !== f ? f : e; g && h.close(); this.ec.segments.add(h); }; function ue(a, b, c, d, e, f, g, h) { var k; void 0 === k && (k = !1); b = new Ve(De, g, h, b, c, d, e, f); k && b.close(); a.ec.segments.add(b); } function ne(a) { var b = we; if (null !== b) return (we = null), b.reset(a), b; b = new $n(); b.reset(a); return b; } var we = null; $n.className = 'StreamGeometryContext'; function ao(a, b) { var c = a.toLowerCase(), d = H.Ke; d[a] = b; d[c] = a; } ao('Rectangle', function (a, b, c) { a = new $d(ke); a.startX = 0; a.startY = 0; a.endX = b; a.endY = c; return a; }); ao('Square', function (a, b, c) { a = new $d(ke); a.startX = 0; a.startY = 0; a.endX = b; a.endY = c; a.defaultStretch = ah; return a; }); ao('RoundedRectangle', function (a, b, c) { var d = a ? a.parameter1 : NaN; if (isNaN(d) || 0 >= d) d = 5; d = Math.min(d, b / 3); d = Math.min(d, c / 3); a = d * H.Ag; b = new $d().add( new Ue(d, 0, !0) .add(new Ve(ie, b - d, 0)) .add(new Ve(Ae, b, d, b - a, 0, b, a)) .add(new Ve(ie, b, c - d)) .add(new Ve(Ae, b - d, c, b, c - a, b - a, c)) .add(new Ve(ie, d, c)) .add(new Ve(Ae, 0, c - d, a, c, 0, c - a)) .add(new Ve(ie, 0, d)) .add(new Ve(Ae, d, 0, 0, a, a, 0).close()), ); 1 < a && ((b.spot1 = new O(0, 0, a, a)), (b.spot2 = new O(1, 1, -a, -a))); return b; }); ao('Border', 'RoundedRectangle'); ao('Ellipse', function (a, b, c) { a = new $d(le); a.startX = 0; a.startY = 0; a.endX = b; a.endY = c; a.spot1 = Ud; a.spot2 = Vd; return a; }); ao('Circle', function (a, b, c) { a = new $d(le); a.startX = 0; a.startY = 0; a.endX = b; a.endY = c; a.spot1 = Ud; a.spot2 = Vd; a.defaultStretch = ah; return a; }); ao('TriangleRight', function (a, b, c) { return new $d() .add(new Ue(0, 0).add(new Ve(ie, b, 0.5 * c)).add(new Ve(ie, 0, c).close())) .xm(0, 0.25, 0.5, 0.75); }); ao('TriangleDown', function (a, b, c) { return new $d() .add(new Ue(0, 0).add(new Ve(ie, b, 0)).add(new Ve(ie, 0.5 * b, c).close())) .xm(0.25, 0, 0.75, 0.5); }); ao('TriangleLeft', function (a, b, c) { return new $d() .add(new Ue(b, c).add(new Ve(ie, 0, 0.5 * c)).add(new Ve(ie, b, 0).close())) .xm(0.5, 0.25, 1, 0.75); }); ao('TriangleUp', function (a, b, c) { return new $d() .add(new Ue(b, c).add(new Ve(ie, 0, c)).add(new Ve(ie, 0.5 * b, 0).close())) .xm(0.25, 0.5, 0.75, 1); }); ao('Triangle', 'TriangleUp'); ao('Diamond', function (a, b, c) { return new $d() .add( new Ue(0.5 * b, 0) .add(new Ve(ie, 0, 0.5 * c)) .add(new Ve(ie, 0.5 * b, c)) .add(new Ve(ie, b, 0.5 * c).close()), ) .xm(0.25, 0.25, 0.75, 0.75); }); ao('LineH', function (a, b, c) { a = new $d(ce); a.startX = 0; a.startY = c / 2; a.endX = b; a.endY = c / 2; return a; }); ao('LineV', function (a, b, c) { a = new $d(ce); a.startX = b / 2; a.startY = 0; a.endX = b / 2; a.endY = c; return a; }); ao('None', 'Rectangle'); ao('BarH', 'Rectangle'); ao('BarV', 'Rectangle'); ao('MinusLine', 'LineH'); ao('PlusLine', function (a, b, c) { return new $d().add( new Ue(0, c / 2, !1) .add(new Ve(ie, b, c / 2)) .add(new Ve(ze, b / 2, 0)) .add(new Ve(ie, b / 2, c)), ); }); ao('XLine', function (a, b, c) { return new $d().add( new Ue(0, c, !1).add(new Ve(ie, b, 0)).add(new Ve(ze, 0, 0)).add(new Ve(ie, b, c)), ); }); H.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', }; function T(a) { X.call(this, a); this.D = 2408959; this.Tg = this.Af = ''; this.Yo = this.Vo = this.jp = this.$n = null; this.lp = ''; this.yf = this.Mn = this.kp = this.dh = null; this.Xo = ''; this.Wo = mc; this.Ob = this.Zo = ''; this.gi = this.Zm = this.Sh = null; this.me = new G(NaN, NaN).freeze(); this.ho = ''; this.Xe = null; this.io = Tc; this.$o = Ed; this.qo = bc; this.jo = cc; this.vn = null; this.ao = 127; this.ui = dc; this.Jj = 'gray'; this.Od = 4; this.Aw = -1; this.Kp = NaN; this.Sx = new N(); this.wj = null; this.Wg = NaN; } oa(T, X); T.prototype.cloneProtected = function (a) { X.prototype.cloneProtected.call(this, a); a.D = (this.D & -4097) | 49152; a.Af = this.Af; a.Tg = this.Tg; a.$n = this.$n; a.jp = this.jp; a.Vo = this.Vo; a.Yo = this.Yo; a.lp = this.lp; a.kp = this.kp; a.Mn = this.Mn; a.yf = null; a.Xo = this.Xo; a.Wo = this.Wo.I(); a.Zo = this.Zo; a.$o = this.$o.I(); a.Ob = this.Ob; a.Zm = this.Zm; a.me.assign(this.me); a.ho = this.ho; a.io = this.io.I(); a.qo = this.qo.I(); a.jo = this.jo.I(); a.vn = this.vn; a.ao = this.ao; a.ui = this.ui.I(); a.Jj = this.Jj; a.Od = this.Od; a.Kp = this.Kp; }; T.prototype.pf = function (a) { X.prototype.pf.call(this, a); a.zh(); a.dh = null; a.Xe = null; a.wj = null; }; T.prototype.toString = function () { var a = Pa(this.constructor) + '#' + Bb(this); null !== this.data && (a += '(' + Qa(this.data) + ')'); return a; }; T.prototype.pk = function (a, b, c, d, e, f, g) { var h = this.diagram; null !== h && (a === cf && 'elements' === b ? e instanceof X ? Bj(e, function (a) { Dj(h.partManager, a); Cj(h, a); }) : Uj(h, e) : a === df && 'elements' === b && (e instanceof X ? Bj(e, function (a) { Gj(h.partManager, a, h); }) : ck(h, e)), h.ab(a, b, c, d, e, f, g)); }; T.prototype.Ea = function (a) { X.prototype.Ea.call(this, a); if (null !== this.data) { a = this.Y.j; for (var b = a.length, c = 0; c < b; c++) { var d = a[c]; d instanceof X && Bj(d, function (a) { null !== a.data && a.Ea(); }); } } }; T.prototype.updateRelationshipsFromData = function () { null !== this.data && this.diagram.partManager.updateRelationshipsFromData(this); }; T.prototype.ak = function (a) { var b = this.yf; return null === b ? null : b.J(a); }; T.prototype.qh = function (a, b) { if (null !== b) { var c = null, d = this.yf; null !== d && (c = d.J(a)); if (c !== b) { if (null !== c) { var e = c.diagram; null !== e && e.remove(c); } null === d && (this.yf = d = new Lb()); b.Af !== a && (b.category = a); d.add(a, b); a = this.diagram; null !== a && (a.add(b), (a = b.adornedObject), null !== a && ((a = a.Ii()), null !== a && (b.data = a.data))); } } }; T.prototype.vf = function (a) { var b = this.yf; if (null !== b) { var c = b.J(a); if (null !== c) { var d = c.diagram; null !== d && d.remove(c); } b.remove(a); 0 === b.count && (this.yf = null); } }; T.prototype.Tj = function () { var a = this.yf; if (null !== a) { var b = Ka(); for (a = a.iterator; a.next(); ) b.push(a.key); a = b.length; for (var c = 0; c < a; c++) this.vf(b[c]); Oa(b); } }; T.prototype.updateAdornments = function () { var a = this.diagram; if (null !== a) { for (var b = this.adornments; b.next(); ) { var c = b.value; c.s(); c.placeholder && c.placeholder.s(); } a: { if ( this.isSelected && this.selectionAdorned && ((b = this.selectionObject), null !== b && this.actualBounds.o() && this.isVisible() && b.tf() && b.actualBounds.o()) ) { c = this.ak('Selection'); if (null === c) { c = this.selectionAdornmentTemplate; null === c && (c = this.Ah() ? a.linkSelectionAdornmentTemplate : this instanceof ig ? a.groupSelectionAdornmentTemplate : a.nodeSelectionAdornmentTemplate); if (!(c instanceof pf)) break a; Yg(c); c = c.copy(); null !== c && (this.Ah() && this.selectionObject === this.path && (c.type = X.Link), (c.adornedObject = b)); } if (null !== c) { if (null !== c.placeholder) { var d = b.De(), e = 0; b instanceof W && (e = b.strokeWidth); var f = M.alloc(); f.h((b.naturalBounds.width + e) * d, (b.naturalBounds.height + e) * d); M.free(f); } c.type === X.Link ? c.s() : ((b = G.alloc()), G.free(b)); this.qh('Selection', c); break a; } } this.vf('Selection'); } bo(this, a); for (b = this.adornments; b.next(); ) b.value.Ea(); } }; T.prototype.Jb = function () { var a = this.diagram; null !== a && (Pi(a), (0 !== (this.D & 16384)) !== !0 && (hi(this, !0), a.cc())); }; function gi(a) { (0 !== (a.D & 16384)) !== !1 && (a.updateAdornments(), hi(a, !1)); } function bo(a, b) { b.toolManager.mouseDownTools.each(function (b) { b.isEnabled && b.updateAdornments(a); }); b.toolManager.updateAdornments(a); } function co(a) { if (!1 === qj(a)) { eo(a, !0); a.fl(); var b = a.diagram; null !== b && (b.Dd.add(a), b.cc()); } } function fo(a) { a.D |= 2097152; if (!1 !== qj(a)) { var b = a.position, c = a.location; (c.o() && b.o()) || go(a, b, c); c = a.vb; var d = N.alloc().assign(c); c.ha(); c.x = b.x; c.y = b.y; c.freeze(); a.kt(d, c); N.free(d); eo(a, !1); } } T.prototype.move = function (a, b) { !0 === b ? (this.location = a) : (this.position = a); }; T.prototype.moveTo = function (a, b, c) { a = G.allocAt(a, b); this.move(a, c); G.free(a); }; T.prototype.isVisible = function () { if (!this.visible) return !1; var a = this.layer; if (null !== a && !a.visible) return !1; a = this.diagram; if (null !== a && Xh(a.animationManager, this)) return !0; a = this.containingGroup; return null === a || (a.isSubGraphExpanded && a.isVisible()) ? !0 : !1; }; t = T.prototype; t.Lb = function (a) { var b = this.diagram; a ? (this.B(4), this.Jb(), null !== b && b.Dd.add(this)) : (this.B(8), this.Tj()); this.zh(); null !== b && (b.Xa(), b.R()); }; t.$a = function (a) { if (this.name === a) return this; var b = this.wj; null === b && (this.wj = b = new Lb()); if (null !== b.J(a)) return b.J(a); var c = X.prototype.$a.call(this, a); if (null !== c) return b.set(a, c), c; b.set(a, null); return null; }; t.qf = function (a, b, c) { void 0 === c && (c = new G()); b = b.jc() ? dd : b; var d = a.naturalBounds; c.h(d.width * b.x + b.offsetX, d.height * b.y + b.offsetY); if (null === a || a === this) return c; a.transform.ta(c); for (a = a.panel; null !== a && a !== this; ) a.transform.ta(c), (a = a.panel); this.Qf.ta(c); c.offset(-this.pc.x, -this.pc.y); return c; }; t.Yp = function (a) { void 0 === a && (a = new N()); return a.assign(this.actualBounds); }; t.$b = function () { !0 === oj(this) && (this instanceof ig && this.memberParts.each(function (a) { a.$b(); }), this.measure(Infinity, Infinity)); this.arrange(); }; function zj(a, b) { var c = a.Sx; isNaN(a.Wg) && (a.Wg = Um(a)); var d = a.Wg; var e = 2 * d; if (!a.isShadowed) return c.h(b.x - 1 - d, b.y - 1 - d, b.width + 2 + e, b.height + 2 + e), c; d = b.x; e = b.y; var f = b.width; b = b.height; var g = a.shadowBlur; a = a.shadowOffset; f += g; b += g; d -= g / 2; e -= g / 2; 0 < a.x ? (f += a.x) : ((d += a.x), (f -= a.x)); 0 < a.y ? (b += a.y) : ((e += a.y), (b -= a.y)); c.h(d - 1, e - 1, f + 2, b + 2); return c; } T.prototype.arrange = function () { if (!1 === pj(this)) fo(this); else { var a = this.vb, b = N.alloc(); b.assign(a); a.ha(); var c = og(this); this.uh(0, 0, this.pc.width, this.pc.height); var d = this.position; go(this, d, this.location); a.x = d.x; a.y = d.y; a.freeze(); this.kt(b, a); al(this, !1); b.A(a) ? this.hd(c) : !this.bc() || (H.w(b.width, a.width) && H.w(b.height, a.height)) || (0 <= this.Aw && this.B(16)); N.free(b); eo(this, !1); } }; t = T.prototype; t.kt = function (a, b) { var c = this.diagram; if (null !== c) { var d = !1; if (!1 === c.Rg && a.o()) { var e = N.alloc(); e.assign(c.documentBounds); e.Pv(c.padding); a.x > e.x && a.y > e.y && a.right < e.right && a.bottom < e.bottom && b.x > e.x && b.y > e.y && b.right < e.right && b.bottom < e.bottom && (d = !0); N.free(e); } ((0 !== (this.D & 65536)) !== !0 && a.A(b)) || Ej(this, d, c); c.R(); xc(a, b) || (this instanceof V && !c.undoManager.isUndoingRedoing && this.ed(), this.zh()); } }; t.Lv = function (a, b) { if (this.Ah() || !a.o()) return !1; var c = this.diagram; if (null !== c && (ho(this, c, a, b), !0 === c.undoManager.isUndoingRedoing)) return !0; this.sa = a; this.D &= -2097153; c = this.me; c.o() && ((this.me = new G(c.x + (a.x - b.x), c.y + (a.y - b.y))), this.g('location', c, this.me)); !1 === qj(this) && !1 === pj(this) && (co(this), fo(this)); return !0; }; function ho(a, b, c, d) { null === b || a instanceof pf || ((b = b.animationManager), b.ni && b.sh(a, 'position', d.copy(), c.copy(), !1)); } t.vt = function (a, b) { var c = this.me, d = this.sa; qj(this) || pj(this) ? c.h(NaN, NaN) : c.h(c.x + a - d.x, c.y + b - d.y); d.h(a, b); co(this); }; t.Mv = function () { this.D &= -2097153; co(this); }; function go(a, b, c) { var d = G.alloc(), e = a.locationSpot, f = a.locationObject; e.jc() && A("determineOffset: Part's locationSpot must be real: " + e.toString()); var g = f.naturalBounds, h = f instanceof W ? f.strokeWidth : 0; d.rk(0, 0, g.width + h, g.height + h, e); if (f !== a) for (d.offset(-h / 2, -h / 2), f.transform.ta(d), e = f.panel; null !== e && e !== a; ) e.transform.ta(d), (e = e.panel); a.Qf.ta(d); d.offset(-a.pc.x, -a.pc.y); e = a.diagram; f = c.o(); g = b.o(); f && g ? 0 !== (a.D & 2097152) ? io(a, b, c, e, d) : jo(a, b, c, e, d) : f ? io(a, b, c, e, d) : g && jo(a, b, c, e, d); a.D |= 2097152; G.free(d); a.fl(); } function io(a, b, c, d, e) { var f = b.x, g = b.y; b.h(c.x - e.x, c.y - e.y); null !== d && ((c = d.animationManager), (e = c.isAnimating) || !c.ni || a instanceof pf || c.sh(a, 'position', new G(f, g), b, !1), e || (b.x === f && b.y === g) || ((c = d.skipsUndoManager), (d.skipsUndoManager = !0), a.g('position', new G(f, g), b), (d.skipsUndoManager = c))); } function jo(a, b, c, d, e) { var f = c.copy(); c.h(b.x + e.x, b.y + e.y); c.A(f) || null === d || ((b = d.skipsUndoManager), (d.skipsUndoManager = !0), a.g('location', f, c), (d.skipsUndoManager = b)); } function Ej(a, b, c) { cl(a, !1); a instanceof V && ok(c, a); a.layer.isTemporary || b || c.Xa(); b = a.vb; var d = c.viewportBounds; d.o() ? og(a) ? (Ac(b, d, 10) || a.hd(!1), a.updateAdornments()) : b.Ic(d) ? (a.hd(!0), a.updateAdornments()) : a.Jb() : (c.ci = !0); } t.Ri = function () { return !0; }; t.bc = function () { return !0; }; t.Ah = function () { return !1; }; t.vg = function () { return !0; }; function ko(a, b, c, d) { b.constructor === a.constructor || lo || ((lo = !0), za( 'Should not change the class of the Part when changing category from "' + c + '" to "' + d + '"', ), za( ' Old class: ' + Pa(a.constructor) + ', new class: ' + Pa(b.constructor) + ', part: ' + a.toString(), )); a.Tj(); var e = a.data; c = a.layerName; var f = a.isSelected, g = a.isHighlighted, h = !0, k = !0, l = !1; a instanceof V && ((h = a.isTreeLeaf), (k = a.isTreeExpanded), (l = a.wasTreeExpanded)); b.pf(a); b.cloneProtected(a); a.Af = d; a.s(); a.R(); b = a.diagram; d = !0; null !== b && ((d = b.skipsUndoManager), (b.skipsUndoManager = !0)); a.jb = e; a.D = f ? a.D | 4096 : a.D & -4097; a.D = g ? a.D | 524288 : a.D & -524289; a instanceof V && ((a.S = h ? a.S | 4 : a.S & -5), (a.S = k ? a.S | 1 : a.S & -2), (a.S = l ? a.S | 2 : a.S & -3)); null !== e && a.Ea(); e = a.layerName; e !== c && ((a.Tg = c), (a.layerName = e)); null !== b && (b.skipsUndoManager = d); a.bc() && a.B(64); } T.prototype.canCopy = function () { if (!this.copyable) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowCopy) return !1; a = a.diagram; return null === a ? !0 : a.allowCopy ? !0 : !1; }; T.prototype.canDelete = function () { if (!this.deletable) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowDelete) return !1; a = a.diagram; return null === a ? !0 : a.allowDelete ? !0 : !1; }; T.prototype.canEdit = function () { if (!this.textEditable) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowTextEdit) return !1; a = a.diagram; return null === a ? !0 : a.allowTextEdit ? !0 : !1; }; T.prototype.canGroup = function () { if (!this.groupable) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowGroup) return !1; a = a.diagram; return null === a ? !0 : a.allowGroup ? !0 : !1; }; T.prototype.canMove = function () { if (!this.movable) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowMove) return !1; a = a.diagram; return null === a ? !0 : a.allowMove ? !0 : !1; }; T.prototype.canReshape = function () { if (!this.reshapable) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowReshape) return !1; a = a.diagram; return null === a ? !0 : a.allowReshape ? !0 : !1; }; T.prototype.canResize = function () { if (!this.resizable) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowResize) return !1; a = a.diagram; return null === a ? !0 : a.allowResize ? !0 : !1; }; T.prototype.canRotate = function () { if (!this.rotatable) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowRotate) return !1; a = a.diagram; return null === a ? !0 : a.allowRotate ? !0 : !1; }; T.prototype.canSelect = function () { if (!this.selectable) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowSelect) return !1; a = a.diagram; return null === a ? !0 : a.allowSelect ? !0 : !1; }; function hi(a, b) { a.D = b ? a.D | 16384 : a.D & -16385; } function qj(a) { return 0 !== (a.D & 32768); } function eo(a, b) { a.D = b ? a.D | 32768 : a.D & -32769; } function cl(a, b) { a.D = b ? a.D | 65536 : a.D & -65537; } function og(a) { return 0 !== (a.D & 131072); } t = T.prototype; t.hd = function (a) { this.D = a ? this.D | 131072 : this.D & -131073; }; function mo(a, b) { a.D = b ? a.D | 1048576 : a.D & -1048577; } t.zh = function () { var a = this.containingGroup; null !== a && (a.s(), null !== a.placeholder && a.placeholder.s(), a.ed()); }; t.R = function () { var a = this.diagram; null !== a && !pj(this) && !qj(this) && this.isVisible() && this.vb.o() && a.R(zj(this, this.vb)); }; t.s = function () { X.prototype.s.call(this); var a = this.diagram; null !== a && (a.Dd.add(this), this instanceof V && null !== this.labeledLink && rl(this.labeledLink), a.cc(!0)); }; t.aq = function (a) { a || ((a = this.Sh), null !== a && no(a, this)); }; t.bq = function (a) { a || ((a = this.Sh), null !== a && oo(a, this)); }; t.Zj = function () { var a = this.data; if (null !== a) { var b = this.diagram; null !== b && ((b = b.model), null !== b && b.om(a)); } }; t.Py = function () { return po(this, this); }; function po(a, b) { var c = b.containingGroup; return null !== c ? 1 + po(a, c) : b instanceof V && ((b = b.labeledLink), null !== b) ? po(a, b) : 0; } t.Sy = function () { return qo(this, this); }; function qo(a, b) { var c = b.containingGroup; return null !== c || (b instanceof V && ((c = b.labeledLink), null !== c)) ? qo(a, c) : b; } t.Vd = function (a) { return a instanceof ig ? ro(this, this, a) : !1; }; function ro(a, b, c) { if (b === c || null === c) return !1; var d = b.containingGroup; return null === d || (d !== c && !ro(a, d, c)) ? b instanceof V && ((b = b.labeledLink), null !== b) ? ro(a, b, c) : !1 : !0; } t.ex = function (a) { if (null === a) return null; if (this === a) return this.containingGroup; for (var b = this; null !== b; ) { b instanceof ig && mo(b, !0); if (b instanceof V) { var c = b.labeledLink; null !== c && (b = c); } b = b.containingGroup; } c = null; for (b = a; null !== b; ) { if (0 !== (b.D & 1048576)) { c = b; break; } b instanceof V && ((a = b.labeledLink), null !== a && (b = a)); b = b.containingGroup; } for (b = this; null !== b; ) b instanceof ig && mo(b, !1), b instanceof V && ((a = b.labeledLink), null !== a && (b = a)), (b = b.containingGroup); return c; }; T.prototype.canLayout = function () { if (!this.isLayoutPositioned || !this.isVisible()) return !1; var a = this.layer; return (null !== a && a.isTemporary) || (this instanceof V && this.isLinkLabel) ? !1 : !0; }; T.prototype.B = function (a) { void 0 === a && (a = 16777215); if (this.isLayoutPositioned && 0 !== (a & this.layoutConditions)) { var b = this.layer; (null !== b && b.isTemporary) || (this instanceof V && this.isLinkLabel) ? (b = !1) : ((b = this.diagram), (b = null !== b && b.undoManager.isUndoingRedoing ? !1 : !0)); } else b = !1; if (b) if (((b = this.Sh), null !== b)) { var c = b.layout; null !== c ? c.B() : b.B(a); } else (a = this.diagram), null !== a && ((a = a.layout), null !== a && a.B()); }; function Fj(a) { if (!a.isVisible()) return !1; a = a.layer; return null !== a && a.isTemporary ? !1 : !0; } function Hk(a, b, c, d, e, f) { void 0 === f && (f = null); if (!(a.contains(b) || (null !== f && !f(b)) || b instanceof pf)) if ((a.add(b), b instanceof V)) { if (c && b instanceof ig) for (var g = b.memberParts; g.next(); ) Hk(a, g.value, c, d, e, f); if (!1 !== e) for (g = b.linksConnected; g.next(); ) { var h = g.value; if (!a.contains(h)) { var k = h.fromNode, l = h.toNode; k = null === k || a.contains(k); l = null === l || a.contains(l); (e ? k && l : k || l) && Hk(a, h, c, d, e, f); } } if (1 < d) for (b = b.av(); b.next(); ) Hk(a, b.value, c, d - 1, e, f); } else if (b instanceof S) for (b = b.labelNodes; b.next(); ) Hk(a, b.value, c, d, e, f); } pa.Object.defineProperties(T.prototype, { key: { get: function () { var a = this.diagram; if (null !== a) return a.model.pa(this.data); }, }, adornments: { get: function () { return null === this.yf ? xb : this.yf.iteratorValues; }, }, layer: { get: function () { return this.gi; }, }, diagram: { get: function () { var a = this.gi; return null !== a ? a.diagram : null; }, }, layerName: { get: function () { return this.Tg; }, set: function (a) { var b = this.Tg; if (b !== a) { var c = this.diagram; if (null === c || (null !== c.Zl(a) && !c.partManager.addsToTemporaryLayer)) if ( ((this.Tg = a), null !== c && c.Xa(), this.g('layerName', b, a), (b = this.layer), null !== b && b.name !== a && ((c = b.diagram), null !== c && ((a = c.Zl(a)), null !== a && a !== b))) ) { var d = b.xc(-1, this, !0); 0 <= d && c.ab(df, 'parts', b, this, null, d, !0); d = a.Pi(99999999, this, !0); b.visible !== a.visible && this.Lb(a.visible); 0 <= d && c.ab(cf, 'parts', a, null, this, !0, d); d = this.layerChanged; if (null !== d) { var e = c.ea; c.ea = !0; d(this, b, a); c.ea = e; } } } }, }, layerChanged: { get: function () { return this.$n; }, set: function (a) { var b = this.$n; b !== a && ((this.$n = a), this.g('layerChanged', b, a)); }, }, zOrder: { get: function () { return this.Kp; }, set: function (a) { var b = this.Kp; if (b !== a) { this.Kp = a; var c = this.layer; null !== c && ki(c, -1, this); this.g('zOrder', b, a); a = this.diagram; null !== a && a.R(); } }, }, locationObject: { get: function () { if (null === this.Xe) { var a = this.locationObjectName; '' !== a ? ((a = this.$a(a)), null !== a ? (this.Xe = a) : (this.Xe = this)) : this instanceof pf ? this.type !== X.Link && null !== this.placeholder ? (this.Xe = this.placeholder) : (this.Xe = this) : (this.Xe = this); } return this.Xe.visible ? this.Xe : this; }, }, minLocation: { get: function () { return this.qo; }, set: function (a) { var b = this.qo; b.A(a) || ((this.qo = a = a.I()), this.g('minLocation', b, a)); }, }, maxLocation: { get: function () { return this.jo; }, set: function (a) { var b = this.jo; b.A(a) || ((this.jo = a = a.I()), this.g('maxLocation', b, a)); }, }, locationObjectName: { get: function () { return this.ho; }, set: function (a) { var b = this.ho; b !== a && ((this.ho = a), (this.Xe = null), this.s(), this.g('locationObjectName', b, a)); }, }, locationSpot: { get: function () { return this.io; }, set: function (a) { var b = this.io; b.A(a) || ((this.io = a = a.I()), this.s(), this.g('locationSpot', b, a)); }, }, location: { get: function () { return this.me; }, set: function (a) { var b = a.x, c = a.y, d = this.me, e = d.x, f = d.y; ((e === b || (isNaN(e) && isNaN(b))) && (f === c || (isNaN(f) && isNaN(c)))) || ((a = a.I()), (b = a), this.Ah() ? (b = !1) : ((this.me = b), (this.D |= 2097152), !1 === pj(this) && (co(this), (c = this.sa), c.o() && ((e = c.copy()), c.h(c.x + (b.x - d.x), c.y + (b.y - d.y)), ho(this, this.diagram, c, e), this.g('position', e, c))), (b = !0)), b && this.g('location', d, a)); }, }, category: { get: function () { return this.Af; }, set: function (a) { var b = this.Af; if (b !== a) { var c = this.diagram, d = this.data, e = null; if (null !== c && null !== d && !(this instanceof pf)) { var f = c.model.undoManager; f.isEnabled && !f.isUndoingRedoing && ((e = this.clone()), e.Y.addAll(this.Y)); } this.Af = a; this.g('category', b, a); null === c || null === d || this instanceof pf ? this instanceof pf && ((e = this.adornedPart), null !== e && ((a = e.yf), null !== a && a.remove(b), e.qh(this.category, this))) : ((f = c.model), f.undoManager.isUndoingRedoing || (this.Ah() ? (c.partManager.setLinkCategoryForData(d, a), (c = c.partManager.findLinkTemplateForCategory(a)), null !== c && (Yg(c), (c = c.copy()), null !== c && ko(this, c, b, a))) : (null !== f && f.sq(d, a), (c = so(c.partManager, d, a)), null !== c && (Yg(c), (c = c.copy()), null === c || c instanceof S || ((d = this.location.copy()), ko(this, c, b, a), this.location.o() || (this.location = d)))), null !== e && ((b = this.clone()), b.Y.addAll(this.Y), this.g('self', e, b)))); } }, }, self: { get: function () { return this; }, set: function (a) { ko(this, a, this.category, a.category); }, }, copyable: { get: function () { return 0 !== (this.D & 1); }, set: function (a) { var b = 0 !== (this.D & 1); b !== a && ((this.D ^= 1), this.g('copyable', b, a)); }, }, deletable: { get: function () { return 0 !== (this.D & 2); }, set: function (a) { var b = 0 !== (this.D & 2); b !== a && ((this.D ^= 2), this.g('deletable', b, a)); }, }, textEditable: { get: function () { return 0 !== (this.D & 4); }, set: function (a) { var b = 0 !== (this.D & 4); b !== a && ((this.D ^= 4), this.g('textEditable', b, a), this.Jb()); }, }, groupable: { get: function () { return 0 !== (this.D & 8); }, set: function (a) { var b = 0 !== (this.D & 8); b !== a && ((this.D ^= 8), this.g('groupable', b, a)); }, }, movable: { get: function () { return 0 !== (this.D & 16); }, set: function (a) { var b = 0 !== (this.D & 16); b !== a && ((this.D ^= 16), this.g('movable', b, a)); }, }, selectionAdorned: { get: function () { return 0 !== (this.D & 32); }, set: function (a) { var b = 0 !== (this.D & 32); b !== a && ((this.D ^= 32), this.g('selectionAdorned', b, a), this.Jb()); }, }, isInDocumentBounds: { get: function () { return 0 !== (this.D & 64); }, set: function (a) { var b = 0 !== (this.D & 64); if (b !== a) { this.D ^= 64; var c = this.diagram; null !== c && c.Xa(); this.g('isInDocumentBounds', b, a); } }, }, isLayoutPositioned: { get: function () { return 0 !== (this.D & 128); }, set: function (a) { var b = 0 !== (this.D & 128); b !== a && ((this.D ^= 128), this.g('isLayoutPositioned', b, a), this.B(a ? 4 : 8)); }, }, selectable: { get: function () { return 0 !== (this.D & 256); }, set: function (a) { var b = 0 !== (this.D & 256); b !== a && ((this.D ^= 256), this.g('selectable', b, a), this.Jb()); }, }, reshapable: { get: function () { return 0 !== (this.D & 512); }, set: function (a) { var b = 0 !== (this.D & 512); b !== a && ((this.D ^= 512), this.g('reshapable', b, a), this.Jb()); }, }, resizable: { get: function () { return 0 !== (this.D & 1024); }, set: function (a) { var b = 0 !== (this.D & 1024); b !== a && ((this.D ^= 1024), this.g('resizable', b, a), this.Jb()); }, }, rotatable: { get: function () { return 0 !== (this.D & 2048); }, set: function (a) { var b = 0 !== (this.D & 2048); b !== a && ((this.D ^= 2048), this.g('rotatable', b, a), this.Jb()); }, }, isSelected: { get: function () { return 0 !== (this.D & 4096); }, set: function (a) { var b = 0 !== (this.D & 4096); if (b !== a) { var c = this.diagram; if ( !a || (this.canSelect() && !(null !== c && c.selection.count >= c.maxSelectionCount)) ) { this.D ^= 4096; var d = !1; if (null !== c) { d = c.skipsUndoManager; c.skipsUndoManager = !0; var e = c.selection; e.ha(); a ? e.add(this) : e.remove(this); e.freeze(); } this.g('isSelected', b, a); this.Jb(); a = this.selectionChanged; null !== a && a(this); null !== c && (c.cc(), (c.skipsUndoManager = d)); } } }, }, isHighlighted: { get: function () { return 0 !== (this.D & 524288); }, set: function (a) { var b = 0 !== (this.D & 524288); if (b !== a) { this.D ^= 524288; var c = this.diagram; null !== c && ((c = c.highlighteds), c.ha(), a ? c.add(this) : c.remove(this), c.freeze()); this.g('isHighlighted', b, a); this.R(); a = this.highlightedChanged; null !== a && a(this); } }, }, isShadowed: { get: function () { return 0 !== (this.D & 8192); }, set: function (a) { var b = 0 !== (this.D & 8192); b !== a && ((this.D ^= 8192), this.g('isShadowed', b, a), this.R()); }, }, isAnimated: { get: function () { return 0 !== (this.D & 262144); }, set: function (a) { var b = 0 !== (this.D & 262144); b !== a && ((this.D ^= 262144), this.g('isAnimated', b, a)); }, }, highlightedChanged: { get: function () { return this.Mn; }, set: function (a) { var b = this.Mn; b !== a && ((this.Mn = a), this.g('highlightedChanged', b, a)); }, }, selectionObjectName: { get: function () { return this.lp; }, set: function (a) { var b = this.lp; b !== a && ((this.lp = a), (this.dh = null), this.g('selectionObjectName', b, a)); }, }, selectionAdornmentTemplate: { get: function () { return this.jp; }, set: function (a) { var b = this.jp; b !== a && ((this.jp = a), this.g('selectionAdornmentTemplate', b, a)); }, }, selectionObject: { get: function () { if (null === this.dh) { var a = this.selectionObjectName; null !== a && '' !== a ? ((a = this.$a(a)), null !== a ? (this.dh = a) : (this.dh = this)) : this instanceof S ? ((a = this.path), null !== a ? (this.dh = a) : (this.dh = this)) : (this.dh = this); } return this.dh; }, }, selectionChanged: { get: function () { return this.kp; }, set: function (a) { var b = this.kp; b !== a && ((this.kp = a), this.g('selectionChanged', b, a)); }, }, resizeAdornmentTemplate: { get: function () { return this.Vo; }, set: function (a) { var b = this.Vo; b !== a && ((this.Vo = a), this.g('resizeAdornmentTemplate', b, a)); }, }, resizeObjectName: { get: function () { return this.Xo; }, set: function (a) { var b = this.Xo; b !== a && ((this.Xo = a), this.g('resizeObjectName', b, a)); }, }, resizeObject: { get: function () { var a = this.resizeObjectName; return '' !== a && ((a = this.$a(a)), null !== a) ? a : this; }, }, resizeCellSize: { get: function () { return this.Wo; }, set: function (a) { var b = this.Wo; b.A(a) || ((this.Wo = a = a.I()), this.g('resizeCellSize', b, a)); }, }, rotateAdornmentTemplate: { get: function () { return this.Yo; }, set: function (a) { var b = this.Yo; b !== a && ((this.Yo = a), this.g('rotateAdornmentTemplate', b, a)); }, }, rotateObjectName: { get: function () { return this.Zo; }, set: function (a) { var b = this.Zo; b !== a && ((this.Zo = a), this.g('rotateObjectName', b, a)); }, }, rotateObject: { get: function () { var a = this.rotateObjectName; return '' !== a && ((a = this.$a(a)), null !== a) ? a : this; }, }, rotationSpot: { get: function () { return this.$o; }, set: function (a) { var b = this.$o; b.A(a) || ((this.$o = a = a.I()), this.g('rotationSpot', b, a)); }, }, text: { get: function () { return this.Ob; }, set: function (a) { var b = this.Ob; b !== a && ((this.Ob = a), this.g('text', b, a)); }, }, containingGroup: { get: function () { return this.Sh; }, set: function (a) { if (this.bc()) { var b = this.Sh; if (b !== a) { null === a || (this !== a && !a.Vd(this)) || (this === a && A('Cannot make a Group a member of itself: ' + this.toString()), A( 'Cannot make a Group indirectly contain itself: ' + this.toString() + ' already contains ' + a.toString(), )); this.B(2); var c = this.diagram; null !== b ? oo(b, this) : this instanceof ig && null !== c && c.zi.remove(this); this.Sh = a; null !== a ? no(a, this) : this instanceof ig && null !== c && c.zi.add(this); this.B(1); if (null !== c) { var d = this.data, e = c.model; if (null !== d && e.ek()) { var f = e.pa(null !== a ? a.data : null); e.tt(d, f); } } d = this.containingGroupChanged; null !== d && ((e = !0), null !== c && ((e = c.ea), (c.ea = !0)), d(this, b, a), null !== c && (c.ea = e)); if (this instanceof ig) for (c = new F(), Hk(c, this, !0, 0, !0), c = c.iterator; c.next(); ) if (((d = c.value), d instanceof V)) for (d = d.linksConnected; d.next(); ) to(d.value); if (this instanceof V) { for (c = this.linksConnected; c.next(); ) to(c.value); c = this.labeledLink; null !== c && to(c); } this.g('containingGroup', b, a); null !== a && ((b = a.layer), null !== b && ki(b, -1, a)); } } else A('cannot set the Part.containingGroup of a Link or Adornment'); }, }, containingGroupChanged: { get: function () { return this.Zm; }, set: function (a) { var b = this.Zm; b !== a && ((this.Zm = a), this.g('containingGroupChanged', b, a)); }, }, isTopLevel: { get: function () { return null !== this.containingGroup || (this instanceof V && null !== this.labeledLink) ? !1 : !0; }, }, layoutConditions: { get: function () { return this.ao; }, set: function (a) { var b = this.ao; b !== a && ((this.ao = a), this.g('layoutConditions', b, a)); }, }, dragComputation: { get: function () { return this.vn; }, set: function (a) { var b = this.vn; b !== a && ((this.vn = a), this.g('dragComputation', b, a)); }, }, shadowOffset: { get: function () { return this.ui; }, set: function (a) { var b = this.ui; b.A(a) || ((this.ui = a = a.I()), this.R(), this.g('shadowOffset', b, a)); }, }, shadowColor: { get: function () { return this.Jj; }, set: function (a) { var b = this.Jj; b !== a && ((this.Jj = a), this.R(), this.g('shadowColor', b, a)); }, }, shadowBlur: { get: function () { return this.Od; }, set: function (a) { var b = this.Od; b !== a && ((this.Od = a), this.R(), this.g('shadowBlur', b, a)); }, }, }); T.prototype.invalidateLayout = T.prototype.B; T.prototype.findCommonContainingGroup = T.prototype.ex; T.prototype.isMemberOf = T.prototype.Vd; T.prototype.findTopLevelPart = T.prototype.Sy; T.prototype.findSubGraphLevel = T.prototype.Py; T.prototype.ensureBounds = T.prototype.$b; T.prototype.getDocumentBounds = T.prototype.Yp; T.prototype.getRelativePoint = T.prototype.qf; T.prototype.findObject = T.prototype.$a; T.prototype.moveTo = T.prototype.moveTo; T.prototype.invalidateAdornments = T.prototype.Jb; T.prototype.clearAdornments = T.prototype.Tj; T.prototype.removeAdornment = T.prototype.vf; T.prototype.addAdornment = T.prototype.qh; T.prototype.findAdornment = T.prototype.ak; T.prototype.updateTargetBindings = T.prototype.Ea; var lo = !1; T.className = 'Part'; T.LayoutNone = 0; T.LayoutAdded = 1; T.LayoutRemoved = 2; T.LayoutShown = 4; T.LayoutHidden = 8; T.LayoutNodeSized = 16; T.LayoutGroupLayout = 32; T.LayoutNodeReplaced = 64; T.LayoutStandard = 127; T.LayoutAll = 16777215; function pf(a) { T.call(this, a); this.D &= -257; this.Tg = 'Adornment'; this.$d = null; this.Dw = 0; this.Ow = !1; this.l = []; this.Va = null; } oa(pf, T); pf.prototype.toString = function () { var a = this.adornedPart; return 'Adornment(' + this.category + ')' + (null !== a ? a.toString() : ''); }; pf.prototype.updateRelationshipsFromData = function () {}; pf.prototype.hk = function (a) { var b = this.adornedObject.part; if (b instanceof S && this.adornedObject instanceof W) { var c = b.path; b.hk(a); a = c.geometry; b = this.Y.j; c = b.length; for (var d = 0; d < c; d++) { var e = b[d]; e.isPanelMain && e instanceof W && (e.qa = a); } } }; pf.prototype.Ri = function () { var a = this.$d; if (null === a) return !0; a = a.part; return null === a || !pj(a); }; pf.prototype.bc = function () { return !1; }; pf.prototype.pk = function (a, b, c, d, e, f, g) { if (a === cf && 'elements' === b) if (e instanceof Xg) null === this.Va && (this.Va = e); else { if (e instanceof X) { var h = e.Yl(function (a) { return a instanceof Xg; }); h instanceof Xg && null === this.Va && (this.Va = h); } } else a === df && 'elements' === b && null !== this.Va && (d === this.Va ? (this.Va = null) : d instanceof X && this.Va.tg(d) && (this.Va = null)); T.prototype.pk.call(this, a, b, c, d, e, f, g); }; pf.prototype.updateAdornments = function () {}; pf.prototype.Zj = function () {}; pa.Object.defineProperties(pf.prototype, { placeholder: { get: function () { return this.Va; }, }, adornedObject: { get: function () { return this.$d; }, set: function (a) { var b = this.adornedPart, c = null; null !== a && (c = a.part); null === b || (null !== a && b === c) || b.vf(this.category); this.$d = a; null !== c && c.qh(this.category, this); }, }, adornedPart: { get: function () { var a = this.$d; return null !== a ? a.part : null; }, }, containingGroup: { get: function () { return null; }, }, }); pf.className = 'Adornment'; function V(a) { T.call(this, a); this.S = 13; this.Ya = new E(); this.Ep = this.hl = this.ji = this.co = this.bo = null; this.Dk = Pc; this.rc = this.Me = null; this.So = uo; this.oh = !1; } oa(V, T); V.prototype.cloneProtected = function (a) { T.prototype.cloneProtected.call(this, a); a.S = this.S; a.S = this.S & -17; a.bo = this.bo; a.co = this.co; a.ji = this.ji; a.Ep = this.Ep; a.Dk = this.Dk.I(); a.So = this.So; }; t = V.prototype; t.pf = function (a) { T.prototype.pf.call(this, a); a.ed(); a.Me = this.Me; a.rc = null; }; function vo(a, b) { null !== b && (null === a.Me && (a.Me = new F()), a.Me.add(b)); } function wo(a, b, c, d) { if (null === b || null === a.Me) return null; for (var e = a.Me.iterator; e.next(); ) { var f = e.value; if ( (f.it === a && f.pv === b && f.vx === c && f.wx === d) || (f.it === b && f.pv === a && f.vx === d && f.wx === c) ) return f; } return null; } t.oz = function (a, b, c) { if (void 0 === b || null === b) b = ''; if (void 0 === c || null === c) c = ''; a = wo(this, a, b, c); null !== a && a.cm(); }; t.pk = function (a, b, c, d, e, f, g) { a === cf && 'elements' === b ? (this.rc = null) : a === df && 'elements' === b && (this.rc = null); T.prototype.pk.call(this, a, b, c, d, e, f, g); }; t.ed = function (a) { void 0 === a && (a = null); for (var b = this.linksConnected; b.next(); ) { var c = b.value; (null !== a && a.contains(c)) || (xo(this, c.fromPort), xo(this, c.toPort), c.Ra()); } }; function dl(a, b) { for (var c = a.linksConnected; c.next(); ) { var d = c.value; if (d.fromPort === b || d.toPort === b) xo(a, d.fromPort), xo(a, d.toPort), d.Ra(); } } function xo(a, b) { null !== b && ((b = b.Ro), null !== b && b.cm(), (a = a.containingGroup), null === a || a.isSubGraphExpanded || xo(a, a.port)); } t.Ri = function () { return !0; }; V.prototype.getAvoidableRect = function (a) { a.set(this.actualBounds); a.Np(this.Dk); return a; }; V.prototype.findVisibleNode = function () { for (var a = this; null !== a && !a.isVisible(); ) a = a.containingGroup; return a; }; V.prototype.isVisible = function () { if (!T.prototype.isVisible.call(this)) return !1; var a = !0, b = ri, c = this.diagram; if (null !== c) { if (Xh(c.animationManager, this)) return !0; a = c.isTreePathToChildren; b = c.treeCollapsePolicy; } if (b === ri) { if (((a = this.rg()), null !== a && !a.isTreeExpanded)) return !1; } else if (b === vk) { if ( ((a = a ? this.Zu() : this.$u()), 0 < a.count && a.all(function (a) { return !a.isTreeExpanded; })) ) return !1; } else if ( b === wk && ((a = a ? this.Zu() : this.$u()), 0 < a.count && a.any(function (a) { return !a.isTreeExpanded; })) ) return !1; a = this.labeledLink; return null !== a ? a.isVisible() : !0; }; t = V.prototype; t.Lb = function (a) { T.prototype.Lb.call(this, a); for (var b = this.linksConnected; b.next(); ) b.value.Lb(a); }; t.Xu = function (a) { void 0 === a && (a = null); if (null === a) return this.Ya.iterator; var b = new zb(this.Ya), c = this; b.predicate = function (b) { return (b.fromNode === c && b.fromPortId === a) || (b.toNode === c && b.toPortId === a); }; return b; }; t.Vp = function (a) { void 0 === a && (a = null); var b = new zb(this.Ya), c = this; b.predicate = function (b) { return b.fromNode !== c ? !1 : null === a ? !0 : b.fromPortId === a; }; return b; }; t.sd = function (a) { void 0 === a && (a = null); var b = new zb(this.Ya), c = this; b.predicate = function (b) { return b.toNode !== c ? !1 : null === a ? !0 : b.toPortId === a; }; return b; }; t.Yu = function (a) { void 0 === a && (a = null); for (var b = null, c = null, d = this.Ya.iterator; d.next(); ) { var e = d.value; if (e.fromNode === this) { if (null === a || e.fromPortId === a) (e = e.toNode), null !== b ? b.add(e) : null !== c && c !== e ? ((b = new F()), b.add(c), b.add(e)) : (c = e); } else e.toNode !== this || (null !== a && e.toPortId !== a) || ((e = e.fromNode), null !== b ? b.add(e) : null !== c && c !== e ? ((b = new F()), b.add(c), b.add(e)) : (c = e)); } return null !== b ? b.iterator : null !== c ? new yb(c) : xb; }; t.$u = function (a) { void 0 === a && (a = null); for (var b = null, c = null, d = this.Ya.iterator; d.next(); ) { var e = d.value; e.fromNode !== this || (null !== a && e.fromPortId !== a) || ((e = e.toNode), null !== b ? b.add(e) : null !== c && c !== e ? ((b = new F()), b.add(c), b.add(e)) : (c = e)); } return null !== b ? b.iterator : null !== c ? new yb(c) : xb; }; t.Zu = function (a) { void 0 === a && (a = null); for (var b = null, c = null, d = this.Ya.iterator; d.next(); ) { var e = d.value; e.toNode !== this || (null !== a && e.toPortId !== a) || ((e = e.fromNode), null !== b ? b.add(e) : null !== c && c !== e ? ((b = new F()), b.add(c), b.add(e)) : (c = e)); } return null !== b ? b.iterator : null !== c ? new yb(c) : xb; }; t.Ky = function (a, b, c) { void 0 === b && (b = null); void 0 === c && (c = null); var d = new zb(this.Ya), e = this; d.predicate = function (d) { return (d.fromNode !== e || d.toNode !== a || (null !== b && d.fromPortId !== b) || (null !== c && d.toPortId !== c)) && (d.fromNode !== a || d.toNode !== e || (null !== c && d.fromPortId !== c) || (null !== b && d.toPortId !== b)) ? !1 : !0; }; return d; }; t.Ly = function (a, b, c) { void 0 === b && (b = null); void 0 === c && (c = null); var d = new zb(this.Ya), e = this; d.predicate = function (d) { return d.fromNode !== e || d.toNode !== a || (null !== b && d.fromPortId !== b) || (null !== c && d.toPortId !== c) ? !1 : !0; }; return d; }; function yo(a, b, c) { xo(a, c); var d = a.Ya.contains(b); d || a.Ya.add(b); if (!d || b.fromNode === b.toNode) { var e = a.linkConnected; if (null !== e) { var f = !0, g = a.diagram; null !== g && ((f = g.ea), (g.ea = !0)); e(a, b, c); null !== g && (g.ea = f); } } !d && b.isTreeLink && ((c = b.fromNode), (b = b.toNode), null !== c && null !== b && c !== b && ((d = !0), (a = a.diagram), null !== a && (d = a.isTreePathToChildren), (e = d ? b : c), (f = d ? c : b), e.oh || (e.oh = f), !f.isTreeLeaf || (null !== a && a.undoManager.isUndoingRedoing) || (d ? c === f && (f.isTreeLeaf = !1) : b === f && (f.isTreeLeaf = !1)))); } function zo(a, b, c) { xo(a, c); var d = a.Ya.remove(b), e = null; if (d || b.toNode === b.fromNode) { var f = a.linkDisconnected; e = a.diagram; if (null !== f) { var g = !0; null !== e && ((g = e.ea), (e.ea = !0)); f(a, b, c); null !== e && (e.ea = g); } } d && b.isTreeLink && ((c = !0), null !== e && (c = e.isTreePathToChildren), (a = c ? b.toNode : b.fromNode), (b = c ? b.fromNode : b.toNode), null !== a && (a.oh = !1), null === b || b.isTreeLeaf || (0 === b.Ya.count ? ((b.oh = null), (null !== e && e.undoManager.isUndoingRedoing) || (b.isTreeLeaf = !0)) : uk(b))); } function uk(a) { a.oh = !1; if (0 !== a.Ya.count) { var b = !0, c = a.diagram; if (null === c || !c.undoManager.isUndoingRedoing) { null !== c && (b = c.isTreePathToChildren); for (c = a.Ya.iterator; c.next(); ) { var d = c.value; if (d.isTreeLink) if (b) { if (d.fromNode === a) { a.isTreeLeaf = !1; return; } } else if (d.toNode === a) { a.isTreeLeaf = !1; return; } } a.isTreeLeaf = !0; } } } V.prototype.updateRelationshipsFromData = function () { var a = this.diagram; null !== a && a.partManager.updateRelationshipsFromData(this); }; t = V.prototype; t.aq = function (a) { T.prototype.aq.call(this, a); a || (uk(this), (a = this.hl), null !== a && Ao(a, this)); }; t.bq = function (a) { T.prototype.bq.call(this, a); a || ((a = this.hl), null !== a && null !== a.$c && (a.$c.remove(this), a.s())); }; t.Zj = function () { if (0 < this.Ya.count) { var a = this.diagram; if (null !== a) for ( var b = null !== a.commandHandler ? a.commandHandler.deletesConnectedLinks : !0, c = this.Ya.copy().iterator; c.next(); ) { var d = c.value; b ? a.remove(d) : (d.fromNode === this && (d.fromNode = null), d.toNode === this && (d.toNode = null)); } } this.labeledLink = null; T.prototype.Zj.call(this); }; t.Ss = function (a) { if (null === this.rc) { if ('' === a && !1 === this.yh) return this; Bo(this); } var b = this.rc.J(a); return null !== b || ('' !== a && ((b = this.rc.J('')), null !== b)) ? b : this; }; function Bo(a) { null === a.rc ? (a.rc = new Lb()) : a.rc.clear(); a.ym(a, function (a, c) { Hl(a, c); }); 0 === a.rc.count && a.rc.add('', a); } function Hl(a, b) { var c = b.portId; null !== c && null !== a.rc && a.rc.add(c, b); } function Gl(a, b, c) { var d = b.portId; if (null !== d && (null !== a.rc && a.rc.remove(d), (b = a.diagram), null !== b && c)) { c = null; for (a = a.Xu(d); a.next(); ) (d = a.value), null === c && (c = Ka()), c.push(d); if (null !== c) { for (a = 0; a < c.length; a++) b.remove(c[a]); Oa(c); } } } t.qz = function (a) { if (null === a || a === this) return !1; var b = !0, c = this.diagram; null !== c && (b = c.isTreePathToChildren); c = this; if (b) for (; c !== a; ) { b = null; for (var d = c.Ya.iterator; d.next(); ) { var e = d.value; if (e.isTreeLink && ((b = e.fromNode), b !== c && b !== this)) break; } if (b === this || null === b || b === c) return !1; c = b; } else for (; c !== a; ) { b = null; for ( d = c.Ya.iterator; d.next() && ((e = d.value), !e.isTreeLink || ((b = e.toNode), b === c || b === this)); ); if (b === this || null === b || b === c) return !1; c = b; } return !0; }; t.Wy = function () { var a = !0, b = this.diagram; null !== b && (a = b.isTreePathToChildren); b = this; if (a) for (;;) { a = null; for (var c = b.Ya.iterator; c.next(); ) { var d = c.value; if (d.isTreeLink && ((a = d.fromNode), a !== b && a !== this)) break; } if (a === this) return this; if (null === a || a === b) return b; b = a; } else for (;;) { a = null; for ( c = b.Ya.iterator; c.next() && ((d = c.value), !d.isTreeLink || ((a = d.toNode), a === b || a === this)); ); if (a === this) return this; if (null === a || a === b) return b; b = a; } }; t.Hy = function (a) { if (null === a) return null; if (this === a) return this; for (var b = this; null !== b; ) mo(b, !0), (b = b.rg()); var c = null; for (b = a; null !== b; ) { if (0 !== (b.D & 1048576)) { c = b; break; } b = b.rg(); } for (b = this; null !== b; ) mo(b, !1), (b = b.rg()); return c; }; t.Ji = function () { var a = !0, b = this.diagram; null !== b && (a = b.isTreePathToChildren); b = this.Ya.iterator; if (a) for (; b.next(); ) { if (((a = b.value), a.isTreeLink && a.fromNode !== this)) return a; } else for (; b.next(); ) if (((a = b.value), a.isTreeLink && a.toNode !== this)) return a; return null; }; t.rg = function () { var a = this.oh; if (null === a) return null; if (a instanceof V) return a; var b = !0; a = this.diagram; null !== a && (b = a.isTreePathToChildren); a = this.Ya.iterator; if (b) for (; a.next(); ) { if (((b = a.value), b.isTreeLink && ((b = b.fromNode), b !== this))) return (this.oh = b); } else for (; a.next(); ) if (((b = a.value), b.isTreeLink && ((b = b.toNode), b !== this))) return (this.oh = b); return (this.oh = null); }; t.Uy = function () { function a(b, d) { if (null !== b) { d.add(b); var c = b.Ji(); null !== c && (d.add(c), a(b.rg(), d)); } } var b = new F(); a(this, b); return b; }; t.Ty = function () { return Co(this, this); }; function Co(a, b) { b = b.rg(); return null === b ? 0 : 1 + Co(a, b); } t.Xp = function () { var a = !0, b = this.diagram; null !== b && (a = b.isTreePathToChildren); b = new zb(this.Ya); var c = this; b.predicate = a ? function (a) { return a.isTreeLink && a.fromNode === c ? !0 : !1; } : function (a) { return a.isTreeLink && a.toNode === c ? !0 : !1; }; return b; }; t.av = function () { var a = !0, b = this.diagram; null !== b && (a = b.isTreePathToChildren); var c = (b = null), d = this.Ya.iterator; if (a) for (; d.next(); ) (a = d.value), a.isTreeLink && a.fromNode === this && ((a = a.toNode), null !== b ? b.add(a) : null !== c && c !== a ? ((b = new E()), b.add(c), b.add(a)) : (c = a)); else for (; d.next(); ) (a = d.value), a.isTreeLink && a.toNode === this && ((a = a.fromNode), null !== b ? b.add(a) : null !== c && c !== a ? ((b = new E()), b.add(c), b.add(a)) : (c = a)); return null !== b ? b.iterator : null !== c ? new yb(c) : xb; }; t.Vy = function (a) { void 0 === a && (a = Infinity); var b = new F(); Hk(b, this, !1, a, !0); return b; }; V.prototype.collapseTree = function (a) { void 0 === a && (a = 1); 1 > a && (a = 1); var b = this.diagram; if (null !== b && !b.Fe) { b.Fe = !0; var c = new F(); c.add(this); Do(this, c, b.isTreePathToChildren, a, b, this, b.treeCollapsePolicy === ri); b.Fe = !1; } }; function Do(a, b, c, d, e, f, g) { if (1 < d) for (var h = c ? a.Vp() : a.sd(); h.next(); ) { var k = h.value; k.isTreeLink && ((k = k.Ws(a)), null === k || k === a || b.contains(k) || (b.add(k), Do(k, b, c, d - 1, e, f, g))); } else Eo(a, b, c, e, f, g); } function Eo(a, b, c, d, e, f) { for (var g = e === a ? !0 : a.isTreeExpanded, h = c ? a.Vp() : a.sd(); h.next(); ) { var k = h.value; if (k.isTreeLink && ((k = k.Ws(a)), null !== k && k !== a)) { var l = b.contains(k); l || b.add(k); g && (f && d.Lp(k, e), k.zh(), k.Lb(!1)); k.isTreeExpanded && ((k.wasTreeExpanded = k.isTreeExpanded), l || Eo(k, b, c, d, e, f)); } } a.isTreeExpanded = !1; } V.prototype.expandTree = function (a) { void 0 === a && (a = 2); 2 > a && (a = 2); var b = this.diagram; if (null !== b && !b.Fe) { b.Fe = !0; var c = new F(); c.add(this); Fo(this, c, b.isTreePathToChildren, a, b, this, b.treeCollapsePolicy === ri); b.Fe = !1; } }; function Fo(a, b, c, d, e, f, g) { for (var h = f === a ? !1 : a.isTreeExpanded, k = c ? a.Vp() : a.sd(); k.next(); ) { var l = k.value; l.isTreeLink && (h || l.Lc || l.Ra(), (l = l.Ws(a)), null !== l && l !== a && !b.contains(l) && (b.add(l), h || (l.Lb(!0), l.zh(), g && e.Mp(l, f)), 2 < d || l.wasTreeExpanded)) && ((l.wasTreeExpanded = !1), Fo(l, b, c, d - 1, e, f, g)); } a.isTreeExpanded = !0; } pa.Object.defineProperties(V.prototype, { portSpreading: { get: function () { return this.So; }, set: function (a) { var b = this.So; b !== a && ((this.So = a), this.g('portSpreading', b, a), (a = this.diagram), (null !== a && a.undoManager.isUndoingRedoing) || this.ed()); }, }, avoidable: { get: function () { return 0 !== (this.S & 8); }, set: function (a) { var b = 0 !== (this.S & 8); if (b !== a) { this.S ^= 8; var c = this.diagram; null !== c && ok(c, this); this.g('avoidable', b, a); } }, }, avoidableMargin: { get: function () { return this.Dk; }, set: function (a) { 'number' === typeof a && (a = new Ic(a)); var b = this.Dk; if (!b.A(a)) { this.Dk = a = a.I(); var c = this.diagram; null !== c && ok(c, this); this.g('avoidableMargin', b, a); } }, }, linksConnected: { get: function () { return this.Ya.iterator; }, }, linkConnected: { get: function () { return this.bo; }, set: function (a) { var b = this.bo; b !== a && ((this.bo = a), this.g('linkConnected', b, a)); }, }, linkDisconnected: { get: function () { return this.co; }, set: function (a) { var b = this.co; b !== a && ((this.co = a), this.g('linkDisconnected', b, a)); }, }, linkValidation: { get: function () { return this.ji; }, set: function (a) { var b = this.ji; b !== a && ((this.ji = a), this.g('linkValidation', b, a)); }, }, isLinkLabel: { get: function () { return null !== this.hl; }, }, labeledLink: { get: function () { return this.hl; }, set: function (a) { var b = this.hl; if (b !== a) { var c = this.diagram, d = this.data; if (null !== b) { null !== b.$c && (b.$c.remove(this), b.s()); if (null !== c && null !== d && !c.undoManager.isUndoingRedoing) { var e = b.data, f = c.model; if (null !== e && f.em()) { var g = f.pa(d); void 0 !== g && f.xx(e, g); } } this.containingGroup = null; } this.hl = a; null !== a && (Ao(a, this), null === c || null === d || c.undoManager.isUndoingRedoing || ((e = a.data), (c = c.model), null !== e && c.em() && ((d = c.pa(d)), void 0 !== d && c.Gu(e, d))), (this.containingGroup = a.containingGroup)); rl(this); this.g('labeledLink', b, a); } }, }, port: { get: function () { return this.Ss(''); }, }, ports: { get: function () { null === this.rc && Bo(this); return this.rc.iteratorValues; }, }, isTreeExpanded: { get: function () { return 0 !== (this.S & 1); }, set: function (a) { var b = 0 !== (this.S & 1); if (b !== a) { this.S ^= 1; var c = this.diagram; this.g('isTreeExpanded', b, a); b = this.treeExpandedChanged; if (null !== b) { var d = !0; null !== c && ((d = c.ea), (c.ea = !0)); b(this); null !== c && (c.ea = d); } null !== c && c.undoManager.isUndoingRedoing ? this.Lb(a) : a ? this.expandTree() : this.collapseTree(); } }, }, wasTreeExpanded: { get: function () { return 0 !== (this.S & 2); }, set: function (a) { var b = 0 !== (this.S & 2); b !== a && ((this.S ^= 2), this.g('wasTreeExpanded', b, a)); }, }, treeExpandedChanged: { get: function () { return this.Ep; }, set: function (a) { var b = this.Ep; b !== a && ((this.Ep = a), this.g('treeExpandedChanged', b, a)); }, }, isTreeLeaf: { get: function () { return 0 !== (this.S & 4); }, set: function (a) { var b = 0 !== (this.S & 4); b !== a && ((this.S ^= 4), this.g('isTreeLeaf', b, a)); }, }, }); V.prototype.expandTree = V.prototype.expandTree; V.prototype.collapseTree = V.prototype.collapseTree; V.prototype.findTreeParts = V.prototype.Vy; V.prototype.findTreeChildrenNodes = V.prototype.av; V.prototype.findTreeChildrenLinks = V.prototype.Xp; V.prototype.findTreeLevel = V.prototype.Ty; V.prototype.findTreeParentChain = V.prototype.Uy; V.prototype.findTreeParentNode = V.prototype.rg; V.prototype.findTreeParentLink = V.prototype.Ji; V.prototype.findCommonTreeParent = V.prototype.Hy; V.prototype.findTreeRoot = V.prototype.Wy; V.prototype.isInTreeOf = V.prototype.qz; V.prototype.findPort = V.prototype.Ss; V.prototype.findLinksTo = V.prototype.Ly; V.prototype.findLinksBetween = V.prototype.Ky; V.prototype.findNodesInto = V.prototype.Zu; V.prototype.findNodesOutOf = V.prototype.$u; V.prototype.findNodesConnected = V.prototype.Yu; V.prototype.findLinksInto = V.prototype.sd; V.prototype.findLinksOutOf = V.prototype.Vp; V.prototype.findLinksConnected = V.prototype.Xu; V.prototype.invalidateConnectedLinks = V.prototype.ed; V.prototype.invalidateLinkBundle = V.prototype.oz; var Go = new D(V, 'SpreadingNone', 10), uo = new D(V, 'SpreadingEvenly', 11), Ho = new D(V, 'SpreadingPacked', 12); V.className = 'Node'; V.SpreadingNone = Go; V.SpreadingEvenly = uo; V.SpreadingPacked = Ho; function ig(a) { V.call(this, a); this.S |= 4608; this.no = new F(); this.rl = new F(); this.Va = this.wp = this.ki = this.oo = this.mo = null; this.gc = new yi(); this.gc.group = this; } oa(ig, V); ig.prototype.cloneProtected = function (a) { V.prototype.cloneProtected.call(this, a); this.S = this.S & -32769; a.mo = this.mo; a.oo = this.oo; a.ki = this.ki; a.wp = this.wp; var b = a.Yl(function (a) { return a instanceof Xg; }); b instanceof Xg ? (a.Va = b) : (a.Va = null); null !== this.gc ? ((a.gc = this.gc.copy()), (a.gc.group = a)) : (null !== a.gc && (a.gc.group = null), (a.gc = null)); }; t = ig.prototype; t.pf = function (a) { V.prototype.pf.call(this, a); var b = a.bk(); for (a = a.memberParts; a.next(); ) { var c = a.value; c.s(); c.B(8); c.Tj(); if (c instanceof V) c.ed(b); else if (c instanceof S) for (c = c.labelNodes; c.next(); ) c.value.ed(b); } }; t.pk = function (a, b, c, d, e, f, g) { if (a === cf && 'elements' === b) if (e instanceof Xg) null === this.Va ? (this.Va = e) : this.Va !== e && A('Cannot insert a second Placeholder into the visual tree of a Group.'); else { if (e instanceof X) { var h = e.Yl(function (a) { return a instanceof Xg; }); h instanceof Xg && (null === this.Va ? (this.Va = h) : this.Va !== h && A('Cannot insert a second Placeholder into the visual tree of a Group.')); } } else a === df && 'elements' === b && null !== this.Va && (d === this.Va ? (this.Va = null) : d instanceof X && this.Va.tg(d) && (this.Va = null)); V.prototype.pk.call(this, a, b, c, d, e, f, g); }; t.uh = function (a, b, c, d) { this.Xe = this.Va; V.prototype.uh.call(this, a, b, c, d); }; t.Ri = function () { if (!V.prototype.Ri.call(this)) return !1; for (var a = this.memberParts; a.next(); ) { var b = a.value; if (b instanceof V) { if (b.isVisible() && pj(b)) return !1; } else if ( b instanceof S && b.isVisible() && pj(b) && b.fromNode !== this && b.toNode !== this ) return !1; } return !0; }; function no(a, b) { if (a.no.add(b)) { b instanceof ig && a.rl.add(b); var c = a.memberAdded; if (null !== c) { var d = !0, e = a.diagram; null !== e && ((d = e.ea), (e.ea = !0)); c(a, b); null !== e && (e.ea = d); } (a.isVisible() && a.isSubGraphExpanded) || b.Lb(!1); } (b instanceof S && !a.computesBoundsIncludingLinks) || ((b = a.Va), null === b && (b = a), b.s()); } function oo(a, b) { if (a.no.remove(b)) { b instanceof ig && a.rl.remove(b); var c = a.memberRemoved; if (null !== c) { var d = !0, e = a.diagram; null !== e && ((d = e.ea), (e.ea = !0)); c(a, b); null !== e && (e.ea = d); } (a.isVisible() && a.isSubGraphExpanded) || b.Lb(!0); } (b instanceof S && !a.computesBoundsIncludingLinks) || ((b = a.Va), null === b && (b = a), b.s()); } t.Zj = function () { if (0 < this.no.count) { var a = this.diagram; if (null !== a) for (var b = this.no.copy().iterator; b.next(); ) a.remove(b.value); } V.prototype.Zj.call(this); }; ig.prototype.canAddMembers = function (a) { var b = this.diagram; if (null === b) return !1; b = b.commandHandler; for (a = Jk(a).iterator; a.next(); ) if (!b.isValidMember(this, a.value)) return !1; return !0; }; ig.prototype.addMembers = function (a, b) { var c = this.diagram; if (null === c) return !1; c = c.commandHandler; var d = !0; for (a = Jk(a).iterator; a.next(); ) { var e = a.value; !b || c.isValidMember(this, e) ? (e.containingGroup = this) : (d = !1); } return d; }; ig.prototype.canUngroup = function () { if (!this.ungroupable) return !1; var a = this.layer; if (null !== a && !a.allowUngroup) return !1; a = a.diagram; return null === a || a.allowUngroup ? !0 : !1; }; t = ig.prototype; t.ed = function (a) { void 0 === a && (a = null); var b = 0 !== (this.S & 65536); V.prototype.ed.call(this, a); if (!b) for ( (0 !== (this.S & 65536)) !== !0 && (this.S = this.S ^ 65536), b = this.Wu(); b.next(); ) { var c = b.value; if (null === a || !a.contains(c)) { var d = c.fromNode; null !== d && d !== this && d.Vd(this) && !d.isVisible() ? (xo(d, c.fromPort), xo(d, c.toPort), c.Ra()) : ((d = c.toNode), null !== d && d !== this && d.Vd(this) && !d.isVisible() && (xo(d, c.fromPort), xo(d, c.toPort), c.Ra())); } } }; t.Wu = function () { var a = this.bk(); a.add(this); for (var b = new F(), c = a.iterator; c.next(); ) { var d = c.value; if (d instanceof V) for (d = d.linksConnected; d.next(); ) { var e = d.value; a.contains(e) || b.add(e); } } return b.iterator; }; t.Jy = function () { var a = this.bk(); a.add(this); for (var b = new F(), c = a.iterator; c.next(); ) { var d = c.value; if (d instanceof V) for (d = d.linksConnected; d.next(); ) { var e = d.value, f = e.fromNode; (a.contains(f) && f !== this) || b.add(f); e = e.toNode; (a.contains(e) && e !== this) || b.add(e); } } return b.iterator; }; t.Iy = function () { function a(b, d) { null !== b && (d.add(b), a(b.containingGroup, d)); } var b = new F(); a(this, b); return b; }; t.bk = function () { var a = new F(); Hk(a, this, !0, 0, !0); a.remove(this); return a; }; t.Lb = function (a) { V.prototype.Lb.call(this, a); for (var b = this.memberParts; b.next(); ) b.value.Lb(a); }; ig.prototype.collapseSubGraph = function () { var a = this.diagram; if (null !== a && !a.Fe) { a.Fe = !0; var b = this.bk(); Io(this, b, a, this); a.Fe = !1; } }; function Io(a, b, c, d) { for (var e = a.memberParts; e.next(); ) { var f = e.value; f.Lb(!1); f instanceof ig && f.isSubGraphExpanded && ((f.wasSubGraphExpanded = f.isSubGraphExpanded), Io(f, b, c, d)); if (f instanceof V) f.ed(b), c.Lp(f, d); else if (f instanceof S) for (f = f.labelNodes; f.next(); ) f.value.ed(b); } a.isSubGraphExpanded = !1; } ig.prototype.expandSubGraph = function () { var a = this.diagram; if (null !== a && !a.Fe) { a.Fe = !0; var b = this.bk(); Jo(this, b, a, this); a.Fe = !1; } }; function Jo(a, b, c, d) { for (var e = a.memberParts; e.next(); ) { var f = e.value; f.Lb(!0); f instanceof ig && f.wasSubGraphExpanded && ((f.wasSubGraphExpanded = !1), Jo(f, b, c, d)); if (f instanceof V) f.ed(b), c.Mp(f, d); else if (f instanceof S) for (f = f.labelNodes; f.next(); ) f.value.ed(b); } a.isSubGraphExpanded = !0; } ig.prototype.move = function (a, b) { void 0 === b && (b = !1); var c = b ? this.location : this.position, d = c.x; c = c.y; var e = a.x, f = a.y; if (!(d === e || (isNaN(d) && isNaN(e))) || !(c === f || (isNaN(c) && isNaN(f)))) { d = e - (isNaN(d) ? 0 : d); c = f - (isNaN(c) ? 0 : c); f = G.alloc(); V.prototype.move.call(this, a, b); a = new F(); for (b = this.bk().iterator; b.next(); ) if ( ((e = b.value), e instanceof S && (e.suspendsRouting && a.add(e), e.Lc || (e.fromNode !== this && e.toNode !== this))) ) e.suspendsRouting = !0; for (b.reset(); b.next(); ) if (((e = b.value), !(e.Ah() || (e instanceof V && e.isLinkLabel)))) { var g = e.position, h = e.location; g.o() ? ((f.x = g.x + d), (f.y = g.y + c), (e.position = f)) : h.o() && ((f.x = h.x + d), (f.y = h.y + c), (e.location = f)); } for (b.reset(); b.next(); ) if ( ((e = b.value), e instanceof S && ((e.suspendsRouting = a.contains(e)), e.Lc || (e.fromNode !== this && e.toNode !== this))) ) (g = e.position), (f.x = g.x + d), (f.y = g.y + c), f.o() ? e.move(f) : e.Ra(), Mj(e) && e.Ra(); G.free(f); } }; pa.Object.defineProperties(ig.prototype, { placeholder: { get: function () { return this.Va; }, }, computesBoundsAfterDrag: { get: function () { return 0 !== (this.S & 2048); }, set: function (a) { var b = 0 !== (this.S & 2048); b !== a && ((this.S ^= 2048), this.g('computesBoundsAfterDrag', b, a)); }, }, computesBoundsIncludingLinks: { get: function () { return 0 !== (this.S & 4096); }, set: function (a) { var b = 0 !== (this.S & 4096); b !== a && ((this.S ^= 4096), this.g('computesBoundsIncludingLinks', b, a)); }, }, computesBoundsIncludingLocation: { get: function () { return 0 !== (this.S & 8192); }, set: function (a) { var b = 0 !== (this.S & 8192); b !== a && ((this.S ^= 8192), this.g('computesBoundsIncludingLocation', b, a)); }, }, handlesDragDropForMembers: { get: function () { return 0 !== (this.S & 16384); }, set: function (a) { var b = 0 !== (this.S & 16384); b !== a && ((this.S ^= 16384), this.g('handlesDragDropForMembers', b, a)); }, }, memberParts: { get: function () { return this.no.iterator; }, }, layout: { get: function () { return this.gc; }, set: function (a) { var b = this.gc; if (b !== a) { null !== b && ((b.diagram = null), (b.group = null)); this.gc = a; var c = this.diagram; null !== a && ((a.diagram = c), (a.group = this)); null !== c && (c.Cg = !0); this.g('layout', b, a); null !== c && c.cc(); } }, }, memberAdded: { get: function () { return this.mo; }, set: function (a) { var b = this.mo; b !== a && ((this.mo = a), this.g('memberAdded', b, a)); }, }, memberRemoved: { get: function () { return this.oo; }, set: function (a) { var b = this.oo; b !== a && ((this.oo = a), this.g('memberRemoved', b, a)); }, }, memberValidation: { get: function () { return this.ki; }, set: function (a) { var b = this.ki; b !== a && ((this.ki = a), this.g('memberValidation', b, a)); }, }, ungroupable: { get: function () { return 0 !== (this.S & 256); }, set: function (a) { var b = 0 !== (this.S & 256); b !== a && ((this.S ^= 256), this.g('ungroupable', b, a)); }, }, isSubGraphExpanded: { get: function () { return 0 !== (this.S & 512); }, set: function (a) { var b = 0 !== (this.S & 512); if (b !== a) { this.S ^= 512; var c = this.diagram; this.g('isSubGraphExpanded', b, a); b = this.subGraphExpandedChanged; if (null !== b) { var d = !0; null !== c && ((d = c.ea), (c.ea = !0)); b(this); null !== c && (c.ea = d); } null !== c && c.undoManager.isUndoingRedoing ? (null !== this.Va && this.Va.s(), this.memberParts.each(function (a) { a.updateAdornments(); })) : a ? this.expandSubGraph() : this.collapseSubGraph(); } }, }, wasSubGraphExpanded: { get: function () { return 0 !== (this.S & 1024); }, set: function (a) { var b = 0 !== (this.S & 1024); b !== a && ((this.S ^= 1024), this.g('wasSubGraphExpanded', b, a)); }, }, subGraphExpandedChanged: { get: function () { return this.wp; }, set: function (a) { var b = this.wp; b !== a && ((this.wp = a), this.g('subGraphExpandedChanged', b, a)); }, }, nk: { get: function () { return 0 !== (this.S & 32768); }, set: function (a) { (0 !== (this.S & 32768)) !== a && (this.S ^= 32768); }, }, }); ig.prototype.expandSubGraph = ig.prototype.expandSubGraph; ig.prototype.collapseSubGraph = ig.prototype.collapseSubGraph; ig.prototype.findSubGraphParts = ig.prototype.bk; ig.prototype.findContainingGroupChain = ig.prototype.Iy; ig.prototype.findExternalNodesConnected = ig.prototype.Jy; ig.prototype.findExternalLinksConnected = ig.prototype.Wu; ig.className = 'Group'; function Xg() { Y.call(this); this.eb = Oc; this.gp = new N(NaN, NaN, NaN, NaN); } oa(Xg, Y); Xg.prototype.cloneProtected = function (a) { Y.prototype.cloneProtected.call(this, a); a.eb = this.eb.I(); a.gp = this.gp.copy(); }; Xg.prototype.wh = function (a) { if (null === this.background && null === this.areaBackground) return !1; var b = this.naturalBounds; return Cc(0, 0, b.width, b.height, a.x, a.y); }; Xg.prototype.hm = function () { var a = this.part; (null !== a && (a instanceof ig || a instanceof pf)) || A('Placeholder is not inside a Group or Adornment.'); if (a instanceof ig) { var b = this.computeBorder(this.gp), c = this.minSize, d = this.qc; sc( d, (isFinite(c.width) ? Math.max(c.width, b.width) : b.width) || 0, (isFinite(c.height) ? Math.max(c.height, b.height) : b.height) || 0, ); Xk(this, 0, 0, d.width, d.height); c = a.memberParts; for (d = !1; c.next(); ) if (c.value.isVisible()) { d = !0; break; } c = a.diagram; (d = !d || null === c) || ((d = c.animationManager), d.Mf ? ((d = d.yj.J(a)), (d = null !== d && (d.start.position || d.start.location))) : (d = !1)); d || isNaN(b.x) || isNaN(b.y) ? null !== c && c.animationManager.isAnimating && c.animationManager.bs.add(this) : ((c = G.alloc()), c.Vi(b, a.locationSpot), c.A(a.location) || (a.location = new G(c.x, c.y)), G.free(c)); } else { b = this.qc; c = this.eb; d = c.left + c.right; var e = c.top + c.bottom, f = a.adornedObject; a.angle = f.Li(); var g = 0; f instanceof W && (g = f.strokeWidth); var h = f.De(), k = f.naturalBounds, l = (k.width + g) * h; g = (k.height + g) * h; a.type !== X.Link && ((f = f.ma('Selection' === a.category ? Tc : a.locationSpot, G.alloc())), (a.location = f), G.free(f)); isNaN(l) || isNaN(g) ? ((a = a.adornedObject), (l = a.ma(Tc, G.alloc())), (f = N.allocAt(l.x, l.y, 0, 0)), f.Je(a.ma(hd, l)), f.Je(a.ma(Vc, l)), f.Je(a.ma(fd, l)), sc(b, f.width + d || 0, f.height + e || 0), Xk(this, -c.left, -c.top, b.width, b.height), G.free(l), N.free(f)) : (sc(b, l + d || 0, g + e || 0), Xk(this, -c.left, -c.top, b.width, b.height)); } }; Xg.prototype.uh = function (a, b, c, d) { this.actualBounds.h(a, b, c, d); }; Xg.prototype.computeBorder = function (a) { var b = this.part, c = b.diagram; if ( null !== c && b instanceof ig && !b.layer.isTemporary && b.computesBoundsAfterDrag && this.gp.o() ) { var d = c.toolManager.findTool('Dragging'); if (d === c.currentTool && ((c = d.computeBorder(b, this.gp, a)), null !== c)) return c; } c = N.alloc(); d = this.computeMemberBounds(c); var e = this.eb; b instanceof ig && !b.isSubGraphExpanded ? a.h(d.x - e.left, d.y - e.top, 0, 0) : a.h( d.x - e.left, d.y - e.top, Math.max(d.width + e.left + e.right, 0), Math.max(d.height + e.top + e.bottom, 0), ); N.free(c); b instanceof ig && b.computesBoundsIncludingLocation && b.location.o() && a.Je(b.location); return a; }; Xg.prototype.computeMemberBounds = function (a) { if (!(this.part instanceof ig)) return a.h(0, 0, 0, 0), a; for ( var b = this.part, c = Infinity, d = Infinity, e = -Infinity, f = -Infinity, g = b.memberParts; g.next(); ) { var h = g.value; if (h.isVisible()) { if (h instanceof S) { if (!b.computesBoundsIncludingLinks) continue; if (oj(h)) continue; if (h.fromNode === b || h.toNode === b) continue; } h = h.actualBounds; h.left < c && (c = h.left); h.top < d && (d = h.top); h.right > e && (e = h.right); h.bottom > f && (f = h.bottom); } } isFinite(c) && isFinite(d) ? a.h(c, d, e - c, f - d) : ((b = b.location), a.h(b.x, b.y, 0, 0)); return a; }; pa.Object.defineProperties(Xg.prototype, { padding: { get: function () { return this.eb; }, set: function (a) { 'number' === typeof a && (a = new Ic(a)); var b = this.eb; b.A(a) || ((this.eb = a = a.I()), this.g('padding', b, a)); }, }, }); Xg.className = 'Placeholder'; function S() { T.call(this, X.Link); this.Ta = 8; this.Pe = null; this.Qe = ''; this.gf = this.En = null; this.hf = ''; this.Dp = null; this.Lm = Og; this.fn = 0; this.jn = Og; this.kn = NaN; this.Fj = Ko; this.rp = 0.5; this.$c = null; this.xb = new E().freeze(); this.bh = this.Zg = null; this.xl = new N(); this.qa = new $d(); this.Pn = !0; this.K = this.u = this.zf = this.If = null; this.l = []; this.zu = new G(); this.qr = this.Kw = this.Jw = null; this.$t = NaN; this.P = null; } oa(S, T); S.prototype.cloneProtected = function (a) { T.prototype.cloneProtected.call(this, a); a.Ta = this.Ta & -113; a.Qe = this.Qe; a.En = this.En; a.hf = this.hf; a.Dp = this.Dp; a.Lm = this.Lm; a.fn = this.fn; a.jn = this.jn; a.kn = this.kn; a.Fj = this.Fj; a.rp = this.rp; null !== this.P && (a.P = this.P.copy()); }; t = S.prototype; t.pf = function (a) { T.prototype.pf.call(this, a); this.Qe = a.Qe; this.hf = a.hf; a.Zg = null; a.Ra(); a.zf = this.zf; var b = a.fromPort; null !== b && xo(a.fromNode, b); b = a.toPort; null !== b && xo(a.toNode, b); }; t.fb = function (a) { a.classType === S ? 2 === (a.value & 2) ? (this.routing = a) : a === Rg || a === Ng || a === Mg ? (this.curve = a) : a === Lo || a === Mo || a === No ? (this.adjusting = a) : a !== Ko && a !== Og && A('Unknown Link enum value for a Link property: ' + a) : T.prototype.fb.call(this, a); }; t.Hc = function () { null === this.P && (this.P = new Tk()); }; t.Ri = function () { var a = this.fromNode; if (null !== a) { var b = a.findVisibleNode(); null !== b && (a = b); if (pj(a) || qj(a)) return !1; } a = this.toNode; return null !== a && ((b = a.findVisibleNode()), null !== b && (a = b), pj(a) || qj(a)) ? !1 : !0; }; t.Lv = function () { return !1; }; t.Mv = function () {}; t.bc = function () { return !1; }; S.prototype.computeAngle = function (a, b, c) { return S.computeAngle(b, c); }; S.computeAngle = function (a, b) { switch (a) { default: case Og: a = 0; break; case rn: a = b; break; case Cm: a = b + 90; break; case Em: a = b - 90; break; case Oo: a = b + 180; break; case Po: a = H.jq(b); 90 < a && 270 > a && (a -= 180); break; case Dm: a = H.jq(b + 90); 90 < a && 270 > a && (a -= 180); break; case Fm: a = H.jq(b - 90); 90 < a && 270 > a && (a -= 180); break; case Gm: a = H.jq(b); if ((45 < a && 135 > a) || (225 < a && 315 > a)) return 0; 90 < a && 270 > a && (a -= 180); } return H.jq(a); }; function to(a) { var b = a.fromNode, c = a.toNode, d = null; null !== b ? (d = null !== c ? b.ex(c) : b.containingGroup) : null !== c ? (d = c.containingGroup) : (d = null); b = d; c = a.Sh; if (c !== b) { null !== c && oo(c, a); a.Sh = b; null !== b && no(b, a); var e = a.containingGroupChanged; if (null !== e) { var f = !0, g = a.diagram; null !== g && ((f = g.ea), (g.ea = !0)); e(a, c, b); null !== g && (g.ea = f); } !a.Lc || (a.Jw !== c && a.Kw !== c) || a.Ra(); } if (a.isLabeledLink) for (a = a.labelNodes; a.next(); ) a.value.containingGroup = d; } t = S.prototype; t.zh = function () { var a = this.containingGroup; null !== a && this.fromNode !== a && this.toNode !== a && a.computesBoundsIncludingLinks && T.prototype.zh.call(this); }; t.Ws = function (a) { var b = this.fromNode; return a === b ? this.toNode : b; }; t.bz = function (a) { var b = this.fromPort; return a === b ? this.toPort : b; }; function Ao(a, b) { null === a.$c && (a.$c = new F()); a.$c.add(b); a.s(); } t.aq = function (a) { T.prototype.aq.call(this, a); Qo(this) && this.cq(this.actualBounds); if (!a) { a = this.Pe; var b = null; null !== a && ((b = this.fromPort), yo(a, this, b)); var c = this.gf; if (null !== c) { var d = this.toPort; (c === a && d === b) || yo(c, this, d); } Ro(this); } }; t.bq = function (a) { T.prototype.bq.call(this, a); Qo(this) && this.cq(this.actualBounds); if (!a) { a = this.Pe; var b = null; null !== a && ((b = this.fromPort), zo(a, this, b)); var c = this.gf; if (null !== c) { var d = this.toPort; (c === a && d === b) || zo(c, this, d); } So(this); } }; t.Zj = function () { this.Lc = !0; if (null !== this.$c) { var a = this.diagram; if (null !== a) for (var b = this.$c.copy().iterator; b.next(); ) a.remove(b.value); } null !== this.data && ((a = this.diagram), null !== a && a.partManager.removeDataForLink(this)); }; S.prototype.updateRelationshipsFromData = function () { if (null !== this.data) { var a = this.diagram; null !== a && a.partManager.updateRelationshipsFromData(this); } }; S.prototype.move = function (a, b) { var c = b ? this.location : this.position, d = c.x; isNaN(d) && (d = 0); var e = c.y; isNaN(e) && (e = 0); d = a.x - d; e = a.y - e; !0 === b ? T.prototype.move.call(this, a, !1) : ((a = G.allocAt(c.x + d, c.y + e)), T.prototype.move.call(this, a, !1), G.free(a)); $f(this, d, e); for (a = this.labelNodes; a.next(); ) (b = a.value), (c = b.position), b.moveTo(c.x + d, c.y + e); }; S.prototype.canRelinkFrom = function () { if (!this.relinkableFrom) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowRelink) return !1; a = a.diagram; return null === a || a.allowRelink ? !0 : !1; }; S.prototype.canRelinkTo = function () { if (!this.relinkableTo) return !1; var a = this.layer; if (null === a) return !0; if (!a.allowRelink) return !1; a = a.diagram; return null === a || a.allowRelink ? !0 : !1; }; S.prototype.computeMidPoint = function (a) { var b = this.pointsCount; if (0 === b) return a.assign(ec), a; if (1 === b) return a.assign(this.i(0)), a; if (2 === b) { var c = this.i(0), d = this.i(1); a.h((c.x + d.x) / 2, (c.y + d.y) / 2); return a; } if (this.isOrthogonal && (15 <= this.computeCorner() || this.computeCurve() === Rg)) return ( this.qa.dv(0.5, a), a.add(this.i(0)), (c = this.qa.figures.first()), a.offset(-c.startX, -c.startY), a ); if (this.computeCurve() === Rg) { if (3 === b) return this.i(1); d = ((b - 1) / 3) | 0; c = 3 * ((d / 2) | 0); if (1 === d % 2) { d = this.i(c); var e = this.i(c + 1), f = this.i(c + 2); c = this.i(c + 3); H.ny(d.x, d.y, e.x, e.y, f.x, f.y, c.x, c.y, a); } else a.assign(this.i(c)); return a; } var g = this.flattenedLengths; c = this.flattenedTotalLength; for (e = f = d = 0; d < c / 2 && f < b; ) { e = g[f]; if (d + e > c / 2) break; d += e; f++; } b = this.i(f); f = this.i(f + 1); 1 > Math.abs(b.x - f.x) ? b.y > f.y ? a.h(b.x, b.y - (c / 2 - d)) : a.h(b.x, b.y + (c / 2 - d)) : 1 > Math.abs(b.y - f.y) ? b.x > f.x ? a.h(b.x - (c / 2 - d), b.y) : a.h(b.x + (c / 2 - d), b.y) : ((c = (c / 2 - d) / e), a.h(b.x + c * (f.x - b.x), b.y + c * (f.y - b.y))); return a; }; S.prototype.computeMidAngle = function () { var a = this.pointsCount; if (2 > a) return NaN; if (2 === a) return this.i(0).Wa(this.i(1)); if (this.isOrthogonal && (15 <= this.computeCorner() || this.computeCurve() === Rg)) { a: { a = this.qa; var b = 0.5; 0 > b ? (b = 0) : 1 < b && (b = 1); if (a.type === ce) a = (180 * Math.atan2(a.endY - a.startY, a.endX - a.startX)) / Math.PI; else { var c = a.flattenedSegments, d = a.flattenedLengths, e = c.length; b = a.flattenedTotalLength * b; for (var f = 0, g = 0; g < e; g++) { var h = d[g], k = h.length; for (a = 0; a < k; a++) { var l = h[a]; if (f + l >= b) { b = c[g]; c = b[2 * a]; d = b[2 * a + 1]; e = b[2 * a + 2]; a = b[2 * a + 3]; a = 1 > Math.abs(e - c) && 1 > Math.abs(a - d) ? 0 : 1 > Math.abs(e - c) ? 0 <= a - d ? 90 : 270 : 1 > Math.abs(a - d) ? 0 <= e - c ? 0 : 180 : (180 * Math.atan2(a - d, e - c)) / Math.PI; break a; } f += l; } } a = NaN; } } return a; } if (this.computeCurve() === Rg && 4 <= a) { d = ((a - 1) / 3) | 0; c = 3 * ((d / 2) | 0); if (1 === d % 2) return ( (c = Math.floor(c)), (a = this.i(c)), (d = this.i(c + 1)), (e = this.i(c + 2)), (c = this.i(c + 3)), H.my(a.x, a.y, d.x, d.y, e.x, e.y, c.x, c.y) ); if (0 < c && c + 1 < a) return this.i(c - 1).Wa(this.i(c + 1)); } d = this.flattenedLengths; e = this.flattenedTotalLength; for (c = b = 0; b < e / 2 && c < a; ) { f = d[c]; if (b + f > e / 2) break; b += f; c++; } d = this.i(c); e = this.i(c + 1); if (1 > Math.abs(d.x - e.x) && 1 > Math.abs(d.y - e.y)) { if (0 < c && c + 2 < a) return this.i(c - 1).Wa(this.i(c + 2)); } else { if (1 > Math.abs(d.x - e.x)) return d.y > e.y ? 270 : 90; if (1 > Math.abs(d.y - e.y)) return d.x > e.x ? 180 : 0; } return d.Wa(e); }; t = S.prototype; t.i = function (a) { return this.xb.j[a]; }; t.jd = function (a, b) { this.xb.gd(a, b); }; t.M = function (a, b, c) { this.xb.gd(a, new G(b, c)); }; t.mz = function (a, b) { this.xb.Ib(a, b); }; t.m = function (a, b, c) { this.xb.Ib(a, new G(b, c)); }; t.ze = function (a) { this.xb.add(a); }; t.lf = function (a, b) { this.xb.add(new G(a, b)); }; t.Av = function (a) { this.xb.mb(a); }; t.Uj = function () { this.xb.clear(); }; function $f(a, b, c) { if (0 !== b || 0 !== c) { for (var d = a.Lc, e = new E(), f = a.xb.iterator; f.next(); ) { var g = f.value; e.add(new G(g.x + b, g.y + c).freeze()); } e.freeze(); f = a.xb; a.xb = e; isNaN(b) || isNaN(c) || a.diagram.animationManager.rb ? a.s() : (a.me.h(a.me.x + b, a.me.y + c), a.sa.h(a.sa.x + b, a.sa.y + c), rl(a)); d && To(a); b = a.diagram; null !== b && b.animationManager.rb && (a.bh = e); a.g('points', f, e); } } t.Ch = function () { null === this.Zg && ((this.Zg = this.xb), (this.xb = this.xb.copy())); }; t.mf = function () { if (null !== this.Zg) { for ( var a = this.Zg, b = this.xb, c = Infinity, d = Infinity, e = a.j, f = e.length, g = 0; g < f; g++ ) { var h = e[g]; c = Math.min(h.x, c); d = Math.min(h.y, d); } h = g = Infinity; for (var k = b.j, l = k.length, m = 0; m < l; m++) { var n = k[m]; g = Math.min(n.x, g); h = Math.min(n.y, h); n.freeze(); } b.freeze(); if (l === f) for (f = 0; f < l; f++) { if (((m = e[f]), (n = k[f]), m.x - c !== n.x - g || m.y - d !== n.y - h)) { this.s(); this.ac(); break; } } else this.s(), this.ac(); this.Zg = null; c = this.diagram; null !== c && c.animationManager.rb && (this.bh = b); To(this); this.g('points', a, b); } }; t.zx = function () { null !== this.Zg && ((this.xb = this.Zg), (this.Zg = null)); }; function To(a) { 0 === a.xb.count ? (a.Lc = !1) : ((a.Lc = !0), (a.qr = null), (a.$t = NaN), (a.defaultFromPoint = a.i(0)), (a.defaultToPoint = a.i(a.pointsCount - 1)), Uo(a, !1)); } t.Ra = function () { if (!this.suspendsRouting) { var a = this.diagram; if (a) { if (a.ft.contains(this) || a.undoManager.isUndoingRedoing) return; a = a.animationManager; if (a.isTicking && !a.isAnimating) return; null !== this.bh && !a.isTicking && a.isAnimating && (this.bh = null); } a = this.path; null !== a && ((this.Lc = !1), this.s(), a.s()); } }; t.Zi = function () { if (!this.Lc && !this.Pu) { var a = !0; try { (this.Pu = !0), this.Ch(), (a = this.computePoints()); } finally { (this.Pu = !1), a ? this.mf() : this.zx(); } } }; S.prototype.computePoints = function () { var a = this.diagram; if (null === a) return !1; var b = this.fromNode, c = null; null === b ? (a.ri || ((a.ap = new W()), (a.ap.desiredSize = fc), (a.ap.strokeWidth = 0), (a.ri = new V()), a.ri.add(a.ap), a.ri.$b()), this.defaultFromPoint && ((a.ri.position = a.ri.location = this.defaultFromPoint), a.ri.$b(), (b = a.ri), (c = a.ap))) : (c = this.fromPort); if (null !== c && !b.isVisible()) { var d = b.findVisibleNode(); null !== d && d !== b ? ((b = d), (c = d.port)) : (b = d); } this.Jw = b; if (null === b || !b.location.o()) return !1; for (; !(null === c || (c.actualBounds.o() && c.tf())); ) c = c.panel; if (null === c) return !1; var e = this.toNode, f = null; null === e ? (a.si || ((a.bp = new W()), (a.bp.desiredSize = fc), (a.bp.strokeWidth = 0), (a.si = new V()), a.si.add(a.bp), a.si.$b()), this.defaultToPoint && ((a.si.position = a.si.location = this.defaultToPoint), a.si.$b(), (e = a.si), (f = a.bp))) : (f = this.toPort); null === f || e.isVisible() || ((a = e.findVisibleNode()), null !== a && a !== e ? ((e = a), (f = a.port)) : (e = a)); this.Kw = e; if (null === e || !e.location.o()) return !1; for (; !(null === f || (f.actualBounds.o() && f.tf())); ) f = f.panel; if (null === f) return !1; var g = this.pointsCount; d = this.computeSpot(!0, c); a = this.computeSpot(!1, f); var h = Vo(d), k = Vo(a), l = c === f && null !== c, m = this.isOrthogonal, n = this.curve === Rg; this.If = l && !m ? (n = !0) : !1; var p = this.adjusting === Og || l; if (!m && !l && h && k) { if ( ((h = !1), !p && 3 <= g && ((p = this.getLinkPoint(b, c, d, !0, !1, e, f)), (k = this.getLinkPoint(e, f, a, !1, !1, b, c)), (h = this.adjustPoints(0, p, g - 1, k))) && ((p = this.getLinkPoint(b, c, d, !0, !1, e, f)), (k = this.getLinkPoint(e, f, a, !1, !1, b, c)), this.adjustPoints(0, p, g - 1, k)), !h) ) if ((this.Uj(), n)) { g = this.getLinkPoint(b, c, d, !0, !1, e, f); p = this.getLinkPoint(e, f, a, !1, !1, b, c); h = p.x - g.x; k = p.y - g.y; l = this.computeCurviness(); n = m = 0; var q = g.x + h / 3, r = g.y + k / 3, u = q, x = r; H.w(k, 0) ? (x = 0 < h ? x - l : x + l) : ((m = -h / k), (n = Math.sqrt((l * l) / (m * m + 1))), 0 > l && (n = -n), (u = (0 > k ? -1 : 1) * n + q), (x = m * (u - q) + r)); q = g.x + (2 * h) / 3; r = g.y + (2 * k) / 3; var v = q, z = r; H.w(k, 0) ? (z = 0 < h ? z - l : z + l) : ((v = (0 > k ? -1 : 1) * n + q), (z = m * (v - q) + r)); this.Uj(); this.ze(g); this.lf(u, x); this.lf(v, z); this.ze(p); this.jd(0, this.getLinkPoint(b, c, d, !0, !1, e, f)); this.jd(3, this.getLinkPoint(e, f, a, !1, !1, b, c)); } else (d = this.getLinkPoint(b, c, d, !0, !1, e, f)), (a = this.getLinkPoint(e, f, a, !1, !1, b, c)), this.hasCurviness() ? ((p = a.x - d.x), (e = a.y - d.y), (f = this.computeCurviness()), (b = d.x + p / 2), (c = d.y + e / 2), (g = b), (h = c), H.w(e, 0) ? (h = 0 < p ? h - f : h + f) : ((p = -p / e), (g = Math.sqrt((f * f) / (p * p + 1))), 0 > f && (g = -g), (g = (0 > e ? -1 : 1) * g + b), (h = p * (g - b) + c)), this.ze(d), this.lf(g, h)) : this.ze(d), this.ze(a); } else { n = this.isAvoiding; p && ((m && n) || l) && this.Uj(); var y = l ? this.computeCurviness() : 0; n = this.getLinkPoint(b, c, d, !0, m, e, f); q = u = r = 0; if (m || !h || l) (x = this.computeEndSegmentLength(b, c, d, !0)), (q = this.getLinkDirection(b, c, n, d, !0, m, e, f)), l && (h || d.A(a) || (!m && 1 === d.x + a.x && 1 === d.y + a.y)) && ((q -= m ? 90 : 30), 0 > y && (q -= 180)), 0 > q ? (q += 360) : 360 <= q && (q -= 360), l && (x += Math.abs(y) * (m ? 1 : 2)), 0 === q ? (r = x) : 90 === q ? (u = x) : 180 === q ? (r = -x) : 270 === q ? (u = -x) : ((r = x * Math.cos((q * Math.PI) / 180)), (u = x * Math.sin((q * Math.PI) / 180))), d.jc() && l && ((x = c.ma(dd, G.alloc())), (v = G.allocAt(x.x + 1e3 * r, x.y + 1e3 * u)), this.getLinkPointFromPoint(b, c, x, v, !0, n), G.free(x), G.free(v)); x = this.getLinkPoint(e, f, a, !1, m, b, c); var B = (z = v = 0); if (m || !k || l) { var C = this.computeEndSegmentLength(e, f, a, !1); B = this.getLinkDirection(e, f, x, a, !1, m, b, c); l && (k || d.A(a) || (!m && 1 === d.x + a.x && 1 === d.y + a.y)) && ((B += m ? 0 : 30), 0 > y && (B += 180)); 0 > B ? (B += 360) : 360 <= B && (B -= 360); l && (C += Math.abs(y) * (m ? 1 : 2)); 0 === B ? (v = C) : 90 === B ? (z = C) : 180 === B ? (v = -C) : 270 === B ? (z = -C) : ((v = C * Math.cos((B * Math.PI) / 180)), (z = C * Math.sin((B * Math.PI) / 180))); a.jc() && l && ((a = f.ma(dd, G.alloc())), (d = G.allocAt(a.x + 1e3 * v, a.y + 1e3 * z)), this.getLinkPointFromPoint(e, f, a, d, !1, x), G.free(a), G.free(d)); } a = n; if (m || !h || l) a = new G(n.x + r, n.y + u); d = x; if (m || !k || l) d = new G(x.x + v, x.y + z); !p && !m && h && 3 < g && this.adjustPoints(0, n, g - 2, d) ? this.jd(g - 1, x) : !p && !m && k && 3 < g && this.adjustPoints(1, a, g - 1, x) ? this.jd(0, n) : !p && (m ? 6 <= g : 4 < g) && this.adjustPoints(1, a, g - 2, d) ? (this.jd(0, n), this.jd(g - 1, x)) : (this.Uj(), this.ze(n), (m || !h || l) && this.ze(a), m && this.addOrthoPoints(a, q, d, B, b, e), (m || !k || l) && this.ze(d), this.ze(x)); } return !0; }; function Wo(a, b) { Math.abs(b.x - a.x) > Math.abs(b.y - a.y) ? (b.x >= a.x ? (b.x = a.x + 9e9) : (b.x = a.x - 9e9), (b.y = a.y)) : (b.y >= a.y ? (b.y = a.y + 9e9) : (b.y = a.y - 9e9), (b.x = a.x)); return b; } S.prototype.getLinkPointFromPoint = function (a, b, c, d, e, f) { void 0 === f && (f = new G()); if (null === a || null === b) return f.assign(c), f; a.isVisible() || ((e = a.findVisibleNode()), null !== e && e !== a && (b = e.port)); a = null; e = b.panel; null === e || e.Zd() || (e = e.panel); if (null === e) { e = d.x; d = d.y; var g = c.x; c = c.y; } else { a = e.rd; e = 1 / (a.m11 * a.m22 - a.m12 * a.m21); g = a.m22 * e; var h = -a.m12 * e, k = -a.m21 * e, l = a.m11 * e, m = e * (a.m21 * a.dy - a.m22 * a.dx), n = e * (a.m12 * a.dx - a.m11 * a.dy); e = d.x * g + d.y * k + m; d = d.x * h + d.y * l + n; g = c.x * g + c.y * k + m; c = c.x * h + c.y * l + n; } b.ck(e, d, g, c, f); null !== a && f.transform(a); return f; }; function Xo(a, b) { var c = b.Ro; null === c && ((c = new Yo()), (c.port = b), (c.node = b.part), (b.Ro = c)); return Zo(c, a); } S.prototype.getLinkPoint = function (a, b, c, d, e, f, g, h) { void 0 === h && (h = new G()); if (c.gb() && !Vo(c)) return b.ma(c, h), h; if (c.sf()) { var k = Xo(this, b); if (null !== k) { h.assign(k.gq); if (e && this.routing === $o) { var l = Xo(this, g); if (null !== l && k.Wl < l.Wl) { k = G.alloc(); l = G.alloc(); var m = new N(b.ma(Tc, k), b.ma(hd, l)), n = this.computeSpot(!d, g); a = this.getLinkPoint(f, g, n, !d, e, a, b, l); (c.rf(jd) || c.rf(pd)) && a.y >= m.y && a.y <= m.y + m.height ? (h.y = a.y) : (c.rf(id) || c.rf(qd)) && a.x >= m.x && a.x <= m.x + m.width && (h.x = a.x); G.free(k); G.free(l); } } return h; } } c = b.ma(0.5 === c.x && 0.5 === c.y ? c : dd, G.alloc()); this.pointsCount > (e ? 6 : 2) ? ((g = d ? this.i(1) : this.i(this.pointsCount - 2)), e && (g = Wo(c, g.copy()))) : ((k = this.computeSpot(!d, g)), (f = G.alloc()), (g = g.ma(0.5 === k.x && 0.5 === k.y ? k : dd, f)), e && (g = Wo(c, g)), G.free(f)); this.getLinkPointFromPoint(a, b, c, g, d, h); G.free(c); return h; }; S.prototype.getLinkDirection = function (a, b, c, d, e, f, g, h) { a: if (d.gb()) var k = d.x > d.y ? d.x > 1 - d.y ? 0 : d.x < 1 - d.y ? 270 : 315 : d.x < d.y ? d.x > 1 - d.y ? 90 : d.x < 1 - d.y ? 180 : 135 : 0.5 > d.x ? 225 : 0.5 < d.x ? 45 : 0; else { if (d.sf() && ((k = Xo(this, b)), null !== k)) switch (k.yc) { case 1: k = 270; break a; case 2: k = 180; break a; default: case 4: k = 0; break a; case 8: k = 90; break a; } k = b.ma(dd, G.alloc()); this.pointsCount > (f ? 6 : 2) ? ((h = e ? this.i(1) : this.i(this.pointsCount - 2)), (h = f ? Wo(k, h.copy()) : c)) : ((c = G.alloc()), (h = h.ma(dd, c)), G.free(c)); c = Math.abs(h.x - k.x) > Math.abs(h.y - k.y) ? (h.x >= k.x ? 0 : 180) : h.y >= k.y ? 90 : 270; G.free(k); k = c; } d.jc() && g.Vd(a) && ((k += 180), 360 <= k && (k -= 360)); if (Vo(d)) return k; a = b.Li(); if (0 === a) return k; 45 <= a && 135 > a ? (k += 90) : 135 <= a && 225 > a ? (k += 180) : 225 <= a && 315 > a && (k += 270); 360 <= k && (k -= 360); return k; }; S.prototype.computeEndSegmentLength = function (a, b, c, d) { if (null !== b && c.sf() && ((a = Xo(this, b)), null !== a)) return a.Uu; a = d ? this.fromEndSegmentLength : this.toEndSegmentLength; null !== b && isNaN(a) && (a = d ? b.fromEndSegmentLength : b.toEndSegmentLength); isNaN(a) && (a = 10); return a; }; S.prototype.computeSpot = function (a, b) { void 0 === b && (b = null); a ? ((a = b ? b : this.fromPort), null === a ? (a = dd) : ((b = this.fromSpot), b.Kb() && (b = a.fromSpot), (a = b === Ed ? Sc : b))) : ((a = b ? b : this.toPort), null === a ? (a = dd) : ((b = this.toSpot), b.Kb() && (b = a.toSpot), (a = b === Ed ? Sc : b))); return a; }; function Vo(a) { return a === Sc || (0.5 === a.x && 0.5 === a.y); } S.prototype.computeOtherPoint = function (a, b) { a = b.ma(dd); b = b.Ro; b = null !== b ? Zo(b, this) : null; null !== b && (a = b.gq); return a; }; S.prototype.computeShortLength = function (a) { if (a) { a = this.fromShortLength; if (isNaN(a)) { var b = this.fromPort; null !== b && (a = b.fromShortLength); } return isNaN(a) ? 0 : a; } a = this.toShortLength; isNaN(a) && ((b = this.toPort), null !== b && (a = b.toShortLength)); return isNaN(a) ? 0 : a; }; S.prototype.pg = function (a, b, c, d, e, f) { if (!1 === this.pickable) return !1; void 0 === b && (b = null); void 0 === c && (c = null); var g = f; void 0 === f && ((g = Qc.alloc()), g.reset()); g.multiply(this.transform); if (this.vh(a, g)) return Vm(this, b, c, e), void 0 === f && Qc.free(g), !0; if (this.Ic(a, g)) { var h = !1; if (!this.isAtomic) for (var k = this.Y.j, l = k.length; l--; ) { var m = k[l]; if (m.visible || m === this.locationObject) { var n = m.actualBounds, p = this.naturalBounds; if (!(n.x > p.width || n.y > p.height || 0 > n.x + n.width || 0 > n.y + n.height)) { n = Qc.alloc(); n.set(g); if (m instanceof X) h = m.pg(a, b, c, d, e, n); else if (this.path === m) { if (m instanceof W) if (((h = a), (p = d), !1 === m.pickable)) h = !1; else if ((n.multiply(m.transform), p)) b: { var q = h, r = n; if (m.vh(q, r)) h = !0; else { if (void 0 === r && ((r = m.transform), q.nf(m.actualBounds))) { h = !0; break b; } h = q.left; p = q.right; var u = q.top; q = q.bottom; var x = G.alloc(), v = G.alloc(), z = G.alloc(), y = Qc.alloc(); y.set(r); y.ov(m.transform); y.at(); v.x = p; v.y = u; v.transform(y); x.x = h; x.y = u; x.transform(y); r = !1; pn(m, x, v, z) ? (r = !0) : ((x.x = p), (x.y = q), x.transform(y), pn(m, x, v, z) ? (r = !0) : ((v.x = h), (v.y = q), v.transform(y), pn(m, x, v, z) ? (r = !0) : ((x.x = h), (x.y = u), x.transform(y), pn(m, x, v, z) && (r = !0)))); Qc.free(y); G.free(x); G.free(v); G.free(z); h = r; } } else h = m.vh(h, n); } else h = Zk(m, a, d, n); h && ((p = m), null !== b && (p = b(m)), p && (null === c || c(p)) && e.add(p)); Qc.free(n); } } } void 0 === f && Qc.free(g); return h || null !== this.background || null !== this.areaBackground; } void 0 === f && Qc.free(g); return !1; }; S.prototype.computeCurve = function () { if (null === this.If) { var a = this.fromPort, b = this.isOrthogonal; this.If = null !== a && a === this.toPort && !b; } return this.If ? Rg : this.curve; }; S.prototype.computeCorner = function () { if (this.curve === Rg) return 0; var a = this.corner; if (isNaN(a) || 0 > a) a = 10; return a; }; S.prototype.findMidLabel = function () { for (var a = this.path, b = this.Y.j, c = b.length, d = 0; d < c; d++) { var e = b[d]; if (e !== a && !e.isPanelMain && (-Infinity === e.segmentIndex || isNaN(e.segmentIndex))) return e; } for (a = this.labelNodes; a.next(); ) if (((b = a.value), -Infinity === b.segmentIndex || isNaN(b.segmentIndex))) return b; return null; }; S.prototype.computeSpacing = function () { if (!this.isVisible()) return 0; var a = Math.max(14, this.computeThickness()); var b = this.fromPort, c = this.toPort; if (null !== b && null !== c) { var d = this.findMidLabel(); if (null !== d) { var e = d.naturalBounds, f = d.margin, g = isNaN(e.width) ? 30 : e.width * d.scale + f.left + f.right; e = isNaN(e.height) ? 14 : e.height * d.scale + f.top + f.bottom; d = d.segmentOrientation; d === rn || d === Po || d === Oo ? (a = Math.max(a, e)) : d === Em || d === Fm || d === Cm || d === Dm ? (a = Math.max(a, g)) : ((b = (b.ma(dd).Wa(c.ma(dd)) / 180) * Math.PI), (a = Math.max(a, Math.abs(Math.sin(b) * g) + Math.abs(Math.cos(b) * e) + 1))); this.curve === Rg && (a *= 1.333); } } return a; }; S.prototype.arrangeBundledLinks = function (a, b) { if (b) for (b = 0; b < a.length; b++) { var c = a[b]; c.adjusting === Og && c.Ra(); } }; S.prototype.computeCurviness = function () { var a = this.curviness; if (isNaN(a)) { a = 16; var b = this.zf; if (null !== b) { for (var c = Ka(), d = 0, e = b.links, f = 0; f < e.length; f++) { var g = e[f].computeSpacing(); c.push(g); d += g; } d = -d / 2; for (f = 0; f < e.length; f++) { if (e[f] === this) { a = d + c[f] / 2; break; } d += c[f]; } b.it === this.fromNode && (a = -a); Oa(c); } } return a; }; S.prototype.computeThickness = function () { if (!this.isVisible()) return 0; var a = this.path; return null !== a ? Math.max(a.strokeWidth, 1) : 1; }; S.prototype.hasCurviness = function () { return !isNaN(this.curviness) || null !== this.zf; }; S.prototype.adjustPoints = function (a, b, c, d) { var e = this.adjusting; if (this.isOrthogonal) { if (e === Mo) return !1; e === No && (e = Lo); } switch (e) { case Mo: var f = this.i(a), g = this.i(c); if (!f.Qa(b) || !g.Qa(d)) { e = f.x; f = f.y; var h = g.x - e, k = g.y - f, l = Math.sqrt(h * h + k * k); if (!H.ca(l, 0)) { if (H.ca(h, 0)) var m = 0 > k ? -Math.PI / 2 : Math.PI / 2; else (m = Math.atan(k / Math.abs(h))), 0 > h && (m = Math.PI - m); g = b.x; var n = b.y; h = d.x - g; var p = d.y - n; k = Math.sqrt(h * h + p * p); H.ca(h, 0) ? (p = 0 > p ? -Math.PI / 2 : Math.PI / 2) : ((p = Math.atan(p / Math.abs(h))), 0 > h && (p = Math.PI - p)); l = k / l; m = p - m; this.jd(a, b); for (a += 1; a < c; a++) (b = this.i(a)), (h = b.x - e), (k = b.y - f), (b = Math.sqrt(h * h + k * k)), H.ca(b, 0) || (H.ca(h, 0) ? (k = 0 > k ? -Math.PI / 2 : Math.PI / 2) : ((k = Math.atan(k / Math.abs(h))), 0 > h && (k = Math.PI - k)), (h = k + m), (b *= l), this.M(a, g + b * Math.cos(h), n + b * Math.sin(h))); this.jd(c, d); } } return !0; case No: f = this.i(a); n = this.i(c); if (!f.Qa(b) || !n.Qa(d)) { e = f.x; f = f.y; g = n.x; n = n.y; l = (g - e) * (g - e) + (n - f) * (n - f); h = b.x; m = b.y; k = d.x; p = d.y; var q = 1; if (0 !== k - h) { var r = (p - m) / (k - h); q = Math.sqrt(1 + 1 / (r * r)); } else r = 9e9; this.jd(a, b); for (a += 1; a < c; a++) { b = this.i(a); var u = b.x, x = b.y, v = 0.5; 0 !== l && (v = ((e - u) * (e - g) + (f - x) * (f - n)) / l); var z = e + v * (g - e), y = f + v * (n - f); b = Math.sqrt((u - z) * (u - z) + (x - y) * (x - y)); x < r * (u - z) + y && (b = -b); 0 < r && (b = -b); u = h + v * (k - h); v = m + v * (p - m); 0 !== r ? ((b = u + b / q), this.M(a, b, v - (b - u) / r)) : this.M(a, u, v + b); } this.jd(c, d); } return !0; case Lo: a: { if ( this.isOrthogonal && ((e = this.i(a)), (f = this.i(a + 1)), (g = this.i(a + 2)), (h = f.x), (m = f.y), (n = h), (l = m), H.w(e.y, f.y) ? H.w(f.x, g.x) ? (m = b.y) : H.w(f.y, g.y) && (h = b.x) : H.w(e.x, f.x) && (H.w(f.y, g.y) ? (h = b.x) : H.w(f.x, g.x) && (m = b.y)), this.M(a + 1, h, m), (e = this.i(c)), (f = this.i(c - 1)), (g = this.i(c - 2)), (h = f.x), (m = f.y), (k = h), (p = m), H.w(e.y, f.y) ? H.w(f.x, g.x) ? (m = d.y) : H.w(f.y, g.y) && (h = d.x) : H.w(e.x, f.x) && (H.w(f.y, g.y) ? (h = d.x) : H.w(f.x, g.x) && (m = d.y)), this.M(c - 1, h, m), Mj(this)) ) { this.M(a + 1, n, l); this.M(c - 1, k, p); c = !1; break a; } this.jd(a, b); this.jd(c, d); c = !0; } return c; default: return !1; } }; S.prototype.addOrthoPoints = function (a, b, c, d, e, f) { b = -45 <= b && 45 > b ? 0 : 45 <= b && 135 > b ? 90 : 135 <= b && 225 > b ? 180 : 270; d = -45 <= d && 45 > d ? 0 : 45 <= d && 135 > d ? 90 : 135 <= d && 225 > d ? 180 : 270; var g = e.actualBounds.copy(), h = f.actualBounds.copy(); if (g.o() && h.o()) { g.Uc(8, 8); h.Uc(8, 8); g.Je(a); h.Je(c); if (0 === b) if ( c.x > a.x || (270 === d && c.y < a.y && h.right > a.x) || (90 === d && c.y > a.y && h.right > a.x) ) { var k = new G(c.x, a.y); var l = new G(c.x, (a.y + c.y) / 2); 180 === d ? ((k.x = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1)), (l.x = k.x), (l.y = c.y)) : (270 === d && c.y < a.y) || (90 === d && c.y > a.y) ? ((k.x = a.x < h.left ? this.computeMidOrthoPosition(a.x, a.y, h.left, c.y, !1) : a.x < h.right && ((270 === d && a.y < h.top) || (90 === d && a.y > h.bottom)) ? this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1) : h.right), (l.x = k.x), (l.y = c.y)) : 0 === d && a.x < h.left && a.y > h.top && a.y < h.bottom && ((k.x = a.x), (k.y = a.y < c.y ? Math.min(c.y, h.top) : Math.max(c.y, h.bottom)), (l.y = k.y)); } else { k = new G(a.x, c.y); l = new G((a.x + c.x) / 2, c.y); if (180 === d || (90 === d && c.y < g.top) || (270 === d && c.y > g.bottom)) 180 === d && (h.da(a) || g.da(c)) ? (k.y = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0)) : c.y < a.y && (180 === d || 90 === d) ? (k.y = this.computeMidOrthoPosition(a.x, g.top, c.x, Math.max(c.y, h.bottom), !0)) : c.y > a.y && (180 === d || 270 === d) && (k.y = this.computeMidOrthoPosition(a.x, g.bottom, c.x, Math.min(c.y, h.top), !0)), (l.x = c.x), (l.y = k.y); if (k.y > g.top && k.y < g.bottom) if ((c.x >= g.left && c.x <= a.x) || (a.x <= h.right && a.x >= c.x)) { if (90 === d || 270 === d) (k = new G(Math.max((a.x + c.x) / 2, a.x), a.y)), (l = new G(k.x, c.y)); } else (k.y = 270 === d || ((0 === d || 180 === d) && c.y < a.y) ? Math.min(c.y, 0 === d ? g.top : Math.min(g.top, h.top)) : Math.max(c.y, 0 === d ? g.bottom : Math.max(g.bottom, h.bottom))), (l.x = c.x), (l.y = k.y); } else if (180 === b) if ( c.x < a.x || (270 === d && c.y < a.y && h.left < a.x) || (90 === d && c.y > a.y && h.left < a.x) ) (k = new G(c.x, a.y)), (l = new G(c.x, (a.y + c.y) / 2)), 0 === d ? ((k.x = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1)), (l.x = k.x), (l.y = c.y)) : (270 === d && c.y < a.y) || (90 === d && c.y > a.y) ? ((k.x = a.x > h.right ? this.computeMidOrthoPosition(a.x, a.y, h.right, c.y, !1) : a.x > h.left && ((270 === d && a.y < h.top) || (90 === d && a.y > h.bottom)) ? this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1) : h.left), (l.x = k.x), (l.y = c.y)) : 180 === d && a.x > h.right && a.y > h.top && a.y < h.bottom && ((k.x = a.x), (k.y = a.y < c.y ? Math.min(c.y, h.top) : Math.max(c.y, h.bottom)), (l.y = k.y)); else { k = new G(a.x, c.y); l = new G((a.x + c.x) / 2, c.y); if (0 === d || (90 === d && c.y < g.top) || (270 === d && c.y > g.bottom)) 0 === d && (h.da(a) || g.da(c)) ? (k.y = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0)) : c.y < a.y && (0 === d || 90 === d) ? (k.y = this.computeMidOrthoPosition(a.x, g.top, c.x, Math.max(c.y, h.bottom), !0)) : c.y > a.y && (0 === d || 270 === d) && (k.y = this.computeMidOrthoPosition(a.x, g.bottom, c.x, Math.min(c.y, h.top), !0)), (l.x = c.x), (l.y = k.y); if (k.y > g.top && k.y < g.bottom) if ((c.x <= g.right && c.x >= a.x) || (a.x >= h.left && a.x <= c.x)) { if (90 === d || 270 === d) (k = new G(Math.min((a.x + c.x) / 2, a.x), a.y)), (l = new G(k.x, c.y)); } else (k.y = 270 === d || ((0 === d || 180 === d) && c.y < a.y) ? Math.min(c.y, 180 === d ? g.top : Math.min(g.top, h.top)) : Math.max(c.y, 180 === d ? g.bottom : Math.max(g.bottom, h.bottom))), (l.x = c.x), (l.y = k.y); } else if (90 === b) if ( c.y > a.y || (180 === d && c.x < a.x && h.bottom > a.y) || (0 === d && c.x > a.x && h.bottom > a.y) ) (k = new G(a.x, c.y)), (l = new G((a.x + c.x) / 2, c.y)), 270 === d ? ((k.y = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0)), (l.x = c.x), (l.y = k.y)) : (180 === d && c.x < a.x) || (0 === d && c.x > a.x) ? ((k.y = a.y < h.top ? this.computeMidOrthoPosition(a.x, a.y, c.x, h.top, !0) : a.y < h.bottom && ((180 === d && a.x < h.left) || (0 === d && a.x > h.right)) ? this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0) : h.bottom), (l.x = c.x), (l.y = k.y)) : 90 === d && a.y < h.top && a.x > h.left && a.x < h.right && ((k.x = a.x < c.x ? Math.min(c.x, h.left) : Math.max(c.x, h.right)), (k.y = a.y), (l.x = k.x)); else { k = new G(c.x, a.y); l = new G(c.x, (a.y + c.y) / 2); if (270 === d || (0 === d && c.x < g.left) || (180 === d && c.x > g.right)) 270 === d && (h.da(a) || g.da(c)) ? (k.x = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1)) : c.x < a.x && (270 === d || 0 === d) ? (k.x = this.computeMidOrthoPosition(g.left, a.y, Math.max(c.x, h.right), c.y, !1)) : c.x > a.x && (270 === d || 180 === d) && (k.x = this.computeMidOrthoPosition(g.right, a.y, Math.min(c.x, h.left), c.y, !1)), (l.x = k.x), (l.y = c.y); if (k.x > g.left && k.x < g.right) if ((c.y >= g.top && c.y <= a.y) || (a.y <= h.bottom && a.y >= c.y)) { if (0 === d || 180 === d) (k = new G(a.x, Math.max((a.y + c.y) / 2, a.y))), (l = new G(c.x, k.y)); } else (k.x = 180 === d || ((90 === d || 270 === d) && c.x < a.x) ? Math.min(c.x, 90 === d ? g.left : Math.min(g.left, h.left)) : Math.max(c.x, 90 === d ? g.right : Math.max(g.right, h.right))), (l.x = k.x), (l.y = c.y); } else if ( c.y < a.y || (180 === d && c.x < a.x && h.top < a.y) || (0 === d && c.x > a.x && h.top < a.y) ) (k = new G(a.x, c.y)), (l = new G((a.x + c.x) / 2, c.y)), 90 === d ? ((k.y = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0)), (l.x = c.x), (l.y = k.y)) : (180 === d && c.x < a.x) || (0 === d && c.x >= a.x) ? ((k.y = a.y > h.bottom ? this.computeMidOrthoPosition(a.x, a.y, c.x, h.bottom, !0) : a.y > h.top && ((180 === d && a.x < h.left) || (0 === d && a.x > h.right)) ? this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !0) : h.top), (l.x = c.x), (l.y = k.y)) : 270 === d && a.y > h.bottom && a.x > h.left && a.x < h.right && ((k.x = a.x < c.x ? Math.min(c.x, h.left) : Math.max(c.x, h.right)), (k.y = a.y), (l.x = k.x)); else { k = new G(c.x, a.y); l = new G(c.x, (a.y + c.y) / 2); if (90 === d || (0 === d && c.x < g.left) || (180 === d && c.x > g.right)) 90 === d && (h.da(a) || g.da(c)) ? (k.x = this.computeMidOrthoPosition(a.x, a.y, c.x, c.y, !1)) : c.x < a.x && (90 === d || 0 === d) ? (k.x = this.computeMidOrthoPosition(g.left, a.y, Math.max(c.x, h.right), c.y, !1)) : c.x > a.x && (90 === d || 180 === d) && (k.x = this.computeMidOrthoPosition(g.right, a.y, Math.min(c.x, h.left), c.y, !1)), (l.x = k.x), (l.y = c.y); if (k.x > g.left && k.x < g.right) if ((c.y <= g.bottom && c.y >= a.y) || (a.y >= h.top && a.y <= c.y)) { if (0 === d || 180 === d) (k = new G(a.x, Math.min((a.y + c.y) / 2, a.y))), (l = new G(c.x, k.y)); } else (k.x = 180 === d || ((90 === d || 270 === d) && c.x < a.x) ? Math.min(c.x, 270 === d ? g.left : Math.min(g.left, h.left)) : Math.max(c.x, 270 === d ? g.right : Math.max(g.right, h.right))), (l.x = k.x), (l.y = c.y); } var m = k, n = l, p = c; if (this.isAvoiding) { var q = this.diagram; if ( null === q || !ik(q) || (g.da(p) && !f.Vd(e)) || (h.da(a) && !e.Vd(f)) || e === f || this.layer.isTemporary ) b = !1; else { var r = jk(q, !0, this.containingGroup, null); if ( r.fk( Math.min(a.x, m.x), Math.min(a.y, m.y), Math.abs(a.x - m.x), Math.abs(a.y - m.y), ) && r.fk( Math.min(m.x, n.x), Math.min(m.y, n.y), Math.abs(m.x - n.x), Math.abs(m.y - n.y), ) && r.fk(Math.min(n.x, p.x), Math.min(n.y, p.y), Math.abs(n.x - p.x), Math.abs(n.y - p.y)) ) b = !1; else { e = a; f = p; var u = (c = null); if (q.isVirtualized) { q = r.bounds.copy(); q.Uc(-r.Ul, -r.Tl); var x = G.alloc(); ap(r, a.x, a.y) || (H.Tc(q.x, q.y, q.x + q.width, q.y + q.height, a.x, a.y, m.x, m.y, x) ? ((c = a = x.copy()), (b = x.Wa(m))) : H.Tc(q.x, q.y, q.x + q.width, q.y + q.height, m.x, m.y, n.x, n.y, x) ? ((c = a = x.copy()), (b = x.Wa(n))) : H.Tc(q.x, q.y, q.x + q.width, q.y + q.height, n.x, n.y, p.x, p.y, x) && ((c = a = x.copy()), (b = x.Wa(p)))); ap(r, p.x, p.y) || (H.Tc(q.x, q.y, q.x + q.width, q.y + q.height, p.x, p.y, n.x, n.y, x) ? ((u = p = x.copy()), (d = n.Wa(x))) : H.Tc(q.x, q.y, q.x + q.width, q.y + q.height, n.x, n.y, m.x, m.y, x) ? ((u = p = x.copy()), (d = m.Wa(x))) : H.Tc(q.x, q.y, q.x + q.width, q.y + q.height, m.x, m.y, a.x, a.y, x) && ((u = p = x.copy()), (d = a.Wa(x)))); G.free(x); } g = g.copy().Jc(h); h = r.Sz; g.Uc(r.Ul * h, r.Tl * h); bp(r, a, b, p, d, g); h = cp(r, p.x, p.y); !r.abort && h >= dp && (mk(r), (h = r.vz), g.Uc(r.Ul * h, r.Tl * h), bp(r, a, b, p, d, g), (h = cp(r, p.x, p.y))); !r.abort && h >= dp && r.Yz && (mk(r), bp(r, a, b, p, d, r.bounds), (h = cp(r, p.x, p.y))); if (!r.abort && h < dp && cp(r, p.x, p.y) !== ep) { fp(this, r, p.x, p.y, d, !0); g = this.i(2); if (4 > this.pointsCount) 0 === b || 180 === b ? ((g.x = a.x), (g.y = p.y)) : ((g.x = p.x), (g.y = a.y)), this.M(2, g.x, g.y), this.m(3, g.x, g.y); else if (((p = this.i(3)), 0 === b || 180 === b)) H.w(g.x, p.x) ? ((g = 0 === b ? Math.max(g.x, a.x) : Math.min(g.x, a.x)), this.M(2, g, a.y), this.M(3, g, p.y)) : H.w(g.y, p.y) ? (Math.abs(a.y - g.y) <= r.Tl / 2 && (this.M(2, g.x, a.y), this.M(3, p.x, a.y)), this.m(2, g.x, a.y)) : this.M(2, a.x, g.y); else if (90 === b || 270 === b) H.w(g.y, p.y) ? ((g = 90 === b ? Math.max(g.y, a.y) : Math.min(g.y, a.y)), this.M(2, a.x, g), this.M(3, p.x, g)) : H.w(g.x, p.x) ? (Math.abs(a.x - g.x) <= r.Ul / 2 && (this.M(2, a.x, g.y), this.M(3, a.x, p.y)), this.m(2, a.x, g.y)) : this.M(2, g.x, a.y); null !== c && ((a = this.i(1)), (p = this.i(2)), a.x !== p.x && a.y !== p.y ? 0 === b || 180 === b ? this.m(2, a.x, p.y) : this.m(2, p.x, a.y) : 0 === b || 180 === b ? this.m(2, e.x, c.y) : this.m(2, c.x, e.y)); null !== u && (0 === d || 180 === d ? this.lf(f.x, u.y) : this.lf(u.x, f.y)); b = !0; } else b = !1; } } } else b = !1; b || (this.ze(k), this.ze(l)); } }; S.prototype.computeMidOrthoPosition = function (a, b, c, d, e) { var f = 0; this.hasCurviness() && (f = this.computeCurviness()); return e ? (b + d) / 2 + f : (a + c) / 2 + f; }; function Mj(a) { if (null === a.diagram || !a.isAvoiding || !ik(a.diagram)) return !1; var b = a.points.j, c = b.length; if (4 > c) return !1; a = jk(a.diagram, !0, a.containingGroup, null); for (var d = 1; d < c - 2; d++) { var e = b[d], f = b[d + 1]; if (!a.fk(Math.min(e.x, f.x), Math.min(e.y, f.y), Math.abs(e.x - f.x), Math.abs(e.y - f.y))) return !0; } return !1; } function fp(a, b, c, d, e, f) { var g = b.Ul, h = b.Tl, k = cp(b, c, d), l = c, m = d; for ( 0 === e ? (l += g) : 90 === e ? (m += h) : 180 === e ? (l -= g) : (m -= h); k > gp && cp(b, l, m) === k - 1; ) (c = l), (d = m), 0 === e ? (l += g) : 90 === e ? (m += h) : 180 === e ? (l -= g) : (m -= h), --k; if (f) { if (k > gp) if (180 === e || 0 === e) c = Math.floor(c / g) * g + g / 2; else if (90 === e || 270 === e) d = Math.floor(d / h) * h + h / 2; } else (c = Math.floor(c / g) * g + g / 2), (d = Math.floor(d / h) * h + h / 2); k > gp && ((f = e), (l = c), (m = d), 0 === e ? ((f = 90), (m += h)) : 90 === e ? ((f = 180), (l -= g)) : 180 === e ? ((f = 270), (m -= h)) : 270 === e && ((f = 0), (l += g)), cp(b, l, m) === k - 1 ? fp(a, b, l, m, f, !1) : ((l = c), (m = d), 0 === e ? ((f = 270), (m -= h)) : 90 === e ? ((f = 0), (l += g)) : 180 === e ? ((f = 90), (m += h)) : 270 === e && ((f = 180), (l -= g)), cp(b, l, m) === k - 1 && fp(a, b, l, m, f, !1))); a.lf(c, d); } S.prototype.Fy = function (a) { var b = a.x; a = a.y; for ( var c = this.i(0), d = this.i(1), e = Rb(b, a, c.x, c.y, d.x, d.y), f = 0, g = 1; g < this.pointsCount - 1; g++ ) { c = this.i(g + 1); var h = Rb(b, a, d.x, d.y, c.x, c.y); d = c; h < e && ((f = g), (e = h)); } return f; }; S.prototype.ac = function () { this.Pn = !0; }; S.prototype.hk = function (a) { if (!a) { if (!1 === this.Lc) return; a = this.zb(); if (!this.Pn && (null === a || null !== a.geometry)) return; } this.qa = this.makeGeometry(); a = this.path; if (null !== a) { a.qa = this.qa; for (var b = this.Y.j, c = b.length, d = 0; d < c; d++) { var e = b[d]; e !== a && e.isPanelMain && e instanceof W && (e.qa = this.qa); } } }; S.prototype.makeGeometry = function () { var a = this.qa, b = this.pointsCount; if (2 > b) return (a.type = ce), (this.Pn = !1), a; var c = !1, d = this.diagram; null !== d && Qo(this) && d.Xh.contains(this) && (0 !== this.xl.width || 0 !== this.xl.height) && (c = !0); var e = this.i(0).copy(), f = e.copy(); d = this.xb.j; var g = this.computeCurve(); if (g === Rg && 3 <= b && !H.ca(this.smoothness, 0)) if (3 === b) { var h = this.i(1); d = Math.min(e.x, h.x); var k = Math.min(e.y, h.y); h = this.i(2); d = Math.min(d, h.x); k = Math.min(k, h.y); } else { if (this.isOrthogonal) for (k = 0; k < b; k++) (h = d[k]), (f.x = Math.min(h.x, f.x)), (f.y = Math.min(h.y, f.y)); else for (d = 3; d < b; d += 3) d + 3 >= b && (d = b - 1), (k = this.i(d)), (f.x = Math.min(k.x, f.x)), (f.y = Math.min(k.y, f.y)); d = f.x; k = f.y; } else { for (k = 0; k < b; k++) (h = d[k]), (f.x = Math.min(h.x, f.x)), (f.y = Math.min(h.y, f.y)); d = f.x; k = f.y; } d -= this.zu.x; k -= this.zu.y; e.x -= d; e.y -= k; if (2 !== b || Qo(this)) { a.type = ae; h = ne(a); 0 !== this.computeShortLength(!0) && (e = hp(this, e, !0, f)); oe(h, e.x, e.y, !1); if (g === Rg && 3 <= b && !H.ca(this.smoothness, 0)) if (3 === b) (c = this.i(1)), (b = c.x - d), (c = c.y - k), (e = this.i(2).copy()), (e.x -= d), (e.y -= k), 0 !== this.computeShortLength(!1) && (e = hp(this, e, !1, f)), pe(h, b, c, b, c, e.x, e.y); else if (this.isOrthogonal) { f = new G(d, k); e = this.i(1).copy(); g = new G(d, k); b = new G(d, k); c = this.i(0); for (var l, m = this.smoothness / 3, n = 1; n < this.pointsCount - 1; n++) { l = this.i(n); var p = c, q = l, r = this.i(ip(this, l, n, !1)); if (!H.ca(p.x, q.x) || !H.ca(q.x, r.x)) if (!H.ca(p.y, q.y) || !H.ca(q.y, r.y)) { var u = m; isNaN(u) && (u = this.smoothness / 3); var x = p.x; p = p.y; var v = q.x; q = q.y; var z = r.x; r = r.y; var y = u * jp(x, p, v, q); u *= jp(v, q, z, r); H.ca(p, q) && H.ca(v, z) && (v > x ? r > q ? ((g.x = v - y), (g.y = q - y), (b.x = v + u), (b.y = q + u)) : ((g.x = v - y), (g.y = q + y), (b.x = v + u), (b.y = q - u)) : r > q ? ((g.x = v + y), (g.y = q - y), (b.x = v - u), (b.y = q + u)) : ((g.x = v + y), (g.y = q + y), (b.x = v - u), (b.y = q - u))); H.ca(x, v) && H.ca(q, r) && (q > p ? (z > v ? ((g.x = v - y), (g.y = q - y), (b.x = v + u)) : ((g.x = v + y), (g.y = q - y), (b.x = v - u)), (b.y = q + u)) : (z > v ? ((g.x = v - y), (g.y = q + y), (b.x = v + u)) : ((g.x = v + y), (g.y = q + y), (b.x = v - u)), (b.y = q - u))); if ((H.ca(x, v) && H.ca(v, z)) || (H.ca(p, q) && H.ca(q, r))) (x = 0.5 * (x + z)), (p = 0.5 * (p + r)), (g.x = x), (g.y = p), (b.x = x), (b.y = p); 1 === n ? ((e.x = 0.5 * (c.x + l.x)), (e.y = 0.5 * (c.y + l.y))) : 2 === n && H.ca(c.x, this.i(0).x) && H.ca(c.y, this.i(0).y) && ((e.x = 0.5 * (c.x + l.x)), (e.y = 0.5 * (c.y + l.y))); pe(h, e.x - d, e.y - k, g.x - d, g.y - k, l.x - d, l.y - k); f.set(g); e.set(b); c = l; } } f = c.x; c = c.y; e = this.i(this.pointsCount - 1); 0 !== this.computeShortLength(!1) && (e = hp(this, e.copy(), !1, ac)); f = 0.5 * (f + e.x); c = 0.5 * (c + e.y); pe(h, b.x - d, b.y - k, f - d, c - k, e.x - d, e.y - k); } else for (c = 3; c < b; c += 3) (f = this.i(c - 2)), c + 3 >= b && (c = b - 1), (e = this.i(c - 1)), (g = this.i(c)), c === b - 1 && 0 !== this.computeShortLength(!1) && (g = hp(this, g.copy(), !1, ac)), pe(h, f.x - d, f.y - k, e.x - d, e.y - k, g.x - d, g.y - k); else { f = G.alloc(); f.assign(this.i(0)); g = 1; for (e = 0; g < b; ) { g = ip(this, f, g, 1 < g); m = this.i(g); if (g >= b - 1) { if (!f.A(m)) 0 !== this.computeShortLength(!1) && (m = hp(this, m.copy(), !1, ac)), kp(this, h, -d, -k, f, m, c); else if (0 === e) for (g = 1; g < b; ) (m = this.i(g++)), kp(this, h, -d, -k, f, m, c), f.assign(m); break; } e = ip(this, m, g + 1, g < b - 3); g = -d; l = -k; n = this.i(e); x = c; H.w(f.y, m.y) && H.w(m.x, n.x) ? ((p = this.computeCorner()), (p = Math.min(p, Math.abs(m.x - f.x) / 2)), (p = u = Math.min(p, Math.abs(n.y - m.y) / 2)), H.w(p, 0) ? (kp(this, h, g, l, f, m, x), f.assign(m)) : ((v = m.x), (q = m.y), (z = v), (r = q), m.x > f.x ? (v = m.x - p) : (v = m.x + p), n.y > m.y ? (r = m.y + u) : (r = m.y - u), kp(this, h, g, l, f, new G(v, q), x), te(h, m.x + g, m.y + l, z + g, r + l), f.h(z, r))) : H.w(f.x, m.x) && H.w(m.y, n.y) ? ((p = this.computeCorner()), (p = Math.min(p, Math.abs(m.y - f.y) / 2)), (p = u = Math.min(p, Math.abs(n.x - m.x) / 2)), H.w(u, 0) ? (kp(this, h, g, l, f, m, x), f.assign(m)) : ((v = m.x), (q = m.y), (z = v), (r = q), m.y > f.y ? (q = m.y - p) : (q = m.y + p), n.x > m.x ? (z = m.x + u) : (z = m.x - u), kp(this, h, g, l, f, new G(v, q), x), te(h, m.x + g, m.y + l, z + g, r + l), f.h(z, r))) : (kp(this, h, g, l, f, m, x), f.assign(m)); g = e; } G.free(f); } we = h; } else (h = this.i(1).copy()), (h.x -= d), (h.y -= k), 0 !== this.computeShortLength(!0) && (e = hp(this, e, !0, f)), 0 !== this.computeShortLength(!1) && (h = hp(this, h, !1, f)), (a.type = ce), (a.startX = e.x), (a.startY = e.y), (a.endX = h.x), (a.endY = h.y); this.Pn = !1; return a; }; function jp(a, b, c, d) { a = c - a; if (isNaN(a) || Infinity === a || -Infinity === a) return NaN; 0 > a && (a = -a); b = d - b; if (isNaN(b) || Infinity === b || -Infinity === b) return NaN; 0 > b && (b = -b); return H.ca(a, 0) ? b : H.ca(b, 0) ? a : Math.sqrt(a * a + b * b); } function hp(a, b, c, d) { var e = a.pointsCount; if (2 > e) return b; if (c) { var f = a.i(1); c = f.x - d.x; f = f.y - d.y; d = jp(b.x, b.y, c, f); if (0 === d) return b; e = 2 === e ? 0.5 * d : d; a = a.computeShortLength(!0); a > e && (a = e); e = (a * (f - b.y)) / d; b.x += (a * (c - b.x)) / d; b.y += e; } else { f = a.i(e - 2); c = f.x - d.x; f = f.y - d.y; d = jp(b.x, b.y, c, f); if (0 === d) return b; e = 2 === e ? 0.5 * d : d; a = a.computeShortLength(!1); a > e && (a = e); e = (a * (b.y - f)) / d; b.x -= (a * (b.x - c)) / d; b.y -= e; } return b; } function ip(a, b, c, d) { for (var e = a.pointsCount, f = b; H.ca(b.x, f.x) && H.ca(b.y, f.y); ) { if (c >= e) return e - 1; f = a.i(c++); } if (!H.ca(b.x, f.x) && !H.ca(b.y, f.y)) return c - 1; for ( var g = f; (H.ca(b.x, f.x) && H.ca(f.x, g.x) && (!d || (b.y >= f.y ? f.y >= g.y : f.y <= g.y))) || (H.ca(b.y, f.y) && H.ca(f.y, g.y) && (!d || (b.x >= f.x ? f.x >= g.x : f.x <= g.x))); ) { if (c >= e) return e - 1; g = a.i(c++); } return c - 2; } function kp(a, b, c, d, e, f, g) { if (!g && Qo(a)) { g = []; var h = 0; a.isVisible() && (h = lp(a, e, f, g)); if (0 < h) if (H.w(e.y, f.y)) if (e.x < f.x) for (var k = 0; k < h; ) { var l = Math.max(e.x, Math.min(g[k++] - 5, f.x - 10)); b.lineTo(l + c, f.y + d); var m = l + c; for (var n = Math.min(l + 10, f.x); k < h; ) if (((l = g[k]), l < n + 10)) k++, (n = Math.min(l + 5, f.x)); else break; l = f.y - 10 + d; n += c; var p = f.y + d; a.curve === Ng ? oe(b, n, p, !1) : pe(b, m, l, n, l, n, p); } else for (--h; 0 <= h; ) { k = Math.min(e.x, Math.max(g[h--] + 5, f.x + 10)); b.lineTo(k + c, f.y + d); m = k + c; for (l = Math.max(k - 10, f.x); 0 <= h; ) if (((k = g[h]), k > l - 10)) h--, (l = Math.max(k - 5, f.x)); else break; k = f.y - 10 + d; l += c; n = f.y + d; a.curve === Ng ? oe(b, l, n, !1) : pe(b, m, k, l, k, l, n); } else if (H.w(e.x, f.x)) if (e.y < f.y) for (k = 0; k < h; ) { l = Math.max(e.y, Math.min(g[k++] - 5, f.y - 10)); b.lineTo(f.x + c, l + d); m = l + d; for (l = Math.min(l + 10, f.y); k < h; ) if (((n = g[k]), n < l + 10)) k++, (l = Math.min(n + 5, f.y)); else break; n = f.x - 10 + c; p = f.x + c; l += d; a.curve === Ng ? oe(b, p, l, !1) : pe(b, n, m, n, l, p, l); } else for (--h; 0 <= h; ) { k = Math.min(e.y, Math.max(g[h--] + 5, f.y + 10)); b.lineTo(f.x + c, k + d); m = k + d; for (k = Math.max(k - 10, f.y); 0 <= h; ) if (((l = g[h]), l > k - 10)) h--, (k = Math.max(l - 5, f.y)); else break; l = f.x - 10 + c; n = f.x + c; k += d; a.curve === Ng ? oe(b, n, k, !1) : pe(b, l, m, l, k, n, k); } } b.lineTo(f.x + c, f.y + d); } function lp(a, b, c, d) { var e = a.diagram; if (null === e || b.A(c)) return 0; for (e = e.layers; e.next(); ) { var f = e.value; if (null !== f && f.visible) { f = f.Fa.j; for (var g = f.length, h = 0; h < g; h++) { var k = f[h]; if (k instanceof S) { if (k === a) return ( 0 < d.length && d.sort(function (a, b) { return a - b; }), d.length ); if (k.isVisible() && Qo(k)) { var l = k.routeBounds; l.o() && a.routeBounds.Ic(l) && !a.usesSamePort(k) && ((l = k.path), null !== l && l.tf() && mp(b, c, d, k)); } } } } } 0 < d.length && d.sort(function (a, b) { return a - b; }); return d.length; } function mp(a, b, c, d) { for (var e = H.w(a.y, b.y), f = d.pointsCount, g = d.i(0), h = G.alloc(), k = 1; k < f; k++) { var l = d.i(k); if (k < f - 1) { var m = d.i(k + 1); if (g.y === l.y && l.y === m.y) { if ((l.x > g.x && m.x >= l.x) || (l.x < g.x && m.x <= l.x)) continue; } else if ( g.x === l.x && l.x === m.x && ((l.y > g.y && m.y >= l.y) || (l.y < g.y && m.y <= l.y)) ) continue; } a: { m = a.x; var n = a.y, p = b.x, q = b.y, r = g.x; g = g.y; var u = l.x, x = l.y; if (!H.w(m, p)) { if ( H.w(n, q) && H.w(r, u) && Math.min(m, p) < r && Math.max(m, p) > r && Math.min(g, x) < n && Math.max(g, x) > n && !H.w(g, x) ) { h.x = r; h.y = n; m = !0; break a; } } else if ( !H.w(n, q) && H.w(g, x) && Math.min(n, q) < g && Math.max(n, q) > g && Math.min(r, u) < m && Math.max(r, u) > m && !H.w(r, u) ) { h.x = m; h.y = g; m = !0; break a; } h.x = 0; h.y = 0; m = !1; } m && (e ? c.push(h.x) : c.push(h.y)); g = l; } G.free(h); } function Qo(a) { a = a.curve; return a === Mg || a === Ng; } function Uo(a, b) { if (b || Qo(a)) (b = a.diagram), null === b || b.animationManager.isTicking || b.Xh.contains(a) || (0 === a.xl.width && 0 === a.xl.height) || b.Xh.add(a, a.xl.copy()); } S.prototype.cq = function (a) { var b = this.layer; if (null !== b && b.visible && !b.isTemporary) { var c = b.diagram; if (null !== c && !c.animationManager.isAnimating) { var d = !1; for (c = c.layers; c.next(); ) { var e = c.value; if (e.visible) if (e === b) { d = !0; var f = !1; e = e.Fa.j; for (var g = e.length, h = 0; h < g; h++) { var k = e[h]; k instanceof S && (k === this ? (f = !0) : f && np(this, k, a)); } } else if (d) for (f = e.Fa.j, e = f.length, g = 0; g < e; g++) (h = f[g]), h instanceof S && np(this, h, a); } } } }; function np(a, b, c) { if (null !== b && null !== b.qa && Qo(b)) { var d = b.routeBounds; d.o() && (a.routeBounds.Ic(d) || c.Ic(d)) && (a.usesSamePort(b) || b.ac()); } } S.prototype.usesSamePort = function (a) { var b = this.pointsCount, c = a.pointsCount; if (0 < b && 0 < c) { var d = this.i(0), e = a.i(0); if (d.Qa(e)) return !0; b = this.i(b - 1); a = a.i(c - 1); if (b.Qa(a) || d.Qa(a) || b.Qa(e)) return !0; } else if ( this.fromNode === a.fromNode || this.toNode === a.toNode || this.fromNode === a.toNode || this.toNode === a.fromNode ) return !0; return !1; }; S.prototype.isVisible = function () { if (!T.prototype.isVisible.call(this)) return !1; var a = this.containingGroup, b = !0, c = this.diagram; null !== c && (b = c.isTreePathToChildren); c = this.fromNode; if (null !== c) { if (this.isTreeLink && b && !c.isTreeExpanded) return !1; if (c === a) return !0; for (var d = c; null !== d; ) { if (d.labeledLink === this) return !0; d = d.containingGroup; } c = c.findVisibleNode(); if (null === c || c === a) return !1; } c = this.toNode; if (null !== c) { if (this.isTreeLink && !b && !c.isTreeExpanded) return !1; if (c === a) return !0; for (b = c; null !== b; ) { if (b.labeledLink === this) return !0; b = b.containingGroup; } b = c.findVisibleNode(); if (null === b || b === a) return !1; } return !0; }; S.prototype.Lb = function (a) { T.prototype.Lb.call(this, a); null !== this.zf && this.zf.cm(); if (null !== this.$c) for (var b = this.$c.iterator; b.next(); ) b.value.Lb(a); }; function Ro(a) { var b = a.Pe; if (null !== b) { var c = a.gf; if (null !== c) { for (var d = a.Qe, e = a.hf, f = (a = null), g = b.Ya.j, h = g.length, k = 0; k < h; k++) { var l = g[k]; if ( (l.Pe === b && l.Qe === d && l.gf === c && l.hf === e) || (l.Pe === c && l.Qe === e && l.gf === b && l.hf === d) ) null === f ? (f = l) : (null === a && ((a = []), a.push(f)), a.push(l)); } if (null !== a) { f = wo(b, c, d, e); null === f && ((f = new op(b, d, c, e)), vo(b, f), vo(c, f)); f.links = a; for (b = 0; b < a.length; b++) a[b].zf = f; f.cm(); } } } } function So(a) { var b = a.zf; null !== b && ((a.zf = null), (a = b.links.indexOf(a)), 0 <= a && (Ja(b.links, a), b.cm())); } S.prototype.Ah = function () { return !0; }; pa.Object.defineProperties(S.prototype, { fromNode: { get: function () { return this.Pe; }, set: function (a) { var b = this.Pe; if (b !== a) { var c = this.fromPort; null !== b && (this.gf !== b && zo(b, this, c), So(this), this.B(2)); this.Pe = a; null !== a && this.Lb(a.isVisible()); this.If = null; this.Ra(); var d = this.diagram; null !== d && d.partManager.setFromNodeForLink(this, a, b); var e = this.fromPort, f = this.fromPortChanged; if (null !== f) { var g = !0; null !== d && ((g = d.ea), (d.ea = !0)); f(this, c, e); null !== d && (d.ea = g); } null !== a && (this.gf !== a && yo(a, this, e), Ro(this), this.B(1)); this.g('fromNode', b, a); to(this); } }, }, fromPortId: { get: function () { return this.Qe; }, set: function (a) { var b = this.Qe; if (b !== a) { var c = this.fromPort; null !== c && xo(this.fromNode, c); So(this); this.Qe = a; var d = this.fromPort; null !== d && xo(this.fromNode, d); var e = this.diagram; if (null !== e) { var f = this.data, g = e.model; null !== f && g.em() && g.Ex(f, a); } c !== d && ((this.If = null), this.Ra(), (f = this.fromPortChanged), null !== f && ((g = !0), null !== e && ((g = e.ea), (e.ea = !0)), f(this, c, d), null !== e && (e.ea = g))); Ro(this); this.g('fromPortId', b, a); } }, }, fromPort: { get: function () { var a = this.Pe; return null === a ? null : a.Ss(this.Qe); }, }, fromPortChanged: { get: function () { return this.En; }, set: function (a) { var b = this.En; b !== a && ((this.En = a), this.g('fromPortChanged', b, a)); }, }, toNode: { get: function () { return this.gf; }, set: function (a) { var b = this.gf; if (b !== a) { var c = this.toPort; null !== b && (this.Pe !== b && zo(b, this, c), So(this), this.B(2)); this.gf = a; null !== a && this.Lb(a.isVisible()); this.If = null; this.Ra(); var d = this.diagram; null !== d && d.partManager.setToNodeForLink(this, a, b); var e = this.toPort, f = this.toPortChanged; if (null !== f) { var g = !0; null !== d && ((g = d.ea), (d.ea = !0)); f(this, c, e); null !== d && (d.ea = g); } null !== a && (this.Pe !== a && yo(a, this, e), Ro(this), this.B(1)); this.g('toNode', b, a); to(this); } }, }, toPortId: { get: function () { return this.hf; }, set: function (a) { var b = this.hf; if (b !== a) { var c = this.toPort; null !== c && xo(this.toNode, c); So(this); this.hf = a; var d = this.toPort; null !== d && xo(this.toNode, d); var e = this.diagram; if (null !== e) { var f = this.data, g = e.model; null !== f && g.em() && g.Ix(f, a); } c !== d && ((this.If = null), this.Ra(), (f = this.toPortChanged), null !== f && ((g = !0), null !== e && ((g = e.ea), (e.ea = !0)), f(this, c, d), null !== e && (e.ea = g))); Ro(this); this.g('toPortId', b, a); } }, }, toPort: { get: function () { var a = this.gf; return null === a ? null : a.Ss(this.hf); }, }, toPortChanged: { get: function () { return this.Dp; }, set: function (a) { var b = this.Dp; b !== a && ((this.Dp = a), this.g('toPortChanged', b, a)); }, }, fromSpot: { get: function () { return null !== this.P ? this.P.Og : Ed; }, set: function (a) { this.Hc(); var b = this.P.Og; b.A(a) || ((a = a.I()), (this.P.Og = a), this.g('fromSpot', b, a), this.Ra()); }, }, fromEndSegmentLength: { get: function () { return null !== this.P ? this.P.Mg : NaN; }, set: function (a) { this.Hc(); var b = this.P.Mg; b !== a && (0 > a && ya(a, '>= 0', S, 'fromEndSegmentLength'), (this.P.Mg = a), this.g('fromEndSegmentLength', b, a), this.Ra()); }, }, fromShortLength: { get: function () { return null !== this.P ? this.P.Ng : NaN; }, set: function (a) { this.Hc(); var b = this.P.Ng; b !== a && ((this.P.Ng = a), this.g('fromShortLength', b, a), this.Ra(), this.ac()); }, }, toSpot: { get: function () { return null !== this.P ? this.P.nh : Ed; }, set: function (a) { this.Hc(); var b = this.P.nh; b.A(a) || ((a = a.I()), (this.P.nh = a), this.g('toSpot', b, a), this.Ra()); }, }, toEndSegmentLength: { get: function () { return null !== this.P ? this.P.lh : NaN; }, set: function (a) { this.Hc(); var b = this.P.lh; b !== a && (0 > a && ya(a, '>= 0', S, 'toEndSegmentLength'), (this.P.lh = a), this.g('toEndSegmentLength', b, a), this.Ra()); }, }, toShortLength: { get: function () { return null !== this.P ? this.P.mh : NaN; }, set: function (a) { this.Hc(); var b = this.P.mh; b !== a && ((this.P.mh = a), this.g('toShortLength', b, a), this.Ra(), this.ac()); }, }, isLabeledLink: { get: function () { return null === this.$c ? !1 : 0 < this.$c.count; }, }, labelNodes: { get: function () { return null === this.$c ? xb : this.$c.iterator; }, }, relinkableFrom: { get: function () { return 0 !== (this.Ta & 1); }, set: function (a) { var b = 0 !== (this.Ta & 1); b !== a && ((this.Ta ^= 1), this.g('relinkableFrom', b, a), this.Jb()); }, }, relinkableTo: { get: function () { return 0 !== (this.Ta & 2); }, set: function (a) { var b = 0 !== (this.Ta & 2); b !== a && ((this.Ta ^= 2), this.g('relinkableTo', b, a), this.Jb()); }, }, resegmentable: { get: function () { return 0 !== (this.Ta & 4); }, set: function (a) { var b = 0 !== (this.Ta & 4); b !== a && ((this.Ta ^= 4), this.g('resegmentable', b, a), this.Jb()); }, }, isTreeLink: { get: function () { return 0 !== (this.Ta & 8); }, set: function (a) { var b = 0 !== (this.Ta & 8); b !== a && ((this.Ta ^= 8), this.g('isTreeLink', b, a), null !== this.fromNode && uk(this.fromNode), null !== this.toNode && uk(this.toNode)); }, }, path: { get: function () { var a = this.zb(); return a instanceof W ? a : null; }, }, routeBounds: { get: function () { this.Zi(); var a = this.xl, b = Infinity, c = Infinity, d = this.pointsCount; if (0 === d) a.h(NaN, NaN, 0, 0); else { if (1 === d) (d = this.i(0)), (b = Math.min(d.x, b)), (c = Math.min(d.y, c)), a.h(d.x, d.y, 0, 0); else if (2 === d) { d = this.i(0); var e = this.i(1); b = Math.min(d.x, e.x); c = Math.min(d.y, e.y); a.h(d.x, d.y, 0, 0); a.Je(e); } else if (this.computeCurve() === Rg && 3 <= d && !this.isOrthogonal) if (((e = this.i(0)), (b = e.x), (c = e.y), a.h(b, c, 0, 0), 3 === d)) { d = this.i(1); b = Math.min(d.x, b); c = Math.min(d.y, c); var f = this.i(2); b = Math.min(f.x, b); c = Math.min(f.y, c); H.Sl(e.x, e.y, d.x, d.y, d.x, d.y, f.x, f.y, 0.5, a); } else for (f = 3; f < d; f += 3) { var g = this.i(f - 2); f + 3 >= d && (f = d - 1); var h = this.i(f - 1), k = this.i(f); H.Sl(e.x, e.y, g.x, g.y, h.x, h.y, k.x, k.y, 0.5, a); b = Math.min(k.x, b); c = Math.min(k.y, c); e = k; } else for ( e = this.i(0), f = this.i(1), b = Math.min(e.x, f.x), c = Math.min(e.y, f.y), a.h(e.x, e.y, 0, 0), a.Je(f), e = 2; e < d; e++ ) (f = this.i(e)), (b = Math.min(f.x, b)), (c = Math.min(f.y, c)), a.Je(f); this.zu.h(b - a.x, c - a.y); } return a; }, }, midPoint: { get: function () { this.Zi(); return this.computeMidPoint(new G()); }, }, midAngle: { get: function () { this.Zi(); return this.computeMidAngle(); }, }, flattenedLengths: { get: function () { if (null === this.qr) { this.Lc || To(this); for (var a = (this.qr = []), b = this.pointsCount, c = 0; c < b - 1; c++) { var d = this.i(c); var e = this.i(c + 1); H.ca(d.x, e.x) ? ((d = e.y - d.y), 0 > d && (d = -d)) : H.ca(d.y, e.y) ? ((d = e.x - d.x), 0 > d && (d = -d)) : (d = Math.sqrt(d.Ce(e))); a.push(d); } } return this.qr; }, }, flattenedTotalLength: { get: function () { var a = this.$t; if (isNaN(a)) { for (var b = this.flattenedLengths, c = b.length, d = (a = 0); d < c; d++) a += b[d]; this.$t = a; } return a; }, }, points: { get: function () { return this.xb; }, set: function (a) { var b = this.xb; if (b !== a) { var c = null; if (Array.isArray(a)) { var d = 0 === a.length % 2; if (d) for (var e = 0; e < a.length; e++) if ('number' !== typeof a[e] || isNaN(a[e])) { d = !1; break; } if (d) for (c = new E(), d = 0; d < a.length / 2; d++) (e = new G(a[2 * d], a[2 * d + 1]).freeze()), c.add(e); else { d = !0; for (e = 0; e < a.length; e++) { var f = a[e]; if ( !Ca(f) || 'number' !== typeof f.x || isNaN(f.x) || 'number' !== typeof f.y || isNaN(f.y) ) { d = !1; break; } } if (d) for (c = new E(), d = 0; d < a.length; d++) (e = a[d]), c.add(new G(e.x, e.y).freeze()); } } else if (a instanceof E) for (c = a.copy(), a = c.iterator; a.next(); ) a.value.freeze(); else A('Link.points value is not an instance of List or Array: ' + a); c.freeze(); this.xb = c; this.ac(); this.s(); To(this); a = this.diagram; null !== a && (a.Qi || a.undoManager.isUndoingRedoing || a.ft.add(this), a.animationManager.rb && (this.bh = c)); this.g('points', b, c); } }, }, pointsCount: { get: function () { return this.xb.count; }, }, Lc: { get: function () { return 0 !== (this.Ta & 16); }, set: function (a) { (0 !== (this.Ta & 16)) !== a && (this.Ta ^= 16); }, }, suspendsRouting: { get: function () { return 0 !== (this.Ta & 32); }, set: function (a) { (0 !== (this.Ta & 32)) !== a && (this.Ta ^= 32); }, }, Pu: { get: function () { return 0 !== (this.Ta & 64); }, set: function (a) { (0 !== (this.Ta & 64)) !== a && (this.Ta ^= 64); }, }, defaultFromPoint: { get: function () { return this.u; }, set: function (a) { this.u = a.copy(); }, }, defaultToPoint: { get: function () { return this.K; }, set: function (a) { this.K = a.copy(); }, }, isOrthogonal: { get: function () { return 2 === (this.Fj.value & 2); }, }, isAvoiding: { get: function () { return 4 === (this.Fj.value & 4); }, }, geometry: { get: function () { this.Pn && (this.Zi(), (this.qa = this.makeGeometry())); return this.qa; }, }, firstPickIndex: { get: function () { return 2 >= this.pointsCount ? 0 : this.isOrthogonal || !Vo(this.computeSpot(!0)) ? 1 : 0; }, }, lastPickIndex: { get: function () { var a = this.pointsCount; return 0 === a ? 0 : 2 >= a ? a - 1 : this.isOrthogonal || !Vo(this.computeSpot(!1)) ? a - 2 : a - 1; }, }, adjusting: { get: function () { return this.Lm; }, set: function (a) { var b = this.Lm; b !== a && ((this.Lm = a), this.g('adjusting', b, a)); }, }, corner: { get: function () { return this.fn; }, set: function (a) { var b = this.fn; b !== a && ((this.fn = a), this.ac(), this.g('corner', b, a)); }, }, curve: { get: function () { return this.jn; }, set: function (a) { var b = this.jn; b !== a && ((this.jn = a), this.Ra(), this.ac(), Uo(this, b === Ng || b === Mg || a === Ng || a === Mg), this.g('curve', b, a)); }, }, curviness: { get: function () { return this.kn; }, set: function (a) { var b = this.kn; b !== a && ((this.kn = a), this.Ra(), this.ac(), this.g('curviness', b, a)); }, }, routing: { get: function () { return this.Fj; }, set: function (a) { var b = this.Fj; b !== a && ((this.Fj = a), (this.If = null), this.Ra(), Uo(this, 2 === (b.value & 2) || 2 === (a.value & 2)), this.g('routing', b, a)); }, }, smoothness: { get: function () { return this.rp; }, set: function (a) { var b = this.rp; b !== a && ((this.rp = a), this.ac(), this.g('smoothness', b, a)); }, }, key: { get: function () { var a = this.diagram; if (null !== a && a.model.em()) return a.model.ic(this.data); }, }, }); S.prototype.invalidateOtherJumpOvers = S.prototype.cq; S.prototype.findClosestSegment = S.prototype.Fy; S.prototype.updateRoute = S.prototype.Zi; S.prototype.invalidateRoute = S.prototype.Ra; S.prototype.rollbackRoute = S.prototype.zx; S.prototype.commitRoute = S.prototype.mf; S.prototype.startRoute = S.prototype.Ch; S.prototype.clearPoints = S.prototype.Uj; S.prototype.removePoint = S.prototype.Av; S.prototype.addPointAt = S.prototype.lf; S.prototype.addPoint = S.prototype.ze; S.prototype.insertPointAt = S.prototype.m; S.prototype.insertPoint = S.prototype.mz; S.prototype.setPointAt = S.prototype.M; S.prototype.setPoint = S.prototype.jd; S.prototype.getPoint = S.prototype.i; S.prototype.getOtherPort = S.prototype.bz; S.prototype.getOtherNode = S.prototype.Ws; var Ko = new D(S, 'Normal', 1), pp = new D(S, 'Orthogonal', 2), qp = new D(S, 'AvoidsNodes', 6), $o = new D(S, 'AvoidsNodesStraight', 7), Og = new D(S, 'None', 0), Rg = new D(S, 'Bezier', 9), Ng = new D(S, 'JumpGap', 10), Mg = new D(S, 'JumpOver', 11), Lo = new D(S, 'End', 17), Mo = new D(S, 'Scale', 18), No = new D(S, 'Stretch', 19), rn = new D(S, 'OrientAlong', 21), Cm = new D(S, 'OrientPlus90', 22), Em = new D(S, 'OrientMinus90', 23), Oo = new D(S, 'OrientOpposite', 24), Po = new D(S, 'OrientUpright', 25), Dm = new D(S, 'OrientPlus90Upright', 26), Fm = new D(S, 'OrientMinus90Upright', 27), Gm = new D(S, 'OrientUpright45', 28); S.className = 'Link'; S.Normal = Ko; S.Orthogonal = pp; S.AvoidsNodes = qp; S.AvoidsNodesStraight = $o; S.None = Og; S.Bezier = Rg; S.JumpGap = Ng; S.JumpOver = Mg; S.End = Lo; S.Scale = Mo; S.Stretch = No; S.OrientAlong = rn; S.OrientPlus90 = Cm; S.OrientMinus90 = Em; S.OrientOpposite = Oo; S.OrientUpright = Po; S.OrientPlus90Upright = Dm; S.OrientMinus90Upright = Fm; S.OrientUpright45 = Gm; function op(a, b, c, d) { nb(this); this.ie = this.Br = !1; this.it = a; this.vx = b; this.pv = c; this.wx = d; this.links = []; } op.prototype.cm = function () { if (!this.Br) { var a = this.links; 0 < a.length && ((a = a[0].diagram), null !== a && (a.yw.add(this), (this.ie = a.undoManager.isUndoingRedoing))); } this.Br = !0; }; op.prototype.Zv = function () { if (this.Br) { this.Br = !1; var a = this.links; if (0 < a.length) { var b = a[0], c = b.diagram; c = null === c || (c.Qi && !this.ie); this.ie = !1; b.arrangeBundledLinks(a, c); 1 === a.length && ((b.zf = null), (a.length = 0)); } 0 === a.length && ((a = this.it), null !== this && null !== a.Me && a.Me.remove(this), (a = this.pv), null !== this && null !== a.Me && a.Me.remove(this)); } }; op.className = 'LinkBundle'; function kk() { nb(this); this.Jx = this.group = null; this.$s = !0; this.abort = !1; this.Kd = this.Jd = 1; this.lo = this.ko = -1; this.lc = this.kc = 8; this.Bb = [[]]; this.Nj = this.Mj = 0; this.Yz = !1; this.Sz = 22; this.vz = 111; } kk.prototype.initialize = function (a) { if (!(0 >= a.width || 0 >= a.height)) { var b = a.y, c = a.x + a.width, d = a.y + a.height; this.Jd = Math.floor((a.x - this.kc) / this.kc) * this.kc; this.Kd = Math.floor((b - this.lc) / this.lc) * this.lc; this.ko = Math.ceil((c + 2 * this.kc) / this.kc) * this.kc; this.lo = Math.ceil((d + 2 * this.lc) / this.lc) * this.lc; a = 1 + (Math.ceil((this.ko - this.Jd) / this.kc) | 0); b = 1 + (Math.ceil((this.lo - this.Kd) / this.lc) | 0); if (null === this.Bb || this.Mj < a - 1 || this.Nj < b - 1) { c = []; for (d = 0; d <= a; d++) c[d] = []; this.Bb = c; this.Mj = a - 1; this.Nj = b - 1; } a = rp; if (null !== this.Bb) for (b = 0; b <= this.Mj; b++) for (c = 0; c <= this.Nj; c++) this.Bb[b][c] = a; } }; function ap(a, b, c) { return a.Jd <= b && b <= a.ko && a.Kd <= c && c <= a.lo; } function cp(a, b, c) { if (!ap(a, b, c)) return rp; b -= a.Jd; b /= a.kc; c -= a.Kd; c /= a.lc; return a.Bb[b | 0][c | 0]; } function nk(a, b, c) { ap(a, b, c) && ((b -= a.Jd), (b /= a.kc), (c -= a.Kd), (c /= a.lc), (a.Bb[b | 0][c | 0] = ep)); } function mk(a) { if (null !== a.Bb) for (var b = 0; b <= a.Mj; b++) for (var c = 0; c <= a.Nj; c++) a.Bb[b][c] >= gp && (a.Bb[b][c] = rp); } kk.prototype.fk = function (a, b, c, d) { if (a > this.ko || a + c < this.Jd || b > this.lo || b + d < this.Kd) return !0; a = ((a - this.Jd) / this.kc) | 0; b = ((b - this.Kd) / this.lc) | 0; c = (Math.max(0, c) / this.kc + 1) | 0; var e = (Math.max(0, d) / this.lc + 1) | 0; 0 > a && ((c += a), (a = 0)); 0 > b && ((e += b), (b = 0)); if (0 > c || 0 > e) return !0; d = Math.min(a + c - 1, this.Mj) | 0; for (c = Math.min(b + e - 1, this.Nj) | 0; a <= d; a++) for (e = b; e <= c; e++) if (this.Bb[a][e] === ep) return !1; return !0; }; function sp(a, b, c, d, e, f, g, h, k) { if (!(b < f || b > g || c < h || c > k)) { var l = b | 0; var m = c | 0; var n = a.Bb[l][m]; if (n >= gp && n < dp) for ( e ? (m += d) : (l += d), n += 1; f <= l && l <= g && h <= m && m <= k && !(n >= a.Bb[l][m]); ) (a.Bb[l][m] = n), (n += 1), e ? (m += d) : (l += d); l = e ? m : l; if (e) if (0 < d) for (c += d; c < l; c += d) sp(a, b, c, 1, !e, f, g, h, k), sp(a, b, c, -1, !e, f, g, h, k); else for (c += d; c > l; c += d) sp(a, b, c, 1, !e, f, g, h, k), sp(a, b, c, -1, !e, f, g, h, k); else if (0 < d) for (b += d; b < l; b += d) sp(a, b, c, 1, !e, f, g, h, k), sp(a, b, c, -1, !e, f, g, h, k); else for (b += d; b > l; b += d) sp(a, b, c, 1, !e, f, g, h, k), sp(a, b, c, -1, !e, f, g, h, k); } } function tp(a, b, c, d, e, f, g, h, k) { b |= 0; c |= 0; var l = ep, m = gp; for (a.Bb[b][c] = m; l === ep && b > f && b < g && c > h && c < k; ) (m += 1), (a.Bb[b][c] = m), e ? (c += d) : (b += d), (l = a.Bb[b][c]); } function up(a, b, c, d, e, f, g, h, k) { b |= 0; c |= 0; var l = ep, m = dp; for (a.Bb[b][c] = m; l === ep && b > f && b < g && c > h && c < k; ) (a.Bb[b][c] = m), e ? (c += d) : (b += d), (l = a.Bb[b][c]); } function bp(a, b, c, d, e, f) { if (null !== a.Bb) { a.abort = !1; var g = b.x, h = b.y; if ( ap(a, g, h) && ((g -= a.Jd), (g /= a.kc), (h -= a.Kd), (h /= a.lc), (b = d.x), (d = d.y), ap(a, b, d)) ) if ( ((b -= a.Jd), (b /= a.kc), (d -= a.Kd), (d /= a.lc), 1 >= Math.abs(g - b) && 1 >= Math.abs(h - d)) ) a.abort = !0; else { var k = f.x, l = f.y, m = f.x + f.width, n = f.y + f.height; k -= a.Jd; k /= a.kc; l -= a.Kd; l /= a.lc; m -= a.Jd; m /= a.kc; n -= a.Kd; n /= a.lc; f = Math.max(0, Math.min(a.Mj, k | 0)); m = Math.min(a.Mj, Math.max(0, m | 0)); l = Math.max(0, Math.min(a.Nj, l | 0)); n = Math.min(a.Nj, Math.max(0, n | 0)); g |= 0; h |= 0; b |= 0; d |= 0; k = 0 === c || 90 === c ? 1 : -1; c = 90 === c || 270 === c; a.Bb[g][h] === ep ? (tp(a, g, h, k, c, f, m, l, n), tp(a, g, h, 1, !c, f, m, l, n), tp(a, g, h, -1, !c, f, m, l, n)) : tp(a, g, h, k, c, g, h, g, h); a.Bb[b][d] === ep ? (up(a, b, d, 0 === e || 90 === e ? 1 : -1, 90 === e || 270 === e, f, m, l, n), up(a, b, d, 1, !(90 === e || 270 === e), f, m, l, n), up(a, b, d, -1, !(90 === e || 270 === e), f, m, l, n)) : up(a, b, d, k, c, b, d, b, d); a.abort || (sp(a, g, h, 1, !1, f, m, l, n), sp(a, g, h, -1, !1, f, m, l, n), sp(a, g, h, 1, !0, f, m, l, n), sp(a, g, h, -1, !0, f, m, l, n)); } } } pa.Object.defineProperties(kk.prototype, { bounds: { get: function () { return new N(this.Jd, this.Kd, this.ko - this.Jd, this.lo - this.Kd); }, }, Ul: { get: function () { return this.kc; }, set: function (a) { 0 < a && a !== this.kc && ((this.kc = a), this.initialize(this.bounds)); }, }, Tl: { get: function () { return this.lc; }, set: function (a) { 0 < a && a !== this.lc && ((this.lc = a), this.initialize(this.bounds)); }, }, }); var ep = 0, gp = 1, dp = 999999, rp = dp + 1; kk.className = 'PositionArray'; function Yo() { nb(this); this.port = this.node = null; this.Wd = []; this.iq = !1; } Yo.prototype.toString = function () { for ( var a = this.Wd, b = this.node.toString() + ' ' + a.length.toString() + ':', c = 0; c < a.length; c++ ) { var d = a[c]; null !== d && (b += '\n ' + d.toString()); } return b; }; function vp(a, b, c, d) { b = b.offsetY; switch (b) { case 8: return 90; case 2: return 180; case 1: return 270; case 4: return 0; } switch (b) { case 9: return 180 < c ? 270 : 90; case 6: return 90 < c && 270 >= c ? 180 : 0; } a = (180 * Math.atan2(a.height, a.width)) / Math.PI; switch (b) { case 3: return c > a && c <= 180 + a ? 180 : 270; case 5: return c > 180 - a && c <= 360 - a ? 270 : 0; case 12: return c > a && c <= 180 + a ? 90 : 0; case 10: return c > 180 - a && c <= 360 - a ? 180 : 90; case 7: return 90 < c && c <= 180 + a ? 180 : c > 180 + a && c <= 360 - a ? 270 : 0; case 13: return 180 < c && c <= 360 - a ? 270 : c > a && 180 >= c ? 90 : 0; case 14: return c > a && c <= 180 - a ? 90 : c > 180 - a && 270 >= c ? 180 : 0; case 11: return c > 180 - a && c <= 180 + a ? 180 : c > 180 + a ? 270 : 90; } d && 15 !== b && ((c -= 15), 0 > c && (c += 360)); return c > a && c < 180 - a ? 90 : c >= 180 - a && c <= 180 + a ? 180 : c > 180 + a && c < 360 - a ? 270 : 0; } Yo.prototype.cm = function () { this.Wd.length = 0; }; function Zo(a, b) { var c = a.Wd; if (0 === c.length) { a: if (!a.iq) { c = a.iq; a.iq = !0; var d = null, e = a.node; e = e instanceof ig ? e : null; if (null === e || e.isSubGraphExpanded) var f = a.node.Xu(a.port.portId); else { if (!e.actualBounds.o()) { a.iq = c; break a; } d = e; f = d.Wu(); } var g = (a.Wd.length = 0), h = a.port.ma(Tc, G.alloc()), k = a.port.ma(hd, G.alloc()); e = N.allocAt(h.x, h.y, 0, 0); e.Je(k); G.free(h); G.free(k); h = G.allocAt(e.x + e.width / 2, e.y + e.height / 2); k = a.port.Li(); for (f = f.iterator; f.next(); ) { var l = f.value; if (l.isVisible() && l.fromPort !== l.toPort) { var m = l.fromPort === a.port || (null !== l.fromNode && l.fromNode.Vd(d)), n = l.computeSpot(m, a.port); if (n.sf() && ((m = m ? l.toPort : l.fromPort), null !== m)) { var p = m.part; if (null !== p) { var q = p.findVisibleNode(); null !== q && q !== p && ((p = q), (m = p.port)); m = l.computeOtherPoint(p, m); p = h.Wa(m); p -= k; 0 > p && (p += 360); n = vp(e, n, p, l.isOrthogonal); 0 === n ? ((n = 4), 180 < p && (p -= 360)) : (n = 90 === n ? 8 : 180 === n ? 2 : 1); q = a.Wd[g]; void 0 === q ? ((q = new wp(l, p, n)), (a.Wd[g] = q)) : ((q.link = l), (q.angle = p), (q.yc = n)); q.tv.set(m); g++; } } } } G.free(h); a.Wd.sort(Yo.prototype.l); k = a.Wd.length; d = -1; for (g = h = 0; g < k; g++) (f = a.Wd[g]), void 0 !== f && (f.yc !== d && ((d = f.yc), (h = 0)), (f.$p = h), h++); d = -1; h = 0; for (g = k - 1; 0 <= g; g--) (k = a.Wd[g]), void 0 !== k && (k.yc !== d && ((d = k.yc), (h = k.$p + 1)), (k.Wl = h)); g = a.Wd; n = a.port; d = a.node.portSpreading; h = G.alloc(); k = G.alloc(); f = G.alloc(); l = G.alloc(); n.ma(Tc, h); n.ma(Vc, k); n.ma(hd, f); n.ma(fd, l); q = p = m = n = 0; if (d === Ho) for (var r = 0; r < g.length; r++) { var u = g[r]; if (null !== u) { var x = u.link.computeThickness(); switch (u.yc) { case 8: p += x; break; case 2: q += x; break; case 1: n += x; break; default: case 4: m += x; } } } var v = (r = 0), z = 1, y = (u = 0); for (x = 0; x < g.length; x++) { var B = g[x]; if (null !== B) { if (r !== B.yc) { r = B.yc; switch (r) { case 8: var C = f; v = l; break; case 2: C = l; v = h; break; case 1: C = h; v = k; break; default: case 4: (C = k), (v = f); } u = v.x - C.x; y = v.y - C.y; switch (r) { case 8: p > Math.abs(u) ? ((z = Math.abs(u) / p), (p = Math.abs(u))) : (z = 1); break; case 2: q > Math.abs(y) ? ((z = Math.abs(y) / q), (q = Math.abs(y))) : (z = 1); break; case 1: n > Math.abs(u) ? ((z = Math.abs(u) / n), (n = Math.abs(u))) : (z = 1); break; default: case 4: m > Math.abs(y) ? ((z = Math.abs(y) / m), (m = Math.abs(y))) : (z = 1); } v = 0; } var I = B.gq; if (d === Ho) { B = B.link.computeThickness(); B *= z; I.set(C); switch (r) { case 8: I.x = C.x + u / 2 + p / 2 - v - B / 2; break; case 2: I.y = C.y + y / 2 + q / 2 - v - B / 2; break; case 1: I.x = C.x + u / 2 - n / 2 + v + B / 2; break; default: case 4: I.y = C.y + y / 2 - m / 2 + v + B / 2; } v += B; } else { var L = 0.5; d === uo && (L = (B.$p + 1) / (B.Wl + 1)); I.x = C.x + u * L; I.y = C.y + y * L; } } } G.free(h); G.free(k); G.free(f); G.free(l); C = a.Wd; for (g = 0; g < C.length; g++) (d = C[g]), null !== d && (d.Uu = a.computeEndSegmentLength(d)); a.iq = c; N.free(e); } c = a.Wd; } for (a = 0; a < c.length; a++) if (((e = c[a]), null !== e && e.link === b)) return e; return null; } Yo.prototype.l = function (a, b) { return a === b ? 0 : null === a ? -1 : null === b ? 1 : a.yc < b.yc ? -1 : a.yc > b.yc ? 1 : a.angle < b.angle ? -1 : a.angle > b.angle ? 1 : 0; }; Yo.prototype.computeEndSegmentLength = function (a) { var b = a.link, c = b.computeEndSegmentLength(this.node, this.port, Sc, b.fromPort === this.port), d = a.$p; if (0 > d) return c; var e = a.Wl; if (1 >= e || !b.isOrthogonal) return c; b = a.tv; var f = a.gq; if (2 === a.yc || 8 === a.yc) d = e - 1 - d; return ((a = 2 === a.yc || 4 === a.yc) ? b.y < f.y : b.x < f.x) ? c + 8 * d : (a ? b.y === f.y : b.x === f.x) ? c : c + 8 * (e - 1 - d); }; Yo.className = 'Knot'; function wp(a, b, c) { this.link = a; this.angle = b; this.yc = c; this.tv = new G(); this.Wl = this.$p = 0; this.gq = new G(); this.Uu = 0; } wp.prototype.toString = function () { return ( this.link.toString() + ' ' + this.angle.toString() + ' ' + this.yc.toString() + ':' + this.$p.toString() + '/' + this.Wl.toString() + ' ' + this.gq.toString() + ' ' + this.Uu.toString() + ' ' + this.tv.toString() ); }; wp.className = 'LinkInfo'; function Tk() { this.nh = this.Og = Ed; this.mh = this.Ng = this.lh = this.Mg = NaN; this.Bp = this.Cn = null; this.Cp = this.Dn = Infinity; } Tk.prototype.copy = function () { var a = new Tk(); a.Og = this.Og.I(); a.nh = this.nh.I(); a.Mg = this.Mg; a.lh = this.lh; a.Ng = this.Ng; a.mh = this.mh; a.Cn = this.Cn; a.Bp = this.Bp; a.Dn = this.Dn; a.Cp = this.Cp; return a; }; Tk.className = 'LinkSettings'; function yi() { nb(this); this.K = this.C = null; this.Nf = this.Rn = !0; this.Xn = !1; this.Pm = new G(0, 0).freeze(); this.Un = !0; this.Tn = null; this.sw = ''; this.u = null; this.Wn = !1; this.l = null; } yi.prototype.cloneProtected = function (a) { a.Rn = this.Rn; a.Nf = this.Nf; a.Xn = this.Xn; a.Pm.assign(this.Pm); a.Un = this.Un; a.Tn = this.Tn; a.sw = this.sw; a.Wn = !0; }; yi.prototype.copy = function () { var a = new this.constructor(); this.cloneProtected(a); return a; }; yi.prototype.fb = function () {}; yi.prototype.toString = function () { var a = Pa(this.constructor); a += '('; null !== this.group && (a += ' in ' + this.group); null !== this.diagram && (a += ' for ' + this.diagram); return a + ')'; }; yi.prototype.B = function () { if (this.isValidLayout) { var a = this.diagram; if (null !== a && !a.undoManager.isUndoingRedoing) { var b = a.animationManager; !b.isTicking && (b.isAnimating && b.vd(), (this.isOngoing && a.Qi) || (this.isInitial && !a.Qi)) && ((this.isValidLayout = !1), a.cc()); } } }; yi.prototype.createNetwork = function () { return new xp(this); }; yi.prototype.makeNetwork = function (a) { var b = this.createNetwork(); a instanceof P ? (b.ng(a.nodes, !0), b.ng(a.links, !0)) : a instanceof ig ? b.ng(a.memberParts) : b.ng(a.iterator); return b; }; yi.prototype.updateParts = function () { var a = this.diagram; if (null === a && null !== this.network) for (var b = this.network.vertexes.iterator; b.next(); ) { var c = b.value.node; if (null !== c && ((a = c.diagram), null !== a)) break; } this.isValidLayout = !0; try { null !== a && a.Aa('Layout'), this.commitLayout(); } finally { null !== a && a.Za('Layout'); } }; yi.prototype.commitLayout = function () { if (null !== this.network) { for (var a = this.network.vertexes.iterator; a.next(); ) a.value.commit(); if (this.isRouting) for (a = this.network.edges.iterator; a.next(); ) a.value.commit(); } }; yi.prototype.doLayout = function (a) { var b = new F(); a instanceof P ? (yp(this, b, a.nodes, !0, this.nk, !0, !1, !0), yp(this, b, a.parts, !0, this.nk, !0, !1, !0)) : a instanceof ig ? yp(this, b, a.memberParts, !1, this.nk, !0, !1, !0) : b.addAll(a.iterator); var c = b.count; if (0 < c) { a = this.diagram; null !== a && a.Aa('Layout'); c = Math.ceil(Math.sqrt(c)); this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin); var d = this.arrangementOrigin.x, e = d, f = this.arrangementOrigin.y, g = 0, h = 0; for (b = b.iterator; b.next(); ) { var k = b.value; zp(k); var l = k.measuredBounds, m = l.width; l = l.height; k.moveTo(e, f); k instanceof ig && (k.nk = !1); e += Math.max(m, 50) + 20; h = Math.max(h, Math.max(l, 50)); g >= c - 1 ? ((g = 0), (e = d), (f += h + 20), (h = 0)) : g++; } null !== a && a.Za('Layout'); } this.isValidLayout = !0; }; yi.prototype.nk = function (a) { return !a.location.o() || (a instanceof ig && a.nk) ? !0 : !1; }; function yp(a, b, c, d, e, f, g, h) { for (c = c.iterator; c.next(); ) { var k = c.value; (d && !k.isTopLevel) || (null !== e && !e(k)) || !k.canLayout() || (f && k instanceof V ? k.isLinkLabel || (k instanceof ig ? null === k.layout ? yp(a, b, k.memberParts, !1, e, f, g, h) : (zp(k), b.add(k)) : (zp(k), b.add(k))) : g && k instanceof S ? b.add(k) : !h || !k.bc() || k instanceof V || (zp(k), b.add(k))); } } function zp(a) { var b = a.actualBounds; (0 === b.width || 0 === b.height || isNaN(b.width) || isNaN(b.height)) && a.$b(); } yi.prototype.Ni = function (a, b) { var c = this.boundsComputation; if (null !== c) return b || (b = new N()), c(a, this, b); if (!b) return a.actualBounds; b.set(a.actualBounds); return b; }; yi.prototype.Vw = function (a) { var b = new F(); a instanceof P ? (yp(this, b, a.nodes, !0, null, !0, !0, !0), yp(this, b, a.links, !0, null, !0, !0, !0), yp(this, b, a.parts, !0, null, !0, !0, !0)) : a instanceof ig ? yp(this, b, a.memberParts, !1, null, !0, !0, !0) : yp(this, b, a.iterator, !1, null, !0, !0, !0); return b; }; yi.prototype.initialOrigin = function (a) { var b = this.group; if (null !== b) { var c = b.position.copy(); (isNaN(c.x) || isNaN(c.y)) && c.set(a); b = b.placeholder; null !== b && ((c = b.ma(Tc)), (isNaN(c.x) || isNaN(c.y)) && c.set(a), (a = b.padding), (c.x += a.left), (c.y += a.top)); return c; } return a; }; pa.Object.defineProperties(yi.prototype, { diagram: { get: function () { return this.C; }, set: function (a) { this.C = a; }, }, group: { get: function () { return this.K; }, set: function (a) { this.K !== a && ((this.K = a), null !== a && (this.C = a.diagram)); }, }, isOngoing: { get: function () { return this.Rn; }, set: function (a) { this.Rn !== a && (this.Rn = a); }, }, isInitial: { get: function () { return this.Nf; }, set: function (a) { this.Nf = a; a || (this.Wn = !0); }, }, isViewportSized: { get: function () { return this.Xn; }, set: function (a) { this.Xn !== a && (this.Xn = a) && this.B(); }, }, isRouting: { get: function () { return this.Un; }, set: function (a) { this.Un !== a && (this.Un = a); }, }, isRealtime: { get: function () { return this.Tn; }, set: function (a) { this.Tn !== a && (this.Tn = a); }, }, isValidLayout: { get: function () { return this.Wn; }, set: function (a) { this.Wn !== a && ((this.Wn = a), a || ((a = this.diagram), null !== a && (a.Cg = !0))); }, }, network: { get: function () { return this.l; }, set: function (a) { this.l !== a && ((this.l = a), null !== a && (a.layout = this)); }, }, boundsComputation: { get: function () { return this.u; }, set: function (a) { this.u !== a && ((this.u = a), this.B()); }, }, arrangementOrigin: { get: function () { return this.Pm; }, set: function (a) { this.Pm.A(a) || (this.Pm.assign(a), this.B()); }, }, }); yi.prototype.collectParts = yi.prototype.Vw; yi.prototype.getLayoutBounds = yi.prototype.Ni; yi.prototype.invalidateLayout = yi.prototype.B; yi.className = 'Layout'; function xp(a) { nb(this); this.gc = a; this.jf = new F(); this.ee = new F(); this.jt = new Lb(); this.et = new Lb(); } xp.prototype.clear = function () { if (this.jf) for (var a = this.jf.iterator; a.next(); ) a.value.clear(); if (this.ee) for (a = this.ee.iterator; a.next(); ) a.value.clear(); this.jf = new F(); this.ee = new F(); this.jt = new Lb(); this.et = new Lb(); }; xp.prototype.toString = function (a) { void 0 === a && (a = 0); var b = 'LayoutNetwork' + (null !== this.layout ? '(' + this.layout.toString() + ')' : ''); if (0 >= a) return b; b += ' vertexes: ' + this.jf.count + ' edges: ' + this.ee.count; if (1 < a) { for (var c = this.jf.iterator; c.next(); ) b += '\n ' + c.value.toString(a - 1); for (c = this.ee.iterator; c.next(); ) b += '\n ' + c.value.toString(a - 1); } return b; }; xp.prototype.createVertex = function () { return new Ap(this); }; xp.prototype.createEdge = function () { return new Bp(this); }; xp.prototype.ng = function (a, b, c) { if (null !== a) { void 0 === b && (b = !1); void 0 === c && (c = null); null === c && (c = function (a) { if (a instanceof V) return !a.isLinkLabel; if (a instanceof S) { var b = a.fromNode; if (null === b || b.isLinkLabel) return !1; a = a.toNode; return null === a || a.isLinkLabel ? !1 : !0; } return !1; }); for (a = a.iterator; a.next(); ) { var d = a.value; if (d instanceof V && (!b || d.isTopLevel) && d.canLayout() && c(d)) if (d instanceof ig && null === d.layout) this.ng(d.memberParts, !1); else if (null === this.Ki(d)) { var e = this.createVertex(); e.node = d; this.th(e); } } for (a.reset(); a.next(); ) if ( ((d = a.value), d instanceof S && (!b || d.isTopLevel) && d.canLayout() && c(d) && null === this.Up(d)) ) { var f = d.fromNode; e = d.toNode; null !== f && null !== e && f !== e && ((f = this.findGroupVertex(f)), (e = this.findGroupVertex(e)), null !== f && null !== e && this.gk(f, e, d)); } } }; xp.prototype.findGroupVertex = function (a) { if (null === a) return null; var b = a.findVisibleNode(); if (null === b) return null; a = this.Ki(b); if (null !== a) return a; for (b = b.containingGroup; null !== b; ) { a = this.Ki(b); if (null !== a) return a; b = b.containingGroup; } return null; }; t = xp.prototype; t.th = function (a) { if (null !== a) { this.jf.add(a); var b = a.node; null !== b && this.jt.add(b, a); a.network = this; } }; t.Rl = function (a) { if (null === a) return null; var b = this.Ki(a); null === b && ((b = this.createVertex()), (b.node = a), this.th(b)); return b; }; t.Tu = function (a) { if (null !== a && Cp(this, a)) { for (var b = a.xg, c = b.count - 1; 0 <= c; c--) { var d = b.N(c); this.$j(d); } b = a.og; for (a = b.count - 1; 0 <= a; a--) (c = b.N(a)), this.$j(c); } }; function Cp(a, b) { if (null === b) return !1; var c = a.jf.remove(b); c && a.jt.remove(b.node); return c; } t.zy = function (a) { null !== a && ((a = this.Ki(a)), null !== a && this.Tu(a)); }; t.Ki = function (a) { return null === a ? null : this.jt.J(a); }; t.Pj = function (a) { if (null !== a) { this.ee.add(a); var b = a.link; null !== b && null === this.Up(b) && this.et.add(b, a); b = a.toVertex; null !== b && b.Hu(a); b = a.fromVertex; null !== b && b.Fu(a); a.network = this; } }; t.ey = function (a) { if (null === a) return null; var b = a.fromNode, c = a.toNode, d = this.Up(a); null === d ? ((d = this.createEdge()), (d.link = a), null !== b && (d.fromVertex = this.Rl(b)), null !== c && (d.toVertex = this.Rl(c)), this.Pj(d)) : (null !== b ? (d.fromVertex = this.Rl(b)) : (d.fromVertex = null), null !== c ? (d.toVertex = this.Rl(c)) : (d.toVertex = null)); return d; }; t.$j = function (a) { if (null !== a) { var b = a.toVertex; null !== b && b.Su(a); b = a.fromVertex; null !== b && b.Ru(a); Dp(this, a); } }; function Dp(a, b) { null !== b && a.ee.remove(b) && a.et.remove(b.link); } t.yy = function (a) { null !== a && ((a = this.Up(a)), null !== a && this.$j(a)); }; t.Up = function (a) { return null === a ? null : this.et.J(a); }; t.gk = function (a, b, c) { if (null === a || null === b) return null; if (a.network === this && b.network === this) { var d = this.createEdge(); d.link = c; d.fromVertex = a; d.toVertex = b; this.Pj(d); return d; } return null; }; t.sm = function (a) { if (null !== a) { var b = a.fromVertex, c = a.toVertex; null !== b && null !== c && (b.Ru(a), c.Su(a), a.sm(), b.Hu(a), c.Fu(a)); } }; t.Sp = function () { for (var a = Ka(), b = this.ee.iterator; b.next(); ) { var c = b.value; c.fromVertex === c.toVertex && a.push(c); } b = a.length; for (c = 0; c < b; c++) this.$j(a[c]); Oa(a); }; xp.prototype.deleteArtificialVertexes = function () { for (var a = Ka(), b = this.jf.iterator; b.next(); ) { var c = b.value; null === c.node && a.push(c); } c = a.length; for (b = 0; b < c; b++) this.Tu(a[b]); b = Ka(); for (c = this.ee.iterator; c.next(); ) { var d = c.value; null === d.link && b.push(d); } c = b.length; for (d = 0; d < c; d++) this.$j(b[d]); Oa(a); Oa(b); }; function Ep(a) { for (var b = Ka(), c = a.ee.iterator; c.next(); ) { var d = c.value; (null !== d.fromVertex && null !== d.toVertex) || b.push(d); } c = b.length; for (d = 0; d < c; d++) a.$j(b[d]); Oa(b); } xp.prototype.Kx = function () { this.deleteArtificialVertexes(); Ep(this); this.Sp(); for (var a = new E(), b = !0; b; ) { b = !1; for (var c = this.jf.iterator; c.next(); ) { var d = c.value; if (0 < d.xg.count || 0 < d.og.count) { b = this.layout.createNetwork(); a.add(b); Fp(this, b, d); b = !0; break; } } } a.sort(function (a, b) { return null === a || null === b || a === b ? 0 : b.vertexes.count - a.vertexes.count; }); return a; }; function Fp(a, b, c) { if (null !== c && c.network !== b) { Cp(a, c); b.th(c); for (var d = c.sourceEdges; d.next(); ) { var e = d.value; e.network !== b && (Dp(a, e), b.Pj(e), Fp(a, b, e.fromVertex)); } for (d = c.destinationEdges; d.next(); ) (c = d.value), c.network !== b && (Dp(a, c), b.Pj(c), Fp(a, b, c.toVertex)); } } xp.prototype.Ey = function () { for (var a = new F(), b = this.jf.iterator; b.next(); ) a.add(b.value.node); for (b = this.ee.iterator; b.next(); ) a.add(b.value.link); return a; }; pa.Object.defineProperties(xp.prototype, { layout: { get: function () { return this.gc; }, set: function (a) { null !== a && (this.gc = a); }, }, vertexes: { get: function () { return this.jf; }, }, edges: { get: function () { return this.ee; }, }, }); xp.prototype.findAllParts = xp.prototype.Ey; xp.prototype.splitIntoSubNetworks = xp.prototype.Kx; xp.prototype.deleteSelfEdges = xp.prototype.Sp; xp.prototype.reverseEdge = xp.prototype.sm; xp.prototype.linkVertexes = xp.prototype.gk; xp.prototype.findEdge = xp.prototype.Up; xp.prototype.deleteLink = xp.prototype.yy; xp.prototype.deleteEdge = xp.prototype.$j; xp.prototype.addLink = xp.prototype.ey; xp.prototype.addEdge = xp.prototype.Pj; xp.prototype.findVertex = xp.prototype.Ki; xp.prototype.deleteNode = xp.prototype.zy; xp.prototype.deleteVertex = xp.prototype.Tu; xp.prototype.addNode = xp.prototype.Rl; xp.prototype.addVertex = xp.prototype.th; xp.prototype.addParts = xp.prototype.ng; xp.className = 'LayoutNetwork'; function Ap(a) { nb(this); this.Vc = a; this.l = new N(0, 0, 10, 10).freeze(); this.u = new G(5, 5).freeze(); this.li = this.jb = null; this.xg = new E(); this.og = new E(); } Ap.prototype.clear = function () { this.li = this.jb = null; this.xg = new E(); this.og = new E(); }; Ap.prototype.toString = function (a) { void 0 === a && (a = 0); var b = 'LayoutVertex#' + Bb(this); if (0 < a && ((b += null !== this.node ? '(' + this.node.toString() + ')' : ''), 1 < a)) { a = ''; for (var c = !0, d = this.xg.iterator; d.next(); ) { var e = d.value; c ? (c = !1) : (a += ','); a += e.toString(0); } e = ''; c = !0; for (d = this.og.iterator; d.next(); ) { var f = d.value; c ? (c = !1) : (e += ','); e += f.toString(0); } b += ' sources: ' + a + ' destinations: ' + e; } return b; }; Ap.prototype.commit = function () { var a = this.jb; if (null !== a) { var b = this.bounds, c = a.bounds; Ca(c) ? ((c.x = b.x), (c.y = b.y), (c.width = b.width), (c.height = b.height)) : (a.bounds = b.copy()); } else if (((a = this.node), null !== a)) { b = this.bounds; if (!(a instanceof ig)) { c = N.alloc(); var d = this.network.layout.Ni(a, c), e = a.locationObject.ma(dd); if (d.o() && e.o()) { a.moveTo(b.x + this.focusX - (e.x - d.x), b.y + this.focusY - (e.y - d.y)); N.free(c); return; } N.free(c); } a.moveTo(b.x, b.y); } }; Ap.prototype.Hu = function (a) { null !== a && (this.xg.contains(a) || this.xg.add(a)); }; Ap.prototype.Su = function (a) { null !== a && this.xg.remove(a); }; Ap.prototype.Fu = function (a) { null !== a && (this.og.contains(a) || this.og.add(a)); }; Ap.prototype.Ru = function (a) { null !== a && this.og.remove(a); }; function Gp(a, b) { a = a.li; b = b.li; return a ? b ? ((a = a.text), (b = b.text), a < b ? -1 : a > b ? 1 : 0) : 1 : null !== b ? -1 : 0; } pa.Object.defineProperties(Ap.prototype, { sourceEdgesArrayAccess: { get: function () { return this.xg._dataArray; }, }, destinationEdgesArrayAccess: { get: function () { return this.og._dataArray; }, }, data: { get: function () { return this.jb; }, set: function (a) { this.jb = a; if (null !== a) { var b = a.bounds; a = b.x; var c = b.y, d = b.width; b = b.height; this.u.h(d / 2, b / 2); this.l.h(a, c, d, b); } }, }, node: { get: function () { return this.li; }, set: function (a) { if (this.li !== a) { this.li = a; a.$b(); var b = this.network.layout, c = N.alloc(), d = b.Ni(a, c); b = d.x; var e = d.y, f = d.width; d = d.height; isNaN(b) && (b = 0); isNaN(e) && (e = 0); this.l.h(b, e, f, d); N.free(c); if (!(a instanceof ig) && ((a = a.locationObject.ma(dd)), a.o())) { this.u.h(a.x - b, a.y - e); return; } this.u.h(f / 2, d / 2); } }, }, bounds: { get: function () { return this.l; }, set: function (a) { this.l.A(a) || this.l.assign(a); }, }, focus: { get: function () { return this.u; }, set: function (a) { this.u.A(a) || this.u.assign(a); }, }, centerX: { get: function () { return this.l.x + this.u.x; }, set: function (a) { var b = this.l; b.x + this.u.x !== a && (b.ha(), (b.x = a - this.u.x), b.freeze()); }, }, centerY: { get: function () { return this.l.y + this.u.y; }, set: function (a) { var b = this.l; b.y + this.u.y !== a && (b.ha(), (b.y = a - this.u.y), b.freeze()); }, }, focusX: { get: function () { return this.u.x; }, set: function (a) { var b = this.u; b.x !== a && (b.ha(), (b.x = a), b.freeze()); }, }, focusY: { get: function () { return this.u.y; }, set: function (a) { var b = this.u; b.y !== a && (b.ha(), (b.y = a), b.freeze()); }, }, x: { get: function () { return this.l.x; }, set: function (a) { var b = this.l; b.x !== a && (b.ha(), (b.x = a), b.freeze()); }, }, y: { get: function () { return this.l.y; }, set: function (a) { var b = this.l; b.y !== a && (b.ha(), (b.y = a), b.freeze()); }, }, width: { get: function () { return this.l.width; }, set: function (a) { var b = this.l; b.width !== a && (b.ha(), (b.width = a), b.freeze()); }, }, height: { get: function () { return this.l.height; }, set: function (a) { var b = this.l; b.height !== a && (b.ha(), (b.height = a), b.freeze()); }, }, network: { get: function () { return this.Vc; }, set: function (a) { this.Vc = a; }, }, sourceVertexes: { get: function () { for (var a = new F(), b = this.sourceEdges; b.next(); ) a.add(b.value.fromVertex); return a.iterator; }, }, destinationVertexes: { get: function () { for (var a = new F(), b = this.destinationEdges; b.next(); ) a.add(b.value.toVertex); return a.iterator; }, }, vertexes: { get: function () { for (var a = new F(), b = this.sourceEdges; b.next(); ) a.add(b.value.fromVertex); for (b = this.destinationEdges; b.next(); ) a.add(b.value.toVertex); return a.iterator; }, }, sourceEdges: { get: function () { return this.xg.iterator; }, }, destinationEdges: { get: function () { return this.og.iterator; }, }, edges: { get: function () { for (var a = new E(), b = this.sourceEdges; b.next(); ) a.add(b.value); for (b = this.destinationEdges; b.next(); ) a.add(b.value); return a.iterator; }, }, edgesCount: { get: function () { return this.xg.count + this.og.count; }, }, }); Ap.prototype.deleteDestinationEdge = Ap.prototype.Ru; Ap.prototype.addDestinationEdge = Ap.prototype.Fu; Ap.prototype.deleteSourceEdge = Ap.prototype.Su; Ap.prototype.addSourceEdge = Ap.prototype.Hu; Ap.className = 'LayoutVertex'; Ap.standardComparer = Gp; Ap.smartComparer = function (a, b) { if (null !== a) { if (null !== b) { a = a.li; var c = b.li; if (null !== a) { if (null !== c) { b = a.text.toLocaleLowerCase().split(/([+\-]?[\.]?\d+(?:\.\d*)?(?:e[+\-]?\d+)?)/); a = c.text.toLocaleLowerCase().split(/([+\-]?[\.]?\d+(?:\.\d*)?(?:e[+\-]?\d+)?)/); for (c = 0; c < b.length; c++) if ('' !== a[c] && void 0 !== a[c]) { var d = parseFloat(b[c]), e = parseFloat(a[c]); if (isNaN(d)) if (isNaN(e)) { if (0 !== b[c].localeCompare(a[c])) return b[c].localeCompare(a[c]); } else return 1; else { if (isNaN(e)) return -1; if (0 !== d - e) return d - e; } } else if ('' !== b[c]) return 1; return '' !== a[c] && void 0 !== a[c] ? -1 : 0; } return 1; } return null !== c ? -1 : 0; } return 1; } return null !== b ? -1 : 0; }; function Bp(a) { nb(this); this.Vb = a; this.ig = this.Kf = this.ml = this.jb = null; } Bp.prototype.clear = function () { this.ig = this.Kf = this.ml = this.jb = null; }; Bp.prototype.toString = function (a) { void 0 === a && (a = 0); var b = 'LayoutEdge#' + Bb(this); 0 < a && ((b += null !== this.ml ? '(' + this.ml.toString() + ')' : ''), 1 < a && (b += ' ' + (this.Kf ? this.Kf.toString() : 'null') + ' --\x3e ' + (this.ig ? this.ig.toString() : 'null'))); return b; }; Bp.prototype.sm = function () { var a = this.Kf; this.Kf = this.ig; this.ig = a; }; Bp.prototype.commit = function () {}; Bp.prototype.lx = function (a) { return this.ig === a ? this.Kf : this.Kf === a ? this.ig : null; }; pa.Object.defineProperties(Bp.prototype, { network: { get: function () { return this.Vb; }, set: function (a) { this.Vb = a; }, }, data: { get: function () { return this.jb; }, set: function (a) { this.jb !== a && (this.jb = a); }, }, link: { get: function () { return this.ml; }, set: function (a) { this.ml !== a && (this.ml = a); }, }, fromVertex: { get: function () { return this.Kf; }, set: function (a) { this.Kf !== a && (this.Kf = a); }, }, toVertex: { get: function () { return this.ig; }, set: function (a) { this.ig !== a && (this.ig = a); }, }, }); Bp.prototype.getOtherVertex = Bp.prototype.lx; Bp.className = 'LayoutEdge'; function Bk() { yi.call(this); this.isViewportSized = !0; this.Ip = this.Jp = NaN; this.Eg = new M(NaN, NaN).freeze(); this.af = new M(10, 10).freeze(); this.wb = Hp; this.Ab = Ip; this.Qc = Jp; this.Mc = Kp; } oa(Bk, yi); Bk.prototype.cloneProtected = function (a) { yi.prototype.cloneProtected.call(this, a); a.Jp = this.Jp; a.Ip = this.Ip; a.Eg.assign(this.Eg); a.af.assign(this.af); a.wb = this.wb; a.Ab = this.Ab; a.Qc = this.Qc; a.Mc = this.Mc; }; Bk.prototype.fb = function (a) { a.classType === Bk ? a === Jp || a === Lp || a === Mp || a === Np ? (this.sorting = a) : a === Ip || a === Op ? (this.arrangement = a) : a === Hp || a === Pp ? (this.alignment = a) : A('Unknown enum value: ' + a) : yi.prototype.fb.call(this, a); }; Bk.prototype.doLayout = function (a) { this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin); var b = this.Vw(a); a = this.diagram; for (var c = b.copy().iterator; c.next(); ) { var d = c.value; if (!d.Ah() || (null === d.fromNode && null === d.toNode)) { if ((d.$b(), d instanceof ig)) for (d = d.memberParts; d.next(); ) b.remove(d.value); } else b.remove(d); } var e = b.Na(); if (0 !== e.length) { switch (this.sorting) { case Np: e.reverse(); break; case Jp: e.sort(this.comparer); break; case Lp: e.sort(this.comparer), e.reverse(); } var f = this.wrappingColumn; isNaN(f) && (f = 0); var g = this.wrappingWidth; isNaN(g) && null !== a ? ((b = a.padding), (g = Math.max(a.viewportBounds.width - b.left - b.right, 0))) : (g = Math.max(this.wrappingWidth, 0)); 0 >= f && 0 >= g && (f = 1); b = this.spacing.width; isFinite(b) || (b = 0); c = this.spacing.height; isFinite(c) || (c = 0); null !== a && a.Aa('Layout'); d = []; switch (this.alignment) { case Pp: var h = b, k = c, l = N.alloc(), m = Math.max(this.cellSize.width, 1); if (!isFinite(m)) for (var n = (m = 0); n < e.length; n++) { var p = this.Ni(e[n], l); m = Math.max(m, p.width); } m = Math.max(m + h, 1); n = Math.max(this.cellSize.height, 1); if (!isFinite(n)) for (p = n = 0; p < e.length; p++) { var q = this.Ni(e[p], l); n = Math.max(n, q.height); } n = Math.max(n + k, 1); p = this.arrangement; for ( var r = (q = this.arrangementOrigin.x), u = this.arrangementOrigin.y, x = 0, v = 0, z = 0; z < e.length; z++ ) { var y = e[z], B = this.Ni(y, l), C = Math.ceil((B.width + h) / m) * m, I = Math.ceil((B.height + k) / n) * n; switch (p) { case Op: var L = Math.abs(r - B.width); break; default: L = r + B.width; } if ((0 < f && x > f - 1) || (0 < g && 0 < x && L - q > g)) d.push(new N(0, u, g + h, v)), (x = 0), (r = q), (u += v), (v = 0); v = Math.max(v, I); switch (p) { case Op: B = -B.width; break; default: B = 0; } y.moveTo(r + B, u); switch (p) { case Op: r -= C; break; default: r += C; } x++; } d.push(new N(0, u, g + h, v)); N.free(l); break; case Hp: k = g; m = f; n = b; p = c; g = N.alloc(); q = Math.max(this.cellSize.width, 1); f = u = l = 0; h = G.alloc(); for (r = 0; r < e.length; r++) (v = e[r]), (x = this.Ni(v, g)), (v = v.qf(v.locationObject, v.locationSpot, h)), (l = Math.max(l, v.x)), (u = Math.max(u, x.width - v.x)), (f = Math.max(f, v.y)); r = this.arrangement; switch (r) { case Op: l += n; break; default: u += n; } q = isFinite(q) ? Math.max(q + n, 1) : Math.max(l + u, 1); var J = (v = this.arrangementOrigin.x); z = this.arrangementOrigin.y; u = 0; k >= l && (k -= l); l = y = 0; C = Math.max(this.cellSize.height, 1); B = f = 0; I = !0; x = G.alloc(); for (L = 0; L < e.length; L++) { var U = e[L], R = this.Ni(U, g), da = U.qf(U.locationObject, U.locationSpot, h); if (0 < u) switch (r) { case Op: J = (J - v - (R.width - da.x)) / q; J = H.ca(Math.round(J), J) ? Math.round(J) : Math.floor(J); J = J * q + v; break; default: (J = (J - v + da.x) / q), (J = H.ca(Math.round(J), J) ? Math.round(J) : Math.ceil(J)), (J = J * q + v); } else switch (r) { case Op: y = J + da.x + R.width; break; default: y = J - da.x; } switch (r) { case Op: var ja = -(J + da.x) + y; break; default: ja = J + R.width - da.x - y; } if ((0 < m && u > m - 1) || (0 < k && 0 < u && ja > k)) { d.push(new N(0, I ? z - f : z, k + n, B + f + p)); for (J = 0; J < u && L !== u; J++) { ja = e[L - u + J]; var K = ja.qf(ja.locationObject, ja.locationSpot, x); ja.moveTo(ja.position.x, ja.position.y + f - K.y); } B += p; z = I ? z + B : z + (B + f); u = B = f = 0; J = v; I = !1; } J === v && (l = r === Op ? Math.max(l, R.width - da.x) : Math.min(l, -da.x)); f = Math.max(f, da.y); B = Math.max(B, R.height - da.y); isFinite(C) && (B = Math.max(B, Math.max(R.height, C) - da.y)); I ? U.moveTo(J - da.x, z - da.y) : U.moveTo(J - da.x, z); switch (r) { case Op: J -= da.x + n; break; default: J += R.width - da.x + n; } u++; } d.push(new N(0, z, k + n, (I ? B : B + f) + p)); if (e.length !== u) for (k = 0; k < u; k++) (m = e[e.length - u + k]), (n = m.qf(m.locationObject, m.locationSpot, h)), m.moveTo(m.position.x, m.position.y + f - n.y); G.free(h); G.free(x); if (r === Op) for (e = 0; e < d.length; e++) (f = d[e]), (f.width += l), (f.x -= l); else for (e = 0; e < d.length; e++) (f = d[e]), f.x > l && ((f.width += f.x - l), (f.x = l)); N.free(g); } for (h = f = g = e = 0; h < d.length; h++) (k = d[h]), (e = Math.min(e, k.x)), (g = Math.min(g, k.y)), (f = Math.max(f, k.x + k.width)); this.arrangement === Op ? this.commitLayers(d, new G(e + b / 2 - (f + e), g - c / 2)) : this.commitLayers(d, new G(e - b / 2, g - c / 2)); null !== a && a.Za('Layout'); this.isValidLayout = !0; } }; Bk.prototype.commitLayers = function () {}; function Kp(a, b) { a = a.text; b = b.text; return a < b ? -1 : a > b ? 1 : 0; } pa.Object.defineProperties(Bk.prototype, { wrappingWidth: { get: function () { return this.Jp; }, set: function (a) { this.Jp !== a && (0 < a || isNaN(a)) && ((this.Jp = a), (this.isViewportSized = isNaN(a)), this.B()); }, }, wrappingColumn: { get: function () { return this.Ip; }, set: function (a) { this.Ip !== a && (0 < a || isNaN(a)) && ((this.Ip = a), this.B()); }, }, cellSize: { get: function () { return this.Eg; }, set: function (a) { this.Eg.A(a) || (this.Eg.assign(a), this.B()); }, }, spacing: { get: function () { return this.af; }, set: function (a) { this.af.A(a) || (this.af.assign(a), this.B()); }, }, alignment: { get: function () { return this.wb; }, set: function (a) { this.wb === a || (a !== Hp && a !== Pp) || ((this.wb = a), this.B()); }, }, arrangement: { get: function () { return this.Ab; }, set: function (a) { this.Ab === a || (a !== Ip && a !== Op) || ((this.Ab = a), this.B()); }, }, sorting: { get: function () { return this.Qc; }, set: function (a) { this.Qc === a || (a !== Mp && a !== Np && a !== Jp && a !== Lp) || ((this.Qc = a), this.B()); }, }, comparer: { get: function () { return this.Mc; }, set: function (a) { this.Mc !== a && ((this.Mc = a), this.B()); }, }, }); var Pp = new D(Bk, 'Position', 0), Hp = new D(Bk, 'Location', 1), Ip = new D(Bk, 'LeftToRight', 2), Op = new D(Bk, 'RightToLeft', 3), Mp = new D(Bk, 'Forward', 4), Np = new D(Bk, 'Reverse', 5), Jp = new D(Bk, 'Ascending', 6), Lp = new D(Bk, 'Descending', 7); Bk.className = 'GridLayout'; Bk.standardComparer = Kp; Bk.smartComparer = function (a, b) { if (null !== a) { if (null !== b) { a = a.text.toLocaleLowerCase().split(/([+\-]?[\.]?\d+(?:\.\d*)?(?:e[+\-]?\d+)?)/); b = b.text.toLocaleLowerCase().split(/([+\-]?[\.]?\d+(?:\.\d*)?(?:e[+\-]?\d+)?)/); for (var c = 0; c < a.length; c++) if ('' !== b[c] && void 0 !== b[c]) { var d = parseFloat(a[c]), e = parseFloat(b[c]); if (isNaN(d)) if (isNaN(e)) { if (0 !== a[c].localeCompare(b[c])) return a[c].localeCompare(b[c]); } else return 1; else { if (isNaN(e)) return -1; if (0 !== d - e) return d - e; } } else if ('' !== a[c]) return 1; return '' !== b[c] && void 0 !== b[c] ? -1 : 0; } return 1; } return null !== b ? -1 : 0; }; Bk.Position = Pp; Bk.Location = Hp; Bk.LeftToRight = Ip; Bk.RightToLeft = Op; Bk.Forward = Mp; Bk.Reverse = Np; Bk.Ascending = Jp; Bk.Descending = Lp; function ti() { this.Eo = new F(); this.fo = new F(); this.Fa = new F(); this.Ne = new Lb(); this.Gg = new Lb(); this.pj = new Lb(); this.C = null; this.Cq = !1; } t = ti.prototype; t.clear = function () { this.Eo.clear(); this.fo.clear(); this.Fa.clear(); this.Ne.clear(); this.Gg.clear(); this.pj.clear(); }; t.hb = function (a) { this.C = a; }; t.Pi = function (a) { if (a instanceof V) { if ((this.Eo.add(a), a instanceof ig)) { var b = a.containingGroup; null === b ? this.C.zi.add(a) : b.rl.add(a); b = a.layout; null !== b && (b.diagram = this.C); } } else a instanceof S ? this.fo.add(a) : a instanceof pf || this.Fa.add(a); b = a.data; null === b || a instanceof pf || (a instanceof S ? this.Gg.add(b, a) : this.Ne.add(b, a)); }; t.xc = function (a) { a.Tj(); if (a instanceof V) { if ((this.Eo.remove(a), a instanceof ig)) { var b = a.containingGroup; null === b ? this.C.zi.remove(a) : b.rl.remove(a); b = a.layout; null !== b && (b.diagram = null); } } else a instanceof S ? this.fo.remove(a) : a instanceof pf || this.Fa.remove(a); b = a.data; null === b || a instanceof pf || (a instanceof S ? this.Gg.remove(b) : this.Ne.remove(b)); }; t.ud = function () { for (var a = this.C.nodeTemplateMap.iterator; a.next(); ) { var b = a.value, c = a.key; (!b.bc() || b instanceof ig) && A( 'Invalid node template in Diagram.nodeTemplateMap: template for "' + c + '" must be a Node or a simple Part, not a Group or Link: ' + b, ); } for (a = this.C.groupTemplateMap.iterator; a.next(); ) (b = a.value), (c = a.key), b instanceof ig || A( 'Invalid group template in Diagram.groupTemplateMap: template for "' + c + '" must be a Group, not a normal Node or Link: ' + b, ); for (a = this.C.linkTemplateMap.iterator; a.next(); ) (b = a.value), (c = a.key), b instanceof S || A( 'Invalid link template in Diagram.linkTemplateMap: template for "' + c + '" must be a Link, not a normal Node or simple Part: ' + b, ); a = Ka(); for (b = this.C.selection.iterator; b.next(); ) (c = b.value.data) && a.push(c); b = Ka(); for (c = this.C.highlighteds.iterator; c.next(); ) { var d = c.value.data; d && b.push(d); } c = Ka(); for (d = this.nodes.iterator; d.next(); ) { var e = d.value; null !== e.data && (c.push(e.data), c.push(e.location)); } for (d = this.links.iterator; d.next(); ) (e = d.value), null !== e.data && (c.push(e.data), c.push(e.location)); for (d = this.parts.iterator; d.next(); ) (e = d.value), null !== e.data && (c.push(e.data), c.push(e.location)); this.removeAllModeledParts(); this.addAllModeledParts(); for (d = 0; d < a.length; d++) (e = this.vc(a[d])), null !== e && (e.isSelected = !0); for (d = 0; d < b.length; d++) (e = this.vc(b[d])), null !== e && (e.isHighlighted = !0); for (d = 0; d < c.length; d += 2) (e = this.vc(c[d])), null !== e && (e.location = c[d + 1]); Oa(a); Oa(b); Oa(c); }; ti.prototype.addAllModeledParts = function () { this.addModeledParts(this.diagram.model.nodeDataArray); }; ti.prototype.addModeledParts = function (a, b) { var c = this, d = this.diagram.model; a.forEach(function (a) { d.Pb(a) && Qp(c, a, !1); }); a.forEach(function (a) { d.Pb(a) && c.resolveReferencesForData(a); }); !1 !== b && ek(this.diagram, !1); }; function Qp(a, b, c) { if ( void 0 !== b && null !== b && !a.diagram.undoManager.isUndoingRedoing && !a.Ne.contains(b) ) { void 0 === c && (c = !0); a: { if (void 0 !== b && null !== b && !a.C.undoManager.isUndoingRedoing && !a.Ne.contains(b)) { var d = a.Us(b); var e = so(a, b, d); if (null !== e && (Yg(e), (e = e.copy()), null !== e)) { var f = a.diagram.skipsModelSourceBindings; a.diagram.skipsModelSourceBindings = !0; e.Af = d; e.jb = b; a.Cq && (e.Tg = 'Tool'); a.diagram.add(e); e.jb = null; e.data = b; a.diagram.skipsModelSourceBindings = f; d = e; break a; } } d = null; } null !== d && c && a.resolveReferencesForData(b); } } ti.prototype.insertLink = function () { return null; }; ti.prototype.resolveReferencesForData = function () {}; ti.prototype.Us = function (a) { return this.C.model.Us(a); }; function so(a, b, c) { a = a.C; var d = a.model; d.ek() && d.lv(b) ? ((b = a.groupTemplateMap.J(c)), null === b && ((b = a.groupTemplateMap.J('')), null === b && (Rp || ((Rp = !0), za('No Group template found for category "' + c + '"'), za(' Using default group template')), (b = a.pw)))) : ((b = a.nodeTemplateMap.J(c)), null === b && ((b = a.nodeTemplateMap.J('')), null === b && (Sp || ((Sp = !0), za('No Node template found for category "' + c + '"'), za(' Using default node template')), (b = a.rw)))); return b; } ti.prototype.getLinkCategoryForData = function () { return ''; }; ti.prototype.setLinkCategoryForData = function () {}; ti.prototype.setFromNodeForLink = function () {}; ti.prototype.setToNodeForLink = function () {}; ti.prototype.findLinkTemplateForCategory = function (a) { var b = this.C.linkTemplateMap.J(a); null === b && ((b = this.C.linkTemplateMap.J('')), null === b && (Tp || ((Tp = !0), za('No Link template found for category "' + a + '"'), za(' Using default link template')), (b = this.C.qw))); return b; }; ti.prototype.removeAllModeledParts = function () { this.pt(this.diagram.model.nodeDataArray); }; ti.prototype.pt = function (a) { var b = this; a.forEach(function (a) { b.pq(a); }); }; ti.prototype.pq = function (a) { a = this.vc(a); null !== a && (Hj(this.diagram, a, !1), this.unresolveReferencesForPart(a)); }; ti.prototype.unresolveReferencesForPart = function () {}; ti.prototype.removeDataForLink = function () {}; ti.prototype.findPartForKey = function (a) { if (null === a || void 0 === a) return null; a = this.C.model.Qb(a); return null !== a ? this.Ne.J(a) : null; }; t = ti.prototype; t.Hb = function (a) { if (null === a || void 0 === a) return null; a = this.C.model.Qb(a); if (null === a) return null; a = this.Ne.J(a); return a instanceof V ? a : null; }; t.vc = function (a) { if (null === a) return null; var b = this.Ne.J(a); return null !== b ? b : (b = this.Gg.J(a)); }; t.Gi = function (a) { if (null === a) return null; a = this.Ne.J(a); return a instanceof V ? a : null; }; t.uc = function (a) { return null === a ? null : this.Gg.J(a); }; t.Rs = function (a) { for (var b = 0; b < arguments.length; ++b); b = new F(); for (var c = this.Eo.iterator; c.next(); ) { var d = c.value, e = d.data; if (null !== e) for (var f = 0; f < arguments.length; f++) { var g = arguments[f]; if (Ca(g) && Up(this, e, g)) { b.add(d); break; } } } return b.iterator; }; t.Qs = function (a) { for (var b = 0; b < arguments.length; ++b); b = new F(); for (var c = this.fo.iterator; c.next(); ) { var d = c.value, e = d.data; if (null !== e) for (var f = 0; f < arguments.length; f++) { var g = arguments[f]; if (Ca(g) && Up(this, e, g)) { b.add(d); break; } } } return b.iterator; }; function Up(a, b, c) { for (var d in c) { var e = b[d], f = c[d]; if (Ea(f)) { if (!Ea(e) || e.length < f.length) return !1; for (var g = 0; g < e.length; g++) { var h = f[g]; if (void 0 !== h && !Vp(a, e[g], h)) return !1; } } else if (!Vp(a, e, f)) return !1; } return !0; } function Vp(a, b, c) { if ('function' === typeof c) { if (!c(b)) return !1; } else if (c instanceof RegExp) { if (!b || !c.test(b.toString())) return !1; } else if (Ca(b) && Ca(c)) { if (!Up(a, b, c)) return !1; } else if (b !== c) return !1; return !0; } ti.prototype.doModelChanged = function (a) { if (this.C) { var b = this.C; if (a.model === b.model) { var c = a.change; b.doModelChanged(a); if (b.ea) { b.ea = !1; try { var d = a.modelChange; if ('' !== d) if (c === af) { if ('nodeCategory' === d) { var e = this.vc(a.object), f = a.newValue; null !== e && 'string' === typeof f && (e.category = f); } else 'nodeDataArray' === d && (this.pt(a.oldValue), this.addModeledParts(a.newValue)); b.isModified = !0; } else if (c === cf) { var g = a.newValue; 'nodeDataArray' === d && Ca(g) && Qp(this, g); b.isModified = !0; } else if (c === df) { var h = a.oldValue; 'nodeDataArray' === d && Ca(h) && this.pq(h); b.isModified = !0; } else c === bf && ('SourceChanged' === d ? null !== a.object ? this.updateDataBindings(a.object, a.propertyName) : (this.wq(), this.updateAllTargetBindings()) : 'ModelDisplaced' === d && this.ud()); else if (c === af) { var k = a.propertyName, l = a.object; if (l === b.model) { if ('nodeKeyProperty' === k || 'nodeCategoryProperty' === k) b.undoManager.isUndoingRedoing || this.ud(); } else this.updateDataBindings(l, k); b.isModified = !0; } else if (c === cf || c === df) { var m = a.change === cf, n = m ? a.newParam : a.oldParam, p = m ? a.newValue : a.oldValue, q = this.pj.J(a.object); if (Array.isArray(q)) for (a = 0; a < q.length; a++) { var r = q[a]; if (m) $m(r, p, n); else if (!(0 > n)) { var u = n + Tm(r); r.xc(u, !0); dn(r, u, n); } } b.isModified = !0; } } finally { b.ea = !0; } } } } }; ti.prototype.updateAllTargetBindings = function (a) { void 0 === a && (a = ''); for (var b = this.parts.iterator; b.next(); ) b.value.Ea(a); for (b = this.nodes.iterator; b.next(); ) b.value.Ea(a); for (b = this.links.iterator; b.next(); ) b.value.Ea(a); }; ti.prototype.wq = function () { for (var a = this.C.model, b = new F(), c = a.nodeDataArray, d = 0; d < c.length; d++) b.add(c[d]); var e = []; this.nodes.each(function (a) { null === a.data || b.contains(a.data) || e.push(a.data); }); this.parts.each(function (a) { null === a.data || b.contains(a.data) || e.push(a.data); }); e.forEach(function (b) { Wp(a, b, !1); }); for (d = 0; d < c.length; d++) { var f = c[d]; null === this.vc(f) && Xp(a, f, !1); } this.refreshDataBoundLinks(); for (c = this.parts.iterator; c.next(); ) c.value.updateRelationshipsFromData(); for (c = this.nodes.iterator; c.next(); ) c.value.updateRelationshipsFromData(); for (c = this.links.iterator; c.next(); ) c.value.updateRelationshipsFromData(); }; ti.prototype.refreshDataBoundLinks = function () {}; ti.prototype.updateRelationshipsFromData = function () {}; ti.prototype.updateDataBindings = function (a, b) { if ('string' === typeof b) { var c = this.vc(a); if (null !== c) c.Ea(b); else { c = null; for (var d = this.pj.iterator; d.next(); ) { for (var e = d.value, f = 0; f < e.length; f++) { var g = e[f].gx(a); null !== g && (null === c && (c = Ka()), c.push(g)); } if (null !== c) break; } if (null !== c) { for (d = 0; d < c.length; d++) c[d].Ea(b); Oa(c); } } a === this.diagram.model.modelData && this.updateAllTargetBindings(b); } }; function Dj(a, b) { var c = b.fi; if (Ea(c)) { var d = a.pj.J(c); if (null === d) (d = []), d.push(b), a.pj.add(c, d); else { for (a = 0; a < d.length; a++) if (d[a] === b) return; d.push(b); } } } function Gj(a, b, c) { Bj(b, function (a) { a = a.Y.j; for (var b = a.length, d = 0; d < b; d++) ck(c, a[d]); }); var d = b.fi; if (Ea(d)) { var e = a.pj.J(d); if (null !== e) for (var f = 0; f < e.length; f++) if (e[f] === b) { e.splice(f, 1); 0 === e.length && a.pj.remove(d); break; } } } ti.prototype.Yj = function (a, b, c) { var d = new Lb(); if (Ea(a)) for (var e = 0; e < a.length; e++) Yp(this, a[e], b, d, c); else for (a = a.iterator; a.next(); ) Yp(this, a.value, b, d, c); if (null !== b) { c = b.model; a = b.toolManager.findTool('Dragging'); a = null !== a ? a.dragOptions.dragsLink : b.Mk.dragsLink; e = new F(); for (var f = new Lb(), g = d.iterator; g.next(); ) { var h = g.value; if (h instanceof S) a || (null !== h.fromNode && null !== h.toNode) || e.add(h); else if (h instanceof V && null !== h.data && c.fm()) { var k = h; h = g.key; var l = h.rg(); null !== l && ((l = d.J(l)), null !== l ? (c.Ie(k.data, c.pa(l.data)), (k = b.uc(k.data)), (h = h.Ji()), null !== h && null !== k && f.add(h, k)) : c.Ie(k.data, void 0)); } } 0 < e.count && b.qt(e, !1); if (0 < f.count) for (c = f.iterator; c.next(); ) d.add(c.key, c.value); } if (null !== b && null !== this.C && ((b = b.model), (c = b.afterCopyFunction), null !== c)) { var m = new Lb(); d.each(function (a) { null !== a.key.data && m.add(a.key.data, a.value.data); }); c(m, b, this.C.model); } for (b = d.iterator; b.next(); ) b.value.Ea(); return d; }; function Yp(a, b, c, d, e) { if (null === b || (e && !b.canCopy())) return null; if (d.contains(b)) return d.J(b); var f = a.copyPartData(b, c); if (!(f instanceof T)) return null; f.isSelected = !1; f.isHighlighted = !1; d.add(b, f); if (b instanceof V) { for (var g = b.linksConnected; g.next(); ) { var h = g.value; if (h.fromNode === b) { var k = d.J(h); null !== k && (k.fromNode = f); } h.toNode === b && ((h = d.J(h)), null !== h && (h.toNode = f)); } if (b instanceof ig && f instanceof ig) for (b = b.memberParts; b.next(); ) (g = Yp(a, b.value, c, d, e)), g instanceof S || null === g || (g.containingGroup = f); } else if (b instanceof S && f instanceof S) for ( g = b.fromNode, null !== g && ((g = d.J(g)), null !== g && (f.fromNode = g)), g = b.toNode, null !== g && ((g = d.J(g)), null !== g && (f.toNode = g)), b = b.labelNodes; b.next(); ) (g = Yp(a, b.value, c, d, e)), null !== g && g instanceof V && (g.labeledLink = f); return f; } ti.prototype.copyPartData = function (a, b) { var c = null, d = a.data; if (null !== d && null !== b) { var e = b.model; a instanceof S || ((d = e.copyNodeData(d)), Ca(d) && (e.kf(d), (c = b.vc(d)))); } else Yg(a), (c = a.copy()), null !== c && ((e = this.C), null !== b ? b.add(c) : null !== d && null !== e && null !== e.commandHandler && e.commandHandler.copiesClipboardData && ((b = e.model), (e = null), c instanceof S || (e = b.copyNodeData(d)), Ca(e) && (c.data = e))); return c; }; pa.Object.defineProperties(ti.prototype, { nodes: { get: function () { return this.Eo; }, }, links: { get: function () { return this.fo; }, }, parts: { get: function () { return this.Fa; }, }, diagram: { get: function () { return this.C; }, }, addsToTemporaryLayer: { get: function () { return this.Cq; }, set: function (a) { this.Cq = a; }, }, }); ti.prototype.updateAllRelationshipsFromData = ti.prototype.wq; ti.prototype.findLinksByExample = ti.prototype.Qs; ti.prototype.findNodesByExample = ti.prototype.Rs; ti.prototype.findLinkForData = ti.prototype.uc; ti.prototype.findNodeForData = ti.prototype.Gi; ti.prototype.findPartForData = ti.prototype.vc; ti.prototype.findNodeForKey = ti.prototype.Hb; ti.prototype.removeModeledPart = ti.prototype.pq; ti.prototype.removeModeledParts = ti.prototype.pt; ti.prototype.rebuildParts = ti.prototype.ud; var Sp = !1, Rp = !1, Tp = !1; ti.className = 'PartManager'; function Zp(a) { ti.apply(this, arguments); } oa(Zp, ti); Zp.prototype.addAllModeledParts = function () { var a = this.diagram.model; this.addModeledParts(a.nodeDataArray); $p(this, a.linkDataArray); }; Zp.prototype.addModeledParts = function (a) { ti.prototype.addModeledParts.call(this, a, !1); for (a = this.links.iterator; a.next(); ) to(a.value); ek(this.diagram, !1); }; function $p(a, b) { b.forEach(function (b) { aq(a, b); }); ek(a.diagram, !1); } function aq(a, b) { if ( void 0 !== b && null !== b && !a.diagram.undoManager.isUndoingRedoing && !a.Gg.contains(b) ) { var c = a.getLinkCategoryForData(b), d = a.findLinkTemplateForCategory(c); if (null !== d) { Yg(d); var e = d.copy(); if (null !== e) { d = a.diagram.skipsModelSourceBindings; a.diagram.skipsModelSourceBindings = !0; e.Af = c; e.jb = b; c = a.diagram.model; var f = bq(c, b, !0); '' !== f && (e.fromPortId = f); f = cq(c, b, !0); void 0 !== f && ((f = a.Hb(f)), f instanceof V && (e.fromNode = f)); f = bq(c, b, !1); '' !== f && (e.toPortId = f); f = cq(c, b, !1); void 0 !== f && ((f = a.Hb(f)), f instanceof V && (e.toNode = f)); c = c.sg(b); Array.isArray(c) && c.forEach(function (b) { b = a.Hb(b); null !== b && (b.labeledLink = e); }); a.Cq && (e.Tg = 'Tool'); a.diagram.add(e); e.jb = null; e.data = b; a.diagram.skipsModelSourceBindings = d; } } } } Zp.prototype.removeAllModeledParts = function () { var a = this.diagram.model; dq(this, a.linkDataArray); this.pt(a.nodeDataArray); }; function dq(a, b) { b.forEach(function (b) { a.pq(b); }); } Zp.prototype.getLinkCategoryForData = function (a) { return this.diagram.model.bv(a); }; Zp.prototype.setLinkCategoryForData = function (a, b) { return this.diagram.model.st(a, b); }; Zp.prototype.setFromNodeForLink = function (a, b) { var c = this.diagram.model; c.Cx(a.data, c.pa(null !== b ? b.data : null)); }; Zp.prototype.setToNodeForLink = function (a, b) { var c = this.diagram.model; c.Hx(a.data, c.pa(null !== b ? b.data : null)); }; Zp.prototype.removeDataForLink = function (a) { this.diagram.model.nm(a.data); }; Zp.prototype.findPartForKey = function (a) { var b = ti.prototype.findPartForKey.call(this, a); return null === b && ((a = this.diagram.model.xh(a)), null !== a) ? this.Gg.J(a) : b; }; Zp.prototype.doModelChanged = function (a) { var b = this; ti.prototype.doModelChanged.call(this, a); if (this.diagram) { var c = this.diagram; if (a.model === c.model) { var d = a.change; if (c.ea) { c.ea = !1; try { var e = a.modelChange; if ('' !== e) if (d === af) { if ('linkFromKey' === e) { var f = this.uc(a.object); if (null !== f) { var g = this.Hb(a.newValue); f.fromNode = g; } } else if ('linkToKey' === e) { var h = this.uc(a.object); if (null !== h) { var k = this.Hb(a.newValue); h.toNode = k; } } else if ('linkFromPortId' === e) { var l = this.uc(a.object); if (null !== l) { var m = a.newValue; 'string' === typeof m && (l.fromPortId = m); } } else if ('linkToPortId' === e) { var n = this.uc(a.object); if (null !== n) { var p = a.newValue; 'string' === typeof p && (n.toPortId = p); } } else if ('nodeGroupKey' === e) { var q = this.vc(a.object); if (null !== q) { var r = a.newValue; if (void 0 !== r) { var u = this.Hb(r); u instanceof ig ? (q.containingGroup = u) : (q.containingGroup = null); } else q.containingGroup = null; } } else if ('linkLabelKeys' === e) { var x = this.uc(a.object); if (null !== x) { var v = a.oldValue, z = a.newValue; Array.isArray(v) && v.forEach(function (a) { a = b.Hb(a); null !== a && (a.labeledLink = null); }); Array.isArray(z) && z.forEach(function (a) { a = b.Hb(a); null !== a && (a.labeledLink = x); }); } } else if ('linkCategory' === e) { var y = this.uc(a.object), B = a.newValue; null !== y && 'string' === typeof B && (y.category = B); } else 'linkDataArray' === e && (dq(this, a.oldValue), $p(this, a.newValue)); c.isModified = !0; } else if (d === cf) { var C = a.newValue; if ('linkDataArray' === e && 'object' === typeof C && null !== C) aq(this, C); else if ('linkLabelKeys' === e && eq(C)) { var I = this.uc(a.object), L = this.Hb(C); null !== I && null !== L && (L.labeledLink = I); } c.isModified = !0; } else { if (d === df) { var J = a.oldValue; if ('linkDataArray' === e && 'object' === typeof J && null !== J) this.pq(J); else if ('linkLabelKeys' === e && eq(J)) { var U = this.Hb(J); null !== U && (U.labeledLink = null); } c.isModified = !0; } } else if (d === af) { var R = a.propertyName, da = a.object; if (da === c.model) { if ( 'linkFromKeyProperty' === R || 'linkToKeyProperty' === R || 'linkFromPortIdProperty' === R || 'linkToPortIdProperty' === R || 'linkLabelKeysProperty' === R || 'nodeIsGroupProperty' === R || 'nodeGroupKeyProperty' === R || 'linkCategoryProperty' === R ) c.undoManager.isUndoingRedoing || this.ud(); } else this.updateDataBindings(da, R); c.isModified = !0; } } finally { c.ea = !0; } } } } }; Zp.prototype.refreshDataBoundLinks = function () { var a = this, b = this.diagram.model, c = new F(), d = b.linkDataArray; d.forEach(function (a) { c.add(a); }); var e = []; this.links.each(function (a) { null === a.data || c.contains(a.data) || e.push(a.data); }); e.forEach(function (a) { fq(b, a, !1); }); d.forEach(function (c) { null === a.uc(c) && gq(b, c, !1); }); }; Zp.prototype.updateRelationshipsFromData = function (a) { var b = a.data; if (null !== b) { var c = a.diagram; if (null !== c) { var d = c.model; if (a instanceof S) { var e = cq(d, b, !0); e = c.Hb(e); a.fromNode = e; e = cq(d, b, !1); e = c.Hb(e); a.toNode = e; b = d.sg(b); if (0 < b.length || 0 < a.labelNodes.count) { if (1 === b.length && 1 === a.labelNodes.count) { e = b[0]; var f = a.labelNodes.first(); if (d.pa(f.data) === e) return; } e = new F().addAll(b); var g = new F(); a.labelNodes.each(function (a) { null !== a.data && ((a = d.pa(a.data)), void 0 !== a && g.add(a)); }); b = g.copy(); b.oq(e); e = e.copy(); e.oq(g); if (0 < b.count || 0 < e.count) b.each(function (b) { b = c.Hb(b); null !== b && b.labeledLink === a && (b.labeledLink = null); }), e.each(function (b) { b = c.Hb(b); null !== b && b.labeledLink !== a && (b.labeledLink = a); }); } } else !(a instanceof pf) && ((b = d.Mi(b)), (b = c.findPartForKey(b)), null === b || b instanceof ig) && (a.containingGroup = b); } } }; Zp.prototype.resolveReferencesForData = function (a) { var b = this.diagram.model, c = b.pa(a); if (void 0 !== c) { var d = hq(b, c), e = this.vc(a); if (null !== d && null !== e) { d = d.iterator; for (var f = {}; d.next(); ) { var g = d.value; b.Pb(g) ? e instanceof ig && b.Mi(g) === c && ((g = this.vc(g)), null !== g && (g.containingGroup = e)) : ((f.link = this.uc(g)), null !== f.link && e instanceof V && (cq(b, g, !0) === c && (f.link.fromNode = e), cq(b, g, !1) === c && (f.link.toNode = e), (g = b.sg(g)), Array.isArray(g) && g.some( (function (a) { return function (b) { return b === c ? ((e.labeledLink = a.link), !0) : !1; }; })(f), ))); f = { link: f.link }; } iq(b, c); } a = b.Mi(a); void 0 !== a && ((a = this.Hb(a)), a instanceof ig && (e.containingGroup = a)); } }; Zp.prototype.unresolveReferencesForPart = function (a) { var b = this.diagram.model; if (a instanceof V) { var c = b.pa(a.data); if (void 0 !== c) { for (var d = a.linksConnected; d.next(); ) jq(b, c, d.value.data); a.isLinkLabel && ((d = a.labeledLink), null !== d && jq(b, c, d.data)); if (a instanceof ig) for (a = a.memberParts; a.next(); ) (d = a.value.data), b.Pb(d) && jq(b, c, d); } } }; Zp.prototype.copyPartData = function (a, b) { var c = ti.prototype.copyPartData.call(this, a, b); if (a instanceof S) if (((a = a.data), null !== a && null !== b)) { var d = b.model; a = d.Rp(a); 'object' === typeof a && null !== a && (d.Ci(a), (c = b.uc(a))); } else null !== c && ((b = this.diagram), null !== a && null !== b && null !== b.commandHandler && b.commandHandler.copiesClipboardData && ((b = b.model.Rp(a)), 'object' === typeof b && null !== b && (c.data = b))); return c; }; Zp.prototype.insertLink = function (a, b, c, d) { var e = this.diagram, f = e.model, g = e.toolManager.findTool('Linking'), h = ''; null !== a && (null === b && (b = a), (h = b.portId), null === h && (h = '')); b = ''; null !== c && (null === d && (d = c), (b = d.portId), null === b && (b = '')); d = g.archetypeLinkData; if (d instanceof S) { if ((Yg(d), (f = d.copy()), null !== f)) return ( (f.fromNode = a), (f.fromPortId = h), (f.toNode = c), (f.toPortId = b), e.add(f), (a = g.archetypeLabelNodeData), a instanceof V && (Yg(a), (a = a.copy()), null !== a && ((a.labeledLink = f), e.add(a))), f ); } else if (null !== d && ((d = f.Rp(d)), 'object' === typeof d && null !== d)) return ( null !== a && kq(f, d, f.pa(a.data), !0), lq(f, d, h, !0), null !== c && kq(f, d, f.pa(c.data), !1), lq(f, d, b, !1), f.Ci(d), (a = g.archetypeLabelNodeData), null === a || a instanceof V || ((a = f.copyNodeData(a)), 'object' === typeof a && null !== a && (f.kf(a), (a = f.pa(a)), void 0 !== a && f.Gu(d, a))), e.uc(d) ); return null; }; Zp.prototype.findPartForKey = Zp.prototype.findPartForKey; Zp.prototype.removeAllModeledParts = Zp.prototype.removeAllModeledParts; Zp.prototype.addModeledParts = Zp.prototype.addModeledParts; Zp.prototype.addAllModeledParts = Zp.prototype.addAllModeledParts; Zp.className = 'GraphLinksPartManager'; function mq() { ti.apply(this, arguments); this.ah = null; } oa(mq, ti); function nq(a, b, c) { if (null !== b && null !== c) { var d = a.diagram.toolManager.findTool('Linking'), e = b, f = c; if (a.diagram.isTreePathToChildren) for (b = f.linksConnected; b.next(); ) { if (b.value.toNode === f) return; } else for (e = c, f = b, b = e.linksConnected; b.next(); ) if (b.value.fromNode === e) return; if (null === d || !vg(d, e, f, null, !0)) if ( ((d = a.getLinkCategoryForData(c.data)), (b = a.findLinkTemplateForCategory(d)), null !== b && (Yg(b), (b = b.copy()), null !== b)) ) { var g = a.diagram.skipsModelSourceBindings; a.diagram.skipsModelSourceBindings = !0; b.Af = d; b.jb = c.data; b.fromNode = e; b.toNode = f; a.diagram.add(b); b.jb = null; b.data = c.data; a.diagram.skipsModelSourceBindings = g; } } } mq.prototype.getLinkCategoryForData = function (a) { return this.diagram.model.cv(a); }; mq.prototype.setLinkCategoryForData = function (a, b) { this.diagram.model.Jv(a, b); }; mq.prototype.setFromNodeForLink = function (a, b, c) { var d = this.diagram.model; void 0 === c && (c = null); b = null !== b ? b.data : null; if (this.diagram.isTreePathToChildren) d.Ie(a.data, d.pa(b)); else { var e = this.ah; this.ah = a; null !== c && d.Ie(c.data, void 0); d.Ie(b, d.pa(null !== a.toNode ? a.toNode.data : null)); this.ah = e; } }; mq.prototype.setToNodeForLink = function (a, b, c) { var d = this.diagram.model; void 0 === c && (c = null); b = null !== b ? b.data : null; if (this.diagram.isTreePathToChildren) { var e = this.ah; this.ah = a; null !== c && d.Ie(c.data, void 0); d.Ie(b, d.pa(null !== a.fromNode ? a.fromNode.data : null)); this.ah = e; } else d.Ie(a.data, d.pa(b)); }; mq.prototype.removeDataForLink = function (a) { this.diagram.model.Ie(a.data, void 0); }; mq.prototype.doModelChanged = function (a) { ti.prototype.doModelChanged.call(this, a); if (this.diagram) { var b = this.diagram; if (a.model === b.model) { var c = a.change; if (b.ea) { b.ea = !1; try { var d = a.modelChange; if ('' !== d) { if (c === af) { if ('nodeParentKey' === d) { var e = a.object, f = this.Hb(a.newValue), g = this.Gi(e); if (null !== this.ah) null !== f && ((this.ah.data = e), (this.ah.category = this.getLinkCategoryForData(e))); else if (null !== g) { var h = g.Ji(); null !== h ? null === f ? b.remove(h) : b.isTreePathToChildren ? (h.fromNode = f) : (h.toNode = f) : nq(this, f, g); } } else if ('parentLinkCategory' === d) { var k = this.Gi(a.object), l = a.newValue; if (null !== k && 'string' === typeof l) { var m = k.Ji(); null !== m && (m.category = l); } } b.isModified = !0; } } else if (c === af) { var n = a.propertyName, p = a.object; p === b.model ? 'nodeParentKeyProperty' === n && (b.undoManager.isUndoingRedoing || this.ud()) : this.updateDataBindings(p, n); b.isModified = !0; } } finally { b.ea = !0; } } } } }; mq.prototype.updateRelationshipsFromData = function (a) { var b = a.data; if (null !== b) { var c = a.diagram; if (null !== c) { var d = c.model; a instanceof V && ((b = d.Oi(b)), (b = c.Hb(b)), (d = a.rg()), b !== d && ((d = a.Ji()), null !== b ? null !== d ? c.isTreePathToChildren ? (d.fromNode = b) : (d.toNode = b) : nq(this, b, a) : null !== d && Hj(c, d, !1))); } } }; mq.prototype.updateDataBindings = function (a, b) { ti.prototype.updateDataBindings.call(this, a, b); 'string' === typeof b && null !== this.vc(a) && ((a = this.uc(a)), null !== a && a.Ea(b)); }; mq.prototype.resolveReferencesForData = function (a) { var b = this.diagram.model, c = b.pa(a); if (void 0 !== c) { var d = hq(b, c), e = this.vc(a); if (null !== d && null !== e) { for (d = d.iterator; d.next(); ) { var f = d.value; b.Pb(f) && e instanceof V && b.Oi(f) === c && nq(this, e, this.Gi(f)); } iq(b, c); } a = b.Oi(a); void 0 !== a && e instanceof V && ((a = this.Hb(a)), nq(this, a, e)); } }; mq.prototype.unresolveReferencesForPart = function (a) { var b = this.diagram.model; if (a instanceof V) { var c = b.pa(a.data), d = this.uc(a.data); if (null !== d) { d.isSelected = !1; d.isHighlighted = !1; var e = d.layer; if (null !== e) { var f = e.xc(-1, d, !1); 0 <= f && this.diagram.ab(df, 'parts', e, d, null, f, null); f = d.layerChanged; null !== f && f(d, e, null); } } d = this.diagram.isTreePathToChildren; for (a = a.linksConnected; a.next(); ) (e = a.value), (e = (d ? e.toNode : e.fromNode).data), b.Pb(e) && jq(b, c, e); } }; mq.prototype.insertLink = function (a, b, c) { b = this.diagram.model; var d = a, e = c; this.diagram.isTreePathToChildren || ((d = c), (e = a)); return null !== d && null !== e ? (b.Ie(e.data, b.pa(d.data)), e.Ji()) : null; }; mq.className = 'TreePartManager'; function Z(a) { this.Dt = ',\n "insertedNodeKeys": '; this.fw = ',\n "modifiedNodeData": '; this.Ft = ',\n "removedNodeKeys": '; nb(this); this.ln = this.Ua = ''; this.Of = !1; this.l = {}; this.Fc = []; this.cb = new Lb(); this.mi = 'key'; this.Jk = this.ol = null; this.an = this.bn = !1; this.dn = !0; this.Mm = null; this.xj = 'category'; this.Gf = new Lb(); this.fu = new E(); this.eh = !1; this.u = null; this.undoManager = new ff(); void 0 !== a && (this.nodeDataArray = a); } Z.prototype.cloneProtected = function (a) { a.Ua = this.Ua; a.ln = this.ln; a.Of = this.Of; a.mi = this.mi; a.ol = this.ol; a.Jk = this.Jk; a.bn = this.bn; a.an = this.an; a.dn = this.dn; a.Mm = this.Mm; a.xj = this.xj; }; Z.prototype.copy = function () { var a = new this.constructor(); this.cloneProtected(a); return a; }; t = Z.prototype; t.clear = function () { this.Fc = []; this.cb.clear(); this.Gf.clear(); this.undoManager.clear(); }; t.toString = function (a) { void 0 === a && (a = 0); if (1 < a) return this.uq(); var b = ('' !== this.name ? this.name : '') + ' Model'; if (0 < a) { b += '\n node data:'; a = this.nodeDataArray; for (var c = a.length, d = 0; d < c; d++) { var e = a[d]; b += ' ' + this.pa(e) + ':' + Qa(e); } } return b; }; t.uk = function () { var a = ''; '' !== this.name && (a += ',\n "name": ' + this.quote(this.name)); '' !== this.dataFormat && (a += ',\n "dataFormat": ' + this.quote(this.dataFormat)); this.isReadOnly && (a += ',\n "isReadOnly": ' + this.isReadOnly); 'key' !== this.nodeKeyProperty && 'string' === typeof this.nodeKeyProperty && (a += ',\n "nodeKeyProperty": ' + this.quote(this.nodeKeyProperty)); this.copiesArrays && (a += ',\n "copiesArrays": true'); this.copiesArrayObjects && (a += ',\n "copiesArrayObjects": true'); this.copiesKey || (a += ',\n "copiesKey": false'); 'category' !== this.nodeCategoryProperty && 'string' === typeof this.nodeCategoryProperty && (a += ',\n "nodeCategoryProperty": ' + this.quote(this.nodeCategoryProperty)); return a; }; t.nq = function (a) { a.name && (this.name = a.name); a.dataFormat && (this.dataFormat = a.dataFormat); a.isReadOnly && (this.isReadOnly = !0); a.nodeKeyProperty && (this.nodeKeyProperty = a.nodeKeyProperty); a.copiesArrays && (this.copiesArrays = !0); a.copiesArrayObjects && (this.copiesArrayObjects = !0); !1 === a.copiesKey && (this.copiesKey = !1); a.nodeCategoryProperty && (this.nodeCategoryProperty = a.nodeCategoryProperty); }; function oq(a) { return ',\n "modelData": ' + pq(a, a.modelData); } function qq(a, b) { b = b.modelData; Ca(b) && (a.pm(b), (a.modelData = b)); } t.aw = function () { var a = this.modelData, b = !1, c; for (c in a) if (!rq(c, a[c])) { b = !0; break; } a = ''; b && (a = oq(this)); return a + ',\n "nodeDataArray": ' + sq(this, this.nodeDataArray, !0); }; t.xv = function (a) { qq(this, a); a = a.nodeDataArray; Ea(a) && (this.pm(a), (this.nodeDataArray = a)); }; function tq(a, b, c, d) { if (b === c) return !0; if (typeof b !== typeof c || 'function' === typeof b || 'function' === typeof c) return !1; if (Array.isArray(b) && Array.isArray(c)) { if (d.J(b) === c) return !0; d.add(b, c); if (b.length !== c.length) return !1; for (var e = 0; e < b.length; e++) if (!tq(a, b[e], c[e], d)) return !1; return !0; } if (Ca(b) && Ca(c)) { if (d.J(b) === c) return !0; d.add(b, c); for (var f in b) { var g = b[f]; if (!rq(f, g)) { var h = c[f]; if (void 0 === h || !tq(a, g, h, d)) return !1; } } for (e in c) if (((f = c[e]), !rq(e, f) && ((g = b[e]), void 0 === g || !tq(a, g, f, d)))) return !1; return !0; } return !1; } function uq(a, b, c) { a[c] !== b[c] && A( 'Model.computeJsonDifference: Model.' + c + ' is not the same in both models: "' + a[c] + '" and "' + b[c] + '"', ); } t.yq = function (a) { uq(this, a, 'nodeKeyProperty'); for ( var b = new F(), c = new F(), d = new F().addAll(this.cb.iteratorKeys), e = new Lb(), f = a.nodeDataArray, g = f.length, h = 0; h < g; h++ ) { var k = f[h], l = a.pa(k); if (void 0 !== l) { d.remove(l); var m = this.Qb(l); null === m ? (b.add(l), c.add(k)) : tq(this, m, k, e) || c.add(k); } else this.gt(k), (l = this.pa(k)), b.add(l), c.add(k); } f = ''; tq(this, this.modelData, a.modelData, e) || (f += oq(this)); 0 < b.count && (f += this.Dt + sq(this, b.Na(), !0)); 0 < c.count && (f += this.fw + sq(this, c.Na(), !0)); 0 < d.count && (f += this.Ft + sq(this, d.Na(), !0)); return f; }; t.qy = function (a, b) { void 0 === b && (b = vq(this, this)); return '{ "class": ' + this.quote(b) + ', "incremental": 1' + this.uk() + this.yq(a) + '}'; }; t.yt = function (a, b) { var c = this, d = !1, e = new F(), f = new F(), g = new F(); a.changes.each(function (a) { a.model === c && ('nodeDataArray' === a.modelChange ? a.change === cf ? e.add(a.newValue) : a.change === df && g.add(a.oldValue) : c.Pb(a.object) ? f.add(a.object) : c.modelData === a.object && a.change === af && (d = !0)); }); var h = new F(); e.each(function (a) { h.add(c.pa(a)); b || f.add(a); }); var k = new F(); g.each(function (a) { k.add(c.pa(a)); b && f.add(a); }); a = ''; d && (a += oq(this)); 0 < h.count && (a += (b ? this.Ft : this.Dt) + sq(this, h.Na(), !0)); 0 < f.count && (a += this.fw + sq(this, f.Na(), !0)); 0 < k.count && (a += (b ? this.Dt : this.Ft) + sq(this, k.Na(), !0)); return a; }; t.wv = function (a) { qq(this, a); var b = a.insertedNodeKeys, c = a.modifiedNodeData, d = new Lb(); if (Array.isArray(c)) for (var e = 0; e < c.length; e++) { var f = c[e], g = this.pa(f); void 0 !== g && null !== g && d.set(g, f); } if (Array.isArray(b)) for (e = b.length, f = 0; f < e; f++) { g = b[f]; var h = this.Qb(g); null === h && ((h = (h = d.get(g)) ? h : this.copyNodeData({})), this.vm(h, g), this.kf(h)); } if (Array.isArray(c)) for (b = c.length, d = 0; d < b; d++) if (((e = c[d]), (f = this.pa(e)), (f = this.Qb(f)), null !== f)) for (var k in e) '__gohashid' === k || k === this.nodeKeyProperty || (this.dk() && k === this.nodeIsGroupProperty) || this.setDataProperty(f, k, e[k]); a = a.removedNodeKeys; if (Array.isArray(a)) for (c = a.length, k = 0; k < c; k++) (b = this.Qb(a[k])), null !== b && this.om(b); }; t.Lx = function (a, b) { a.change !== bf && A('Model.toIncrementalJson argument is not a Transaction ChangedEvent:' + a.toString()); var c = a.object; if (!(a.isTransactionFinished && c instanceof ef)) return '{ "incremental": 0 }'; void 0 === b && (b = vq(this, this)); return '2' === b ? '{ "incremental": 2' + this.yt(c, 'FinishedUndo' === a.propertyName) + '}' : '{ "class": ' + this.quote(b) + ', "incremental": 1' + this.uk() + this.yt(c, 'FinishedUndo' === a.propertyName) + '}'; }; t.Wz = function (a, b) { return this.Lx(a, b); }; t.uq = function (a) { void 0 === a && (a = vq(this, this)); return '{ "class": ' + this.quote(a) + this.uk() + this.aw() + '}'; }; t.toJSON = function (a) { return this.uq(a); }; t.Tw = function (a) { var b = null; if ('string' === typeof a) try { b = w.JSON.parse(a); } catch (d) {} else 'object' === typeof a ? (b = a) : A('Unable to modify a Model from: ' + a); var c = b.incremental; 'number' !== typeof c && A('Unable to apply non-incremental changes to Model: ' + a); 0 !== c && (this.Aa('applyIncrementalJson'), this.wv(b), this.Za('applyIncrementalJson')); }; t.ky = function (a) { return this.Tw(a); }; Z.constructGraphLinksModel = function () { return new Z(); }; t = Z.prototype; t.pm = function (a) { if (Ea(a)) for (var b = a.length, c = 0; c < b; c++) { var d = a[c]; if (Ca(d)) { var e = c; d = this.pm(d); Array.isArray(a) ? (a[e] = d) : A('Cannot replace an object in an HTMLCollection or NodeList at ' + e); } } else if (Ca(a)) { for (c in a) if ( ((e = a[c]), Ca(e) && ((e = this.pm(e)), (a[c] = e), 'points' === c && Array.isArray(e))) ) { d = 0 === e.length % 2; for (var f = 0; f < e.length; f++) if ('number' !== typeof e[f]) { d = !1; break; } if (d) { d = new E(); for (f = 0; f < e.length / 2; f++) d.add(new G(e[2 * f], e[2 * f + 1])); d.freeze(); a[c] = d; } } if ('object' === typeof a) { c = a; e = a['class']; if ('NaN' === e) c = NaN; else if ('Date' === e) c = new Date(a.value); else if ('go.Point' === e) c = new G(wq(a.x), wq(a.y)); else if ('go.Size' === e) c = new M(wq(a.width), wq(a.height)); else if ('go.Rect' === e) c = new N(wq(a.x), wq(a.y), wq(a.width), wq(a.height)); else if ('go.Margin' === e) c = new Ic(wq(a.top), wq(a.right), wq(a.bottom), wq(a.left)); else if ('go.Spot' === e) 'string' === typeof a['enum'] ? (c = Xd(a['enum'])) : (c = new O(wq(a.x), wq(a.y), wq(a.offsetX), wq(a.offsetY))); else if ('go.Brush' === e) { if ( ((c = new il()), (c.type = qb(il, a.type)), 'string' === typeof a.color && (c.color = a.color), a.start instanceof O && (c.start = a.start), a.end instanceof O && (c.end = a.end), 'number' === typeof a.startRadius && (c.startRadius = wq(a.startRadius)), 'number' === typeof a.endRadius && (c.endRadius = wq(a.endRadius)), (a = a.colorStops), Ca(a)) ) for (b in a) c.addColorStop(parseFloat(b), a[b]); } else 'go.Geometry' === e ? ((b = null), 'string' === typeof a.path ? (b = me(a.path)) : (b = new $d()), (b.type = qb($d, a.type)), 'number' === typeof a.startX && (b.startX = wq(a.startX)), 'number' === typeof a.startY && (b.startY = wq(a.startY)), 'number' === typeof a.endX && (b.endX = wq(a.endX)), 'number' === typeof a.endY && (b.endY = wq(a.endY)), a.spot1 instanceof O && (b.spot1 = a.spot1), a.spot2 instanceof O && (b.spot2 = a.spot2), (c = b)) : 'go.EnumValue' === e && ((b = a.classType), 0 === b.indexOf('go.') && (b = b.substr(3)), (c = qb(xq[b] ? xq[b] : null, a.name))); a = c; } } return a; }; t.quote = function (a) { for (var b = '', c = a.length, d = 0; d < c; d++) { var e = a[d]; if ('"' === e || '\\' === e) b += '\\' + e; else if ('\b' === e) b += '\\b'; else if ('\f' === e) b += '\\f'; else if ('\n' === e) b += '\\n'; else if ('\r' === e) b += '\\r'; else if ('\t' === e) b += '\\t'; else { var f = a.charCodeAt(d); b = 16 > f ? b + ('\\u000' + a.charCodeAt(d).toString(16)) : 32 > f ? b + ('\\u00' + a.charCodeAt(d).toString(16)) : 8232 === f ? b + '\\u2028' : 8233 === f ? b + '\\u2029' : b + e; } } return '"' + b + '"'; }; t.zm = function (a) { return void 0 === a ? 'undefined' : null === a ? 'null' : !0 === a ? 'true' : !1 === a ? 'false' : 'string' === typeof a ? this.quote(a) : 'number' === typeof a ? Infinity === a ? '9e9999' : -Infinity === a ? '-9e9999' : isNaN(a) ? '{"class":"NaN"}' : a.toString() : a instanceof Date ? '{"class":"Date", "value":"' + a.toJSON() + '"}' : a instanceof Number ? this.zm(a.valueOf()) : Ea(a) ? sq(this, a) : Ca(a) ? pq(this, a) : 'function' === typeof a ? 'null' : a.toString(); }; function sq(a, b, c) { void 0 === c && (c = !1); var d = b.length; if (0 >= d) return '[]'; var e = new sb(); e.add('[ '); c && 1 < d && e.add('\n'); for (var f = 0; f < d; f++) { var g = b[f]; void 0 !== g && (0 < f && (e.add(','), c && e.add('\n')), e.add(a.zm(g))); } c && 1 < d && e.add('\n'); e.add(' ]'); return e.toString(); } function rq(a, b) { return void 0 === b || '__gohashid' === a || '_' === a[0] || 'function' === typeof b ? !0 : !1; } function yq(a) { return isNaN(a) ? 'NaN' : Infinity === a ? '9e9999' : -Infinity === a ? '-9e9999' : a; } function pq(a, b) { var c = b; if (c instanceof G) b = { class: 'go.Point', x: yq(c.x), y: yq(c.y) }; else if (c instanceof M) b = { class: 'go.Size', width: yq(c.width), height: yq(c.height) }; else if (c instanceof N) b = { class: 'go.Rect', x: yq(c.x), y: yq(c.y), width: yq(c.width), height: yq(c.height) }; else if (c instanceof Ic) b = { class: 'go.Margin', top: yq(c.top), right: yq(c.right), bottom: yq(c.bottom), left: yq(c.left), }; else if (c instanceof O) c.gb() ? (b = { class: 'go.Spot', x: yq(c.x), y: yq(c.y), offsetX: yq(c.offsetX), offsetY: yq(c.offsetY), }) : (b = { class: 'go.Spot', enum: c.toString() }); else if (c instanceof il) { b = { class: 'go.Brush', type: c.type.name }; if (c.type === ll) b.color = c.color; else if (c.type === ol || c.type === jl) (b.start = c.start), (b.end = c.end), c.type === jl && (0 !== c.startRadius && (b.startRadius = yq(c.startRadius)), isNaN(c.endRadius) || (b.endRadius = yq(c.endRadius))); if (null !== c.colorStops) { var d = {}; for (c = c.colorStops.iterator; c.next(); ) d[c.key] = c.value; b.colorStops = d; } } else c instanceof $d ? ((b = { class: 'go.Geometry', type: c.type.name }), 0 !== c.startX && (b.startX = yq(c.startX)), 0 !== c.startY && (b.startY = yq(c.startY)), 0 !== c.endX && (b.endX = yq(c.endX)), 0 !== c.endY && (b.endY = yq(c.endY)), c.spot1.A(Tc) || (b.spot1 = c.spot1), c.spot2.A(hd) || (b.spot2 = c.spot2), c.type === ae && (b.path = je(c))) : c instanceof D && (b = { class: 'go.EnumValue', classType: vq(a, c.classType), name: c.name }); d = '{'; c = !0; for (var e in b) { var f = en(b, e); if (!rq(e, f)) if ((c ? (c = !1) : (d += ', '), (d += '"' + e + '":'), 'points' === e && f instanceof E)) { var g = '['; for (f = f.iterator; f.next(); ) { var h = f.value; 1 < g.length && (g += ','); g += a.zm(h.x); g += ','; g += a.zm(h.y); } g += ']'; d += g; } else d += a.zm(f); } return d + '}'; } function wq(a) { return 'number' === typeof a ? a : 'NaN' === a ? NaN : '9e9999' === a ? Infinity : '-9e9999' === a ? -Infinity : parseFloat(a); } t.rh = function (a) { this.fu.add(a); }; t.qk = function (a) { this.fu.remove(a); }; t.Ks = function (a) { this.skipsUndoManager || this.undoManager.gv(a); for (var b = this.fu, c = b.length, d = 0; d < c; d++) b.N(d)(a); }; t.ab = function (a, b, c, d, e, f, g) { zq(this, '', a, b, c, d, e, f, g); }; t.g = function (a, b, c, d, e) { zq(this, '', af, a, this, b, c, d, e); }; t.lt = function (a, b, c, d, e, f) { zq(this, '', af, b, a, c, d, e, f); }; function zq(a, b, c, d, e, f, g, h, k) { void 0 === h && (h = null); void 0 === k && (k = null); var l = new $e(); l.model = a; l.change = c; l.modelChange = b; l.propertyName = d; l.object = e; l.oldValue = f; l.oldParam = h; l.newValue = g; l.newParam = k; a.Ks(l); } t.Sj = function (a, b) { if (null !== a && a.model === this) if (a.change === af) Oj(a.object, a.propertyName, a.J(b)); else if (a.change === cf) { var c = a.newParam; if ('nodeDataArray' === a.modelChange) { if (((a = a.newValue), Ca(a) && 'number' === typeof c)) { var d = this.pa(a); b ? (this.Fc[c] === a && Ja(this.Fc, c), void 0 !== d && this.cb.remove(d)) : (this.Fc[c] !== a && Ia(this.Fc, c, a), void 0 !== d && this.cb.add(d, a)); } } else '' === a.modelChange ? ((d = a.object) && !Ea(d) && a.propertyName && (d = en(a.object, a.propertyName)), Ea(d) && 'number' === typeof c && ((a = a.newValue), b ? Ja(d, c) : Ia(d, c, a))) : A('unknown ChangedEvent.Insert modelChange: ' + a.toString()); } else a.change === df ? ((c = a.oldParam), 'nodeDataArray' === a.modelChange ? ((a = a.oldValue), Ca(a) && 'number' === typeof c && ((d = this.pa(a)), b ? (this.Fc[c] !== a && Ia(this.Fc, c, a), void 0 !== d && this.cb.add(d, a)) : (this.Fc[c] === a && Ja(this.Fc, c), void 0 !== d && this.cb.remove(d)))) : '' === a.modelChange ? ((d = a.object) && !Ea(d) && a.propertyName && (d = en(a.object, a.propertyName)), Ea(d) && 'number' === typeof c && ((a = a.oldValue), b ? Ia(d, c, a) : Ja(d, c))) : A('unknown ChangedEvent.Remove modelChange: ' + a.toString())) : a.change !== bf && A('unknown ChangedEvent: ' + a.toString()); }; t.Aa = function (a) { return this.undoManager.Aa(a); }; t.Za = function (a) { return this.undoManager.Za(a); }; t.wf = function () { return this.undoManager.wf(); }; Z.prototype.commit = function (a, b) { void 0 === b && (b = ''); var c = this.skipsUndoManager; null === b && ((this.skipsUndoManager = !0), (b = '')); this.undoManager.Aa(b); var d = !1; try { a(this), (d = !0); } finally { d ? this.undoManager.Za(b) : this.undoManager.wf(), (this.skipsUndoManager = c); } }; t = Z.prototype; t.Ea = function (a, b) { void 0 === b && (b = ''); zq(this, 'SourceChanged', bf, b, a, null, null); }; t.pa = function (a) { if (null !== a) { var b = this.mi; if ('' !== b && ((b = en(a, b)), void 0 !== b)) { if (eq(b)) return b; A('Key value for node data ' + a + ' is not a number or a string: ' + b); } } }; t.vm = function (a, b) { if (null !== a) { var c = this.mi; if ('' !== c) if (this.Pb(a)) { var d = en(a, c); d !== b && null === this.Qb(b) && (Oj(a, c, b), void 0 !== d && this.cb.remove(d), this.cb.add(b, a), zq(this, 'nodeKey', af, c, a, d, b), 'string' === typeof c && this.Ea(a, c), this.qq(d, b)); } else Oj(a, c, b); } }; function eq(a) { return 'number' === typeof a || 'string' === typeof a; } t.Pb = function (a) { var b = this.pa(a); return void 0 === b ? !1 : this.cb.J(b) === a; }; t.Qb = function (a) { null === a && A('Model.findNodeDataForKey:key must not be null'); return void 0 !== a && eq(a) ? this.cb.J(a) : null; }; t.gt = function (a) { if (null !== a) { var b = this.mi; if ('' !== b) { var c = this.pa(a); if (void 0 === c || this.cb.contains(c)) { var d = this.ol; if ( null !== d && ((c = d(this, a)), void 0 !== c && null !== c && !this.cb.contains(c)) ) { Oj(a, b, c); return; } if ('string' === typeof c) { for (d = 2; this.cb.contains(c + d); ) d++; Oj(a, b, c + d); } else if (void 0 === c || 'number' === typeof c) { for (c = -this.cb.count - 1; this.cb.contains(c); ) c--; Oj(a, b, c); } } } } }; t.kf = function (a) { null !== a && (Db(a), this.Pb(a) || Xp(this, a, !0)); }; function Xp(a, b, c) { var d = a.pa(b); if (void 0 === d || a.cb.J(d) !== b) a.gt(b), (d = a.pa(b)), void 0 === d ? A('Model.makeNodeDataKeyUnique failed on ' + b + '. Data not added to Model.') : (a.cb.add(d, b), (d = null), c && ((d = a.Fc.length), Ia(a.Fc, d, b)), zq(a, 'nodeDataArray', cf, 'nodeDataArray', a, null, b, null, d), a.rm(b), a.qm(b)); } t.hy = function (a) { if (Ea(a)) for (var b = a.length, c = 0; c < b; c++) this.kf(a[c]); else for (a = a.iterator; a.next(); ) this.kf(a.value); }; t.om = function (a) { null !== a && Wp(this, a, !0); }; function Wp(a, b, c) { var d = a.pa(b); void 0 !== d && a.cb.remove(d); d = null; if (c) { a: if (((c = a.Fc), Array.isArray(c))) d = c.indexOf(b); else { d = c.length; for (var e = 0; e < d; e++) if (c[e] === b) { d = e; break a; } d = -1; } if (0 > d) return; Ja(a.Fc, d); } zq(a, 'nodeDataArray', df, 'nodeDataArray', a, b, null, d, null); a.vq(b); } t.Nz = function (a) { if (Ea(a)) for (var b = a.length, c = 0; c < b; c++) this.om(a[c]); else for (a = a.iterator; a.next(); ) this.om(a.value); }; t.Cz = function (a) { if (Ea(a)) { for (var b = new F(this.cb.iteratorKeys), c = new F(), d = a.length, e = 0; e < d; e++) { var f = a[e], g = this.pa(f); if (void 0 !== g) { c.add(g); var h = this.Qb(g); null !== h ? this.Rj(h, f) : ((h = {}), this.vm(h, g), this.Rj(h, f), this.kf(h)); } else this.kf(f), c.add(this.pa(f)); } for (a = b.iterator; a.next(); ) (b = a.value), c.contains(b) || ((b = this.Qb(b)) && this.om(b)); } }; t.qq = function (a, b) { void 0 !== b && ((a = hq(this, a)), a instanceof F && this.Gf.add(b, a)); }; t.Xv = function () {}; t.rm = function () {}; t.qm = function () {}; t.vq = function () {}; function jq(a, b, c) { if (void 0 !== b) { var d = a.Gf.J(b); null === d && ((d = new F()), a.Gf.add(b, d)); d.add(c); } } function iq(a, b, c) { if (void 0 !== b) { var d = a.Gf.J(b); d instanceof F && (void 0 === c || null === c ? a.Gf.remove(b) : (d.remove(c), 0 === d.count && a.Gf.remove(b))); } } function hq(a, b) { if (void 0 === b) return null; a = a.Gf.J(b); return a instanceof F ? a : null; } t.Mu = function (a) { void 0 === a ? this.Gf.clear() : this.Gf.remove(a); }; Z.prototype.copyNodeData = function (a) { if (null === a) return null; var b = this.Jk; a = null !== b ? b(a, this) : Aq(this, a, !0); Ca(a) && nb(a); return a; }; function Aq(a, b, c) { if (a.copiesArrays && Array.isArray(b)) { var d = []; for (c = 0; c < b.length; c++) { var e = Aq(a, b[c], a.copiesArrayObjects); d.push(e); } nb(d); return d; } if (c && Ca(b)) { c = (c = b.constructor) ? new c() : {}; e = a.copiesKey || 'string' !== typeof a.nodeKeyProperty ? null : a.nodeKeyProperty; for (d in b) if ('__gohashid' === d) c.__gohashid = void 0; else if (d === e) c[e] = void 0; else { var f = en(b, d), g = vq(a, f); 'GraphObject' === g || 'Diagram' === g || 'Layer' === g || 'RowColumnDefinition' === g || 'AnimationManager' === g || 'Tool' === g || 'CommandHandler' === g || 'Layout' === g || 'InputEvent' === g || 'DiagramEvent' === g || f instanceof Z || f instanceof ff || f instanceof ef || f instanceof $e ? Oj(c, d, f) : ((f = Aq(a, f, !1)), Oj(c, d, f)); } nb(c); return c; } return b instanceof G ? b.copy() : b instanceof M ? b.copy() : b instanceof N ? b.copy() : b instanceof O ? b.copy() : b instanceof Ic ? b.copy() : b; } Z.prototype.setDataProperty = function (a, b, c) { if (this.Pb(a)) if (b === this.nodeKeyProperty) this.vm(a, c); else { if (b === this.nodeCategoryProperty) { this.sq(a, c); return; } } else !Bq && a instanceof Y && ((Bq = !0), za('Model.setDataProperty is modifying a GraphObject, "' + a.toString() + '"'), za(' Is that really your intent?')); var d = en(a, b); d !== c && (Oj(a, b, c), this.lt(a, b, d, c)); }; t = Z.prototype; t.set = function (a, b, c) { this.setDataProperty(a, b, c); }; t.Rj = function (a, b) { if (b) { var c = this.Pb(a), d; for (d in b) '__gohashid' === d || (c && d === this.nodeKeyProperty) || this.setDataProperty(a, d, b[d]); } }; t.ay = function (a, b) { this.Xs(a, -1, b); }; t.Xs = function (a, b, c) { 0 > b && (b = a.length); Ia(a, b, c); zq(this, '', cf, '', a, null, c, null, b); }; t.yv = function (a, b) { void 0 === b && (b = -1); a === this.Fc && A('Model.removeArrayItem should not be called on the Model.nodeDataArray'); -1 === b && (b = a.length - 1); var c = a[b]; Ja(a, b); zq(this, '', df, '', a, c, null, b, null); }; t.Us = function (a) { if (null === a) return ''; var b = this.xj; if ('' === b) return ''; b = en(a, b); if (void 0 === b) return ''; if ('string' === typeof b) return b; A('getCategoryForNodeData found a non-string category for ' + a + ': ' + b); return ''; }; t.sq = function (a, b) { if (null !== a) { var c = this.xj; if ('' !== c) if (this.Pb(a)) { var d = en(a, c); void 0 === d && (d = ''); d !== b && (Oj(a, c, b), zq(this, 'nodeCategory', af, c, a, d, b)); } else Oj(a, c, b); } }; t.fm = function () { return !1; }; t.dk = function () { return !1; }; t.em = function () { return !1; }; t.ct = function () { return !1; }; t.ek = function () { return !1; }; function xi() { return new Z(); } function vq(a, b) { if ('function' === typeof b) { if (b.className) return b.className; if (b.name) return b.name; } else if ('object' === typeof b && null !== b && b.constructor) return vq(a, b.constructor); return typeof b; } function en(a, b) { if (!a || !b) return null; try { if ('function' === typeof b) var c = b(a); else 'function' === typeof a.getAttribute ? ((c = a.getAttribute(b)), null === c && (c = void 0)) : (c = a[b]); } catch (d) {} return c; } function Oj(a, b, c) { if (a && b) try { 'function' === typeof b ? b(a, c) : 'function' === typeof a.setAttribute ? a.setAttribute(b, c) : (a[b] = c); } catch (d) {} } pa.Object.defineProperties(Z.prototype, { name: { get: function () { return this.Ua; }, set: function (a) { var b = this.Ua; b !== a && ((this.Ua = a), this.g('name', b, a)); }, }, dataFormat: { get: function () { return this.ln; }, set: function (a) { var b = this.ln; b !== a && ((this.ln = a), this.g('dataFormat', b, a)); }, }, isReadOnly: { get: function () { return this.Of; }, set: function (a) { var b = this.Of; b !== a && ((this.Of = a), this.g('isReadOnly', b, a)); }, }, modelData: { get: function () { return this.l; }, set: function (a) { var b = this.l; b !== a && ((this.l = a), this.g('modelData', b, a), this.Ea(a)); }, }, undoManager: { get: function () { return this.u; }, set: function (a) { var b = this.u; b !== a && (null !== b && b.yx(this), (this.u = a), null !== a && a.Rw(this)); }, }, skipsUndoManager: { get: function () { return this.eh; }, set: function (a) { this.eh = a; }, }, nodeKeyProperty: { get: function () { return this.mi; }, set: function (a) { var b = this.mi; b !== a && ('' === a && A('Model.nodeKeyProperty may not be the empty string'), 0 < this.cb.count && A('Cannot set Model.nodeKeyProperty when there is existing node data'), (this.mi = a), this.g('nodeKeyProperty', b, a)); }, }, makeUniqueKeyFunction: { get: function () { return this.ol; }, set: function (a) { var b = this.ol; b !== a && ((this.ol = a), this.g('makeUniqueKeyFunction', b, a)); }, }, nodeDataArray: { get: function () { return this.Fc; }, set: function (a) { var b = this.Fc; if (b !== a) { this.cb.clear(); this.Xv(); for (var c = a.length, d = 0; d < c; d++) { var e = a[d]; if (!Ca(e)) { A('Model.nodeDataArray must only contain Objects, not: ' + e); return; } Db(e); } this.Fc = a; d = new E(); for (e = 0; e < c; e++) { var f = a[e], g = this.pa(f); void 0 === g ? d.add(f) : null !== this.cb.J(g) ? d.add(f) : this.cb.add(g, f); } for (d = d.iterator; d.next(); ) (e = d.value), this.gt(e), (f = this.pa(e)), void 0 !== f && this.cb.add(f, e); zq(this, 'nodeDataArray', af, 'nodeDataArray', this, b, a); for (b = 0; b < c; b++) (d = a[b]), this.rm(d), this.qm(d); this.Mu(); Array.isArray(a) || (this.isReadOnly = !0); } }, }, copyNodeDataFunction: { get: function () { return this.Jk; }, set: function (a) { var b = this.Jk; b !== a && ((this.Jk = a), this.g('copyNodeDataFunction', b, a)); }, }, copiesArrays: { get: function () { return this.bn; }, set: function (a) { var b = this.bn; b !== a && ((this.bn = a), this.g('copiesArrays', b, a)); }, }, copiesArrayObjects: { get: function () { return this.an; }, set: function (a) { var b = this.an; b !== a && ((this.an = a), this.g('copiesArrayObjects', b, a)); }, }, copiesKey: { get: function () { return this.dn; }, set: function (a) { var b = this.dn; b !== a && ((this.dn = a), this.g('copiesKey', b, a)); }, }, afterCopyFunction: { get: function () { return this.Mm; }, set: function (a) { var b = this.Mm; b !== a && ((this.Mm = a), this.g('afterCopyFunction', b, a)); }, }, nodeCategoryProperty: { get: function () { return this.xj; }, set: function (a) { var b = this.xj; b !== a && ((this.xj = a), this.g('nodeCategoryProperty', b, a)); }, }, }); pa.Object.defineProperties(Z, { type: { get: function () { return 'Model'; }, }, }); Z.prototype.setCategoryForNodeData = Z.prototype.sq; Z.prototype.getCategoryForNodeData = Z.prototype.Us; Z.prototype.removeArrayItem = Z.prototype.yv; Z.prototype.insertArrayItem = Z.prototype.Xs; Z.prototype.addArrayItem = Z.prototype.ay; Z.prototype.assignAllDataProperties = Z.prototype.Rj; Z.prototype.set = Z.prototype.set; Z.prototype.clearUnresolvedReferences = Z.prototype.Mu; Z.prototype.mergeNodeDataArray = Z.prototype.Cz; Z.prototype.removeNodeDataCollection = Z.prototype.Nz; Z.prototype.removeNodeData = Z.prototype.om; Z.prototype.addNodeDataCollection = Z.prototype.hy; Z.prototype.addNodeData = Z.prototype.kf; Z.prototype.makeNodeDataKeyUnique = Z.prototype.gt; Z.prototype.findNodeDataForKey = Z.prototype.Qb; Z.prototype.containsNodeData = Z.prototype.Pb; Z.prototype.setKeyForNodeData = Z.prototype.vm; Z.prototype.getKeyForNodeData = Z.prototype.pa; Z.prototype.updateTargetBindings = Z.prototype.Ea; Z.prototype.commit = Z.prototype.commit; Z.prototype.rollbackTransaction = Z.prototype.wf; Z.prototype.commitTransaction = Z.prototype.Za; Z.prototype.startTransaction = Z.prototype.Aa; Z.prototype.raiseDataChanged = Z.prototype.lt; Z.prototype.raiseChanged = Z.prototype.g; Z.prototype.raiseChangedEvent = Z.prototype.ab; Z.prototype.removeChangedListener = Z.prototype.qk; Z.prototype.addChangedListener = Z.prototype.rh; Z.prototype.writeJsonValue = Z.prototype.zm; Z.prototype.replaceJsonObjects = Z.prototype.pm; Z.prototype.applyIncrementalJSON = Z.prototype.ky; Z.prototype.applyIncrementalJson = Z.prototype.Tw; Z.prototype.toJSON = Z.prototype.toJSON; Z.prototype.toJson = Z.prototype.uq; Z.prototype.toIncrementalJSON = Z.prototype.Wz; Z.prototype.toIncrementalJson = Z.prototype.Lx; Z.prototype.computeJsonDifference = Z.prototype.qy; Z.prototype.clear = Z.prototype.clear; var Bq = !1, xq = {}; Z.className = 'Model'; Z.fromJSON = Z.fromJson = function (a, b) { void 0 === b && (b = null); var c = null; if ('string' === typeof a) try { c = w.JSON.parse(a); } catch (f) {} else 'object' === typeof a ? (c = a) : A('Unable to construct a Model from: ' + a); if (null === b) { a = null; var d = c['class']; if ('string' === typeof d) try { var e = null; 0 === d.indexOf('go.') ? ((d = d.substr(3)), (e = xq[d] ? xq[d] : null)) : ((e = xq[d] ? xq[d] : null), void 0 === e && (e = w[d])); 'function' === typeof e && (a = new e()); } catch (f) {} null === a || a instanceof Z ? (b = a) : A('Unable to construct a Model of declared class: ' + c['class']); } null === b && (b = Z.constructGraphLinksModel()); b.nq(c); b.xv(c); return b; }; Z.safePropertyValue = en; Z.safePropertySet = Oj; xq.Brush = il; xq.ChangedEvent = $e; xq.Geometry = $d; xq.GraphObject = Y; xq.Margin = Ic; xq.Panel = X; xq.Point = G; xq.Rect = N; xq.Size = M; xq.Spot = O; xq.Transaction = ef; xq.UndoManager = ff; function Ei(a, b, c) { nb(this); this.v = !1; void 0 === a && (a = ''); void 0 === b && (b = a); void 0 === c && (c = null); this.l = -1; this.Qd = null; this.Ol = a; this.Nl = this.yp = 0; this.ws = null; this.Vn = !1; this.El = b; this.$m = c; this.ro = Cq; this.Um = null; this.Yt = new F(); } Ei.prototype.copy = function () { var a = new Ei(); a.Ol = this.Ol; a.yp = this.yp; a.Nl = this.Nl; a.ws = this.ws; a.Vn = this.Vn; a.El = this.El; a.$m = this.$m; a.ro = this.ro; a.Um = this.Um; return a; }; t = Ei.prototype; t.fb = function (a) { a.classType === Ei && (this.mode = a); }; t.toString = function () { return ( 'Binding(' + this.targetProperty + ':' + this.sourceProperty + (-1 !== this.Yi ? ' ' + this.Yi : '') + ' ' + this.mode.name + ')' ); }; t.freeze = function () { this.v = !0; return this; }; t.ha = function () { this.v = !1; return this; }; t.qx = function (a) { void 0 === a && (a = null); this.mode = Ym; this.backConverter = a; return this; }; t.kq = function (a) { void 0 === a && (a = ''); this.sourceName = a; this.isToModel = !1; return this; }; t.Ez = function () { this.sourceName = null; this.isToModel = !0; return this; }; function Wk(a, b, c) { a = a.sourceName; return null === a || '' === a ? b : '/' === a ? c.part : '.' === a ? c : '..' === a ? c.panel : b.$a(a); } t.Yv = function (a, b, c) { var d = this.El; if (void 0 === c || '' === d || d === c) { c = this.Ol; var e = this.$m; if (null === e && '' === c) za('Binding error: target property is the empty string: ' + this.toString()); else { var f = b; '' !== d && (f = en(b, d)); if (void 0 !== f) if (null === e) '' !== c && Oj(a, c, f); else try { if ('' !== c) { var g = e(f, a); Oj(a, c, g); } else e(f, a); } catch (h) {} } } }; t.xq = function (a, b, c, d) { if (this.ro === Ym) { var e = this.Ol; if (void 0 === c || e === c) { c = this.El; var f = this.Um, g = a; '' !== e && (g = en(a, e)); if (void 0 !== g && !this.Yt.contains(a)) try { this.Yt.add(a); var h = null !== d ? d.diagram : null, k = null !== h ? h.model : null; if (null === f) if ('' !== c) null !== k ? k.setDataProperty(b, c, g) : Oj(b, c, g); else { if ( null !== k && null !== d && 0 <= d.itemIndex && null !== d.panel && Array.isArray(d.panel.itemArray) ) { var l = d.itemIndex, m = d.panel.itemArray; k.yv(m, l); k.Xs(m, l, g); } } else try { if ('' !== c) { var n = f(g, b, k); null !== k ? k.setDataProperty(b, c, n) : Oj(b, c, n); } else { var p = f(g, b, k); if ( void 0 !== p && null !== k && null !== d && 0 <= d.itemIndex && null !== d.panel && Array.isArray(d.panel.itemArray) ) { var q = d.itemIndex, r = d.panel.itemArray; k.yv(r, q); k.Xs(r, q, p); } } } catch (u) {} } finally { this.Yt.remove(a); } } } }; pa.Object.defineProperties(Ei.prototype, { Yi: { get: function () { return this.l; }, set: function (a) { this.v && wa(this); this.l = a; }, }, targetProperty: { get: function () { return this.Ol; }, set: function (a) { this.v && wa(this); this.Ol = a; }, }, sourceName: { get: function () { return this.ws; }, set: function (a) { this.v && wa(this); this.ws = a; null !== a && (this.Vn = !1); }, }, isToModel: { get: function () { return this.Vn; }, set: function (a) { this.v && wa(this); this.Vn = a; }, }, sourceProperty: { get: function () { return this.El; }, set: function (a) { this.v && wa(this); this.El = a; }, }, converter: { get: function () { return this.$m; }, set: function (a) { this.v && wa(this); this.$m = a; }, }, backConverter: { get: function () { return this.Um; }, set: function (a) { this.v && wa(this); this.Um = a; }, }, mode: { get: function () { return this.ro; }, set: function (a) { this.v && wa(this); this.ro = a; }, }, }); Ei.prototype.updateSource = Ei.prototype.xq; Ei.prototype.updateTarget = Ei.prototype.Yv; Ei.prototype.ofModel = Ei.prototype.Ez; Ei.prototype.ofObject = Ei.prototype.kq; Ei.prototype.makeTwoWay = Ei.prototype.qx; var Cq = new D(Ei, 'OneWay', 1), Ym = new D(Ei, 'TwoWay', 2); Ei.className = 'Binding'; Ei.parseEnum = function (a, b) { return function (c) { c = qb(a, c); return null === c ? b : c; }; }; Ei.toString = Qa; Ei.OneWay = Cq; Ei.TwoWay = Ym; function Dq(a, b) { Z.call(this); this.Ct = ',\n "insertedLinkKeys": '; this.ew = ',\n "modifiedLinkData": '; this.Et = ',\n "removedLinkKeys": '; this.Oc = []; this.Pf = new F(); this.qb = new Lb(); this.ii = ''; this.aj = this.Ik = this.pl = null; this.Ve = 'from'; this.We = 'to'; this.uj = this.tj = ''; this.sj = 'category'; this.Hd = ''; this.tl = 'isGroup'; this.se = 'group'; this.cn = !1; void 0 !== a && (this.nodeDataArray = a); void 0 !== b && (this.linkDataArray = b); } oa(Dq, Z); Dq.constructGraphLinksModel = Z.constructGraphLinksModel; Dq.prototype.cloneProtected = function (a) { Z.prototype.cloneProtected.call(this, a); a.ii = this.ii; a.pl = this.pl; a.Ik = this.Ik; a.Ve = this.Ve; a.We = this.We; a.tj = this.tj; a.uj = this.uj; a.sj = this.sj; a.Hd = this.Hd; a.tl = this.tl; a.se = this.se; a.cn = this.cn; }; t = Dq.prototype; t.clear = function () { Z.prototype.clear.call(this); this.Oc = []; this.qb.clear(); this.Pf.clear(); }; t.toString = function (a) { void 0 === a && (a = 0); if (2 <= a) return this.uq(); var b = ('' !== this.name ? this.name : '') + ' GraphLinksModel'; if (0 < a) { b += '\n node data:'; a = this.nodeDataArray; var c = a.length, d; for (d = 0; d < c; d++) { var e = a[d]; b += ' ' + this.pa(e) + ':' + Qa(e); } b += '\n link data:'; a = this.linkDataArray; c = a.length; for (d = 0; d < c; d++) (e = a[d]), (b += ' ' + cq(this, e, !0) + '--\x3e' + cq(this, e, !1)); } return b; }; t.uk = function () { var a = Z.prototype.uk.call(this), b = ''; 'category' !== this.linkCategoryProperty && 'string' === typeof this.linkCategoryProperty && (b += ',\n "linkCategoryProperty": ' + this.quote(this.linkCategoryProperty)); '' !== this.linkKeyProperty && 'string' === typeof this.linkKeyProperty && (b += ',\n "linkKeyProperty": ' + this.quote(this.linkKeyProperty)); 'from' !== this.linkFromKeyProperty && 'string' === typeof this.linkFromKeyProperty && (b += ',\n "linkFromKeyProperty": ' + this.quote(this.linkFromKeyProperty)); 'to' !== this.linkToKeyProperty && 'string' === typeof this.linkToKeyProperty && (b += ',\n "linkToKeyProperty": ' + this.quote(this.linkToKeyProperty)); '' !== this.linkFromPortIdProperty && 'string' === typeof this.linkFromPortIdProperty && (b += ',\n "linkFromPortIdProperty": ' + this.quote(this.linkFromPortIdProperty)); '' !== this.linkToPortIdProperty && 'string' === typeof this.linkToPortIdProperty && (b += ',\n "linkToPortIdProperty": ' + this.quote(this.linkToPortIdProperty)); '' !== this.linkLabelKeysProperty && 'string' === typeof this.linkLabelKeysProperty && (b += ',\n "linkLabelKeysProperty": ' + this.quote(this.linkLabelKeysProperty)); 'isGroup' !== this.nodeIsGroupProperty && 'string' === typeof this.nodeIsGroupProperty && (b += ',\n "nodeIsGroupProperty": ' + this.quote(this.nodeIsGroupProperty)); 'group' !== this.nodeGroupKeyProperty && 'string' === typeof this.nodeGroupKeyProperty && (b += ',\n "nodeGroupKeyProperty": ' + this.quote(this.nodeGroupKeyProperty)); return a + b; }; t.nq = function (a) { Z.prototype.nq.call(this, a); a.linkKeyProperty && (this.linkKeyProperty = a.linkKeyProperty); a.linkFromKeyProperty && (this.linkFromKeyProperty = a.linkFromKeyProperty); a.linkToKeyProperty && (this.linkToKeyProperty = a.linkToKeyProperty); a.linkFromPortIdProperty && (this.linkFromPortIdProperty = a.linkFromPortIdProperty); a.linkToPortIdProperty && (this.linkToPortIdProperty = a.linkToPortIdProperty); a.linkCategoryProperty && (this.linkCategoryProperty = a.linkCategoryProperty); a.linkLabelKeysProperty && (this.linkLabelKeysProperty = a.linkLabelKeysProperty); a.nodeIsGroupProperty && (this.nodeIsGroupProperty = a.nodeIsGroupProperty); a.nodeGroupKeyProperty && (this.nodeGroupKeyProperty = a.nodeGroupKeyProperty); }; t.aw = function () { var a = Z.prototype.aw.call(this), b = ',\n "linkDataArray": ' + sq(this, this.linkDataArray, !0); return a + b; }; t.xv = function (a) { Z.prototype.xv.call(this, a); a = a.linkDataArray; Array.isArray(a) && (this.pm(a), (this.linkDataArray = a)); }; t.yq = function (a) { if (!(a instanceof Dq)) return A('Model.computeJsonDifference: newmodel must be a GraphLinksModel'), ''; var b = Z.prototype.yq.call(this, a); uq(this, a, 'linkKeyProperty'); uq(this, a, 'linkFromKeyProperty'); uq(this, a, 'linkToKeyProperty'); uq(this, a, 'linkLabelKeysProperty'); uq(this, a, 'nodeIsGroupProperty'); uq(this, a, 'nodeGroupKeyProperty'); for ( var c = new F(), d = new F(), e = new F().addAll(this.qb.iteratorKeys), f = new Lb(), g = a.linkDataArray, h = g.length, k = 0; k < h; k++ ) { var l = g[k], m = a.ic(l); if (void 0 !== m) { e.remove(m); var n = this.xh(m); null === n ? (c.add(m), d.add(l)) : tq(this, n, l, f) || d.add(l); } else this.hq(l), (m = this.ic(l)), c.add(m), d.add(l); } a = b; 0 < c.count && (a += this.Ct + sq(this, c.Na(), !0)); 0 < d.count && (a += this.ew + sq(this, d.Na(), !0)); 0 < e.count && (a += this.Et + sq(this, e.Na(), !0)); return a; }; t.yt = function (a, b) { var c = Z.prototype.yt.call(this, a, b), d = this, e = new F(), f = new F(), g = new F(); a.changes.each(function (a) { a.model === d && ('linkDataArray' === a.modelChange ? a.change === cf ? e.add(a.newValue) : a.change === df && g.add(a.oldValue) : d.Be(a.object) && f.add(a.object)); }); var h = new F(); e.each(function (a) { h.add(d.ic(a)); b || f.add(a); }); var k = new F(); g.each(function (a) { k.add(d.ic(a)); b && f.add(a); }); a = c; 0 < h.count && (a += (b ? this.Et : this.Ct) + sq(this, h.Na(), !0)); 0 < f.count && (a += this.ew + sq(this, f.Na(), !0)); 0 < k.count && (a += (b ? this.Ct : this.Et) + sq(this, k.Na(), !0)); return a; }; t.wv = function (a) { Z.prototype.wv.call(this, a); var b = a.insertedLinkKeys; if (Array.isArray(b)) for (var c = b.length, d = 0; d < c; d++) { var e = b[d], f = this.xh(e); null === f && ((f = this.Rp({})), this.ut(f, e), this.Ci(f)); } b = a.modifiedLinkData; if (Array.isArray(b)) for (c = b.length, d = 0; d < c; d++) if (((e = b[d]), (f = this.ic(e)), (f = this.xh(f)), null !== f)) for (var g in e) '__gohashid' !== g && g !== this.linkKeyProperty && this.setDataProperty(f, g, e[g]); a = a.removedLinkKeys; if (Array.isArray(a)) for (g = a.length, b = 0; b < g; b++) (c = this.xh(a[b])), null !== c && this.nm(c); }; t.Sj = function (a, b) { if (a.change === cf) { var c = a.newParam; if ('linkDataArray' === a.modelChange) { a = a.newValue; if (Ca(a) && 'number' === typeof c) { var d = this.ic(a); b ? (this.Pf.remove(a), this.Oc[c] === a && this.Oc.splice(c, 1), void 0 !== d && this.qb.remove(d)) : (this.Pf.add(a), this.Oc[c] !== a && this.Oc.splice(c, 0, a), void 0 !== d && this.qb.add(d, a)); } return; } if ('linkLabelKeys' === a.modelChange) { d = this.sg(a.object); Array.isArray(d) && 'number' === typeof c && (b ? ((c = d.indexOf(a.newValue)), 0 <= c && d.splice(c, 1)) : 0 > d.indexOf(a.newValue) && d.splice(c, 0, a.newValue)); return; } } else if (a.change === df) { c = a.oldParam; if ('linkDataArray' === a.modelChange) { a = a.oldValue; Ca(a) && 'number' === typeof c && ((d = this.ic(a)), b ? (this.Pf.add(a), this.Oc[c] !== a && this.Oc.splice(c, 0, a), void 0 !== d && this.qb.add(d, a)) : (this.Pf.remove(a), this.Oc[c] === a && this.Oc.splice(c, 1), void 0 !== d && this.qb.remove(d))); return; } if ('linkLabelKeys' === a.modelChange) { d = this.sg(a.object); Array.isArray(d) && 'number' === typeof c && (b ? 0 > d.indexOf(a.newValue) && d.splice(c, 0, a.newValue) : ((c = d.indexOf(a.newValue)), 0 <= c && d.splice(c, 1))); return; } } Z.prototype.Sj.call(this, a, b); }; t.gm = function (a) { if (void 0 !== a) { var b = this.aj; if (null !== b) { var c = this.Qb(a); null === c && ((c = this.copyNodeData(b)), Oj(c, this.nodeKeyProperty, a), this.kf(c)); } return a; } }; t.Zy = function (a) { return cq(this, a, !0); }; t.Cx = function (a, b) { kq(this, a, b, !0); }; t.dz = function (a) { return cq(this, a, !1); }; t.Hx = function (a, b) { kq(this, a, b, !1); }; function cq(a, b, c) { if (null !== b && ((a = c ? a.Ve : a.We), '' !== a && ((a = en(b, a)), void 0 !== a))) { if (eq(a)) return a; A( (c ? 'FromKey' : 'ToKey') + ' value for link data ' + b + ' is not a number or a string: ' + a, ); } } function kq(a, b, c, d) { null === c && (c = void 0); if (null !== b) { var e = d ? a.Ve : a.We; if ('' !== e) if (((c = a.gm(c)), a.Be(b))) { var f = en(b, e); f !== c && (iq(a, f, b), Oj(b, e, c), null === a.Qb(c) && jq(a, c, b), zq(a, d ? 'linkFromKey' : 'linkToKey', af, e, b, f, c), 'string' === typeof e && a.Ea(b, e)); } else Oj(b, e, c); } } t.$y = function (a) { return bq(this, a, !0); }; t.Ex = function (a, b) { lq(this, a, b, !0); }; t.ez = function (a) { return bq(this, a, !1); }; t.Ix = function (a, b) { lq(this, a, b, !1); }; function bq(a, b, c) { if (null === b) return ''; a = c ? a.tj : a.uj; if ('' === a) return ''; b = en(b, a); return void 0 === b ? '' : b; } function lq(a, b, c, d) { if (null !== b) { var e = d ? a.tj : a.uj; if ('' !== e) if (a.Be(b)) { var f = en(b, e); void 0 === f && (f = ''); f !== c && (Oj(b, e, c), zq(a, d ? 'linkFromPortId' : 'linkToPortId', af, e, b, f, c), 'string' === typeof e && a.Ea(b, e)); } else Oj(b, e, c); } } t.sg = function (a) { if (null === a) return Eq; var b = this.Hd; if ('' === b) return Eq; a = en(a, b); return void 0 === a ? Eq : a; }; t.Iv = function (a, b) { if (null !== a) { var c = this.Hd; if ('' !== c) if (this.Be(a)) { var d = en(a, c); void 0 === d && (d = Eq); if (d !== b) { if (Array.isArray(d)) for (var e = d.length, f = 0; f < e; f++) iq(this, d[f], a); Oj(a, c, b); e = b.length; for (f = 0; f < e; f++) { var g = b[f]; null === this.Qb(g) && jq(this, g, a); } zq(this, 'linkLabelKeys', af, c, a, d, b); 'string' === typeof c && this.Ea(a, c); } } else Oj(a, c, b); } }; t.Gu = function (a, b) { if (null !== b && void 0 !== b && null !== a) { var c = this.Hd; if ('' !== c) { var d = en(a, c); if (void 0 === d) (c = []), c.push(b), this.Iv(a, c); else if (Array.isArray(d)) { var e = d.indexOf(b); 0 <= e || ((e = d.length), d.push(b), this.Be(a) && (null === this.Qb(b) && jq(this, b, a), zq(this, 'linkLabelKeys', cf, c, a, null, b, null, e))); } else A(c + ' property is not an Array; cannot addLabelKeyForLinkData: ' + a); } } }; t.xx = function (a, b) { if (null !== b && void 0 !== b && null !== a) { var c = this.Hd; if ('' !== c) { var d = en(a, c); if (Array.isArray(d)) { var e = d.indexOf(b); 0 > e || (d.splice(e, 1), this.Be(a) && (iq(this, b, a), zq(this, 'linkLabelKeys', df, c, a, b, null, e, null))); } else void 0 !== d && A(c + ' property is not an Array; cannot removeLabelKeyforLinkData: ' + a); } } }; t.ic = function (a) { if (null !== a) { var b = this.ii; if ('' !== b && ((b = en(a, b)), void 0 !== b)) { if (eq(b)) return b; A('Key value for link data ' + a + ' is not a number or a string: ' + b); } } }; t.ut = function (a, b) { if (null !== a) { var c = this.ii; if ('' !== c) if (this.Be(a)) { var d = en(a, c); d !== b && null === this.xh(b) && (Oj(a, c, b), void 0 !== d && this.qb.remove(d), this.qb.add(b, a), zq(this, 'linkKey', af, c, a, d, b), 'string' === typeof c && this.Ea(a, c)); } else Oj(a, c, b); } }; t.xh = function (a) { null === a && A('GraphLinksModel.findLinkDataForKey:key must not be null'); return void 0 !== a && eq(a) ? this.qb.J(a) : null; }; t.hq = function (a) { if (null !== a) { var b = this.ii; if ('' !== b) { var c = this.ic(a); if (void 0 === c || this.qb.contains(c)) { var d = this.pl; if ( null !== d && ((c = d(this, a)), void 0 !== c && null !== c && !this.qb.contains(c)) ) { Oj(a, b, c); return; } if ('string' === typeof c) { for (d = 2; this.qb.contains(c + d); ) d++; Oj(a, b, c + d); } else if (void 0 === c || 'number' === typeof c) { for (c = -this.qb.count - 1; this.qb.contains(c); ) c--; Oj(a, b, c); } } } } }; t.Be = function (a) { return null === a ? !1 : this.Pf.contains(a); }; t.Ci = function (a) { null !== a && (Db(a), this.Be(a) || gq(this, a, !0)); }; function gq(a, b, c) { if ('' !== a.linkKeyProperty) { var d = a.ic(b); if (void 0 !== d && a.qb.J(d) === b) return; a.hq(b); d = a.ic(b); if (void 0 === d) { A('GraphLinksModel.makeLinkDataKeyUnique failed on ' + b + '. Data not added to model.'); return; } a.qb.add(d, b); } a.Pf.add(b); d = null; c && ((d = a.Oc.length), a.Oc.splice(d, 0, b)); zq(a, 'linkDataArray', cf, 'linkDataArray', a, null, b, null, d); Fq(a, b); } t.gy = function (a) { if (Array.isArray(a)) for (var b = a.length, c = 0; c < b; c++) this.Ci(a[c]); else for (a = a.iterator; a.next(); ) this.Ci(a.value); }; t.nm = function (a) { null !== a && fq(this, a, !0); }; function fq(a, b, c) { a.Pf.remove(b); var d = a.ic(b); void 0 !== d && a.qb.remove(d); d = null; if (c) { d = a.Oc.indexOf(b); if (0 > d) return; a.Oc.splice(d, 1); } zq(a, 'linkDataArray', df, 'linkDataArray', a, b, null, d, null); c = cq(a, b, !0); iq(a, c, b); c = cq(a, b, !1); iq(a, c, b); d = a.sg(b); if (Array.isArray(d)) for (var e = d.length, f = 0; f < e; f++) (c = d[f]), iq(a, c, b); } t.Lz = function (a) { if (Array.isArray(a)) for (var b = a.length, c = 0; c < b; c++) this.nm(a[c]); else for (a = a.iterator; a.next(); ) this.nm(a.value); }; t.Bz = function (a) { if (Ea(a)) { for (var b = new F(this.qb.iteratorKeys), c = new F(), d = a.length, e = 0; e < d; e++) { var f = a[e], g = this.ic(f); if (void 0 !== g) { c.add(g); var h = this.xh(g); null !== h ? this.Rj(h, f) : ((h = {}), this.ut(h, g), this.Rj(h, f), this.Ci(h)); } else this.Ci(f), c.add(this.ic(f)); } for (a = b.iterator; a.next(); ) (b = a.value), c.contains(b) || ((b = this.xh(b)) && this.nm(b)); } }; function Fq(a, b) { var c = cq(a, b, !0); c = a.gm(c); null === a.Qb(c) && jq(a, c, b); c = cq(a, b, !1); c = a.gm(c); null === a.Qb(c) && jq(a, c, b); var d = a.sg(b); if (Array.isArray(d)) for (var e = d.length, f = 0; f < e; f++) (c = d[f]), null === a.Qb(c) && jq(a, c, b); } t.Rp = function (a) { if (null === a) return null; var b = this.Ik; a = null !== b ? b(a, this) : Aq(this, a, !0); Ca(a) && (nb(a), '' !== this.Ve && Oj(a, this.Ve, void 0), '' !== this.We && Oj(a, this.We, void 0), '' !== this.Hd && Oj(a, this.Hd, [])); return a; }; t.lv = function (a) { if (null === a) return !1; var b = this.tl; return '' === b ? !1 : en(a, b) ? !0 : !1; }; t.Mi = function (a) { if (null !== a) { var b = this.se; if ('' !== b && ((b = en(a, b)), void 0 !== b)) { if (eq(b)) return b; A('GroupKey value for node data ' + a + ' is not a number or a string: ' + b); } } }; t.tt = function (a, b) { null === b && (b = void 0); if (null !== a) { var c = this.se; if ('' !== c) if (this.Pb(a)) { var d = en(a, c); d !== b && (iq(this, d, a), Oj(a, c, b), null === this.Qb(b) && jq(this, b, a), zq(this, 'nodeGroupKey', af, c, a, d, b), 'string' === typeof c && this.Ea(a, c)); } else Oj(a, c, b); } }; Dq.prototype.copyNodeData = function (a) { if (null === a) return null; a = Z.prototype.copyNodeData.call(this, a); this.Wj || '' === this.se || void 0 === en(a, this.se) || Oj(a, this.se, void 0); return a; }; Dq.prototype.setDataProperty = function (a, b, c) { if (this.Pb(a)) if (b === this.nodeKeyProperty) this.vm(a, c); else { if (b === this.nodeCategoryProperty) { this.sq(a, c); return; } if (b === this.nodeGroupKeyProperty) { this.tt(a, c); return; } } else if (this.Be(a)) { if (b === this.linkFromKeyProperty) { kq(this, a, c, !0); return; } if (b === this.linkToKeyProperty) { kq(this, a, c, !1); return; } if (b === this.linkFromPortIdProperty) { lq(this, a, c, !0); return; } if (b === this.linkToPortIdProperty) { lq(this, a, c, !1); return; } if (b === this.linkKeyProperty) { this.ut(a, c); return; } if (b === this.linkCategoryProperty) { this.st(a, c); return; } if (b === this.linkLabelKeysProperty) { this.Iv(a, c); return; } } var d = en(a, b); d !== c && (Oj(a, b, c), this.lt(a, b, d, c)); }; t = Dq.prototype; t.Rj = function (a, b) { if (b) { var c = this.Pb(a), d = this.Be(a), e; for (e in b) '__gohashid' === e || (c && e === this.nodeKeyProperty) || (d && e === this.linkKeyProperty) || this.setDataProperty(a, e, b[e]); } }; t.qq = function (a, b) { Z.prototype.qq.call(this, a, b); for (var c = this.cb.iterator; c.next(); ) this.Cv(c.value, a, b); for (c = this.Pf.iterator; c.next(); ) { var d = c.value, e = a, f = b; if (cq(this, d, !0) === e) { var g = this.Ve; Oj(d, g, f); zq(this, 'linkFromKey', af, g, d, e, f); 'string' === typeof g && this.Ea(d, g); } cq(this, d, !1) === e && ((g = this.We), Oj(d, g, f), zq(this, 'linkToKey', af, g, d, e, f), 'string' === typeof g && this.Ea(d, g)); g = this.sg(d); if (Array.isArray(g)) for (var h = g.length, k = this.Hd, l = 0; l < h; l++) g[l] === e && ((g[l] = f), zq(this, 'linkLabelKeys', cf, k, d, e, f, l, l)); } }; t.Cv = function (a, b, c) { if (this.Mi(a) === b) { var d = this.se; Oj(a, d, c); zq(this, 'nodeGroupKey', af, d, a, b, c); 'string' === typeof d && this.Ea(a, d); } }; t.Xv = function () { Z.prototype.Xv.call(this); for (var a = this.linkDataArray, b = a.length, c = 0; c < b; c++) Fq(this, a[c]); }; t.rm = function (a) { Z.prototype.rm.call(this, a); a = this.pa(a); var b = hq(this, a); if (null !== b) { var c = Ka(); for (b = b.iterator; b.next(); ) { var d = b.value; if (this.Pb(d)) { if (this.Mi(d) === a) { var e = this.se; zq(this, 'nodeGroupKey', af, e, d, a, a); 'string' === typeof e && this.Ea(d, e); c.push(d); } } else if ( (cq(this, d, !0) === a && ((e = this.Ve), zq(this, 'linkFromKey', af, e, d, a, a), 'string' === typeof e && this.Ea(d, e), c.push(d)), cq(this, d, !1) === a && ((e = this.We), zq(this, 'linkToKey', af, e, d, a, a), 'string' === typeof e && this.Ea(d, e), c.push(d)), (e = this.sg(d)), Array.isArray(e)) ) for (var f = e.length, g = this.Hd, h = 0; h < f; h++) e[h] === a && (zq(this, 'linkLabelKeys', cf, g, d, a, a, h, h), c.push(d)); } for (b = 0; b < c.length; b++) iq(this, a, c[b]); Oa(c); } }; t.qm = function (a) { Z.prototype.qm.call(this, a); var b = this.Mi(a); null === this.Qb(b) && jq(this, b, a); }; t.vq = function (a) { Z.prototype.vq.call(this, a); var b = this.Mi(a); iq(this, b, a); }; t.bv = function (a) { if (null === a) return ''; var b = this.sj; if ('' === b) return ''; b = en(a, b); if (void 0 === b) return ''; if ('string' === typeof b) return b; A('getCategoryForLinkData found a non-string category for ' + a + ': ' + b); return ''; }; Dq.prototype.getLinkCategoryForData = function (a) { return this.bv(a); }; Dq.prototype.st = function (a, b) { if (null !== a) { var c = this.sj; if ('' !== c) if (this.Be(a)) { var d = en(a, c); void 0 === d && (d = ''); d !== b && (Oj(a, c, b), zq(this, 'linkCategory', af, c, a, d, b), 'string' === typeof c && this.Ea(a, c)); } else Oj(a, c, b); } }; Dq.prototype.setLinkCategoryForData = function (a, b) { this.st(a, b); }; Dq.prototype.dk = function () { return !0; }; Dq.prototype.em = function () { return !0; }; Dq.prototype.ct = function () { return !0; }; Dq.prototype.ek = function () { return !0; }; pa.Object.defineProperties(Dq.prototype, { archetypeNodeData: { get: function () { return this.aj; }, set: function (a) { var b = this.aj; b !== a && ((this.aj = a), this.g('archetypeNodeData', b, a)); }, }, linkFromKeyProperty: { get: function () { return this.Ve; }, set: function (a) { var b = this.Ve; b !== a && ((this.Ve = a), this.g('linkFromKeyProperty', b, a)); }, }, linkToKeyProperty: { get: function () { return this.We; }, set: function (a) { var b = this.We; b !== a && ((this.We = a), this.g('linkToKeyProperty', b, a)); }, }, linkFromPortIdProperty: { get: function () { return this.tj; }, set: function (a) { var b = this.tj; b !== a && ((this.tj = a), this.g('linkFromPortIdProperty', b, a)); }, }, linkToPortIdProperty: { get: function () { return this.uj; }, set: function (a) { var b = this.uj; b !== a && ((this.uj = a), this.g('linkToPortIdProperty', b, a)); }, }, linkLabelKeysProperty: { get: function () { return this.Hd; }, set: function (a) { var b = this.Hd; b !== a && ((this.Hd = a), this.g('linkLabelKeysProperty', b, a)); }, }, linkDataArray: { get: function () { return this.Oc; }, set: function (a) { var b = this.Oc; if (b !== a) { this.qb.clear(); for (var c = a.length, d = 0; d < c; d++) { var e = a[d]; if (!Ca(e)) { A('GraphLinksModel.linkDataArray must only contain Objects, not: ' + e); return; } Db(e); } this.Oc = a; if ('' !== this.linkKeyProperty) { d = new E(); for (e = 0; e < c; e++) { var f = a[e], g = this.ic(f); void 0 === g ? d.add(f) : null !== this.qb.J(g) ? d.add(f) : this.qb.add(g, f); } for (d = d.iterator; d.next(); ) (e = d.value), this.hq(e), (f = this.ic(e)), void 0 !== f && this.qb.add(f, e); } d = new F(); for (e = 0; e < c; e++) d.add(a[e]); this.Pf = d; zq(this, 'linkDataArray', af, 'linkDataArray', this, b, a); for (b = 0; b < c; b++) Fq(this, a[b]); } }, }, linkKeyProperty: { get: function () { return this.ii; }, set: function (a) { var b = this.ii; if (b !== a) { this.ii = a; this.qb.clear(); for (var c = this.linkDataArray.length, d = 0; d < c; d++) { var e = this.linkDataArray[d], f = this.ic(e); void 0 === f && (this.hq(e), (f = this.ic(e))); void 0 !== f && this.qb.add(f, e); } this.g('linkKeyProperty', b, a); } }, }, makeUniqueLinkKeyFunction: { get: function () { return this.pl; }, set: function (a) { var b = this.pl; b !== a && ((this.pl = a), this.g('makeUniqueLinkKeyFunction', b, a)); }, }, copyLinkDataFunction: { get: function () { return this.Ik; }, set: function (a) { var b = this.Ik; b !== a && ((this.Ik = a), this.g('copyLinkDataFunction', b, a)); }, }, nodeIsGroupProperty: { get: function () { return this.tl; }, set: function (a) { var b = this.tl; b !== a && ((this.tl = a), this.g('nodeIsGroupProperty', b, a)); }, }, nodeGroupKeyProperty: { get: function () { return this.se; }, set: function (a) { var b = this.se; b !== a && ((this.se = a), this.g('nodeGroupKeyProperty', b, a)); }, }, Wj: { get: function () { return this.cn; }, set: function (a) { this.cn !== a && (this.cn = a); }, }, linkCategoryProperty: { get: function () { return this.sj; }, set: function (a) { var b = this.sj; b !== a && ((this.sj = a), this.g('linkCategoryProperty', b, a)); }, }, }); pa.Object.defineProperties(Dq, { type: { get: function () { return 'GraphLinksModel'; }, }, }); Dq.prototype.setCategoryForLinkData = Dq.prototype.st; Dq.prototype.getCategoryForLinkData = Dq.prototype.bv; Dq.prototype.assignAllDataProperties = Dq.prototype.Rj; Dq.prototype.setGroupKeyForNodeData = Dq.prototype.tt; Dq.prototype.getGroupKeyForNodeData = Dq.prototype.Mi; Dq.prototype.isGroupForNodeData = Dq.prototype.lv; Dq.prototype.copyLinkData = Dq.prototype.Rp; Dq.prototype.mergeLinkDataArray = Dq.prototype.Bz; Dq.prototype.removeLinkDataCollection = Dq.prototype.Lz; Dq.prototype.removeLinkData = Dq.prototype.nm; Dq.prototype.addLinkDataCollection = Dq.prototype.gy; Dq.prototype.addLinkData = Dq.prototype.Ci; Dq.prototype.containsLinkData = Dq.prototype.Be; Dq.prototype.makeLinkDataKeyUnique = Dq.prototype.hq; Dq.prototype.findLinkDataForKey = Dq.prototype.xh; Dq.prototype.setKeyForLinkData = Dq.prototype.ut; Dq.prototype.getKeyForLinkData = Dq.prototype.ic; Dq.prototype.removeLabelKeyForLinkData = Dq.prototype.xx; Dq.prototype.addLabelKeyForLinkData = Dq.prototype.Gu; Dq.prototype.setLabelKeysForLinkData = Dq.prototype.Iv; Dq.prototype.getLabelKeysForLinkData = Dq.prototype.sg; Dq.prototype.setToPortIdForLinkData = Dq.prototype.Ix; Dq.prototype.getToPortIdForLinkData = Dq.prototype.ez; Dq.prototype.setFromPortIdForLinkData = Dq.prototype.Ex; Dq.prototype.getFromPortIdForLinkData = Dq.prototype.$y; Dq.prototype.setToKeyForLinkData = Dq.prototype.Hx; Dq.prototype.getToKeyForLinkData = Dq.prototype.dz; Dq.prototype.setFromKeyForLinkData = Dq.prototype.Cx; Dq.prototype.getFromKeyForLinkData = Dq.prototype.Zy; Dq.prototype.clear = Dq.prototype.clear; var Eq = Object.freeze([]); Dq.className = 'GraphLinksModel'; xq.GraphLinksModel = Dq; Z.constructGraphLinksModel = Z.constructGraphLinksModel = function () { return new Dq(); }; Z.initDiagramModel = xi = function () { return new Dq(); }; function Gq(a) { Z.call(this); this.te = 'parent'; this.en = !1; this.Aj = 'parentLinkCategory'; void 0 !== a && (this.nodeDataArray = a); } oa(Gq, Z); Gq.constructGraphLinksModel = Z.constructGraphLinksModel; Gq.prototype.cloneProtected = function (a) { Z.prototype.cloneProtected.call(this, a); a.te = this.te; a.en = this.en; a.Aj = this.Aj; }; t = Gq.prototype; t.toString = function (a) { void 0 === a && (a = 0); if (2 <= a) return this.uq(); var b = ('' !== this.name ? this.name : '') + ' TreeModel'; if (0 < a) { b += '\n node data:'; a = this.nodeDataArray; for (var c = a.length, d = 0; d < c; d++) { var e = a[d]; b += ' ' + this.pa(e) + ':' + Qa(e); } } return b; }; t.uk = function () { var a = Z.prototype.uk.call(this), b = ''; 'parent' !== this.nodeParentKeyProperty && 'string' === typeof this.nodeParentKeyProperty && (b += ',\n "nodeParentKeyProperty": ' + this.quote(this.nodeParentKeyProperty)); return a + b; }; t.nq = function (a) { Z.prototype.nq.call(this, a); a.nodeParentKeyProperty && (this.nodeParentKeyProperty = a.nodeParentKeyProperty); }; t.yq = function (a) { uq(this, a, 'nodeParentKeyProperty'); return Z.prototype.yq.call(this, a); }; t.gm = function (a) { return a; }; t.Oi = function (a) { if (null !== a) { var b = this.te; if ('' !== b && ((b = en(a, b)), void 0 !== b)) { if (eq(b)) return b; A('ParentKey value for node data ' + a + ' is not a number or a string: ' + b); } } }; t.Ie = function (a, b) { null === b && (b = void 0); if (null !== a) { var c = this.te; if ('' !== c) if (((b = this.gm(b)), this.Pb(a))) { var d = en(a, c); d !== b && (iq(this, d, a), Oj(a, c, b), null === this.Qb(b) && jq(this, b, a), zq(this, 'nodeParentKey', af, c, a, d, b), 'string' === typeof c && this.Ea(a, c)); } else Oj(a, c, b); } }; t.cv = function (a) { if (null === a) return ''; var b = this.Aj; if ('' === b) return ''; b = en(a, b); if (void 0 === b) return ''; if ('string' === typeof b) return b; A('getParentLinkCategoryForNodeData found a non-string category for ' + a + ': ' + b); return ''; }; Gq.prototype.getLinkCategoryForData = function (a) { return this.cv(a); }; Gq.prototype.Jv = function (a, b) { if (null !== a) { var c = this.Aj; if ('' !== c) if (this.Pb(a)) { var d = en(a, c); void 0 === d && (d = ''); d !== b && (Oj(a, c, b), zq(this, 'parentLinkCategory', af, c, a, d, b), 'string' === typeof c && this.Ea(a, c)); } else Oj(a, c, b); } }; Gq.prototype.setLinkCategoryForData = function (a, b) { this.Jv(a, b); }; Gq.prototype.copyNodeData = function (a) { if (null === a) return null; a = Z.prototype.copyNodeData.call(this, a); this.Xj || '' === this.te || void 0 === en(a, this.te) || Oj(a, this.te, void 0); return a; }; Gq.prototype.setDataProperty = function (a, b, c) { if (this.Pb(a)) if (b === this.nodeKeyProperty) this.vm(a, c); else { if (b === this.nodeCategoryProperty) { this.sq(a, c); return; } if (b === this.nodeParentKeyProperty) { this.Ie(a, c); return; } } var d = en(a, b); d !== c && (Oj(a, b, c), this.lt(a, b, d, c)); }; t = Gq.prototype; t.qq = function (a, b) { Z.prototype.qq.call(this, a, b); for (var c = this.cb.iterator; c.next(); ) this.Cv(c.value, a, b); }; t.Cv = function (a, b, c) { if (this.Oi(a) === b) { var d = this.te; Oj(a, d, c); zq(this, 'nodeParentKey', af, d, a, b, c); 'string' === typeof d && this.Ea(a, d); } }; t.rm = function (a) { Z.prototype.rm.call(this, a); a = this.pa(a); var b = hq(this, a); if (null !== b) { var c = Ka(); for (b = b.iterator; b.next(); ) { var d = b.value; if (this.Pb(d) && this.Oi(d) === a) { var e = this.te; zq(this, 'nodeParentKey', af, e, d, a, a); 'string' === typeof e && this.Ea(d, e); c.push(d); } } for (b = 0; b < c.length; b++) iq(this, a, c[b]); Oa(c); } }; t.qm = function (a) { Z.prototype.qm.call(this, a); var b = this.Oi(a); b = this.gm(b); null === this.Qb(b) && jq(this, b, a); }; t.vq = function (a) { Z.prototype.vq.call(this, a); var b = this.Oi(a); iq(this, b, a); }; t.fm = function () { return !0; }; t.ct = function () { return !0; }; pa.Object.defineProperties(Gq.prototype, { nodeParentKeyProperty: { get: function () { return this.te; }, set: function (a) { var b = this.te; b !== a && ((this.te = a), this.g('nodeParentKeyProperty', b, a)); }, }, Xj: { get: function () { return this.en; }, set: function (a) { this.en !== a && (this.en = a); }, }, parentLinkCategoryProperty: { get: function () { return this.Aj; }, set: function (a) { var b = this.Aj; b !== a && ((this.Aj = a), this.g('parentLinkCategoryProperty', b, a)); }, }, linkCategoryProperty: { get: function () { return this.parentLinkCategoryProperty; }, set: function (a) { this.parentLinkCategoryProperty = a; }, }, }); pa.Object.defineProperties(Gq, { type: { get: function () { return 'TreeModel'; }, }, }); Gq.prototype.setParentLinkCategoryForNodeData = Gq.prototype.Jv; Gq.prototype.getParentLinkCategoryForNodeData = Gq.prototype.cv; Gq.prototype.setParentKeyForNodeData = Gq.prototype.Ie; Gq.prototype.getParentKeyForNodeData = Gq.prototype.Oi; Gq.className = 'TreeModel'; xq.TreeModel = Gq; function Hq() { yi.call(this); this.vw = this.yn = this.Xb = 0; this.jr = 360; this.uw = Iq; this.gj = 0; this.gw = new G(); this.Wq = this.Rd = 0; this.Gs = new Jq(); this.Lt = this.zj = 0; this.Ux = 600; this.To = NaN; this.Rm = 1; this.vp = 0; this.Kl = 360; this.Ab = Iq; this.L = Kq; this.Qc = Lq; this.Mc = Gp; this.af = 6; this.Do = Mq; } oa(Hq, yi); Hq.prototype.cloneProtected = function (a) { yi.prototype.cloneProtected.call(this, a); a.To = this.To; a.Rm = this.Rm; a.vp = this.vp; a.Kl = this.Kl; a.Ab = this.Ab; a.L = this.L; a.Qc = this.Qc; a.Mc = this.Mc; a.af = this.af; a.Do = this.Do; }; Hq.prototype.fb = function (a) { if (a.classType === Hq) if (a === Nq || a === Pq || a === Qq || a === Rq || a === Lq) this.sorting = a; else if (a === Sq || a === Tq || a === Kq || a === Uq) this.direction = a; else if (a === Vq || a === Wq || a === Iq || a === Xq) this.arrangement = a; else { if (a === Yq || a === Mq) this.nodeDiameterFormula = a; } else yi.prototype.fb.call(this, a); }; Hq.prototype.createNetwork = function () { return new Zq(this); }; Hq.prototype.doLayout = function (a) { null === this.network && (this.network = this.makeNetwork(a)); this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin); a = this.network.vertexes; if (1 >= a.count) 1 === a.count && ((a = a.first()), (a.centerX = 0), (a.centerY = 0)); else { var b = new E(); b.addAll(a.iterator); a = new E(); var c = new E(); var d = this.sort(b); var e, f, g = this.Wq; var h = this.arrangement; var k = this.nodeDiameterFormula; var l = this.radius; if (!isFinite(l) || 0 >= l) l = NaN; var m = this.aspectRatio; if (!isFinite(m) || 0 >= m) m = 1; var n = this.startAngle; isFinite(n) || (n = 0); var p = this.sweepAngle; if (!isFinite(p) || 360 < p || 1 > p) p = 360; b = this.spacing; isFinite(b) || (b = NaN); h === Xq && k === Yq ? (h = Iq) : h === Xq && k !== Yq && (h = this.arrangement); if ((this.direction === Sq || this.direction === Tq) && this.sorting !== Lq) { for (k = 0; !(k >= d.length); k += 2) { a.add(d.N(k)); if (k + 1 >= d.length) break; c.add(d.N(k + 1)); } this.direction === Sq ? (this.arrangement === Xq && a.reverse(), (d = new E()), d.addAll(a), d.addAll(c)) : (this.arrangement === Xq && c.reverse(), (d = new E()), d.addAll(c), d.addAll(a)); } k = d.length; for (var q = (f = e = 0); q < d.length; q++) { var r = n + (p * f * (this.direction === Kq ? 1 : -1)) / k, u = d.N(q).diameter; isNaN(u) && (u = $q(d.N(q), r)); 360 > p && (0 === q || q === d.length - 1) && (u /= 2); e += u; f++; } if (isNaN(l) || h === Xq) { isNaN(b) && (b = 6); if (h !== Iq && h !== Xq) { f = -Infinity; for (g = 0; g < k; g++) (q = d.N(g)), (e = d.N(g === k - 1 ? 0 : g + 1)), isNaN(q.diameter) && $q(q, 0), isNaN(e.diameter) && $q(e, 0), (f = Math.max(f, (q.diameter + e.diameter) / 2)); g = f + b; h === Vq ? (l = (f + b) / ((2 * Math.PI) / k)) : (l = ar( this, g * (360 <= p ? k : k - 1), m, (n * Math.PI) / 180, (p * Math.PI) / 180, )); } else l = ar( this, e + (360 <= p ? k : k - 1) * (h !== Xq ? b : 1.6 * b), m, (n * Math.PI) / 180, (p * Math.PI) / 180, ); f = l * m; } else if ( ((f = l * m), (q = br(this, l, f, (n * Math.PI) / 180, (p * Math.PI) / 180)), isNaN(b)) ) { if (h === Iq || h === Xq) b = (q - e) / (360 <= p ? k : k - 1); } else if (h === Iq || h === Xq) (q = (q - e) / (360 <= p ? k : k - 1)), q < b ? ((l = ar( this, e + b * (360 <= p ? k : k - 1), m, (n * Math.PI) / 180, (p * Math.PI) / 180, )), (f = l * m)) : (b = q); else { g = -Infinity; for (e = 0; e < k; e++) (r = d.N(e)), (u = d.N(e === k - 1 ? 0 : e + 1)), isNaN(r.diameter) && $q(r, 0), isNaN(u.diameter) && $q(u, 0), (g = Math.max(g, (r.diameter + u.diameter) / 2)); g += b; e = ar(this, g * (360 <= p ? k : k - 1), m, (n * Math.PI) / 180, (p * Math.PI) / 180); e > l ? ((l = e), (f = l * m)) : (g = q / (360 <= p ? k : k - 1)); } this.uw = h; this.Xb = l; this.yn = m; this.vw = n; this.jr = p; this.gj = b; this.Rd = f; this.Wq = g; b = d; d = this.uw; h = this.Xb; l = this.vw; m = this.jr; n = this.gj; p = this.Rd; k = this.Wq; if ((this.direction !== Sq && this.direction !== Tq) || d !== Xq) if (this.direction === Sq || this.direction === Tq) { g = 0; switch (d) { case Wq: g = (180 * cr(this, h, p, l, k)) / Math.PI; break; case Iq: k = b = 0; g = a.first(); null !== g && (b = $q(g, Math.PI / 2)); g = c.first(); null !== g && (k = $q(g, Math.PI / 2)); g = (180 * cr(this, h, p, l, n + (b + k) / 2)) / Math.PI; break; case Vq: g = m / b.length; } if (this.direction === Sq) { switch (d) { case Wq: dr(this, a, l, Uq); break; case Iq: er(this, a, l, Uq); break; case Vq: fr(this, a, m / 2, l, Uq); } switch (d) { case Wq: dr(this, c, l + g, Kq); break; case Iq: er(this, c, l + g, Kq); break; case Vq: fr(this, c, m / 2, l + g, Kq); } } else { switch (d) { case Wq: dr(this, c, l, Uq); break; case Iq: er(this, c, l, Uq); break; case Vq: fr(this, c, m / 2, l, Uq); } switch (d) { case Wq: dr(this, a, l + g, Kq); break; case Iq: er(this, a, l + g, Kq); break; case Vq: fr(this, a, m / 2, l + g, Kq); } } } else switch (d) { case Wq: dr(this, b, l, this.direction); break; case Iq: er(this, b, l, this.direction); break; case Vq: fr(this, b, m, l, this.direction); break; case Xq: gr(this, b, m, l, this.direction); } else gr(this, b, m, l - m / 2, Kq); } this.updateParts(); this.network = null; this.isValidLayout = !0; }; function fr(a, b, c, d, e) { var f = a.jr, g = a.Xb; a = a.Rd; d = (d * Math.PI) / 180; c = (c * Math.PI) / 180; for (var h = b.length, k = 0; k < h; k++) { var l = d + (e === Kq ? (k * c) / (360 <= f ? h : h - 1) : -(k * c) / h), m = b.N(k), n = (g * Math.tan(l)) / a; n = Math.sqrt((g * g + a * a * n * n) / (1 + n * n)); m.centerX = n * Math.cos(l); m.centerY = n * Math.sin(l); m.actualAngle = (180 * l) / Math.PI; } } function er(a, b, c, d) { var e = a.Xb, f = a.Rd, g = a.gj; c = (c * Math.PI) / 180; for (var h = b.length, k = 0; k < h; k++) { var l = b.N(k), m = b.N(k === h - 1 ? 0 : k + 1), n = f * Math.sin(c); l.centerX = e * Math.cos(c); l.centerY = n; l.actualAngle = (180 * c) / Math.PI; isNaN(l.diameter) && $q(l, 0); isNaN(m.diameter) && $q(m, 0); l = cr(a, e, f, d === Kq ? c : -c, (l.diameter + m.diameter) / 2 + g); c += d === Kq ? l : -l; } } function dr(a, b, c, d) { var e = a.Xb, f = a.Rd, g = a.Wq; c = (c * Math.PI) / 180; for (var h = b.length, k = 0; k < h; k++) { var l = b.N(k); l.centerX = e * Math.cos(c); l.centerY = f * Math.sin(c); l.actualAngle = (180 * c) / Math.PI; l = cr(a, e, f, d === Kq ? c : -c, g); c += d === Kq ? l : -l; } } function gr(a, b, c, d, e) { var f = a.jr; a.zj = 0; a.Gs = new Jq(); if (360 > c) { for (f = d + (e === Kq ? f : -f); 0 > f; ) f += 360; f %= 360; 180 < f && (f -= 360); f *= Math.PI / 180; a.Lt = f; hr(a, b, c, d, e); } else ir(a, b, c, d, e); a.Gs.commit(b); } function ir(a, b, c, d, e) { var f = a.Xb, g = a.gj, h = a.yn, k = f * Math.cos((d * Math.PI) / 180), l = a.Rd * Math.sin((d * Math.PI) / 180), m = b.Na(); if (3 === m.length) (m[0].centerX = f), (m[0].centerY = 0), (m[1].centerX = m[0].centerX - m[0].width / 2 - m[1].width / 2 - g), (m[1].y = m[0].y), (m[2].centerX = (m[0].centerX + m[1].centerX) / 2), (m[2].y = m[0].y - m[2].height - g); else if (4 === m.length) (m[0].centerX = f), (m[0].centerY = 0), (m[2].centerX = -m[0].centerX), (m[2].centerY = m[0].centerY), (m[1].centerX = 0), (m[1].y = Math.min(m[0].y, m[2].y) - m[1].height - g), (m[3].centerX = 0), (m[3].y = Math.max(m[0].y + m[0].height + g, m[2].y + m[2].height + g)); else { f = G.alloc(); for (var n = 0; n < m.length; n++) { m[n].centerX = k; m[n].centerY = l; if (n >= m.length - 1) break; jr(a, k, l, m, n, e, f) || kr(a, k, l, m, n, e, f); k = f.x; l = f.y; } G.free(f); a.zj++; if (!(23 < a.zj)) { k = m[0].centerX; l = m[0].centerY; f = m[m.length - 1].centerX; n = m[m.length - 1].centerY; var p = Math.abs(k - f) - ((m[0].width + m[m.length - 1].width) / 2 + g), q = Math.abs(l - n) - ((m[0].height + m[m.length - 1].height) / 2 + g); g = 0; 1 > Math.abs(q) ? Math.abs(k - f) < (m[0].width + m[m.length - 1].width) / 2 && (g = 0) : (g = 0 < q ? q : 1 > Math.abs(p) ? 0 : p); k = Math.abs(f) > Math.abs(n) ? 0 < f !== l > n : 0 < n !== k < f; if ((k = e === Kq ? k : !k)) (g = -Math.abs(g)), (g = Math.min(g, -m[m.length - 1].width)), (g = Math.min(g, -m[m.length - 1].height)); a.Gs.compare(g, m); 1 < Math.abs(g) && ((a.Xb = 8 > a.zj ? a.Xb - g / (2 * Math.PI) : 5 > m.length && 10 < g ? a.Xb / 2 : a.Xb - (0 < g ? 1.7 : -2.3)), (a.Rd = a.Xb * h), ir(a, b, c, d, e)); } } } function hr(a, b, c, d, e) { for ( var f = a.Xb, g = a.Rd, h = a.yn, k = f * Math.cos((d * Math.PI) / 180), l = g * Math.sin((d * Math.PI) / 180), m = G.alloc(), n = b.Na(), p = 0; p < n.length; p++ ) { n[p].centerX = k; n[p].centerY = l; if (p >= n.length - 1) break; jr(a, k, l, n, p, e, m) || kr(a, k, l, n, p, e, m); k = m.x; l = m.y; } G.free(m); a.zj++; if (!(23 < a.zj)) { k = Math.atan2(l, k); k = e === Kq ? a.Lt - k : k - a.Lt; k = Math.abs(k) < Math.abs(k - 2 * Math.PI) ? k : k - 2 * Math.PI; f = (k * (f + g)) / 2; g = a.Gs; if (Math.abs(f) < Math.abs(g.am)) for (g.am = f, g.vk = [], g.Am = [], k = 0; k < n.length; k++) (g.vk[k] = n[k].bounds.x), (g.Am[k] = n[k].bounds.y); 1 < Math.abs(f) && ((a.Xb = 8 > a.zj ? a.Xb - f / (2 * Math.PI) : a.Xb - (0 < f ? 1.7 : -2.3)), (a.Rd = a.Xb * h), hr(a, b, c, d, e)); } } function jr(a, b, c, d, e, f, g) { var h = a.Xb, k = a.Rd, l = 0; a = (d[e].width + d[e + 1].width) / 2 + a.gj; var m = !1; if (0 <= c !== (f === Kq)) { if (((f = b + a), f > h)) { f = b - a; if (f < -h) return (g.x = f), (g.y = l), !1; m = !0; } } else if (((f = b - a), f < -h)) { f = b + a; if (f > h) return (g.x = f), (g.y = l), !1; m = !0; } l = Math.sqrt(1 - Math.min(1, (f * f) / (h * h))) * k; 0 > c !== m && (l = -l); if (Math.abs(c - l) > (d[e].height + d[e + 1].height) / 2) return (g.x = f), (g.y = l), !1; g.x = f; g.y = l; return !0; } function kr(a, b, c, d, e, f, g) { var h = a.Xb, k = a.Rd, l = 0; a = (d[e].height + d[e + 1].height) / 2 + a.gj; d = !1; if (0 <= b !== (f === Kq)) { if (((f = c - a), f < -k)) { f = c + a; if (f > k) { g.x = l; g.y = f; return; } d = !0; } } else if (((f = c + a), f > k)) { f = c - a; if (f < -k) { g.x = l; g.y = f; return; } d = !0; } l = Math.sqrt(1 - Math.min(1, (f * f) / (k * k))) * h; 0 > b !== d && (l = -l); g.x = l; g.y = f; } Hq.prototype.commitLayout = function () { this.commitNodes(); this.isRouting && this.commitLinks(); }; Hq.prototype.commitNodes = function () { var a = null !== this.group && null !== this.group.placeholder && this.group.isSubGraphExpanded, b = a ? this.group.location.copy() : null, c = this.actualCenter; a ? (c = new G(0, 0)) : ((c.x = this.arrangementOrigin.x + this.Xb), (c.y = this.arrangementOrigin.y + this.Rd)); for (var d = this.network.vertexes.iterator; d.next(); ) { var e = d.value; e.x += c.x; e.y += c.y; e.commit(); } a && (this.group.$b(), (a = this.group.position.copy()), (c = this.group.location.copy()), (b = b.Xd(c.Xd(a))), this.group.move(b), (this.gw = b.Xd(a))); }; Hq.prototype.commitLinks = function () { for (var a = this.network.edges.iterator; a.next(); ) a.value.commit(); }; function br(a, b, c, d, e) { var f = a.Ux; if (0.001 > Math.abs(a.yn - 1)) return void 0 !== d && void 0 !== e ? e * b : 2 * Math.PI * b; a = b > c ? Math.sqrt(b * b - c * c) / b : Math.sqrt(c * c - b * b) / c; var g = 0; var h = void 0 !== d && void 0 !== e ? e / (f + 1) : Math.PI / (2 * (f + 1)); for (var k = 0, l = 0; l <= f; l++) { void 0 !== d && void 0 !== e ? (k = d + (l * e) / f) : (k = (l * Math.PI) / (2 * f)); var m = Math.sin(k); g += Math.sqrt(1 - a * a * m * m) * h; } return void 0 !== d && void 0 !== e ? (b > c ? b : c) * g : 4 * (b > c ? b : c) * g; } function ar(a, b, c, d, e) { return b / (void 0 !== d && void 0 !== e ? br(a, 1, c, d, e) : br(a, 1, c)); } function cr(a, b, c, d, e) { if (0.001 > Math.abs(a.yn - 1)) return e / b; var f = b > c ? Math.sqrt(b * b - c * c) / b : Math.sqrt(c * c - b * b) / c, g = 0; a = (2 * Math.PI) / (700 * a.network.vertexes.count); b > c && (d += Math.PI / 2); for (var h = 0; ; h++) { var k = Math.sin(d + h * a); g += (b > c ? b : c) * Math.sqrt(1 - f * f * k * k) * a; if (g >= e) return h * a; } } Hq.prototype.sort = function (a) { switch (this.sorting) { case Qq: break; case Rq: a.reverse(); break; case Nq: a.sort(this.comparer); break; case Pq: a.sort(this.comparer); a.reverse(); break; case Lq: for (var b = [], c = 0; c < a.length; c++) b.push(0); c = new E(); for (var d = 0; d < a.length; d++) { var e = -1, f = -1; if (0 === d) for (var g = 0; g < a.length; g++) { var h = a.N(g).edgesCount; h > e && ((e = h), (f = g)); } else for (g = 0; g < a.length; g++) (h = b[g]), h > e && ((e = h), (f = g)); c.add(a.N(f)); b[f] = -1; f = a.N(f); for (g = f.sourceEdges; g.next(); ) (e = a.indexOf(g.value.fromVertex)), 0 > e || (0 <= b[e] && b[e]++); for (f = f.destinationEdges; f.next(); ) (e = a.indexOf(f.value.toVertex)), 0 > e || (0 <= b[e] && b[e]++); } a = []; for (b = 0; b < c.length; b++) { e = c.N(b); a[b] = []; for (f = e.destinationEdges; f.next(); ) (d = c.indexOf(f.value.toVertex)), d !== b && 0 > a[b].indexOf(d) && a[b].push(d); for (e = e.sourceEdges; e.next(); ) (d = c.indexOf(e.value.fromVertex)), d !== b && 0 > a[b].indexOf(d) && a[b].push(d); } f = []; for (b = 0; b < a.length; b++) f[b] = 0; b = []; g = []; h = []; e = []; d = new E(); for (var k = 0, l = 0; l < a.length; l++) { var m = a[l].length; if (1 === m) e.push(l); else if (0 === m) d.add(c.N(l)); else { if (0 === k) b.push(l); else { for (var n = (m = Infinity), p = -1, q = [], r = 0; r < b.length; r++) 0 > a[b[r]].indexOf(b[r === b.length - 1 ? 0 : r + 1]) && q.push(r === b.length - 1 ? 0 : r + 1); if (0 === q.length) for (r = 0; r < b.length; r++) q.push(r); for (r = 0; r < q.length; r++) { for (var u = q[r], x = a[l], v = 0, z = 0; z < g.length; z++) { var y = f[g[z]], B = f[h[z]]; if (y < B) { var C = y; y = B; } else C = B; if (C < u && u <= y) for (B = 0; B < x.length; B++) { var I = x[B]; 0 > b.indexOf(I) || (C < f[I] && f[I] < y) || C === f[I] || y === f[I] || v++; } else for (B = 0; B < x.length; B++) (I = x[B]), 0 > b.indexOf(I) || (C < f[I] && f[I] < y && C !== f[I] && y !== f[I] && v++); } x = v; for (z = v = 0; z < a[l].length; z++) (C = b.indexOf(a[l][z])), 0 <= C && ((C = Math.abs(u - (C >= u ? C + 1 : C))), (v += C < b.length + 1 - C ? C : b.length + 1 - C)); for (z = 0; z < g.length; z++) (C = f[g[z]]), (y = f[h[z]]), C >= u && C++, y >= u && y++, C > y && ((B = y), (y = C), (C = B)), y - C < (b.length + 2) / 2 === (C < u && u <= y) && v++; if (x < m || (x === m && v < n)) (m = x), (n = v), (p = u); } b.splice(p, 0, l); for (m = 0; m < b.length; m++) f[b[m]] = m; for (m = 0; m < a[l].length; m++) (n = a[l][m]), 0 <= b.indexOf(n) && (g.push(l), h.push(n)); } k++; } } for (g = b.length; ; ) { f = !0; for (h = 0; h < e.length; h++) if (((k = e[h]), (l = a[k][0]), (m = b.indexOf(l)), 0 <= m)) { for (p = n = 0; p < a[l].length; p++) (q = b.indexOf(a[l][p])), 0 > q || q === m || ((r = q > m ? q - m : m - q), (n += q < m !== r > g - r ? 1 : -1)); b.splice(0 > n ? m : m + 1, 0, k); e.splice(h, 1); h--; } else f = !1; if (f) break; else b.push(e[0]), e.splice(0, 1); } for (a = 0; a < b.length; a++) d.add(c.N(b[a])); return d; default: A('Invalid sorting type.'); } return a; }; pa.Object.defineProperties(Hq.prototype, { radius: { get: function () { return this.To; }, set: function (a) { this.To !== a && (0 < a || isNaN(a)) && ((this.To = a), this.B()); }, }, aspectRatio: { get: function () { return this.Rm; }, set: function (a) { this.Rm !== a && 0 < a && ((this.Rm = a), this.B()); }, }, startAngle: { get: function () { return this.vp; }, set: function (a) { this.vp !== a && ((this.vp = a), this.B()); }, }, sweepAngle: { get: function () { return this.Kl; }, set: function (a) { this.Kl !== a && (0 < a && 360 >= a ? (this.Kl = a) : (this.Kl = 360), this.B()); }, }, arrangement: { get: function () { return this.Ab; }, set: function (a) { this.Ab === a || (a !== Xq && a !== Iq && a !== Wq && a !== Vq) || ((this.Ab = a), this.B()); }, }, direction: { get: function () { return this.L; }, set: function (a) { this.L === a || (a !== Kq && a !== Uq && a !== Sq && a !== Tq) || ((this.L = a), this.B()); }, }, sorting: { get: function () { return this.Qc; }, set: function (a) { this.Qc === a || (a !== Qq && a !== Rq && a !== Nq && !Pq && a !== Lq) || ((this.Qc = a), this.B()); }, }, comparer: { get: function () { return this.Mc; }, set: function (a) { this.Mc !== a && ((this.Mc = a), this.B()); }, }, spacing: { get: function () { return this.af; }, set: function (a) { this.af !== a && ((this.af = a), this.B()); }, }, nodeDiameterFormula: { get: function () { return this.Do; }, set: function (a) { this.Do === a || (a !== Mq && a !== Yq) || ((this.Do = a), this.B()); }, }, actualXRadius: { get: function () { return this.Xb; }, }, actualYRadius: { get: function () { return this.Rd; }, }, actualSpacing: { get: function () { return this.gj; }, }, actualCenter: { get: function () { return this.gw; }, }, }); var Iq = new D(Hq, 'ConstantSpacing', 0), Wq = new D(Hq, 'ConstantDistance', 1), Vq = new D(Hq, 'ConstantAngle', 2), Xq = new D(Hq, 'Packed', 3), Kq = new D(Hq, 'Clockwise', 4), Uq = new D(Hq, 'Counterclockwise', 5), Sq = new D(Hq, 'BidirectionalLeft', 6), Tq = new D(Hq, 'BidirectionalRight', 7), Qq = new D(Hq, 'Forwards', 8), Rq = new D(Hq, 'Reverse', 9), Nq = new D(Hq, 'Ascending', 10), Pq = new D(Hq, 'Descending', 11), Lq = new D(Hq, 'Optimized', 12), Mq = new D(Hq, 'Pythagorean', 13), Yq = new D(Hq, 'Circular', 14); Hq.className = 'CircularLayout'; Hq.ConstantSpacing = Iq; Hq.ConstantDistance = Wq; Hq.ConstantAngle = Vq; Hq.Packed = Xq; Hq.Clockwise = Kq; Hq.Counterclockwise = Uq; Hq.BidirectionalLeft = Sq; Hq.BidirectionalRight = Tq; Hq.Forwards = Qq; Hq.Reverse = Rq; Hq.Ascending = Nq; Hq.Descending = Pq; Hq.Optimized = Lq; Hq.Pythagorean = Mq; Hq.Circular = Yq; function Jq() { this.am = -Infinity; this.Am = this.vk = null; } Jq.prototype.compare = function (a, b) { if ((0 < a && 0 > this.am) || (Math.abs(a) < Math.abs(this.am) && !(0 > a && 0 < this.am))) for (this.am = a, this.vk = [], this.Am = [], a = 0; a < b.length; a++) (this.vk[a] = b[a].bounds.x), (this.Am[a] = b[a].bounds.y); }; Jq.prototype.commit = function (a) { if (null !== this.vk && null !== this.Am) for (var b = 0; b < this.vk.length; b++) { var c = a.N(b); c.x = this.vk[b]; c.y = this.Am[b]; } }; Jq.className = 'VertexArrangement'; function Zq(a) { xp.call(this, a); } oa(Zq, xp); Zq.prototype.createVertex = function () { return new lr(this); }; Zq.prototype.createEdge = function () { return new mr(this); }; Zq.className = 'CircularNetwork'; function lr(a) { Ap.call(this, a); this.K = this.fj = NaN; } oa(lr, Ap); function $q(a, b) { var c = a.network; if (null === c) return NaN; c = c.layout; if (null === c) return NaN; if (c.arrangement === Xq) if (c.nodeDiameterFormula === Yq) a.fj = Math.max(a.width, a.height); else { c = Math.abs(Math.sin(b)); b = Math.abs(Math.cos(b)); if (0 === c) return a.width; if (0 === b) return a.height; a.fj = Math.min(a.height / c, a.width / b); } else a.fj = c.nodeDiameterFormula === Yq ? Math.max(a.width, a.height) : Math.sqrt(a.width * a.width + a.height * a.height); return a.fj; } pa.Object.defineProperties(lr.prototype, { diameter: { get: function () { return this.fj; }, set: function (a) { this.fj !== a && (this.fj = a); }, }, actualAngle: { get: function () { return this.K; }, set: function (a) { this.K !== a && (this.K = a); }, }, }); lr.className = 'CircularVertex'; function mr(a) { Bp.call(this, a); } oa(mr, Bp); mr.className = 'CircularEdge'; function nr() { yi.call(this); this.ph = null; this.Zn = 0; this.wd = new M(100, 100).freeze(); this.Qm = !1; this.$e = !0; this.Xc = !1; this.ql = 100; this.Bn = 1; this.Lf = 1e3; this.uo = 10; this.Uo = Math; this.Qk = 0.05; this.Pk = 50; this.Nk = 150; this.Ok = 0; this.on = 10; this.nn = 5; } oa(nr, yi); nr.prototype.cloneProtected = function (a) { yi.prototype.cloneProtected.call(this, a); a.wd.assign(this.wd); a.Qm = this.Qm; a.$e = this.$e; a.Xc = this.Xc; a.ql = this.ql; a.Bn = this.Bn; a.Lf = this.Lf; a.uo = this.uo; a.Uo = this.Uo; a.Qk = this.Qk; a.Pk = this.Pk; a.Nk = this.Nk; a.Ok = this.Ok; a.on = this.on; a.nn = this.nn; }; nr.prototype.createNetwork = function () { return new or(this); }; nr.prototype.doLayout = function (a) { null === this.network && (this.network = this.makeNetwork(a)); a = this.maxIterations; if (0 < this.network.vertexes.count) { this.network.Sp(); for (var b = this.network.vertexes.iterator; b.next(); ) { var c = b.value; c.charge = this.electricalCharge(c); c.mass = this.gravitationalMass(c); } for (b = this.network.edges.iterator; b.next(); ) (c = b.value), (c.stiffness = this.springStiffness(c)), (c.length = this.springLength(c)); this.Iu(); this.Zn = 0; if (this.needsClusterLayout()) { b = this.network; for (c = b.Kx().iterator; c.next(); ) { this.network = c.value; for (var d = this.network.vertexes.iterator; d.next(); ) { var e = d.value; e.td = e.vertexes.count; e.Bh = 1; e.Vj = null; e.He = null; } pr(this, 0, a); } this.network = b; c.reset(); d = this.arrangementSpacing; for ( var f = c.count, g = !0, h = (e = 0), k = Ka(), l = 0; l < f + b.vertexes.count + 2; l++ ) k[l] = null; f = 0; c.reset(); for (var m = N.alloc(); c.next(); ) if (((l = c.value), this.computeBounds(l, m), g)) (g = !1), (e = m.x + m.width / 2), (h = m.y + m.height / 2), (k[0] = new G(m.x + m.width + d.width, m.y)), (k[1] = new G(m.x, m.y + m.height + d.height)), (f = 2); else { var n = qr(k, f, e, h, m.width, m.height, d), p = k[n], q = new G(p.x + m.width + d.width, p.y), r = new G(p.x, p.y + m.height + d.height); n + 1 < f && k.splice(n + 1, 0, null); k[n] = q; k[n + 1] = r; f++; n = p.x - m.x; p = p.y - m.y; for (l = l.vertexes.iterator; l.next(); ) (q = l.value), (q.centerX += n), (q.centerY += p); } N.free(m); for (l = b.vertexes.iterator; l.next(); ) (g = l.value), (q = g.bounds), 2 > f ? ((e = q.x + q.width / 2), (h = q.y + q.height / 2), (k[0] = new G(q.x + q.width + d.width, q.y)), (k[1] = new G(q.x, q.y + q.height + d.height)), (f = 2)) : ((m = qr(k, f, e, h, q.width, q.height, d)), (p = k[m]), (n = new G(p.x + q.width + d.width, p.y)), (q = new G(p.x, p.y + q.height + d.height)), m + 1 < f && k.splice(m + 1, 0, null), (k[m] = n), (k[m + 1] = q), f++, (g.centerX = p.x + g.width / 2), (g.centerY = p.y + g.height / 2)); Oa(k); for (c.reset(); c.next(); ) { d = c.value; for (e = d.vertexes.iterator; e.next(); ) b.th(e.value); for (d = d.edges.iterator; d.next(); ) b.Pj(d.value); } } rr(this, a); this.updateParts(); } this.ql = a; this.network = null; this.isValidLayout = !0; }; nr.prototype.needsClusterLayout = function () { if (3 > this.network.vertexes.count) return !1; for ( var a = 0, b = 0, c = this.network.vertexes.first().bounds, d = this.network.vertexes.iterator; d.next(); ) { if (d.value.bounds.Ic(c) && (a++, 2 < a)) return !0; if (10 < b) break; b++; } return !1; }; nr.prototype.computeBounds = function (a, b) { var c = !0; for (a = a.vertexes.iterator; a.next(); ) { var d = a.value; c ? ((c = !1), b.set(d.bounds)) : b.Jc(d.bounds); } return b; }; function pr(a, b, c) { if (sr(a, b)) { var d = a.Lf; a.Lf *= 1 + 1 / (b + 1); var e = tr(a, b), f = Math.max(0, Math.max(Math.min(a.network.vertexes.count, (c * (b + 1)) / 11), 10)); a.maxIterations += f; pr(a, b + 1, c); rr(a, f); ur(a, e); b = e.vertexes.Na(); b.sort(function (a, b) { return null === a || null === b || a === b ? 0 : b.td - a.td; }); for (c = 0; c < b.length; c++) vr(a, b[c]); a.Lf = d; } } function sr(a, b) { if (10 < b || 3 > a.network.vertexes.count) return !1; a.ph = a.network.vertexes.Na(); a = a.ph; a.sort(function (a, b) { return null === a || null === b || a === b ? 0 : b.td - a.td; }); for (b = a.length - 1; 0 <= b && 1 >= a[b].td; ) b--; return 1 < a.length - b; } function tr(a, b) { for (var c = a.network, d = new or(a), e = 0; e < a.ph.length; e++) { var f = a.ph[e]; if (1 < f.td) { d.th(f); var g = new wr(); g.At = f.td; g.Bt = f.width; g.zt = f.height; g.bw = f.focus.x; g.cw = f.focus.y; null === f.He && (f.He = new E()); f.He.add(g); f.Fv = f.He.count - 1; } else break; } for (f = c.edges.iterator; f.next(); ) { var h = f.value; e = h.fromVertex; g = h.toVertex; e.network === d && g.network === d ? d.Pj(h) : e.network === d ? ((h = e.Vj), null === h && ((h = new E()), (e.Vj = h)), h.add(g), e.td--, (e.Bh += g.Bh)) : g.network === d && ((h = g.Vj), null === h && ((h = new E()), (g.Vj = h)), h.add(e), g.td--, (g.Bh += e.Bh)); } for (e = d.edges.iterator; e.next(); ) (f = e.value), (f.length *= Math.max(1, H.sqrt((f.fromVertex.Bh + f.toVertex.Bh) / (4 * b + 1)))); for (b = d.vertexes.iterator; b.next(); ) { e = b.value; var k = e.Vj; if (null !== k && 0 < k.count && ((g = e.He.N(e.He.count - 1).At - e.td), !(0 >= g))) { for (var l = (h = 0), m = k.count - g; m < k.count; m++) { var n = k.N(m), p = null; for (f = n.edges.iterator; f.next(); ) { var q = f.value; if (q.lx(n) === e) { p = q; break; } } null !== p && ((l += p.length), (h += n.width * n.height)); } f = e.centerX; k = e.centerY; m = e.width; n = e.height; p = e.focus; q = m * n; 1 > q && (q = 1); h = H.sqrt((h + q + (l * l * 4) / (g * g)) / q); g = ((h - 1) * m) / 2; h = ((h - 1) * n) / 2; e.bounds = new N(f - p.x - g, k - p.y - h, m + 2 * g, n + 2 * h); e.focus = new G(p.x + g, p.y + h); } } a.network = d; return c; } function ur(a, b) { for (var c = a.network.vertexes.iterator; c.next(); ) { var d = c.value; d.network = b; if (null !== d.He) { var e = d.He.N(d.Fv); d.td = e.At; var f = e.bw, g = e.cw; d.bounds = new N(d.centerX - f, d.centerY - g, e.Bt, e.zt); d.focus = new G(f, g); d.Fv--; } } for (c = a.network.edges.iterator; c.next(); ) c.value.network = b; a.network = b; } function vr(a, b) { var c = b.Vj; if (null !== c && 0 !== c.count) { var d = b.centerX, e = b.centerY, f = b.width, g = b.height; null !== b.He && 0 < b.He.count && ((g = b.He.N(0)), (f = g.Bt), (g = g.zt)); f = H.sqrt(f * f + g * g) / 2; for (var h = !1, k = (g = 0), l = 0, m = b.vertexes.iterator; m.next(); ) { var n = m.value; 1 >= n.td ? k++ : ((h = !0), l++, (g += Math.atan2(b.centerY - n.centerY, b.centerX - n.centerX))); } if (0 !== k) for ( 0 < l && (g /= l), l = b = 0, b = h ? (2 * Math.PI) / (k + 1) : (2 * Math.PI) / k, 0 === k % 2 && (l = b / 2), 1 < c.count && c.sort(function (a, b) { return null === a || null === b || a === b ? 0 : b.width * b.height - a.width * a.height; }), h = 0 === k % 2 ? 0 : 1, c = c.iterator; c.next(); ) if (((k = c.value), !(1 < k.td || a.isFixed(k)))) { m = null; for (n = k.edges.iterator; n.next(); ) { m = n.value; break; } n = k.width; var p = k.height; n = H.sqrt(n * n + p * p) / 2; m = f + m.length + n; n = g + (b * ((h / 2) >> 1) + l) * (0 === h % 2 ? 1 : -1); k.centerX = d + m * Math.cos(n); k.centerY = e + m * Math.sin(n); h++; } } } function qr(a, b, c, d, e, f, g) { var h = 9e19, k = -1, l = 0; a: for (; l < b; l++) { var m = a[l], n = m.x - c, p = m.y - d; n = n * n + p * p; if (n < h) { for (p = l - 1; 0 <= p; p--) if (a[p].y > m.y && a[p].x - m.x < e + g.width) continue a; for (p = l + 1; p < b; p++) if (a[p].x > m.x && a[p].y - m.y < f + g.height) continue a; k = l; h = n; } } return k; } nr.prototype.Iu = function () { if (this.comments) for (var a = this.network.vertexes.iterator; a.next(); ) this.addComments(a.value); }; nr.prototype.addComments = function (a) { var b = a.node; if (null !== b) for (b = b.Yu(); b.next(); ) { var c = b.value; if ('Comment' === c.category && c.isVisible()) { var d = this.network.Ki(c); null === d && (d = this.network.Rl(c)); d.charge = this.defaultCommentElectricalCharge; c = null; for (var e = d.destinationEdges; e.next(); ) { var f = e.value; if (f.toVertex === a) { c = f; break; } } if (null === c) for (e = d.sourceEdges; e.next(); ) if (((f = e.value), f.fromVertex === a)) { c = f; break; } null === c && (c = this.network.gk(a, d, null)); c.length = this.defaultCommentSpringLength; } } }; function xr(a, b) { var c = a.bounds, d = c.x; a = c.y; var e = c.width; c = c.height; var f = b.bounds, g = f.x; b = f.y; var h = f.width; f = f.height; return d + e < g ? a > b + f ? ((c = d + e - g), (a = a - b - f), H.sqrt(c * c + a * a)) : a + c < b ? ((d = d + e - g), (a = a + c - b), H.sqrt(d * d + a * a)) : g - (d + e) : d > g + h ? a > b + f ? ((c = d - g - h), (a = a - b - f), H.sqrt(c * c + a * a)) : a + c < b ? ((d = d - g - h), (a = a + c - b), H.sqrt(d * d + a * a)) : d - (g + h) : a > b + f ? a - (b + f) : a + c < b ? b - (a + c) : 0.1; } function rr(a, b) { a.ph = null; for (b = a.Zn + b; a.Zn < b && (a.Zn++, yr(a)); ); a.ph = null; } function yr(a) { null === a.ph && (a.ph = a.network.vertexes.Na()); var b = a.ph; if (0 >= b.length) return !1; var c = b[0]; c.forceX = 0; c.forceY = 0; for (var d = c.centerX, e = d, f = (c = c.centerY), g = 1; g < b.length; g++) { var h = b[g]; h.forceX = 0; h.forceY = 0; var k = h.centerX; h = h.centerY; d = Math.min(d, k); e = Math.max(e, k); c = Math.min(c, h); f = Math.max(f, h); } (e = e - d > f - c) ? b.sort(function (a, b) { return null === a || null === b || a === b ? 0 : a.centerX - b.centerX; }) : b.sort(function (a, b) { return null === a || null === b || a === b ? 0 : a.centerY - b.centerY; }); c = a.Lf; var l = (d = h = 0); for (f = 0; f < b.length; f++) { g = b[f]; d = g.bounds; h = g.focus; k = d.x + h.x; var m = d.y + h.y; d = g.charge * a.electricalFieldX(k, m); l = g.charge * a.electricalFieldY(k, m); d += g.mass * a.gravitationalFieldX(k, m); l += g.mass * a.gravitationalFieldY(k, m); g.forceX += d; g.forceY += l; for (var n = f + 1; n < b.length; n++) { var p = b[n]; if (p !== g) { d = p.bounds; h = p.focus; l = d.x + h.x; var q = d.y + h.y; if (k - l > c || l - k > c) { if (e) break; } else if (m - q > c || q - m > c) { if (!e) break; } else { var r = xr(g, p); 1 > r ? ((d = a.randomNumberGenerator), null === d && (a.randomNumberGenerator = d = new zr()), (r = d.random()), (h = d.random()), k > l ? ((d = Math.abs(p.bounds.right - g.bounds.x)), (d = (1 + d) * r)) : k < l ? ((d = Math.abs(p.bounds.x - g.bounds.right)), (d = -(1 + d) * r)) : ((d = Math.max(p.width, g.width)), (d = (1 + d) * r - d / 2)), m > q ? ((l = Math.abs(p.bounds.bottom - g.bounds.y)), (l = (1 + l) * h)) : k < l ? ((l = Math.abs(p.bounds.y - g.bounds.bottom)), (l = -(1 + l) * h)) : ((l = Math.max(p.height, g.height)), (l = (1 + l) * h - l / 2))) : ((h = -(g.charge * p.charge) / (r * r)), (d = ((l - k) / r) * h), (l = ((q - m) / r) * h)); g.forceX += d; g.forceY += l; p.forceX -= d; p.forceY -= l; } } } } for (e = a.network.edges.iterator; e.next(); ) (h = e.value), (c = h.fromVertex), (f = h.toVertex), (g = c.bounds), (k = c.focus), (d = g.x + k.x), (g = g.y + k.y), (m = f.bounds), (n = f.focus), (k = m.x + n.x), (m = m.y + n.y), (n = xr(c, f)), 1 > n ? ((n = a.randomNumberGenerator), null === n && (a.randomNumberGenerator = n = new zr()), (h = n.random()), (n = n.random()), (d = (d > k ? 1 : -1) * (1 + (f.width > c.width ? f.width : c.width)) * h), (l = (g > m ? 1 : -1) * (1 + (f.height > c.height ? f.height : c.height)) * n)) : ((h = h.stiffness * (n - h.length)), (d = ((k - d) / n) * h), (l = ((m - g) / n) * h)), (c.forceX += d), (c.forceY += l), (f.forceX -= d), (f.forceY -= l); d = 0; e = a.moveLimit; for (c = 0; c < b.length; c++) (f = b[c]), a.isFixed(f) ? a.moveFixedVertex(f) : ((g = f.forceX), (k = f.forceY), g < -e ? (g = -e) : g > e && (g = e), k < -e ? (k = -e) : k > e && (k = e), (f.centerX += g), (f.centerY += k), (d = Math.max(d, g * g + k * k))); return d > a.epsilonDistance * a.epsilonDistance; } nr.prototype.moveFixedVertex = function () {}; nr.prototype.commitLayout = function () { this.Kv(); this.commitNodes(); this.isRouting && this.commitLinks(); }; nr.prototype.Kv = function () { if (this.setsPortSpots) for (var a = this.network.edges.iterator; a.next(); ) { var b = a.value.link; null !== b && ((b.fromSpot = Ed), (b.toSpot = Ed)); } }; nr.prototype.commitNodes = function () { var a = 0, b = 0; if (this.arrangesToOrigin) { var c = N.alloc(); this.computeBounds(this.network, c); b = this.arrangementOrigin; a = b.x - c.x; b = b.y - c.y; N.free(c); } c = N.alloc(); for (var d = this.network.vertexes.iterator; d.next(); ) { var e = d.value; if (0 !== a || 0 !== b) c.assign(e.bounds), (c.x += a), (c.y += b), (e.bounds = c); e.commit(); } N.free(c); }; nr.prototype.commitLinks = function () { for (var a = this.network.edges.iterator; a.next(); ) a.value.commit(); }; nr.prototype.springStiffness = function (a) { a = a.stiffness; return isNaN(a) ? this.Qk : a; }; nr.prototype.springLength = function (a) { a = a.length; return isNaN(a) ? this.Pk : a; }; nr.prototype.electricalCharge = function (a) { a = a.charge; return isNaN(a) ? this.Nk : a; }; nr.prototype.electricalFieldX = function () { return 0; }; nr.prototype.electricalFieldY = function () { return 0; }; nr.prototype.gravitationalMass = function (a) { a = a.mass; return isNaN(a) ? this.Ok : a; }; nr.prototype.gravitationalFieldX = function () { return 0; }; nr.prototype.gravitationalFieldY = function () { return 0; }; nr.prototype.isFixed = function (a) { return a.isFixed; }; pa.Object.defineProperties(nr.prototype, { currentIteration: { get: function () { return this.Zn; }, }, arrangementSpacing: { get: function () { return this.wd; }, set: function (a) { this.wd.A(a) || (this.wd.assign(a), this.B()); }, }, arrangesToOrigin: { get: function () { return this.Qm; }, set: function (a) { this.Qm !== a && ((this.Qm = a), this.B()); }, }, setsPortSpots: { get: function () { return this.$e; }, set: function (a) { this.$e !== a && ((this.$e = a), this.B()); }, }, comments: { get: function () { return this.Xc; }, set: function (a) { this.Xc !== a && ((this.Xc = a), this.B()); }, }, maxIterations: { get: function () { return this.ql; }, set: function (a) { this.ql !== a && 0 <= a && ((this.ql = a), this.B()); }, }, epsilonDistance: { get: function () { return this.Bn; }, set: function (a) { this.Bn !== a && 0 < a && ((this.Bn = a), this.B()); }, }, infinityDistance: { get: function () { return this.Lf; }, set: function (a) { this.Lf !== a && 1 < a && ((this.Lf = a), this.B()); }, }, moveLimit: { get: function () { return this.uo; }, set: function (a) { this.uo !== a && 1 < a && ((this.uo = a), this.B()); }, }, randomNumberGenerator: { get: function () { return this.Uo; }, set: function (a) { this.Uo !== a && (null !== a && 'function' !== typeof a.random && A( 'ForceDirectedLayout.randomNumberGenerator must have a "random()" function on it: ' + a, ), (this.Uo = a)); }, }, defaultSpringStiffness: { get: function () { return this.Qk; }, set: function (a) { this.Qk !== a && ((this.Qk = a), this.B()); }, }, defaultSpringLength: { get: function () { return this.Pk; }, set: function (a) { this.Pk !== a && ((this.Pk = a), this.B()); }, }, defaultElectricalCharge: { get: function () { return this.Nk; }, set: function (a) { this.Nk !== a && ((this.Nk = a), this.B()); }, }, defaultGravitationalMass: { get: function () { return this.Ok; }, set: function (a) { this.Ok !== a && ((this.Ok = a), this.B()); }, }, defaultCommentSpringLength: { get: function () { return this.on; }, set: function (a) { this.on !== a && ((this.on = a), this.B()); }, }, defaultCommentElectricalCharge: { get: function () { return this.nn; }, set: function (a) { this.nn !== a && ((this.nn = a), this.B()); }, }, }); nr.className = 'ForceDirectedLayout'; function wr() { this.cw = this.bw = this.zt = this.Bt = this.At = 0; } wr.className = 'ForceDirectedSubnet'; function or(a) { xp.call(this, a); } oa(or, xp); or.prototype.createVertex = function () { return new Ar(this); }; or.prototype.createEdge = function () { return new Br(this); }; or.className = 'ForceDirectedNetwork'; function Ar(a) { Ap.call(this, a); this.Ma = !1; this.Ub = this.K = NaN; this.Bh = this.td = this.La = this.ba = 0; this.He = this.Vj = null; this.Fv = 0; } oa(Ar, Ap); pa.Object.defineProperties(Ar.prototype, { isFixed: { get: function () { return this.Ma; }, set: function (a) { this.Ma !== a && (this.Ma = a); }, }, charge: { get: function () { return this.K; }, set: function (a) { this.K !== a && (this.K = a); }, }, mass: { get: function () { return this.Ub; }, set: function (a) { this.Ub !== a && (this.Ub = a); }, }, forceX: { get: function () { return this.ba; }, set: function (a) { this.ba !== a && (this.ba = a); }, }, forceY: { get: function () { return this.La; }, set: function (a) { this.La !== a && (this.La = a); }, }, }); Ar.className = 'ForceDirectedVertex'; function Br(a) { Bp.call(this, a); this.l = this.u = NaN; } oa(Br, Bp); pa.Object.defineProperties(Br.prototype, { stiffness: { get: function () { return this.u; }, set: function (a) { this.u !== a && (this.u = a); }, }, length: { get: function () { return this.l; }, set: function (a) { this.l !== a && (this.l = a); }, }, }); Br.className = 'ForceDirectedEdge'; function zr() { var a = 0; void 0 === a && (a = 42); this.seed = a; this.Mx = 48271; this.Ox = 2147483647; this.Q = 44488.07041494893; this.Qx = 3399; this.Nx = 1 / 2147483647; this.random(); } zr.prototype.random = function () { var a = (this.seed % this.Q) * this.Mx - (this.seed / this.Q) * this.Qx; 0 < a ? (this.seed = a) : (this.seed = a + this.Ox); return this.seed * this.Nx; }; zr.className = 'RandomNumberGenerator'; function Cr() { yi.call(this); this.Wb = this.ke = 25; this.L = 0; this.Lk = Dr; this.ll = Er; this.bl = Fr; this.qj = 4; this.xk = Gr; this.bg = 7; this.$e = !0; this.eo = 4; this.Ha = this.Pr = this.ya = -1; this.od = this.po = 0; this.Ka = this.ld = this.md = this.Gd = this.fc = null; this.zo = 0; this.yo = this.vj = null; this.Ld = 0; this.Ao = null; this.iw = new G(); this.qe = []; this.qe.length = 100; } oa(Cr, yi); Cr.prototype.cloneProtected = function (a) { yi.prototype.cloneProtected.call(this, a); a.ke = this.ke; a.Wb = this.Wb; a.L = this.L; a.Lk = this.Lk; a.ll = this.ll; a.bl = this.bl; a.qj = this.qj; a.xk = this.xk; a.bg = this.bg; a.$e = this.$e; a.eo = this.eo; }; Cr.prototype.fb = function (a) { a.classType === Cr ? 0 === a.name.indexOf('Aggressive') ? (this.aggressiveOption = a) : 0 === a.name.indexOf('Cycle') ? (this.cycleRemoveOption = a) : 0 === a.name.indexOf('Init') ? (this.initializeOption = a) : 0 === a.name.indexOf('Layer') ? (this.layeringOption = a) : A('Unknown enum value: ' + a) : yi.prototype.fb.call(this, a); }; Cr.prototype.createNetwork = function () { return new Hr(this); }; Cr.prototype.doLayout = function (a) { null === this.network && (this.network = this.makeNetwork(a)); this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin); this.Pr = -1; this.od = this.po = 0; this.Ao = this.yo = this.vj = null; for (a = 0; a < this.qe.length; a++) this.qe[a] = null; if (0 < this.network.vertexes.count) { this.network.Sp(); this.cycleRemoveOption !== Ir && this.removeCycles(); for (a = this.network.vertexes.iterator; a.next(); ) a.value.layer = -1; this.ya = -1; this.assignLayers(); for (a.reset(); a.next(); ) this.ya = Math.max(this.ya, a.value.layer); this.cycleRemoveOption === Ir && this.removeCycles(); a = this.network; for (var b = [], c = a.edges.iterator; c.next(); ) { var d = c.value; d.valid = !1; b.push(d); } for (c = 0; c < b.length; c++) { d = b[c]; var e = d.fromVertex, f = d.toVertex; if (!d.valid && ((null !== e.node && null !== f.node) || e.layer !== f.layer)) { var g = 0, h = 0, k = 0, l = 0; if (null !== d.link) { h = d.link; if (null === h) continue; var m = e.node; g = f.node; if (null === m || null === g) continue; var n = h.fromNode; k = h.toNode; var p = h.fromPort; h = h.toPort; if (d.rev) { l = n; var q = p; n = k; p = h; k = l; h = q; } var r = e.focus; l = f.focus; var u = d.rev ? f.bounds : e.bounds; q = G.alloc(); m !== n ? u.o() && n.isVisible() ? n.actualBounds.o() ? (n.qf(p, dd, q), (q.x += n.actualBounds.x - u.x), (q.y += n.actualBounds.y - u.y)) : (n.qf(p, dd, q), q.o() || q.assign(r)) : q.assign(r) : u.o() ? (n.qf(p, dd, q), q.o() || q.assign(r)) : q.assign(r); n = d.rev ? e.bounds : f.bounds; m = G.alloc(); g !== k ? n.o() && k.isVisible() ? k.actualBounds.o() ? (k.qf(h, dd, m), (m.x += k.actualBounds.x - n.x), (m.y += k.actualBounds.y - n.y)) : (k.qf(h, dd, m), m.o() || m.assign(l)) : m.assign(l) : n.o() ? (k.qf(h, dd, m), m.o() || m.assign(l)) : m.assign(l); 90 === this.L || 270 === this.L ? ((g = Math.round((q.x - r.x) / this.Wb)), (k = q.x), (h = Math.round((m.x - l.x) / this.Wb)), (l = m.x)) : ((g = Math.round((q.y - r.y) / this.Wb)), (k = q.y), (h = Math.round((m.y - l.y) / this.Wb)), (l = m.y)); G.free(q); G.free(m); d.portFromColOffset = g; d.portFromPos = k; d.portToColOffset = h; d.portToPos = l; } else (d.portFromColOffset = 0), (d.portFromPos = 0), (d.portToColOffset = 0), (d.portToPos = 0); q = e.layer; m = f.layer; n = 0; u = d.link; if (null !== u) { var x = u.fromPort, v = u.toPort; if (null !== x && null !== v) { var z = u.fromNode; p = u.toNode; if (null !== z && null !== p) { var y = Jr(this, !0), B = Jr(this, !1), C = this.setsPortSpots ? y : u.computeSpot(!0, x); r = this.setsPortSpots ? B : u.computeSpot(!1, v); var I = u.isOrthogonal; C.sf() && C.rf(B) && r.sf() && r.rf(y) ? (n = 0) : ((y = u.getLinkPoint(z, x, C, !0, I, p, v, G.alloc())), (B = u.getLinkDirection(z, x, y, C, !0, I, p, v)), G.free(y), C.dt() || B !== Kr(this, d, !0) ? this.setsPortSpots && null !== z && 1 === z.ports.count && d.rev && (n += 1) : (n += 1), (C = u.getLinkPoint(p, v, r, !1, I, z, x, G.alloc())), (u = u.getLinkDirection(p, v, C, r, !1, I, z, x)), G.free(C), r.dt() || u !== Kr(this, d, !1) ? this.setsPortSpots && null !== p && 1 === p.ports.count && d.rev && (n += 2) : (n += 2)); } } } p = n; n = 1 === p || 3 === p ? !0 : !1; if ((p = 2 === p || 3 === p ? !0 : !1)) (r = a.createVertex()), (r.node = null), (r.Qj = 1), (r.layer = q), (r.near = e), a.th(r), (e = a.gk(e, r, d.link)), (e.valid = !1), (e.rev = d.rev), (e.portFromColOffset = g), (e.portToColOffset = 0), (e.portFromPos = k), (e.portToPos = 0), (e = r); u = 1; n && u--; if (q - m > u && 0 < q) { d.valid = !1; r = a.createVertex(); r.node = null; r.Qj = 2; r.layer = q - 1; a.th(r); e = a.gk(e, r, d.link); e.valid = !0; e.rev = d.rev; e.portFromColOffset = p ? 0 : g; e.portToColOffset = 0; e.portFromPos = p ? 0 : k; e.portToPos = 0; e = r; for (q--; q - m > u && 0 < q; ) (r = a.createVertex()), (r.node = null), (r.Qj = 3), (r.layer = q - 1), a.th(r), (e = a.gk(e, r, d.link)), (e.valid = !0), (e.rev = d.rev), (e.portFromColOffset = 0), (e.portToColOffset = 0), (e.portFromPos = 0), (e.portToPos = 0), (e = r), q--; e = a.gk(r, f, d.link); e.valid = !n; n && (r.near = f); e.rev = d.rev; e.portFromColOffset = 0; e.portToColOffset = h; e.portFromPos = 0; e.portToPos = l; } else d.valid = !0; } } a = this.fc = []; for (b = 0; b <= this.ya; b++) a[b] = 0; for (b = this.network.vertexes.iterator; b.next(); ) b.value.index = -1; this.initializeIndices(); this.Pr = -1; for (c = this.od = this.po = 0; c <= this.ya; c++) a[c] > a[this.od] && ((this.Pr = a[c] - 1), (this.od = c)), a[c] < a[this.po] && (this.po = c); this.Ao = []; for (c = 0; c < a.length; c++) this.Ao[c] = []; for (b.reset(); b.next(); ) (a = b.value), (this.Ao[a.layer][a.index] = a); this.Ha = -1; for (a = 0; a <= this.ya; a++) { b = Lr(this, a); c = 0; d = this.fc[a]; for (f = 0; f < d; f++) (e = b[f]), (c += this.nodeMinColumnSpace(e, !0)), (e.column = c), (c += 1), (c += this.nodeMinColumnSpace(e, !1)); this.Ha = Math.max(this.Ha, c - 1); Mr(this, a, b); } this.reduceCrossings(); this.straightenAndPack(); this.updateParts(); } this.network = null; this.isValidLayout = !0; }; Cr.prototype.linkMinLength = function () { return 1; }; function Nr(a) { var b = a.fromVertex.node; a = a.toVertex.node; return null === b && null === a ? 8 : null === b || null === a ? 4 : 1; } Cr.prototype.nodeMinLayerSpace = function (a, b) { return null === a.node ? 0 : 90 === this.L || 270 === this.L ? b ? a.focus.y + 10 : a.bounds.height - a.focus.y + 10 : b ? a.focus.x + 10 : a.bounds.width - a.focus.x + 10; }; Cr.prototype.nodeMinColumnSpace = function (a, b) { if (null === a.node) return 0; var c = b ? a.rv : a.qv; if (null !== c) return c; c = this.L; return 90 === c || 270 === c ? b ? (a.rv = (a.focus.x / this.Wb + 1) | 0) : (a.qv = ((a.bounds.width - a.focus.x) / this.Wb + 1) | 0) : b ? (a.rv = (a.focus.y / this.Wb + 1) | 0) : (a.qv = ((a.bounds.height - a.focus.y) / this.Wb + 1) | 0); }; function Or(a) { null === a.vj && (a.vj = []); for (var b = 0, c = a.network.vertexes.iterator; c.next(); ) { var d = c.value; a.vj[b] = d.layer; b++; a.vj[b] = d.column; b++; a.vj[b] = d.index; b++; } return a.vj; } function Pr(a, b) { var c = 0; for (a = a.network.vertexes.iterator; a.next(); ) { var d = a.value; d.layer = b[c]; c++; d.column = b[c]; c++; d.index = b[c]; c++; } } function Qr(a, b, c) { var d = Lr(a, b), e = a.fc[b]; if (null === a.yo || a.yo.length < e * e) a.yo = []; for (var f = a.yo, g = 0; g < e; g++) { var h = 0, k = d[g], l = k.near; if (null !== l && l.layer === k.layer) if (((k = l.index), k > g)) for (var m = g + 1; m < k; m++) { var n = d[m]; (n.near === l && n.Qj === l.Qj) || h++; } else for (m = g - 1; m > k; m--) (n = d[m]), (n.near === l && n.Qj === l.Qj) || h++; var p; if (0 <= c) for (k = d[g].sourceEdgesArrayAccess, l = 0; l < k.length; l++) { var q = k[l]; if (q.valid && q.fromVertex.layer !== b) for ( n = q.fromVertex.index, m = q.portToPos, q = q.portFromPos, p = l + 1; p < k.length; p++ ) { var r = k[p]; if (r.valid && r.fromVertex.layer !== b) { var u = r.fromVertex.index; var x = r.portToPos; r = r.portFromPos; m < x && (n > u || (n === u && q > r)) && h++; x < m && (u > n || (u === n && r > q)) && h++; } } } if (0 >= c) for (k = d[g].destinationEdgesArrayAccess, l = 0; l < k.length; l++) if (((q = k[l]), q.valid && q.toVertex.layer !== b)) for ( n = q.toVertex.index, m = q.portToPos, q = q.portFromPos, p = l + 1; p < k.length; p++ ) (r = k[p]), r.valid && r.toVertex.layer !== b && ((u = r.toVertex.index), (x = r.portToPos), (r = r.portFromPos), q < r && (n > u || (n === u && m > x)) && h++, r < q && (u > n || (u === n && x > m)) && h++); f[g * e + g] = h; for (k = g + 1; k < e; k++) { var v = 0, z = 0; if (0 <= c) { h = d[g].sourceEdgesArrayAccess; var y = d[k].sourceEdgesArrayAccess; for (l = 0; l < h.length; l++) if (((q = h[l]), q.valid && q.fromVertex.layer !== b)) for (n = q.fromVertex.index, q = q.portFromPos, p = 0; p < y.length; p++) (r = y[p]), r.valid && r.fromVertex.layer !== b && ((u = r.fromVertex.index), (r = r.portFromPos), (n < u || (n === u && q < r)) && z++, (u < n || (u === n && r < q)) && v++); } if (0 >= c) for ( h = d[g].destinationEdgesArrayAccess, y = d[k].destinationEdgesArrayAccess, l = 0; l < h.length; l++ ) if (((q = h[l]), q.valid && q.toVertex.layer !== b)) for (n = q.toVertex.index, m = q.portToPos, p = 0; p < y.length; p++) (r = y[p]), r.valid && r.toVertex.layer !== b && ((u = r.toVertex.index), (x = r.portToPos), (n < u || (n === u && m < x)) && z++, (u < n || (u === n && x < m)) && v++); f[g * e + k] = v; f[k * e + g] = z; } } Mr(a, b, d); return f; } Cr.prototype.countCrossings = function () { for (var a = 0, b = 0; b <= this.ya; b++) for (var c = Qr(this, b, 1), d = this.fc[b], e = 0; e < d; e++) for (var f = e; f < d; f++) a += c[e * d + f]; return a; }; function Rr(a) { for (var b = 0, c = 0; c <= a.ya; c++) { for (var d = a, e = c, f = Lr(d, e), g = d.fc[e], h = 0, k = 0; k < g; k++) { var l = f[k].destinationEdgesArrayAccess; if (null !== l) for (var m = 0; m < l.length; m++) { var n = l[m]; if (n.valid && n.toVertex.layer !== e) { var p = n.fromVertex.column + n.portFromColOffset; var q = n.toVertex.column + n.portToColOffset; h += (Math.abs(p - q) + 1) * Nr(n); } } } Mr(d, e, f); b += h; } return b; } Cr.prototype.normalize = function () { var a = Infinity; this.Ha = -1; for (var b = this.network.vertexes.iterator; b.next(); ) { var c = b.value; a = Math.min(a, c.column - this.nodeMinColumnSpace(c, !0)); this.Ha = Math.max(this.Ha, c.column + this.nodeMinColumnSpace(c, !1)); } for (b.reset(); b.next(); ) b.value.column -= a; this.Ha -= a; }; function Sr(a, b, c) { for (var d = Lr(a, b), e = a.fc[b], f = [], g = 0; g < e; g++) { var h = d[g], k = null; 0 >= c && (k = h.sourceEdgesArrayAccess); var l = null; 0 <= c && (l = h.destinationEdgesArrayAccess); var m = 0, n = 0, p = h.near; null !== p && p.layer === h.layer && ((m += p.column - 1), n++); if (null !== k) for (p = 0; p < k.length; p++) { h = k[p]; var q = h.fromVertex; h.valid && !h.rev && q.layer !== b && ((m += q.column), n++); } if (null !== l) for (k = 0; k < l.length; k++) (h = l[k]), (p = h.toVertex), h.valid && !h.rev && p.layer !== b && ((m += p.column), n++); f[g] = 0 === n ? -1 : m / n; } Mr(a, b, d); return f; } function Tr(a, b, c) { for (var d = Lr(a, b), e = a.fc[b], f = [], g = 0; g < e; g++) { var h = d[g], k = null; 0 >= c && (k = h.sourceEdgesArrayAccess); var l = null; 0 <= c && (l = h.destinationEdgesArrayAccess); var m = 0, n = [], p = h.near; null !== p && p.layer === h.layer && ((n[m] = p.column - 1), m++); h = void 0; if (null !== k) for (p = 0; p < k.length; p++) { h = k[p]; var q = h.fromVertex; h.valid && !h.rev && q.layer !== b && ((n[m] = q.column + h.portFromColOffset), m++); } if (null !== l) for (k = 0; k < l.length; k++) (h = l[k]), (p = h.toVertex), h.valid && !h.rev && p.layer !== b && ((n[m] = p.column + h.portToColOffset), m++); 0 === m ? (f[g] = -1) : (n.sort(function (a, b) { return a - b; }), (l = m >> 1), (f[g] = 0 !== (m & 1) ? n[l] : (n[l - 1] + n[l]) >> 1)); } Mr(a, b, d); return f; } function Ur(a, b, c, d, e, f) { if (b.component === d) { b.component = c; if (e) for (var g = b.destinationEdges; g.next(); ) { var h = g.value; var k = h.toVertex; var l = b.layer - k.layer; h = a.linkMinLength(h); l === h && Ur(a, k, c, d, e, f); } if (f) for (g = b.sourceEdges; g.next(); ) (h = g.value), (k = h.fromVertex), (l = k.layer - b.layer), (h = a.linkMinLength(h)), l === h && Ur(a, k, c, d, e, f); } } function Vr(a, b, c, d, e, f) { if (b.component === d) { b.component = c; if (e) for (var g = b.destinationEdges; g.next(); ) Vr(a, g.value.toVertex, c, d, e, f); if (f) for (b = b.sourceEdges; b.next(); ) Vr(a, b.value.fromVertex, c, d, e, f); } } Cr.prototype.removeCycles = function () { for (var a = this.network.edges.iterator; a.next(); ) a.value.rev = !1; switch (this.Lk) { default: case Wr: a = this.network; var b = 0, c = a.vertexes.count - 1, d = []; d.length = c + 1; for (var e = a.vertexes.iterator; e.next(); ) e.value.valid = !0; for (; null !== Xr(a); ) { for (e = Yr(a); null !== e; ) (d[c] = e), c--, (e.valid = !1), (e = Yr(a)); for (e = Zr(a); null !== e; ) (d[b] = e), b++, (e.valid = !1), (e = Zr(a)); e = null; for (var f = 0, g = this.network.vertexes.iterator; g.next(); ) { var h = g.value; if (h.valid) { for (var k = 0, l = h.destinationEdges; l.next(); ) l.value.toVertex.valid && k++; l = 0; for (var m = h.sourceEdges; m.next(); ) m.value.fromVertex.valid && l++; if (null === e || f < k - l) (e = h), (f = k - l); } } null !== e && ((d[b] = e), b++, (e.valid = !1)); } for (b = 0; b < a.vertexes.count; b++) d[b].index = b; for (d = a.edges.iterator; d.next(); ) (b = d.value), b.fromVertex.index > b.toVertex.index && (a.sm(b), (b.rev = !0)); break; case Dr: for (d = this.network.vertexes.iterator; d.next(); ) (a = d.value), (a.Xl = -1), (a.finish = -1); for (a = this.network.edges.iterator; a.next(); ) a.value.forest = !1; this.zo = 0; for (d.reset(); d.next(); ) (b = d.value), 0 === b.sourceEdges.count && $r(this, b); for (d.reset(); d.next(); ) (b = d.value), -1 === b.Xl && $r(this, b); for (a.reset(); a.next(); ) (d = a.value), d.forest || ((b = d.fromVertex), (c = b.finish), (e = d.toVertex), (f = e.finish), e.Xl < b.Xl && c < f && (this.network.sm(d), (d.rev = !0))); break; case Ir: a = this.network; b = a.vertexes.iterator; for (d = Infinity; b.next(); ) d = Math.min(d, b.value.layer); if (Infinity > d) { if (0 > d) for (b.reset(); b.next(); ) b.value.layer -= d; d = []; for (b.reset(); b.next(); ) (c = b.value), (e = d[c.layer]), void 0 === e ? (d[c.layer] = [c]) : e.push(c); for (c = b = 0; c < d.length; c++) if (((e = d[c]), !e || 0 === e.length)) b++; else if (0 < c) for (f = 0; f < e.length; f++) e[f].layer -= b; for (d = a.edges.iterator; d.next(); ) (b = d.value), b.fromVertex.layer < b.toVertex.layer && (a.sm(b), (b.rev = !0)); } } }; function Xr(a) { for (a = a.vertexes.iterator; a.next(); ) { var b = a.value; if (b.valid) return b; } return null; } function Yr(a) { for (a = a.vertexes.iterator; a.next(); ) { var b = a.value; if (b.valid) { for (var c = !0, d = b.destinationEdges; d.next(); ) if (d.value.toVertex.valid) { c = !1; break; } if (c) return b; } } return null; } function Zr(a) { for (a = a.vertexes.iterator; a.next(); ) { var b = a.value; if (b.valid) { for (var c = !0, d = b.sourceEdges; d.next(); ) if (d.value.fromVertex.valid) { c = !1; break; } if (c) return b; } } return null; } function $r(a, b) { b.Xl = a.zo; a.zo++; for (var c = b.destinationEdges; c.next(); ) { var d = c.value, e = d.toVertex; -1 === e.Xl && ((d.forest = !0), $r(a, e)); } b.finish = a.zo; a.zo++; } Cr.prototype.assignLayers = function () { switch (this.ll) { case as: bs(this); break; case cs: for (var a, b = this.network.vertexes.iterator; b.next(); ) (a = ds(this, b.value)), (this.ya = Math.max(a, this.ya)); for (b.reset(); b.next(); ) (a = b.value), (a.layer = this.ya - a.layer); break; default: case Er: bs(this); for (b = this.network.vertexes.iterator; b.next(); ) b.value.valid = !1; for (b.reset(); b.next(); ) (a = b.value), 0 === a.sourceEdges.count && es(this, a); a = Infinity; for (b.reset(); b.next(); ) a = Math.min(a, b.value.layer); this.ya = -1; for (b.reset(); b.next(); ) { var c = b.value; c.layer -= a; this.ya = Math.max(this.ya, c.layer); } } }; function bs(a) { for (var b = a.network.vertexes.iterator; b.next(); ) { var c = fs(a, b.value); a.ya = Math.max(c, a.ya); } } function fs(a, b) { var c = 0; if (-1 === b.layer) { for (var d = b.destinationEdges; d.next(); ) { var e = d.value, f = e.toVertex; e = a.linkMinLength(e); c = Math.max(c, fs(a, f) + e); } b.layer = c; } else c = b.layer; return c; } function ds(a, b) { var c = 0; if (-1 === b.layer) { for (var d = b.sourceEdges; d.next(); ) { var e = d.value, f = e.fromVertex; e = a.linkMinLength(e); c = Math.max(c, ds(a, f) + e); } b.layer = c; } else c = b.layer; return c; } function es(a, b) { if (!b.valid) { b.valid = !0; for (var c = b.destinationEdges; c.next(); ) es(a, c.value.toVertex); for (c = a.network.vertexes.iterator; c.next(); ) c.value.component = -1; for (var d = b.sourceEdgesArrayAccess, e = d.length, f = 0; f < e; f++) { var g = d[f], h = g.fromVertex, k = g.toVertex; g = a.linkMinLength(g); h.layer - k.layer > g && Ur(a, h, 0, -1, !0, !1); } for (Ur(a, b, 1, -1, !0, !0); 0 !== b.component; ) { f = 0; d = Infinity; h = 0; k = null; for (g = a.network.vertexes.iterator; g.next(); ) { var l = g.value; if (1 === l.component) { var m = 0, n = !1, p = l.sourceEdgesArrayAccess; e = p.length; for (var q = 0; q < e; q++) { var r = p[q], u = r.fromVertex; m += 1; 1 !== u.component && ((f += 1), (u = u.layer - l.layer), (r = a.linkMinLength(r)), (d = Math.min(d, u - r))); } p = l.destinationEdgesArrayAccess; e = p.length; for (q = 0; q < e; q++) (r = p[q].toVertex), --m, 1 !== r.component ? --f : (n = !0); (null === k || m < h) && !n && ((k = l), (h = m)); } } if (0 < f) { for (c.reset(); c.next(); ) (e = c.value), 1 === e.component && (e.layer += d); b.component = 0; } else k.component = 0; } for (c = a.network.vertexes.iterator; c.next(); ) c.value.component = -1; for (Ur(a, b, 1, -1, !0, !1); 0 !== b.component; ) { d = 0; e = Infinity; f = 0; h = null; for (k = a.network.vertexes.iterator; k.next(); ) if (((g = k.value), 1 === g.component)) { l = 0; m = !1; p = g.sourceEdgesArrayAccess; n = p.length; for (q = 0; q < n; q++) (r = p[q].fromVertex), (l += 1), 1 !== r.component ? (d += 1) : (m = !0); p = g.destinationEdgesArrayAccess; n = p.length; for (q = 0; q < n; q++) (r = p[q]), (u = r.toVertex), --l, 1 !== u.component && (--d, (u = g.layer - u.layer), (r = a.linkMinLength(r)), (e = Math.min(e, u - r))); (null === h || l > f) && !m && ((h = g), (f = l)); } if (0 > d) { for (c.reset(); c.next(); ) (d = c.value), 1 === d.component && (d.layer -= e); b.component = 0; } else h.component = 0; } } } function Kr(a, b, c) { return 90 === a.L ? (c && !b.rev) || (!c && b.rev) ? 270 : 90 : 180 === a.L ? (c && !b.rev) || (!c && b.rev) ? 0 : 180 : 270 === a.L ? (c && !b.rev) || (!c && b.rev) ? 90 : 270 : (c && !b.rev) || (!c && b.rev) ? 180 : 0; } Cr.prototype.initializeIndices = function () { switch (this.bl) { default: case gs: for (var a = this.network.vertexes.iterator; a.next(); ) { var b = a.value, c = b.layer; b.index = this.fc[c]; this.fc[c]++; } break; case Fr: a = this.network.vertexes.iterator; for (b = this.ya; 0 <= b; b--) for (a.reset(); a.next(); ) (c = a.value), c.layer === b && -1 === c.index && hs(this, c); break; case is: for (a = this.network.vertexes.iterator, b = 0; b <= this.ya; b++) for (a.reset(); a.next(); ) (c = a.value), c.layer === b && -1 === c.index && js(this, c); } }; function hs(a, b) { var c = b.layer; b.index = a.fc[c]; a.fc[c]++; b = b.destinationEdgesArrayAccess; for (c = !0; c; ) { c = !1; for (var d = 0; d < b.length - 1; d++) { var e = b[d], f = b[d + 1]; e.portFromColOffset > f.portFromColOffset && ((c = !0), (b[d] = f), (b[d + 1] = e)); } } for (c = 0; c < b.length; c++) (d = b[c]), d.valid && ((d = d.toVertex), -1 === d.index && hs(a, d)); } function js(a, b) { var c = b.layer; b.index = a.fc[c]; a.fc[c]++; b = b.sourceEdgesArrayAccess; for (var d = !0; d; ) for (d = !1, c = 0; c < b.length - 1; c++) { var e = b[c], f = b[c + 1]; e.portToColOffset > f.portToColOffset && ((d = !0), (b[c] = f), (b[c + 1] = e)); } for (c = 0; c < b.length; c++) (d = b[c]), d.valid && ((d = d.fromVertex), -1 === d.index && js(a, d)); } Cr.prototype.reduceCrossings = function () { var a = this.countCrossings(), b = Or(this), c, d; for (c = 0; c < this.qj; c++) { for (d = 0; d <= this.ya; d++) ks(this, d, 1), ls(this, d, 1); var e = this.countCrossings(); e < a && ((a = e), (b = Or(this))); for (d = this.ya; 0 <= d; d--) ks(this, d, -1), ls(this, d, -1); e = this.countCrossings(); e < a && ((a = e), (b = Or(this))); } Pr(this, b); for (c = 0; c < this.qj; c++) { for (d = 0; d <= this.ya; d++) ks(this, d, 0), ls(this, d, 0); e = this.countCrossings(); e < a && ((a = e), (b = Or(this))); for (d = this.ya; 0 <= d; d--) ks(this, d, 0), ls(this, d, 0); e = this.countCrossings(); e < a && ((a = e), (b = Or(this))); } Pr(this, b); var f, g, h; switch (this.xk) { case ms: break; case ns: for (h = a + 1; (d = this.countCrossings()) < h; ) for (h = d, c = this.ya; 0 <= c; c--) for (g = 0; g <= c; g++) { for (f = !0; f; ) for (f = !1, d = c; d >= g; d--) f = ls(this, d, -1) || f; e = this.countCrossings(); e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = c; d >= g; d--) f = ls(this, d, 1) || f; e = this.countCrossings(); e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = g; d <= c; d++) f = ls(this, d, 1) || f; e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = g; d <= c; d++) f = ls(this, d, -1) || f; e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = c; d >= g; d--) f = ls(this, d, 0) || f; e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = g; d <= c; d++) f = ls(this, d, 0) || f; e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); } break; default: case Gr: for (c = this.ya, g = 0, h = a + 1; (d = this.countCrossings()) < h; ) { h = d; for (f = !0; f; ) for (f = !1, d = c; d >= g; d--) f = ls(this, d, -1) || f; e = this.countCrossings(); e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = c; d >= g; d--) f = ls(this, d, 1) || f; e = this.countCrossings(); e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = g; d <= c; d++) f = ls(this, d, 1) || f; e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = g; d <= c; d++) f = ls(this, d, -1) || f; e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = c; d >= g; d--) f = ls(this, d, 0) || f; e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); for (f = !0; f; ) for (f = !1, d = g; d <= c; d++) f = ls(this, d, 0) || f; e >= a ? Pr(this, b) : ((a = e), (b = Or(this))); } } Pr(this, b); }; function ks(a, b, c) { var d = Lr(a, b), e = a.fc[b], f = Tr(a, b, c), g = Sr(a, b, c); for (c = 0; c < e; c++) -1 === g[c] && (g[c] = d[c].column), -1 === f[c] && (f[c] = d[c].column); for (var h = !0, k; h; ) for (h = !1, c = 0; c < e - 1; c++) if (f[c + 1] < f[c] || (f[c + 1] === f[c] && g[c + 1] < g[c])) (h = !0), (k = f[c]), (f[c] = f[c + 1]), (f[c + 1] = k), (k = g[c]), (g[c] = g[c + 1]), (g[c + 1] = k), (k = d[c]), (d[c] = d[c + 1]), (d[c + 1] = k); for (c = f = 0; c < e; c++) (k = d[c]), (k.index = c), (f += a.nodeMinColumnSpace(k, !0)), (k.column = f), (f += 1), (f += a.nodeMinColumnSpace(k, !1)); Mr(a, b, d); } function ls(a, b, c) { var d = Lr(a, b), e = a.fc[b]; c = Qr(a, b, c); var f; var g = []; for (f = 0; f < e; f++) g[f] = -1; var h = []; for (f = 0; f < e; f++) h[f] = -1; for (var k = !1, l = !0; l; ) for (l = !1, f = 0; f < e - 1; f++) { var m = c[d[f].index * e + d[f + 1].index], n = c[d[f + 1].index * e + d[f].index], p = 0, q = 0, r = d[f].column, u = d[f + 1].column, x = a.nodeMinColumnSpace(d[f], !0), v = a.nodeMinColumnSpace(d[f], !1), z = a.nodeMinColumnSpace(d[f + 1], !0), y = a.nodeMinColumnSpace(d[f + 1], !1); x = r - x + z; v = u - v + y; var B = d[f].sourceEdges.iterator; for (B.reset(); B.next(); ) if (((z = B.value), (y = z.fromVertex), z.valid && y.layer === b)) { for (z = 0; d[z] !== y; ) z++; z < f && ((p += 2 * (f - z)), (q += 2 * (f + 1 - z))); z === f + 1 && (p += 1); z > f + 1 && ((p += 4 * (z - f)), (q += 4 * (z - (f + 1)))); } B = d[f].destinationEdges.iterator; for (B.reset(); B.next(); ) if (((z = B.value), (y = z.toVertex), z.valid && y.layer === b)) { for (z = 0; d[z] !== y; ) z++; z === f + 1 && (q += 1); } B = d[f + 1].sourceEdges.iterator; for (B.reset(); B.next(); ) if (((z = B.value), (y = z.fromVertex), z.valid && y.layer === b)) { for (z = 0; d[z] !== y; ) z++; z < f && ((p += 2 * (f + 1 - z)), (q += 2 * (f - z))); z === f && (q += 1); z > f + 1 && ((p += 4 * (z - (f + 1))), (q += 4 * (z - f))); } B = d[f + 1].destinationEdges.iterator; for (B.reset(); B.next(); ) if (((z = B.value), (y = z.toVertex), z.valid && y.layer === b)) { for (z = 0; d[z] !== y; ) z++; z === f && (p += 1); } z = y = 0; B = g[d[f].index]; var C = h[d[f].index], I = g[d[f + 1].index], L = h[d[f + 1].index]; -1 !== B && ((y += Math.abs(B - r)), (z += Math.abs(B - v))); -1 !== C && ((y += Math.abs(C - r)), (z += Math.abs(C - v))); -1 !== I && ((y += Math.abs(I - u)), (z += Math.abs(I - x))); -1 !== L && ((y += Math.abs(L - u)), (z += Math.abs(L - x))); if (q < p - 0.5 || (q === p && n < m - 0.5) || (q === p && n === m && z < y - 0.5)) (l = k = !0), (d[f].column = v), (d[f + 1].column = x), (m = d[f]), (d[f] = d[f + 1]), (d[f + 1] = m); } for (f = 0; f < e; f++) d[f].index = f; Mr(a, b, d); return k; } Cr.prototype.straightenAndPack = function () { var a = 0 !== (this.bg & 1); var b = 7 === this.bg; 1e3 < this.network.edges.count && !b && (a = !1); if (a) { var c = []; for (b = 0; b <= this.ya; b++) c[b] = 0; for (var d, e = this.network.vertexes.iterator; e.next(); ) { var f = e.value; b = f.layer; d = f.column; f = this.nodeMinColumnSpace(f, !1); c[b] = Math.max(c[b], d + f); } for (e.reset(); e.next(); ) (f = e.value), (b = f.layer), (d = f.column), (f.column = ((8 * (this.Ha - c[b])) >> 1) + 8 * d); this.Ha *= 8; } if (0 !== (this.bg & 2)) for (c = !0; c; ) { c = !1; for (b = this.od + 1; b <= this.ya; b++) c = os(this, b, 1) || c; for (b = this.od - 1; 0 <= b; b--) c = os(this, b, -1) || c; c = os(this, this.od, 0) || c; } if (0 !== (this.bg & 4)) { for (b = this.od + 1; b <= this.ya; b++) ps(this, b, 1); for (b = this.od - 1; 0 <= b; b--) ps(this, b, -1); ps(this, this.od, 0); } a && (qs(this, -1), qs(this, 1)); if (0 !== (this.bg & 2)) for (c = !0; c; ) { c = !1; c = os(this, this.od, 0) || c; for (b = this.od + 1; b <= this.ya; b++) c = os(this, b, 0) || c; for (b = this.od - 1; 0 <= b; b--) c = os(this, b, 0) || c; } }; function os(a, b, c) { for (var d = !1; rs(a, b, c); ) d = !0; return d; } function rs(a, b, c) { var d, e = Lr(a, b), f = a.fc[b], g = Sr(a, b, -1); if (0 < c) for (d = 0; d < f; d++) g[d] = -1; var h = Sr(a, b, 1); if (0 > c) for (d = 0; d < f; d++) h[d] = -1; for (var k = !1, l = !0; l; ) for (l = !1, d = 0; d < f; d++) { var m = e[d].column, n = a.nodeMinColumnSpace(e[d], !0), p = a.nodeMinColumnSpace(e[d], !1), q = 0; 0 > d - 1 || m - e[d - 1].column - 1 > n + a.nodeMinColumnSpace(e[d - 1], !1) ? (q = m - 1) : (q = m); n = d + 1 >= f || e[d + 1].column - m - 1 > p + a.nodeMinColumnSpace(e[d + 1], !0) ? m + 1 : m; var r = (p = 0), u = 0; if (0 >= c) for (var x = e[d].sourceEdges.iterator; x.next(); ) { var v = x.value; var z = v.fromVertex; if (v.valid && z.layer !== b) { var y = Nr(v); var B = v.portFromColOffset; v = v.portToColOffset; z = z.column; p += (Math.abs(m + v - (z + B)) + 1) * y; r += (Math.abs(q + v - (z + B)) + 1) * y; u += (Math.abs(n + v - (z + B)) + 1) * y; } } if (0 <= c) for (x = e[d].destinationEdges.iterator; x.next(); ) (v = x.value), (z = v.toVertex), v.valid && z.layer !== b && ((y = Nr(v)), (B = v.portFromColOffset), (v = v.portToColOffset), (z = z.column), (p += (Math.abs(m + B - (z + v)) + 1) * y), (r += (Math.abs(q + B - (z + v)) + 1) * y), (u += (Math.abs(n + B - (z + v)) + 1) * y)); v = B = y = 0; x = g[e[d].index]; z = h[e[d].index]; -1 !== x && ((y += Math.abs(x - m)), (B += Math.abs(x - q)), (v += Math.abs(x - n))); -1 !== z && ((y += Math.abs(z - m)), (B += Math.abs(z - q)), (v += Math.abs(z - n))); if (r < p || (r === p && B < y)) (l = k = !0), (e[d].column = q); else if (u < p || (u === p && v < y)) (l = k = !0), (e[d].column = n); } Mr(a, b, e); a.normalize(); return k; } function ps(a, b, c) { var d = Lr(a, b), e = a.fc[b], f = Tr(a, b, c), g = []; for (c = 0; c < e; c++) g[c] = f[c]; for (f = !0; f; ) for (f = !1, c = 0; c < e; c++) { var h = d[c].column, k = a.nodeMinColumnSpace(d[c], !0), l = a.nodeMinColumnSpace(d[c], !1), m = 0; if (-1 === g[c]) if (0 === c && c === e - 1) m = h; else if (0 === c) { var n = d[c + 1].column; n - h === l + a.nodeMinColumnSpace(d[c + 1], !0) ? (m = h - 1) : (m = h); } else c === e - 1 ? ((n = d[c - 1].column), (m = h - n === k + a.nodeMinColumnSpace(d[c - 1], !1) ? h + 1 : h)) : ((n = d[c - 1].column), (k = n + a.nodeMinColumnSpace(d[c - 1], !1) + k + 1), (n = d[c + 1].column), (l = n - a.nodeMinColumnSpace(d[c + 1], !0) - l - 1), (m = ((k + l) / 2) | 0)); else 0 === c && c === e - 1 ? (m = g[c]) : 0 === c ? ((n = d[c + 1].column), (l = n - a.nodeMinColumnSpace(d[c + 1], !0) - l - 1), (m = Math.min(g[c], l))) : c === e - 1 ? ((n = d[c - 1].column), (k = n + a.nodeMinColumnSpace(d[c - 1], !1) + k + 1), (m = Math.max(g[c], k))) : ((n = d[c - 1].column), (k = n + a.nodeMinColumnSpace(d[c - 1], !1) + k + 1), (n = d[c + 1].column), (l = n - a.nodeMinColumnSpace(d[c + 1], !0) - l - 1), k < g[c] && g[c] < l ? (m = g[c]) : k >= g[c] ? (m = k) : l <= g[c] && (m = l)); m !== h && ((f = !0), (d[c].column = m)); } Mr(a, b, d); a.normalize(); } function ss(a, b) { for (var c = !0, d = a.network.vertexes.iterator; d.next(); ) { var e = d.value, f = a.nodeMinColumnSpace(e, !0), g = a.nodeMinColumnSpace(e, !1); if (e.column - f <= b && e.column + g >= b) { c = !1; break; } } a = !1; if (c) for (d.reset(); d.next(); ) (c = d.value), c.column > b && (--c.column, (a = !0)); return a; } function ts(a, b) { var c = b + 1; var d, e = [], f = []; for (d = 0; d <= a.ya; d++) (e[d] = !1), (f[d] = !1); for (var g = a.network.vertexes.iterator; g.next(); ) { d = g.value; var h = d.column - a.nodeMinColumnSpace(d, !0), k = d.column + a.nodeMinColumnSpace(d, !1); h <= b && k >= b && (e[d.layer] = !0); h <= c && k >= c && (f[d.layer] = !0); } h = !0; c = !1; for (d = 0; d <= a.ya; d++) h = h && !(e[d] && f[d]); if (h) for (g.reset(); g.next(); ) (a = g.value), a.column > b && (--a.column, (c = !0)); return c; } function qs(a, b) { for (var c = 0; c <= a.Ha; c++) for (; ss(a, c); ); a.normalize(); for (c = 0; c < a.Ha; c++) for (; ts(a, c); ); a.normalize(); var d; if (0 < b) for (c = 0; c <= a.Ha; c++) { var e = Or(a); var f = Rr(a); for (d = f + 1; f < d; ) { d = f; us(a, c, 1); var g = Rr(a); g > f ? Pr(a, e) : g < f && ((f = g), (e = Or(a))); } } if (0 > b) for (c = a.Ha; 0 <= c; c--) for (e = Or(a), f = Rr(a), d = f + 1; f < d; ) (d = f), us(a, c, -1), (g = Rr(a)), g > f ? Pr(a, e) : g < f && ((f = g), (e = Or(a))); a.normalize(); } function us(a, b, c) { a.Ld = 0; for (var d = a.network.vertexes.iterator; d.next(); ) d.value.component = -1; if (0 < c) for (d.reset(); d.next(); ) { var e = d.value; e.column - a.nodeMinColumnSpace(e, !0) <= b && (e.component = a.Ld); } if (0 > c) for (d.reset(); d.next(); ) (e = d.value), e.column + a.nodeMinColumnSpace(e, !1) >= b && (e.component = a.Ld); a.Ld++; for (d.reset(); d.next(); ) (b = d.value), -1 === b.component && (Vr(a, b, a.Ld, -1, !0, !0), a.Ld++); var f; b = []; for (f = 0; f < a.Ld * a.Ld; f++) b[f] = !1; e = []; for (f = 0; f < (a.ya + 1) * (a.Ha + 1); f++) e[f] = -1; for (d.reset(); d.next(); ) { f = d.value; for ( var g = f.layer, h = Math.max(0, f.column - a.nodeMinColumnSpace(f, !0)), k = Math.min(a.Ha, f.column + a.nodeMinColumnSpace(f, !1)); h <= k; h++ ) e[g * (a.Ha + 1) + h] = f.component; } for (f = 0; f <= a.ya; f++) { if (0 < c) for (g = 0; g < a.Ha; g++) -1 !== e[f * (a.Ha + 1) + g] && -1 !== e[f * (a.Ha + 1) + g + 1] && e[f * (a.Ha + 1) + g] !== e[f * (a.Ha + 1) + g + 1] && (b[e[f * (a.Ha + 1) + g] * a.Ld + e[f * (a.Ha + 1) + g + 1]] = !0); if (0 > c) for (g = a.Ha; 0 < g; g--) -1 !== e[f * (a.Ha + 1) + g] && -1 !== e[f * (a.Ha + 1) + g - 1] && e[f * (a.Ha + 1) + g] !== e[f * (a.Ha + 1) + g - 1] && (b[e[f * (a.Ha + 1) + g] * a.Ld + e[f * (a.Ha + 1) + g - 1]] = !0); } e = []; for (f = 0; f < a.Ld; f++) e[f] = !0; g = []; for (g.push(0); 0 !== g.length; ) if (((k = g[g.length - 1]), g.pop(), e[k])) for (e[k] = !1, f = 0; f < a.Ld; f++) b[k * a.Ld + f] && g.splice(0, 0, f); if (0 < c) for (d.reset(); d.next(); ) (a = d.value), e[a.component] && --a.column; if (0 > c) for (d.reset(); d.next(); ) (c = d.value), e[c.component] && (c.column += 1); } Cr.prototype.commitLayout = function () { if (this.setsPortSpots) for (var a = Jr(this, !0), b = Jr(this, !1), c = this.network.edges.iterator; c.next(); ) { var d = c.value.link; null !== d && ((d.fromSpot = a), (d.toSpot = b)); } this.commitNodes(); this.Nu(); this.isRouting && this.commitLinks(); }; function Jr(a, b) { return 270 === a.L ? b ? Jd : Td : 90 === a.L ? b ? Td : Jd : 180 === a.L ? b ? Kd : Sd : b ? Sd : Kd; } Cr.prototype.commitNodes = function () { this.Gd = []; this.md = []; this.ld = []; this.Ka = []; for (var a = 0; a <= this.ya; a++) (this.Gd[a] = 0), (this.md[a] = 0), (this.ld[a] = 0), (this.Ka[a] = 0); for (a = this.network.vertexes.iterator; a.next(); ) { var b = a.value, c = b.layer; this.Gd[c] = Math.max(this.Gd[c], this.nodeMinLayerSpace(b, !0)); this.md[c] = Math.max(this.md[c], this.nodeMinLayerSpace(b, !1)); } b = 0; c = this.ke; for (var d = 0; d <= this.ya; d++) { var e = c; 0 >= this.Gd[d] + this.md[d] && (e = 0); 0 < d && (b += e / 2); 90 === this.L || 0 === this.L ? ((b += this.md[d]), (this.ld[d] = b), (b += this.Gd[d])) : ((b += this.Gd[d]), (this.ld[d] = b), (b += this.md[d])); d < this.ya && (b += e / 2); this.Ka[d] = b; } c = b; b = this.arrangementOrigin; for (d = 0; d <= this.ya; d++) 270 === this.L ? (this.ld[d] = b.y + this.ld[d]) : 90 === this.L ? ((this.ld[d] = b.y + c - this.ld[d]), (this.Ka[d] = c - this.Ka[d])) : 180 === this.L ? (this.ld[d] = b.x + this.ld[d]) : ((this.ld[d] = b.x + c - this.ld[d]), (this.Ka[d] = c - this.Ka[d])); a.reset(); for (c = d = Infinity; a.next(); ) { e = a.value; var f = e.layer, g = e.column | 0; if (270 === this.L || 90 === this.L) { var h = b.x + this.Wb * g; f = this.ld[f]; } else (h = this.ld[f]), (f = b.y + this.Wb * g); e.centerX = h; e.centerY = f; d = Math.min(e.x, d); c = Math.min(e.y, c); } d = b.x - d; b = b.y - c; this.iw = new G(d, b); for (a.reset(); a.next(); ) (c = a.value), (c.x += d), (c.y += b), c.commit(); }; Cr.prototype.Nu = function () { for (var a = 0, b = this.ke, c = 0; c <= this.ya; c++) (a += this.Gd[c]), (a += this.md[c]); a += this.ya * b; b = []; c = this.Wb * this.Ha; for (var d = this.maxLayer; 0 <= d; d--) 270 === this.L ? 0 === d ? b.push(new N(0, 0, c, Math.abs(this.Ka[0]))) : b.push(new N(0, this.Ka[d - 1], c, Math.abs(this.Ka[d - 1] - this.Ka[d]))) : 90 === this.L ? 0 === d ? b.push(new N(0, this.Ka[0], c, Math.abs(this.Ka[0] - a))) : b.push(new N(0, this.Ka[d], c, Math.abs(this.Ka[d - 1] - this.Ka[d]))) : 180 === this.L ? 0 === d ? b.push(new N(0, 0, Math.abs(this.Ka[0]), c)) : b.push(new N(this.Ka[d - 1], 0, Math.abs(this.Ka[d - 1] - this.Ka[d]), c)) : 0 === d ? b.push(new N(this.Ka[0], 0, Math.abs(this.Ka[0] - a), c)) : b.push(new N(this.Ka[d], 0, Math.abs(this.Ka[d - 1] - this.Ka[d]), c)); this.commitLayers(b, this.iw); }; Cr.prototype.commitLayers = function () {}; Cr.prototype.commitLinks = function () { for (var a = this.network.edges.iterator, b; a.next(); ) (b = a.value.link), null !== b && (b.Ch(), b.Uj(), b.mf()); for (a.reset(); a.next(); ) (b = a.value.link), null !== b && b.Zi(); for (a.reset(); a.next(); ) { var c = a.value; b = c.link; if (null !== b) { b.Ch(); var d = b, e = d.fromNode, f = d.toNode, g = d.fromPort, h = d.toPort; if (null !== e) { var k = e.findVisibleNode(); null !== k && k !== e && ((e = k), (g = k.port)); } if (null !== f) { var l = f.findVisibleNode(); null !== l && l !== f && ((f = l), (h = l.port)); } var m = b.computeSpot(!0, g), n = b.computeSpot(!1, h), p = c.fromVertex, q = c.toVertex; if (c.valid) { if (b.curve === Rg && 4 === b.pointsCount) if (p.column === q.column) { var r = b.getLinkPoint(e, g, m, !0, !1, f, h), u = b.getLinkPoint(f, h, n, !1, !1, e, g); r.o() || r.set(e.actualBounds.center); u.o() || u.set(f.actualBounds.center); b.Uj(); b.lf(r.x, r.y); b.lf((2 * r.x + u.x) / 3, (2 * r.y + u.y) / 3); b.lf((r.x + 2 * u.x) / 3, (r.y + 2 * u.y) / 3); b.lf(u.x, u.y); } else { var x = !1, v = !1; null !== g && m === Sc && (x = !0); null !== h && n === Sc && (v = !0); if (x || v) { var z = b.i(0).x, y = b.i(0).y, B = b.i(3).x, C = b.i(3).y; if (x) { if (90 === this.L || 270 === this.L) { var I = z; var L = (y + C) / 2; } else (I = (z + B) / 2), (L = y); b.M(1, I, L); var J = b.getLinkPoint(e, g, m, !0, !1, f, h); J.o() || J.set(e.actualBounds.center); b.M(0, J.x, J.y); } if (v) { if (90 === this.L || 270 === this.L) { var U = B; var R = (y + C) / 2; } else (U = (z + B) / 2), (R = C); b.M(2, U, R); var da = b.getLinkPoint(f, h, n, !1, !1, e, g); da.o() || da.set(f.actualBounds.center); b.M(3, da.x, da.y); } } } b.mf(); } else if (p.layer === q.layer) b.mf(); else { var ja = !1, K = !1, Q = b.firstPickIndex + 1; if (b.isOrthogonal) { K = !0; var xa = b.pointsCount; 4 < xa && b.points.removeRange(2, xa - 3); } else if (b.curve === Rg) (ja = !0), (xa = b.pointsCount), 4 < xa && b.points.removeRange(2, xa - 3), 4 === xa && (Q = 2); else { xa = b.pointsCount; var jb = m === Sc, Ha = n === Sc; 2 < xa && jb && Ha ? b.points.removeRange(1, xa - 2) : 3 < xa && jb && !Ha ? b.points.removeRange(1, xa - 3) : 3 < xa && !jb && Ha ? b.points.removeRange(2, xa - 2) : 4 < xa && !jb && !Ha && b.points.removeRange(2, xa - 3); } var Da; if (c.rev) { for (var Fa; null !== q && p !== q; ) { var Ra = (Da = null); for (var Ub = q.sourceEdges.iterator; Ub.next(); ) { var $a = Ub.value; if ( $a.link === c.link && ((Da = $a.fromVertex), (Ra = $a.toVertex), null === Da.node) ) break; } if (Da !== p) { var Xa = b.i(Q - 1).x; var Ma = b.i(Q - 1).y; var ha = Da.centerX; var fa = Da.centerY; if (K) if (180 === this.L || 0 === this.L) if (Q === b.firstPickIndex + 1) b.m(Q++, Xa, Ma), b.m(Q++, Xa, fa); else { if ((null !== Ra ? Ra.centerY : Ma) !== fa) { var hb = this.Ka[Da.layer - 1]; b.m(Q++, hb, Ma); b.m(Q++, hb, fa); } } else Q === b.firstPickIndex + 1 ? (b.m(Q++, Xa, Ma), b.m(Q++, ha, Ma)) : (null !== Ra ? Ra.centerX : Xa) !== ha && ((hb = this.Ka[Da.layer - 1]), b.m(Q++, Xa, hb), b.m(Q++, ha, hb)); else if (Q === b.firstPickIndex + 1) { var kb = Math.max(10, this.Gd[q.layer]); var Na = Math.max(10, this.md[q.layer]); if (ja) 180 === this.L ? ha <= q.bounds.x ? ((Fa = q.bounds.x), b.m(Q++, Fa - kb, fa), b.m(Q++, Fa, fa), b.m(Q++, Fa + Na, fa)) : (b.m(Q++, ha - kb, fa), b.m(Q++, ha, fa), b.m(Q++, ha + Na, fa)) : 90 === this.L ? fa >= q.bounds.bottom ? ((Fa = q.bounds.y + q.bounds.height), b.m(Q++, ha, Fa + Na), b.m(Q++, ha, Fa), b.m(Q++, ha, Fa - kb)) : (b.m(Q++, ha, fa + Na), b.m(Q++, ha, fa), b.m(Q++, ha, fa - kb)) : 270 === this.L ? fa <= q.bounds.y ? ((Fa = q.bounds.y), b.m(Q++, ha, Fa - kb), b.m(Q++, ha, Fa), b.m(Q++, ha, Fa + Na)) : (b.m(Q++, ha, fa - kb), b.m(Q++, ha, fa), b.m(Q++, ha, fa + Na)) : 0 === this.L && (ha >= q.bounds.right ? ((Fa = q.bounds.x + q.bounds.width), b.m(Q++, Fa + Na, fa), b.m(Q++, Fa, fa), b.m(Q++, Fa - kb, fa)) : (b.m(Q++, ha + Na, fa), b.m(Q++, ha, fa), b.m(Q++, ha - kb, fa))); else { b.m(Q++, Xa, Ma); var ee = 0; if (180 === this.L || 0 === this.L) { if (180 === this.L ? ha >= q.bounds.right : ha <= q.bounds.x) ee = (0 === this.L ? -kb : Na) / 2; b.m(Q++, Xa + ee, fa); } else { if (270 === this.L ? fa >= q.bounds.bottom : fa <= q.bounds.y) ee = (90 === this.L ? -kb : Na) / 2; b.m(Q++, ha, Ma + ee); } b.m(Q++, ha, fa); } } else (kb = Math.max(10, this.Gd[Da.layer])), (Na = Math.max(10, this.md[Da.layer])), 180 === this.L ? (ja && b.m(Q++, ha - kb, fa), b.m(Q++, ha, fa), ja && b.m(Q++, ha + Na, fa)) : 90 === this.L ? (ja && b.m(Q++, ha, fa + Na), b.m(Q++, ha, fa), ja && b.m(Q++, ha, fa - kb)) : 270 === this.L ? (ja && b.m(Q++, ha, fa - kb), b.m(Q++, ha, fa), ja && b.m(Q++, ha, fa + Na)) : (ja && b.m(Q++, ha + Na, fa), b.m(Q++, ha, fa), ja && b.m(Q++, ha - kb, fa)); } q = Da; } if (null === h || m !== Sc || K) if (((Xa = b.i(Q - 1).x), (Ma = b.i(Q - 1).y), (ha = b.i(Q).x), (fa = b.i(Q).y), K)) { var Ld = this.md[p.layer]; if (180 === this.L || 0 === this.L) { var vb = Ma; vb >= p.bounds.y && vb <= p.bounds.bottom && (180 === this.L ? ha >= p.bounds.x : ha <= p.bounds.right) && ((Fa = p.centerX + (180 === this.L ? -Ld : Ld)), vb < p.bounds.y + p.bounds.height / 2 ? (vb = p.bounds.y - this.Wb / 2) : (vb = p.bounds.bottom + this.Wb / 2), b.m(Q++, Fa, Ma), b.m(Q++, Fa, vb)); b.m(Q++, ha, vb); } else (vb = Xa), vb >= p.bounds.x && vb <= p.bounds.right && (270 === this.L ? fa >= p.bounds.y : fa <= p.bounds.bottom) && ((Fa = p.centerY + (270 === this.L ? -Ld : Ld)), vb < p.bounds.x + p.bounds.width / 2 ? (vb = p.bounds.x - this.Wb / 2) : (vb = p.bounds.right + this.Wb / 2), b.m(Q++, Xa, Fa), b.m(Q++, vb, Fa)), b.m(Q++, vb, fa); b.m(Q++, ha, fa); } else if (ja) (kb = Math.max(10, this.Gd[p.layer])), (Na = Math.max(10, this.md[p.layer])), 180 === this.L && ha >= p.bounds.x ? ((Fa = p.bounds.x + p.bounds.width), b.M(Q - 2, Fa, Ma), b.M(Q - 1, Fa + Na, Ma)) : 90 === this.L && fa <= p.bounds.bottom ? ((Fa = p.bounds.y), b.M(Q - 2, Xa, Fa), b.M(Q - 1, Xa, Fa - kb)) : 270 === this.L && fa >= p.bounds.y ? ((Fa = p.bounds.y + p.bounds.height), b.M(Q - 2, Xa, Fa), b.M(Q - 1, Xa, Fa + Na)) : 0 === this.L && ha <= p.bounds.right && ((Fa = p.bounds.x), b.M(Q - 2, Fa, Ma), b.M(Q - 1, Fa - kb, Ma)); else { kb = Math.max(10, this.Gd[p.layer]); Na = Math.max(10, this.md[p.layer]); var zf = 0; if (180 === this.L || 0 === this.L) { if (180 === this.L ? ha <= p.bounds.x : ha >= p.bounds.right) zf = (0 === this.L ? Na : -kb) / 2; b.m(Q++, ha + zf, Ma); } else { if (270 === this.L ? fa <= p.bounds.y : fa >= p.bounds.bottom) zf = (90 === this.L ? Na : -kb) / 2; b.m(Q++, Xa, fa + zf); } b.m(Q++, ha, fa); } } else { for (; null !== p && p !== q; ) { Ra = Da = null; for (var Eb = p.destinationEdges.iterator; Eb.next(); ) { var qe = Eb.value; if ( qe.link === c.link && ((Da = qe.toVertex), (Ra = qe.fromVertex), null !== Ra.node && (Ra = null), null === Da.node) ) break; } Da !== q && ((Xa = b.i(Q - 1).x), (Ma = b.i(Q - 1).y), (ha = Da.centerX), (fa = Da.centerY), K ? 180 === this.L || 0 === this.L ? (null !== Ra ? Ra.centerY : Ma) !== fa && ((hb = this.Ka[Da.layer]), Q === b.firstPickIndex + 1 && (hb = 0 === this.L ? Math.max(hb, Xa) : Math.min(hb, Xa)), b.m(Q++, hb, Ma), b.m(Q++, hb, fa)) : (null !== Ra ? Ra.centerX : Xa) !== ha && ((hb = this.Ka[Da.layer]), Q === b.firstPickIndex + 1 && (hb = 90 === this.L ? Math.max(hb, Ma) : Math.min(hb, Ma)), b.m(Q++, Xa, hb), b.m(Q++, ha, hb)) : ((kb = Math.max(10, this.Gd[Da.layer])), (Na = Math.max(10, this.md[Da.layer])), 180 === this.L ? (b.m(Q++, ha + Na, fa), ja && b.m(Q++, ha, fa), b.m(Q++, ha - kb, fa)) : 90 === this.L ? (b.m(Q++, ha, fa - kb), ja && b.m(Q++, ha, fa), b.m(Q++, ha, fa + Na)) : 270 === this.L ? (b.m(Q++, ha, fa + Na), ja && b.m(Q++, ha, fa), b.m(Q++, ha, fa - kb)) : (b.m(Q++, ha - kb, fa), ja && b.m(Q++, ha, fa), b.m(Q++, ha + Na, fa)))); p = Da; } K && ((Xa = b.i(Q - 1).x), (Ma = b.i(Q - 1).y), (ha = b.i(Q).x), (fa = b.i(Q).y), 180 === this.L || 0 === this.L ? Ma !== fa && ((hb = 0 === this.L ? Math.min(Math.max((ha + Xa) / 2, this.Ka[q.layer]), ha) : Math.max(Math.min((ha + Xa) / 2, this.Ka[q.layer]), ha)), b.m(Q++, hb, Ma), b.m(Q++, hb, fa)) : Xa !== ha && ((hb = 90 === this.L ? Math.min(Math.max((fa + Ma) / 2, this.Ka[q.layer]), fa) : Math.max(Math.min((fa + Ma) / 2, this.Ka[q.layer]), fa)), b.m(Q++, Xa, hb), b.m(Q++, ha, hb))); } if (null !== d && ja) { if (null !== g) { if (m === Sc) { var Wc = b.i(0), Vb = b.i(2); Wc.A(Vb) || b.M(1, (Wc.x + Vb.x) / 2, (Wc.y + Vb.y) / 2); } var Md = b.getLinkPoint(e, g, Sc, !0, !1, f, h); Md.o() || Md.set(e.actualBounds.center); b.M(0, Md.x, Md.y); } if (null !== h) { if (n === Sc) { var Ec = b.i(b.pointsCount - 1), Ie = b.i(b.pointsCount - 3); Ec.A(Ie) || b.M(b.pointsCount - 2, (Ec.x + Ie.x) / 2, (Ec.y + Ie.y) / 2); } var Je = b.getLinkPoint(f, h, Sc, !1, !1, e, g); Je.o() || Je.set(f.actualBounds.center); b.M(b.pointsCount - 1, Je.x, Je.y); } } b.mf(); c.commit(); } } } for (var Af = new E(), gf = this.network.edges.iterator; gf.next(); ) { var Bf = gf.value.link; null !== Bf && Bf.isOrthogonal && !Af.contains(Bf) && Af.add(Bf); } if (0 < Af.count) if (90 === this.L || 270 === this.L) { for (var Wb = 0, Ya = [], ab, Mc, Cf = Af.iterator; Cf.next(); ) { var jc = Cf.value; if (null !== jc && jc.isOrthogonal) for (var Nd = 2; Nd < jc.pointsCount - 3; Nd++) if ( ((ab = jc.i(Nd)), (Mc = jc.i(Nd + 1)), this.w(ab.y, Mc.y) && !this.w(ab.x, Mc.x)) ) { var qc = new vs(); qc.layer = Math.floor(ab.y / 2); var Od = jc.i(0), Xb = jc.i(jc.pointsCount - 1); qc.first = Od.x * Od.x + Od.y; qc.Sb = Xb.x * Xb.x + Xb.y; qc.Sc = Math.min(ab.x, Mc.x); qc.sc = Math.max(ab.x, Mc.x); qc.index = Nd; qc.link = jc; if (Nd + 2 < jc.pointsCount) { var Dh = jc.i(Nd - 1), Eh = jc.i(Nd + 2), Ke = 0; Dh.y < ab.y ? (Ke = Eh.y < ab.y ? 3 : ab.x < Mc.x ? 2 : 1) : Dh.y > ab.y && (Ke = Eh.y > ab.y ? 0 : Mc.x < ab.x ? 2 : 1); qc.l = Ke; } Ya.push(qc); } } if (1 < Ya.length) { Ya.sort(this.Bx); for (var pb = 0; pb < Ya.length; ) { for (var Df = Ya[pb].layer, Le = pb + 1; Le < Ya.length && Ya[Le].layer === Df; ) Le++; if (1 < Le - pb) for (var Yb = pb; Yb < Le; ) { for (var Me = Ya[Yb].sc, Nc = pb + 1; Nc < Le && Ya[Nc].Sc < Me; ) (Me = Math.max(Me, Ya[Nc].sc)), Nc++; var eb = Nc - Yb; if (1 < eb) { this.Wi(Ya, this.rt, Yb, Yb + eb); for (var Ne = 1, rb = Ya[Yb].Sb, rc = Yb; rc < Nc; rc++) { var lb = Ya[rc]; lb.Sb !== rb && (Ne++, (rb = lb.Sb)); } this.Wi(Ya, this.Ax, Yb, Yb + eb); var Xc = 1; rb = Ya[Yb].first; for (var Yc = Yb; Yc < Nc; Yc++) { var xd = Ya[Yc]; xd.first !== rb && (Xc++, (rb = xd.first)); } var Bg = !0, Ef = Xc; Ne < Xc ? ((Bg = !1), (Ef = Ne), (rb = Ya[Yb].Sb), this.Wi(Ya, this.rt, Yb, Yb + eb)) : (rb = Ya[Yb].first); for (var Ff = 0, hf = Yb; hf < Nc; hf++) { var kd = Ya[hf]; (Bg ? kd.first : kd.Sb) !== rb && (Ff++, (rb = Bg ? kd.first : kd.Sb)); var Pd = kd.link; ab = Pd.i(kd.index); Mc = Pd.i(kd.index + 1); var ld = this.linkSpacing * (Ff - (Ef - 1) / 2); Wb++; Pd.Ch(); Pd.M(kd.index, ab.x, ab.y + ld); Pd.M(kd.index + 1, Mc.x, Mc.y + ld); Pd.mf(); } } Yb = Nc; } pb = Le; } } } else { for (var md = 0, ob = [], fb, nd, Zc = Af.iterator; Zc.next(); ) { var od = Zc.value; if (null !== od && od.isOrthogonal) for (var vc = 2; vc < od.pointsCount - 3; vc++) if ( ((fb = od.i(vc)), (nd = od.i(vc + 1)), this.w(fb.x, nd.x) && !this.w(fb.y, nd.y)) ) { var Ba = new vs(); Ba.layer = Math.floor(fb.x / 2); var $c = od.i(0), Zb = od.i(od.pointsCount - 1); Ba.first = $c.x + $c.y * $c.y; Ba.Sb = Zb.x + Zb.y * Zb.y; Ba.Sc = Math.min(fb.y, nd.y); Ba.sc = Math.max(fb.y, nd.y); Ba.index = vc; Ba.link = od; if (vc + 2 < od.pointsCount) { var fe = od.i(vc - 1), Oe = od.i(vc + 2), ge = 0; fe.x < fb.x ? (ge = Oe.x < fb.x ? 3 : fb.y < nd.y ? 2 : 1) : fe.x > fb.x && (ge = Oe.x > fb.x ? 0 : nd.y < fb.y ? 2 : 1); Ba.l = ge; } ob.push(Ba); } } if (1 < ob.length) { ob.sort(this.Bx); for (var wc = 0; wc < ob.length; ) { for (var re = ob[wc].layer, ad = wc + 1; ad < ob.length && ob[ad].layer === re; ) ad++; if (1 < ad - wc) for (var wb = wc; wb < ad; ) { for (var Qd = ob[wb].sc, Mb = wc + 1; Mb < ad && ob[Mb].Sc < Qd; ) (Qd = Math.max(Qd, ob[Mb].sc)), Mb++; var se = Mb - wb; if (1 < se) { this.Wi(ob, this.rt, wb, wb + se); for (var yd = 1, he = ob[wb].Sb, Cg = wb; Cg < Mb; Cg++) { var bd = ob[Cg]; bd.Sb !== he && (yd++, (he = bd.Sb)); } this.Wi(ob, this.Ax, wb, wb + se); var Pe = 1; he = ob[wb].first; for (var Dg = wb; Dg < Mb; Dg++) { var Gf = ob[Dg]; Gf.first !== he && (Pe++, (he = Gf.first)); } var Qe = !0, Eg = Pe; yd < Pe ? ((Qe = !1), (Eg = yd), (he = ob[wb].Sb), this.Wi(ob, this.rt, wb, wb + se)) : (he = ob[wb].first); for (var cg = 0, Fi = wb; Fi < Mb; Fi++) { var Re = ob[Fi]; (Qe ? Re.first : Re.Sb) !== he && (cg++, (he = Qe ? Re.first : Re.Sb)); var Se = Re.link; fb = Se.i(Re.index); nd = Se.i(Re.index + 1); var Fh = this.linkSpacing * (cg - (Eg - 1) / 2); md++; Se.Ch(); Se.M(Re.index, fb.x + Fh, fb.y); Se.M(Re.index + 1, nd.x + Fh, nd.y); Se.mf(); } } wb = Mb; } wc = ad; } } } }; t = Cr.prototype; t.Bx = function (a, b) { return a instanceof vs && b instanceof vs && a !== b ? a.layer < b.layer ? -1 : a.layer > b.layer ? 1 : a.Sc < b.Sc ? -1 : a.Sc > b.Sc ? 1 : a.sc < b.sc ? -1 : a.sc > b.sc ? 1 : 0 : 0; }; t.Ax = function (a, b) { return a instanceof vs && b instanceof vs && a !== b ? a.first < b.first ? -1 : a.first > b.first || a.l < b.l ? 1 : a.l > b.l || a.Sc < b.Sc ? -1 : a.Sc > b.Sc ? 1 : a.sc < b.sc ? -1 : a.sc > b.sc ? 1 : 0 : 0; }; t.rt = function (a, b) { return a instanceof vs && b instanceof vs && a !== b ? a.Sb < b.Sb ? -1 : a.Sb > b.Sb || a.l < b.l ? 1 : a.l > b.l || a.Sc < b.Sc ? -1 : a.Sc > b.Sc ? 1 : a.sc < b.sc ? -1 : a.sc > b.sc ? 1 : 0 : 0; }; t.w = function (a, b) { a -= b; return -1 < a && 1 > a; }; t.Wi = function (a, b, c, d) { var e = a.length, f = d - c; if (!(1 >= f)) if (((0 > c || c >= e - 1) && A('not in range 0 <= from < length: ' + c), 2 === f)) (d = a[c]), (e = a[c + 1]), 0 < b(d, e) && ((a[c] = e), (a[c + 1] = d)); else if (0 === c) if (d >= e) a.sort(b); else for (c = a.slice(0, d), c.sort(b), b = 0; b < d; b++) a[b] = c[b]; else if (d >= e) for (d = a.slice(c), d.sort(b), b = c; b < e; b++) a[b] = d[b - c]; else for (e = a.slice(c, d), e.sort(b), b = c; b < d; b++) a[b] = e[b - c]; }; function Lr(a, b) { var c = a.fc[b]; if (c >= a.qe.length) { var d = []; for (var e = 0; e < a.qe.length; e++) d[e] = a.qe[e]; a.qe = d; } void 0 === a.qe[c] || null === a.qe[c] ? (d = []) : ((d = a.qe[c]), (a.qe[c] = null)); a = a.Ao[b]; for (b = 0; b < a.length; b++) (c = a[b]), (d[c.index] = c); return d; } function Mr(a, b, c) { a.qe[a.fc[b]] = c; } pa.Object.defineProperties(Cr.prototype, { layerSpacing: { get: function () { return this.ke; }, set: function (a) { this.ke !== a && 0 <= a && ((this.ke = a), this.B()); }, }, columnSpacing: { get: function () { return this.Wb; }, set: function (a) { this.Wb !== a && 0 < a && ((this.Wb = a), this.B()); }, }, direction: { get: function () { return this.L; }, set: function (a) { this.L !== a && (0 === a || 90 === a || 180 === a || 270 === a ? ((this.L = a), this.B()) : A('LayeredDigraphLayout.direction must be 0, 90, 180, or 270')); }, }, cycleRemoveOption: { get: function () { return this.Lk; }, set: function (a) { this.Lk === a || (a !== Wr && a !== Dr && a !== Ir) || ((this.Lk = a), this.B()); }, }, layeringOption: { get: function () { return this.ll; }, set: function (a) { this.ll === a || (a !== Er && a !== as && a !== cs) || ((this.ll = a), this.B()); }, }, initializeOption: { get: function () { return this.bl; }, set: function (a) { this.bl === a || (a !== Fr && a !== is && a !== gs) || ((this.bl = a), this.B()); }, }, iterations: { get: function () { return this.qj; }, set: function (a) { this.qj !== a && 0 <= a && ((this.qj = a), this.B()); }, }, aggressiveOption: { get: function () { return this.xk; }, set: function (a) { this.xk === a || (a !== ms && a !== Gr && a !== ns) || ((this.xk = a), this.B()); }, }, packOption: { get: function () { return this.bg; }, set: function (a) { this.bg !== a && 0 <= a && 8 > a && ((this.bg = a), this.B()); }, }, setsPortSpots: { get: function () { return this.$e; }, set: function (a) { this.$e !== a && ((this.$e = a), this.B()); }, }, linkSpacing: { get: function () { return this.eo; }, set: function (a) { this.eo !== a && 0 <= a && ((this.eo = a), this.B()); }, }, maxLayer: { get: function () { return this.ya; }, }, maxIndex: { get: function () { return this.Pr; }, }, maxColumn: { get: function () { return this.Ha; }, }, minIndexLayer: { get: function () { return this.po; }, }, maxIndexLayer: { get: function () { return this.od; }, }, }); var Dr = new D(Cr, 'CycleDepthFirst', 0), Wr = new D(Cr, 'CycleGreedy', 1), Ir = new D(Cr, 'CycleFromLayers', 2), Er = new D(Cr, 'LayerOptimalLinkLength', 0), as = new D(Cr, 'LayerLongestPathSink', 1), cs = new D(Cr, 'LayerLongestPathSource', 2), Fr = new D(Cr, 'InitDepthFirstOut', 0), is = new D(Cr, 'InitDepthFirstIn', 1), gs = new D(Cr, 'InitNaive', 2), ms = new D(Cr, 'AggressiveNone', 0), Gr = new D(Cr, 'AggressiveLess', 1), ns = new D(Cr, 'AggressiveMore', 2); Cr.className = 'LayeredDigraphLayout'; Cr.CycleDepthFirst = Dr; Cr.CycleGreedy = Wr; Cr.CycleFromLayers = Ir; Cr.LayerOptimalLinkLength = Er; Cr.LayerLongestPathSink = as; Cr.LayerLongestPathSource = cs; Cr.InitDepthFirstOut = Fr; Cr.InitDepthFirstIn = is; Cr.InitNaive = gs; Cr.AggressiveNone = ms; Cr.AggressiveLess = Gr; Cr.AggressiveMore = ns; Cr.PackNone = 0; Cr.PackExpand = 1; Cr.PackStraighten = 2; Cr.PackMedian = 4; Cr.PackAll = 7; function vs() { this.index = this.sc = this.Sc = this.Sb = this.first = this.layer = 0; this.link = null; this.l = 0; } vs.className = 'SegInfo'; function Hr(a) { xp.call(this, a); } oa(Hr, xp); Hr.prototype.createVertex = function () { return new ws(this); }; Hr.prototype.createEdge = function () { return new xs(this); }; Hr.className = 'LayeredDigraphNetwork'; function ws(a) { Ap.call(this, a); this.Sa = this.Fg = this.gi = -1; this.K = NaN; this.ba = null; this.valid = !1; this.finish = this.Xl = NaN; this.Qj = 0; this.qv = this.rv = null; } oa(ws, Ap); pa.Object.defineProperties(ws.prototype, { layer: { get: function () { return this.gi; }, set: function (a) { this.gi !== a && (this.gi = a); }, }, column: { get: function () { return this.Fg; }, set: function (a) { this.Fg !== a && (this.Fg = a); }, }, index: { get: function () { return this.Sa; }, set: function (a) { this.Sa !== a && (this.Sa = a); }, }, component: { get: function () { return this.K; }, set: function (a) { this.K !== a && (this.K = a); }, }, near: { get: function () { return this.ba; }, set: function (a) { this.ba !== a && (this.ba = a); }, }, }); ws.className = 'LayeredDigraphVertex'; function xs(a) { Bp.call(this, a); this.l = this.Ma = this.Ub = !1; this.La = this.K = NaN; this.ba = this.u = 0; } oa(xs, Bp); pa.Object.defineProperties(xs.prototype, { valid: { get: function () { return this.Ub; }, set: function (a) { this.Ub !== a && (this.Ub = a); }, }, rev: { get: function () { return this.Ma; }, set: function (a) { this.Ma !== a && (this.Ma = a); }, }, forest: { get: function () { return this.l; }, set: function (a) { this.l !== a && (this.l = a); }, }, portFromPos: { get: function () { return this.K; }, set: function (a) { this.K !== a && (this.K = a); }, }, portToPos: { get: function () { return this.La; }, set: function (a) { this.La !== a && (this.La = a); }, }, portFromColOffset: { get: function () { return this.u; }, set: function (a) { this.u !== a && (this.u = a); }, }, portToColOffset: { get: function () { return this.ba; }, set: function (a) { this.ba !== a && (this.ba = a); }, }, }); xs.className = 'LayeredDigraphEdge'; function ys() { yi.call(this); this.Fb = new F(); this.Oo = zs; this.Zc = As; this.Fp = Bs; this.Nr = Cs; this.hw = []; this.Xc = !0; this.Ab = Ds; this.wd = new M(10, 10).freeze(); var a = new Es(this); this.U = new Fs(a); this.V = new Fs(a); this.xu = []; } oa(ys, yi); ys.prototype.cloneProtected = function (a) { yi.prototype.cloneProtected.call(this, a); a.Oo = this.Oo; a.Fp = this.Fp; a.Nr = this.Nr; a.Xc = this.Xc; a.Ab = this.Ab; a.wd.assign(this.wd); a.U.copyInheritedPropertiesFrom(this.U); a.V.copyInheritedPropertiesFrom(this.V); }; ys.prototype.fb = function (a) { a.classType === ys ? 0 === a.name.indexOf('Alignment') ? (this.alignment = a) : 0 === a.name.indexOf('Arrangement') ? (this.arrangement = a) : 0 === a.name.indexOf('Compaction') ? (this.compaction = a) : 0 === a.name.indexOf('Path') ? (this.path = a) : 0 === a.name.indexOf('Sorting') ? (this.sorting = a) : 0 === a.name.indexOf('Style') ? (this.treeStyle = a) : A('Unknown enum value: ' + a) : yi.prototype.fb.call(this, a); }; ys.prototype.createNetwork = function () { return new Es(this); }; ys.prototype.makeNetwork = function (a) { function b(a) { if (a instanceof V) return !a.isLinkLabel && 'Comment' !== a.category; if (a instanceof S) { var b = a.fromNode; if (null === b || b.isLinkLabel || 'Comment' === b.category) return !1; a = a.toNode; return null === a || a.isLinkLabel || 'Comment' === a.category ? !1 : !0; } return !1; } var c = this.createNetwork(); a instanceof P ? (c.ng(a.nodes, !0, b), c.ng(a.links, !0, b)) : a instanceof ig ? c.ng(a.memberParts, !1, b) : c.ng(a.iterator, !1, b); return c; }; ys.prototype.doLayout = function (a) { null === this.network && (this.network = this.makeNetwork(a)); this.arrangement !== Gs && (this.arrangementOrigin = this.initialOrigin(this.arrangementOrigin)); var b = this.diagram; null === b && a instanceof P && (b = a); this.path === zs && null !== b ? (this.Zc = b.isTreePathToChildren ? As : Hs) : (this.Zc = this.path === zs ? As : this.path); if (0 < this.network.vertexes.count) { this.network.Sp(); for (a = this.network.vertexes.iterator; a.next(); ) (b = a.value), (b.initialized = !1), (b.level = 0), (b.parent = null), (b.children = []); if (0 < this.Fb.count) { a = new F(); for (b = this.Fb.iterator; b.next(); ) { var c = b.value; c instanceof V ? ((c = this.network.Ki(c)), null !== c && a.add(c)) : c instanceof Fs && a.add(c); } this.Fb = a; } 0 === this.Fb.count && this.findRoots(); for (a = this.Fb.copy().iterator; a.next(); ) (b = a.value), b.initialized || ((b.initialized = !0), Is(this, b)); b = this.network.vertexes; for (a = null; (a = Js(b)), 0 < a.count; ) (b = Ks(this, a)), null !== b && this.Fb.add(b), (b.initialized = !0), Is(this, b), (b = a); for (a = this.Fb.iterator; a.next(); ) (b = a.value), b instanceof Fs && Ls(this, b); for (a = this.Fb.iterator; a.next(); ) (b = a.value), b instanceof Fs && Ms(this, b); for (a = this.Fb.iterator; a.next(); ) (b = a.value), b instanceof Fs && Ns(this, b); this.Iu(); if (this.layerStyle === Os) { a = []; for (b = this.network.vertexes.iterator; b.next(); ) { c = b.value; var d = c.parent; null === d && (d = c); d = 0 === d.angle || 180 === d.angle; var e = a[c.level]; void 0 === e && (e = 0); a[c.level] = Math.max(e, d ? c.width : c.height); } for (b = 0; b < a.length; b++) void 0 === a[b] && (a[b] = 0); this.hw = a; for (b = this.network.vertexes.iterator; b.next(); ) (c = b.value), (d = c.parent), null === d && (d = c), 0 === d.angle || 180 === d.angle ? (180 === d.angle && (c.focusX += a[c.level] - c.width), (c.width = a[c.level])) : (270 === d.angle && (c.focusY += a[c.level] - c.height), (c.height = a[c.level])); } else if (this.layerStyle === Ps) for (a = this.network.vertexes.iterator; a.next(); ) { b = a.value; c = 0 === b.angle || 180 === b.angle; d = -1; for (e = 0; e < b.children.length; e++) { var f = b.children[e]; d = Math.max(d, c ? f.width : f.height); } if (0 <= d) for (e = 0; e < b.children.length; e++) (f = b.children[e]), c ? (180 === b.angle && (f.focusX += d - f.width), (f.width = d)) : (270 === b.angle && (f.focusY += d - f.height), (f.height = d)); } for (a = this.Fb.iterator; a.next(); ) (b = a.value), b instanceof Fs && this.layoutTree(b); this.arrangeTrees(); this.updateParts(); } this.network = null; this.Fb = new F(); this.isValidLayout = !0; }; function Js(a) { var b = new F(); for (a = a.iterator; a.next(); ) { var c = a.value; c.initialized || b.add(c); } return b; } ys.prototype.findRoots = function () { for (var a = this.network.vertexes, b = a.iterator; b.next(); ) { var c = b.value; switch (this.Zc) { case As: 0 === c.sourceEdges.count && this.Fb.add(c); break; case Hs: 0 === c.destinationEdges.count && this.Fb.add(c); break; default: A('Unhandled path value ' + this.Zc.toString()); } } 0 === this.Fb.count && ((a = Ks(this, a)), null !== a && this.Fb.add(a)); }; function Ks(a, b) { var c = 999999, d = null; for (b = b.iterator; b.next(); ) { var e = b.value; switch (a.Zc) { case As: e.sourceEdges.count < c && ((c = e.sourceEdges.count), (d = e)); break; case Hs: e.destinationEdges.count < c && ((c = e.destinationEdges.count), (d = e)); break; default: A('Unhandled path value ' + a.Zc.toString()); } } return d; } function Is(a, b) { if (null !== b) { switch (a.Zc) { case As: if (0 < b.destinationEdges.count) { for (var c = new E(), d = b.destinationVertexes; d.next(); ) { var e = d.value; Qs(a, b, e) && c.add(e); } 0 < c.count && (b.children = c.Na()); } break; case Hs: if (0 < b.sourceEdges.count) { c = new E(); for (d = b.sourceVertexes; d.next(); ) (e = d.value), Qs(a, b, e) && c.add(e); 0 < c.count && (b.children = c.Na()); } break; default: A('Unhandled path value' + a.Zc.toString()); } c = b.children; d = c.length; for (e = 0; e < d; e++) { var f = c[e]; f.initialized = !0; f.level = b.level + 1; f.parent = b; a.Fb.remove(f); } for (b = 0; b < d; b++) Is(a, c[b]); } } function Qs(a, b, c) { if (c.initialized) { if (null === b) var d = !1; else { for (d = b.parent; null !== d && d !== c; ) d = d.parent; d = d === c; } if (d || c.level > b.level) return !1; a.removeChild(c.parent, c); } return !0; } ys.prototype.removeChild = function (a, b) { if (null !== a && null !== b) { for (var c = a.children, d = 0, e = 0; e < c.length; e++) c[e] === b && d++; if (0 < d) { d = Array(c.length - d); for (var f = (e = 0); f < c.length; f++) c[f] !== b && (d[e++] = c[f]); a.children = d; } } }; function Ls(a, b) { if (null !== b) { a.initializeTreeVertexValues(b); b.alignment === Rs && a.sortTreeVertexChildren(b); for (var c = 0, d = b.childrenCount, e = 0, f = b.children, g = f.length, h = 0; h < g; h++) { var k = f[h]; Ls(a, k); c += k.descendantCount + 1; d = Math.max(d, k.maxChildrenCount); e = Math.max(e, k.maxGenerationCount); } b.descendantCount = c; b.maxChildrenCount = d; b.maxGenerationCount = 0 < d ? e + 1 : 0; } } function Ss(a, b) { switch (a.Fp) { default: case Bs: return null !== b.parent ? b.parent : a.U; case Ts: return null === b.parent ? a.U : null === b.parent.parent ? a.V : b.parent; case Us: return null !== b.parent ? (null !== b.parent.parent ? b.parent.parent : a.V) : a.U; case Vs: var c = !0; if (0 === b.childrenCount) c = !1; else for (var d = b.children, e = d.length, f = 0; f < e; f++) if (0 < d[f].childrenCount) { c = !1; break; } return c && null !== b.parent ? a.V : null !== b.parent ? b.parent : a.U; } } ys.prototype.initializeTreeVertexValues = function (a) { a.copyInheritedPropertiesFrom(Ss(this, a)); if (null !== a.parent && a.parent.alignment === Rs) { for (var b = a.angle, c = a.parent.children, d = 0; d < c.length && a !== c[d]; ) d++; 0 === d % 2 ? d !== c.length - 1 && (b = 90 === b ? 180 : 180 === b ? 270 : 270 === b ? 180 : 270) : (b = 90 === b ? 0 : 180 === b ? 90 : 270 === b ? 0 : 90); a.angle = b; } a.initialized = !0; }; function Ms(a, b) { if (null !== b) { a.assignTreeVertexValues(b); b = b.children; for (var c = b.length, d = 0; d < c; d++) Ms(a, b[d]); } } ys.prototype.assignTreeVertexValues = function () {}; function Ns(a, b) { if (null !== b) { b.alignment !== Rs && a.sortTreeVertexChildren(b); b = b.children; for (var c = b.length, d = 0; d < c; d++) Ns(a, b[d]); } } ys.prototype.sortTreeVertexChildren = function (a) { switch (a.sorting) { case Ws: break; case Xs: a.children.reverse(); break; case Ys: a.children.sort(a.comparer); break; case Zs: a.children.sort(a.comparer); a.children.reverse(); break; default: A('Unhandled sorting value ' + a.sorting.toString()); } }; ys.prototype.Iu = function () { if (this.comments) for (var a = this.network.vertexes.iterator; a.next(); ) this.addComments(a.value); }; ys.prototype.addComments = function (a) { var b = a.angle, c = a.parent, d = 0; var e = !1; null !== c && ((d = c.angle), (e = c.alignment), (e = $s(e))); b = 90 === b || 270 === b; d = 90 === d || 270 === d; c = 0 === a.childrenCount; var f = 0, g = 0, h = 0, k = a.commentSpacing; if (null !== a.node) for (var l = a.node.Yu(); l.next(); ) { var m = l.value; 'Comment' === m.category && m.canLayout() && (null === a.comments && (a.comments = []), a.comments.push(m), m.$b(), (m = m.measuredBounds), (b && !c) || (!e && !d && c) || (e && d && c) ? ((f = Math.max(f, m.width)), (g += m.height + Math.abs(h))) : ((f += m.width + Math.abs(h)), (g = Math.max(g, m.height))), (h = k)); } null !== a.comments && ((b && !c) || (!e && !d && c) || (e && d && c) ? ((f += Math.abs(a.commentMargin)), (g = Math.max(0, g - a.height))) : ((g += Math.abs(a.commentMargin)), (f = Math.max(0, f - a.width))), (e = N.allocAt(0, 0, a.bounds.width + f, a.bounds.height + g)), (a.bounds = e), N.free(e)); }; function $s(a) { return a === at || a === Rs || a === bt || a === ct; } function dt(a) { return a === at || a === Rs; } function et(a) { var b = a.parent; if (null !== b) { var c = b.alignment; if ($s(c)) { if (dt(c)) { b = b.children; for (c = 0; c < b.length && a !== b[c]; ) c++; return 0 === c % 2; } if (c === bt) return !0; } } return !1; } ys.prototype.layoutComments = function (a) { if (null !== a.comments) { var b = a.node.measuredBounds, c = a.parent, d = a.angle, e = 0; var f = !1; null !== c && ((e = c.angle), (f = c.alignment), (f = $s(f))); d = 90 === d || 270 === d; c = 90 === e || 270 === e; for ( var g = 0 === a.childrenCount, h = et(a), k = 0, l = a.comments, m = l.length, n = G.alloc(), p = 0; p < m; p++ ) { var q = l[p], r = q.measuredBounds; if ((d && !g) || (!f && !c && g) || (f && c && g)) { if ((135 < e && !f) || (c && h)) if (0 <= a.commentMargin) for ( n.h(a.bounds.x - a.commentMargin - r.width, a.bounds.y + k), q.move(n), q = q.sd(); q.next(); ) { var u = q.value; u.fromSpot = Kd; u.toSpot = Sd; } else for ( n.h(a.bounds.x + 2 * a.focus.x - a.commentMargin, a.bounds.y + k), q.move(n), q = q.sd(); q.next(); ) (u = q.value), (u.fromSpot = Sd), (u.toSpot = Kd); else if (0 <= a.commentMargin) for ( n.h(a.bounds.x + 2 * a.focus.x + a.commentMargin, a.bounds.y + k), q.move(n), q = q.sd(); q.next(); ) (u = q.value), (u.fromSpot = Sd), (u.toSpot = Kd); else for ( n.h(a.bounds.x + a.commentMargin - r.width, a.bounds.y + k), q.move(n), q = q.sd(); q.next(); ) (u = q.value), (u.fromSpot = Kd), (u.toSpot = Sd); k = 0 <= a.commentSpacing ? k + (r.height + a.commentSpacing) : k + (a.commentSpacing - r.height); } else { if ((135 < e && !f) || (!c && h)) if (0 <= a.commentMargin) for ( n.h(a.bounds.x + k, a.bounds.y - a.commentMargin - r.height), q.move(n), q = q.sd(); q.next(); ) (u = q.value), (u.fromSpot = Jd), (u.toSpot = Td); else for ( n.h(a.bounds.x + k, a.bounds.y + 2 * a.focus.y - a.commentMargin), q.move(n), q = q.sd(); q.next(); ) (u = q.value), (u.fromSpot = Td), (u.toSpot = Jd); else if (0 <= a.commentMargin) for ( n.h(a.bounds.x + k, a.bounds.y + 2 * a.focus.y + a.commentMargin), q.move(n), q = q.sd(); q.next(); ) (u = q.value), (u.fromSpot = Td), (u.toSpot = Jd); else for ( n.h(a.bounds.x + k, a.bounds.y + a.commentMargin - r.height), q.move(n), q = q.sd(); q.next(); ) (u = q.value), (u.fromSpot = Jd), (u.toSpot = Td); k = 0 <= a.commentSpacing ? k + (r.width + a.commentSpacing) : k + (a.commentSpacing - r.width); } } G.free(n); b = k - a.commentSpacing - (d ? b.height : b.width); if (this.Zc === As) for (a = a.destinationEdges; a.next(); ) (e = a.value.link), null === e || e.isAvoiding || (e.fromEndSegmentLength = 0 < b ? b : NaN); else for (a = a.sourceEdges; a.next(); ) (e = a.value.link), null === e || e.isAvoiding || (e.toEndSegmentLength = 0 < b ? b : NaN); } }; ys.prototype.layoutTree = function (a) { if (null !== a) { for (var b = a.children, c = b.length, d = 0; d < c; d++) this.layoutTree(b[d]); switch (a.compaction) { case ft: gt(this, a); break; case ht: if (a.alignment === Rs) gt(this, a); else if (0 === a.childrenCount) (d = a.parent), (c = !1), (b = 0), null !== d && ((b = d.angle), (c = d.alignment), (c = $s(c))), (d = et(a)), a.T.h(0, 0), a.ua.h(a.width, a.height), null === a.parent || null === a.comments || (((180 !== b && 270 !== b) || c) && !d) ? a.ia.h(0, 0) : (180 === b && !c) || ((90 === b || 270 === b) && d) ? a.ia.h(a.width - 2 * a.focus.x, 0) : a.ia.h(0, a.height - 2 * a.focus.y), (a.fq = null), (a.rq = null); else { var e = it(a); b = 90 === e || 270 === e; var f = 0, g = a.children, h = g.length; for (c = 0; c < h; c++) (d = g[c]), (f = Math.max(f, b ? d.ua.width : d.ua.height)); var k = a.alignment, l = k === jt, m = $s(k), n = Math.max(0, a.breadthLimit); c = kt(a); var p = a.nodeSpacing, q = lt(a), r = a.rowSpacing, u = 0; if (k === pt || l || a.tm || (a.um && 1 === a.maxGenerationCount)) u = Math.max(0, a.rowIndent); d = a.width; var x = a.height, v = 0, z = 0, y = 0, B = null, C = null, I = 0, L = 0, J = 0, U = 0, R = 0, da = 0, ja = 0, K = 0; m && !dt(k) && 135 < e && g.reverse(); if (dt(k)) if (1 < h) for (var Q = 0; Q < h; Q++) 0 === Q % 2 && Q !== h - 1 && (K = Math.max(K, b ? g[Q].ua.width : g[Q].ua.height)); else 1 === h && (K = b ? g[0].ua.width : g[0].ua.height); if (m) { switch (k) { case at: z = 135 > e ? qt(a, g, K, v, z) : rt(a, g, K, v, z); K = z.x; v = z.width; z = z.height; break; case bt: for (B = 0; B < h; B++) (C = g[B]), (n = C.ua), (y = 0 === da ? 0 : r), b ? (C.T.h(f - n.width, U + y), (v = Math.max(v, n.width)), (z = Math.max(z, U + y + n.height)), (U += y + n.height)) : (C.T.h(J + y, f - n.height), (v = Math.max(v, J + y + n.width)), (z = Math.max(z, n.height)), (J += y + n.width)), da++; break; case ct: for (B = 0; B < h; B++) (C = g[B]), (f = C.ua), (n = 0 === da ? 0 : r), b ? (C.T.h(p / 2 + a.focus.x, U + n), (v = Math.max(v, f.width)), (z = Math.max(z, U + n + f.height)), (U += n + f.height)) : (C.T.h(J + n, p / 2 + a.focus.y), (v = Math.max(v, J + n + f.width)), (z = Math.max(z, f.height)), (J += n + f.width)), da++; } B = st(this, 2); C = st(this, 2); b ? (B[0].h(0, 0), B[1].h(0, z), C[0].h(v, 0)) : (B[0].h(0, 0), B[1].h(v, 0), C[0].h(0, z)); C[1].h(v, z); } else for (Q = 0; Q < h; Q++) { var xa = g[Q], jb = xa.ua; if (b) { 0 < n && 0 < da && J + p + jb.width > n && (J < f && tt(a, k, f - J, 0, ja, Q - 1), R++, (da = 0), (ja = Q), (y = z), (J = 0), (U = 135 < e ? -z - r : z + r)); ut(this, xa, 0, U); var Ha = 0; if (0 === da) { if ( ((B = xa.fq), (C = xa.rq), (I = jb.width), (L = jb.height), null === B || null === C || e !== it(xa)) ) (B = st(this, 2)), (C = st(this, 2)), B[0].h(0, 0), B[1].h(0, L), C[0].h(I, 0), C[1].h(I, L); } else { var Da = Ka(); L = vt(this, a, xa, B, C, I, L, Da); Ha = L.x; B = Da[0]; C = Da[1]; I = L.width; L = L.height; Oa(Da); J < jb.width && 0 > Ha && (wt(a, -Ha, 0, ja, Q - 1), xt(B, -Ha, 0), xt(C, -Ha, 0), (Ha = 0)); } xa.T.h(Ha, U); v = Math.max(v, I); z = Math.max(z, y + (0 === R ? 0 : r) + jb.height); J = I; } else { 0 < n && 0 < da && U + p + jb.height > n && (U < f && tt(a, k, 0, f - U, ja, Q - 1), R++, (da = 0), (ja = Q), (y = v), (U = 0), (J = 135 < e ? -v - r : v + r)); ut(this, xa, J, 0); Ha = 0; if (0 === da) { if ( ((B = xa.fq), (C = xa.rq), (I = jb.width), (L = jb.height), null === B || null === C || e !== it(xa)) ) (B = st(this, 2)), (C = st(this, 2)), B[0].h(0, 0), B[1].h(I, 0), C[0].h(0, L), C[1].h(I, L); } else (Da = Ka()), (L = vt(this, a, xa, B, C, I, L, Da)), (Ha = L.x), (B = Da[0]), (C = Da[1]), (I = L.width), (L = L.height), Oa(Da), U < jb.height && 0 > Ha && (wt(a, 0, -Ha, ja, Q - 1), xt(B, 0, -Ha), xt(C, 0, -Ha), (Ha = 0)); xa.T.h(J, Ha); z = Math.max(z, L); v = Math.max(v, y + (0 === R ? 0 : r) + jb.width); U = L; } da++; } 0 < R && (b ? ((z += Math.max(0, c)), J < v && tt(a, k, v - J, 0, ja, h - 1), 0 < u && (l || wt(a, u, 0, 0, h - 1), (v += u))) : ((v += Math.max(0, c)), U < z && tt(a, k, 0, z - U, ja, h - 1), 0 < u && (l || wt(a, 0, u, 0, h - 1), (z += u)))); u = l = 0; switch (k) { case yt: b ? (l += v / 2 - a.focus.x - q / 2) : (u += z / 2 - a.focus.y - q / 2); break; case zt: 0 < R ? b ? (l += v / 2 - a.focus.x - q / 2) : (u += z / 2 - a.focus.y - q / 2) : b ? ((K = g[0].T.x + g[0].ia.x), (l += K + (g[h - 1].T.x + g[h - 1].ia.x + 2 * g[h - 1].focus.x - K) / 2 - a.focus.x - q / 2)) : ((K = g[0].T.y + g[0].ia.y), (u += K + (g[h - 1].T.y + g[h - 1].ia.y + 2 * g[h - 1].focus.y - K) / 2 - a.focus.y - q / 2)); break; case pt: b ? ((l -= q), (v += q)) : ((u -= q), (z += q)); break; case jt: b ? ((l += v - a.width + q), (v += q)) : ((u += z - a.height + q), (z += q)); break; case at: b ? 1 < h ? (l += K + p / 2 - a.focus.x) : (l += g[0].focus.x - a.focus.x + g[0].ia.x) : 1 < h ? (u += K + p / 2 - a.focus.y) : (u += g[0].focus.y - a.focus.y + g[0].ia.y); break; case bt: b ? (l += v + p / 2 - a.focus.x) : (u += z + p / 2 - a.focus.y); break; case ct: break; default: A('Unhandled alignment value ' + k.toString()); } for (q = 0; q < h; q++) (K = g[q]), b ? K.T.h( K.T.x + K.ia.x - l, K.T.y + (135 < e ? (m ? -z : -K.ua.height) + K.ia.y - c : x + c + K.ia.y), ) : K.T.h( K.T.x + (135 < e ? (m ? -v : -K.ua.width) + K.ia.x - c : d + c + K.ia.x), K.T.y + K.ia.y - u, ); h = g = 0; m ? b ? ((v = At(a, v, l)), 0 > l && (l = 0), 135 < e && (u += z + c), (z += x + c), k === ct && (g += p / 2 + a.focus.x), (h += x + c)) : (135 < e && (l += v + c), (v += d + c), (z = Bt(a, z, u)), 0 > u && (u = 0), k === ct && (h += p / 2 + a.focus.y), (g += d + c)) : b ? (null === a.comments ? d > v && ((v = Ct(k, d - v, 0)), (g = v.x), (h = v.y), (v = d), (l = 0)) : (v = At(a, v, l)), 0 > l && ((g -= l), (l = 0)), 135 < e && (u += z + c), (z = Math.max(Math.max(z, x), z + x + c)), (h += x + c)) : (135 < e && (l += v + c), (v = Math.max(Math.max(v, d), v + d + c)), null === a.comments ? x > z && ((z = Ct(k, 0, x - z)), (g = z.x), (h = z.y), (z = x), (u = 0)) : (z = Bt(a, z, u)), 0 > u && ((h -= u), (u = 0)), (g += d + c)); if (0 < R) (e = st(this, 4)), (R = st(this, 4)), b ? (e[2].h(0, x + c), e[3].h(e[2].x, z), R[2].h(v, e[2].y), R[3].h(R[2].x, e[3].y)) : (e[2].h(d + c, 0), e[3].h(v, e[2].y), R[2].h(e[2].x, z), R[3].h(e[3].x, R[2].y)); else { e = st(this, B.length + 2); R = st(this, C.length + 2); for (k = 0; k < B.length; k++) (m = B[k]), e[k + 2].h(m.x + g, m.y + h); for (k = 0; k < C.length; k++) (m = C[k]), R[k + 2].h(m.x + g, m.y + h); } b ? (e[0].h(l, 0), e[1].h(e[0].x, x), e[2].y < e[1].y && (e[2].x > e[0].x ? e[2].assign(e[1]) : e[1].assign(e[2])), e[3].y < e[2].y && (e[3].x > e[0].x ? e[3].assign(e[2]) : e[2].assign(e[3])), R[0].h(l + d, 0), R[1].h(R[0].x, x), R[2].y < R[1].y && (R[2].x < R[0].x ? R[2].assign(R[1]) : R[1].assign(R[2])), R[3].y < R[2].y && (R[3].x < R[0].x ? R[3].assign(R[2]) : R[2].assign(R[3])), (e[2].y -= c / 2), (R[2].y -= c / 2)) : (e[0].h(0, u), e[1].h(d, e[0].y), e[2].x < e[1].x && (e[2].y > e[0].y ? e[2].assign(e[1]) : e[1].assign(e[2])), e[3].x < e[2].x && (e[3].y > e[0].y ? e[3].assign(e[2]) : e[2].assign(e[3])), R[0].h(0, u + x), R[1].h(d, R[0].y), R[2].x < R[1].x && (R[2].y < R[0].y ? R[2].assign(R[1]) : R[1].assign(R[2])), R[3].x < R[2].x && (R[3].y < R[0].y ? R[3].assign(R[2]) : R[2].assign(R[3])), (e[2].x -= c / 2), (R[2].x -= c / 2)); Dt(this, B); Dt(this, C); a.fq = e; a.rq = R; a.ia.h(l, u); a.ua.h(v, z); } break; default: A('Unhandled compaction value ' + a.compaction.toString()); } } }; function gt(a, b) { if (0 === b.childrenCount) { var c = !1, d = 0; null !== b.parent && ((d = b.parent.angle), (c = b.parent.alignment), (c = $s(c))); var e = et(b); b.T.h(0, 0); b.ua.h(b.width, b.height); null === b.parent || null === b.comments || (((180 !== d && 270 !== d) || c) && !e) ? b.ia.h(0, 0) : (180 === d && !c) || ((90 === d || 270 === d) && e) ? b.ia.h(b.width - 2 * b.focus.x, 0) : b.ia.h(0, b.height - 2 * b.focus.y); } else { d = it(b); c = 90 === d || 270 === d; var f = 0; e = b.children; for (var g = e.length, h = 0; h < g; h++) { var k = e[h]; f = Math.max(f, c ? k.ua.width : k.ua.height); } var l = b.alignment, m = l === pt, n = l === jt; h = $s(l); var p = Math.max(0, b.breadthLimit); k = kt(b); var q = b.nodeSpacing, r = lt(b), u = m || n ? 0 : r / 2, x = b.rowSpacing, v = 0; if (m || n || b.tm || (b.um && 1 === b.maxGenerationCount)) v = Math.max(0, b.rowIndent); m = b.width; var z = b.height, y = 0, B = 0, C = 0, I = 0, L = 0, J = 0, U = 0, R = 0, da = 0; h && !dt(l) && 135 < d && e.reverse(); if (dt(l)) if (1 < g) for (var ja = 0; ja < g; ja++) { var K = e[ja], Q = K.ua; 0 === ja % 2 && ja !== g - 1 && (da = Math.max(da, (c ? Q.width : Q.height) + Et(K) - q)); } else 1 === g && (da = c ? e[0].ua.width : e[0].ua.height); if (h) switch (l) { case at: case Rs: B = 135 > d ? qt(b, e, da, y, B) : rt(b, e, da, y, B); da = B.x; y = B.width; B = B.height; break; case bt: for (a = 0; a < g; a++) (p = e[a]), (u = p.ua), (C = 0 === U ? 0 : x), c ? (p.T.h(f - u.width, L + C), (y = Math.max(y, u.width)), (B = Math.max(B, L + C + u.height)), (L += C + u.height)) : (p.T.h(I + C, f - u.height), (y = Math.max(y, I + C + u.width)), (B = Math.max(B, u.height)), (I += C + u.width)), U++; break; case ct: for (f = 0; f < g; f++) (a = e[f]), (p = a.ua), (u = 0 === U ? 0 : x), c ? (a.T.h(q / 2 + b.focus.x, L + u), (y = Math.max(y, p.width)), (B = Math.max(B, L + u + p.height)), (L += u + p.height)) : (a.T.h(I + u, q / 2 + b.focus.y), (y = Math.max(y, I + u + p.width)), (B = Math.max(B, p.height)), (I += u + p.width)), U++; } else for (ja = 0; ja < g; ja++) { K = e[ja]; Q = K.ua; if (c) { 0 < p && 0 < U && I + q + Q.width > p && (I < f && tt(b, l, f - I, 0, R, ja - 1), J++, (U = 0), (R = ja), (C = B), (I = 0), (L = 135 < d ? -B - x : B + x)); var xa = 0 === U ? u : q; ut(a, K, 0, L); K.T.h(I + xa, L); y = Math.max(y, I + xa + Q.width); B = Math.max(B, C + (0 === J ? 0 : x) + Q.height); I += xa + Q.width; } else 0 < p && 0 < U && L + q + Q.height > p && (L < f && tt(b, l, 0, f - L, R, ja - 1), J++, (U = 0), (R = ja), (C = y), (L = 0), (I = 135 < d ? -y - x : y + x)), (xa = 0 === U ? u : q), ut(a, K, I, 0), K.T.h(I, L + xa), (B = Math.max(B, L + xa + Q.height)), (y = Math.max(y, C + (0 === J ? 0 : x) + Q.width)), (L += xa + Q.height); U++; } 0 < J && (c ? ((B += Math.max(0, k)), I < y && tt(b, l, y - I, 0, R, g - 1), 0 < v && (n || wt(b, v, 0, 0, g - 1), (y += v))) : ((y += Math.max(0, k)), L < B && tt(b, l, 0, B - L, R, g - 1), 0 < v && (n || wt(b, 0, v, 0, g - 1), (B += v)))); v = n = 0; switch (l) { case yt: c ? (n += y / 2 - b.focus.x - r / 2) : (v += B / 2 - b.focus.y - r / 2); break; case zt: 0 < J ? c ? (n += y / 2 - b.focus.x - r / 2) : (v += B / 2 - b.focus.y - r / 2) : c ? ((l = e[0].T.x + e[0].ia.x), (n += l + (e[g - 1].T.x + e[g - 1].ia.x + 2 * e[g - 1].focus.x - l) / 2 - b.focus.x - r / 2)) : ((l = e[0].T.y + e[0].ia.y), (v += l + (e[g - 1].T.y + e[g - 1].ia.y + 2 * e[g - 1].focus.y - l) / 2 - b.focus.y - r / 2)); break; case pt: c ? ((n -= r), (y += r)) : ((v -= r), (B += r)); break; case jt: c ? ((n += y - b.width + r), (y += r)) : ((v += B - b.height + r), (B += r)); break; case at: case Rs: c ? 1 < g ? (n += da + q / 2 - b.focus.x) : (n += e[0].focus.x - b.focus.x + e[0].ia.x) : 1 < g ? (v += da + q / 2 - b.focus.y) : (v += e[0].focus.y - b.focus.y + e[0].ia.y); break; case bt: c ? (n += y + q / 2 - b.focus.x) : (v += B + q / 2 - b.focus.y); break; case ct: break; default: A('Unhandled alignment value ' + l.toString()); } for (r = 0; r < g; r++) (l = e[r]), c ? l.T.h( l.T.x + l.ia.x - n, l.T.y + (135 < d ? (h ? -B : -l.ua.height) + l.ia.y - k : z + k + l.ia.y), ) : l.T.h( l.T.x + (135 < d ? (h ? -y : -l.ua.width) + l.ia.x - k : m + k + l.ia.x), l.T.y + l.ia.y - v, ); c ? ((y = At(b, y, n)), 0 > n && (n = 0), 135 < d && (v += B + k), (B += z + k)) : (135 < d && (n += y + k), (y += m + k), (B = Bt(b, B, v)), 0 > v && (v = 0)); b.ia.h(n, v); b.ua.h(y, B); } } function qt(a, b, c, d, e) { var f = b.length; if (0 === f) return new N(c, 0, d, e); if (1 === f) return (a = b[0]), (d = a.ua.width), (e = a.ua.height), new N(c, 0, d, e); for ( var g = a.nodeSpacing, h = a.rowSpacing, k = 90 === it(a), l = 0, m = 0, n = 0, p = 0; p < f; p++ ) if (!(0 !== p % 2 || (1 < f && p === f - 1))) { var q = b[p], r = q.ua, u = 0 === l ? 0 : h; if (k) { var x = Et(q) - g; q.T.h(c - (r.width + x), n + u); d = Math.max(d, r.width + x); e = Math.max(e, n + u + r.height); n += u + r.height; } else (x = Et(q) - g), q.T.h(m + u, c - (r.height + x)), (e = Math.max(e, r.height + x)), (d = Math.max(d, m + u + r.width)), (m += u + r.width); l++; } l = 0; q = m; p = n; k ? ((m = c + g), (n = 0)) : ((m = 0), (n = c + g)); for (r = 0; r < f; r++) if (0 !== r % 2) { u = b[r]; x = u.ua; var v = 0 === l ? 0 : h; if (k) { var z = Et(u) - g; u.T.h(m + z, n + v); d = Math.max(d, m + x.width + z); e = Math.max(e, n + v + x.height); n += v + x.height; } else (z = Et(u) - g), u.T.h(m + v, n + z), (d = Math.max(d, m + v + x.width)), (e = Math.max(e, n + x.height + z)), (m += v + x.width); l++; } 1 < f && 1 === f % 2 && ((b = b[f - 1]), (f = b.ua), (h = null === b.parent ? 0 : b.parent.rowSpacing), k ? (b.T.h(c + g / 2 - b.focus.x - b.ia.x, e + h), (k = c + g / 2 - b.focus.x - b.ia.x), (d = Math.max(d, k + f.width)), 0 > k && (d -= k), (e = Math.max(e, Math.max(p, n) + h + f.height)), 0 > b.T.x && (c = Ft(a, b.T.x, !1, c, g))) : (b.T.h(d + h, c + g / 2 - b.focus.y - b.ia.y), (d = Math.max(d, Math.max(q, m) + h + f.width)), (n = c + g / 2 - b.focus.y - b.ia.y), (e = Math.max(e, n + f.height)), 0 > n && (e -= n), 0 > b.T.y && (c = Ft(a, b.T.y, !0, c, g)))); return new N(c, 0, d, e); } function rt(a, b, c, d, e) { var f = b.length; if (0 === f) return new N(c, 0, d, e); if (1 === f) return (b = b[0]), (d = b.ua.width), (e = b.ua.height), new N(c, 0, d, e); for ( var g = a.nodeSpacing, h = a.rowSpacing, k = 270 === it(a), l = 0, m = 0, n = 0, p = 0; p < f; p++ ) if (!(0 !== p % 2 || (1 < f && p === f - 1))) { var q = b[p], r = q.ua, u = 0 === l ? 0 : h; if (k) { var x = Et(q) - g; n -= u + r.height; q.T.h(c - (r.width + x), n); d = Math.max(d, r.width + x); e = Math.max(e, Math.abs(n)); } else (x = Et(q) - g), (m -= u + r.width), q.T.h(m, c - (r.height + x)), (e = Math.max(e, r.height + x)), (d = Math.max(d, Math.abs(m))); l++; } l = 0; q = m; p = n; k ? ((m = c + g), (n = 0)) : ((m = 0), (n = c + g)); for (r = 0; r < f; r++) if (0 !== r % 2) { u = b[r]; x = u.ua; var v = 0 === l ? 0 : h; if (k) { var z = Et(u) - g; n -= v + x.height; u.T.h(m + z, n); d = Math.max(d, m + x.width + z); e = Math.max(e, Math.abs(n)); } else (z = Et(u) - g), (m -= v + x.width), u.T.h(m, n + z), (e = Math.max(e, n + x.height + z)), (d = Math.max(d, Math.abs(m))); l++; } 1 < f && 1 === f % 2 && ((h = b[f - 1]), (l = h.ua), (r = null === h.parent ? 0 : h.parent.rowSpacing), k ? (h.T.h(c + g / 2 - h.focus.x - h.ia.x, -e - l.height - r), (m = c + g / 2 - h.focus.x - h.ia.x), (d = Math.max(d, m + l.width)), 0 > m && (d -= m), (e = Math.max(e, Math.abs(Math.min(p, n)) + r + l.height)), 0 > h.T.x && (c = Ft(a, h.T.x, !1, c, g))) : (h.T.h(-d - l.width - r, c + g / 2 - h.focus.y - h.ia.y), (d = Math.max(d, Math.abs(Math.min(q, m)) + r + l.width)), (n = c + g / 2 - h.focus.y - h.ia.y), (e = Math.max(e, n + l.height)), 0 > n && (e -= n), 0 > h.T.y && (c = Ft(a, h.T.y, !0, c, g)))); for (a = 0; a < f; a++) (g = b[a]), k ? g.T.h(g.T.x, g.T.y + e) : g.T.h(g.T.x + d, g.T.y); return new N(c, 0, d, e); } function Et(a) { return null === a.parent ? 0 : a.parent.nodeSpacing; } function Ft(a, b, c, d, e) { a = a.children; for (var f = a.length, g = 0; g < f; g++) c ? a[g].T.h(a[g].T.x, a[g].T.y - b) : a[g].T.h(a[g].T.x - b, a[g].T.y); b = a[f - 1]; return Math.max(d, c ? b.ia.y + b.focus.y - e / 2 : b.ia.x + b.focus.x - e / 2); } function At(a, b, c) { switch (a.alignment) { case zt: case yt: return c + a.width > b && (b = c + a.width), 0 > c && (b -= c), b; case pt: return a.width > b ? a.width : b; case jt: return 2 * a.focus.x > b ? a.width : b + a.width - 2 * a.focus.x; case at: case Rs: return Math.max(a.width, Math.max(b, c + a.width) - Math.min(0, c)); case bt: return a.width - a.focus.x + a.nodeSpacing / 2 + b; case ct: return Math.max(a.width, a.focus.x + a.nodeSpacing / 2 + b); default: return b; } } function Bt(a, b, c) { switch (a.alignment) { case zt: case yt: return c + a.height > b && (b = c + a.height), 0 > c && (b -= c), b; case pt: return a.height > b ? a.height : b; case jt: return 2 * a.focus.y > b ? a.height : b + a.height - 2 * a.focus.y; case at: case Rs: return Math.max(a.height, Math.max(b, c + a.height) - Math.min(0, c)); case bt: return a.height - a.focus.y + a.nodeSpacing / 2 + b; case ct: return Math.max(a.height, a.focus.y + a.nodeSpacing / 2 + b); default: return b; } } function Ct(a, b, c) { switch (a) { case yt: b /= 2; c /= 2; break; case zt: b /= 2; c /= 2; break; case pt: c = b = 0; break; case jt: break; default: A('Unhandled alignment value ' + a.toString()); } return new G(b, c); } function tt(a, b, c, d, e, f) { b = Ct(b, c, d); wt(a, b.x, b.y, e, f); } function wt(a, b, c, d, e) { if (0 !== b || 0 !== c) for (a = a.children; d <= e; d++) { var f = a[d].T; f.x += b; f.y += c; } } function ut(a, b, c, d) { var e = b.parent; switch (a.Zc) { case As: for (a = b.sourceEdges; a.next(); ) (b = a.value), b.fromVertex === e && b.relativePoint.h(c, d); break; case Hs: for (a = b.destinationEdges; a.next(); ) (b = a.value), b.toVertex === e && b.relativePoint.h(c, d); break; default: A('Unhandled path value ' + a.Zc.toString()); } } function xt(a, b, c) { for (var d = 0; d < a.length; d++) { var e = a[d]; e.x += b; e.y += c; } } function vt(a, b, c, d, e, f, g, h) { var k = it(b), l = 90 === k || 270 === k, m = b.nodeSpacing; b = d; var n = e; d = f; var p = g, q = c.fq, r = c.rq; g = c.ua; var u = l ? Math.max(p, g.height) : Math.max(d, g.width); if (null === q || k !== it(c)) (q = st(a, 2)), (r = st(a, 2)), l ? (q[0].h(0, 0), q[1].h(0, g.height), r[0].h(g.width, 0), r[1].h(r[0].x, q[1].y)) : (q[0].h(0, 0), q[1].h(g.width, 0), r[0].h(0, g.height), r[1].h(q[1].x, r[0].y)); if (l) { p = 9999999; if (!(null === n || 2 > n.length || null === q || 2 > q.length)) for (e = c = 0; c < n.length && e < q.length; ) { f = n[c]; var x = q[e]; k = x.x; l = x.y; k += d; var v = f; c + 1 < n.length && (v = n[c + 1]); var z = x; x = z.x; z = z.y; e + 1 < q.length && ((z = q[e + 1]), (x = z.x), (z = z.y), (x += d)); var y = p; f.y === l ? (y = k - f.x) : f.y > l && f.y < z ? (y = k + ((f.y - l) / (z - l)) * (x - k) - f.x) : l > f.y && l < v.y && (y = k - (f.x + ((l - f.y) / (v.y - f.y)) * (v.x - f.x))); y < p && (p = y); v.y <= f.y ? c++ : z <= l ? e++ : (v.y <= z && c++, z <= v.y && e++); } p = d - p; p += m; c = q; e = p; if (null === b || 2 > b.length || null === c || 2 > c.length) d = null; else { m = st(a, b.length + c.length); for (d = f = k = 0; f < c.length && c[f].y < b[0].y; ) (l = c[f++]), m[d++].h(l.x + e, l.y); for (; k < b.length; ) (l = b[k++]), m[d++].h(l.x, l.y); for (k = b[b.length - 1].y; f < c.length && c[f].y <= k; ) f++; for (; f < c.length && c[f].y > k; ) (l = c[f++]), m[d++].h(l.x + e, l.y); c = st(a, d); for (k = 0; k < d; k++) c[k].assign(m[k]); Dt(a, m); d = c; } f = r; k = p; if (null === n || 2 > n.length || null === f || 2 > f.length) e = null; else { m = st(a, n.length + f.length); for (e = l = c = 0; c < n.length && n[c].y < f[0].y; ) (v = n[c++]), m[e++].h(v.x, v.y); for (; l < f.length; ) (v = f[l++]), m[e++].h(v.x + k, v.y); for (f = f[f.length - 1].y; c < n.length && n[c].y <= f; ) c++; for (; c < n.length && n[c].y > f; ) (k = n[c++]), m[e++].h(k.x, k.y); f = st(a, e); for (c = 0; c < e; c++) f[c].assign(m[c]); Dt(a, m); e = f; } f = Math.max(0, p) + g.width; g = u; Dt(a, b); Dt(a, q); Dt(a, n); Dt(a, r); h[0] = d; h[1] = e; return new N(p, 0, f, g); } d = 9999999; if (!(null === n || 2 > n.length || null === q || 2 > q.length)) for (e = c = 0; c < n.length && e < q.length; ) (f = n[c]), (x = q[e]), (k = x.x), (l = x.y), (l += p), (v = f), c + 1 < n.length && (v = n[c + 1]), (z = x), (x = z.x), (z = z.y), e + 1 < q.length && ((z = q[e + 1]), (x = z.x), (z = z.y), (z += p)), (y = d), f.x === k ? (y = l - f.y) : f.x > k && f.x < x ? (y = l + ((f.x - k) / (x - k)) * (z - l) - f.y) : k > f.x && k < v.x && (y = l - (f.y + ((k - f.x) / (v.x - f.x)) * (v.y - f.y))), y < d && (d = y), v.x <= f.x ? c++ : x <= k ? e++ : (v.x <= x && c++, x <= v.x && e++); p -= d; p += m; c = q; e = p; if (null === b || 2 > b.length || null === c || 2 > c.length) d = null; else { m = st(a, b.length + c.length); for (d = f = k = 0; f < c.length && c[f].x < b[0].x; ) (l = c[f++]), m[d++].h(l.x, l.y + e); for (; k < b.length; ) (l = b[k++]), m[d++].h(l.x, l.y); for (k = b[b.length - 1].x; f < c.length && c[f].x <= k; ) f++; for (; f < c.length && c[f].x > k; ) (l = c[f++]), m[d++].h(l.x, l.y + e); c = st(a, d); for (k = 0; k < d; k++) c[k].assign(m[k]); Dt(a, m); d = c; } f = r; k = p; if (null === n || 2 > n.length || null === f || 2 > f.length) e = null; else { m = st(a, n.length + f.length); for (e = l = c = 0; c < n.length && n[c].x < f[0].x; ) (v = n[c++]), m[e++].h(v.x, v.y); for (; l < f.length; ) (v = f[l++]), m[e++].h(v.x, v.y + k); for (f = f[f.length - 1].x; c < n.length && n[c].x <= f; ) c++; for (; c < n.length && n[c].x > f; ) (k = n[c++]), m[e++].h(k.x, k.y); f = st(a, e); for (c = 0; c < e; c++) f[c].assign(m[c]); Dt(a, m); e = f; } f = u; g = Math.max(0, p) + g.height; Dt(a, b); Dt(a, q); Dt(a, n); Dt(a, r); h[0] = d; h[1] = e; return new N(p, 0, f, g); } function st(a, b) { a = a.xu[b]; if (void 0 !== a && ((a = a.pop()), void 0 !== a)) return a; a = []; for (var c = 0; c < b; c++) a[c] = new G(); return a; } function Dt(a, b) { var c = b.length, d = a.xu[c]; void 0 === d && ((d = []), (a.xu[c] = d)); d.push(b); } ys.prototype.arrangeTrees = function () { if (this.Ab === Gs) for (var a = this.Fb.iterator; a.next(); ) { var b = a.value; if (b instanceof Fs) { var c = b.node; if (null !== c) { var d = c.position; c = d.x; d = d.y; isFinite(c) || (c = 0); isFinite(d) || (d = 0); Gt(this, b, c, d); } } } else { a = []; for (b = this.Fb.iterator; b.next(); ) (c = b.value), c instanceof Fs && a.push(c); switch (this.sorting) { case Ws: break; case Xs: a.reverse(); break; case Ys: a.sort(this.comparer); break; case Zs: a.sort(this.comparer); a.reverse(); break; default: A('Unhandled sorting value ' + this.sorting.toString()); } c = this.arrangementOrigin; b = c.x; c = c.y; for (d = 0; d < a.length; d++) { var e = a[d]; Gt(this, e, b + e.ia.x, c + e.ia.y); switch (this.Ab) { case Ds: c += e.ua.height + this.wd.height; break; case Ht: b += e.ua.width + this.wd.width; break; default: A('Unhandled arrangement value ' + this.Ab.toString()); } } } }; function Gt(a, b, c, d) { if (null !== b) { b.x = c; b.y = d; b = b.children; for (var e = b.length, f = 0; f < e; f++) { var g = b[f]; Gt(a, g, c + g.T.x, d + g.T.y); } } } ys.prototype.commitLayout = function () { this.Kv(); this.commitNodes(); this.Nu(); this.isRouting && this.commitLinks(); }; ys.prototype.commitNodes = function () { for (var a = this.network.vertexes.iterator; a.next(); ) a.value.commit(); for (a.reset(); a.next(); ) this.layoutComments(a.value); }; ys.prototype.Nu = function () { if (this.layerStyle === Os) { for (var a = this.hw, b = [], c = null, d = this.network.vertexes.iterator; d.next(); ) { var e = d.value; null === c ? (c = e.bounds.copy()) : c.Jc(e.bounds); var f = b[e.level]; void 0 === f ? (f = kt(e)) : (f = Math.max(f, kt(e))); b[e.level] = f; } for (d = 0; d < b.length; d++) void 0 === b[d] && (b[d] = 0); 90 === this.angle || 270 === this.angle ? (c.Uc(this.nodeSpacing / 2, this.layerSpacing), (d = new G(-this.nodeSpacing / 2, -this.layerSpacing / 2))) : (c.Uc(this.layerSpacing, this.nodeSpacing / 2), (d = new G(-this.layerSpacing / 2, -this.nodeSpacing / 2))); e = []; c = 90 === this.angle || 270 === this.angle ? c.width : c.height; f = 0; if (180 === this.angle || 270 === this.angle) for (var g = 0; g < a.length; g++) f += a[g] + b[g]; for (g = 0; g < a.length; g++) { var h = a[g] + b[g]; 270 === this.angle ? ((f -= h), e.push(new N(0, f, c, h))) : 90 === this.angle ? (e.push(new N(0, f, c, h)), (f += h)) : 180 === this.angle ? ((f -= h), e.push(new N(f, 0, h, c))) : (e.push(new N(f, 0, h, c)), (f += h)); } this.commitLayers(e, d); } }; ys.prototype.commitLayers = function () {}; ys.prototype.commitLinks = function () { for (var a = this.network.edges.iterator; a.next(); ) a.value.commit(); }; ys.prototype.Kv = function () { for (var a = this.Fb.iterator; a.next(); ) { var b = a.value; b instanceof Fs && It(this, b); } }; function It(a, b) { if (null !== b) { a.setPortSpots(b); b = b.children; for (var c = b.length, d = 0; d < c; d++) It(a, b[d]); } } ys.prototype.setPortSpots = function (a) { var b = a.alignment; if ($s(b)) { var c = this.Zc === As, d = it(a); switch (d) { case 0: var e = Sd; break; case 90: e = Td; break; case 180: e = Kd; break; default: e = Jd; } var f = a.children, g = f.length; switch (b) { case at: case Rs: for (b = 0; b < g; b++) { var h = f[b]; h = (c ? h.sourceEdges : h.destinationEdges).first(); if (null !== h && ((h = h.link), null !== h)) { var k = 90 === d || 270 === d ? Kd : Jd; if (1 === g || (b === g - 1 && 1 === g % 2)) switch (d) { case 0: k = Kd; break; case 90: k = Jd; break; case 180: k = Sd; break; default: k = Td; } else 0 === b % 2 && (k = 90 === d || 270 === d ? Sd : Td); c ? (a.setsPortSpot && (h.fromSpot = e), a.setsChildPortSpot && (h.toSpot = k)) : (a.setsPortSpot && (h.fromSpot = k), a.setsChildPortSpot && (h.toSpot = e)); } } break; case bt: d = 90 === d || 270 === d ? Sd : Td; for (f = c ? a.destinationEdges : a.sourceEdges; f.next(); ) (g = f.value.link), null !== g && (c ? (a.setsPortSpot && (g.fromSpot = e), a.setsChildPortSpot && (g.toSpot = d)) : (a.setsPortSpot && (g.fromSpot = d), a.setsChildPortSpot && (g.toSpot = e))); break; case ct: for ( d = 90 === d || 270 === d ? Kd : Jd, f = c ? a.destinationEdges : a.sourceEdges; f.next(); ) (g = f.value.link), null !== g && (c ? (a.setsPortSpot && (g.fromSpot = e), a.setsChildPortSpot && (g.toSpot = d)) : (a.setsPortSpot && (g.fromSpot = d), a.setsChildPortSpot && (g.toSpot = e))); } } else if (((c = it(a)), this.Zc === As)) for (e = a.destinationEdges; e.next(); ) { if (((d = e.value.link), null !== d)) { if (a.setsPortSpot) if (a.portSpot.Kb()) switch (c) { case 0: d.fromSpot = Sd; break; case 90: d.fromSpot = Td; break; case 180: d.fromSpot = Kd; break; default: d.fromSpot = Jd; } else d.fromSpot = a.portSpot; if (a.setsChildPortSpot) if (a.childPortSpot.Kb()) switch (c) { case 0: d.toSpot = Kd; break; case 90: d.toSpot = Jd; break; case 180: d.toSpot = Sd; break; default: d.toSpot = Td; } else d.toSpot = a.childPortSpot; } } else for (e = a.sourceEdges; e.next(); ) if (((d = e.value.link), null !== d)) { if (a.setsPortSpot) if (a.portSpot.Kb()) switch (c) { case 0: d.toSpot = Sd; break; case 90: d.toSpot = Td; break; case 180: d.toSpot = Kd; break; default: d.toSpot = Jd; } else d.toSpot = a.portSpot; if (a.setsChildPortSpot) if (a.childPortSpot.Kb()) switch (c) { case 0: d.fromSpot = Kd; break; case 90: d.fromSpot = Jd; break; case 180: d.fromSpot = Sd; break; default: d.fromSpot = Td; } else d.fromSpot = a.childPortSpot; } }; function it(a) { a = a.angle; return 45 >= a ? 0 : 135 >= a ? 90 : 225 >= a ? 180 : 315 >= a ? 270 : 0; } function kt(a) { var b = it(a); b = 90 === b || 270 === b; var c = a.layerSpacing; if (0 < a.layerSpacingParentOverlap) { var d = Math.min(1, a.layerSpacingParentOverlap); c -= b ? a.height * d : a.width * d; } c < (b ? -a.height : -a.width) && (c = b ? -a.height : -a.width); return c; } function lt(a) { var b = it(a), c = a.nodeIndent; if (0 < a.nodeIndentPastParent) { var d = Math.min(1, a.nodeIndentPastParent); c += 90 === b || 270 === b ? a.width * d : a.height * d; } return (c = Math.max(0, c)); } pa.Object.defineProperties(ys.prototype, { roots: { get: function () { return this.Fb; }, set: function (a) { this.Fb !== a && ((this.Fb = a), this.B()); }, }, path: { get: function () { return this.Oo; }, set: function (a) { this.Oo !== a && ((this.Oo = a), this.B()); }, }, treeStyle: { get: function () { return this.Fp; }, set: function (a) { this.Ab === a || (a !== Bs && a !== Us && a !== Vs && a !== Ts) || ((this.Fp = a), this.B()); }, }, layerStyle: { get: function () { return this.Nr; }, set: function (a) { this.Ab === a || (a !== Cs && a !== Ps && a !== Os) || ((this.Nr = a), this.B()); }, }, comments: { get: function () { return this.Xc; }, set: function (a) { this.Xc !== a && ((this.Xc = a), this.B()); }, }, arrangement: { get: function () { return this.Ab; }, set: function (a) { this.Ab === a || (a !== Ds && a !== Ht && a !== Gs) || ((this.Ab = a), this.B()); }, }, arrangementSpacing: { get: function () { return this.wd; }, set: function (a) { this.wd.A(a) || (this.wd.assign(a), this.B()); }, }, rootDefaults: { get: function () { return this.U; }, set: function (a) { this.U !== a && ((this.U = a), this.B()); }, }, alternateDefaults: { get: function () { return this.V; }, set: function (a) { this.V !== a && ((this.V = a), this.B()); }, }, sorting: { get: function () { return this.U.sorting; }, set: function (a) { this.U.sorting === a || (a !== Ws && a !== Xs && a !== Ys && !Zs) || ((this.U.sorting = a), this.B()); }, }, comparer: { get: function () { return this.U.comparer; }, set: function (a) { this.U.comparer !== a && ((this.U.comparer = a), this.B()); }, }, angle: { get: function () { return this.U.angle; }, set: function (a) { this.U.angle !== a && (0 === a || 90 === a || 180 === a || 270 === a ? ((this.U.angle = a), this.B()) : A('TreeLayout.angle must be 0, 90, 180, or 270')); }, }, alignment: { get: function () { return this.U.alignment; }, set: function (a) { this.U.alignment !== a && ((this.U.alignment = a), this.B()); }, }, nodeIndent: { get: function () { return this.U.nodeIndent; }, set: function (a) { this.U.nodeIndent !== a && 0 <= a && ((this.U.nodeIndent = a), this.B()); }, }, nodeIndentPastParent: { get: function () { return this.U.nodeIndentPastParent; }, set: function (a) { this.U.nodeIndentPastParent !== a && 0 <= a && 1 >= a && ((this.U.nodeIndentPastParent = a), this.B()); }, }, nodeSpacing: { get: function () { return this.U.nodeSpacing; }, set: function (a) { this.U.nodeSpacing !== a && ((this.U.nodeSpacing = a), this.B()); }, }, layerSpacing: { get: function () { return this.U.layerSpacing; }, set: function (a) { this.U.layerSpacing !== a && ((this.U.layerSpacing = a), this.B()); }, }, layerSpacingParentOverlap: { get: function () { return this.U.layerSpacingParentOverlap; }, set: function (a) { this.U.layerSpacingParentOverlap !== a && 0 <= a && 1 >= a && ((this.U.layerSpacingParentOverlap = a), this.B()); }, }, compaction: { get: function () { return this.U.compaction; }, set: function (a) { this.U.compaction === a || (a !== ft && a !== ht) || ((this.U.compaction = a), this.B()); }, }, breadthLimit: { get: function () { return this.U.breadthLimit; }, set: function (a) { this.U.breadthLimit !== a && 0 <= a && ((this.U.breadthLimit = a), this.B()); }, }, rowSpacing: { get: function () { return this.U.rowSpacing; }, set: function (a) { this.U.rowSpacing !== a && ((this.U.rowSpacing = a), this.B()); }, }, rowIndent: { get: function () { return this.U.rowIndent; }, set: function (a) { this.U.rowIndent !== a && 0 <= a && ((this.U.rowIndent = a), this.B()); }, }, commentSpacing: { get: function () { return this.U.commentSpacing; }, set: function (a) { this.U.commentSpacing !== a && ((this.U.commentSpacing = a), this.B()); }, }, commentMargin: { get: function () { return this.U.commentMargin; }, set: function (a) { this.U.commentMargin !== a && ((this.U.commentMargin = a), this.B()); }, }, setsPortSpot: { get: function () { return this.U.setsPortSpot; }, set: function (a) { this.U.setsPortSpot !== a && ((this.U.setsPortSpot = a), this.B()); }, }, portSpot: { get: function () { return this.U.portSpot; }, set: function (a) { this.U.portSpot.A(a) || ((this.U.portSpot = a), this.B()); }, }, setsChildPortSpot: { get: function () { return this.U.setsChildPortSpot; }, set: function (a) { this.U.setsChildPortSpot !== a && ((this.U.setsChildPortSpot = a), this.B()); }, }, childPortSpot: { get: function () { return this.U.childPortSpot; }, set: function (a) { this.U.childPortSpot.A(a) || ((this.U.childPortSpot = a), this.B()); }, }, alternateSorting: { get: function () { return this.V.sorting; }, set: function (a) { this.V.sorting === a || (a !== Ws && a !== Xs && a !== Ys && !Zs) || ((this.V.sorting = a), this.B()); }, }, alternateComparer: { get: function () { return this.V.comparer; }, set: function (a) { this.V.comparer !== a && ((this.V.comparer = a), this.B()); }, }, alternateAngle: { get: function () { return this.V.angle; }, set: function (a) { this.V.angle === a || (0 !== a && 90 !== a && 180 !== a && 270 !== a) || ((this.V.angle = a), this.B()); }, }, alternateAlignment: { get: function () { return this.V.alignment; }, set: function (a) { this.V.alignment !== a && ((this.V.alignment = a), this.B()); }, }, alternateNodeIndent: { get: function () { return this.V.nodeIndent; }, set: function (a) { this.V.nodeIndent !== a && 0 <= a && ((this.V.nodeIndent = a), this.B()); }, }, alternateNodeIndentPastParent: { get: function () { return this.V.nodeIndentPastParent; }, set: function (a) { this.V.nodeIndentPastParent !== a && 0 <= a && 1 >= a && ((this.V.nodeIndentPastParent = a), this.B()); }, }, alternateNodeSpacing: { get: function () { return this.V.nodeSpacing; }, set: function (a) { this.V.nodeSpacing !== a && ((this.V.nodeSpacing = a), this.B()); }, }, alternateLayerSpacing: { get: function () { return this.V.layerSpacing; }, set: function (a) { this.V.layerSpacing !== a && ((this.V.layerSpacing = a), this.B()); }, }, alternateLayerSpacingParentOverlap: { get: function () { return this.V.layerSpacingParentOverlap; }, set: function (a) { this.V.layerSpacingParentOverlap !== a && 0 <= a && 1 >= a && ((this.V.layerSpacingParentOverlap = a), this.B()); }, }, alternateCompaction: { get: function () { return this.V.compaction; }, set: function (a) { this.V.compaction === a || (a !== ft && a !== ht) || ((this.V.compaction = a), this.B()); }, }, alternateBreadthLimit: { get: function () { return this.V.breadthLimit; }, set: function (a) { this.V.breadthLimit !== a && 0 <= a && ((this.V.breadthLimit = a), this.B()); }, }, alternateRowSpacing: { get: function () { return this.V.rowSpacing; }, set: function (a) { this.V.rowSpacing !== a && ((this.V.rowSpacing = a), this.B()); }, }, alternateRowIndent: { get: function () { return this.V.rowIndent; }, set: function (a) { this.V.rowIndent !== a && 0 <= a && ((this.V.rowIndent = a), this.B()); }, }, alternateCommentSpacing: { get: function () { return this.V.commentSpacing; }, set: function (a) { this.V.commentSpacing !== a && ((this.V.commentSpacing = a), this.B()); }, }, alternateCommentMargin: { get: function () { return this.V.commentMargin; }, set: function (a) { this.V.commentMargin !== a && ((this.V.commentMargin = a), this.B()); }, }, alternateSetsPortSpot: { get: function () { return this.V.setsPortSpot; }, set: function (a) { this.V.setsPortSpot !== a && ((this.V.setsPortSpot = a), this.B()); }, }, alternatePortSpot: { get: function () { return this.V.portSpot; }, set: function (a) { this.V.portSpot.A(a) || ((this.V.portSpot = a), this.B()); }, }, alternateSetsChildPortSpot: { get: function () { return this.V.setsChildPortSpot; }, set: function (a) { this.V.setsChildPortSpot !== a && ((this.V.setsChildPortSpot = a), this.B()); }, }, alternateChildPortSpot: { get: function () { return this.V.childPortSpot; }, set: function (a) { this.V.childPortSpot.A(a) || ((this.V.childPortSpot = a), this.B()); }, }, }); var zs = new D(ys, 'PathDefault', -1), As = new D(ys, 'PathDestination', 0), Hs = new D(ys, 'PathSource', 1), Ws = new D(ys, 'SortingForwards', 10), Xs = new D(ys, 'SortingReverse', 11), Ys = new D(ys, 'SortingAscending', 12), Zs = new D(ys, 'SortingDescending', 13), yt = new D(ys, 'AlignmentCenterSubtrees', 20), zt = new D(ys, 'AlignmentCenterChildren', 21), pt = new D(ys, 'AlignmentStart', 22), jt = new D(ys, 'AlignmentEnd', 23), at = new D(ys, 'AlignmentBus', 24), Rs = new D(ys, 'AlignmentBusBranching', 25), bt = new D(ys, 'AlignmentTopLeftBus', 26), ct = new D(ys, 'AlignmentBottomRightBus', 27), ft = new D(ys, 'CompactionNone', 30), ht = new D(ys, 'CompactionBlock', 31), Bs = new D(ys, 'StyleLayered', 40), Vs = new D(ys, 'StyleLastParents', 41), Us = new D(ys, 'StyleAlternating', 42), Ts = new D(ys, 'StyleRootOnly', 43), Ds = new D(ys, 'ArrangementVertical', 50), Ht = new D(ys, 'ArrangementHorizontal', 51), Gs = new D(ys, 'ArrangementFixedRoots', 52), Cs = new D(ys, 'LayerIndividual', 60), Ps = new D(ys, 'LayerSiblings', 61), Os = new D(ys, 'LayerUniform', 62); ys.className = 'TreeLayout'; ys.PathDefault = zs; ys.PathDestination = As; ys.PathSource = Hs; ys.SortingForwards = Ws; ys.SortingReverse = Xs; ys.SortingAscending = Ys; ys.SortingDescending = Zs; ys.AlignmentCenterSubtrees = yt; ys.AlignmentCenterChildren = zt; ys.AlignmentStart = pt; ys.AlignmentEnd = jt; ys.AlignmentBus = at; ys.AlignmentBusBranching = Rs; ys.AlignmentTopLeftBus = bt; ys.AlignmentBottomRightBus = ct; ys.CompactionNone = ft; ys.CompactionBlock = ht; ys.StyleLayered = Bs; ys.StyleLastParents = Vs; ys.StyleAlternating = Us; ys.StyleRootOnly = Ts; ys.ArrangementVertical = Ds; ys.ArrangementHorizontal = Ht; ys.ArrangementFixedRoots = Gs; ys.LayerIndividual = Cs; ys.LayerSiblings = Ps; ys.LayerUniform = Os; function Es(a) { xp.call(this, a); } oa(Es, xp); Es.prototype.createVertex = function () { return new Fs(this); }; Es.prototype.createEdge = function () { return new Jt(this); }; Es.className = 'TreeNetwork'; function Fs(a) { Ap.call(this, a); this.La = !1; this.Kc = null; this.K = []; this.Vb = this.Ub = this.ba = this.Ma = 0; this.Xc = null; this.T = new G(0, 0); this.ua = new M(0, 0); this.ia = new G(0, 0); this.um = this.tm = this.Pz = !1; this.rq = this.fq = null; this.Qc = Ws; this.Mc = Gp; this.zc = 0; this.wb = zt; this.Yr = this.Xr = 0; this.$r = 20; this.ke = 50; this.Mr = 0; this.Uq = ht; this.Nq = 0; this.ms = 25; this.Tq = this.ls = 10; this.Sq = 20; this.vs = !0; this.hs = Ed; this.us = !0; this.Qq = Ed; } oa(Fs, Ap); Fs.prototype.copyInheritedPropertiesFrom = function (a) { null !== a && ((this.Qc = a.sorting), (this.Mc = a.comparer), (this.zc = a.angle), (this.wb = a.alignment), (this.Xr = a.nodeIndent), (this.Yr = a.nodeIndentPastParent), (this.$r = a.nodeSpacing), (this.ke = a.layerSpacing), (this.Mr = a.layerSpacingParentOverlap), (this.Uq = a.compaction), (this.Nq = a.breadthLimit), (this.ms = a.rowSpacing), (this.ls = a.rowIndent), (this.Tq = a.commentSpacing), (this.Sq = a.commentMargin), (this.vs = a.setsPortSpot), (this.hs = a.portSpot), (this.us = a.setsChildPortSpot), (this.Qq = a.childPortSpot)); }; pa.Object.defineProperties(Fs.prototype, { initialized: { get: function () { return this.La; }, set: function (a) { this.La !== a && (this.La = a); }, }, parent: { get: function () { return this.Kc; }, set: function (a) { this.Kc !== a && (this.Kc = a); }, }, children: { get: function () { return this.K; }, set: function (a) { if (this.K !== a) { if (null !== a) for (var b = a.length, c = 0; c < b; c++); this.K = a; } }, }, level: { get: function () { return this.Ma; }, set: function (a) { this.Ma !== a && (this.Ma = a); }, }, descendantCount: { get: function () { return this.ba; }, set: function (a) { this.ba !== a && (this.ba = a); }, }, maxChildrenCount: { get: function () { return this.Ub; }, set: function (a) { this.Ub !== a && (this.Ub = a); }, }, maxGenerationCount: { get: function () { return this.Vb; }, set: function (a) { this.Vb !== a && (this.Vb = a); }, }, comments: { get: function () { return this.Xc; }, set: function (a) { if (this.Xc !== a) { if (null !== a) for (var b = a.length, c = 0; c < b; c++); this.Xc = a; } }, }, sorting: { get: function () { return this.Qc; }, set: function (a) { this.Qc !== a && (this.Qc = a); }, }, comparer: { get: function () { return this.Mc; }, set: function (a) { this.Mc !== a && (this.Mc = a); }, }, angle: { get: function () { return this.zc; }, set: function (a) { this.zc !== a && (this.zc = a); }, }, alignment: { get: function () { return this.wb; }, set: function (a) { this.wb !== a && (this.wb = a); }, }, nodeIndent: { get: function () { return this.Xr; }, set: function (a) { this.Xr !== a && (this.Xr = a); }, }, nodeIndentPastParent: { get: function () { return this.Yr; }, set: function (a) { this.Yr !== a && (this.Yr = a); }, }, nodeSpacing: { get: function () { return this.$r; }, set: function (a) { this.$r !== a && (this.$r = a); }, }, layerSpacing: { get: function () { return this.ke; }, set: function (a) { this.ke !== a && (this.ke = a); }, }, layerSpacingParentOverlap: { get: function () { return this.Mr; }, set: function (a) { this.Mr !== a && (this.Mr = a); }, }, compaction: { get: function () { return this.Uq; }, set: function (a) { this.Uq !== a && (this.Uq = a); }, }, breadthLimit: { get: function () { return this.Nq; }, set: function (a) { this.Nq !== a && (this.Nq = a); }, }, rowSpacing: { get: function () { return this.ms; }, set: function (a) { this.ms !== a && (this.ms = a); }, }, rowIndent: { get: function () { return this.ls; }, set: function (a) { this.ls !== a && (this.ls = a); }, }, commentSpacing: { get: function () { return this.Tq; }, set: function (a) { this.Tq !== a && (this.Tq = a); }, }, commentMargin: { get: function () { return this.Sq; }, set: function (a) { this.Sq !== a && (this.Sq = a); }, }, setsPortSpot: { get: function () { return this.vs; }, set: function (a) { this.vs !== a && (this.vs = a); }, }, portSpot: { get: function () { return this.hs; }, set: function (a) { this.hs.A(a) || (this.hs = a); }, }, setsChildPortSpot: { get: function () { return this.us; }, set: function (a) { this.us !== a && (this.us = a); }, }, childPortSpot: { get: function () { return this.Qq; }, set: function (a) { this.Qq.A(a) || (this.Qq = a); }, }, childrenCount: { get: function () { return this.children.length; }, }, relativePosition: { get: function () { return this.T; }, set: function (a) { this.T.set(a); }, }, subtreeSize: { get: function () { return this.ua; }, set: function (a) { this.ua.set(a); }, }, subtreeOffset: { get: function () { return this.ia; }, set: function (a) { this.ia.set(a); }, }, }); Fs.className = 'TreeVertex'; function Jt(a) { Bp.call(this, a); this.ou = new G(0, 0); } oa(Jt, Bp); Jt.prototype.commit = function () { var a = this.link; if (null !== a && !a.isAvoiding) { var b = this.network.layout, c = null, d = null; switch (b.Zc) { case As: c = this.fromVertex; d = this.toVertex; break; case Hs: c = this.toVertex; d = this.fromVertex; break; default: A('Unhandled path value ' + b.Zc.toString()); } if (null !== c && null !== d) if (((b = this.ou), 0 !== b.x || 0 !== b.y || c.Pz)) { d = c.bounds; var e = it(c), f = kt(c), g = c.rowSpacing; a.Zi(); var h = a.curve === Rg, k = a.isOrthogonal, l; a.Ch(); if (k || h) { for (l = 2; 4 < a.pointsCount; ) a.Av(2); var m = a.i(1); var n = a.i(2); } else { for (l = 1; 3 < a.pointsCount; ) a.Av(1); m = a.i(0); n = a.i(a.pointsCount - 1); } var p = a.i(a.pointsCount - 1); 0 === e ? (c.alignment === jt ? ((e = d.bottom + b.y), 0 === b.y && m.y > p.y + c.rowIndent && (e = Math.min(e, Math.max(m.y, e - lt(c))))) : c.alignment === pt ? ((e = d.top + b.y), 0 === b.y && m.y < p.y - c.rowIndent && (e = Math.max(e, Math.min(m.y, e + lt(c))))) : (e = c.tm || (c.um && 1 === c.maxGenerationCount) ? d.top - c.ia.y + b.y : d.y + d.height / 2 + b.y), h ? (a.m(l, m.x, e), l++, a.m(l, d.right + f, e), l++, a.m(l, d.right + f + (b.x - g) / 3, e), l++, a.m(l, d.right + f + (2 * (b.x - g)) / 3, e), l++, a.m(l, d.right + f + (b.x - g), e), l++, a.m(l, n.x, e)) : (k && (a.m(l, d.right + f / 2, m.y), l++), a.m(l, d.right + f / 2, e), l++, a.m(l, d.right + f + b.x - (k ? g / 2 : g), e), l++, k && a.m(l, a.i(l - 1).x, n.y))) : 90 === e ? (c.alignment === jt ? ((e = d.right + b.x), 0 === b.x && m.x > p.x + c.rowIndent && (e = Math.min(e, Math.max(m.x, e - lt(c))))) : c.alignment === pt ? ((e = d.left + b.x), 0 === b.x && m.x < p.x - c.rowIndent && (e = Math.max(e, Math.min(m.x, e + lt(c))))) : (e = c.tm || (c.um && 1 === c.maxGenerationCount) ? d.left - c.ia.x + b.x : d.x + d.width / 2 + b.x), h ? (a.m(l, e, m.y), l++, a.m(l, e, d.bottom + f), l++, a.m(l, e, d.bottom + f + (b.y - g) / 3), l++, a.m(l, e, d.bottom + f + (2 * (b.y - g)) / 3), l++, a.m(l, e, d.bottom + f + (b.y - g)), l++, a.m(l, e, n.y)) : (k && (a.m(l, m.x, d.bottom + f / 2), l++), a.m(l, e, d.bottom + f / 2), l++, a.m(l, e, d.bottom + f + b.y - (k ? g / 2 : g)), l++, k && a.m(l, n.x, a.i(l - 1).y))) : 180 === e ? (c.alignment === jt ? ((e = d.bottom + b.y), 0 === b.y && m.y > p.y + c.rowIndent && (e = Math.min(e, Math.max(m.y, e - lt(c))))) : c.alignment === pt ? ((e = d.top + b.y), 0 === b.y && m.y < p.y - c.rowIndent && (e = Math.max(e, Math.min(m.y, e + lt(c))))) : (e = c.tm || (c.um && 1 === c.maxGenerationCount) ? d.top - c.ia.y + b.y : d.y + d.height / 2 + b.y), h ? (a.m(l, m.x, e), l++, a.m(l, d.left - f, e), l++, a.m(l, d.left - f + (b.x + g) / 3, e), l++, a.m(l, d.left - f + (2 * (b.x + g)) / 3, e), l++, a.m(l, d.left - f + (b.x + g), e), l++, a.m(l, n.x, e)) : (k && (a.m(l, d.left - f / 2, m.y), l++), a.m(l, d.left - f / 2, e), l++, a.m(l, d.left - f + b.x + (k ? g / 2 : g), e), l++, k && a.m(l, a.i(l - 1).x, n.y))) : 270 === e ? (c.alignment === jt ? ((e = d.right + b.x), 0 === b.x && m.x > p.x + c.rowIndent && (e = Math.min(e, Math.max(m.x, e - lt(c))))) : c.alignment === pt ? ((e = d.left + b.x), 0 === b.x && m.x < p.x - c.rowIndent && (e = Math.max(e, Math.min(m.x, e + lt(c))))) : (e = c.tm || (c.um && 1 === c.maxGenerationCount) ? d.left - c.ia.x + b.x : d.x + d.width / 2 + b.x), h ? (a.m(l, e, m.y), l++, a.m(l, e, d.top - f), l++, a.m(l, e, d.top - f + (b.y + g) / 3), l++, a.m(l, e, d.top - f + (2 * (b.y + g)) / 3), l++, a.m(l, e, d.top - f + (b.y + g)), l++, a.m(l, e, n.y)) : (k && (a.m(l, m.x, d.top - f / 2), l++), a.m(l, e, d.top - f / 2), l++, a.m(l, e, d.top - f + b.y + (k ? g / 2 : g)), l++, k && a.m(l, n.x, a.i(l - 1).y))) : A('Invalid angle ' + e); a.mf(); } else (a = this.link), (f = it(c)), f !== it(d) && ((g = kt(c)), (h = c.bounds), (c = d.bounds), (0 === f && c.left - h.right < g + 1) || (90 === f && c.top - h.bottom < g + 1) || (180 === f && h.left - c.right < g + 1) || (270 === f && h.top - c.bottom < g + 1) || (a.Zi(), (c = a.curve === Rg), (b = a.isOrthogonal), (d = $s(this.fromVertex.alignment)), a.Ch(), 0 === f ? ((f = h.right + g / 2), c ? 4 === a.pointsCount && ((c = a.i(3).y), a.M(1, f - 20, a.i(1).y), a.m(2, f - 20, c), a.m(3, f, c), a.m(4, f + 20, c), a.M(5, a.i(5).x, c)) : b ? d ? a.M(3, a.i(2).x, a.i(4).y) : 6 === a.pointsCount && (a.M(2, f, a.i(2).y), a.M(3, f, a.i(3).y)) : 4 === a.pointsCount ? a.m(2, f, a.i(2).y) : 3 === a.pointsCount ? a.M(1, f, a.i(2).y) : 2 === a.pointsCount && a.m(1, f, a.i(1).y)) : 90 === f ? ((f = h.bottom + g / 2), c ? 4 === a.pointsCount && ((c = a.i(3).x), a.M(1, a.i(1).x, f - 20), a.m(2, c, f - 20), a.m(3, c, f), a.m(4, c, f + 20), a.M(5, c, a.i(5).y)) : b ? d ? a.M(3, a.i(2).x, a.i(4).y) : 6 === a.pointsCount && (a.M(2, a.i(2).x, f), a.M(3, a.i(3).x, f)) : 4 === a.pointsCount ? a.m(2, a.i(2).x, f) : 3 === a.pointsCount ? a.M(1, a.i(2).x, f) : 2 === a.pointsCount && a.m(1, a.i(1).x, f)) : 180 === f ? ((f = h.left - g / 2), c ? 4 === a.pointsCount && ((c = a.i(3).y), a.M(1, f + 20, a.i(1).y), a.m(2, f + 20, c), a.m(3, f, c), a.m(4, f - 20, c), a.M(5, a.i(5).x, c)) : b ? d ? a.M(3, a.i(2).x, a.i(4).y) : 6 === a.pointsCount && (a.M(2, f, a.i(2).y), a.M(3, f, a.i(3).y)) : 4 === a.pointsCount ? a.m(2, f, a.i(2).y) : 3 === a.pointsCount ? a.M(1, f, a.i(2).y) : 2 === a.pointsCount && a.m(1, f, a.i(1).y)) : 270 === f && ((f = h.top - g / 2), c ? 4 === a.pointsCount && ((c = a.i(3).x), a.M(1, a.i(1).x, f + 20), a.m(2, c, f + 20), a.m(3, c, f), a.m(4, c, f - 20), a.M(5, c, a.i(5).y)) : b ? d ? a.M(3, a.i(2).x, a.i(4).y) : 6 === a.pointsCount && (a.M(2, a.i(2).x, f), a.M(3, a.i(3).x, f)) : 4 === a.pointsCount ? a.m(2, a.i(2).x, f) : 3 === a.pointsCount ? a.M(1, a.i(2).x, f) : 2 === a.pointsCount && a.m(1, a.i(1).x, f)), a.mf())); } }; pa.Object.defineProperties(Jt.prototype, { relativePoint: { get: function () { return this.ou; }, set: function (a) { this.ou.set(a); }, }, }); Jt.className = 'TreeEdge'; Ua.prototype.initializeStandardTools = function () { vf(this, 'Action', new dh(), this.mouseDownTools); vf(this, 'Relinking', new Nf(), this.mouseDownTools); vf(this, 'LinkReshaping', new Pg(), this.mouseDownTools); vf(this, 'Rotating', new bh(), this.mouseDownTools); vf(this, 'Resizing', new Wg(), this.mouseDownTools); vf(this, 'Linking', new Ig(), this.mouseMoveTools); vf(this, 'Dragging', new xf(), this.mouseMoveTools); vf(this, 'DragSelecting', new gh(), this.mouseMoveTools); vf(this, 'Panning', new hh(), this.mouseMoveTools); vf(this, 'ContextMenu', new jh(), this.mouseUpTools); vf(this, 'TextEditing', new uh(), this.mouseUpTools); vf(this, 'ClickCreating', new eh(), this.mouseUpTools); vf(this, 'ClickSelecting', new ch(), this.mouseUpTools); }; fn('Horizontal', new nm()); fn('Spot', new pm()); fn('Table', new tm()); fn('Viewbox', new ym()); fn('TableRow', new wm()); fn('TableColumn', new xm()); fn('Graduated', new Hm()); si.add(Dq.type, Zp); si.add(Gq.type, mq); var Kt = w.go, Lt = { get licenseKey() { return P.licenseKey; }, set licenseKey(a) { P.licenseKey = a; }, get version() { return P.version; }, Group: ig, EnumValue: D, List: E, Set: F, Map: Lb, Point: G, Size: M, Rect: N, Margin: Ic, Spot: O, Geometry: $d, PathFigure: Ue, PathSegment: Ve, InputEvent: Xe, DiagramEvent: Ze, ChangedEvent: $e, Model: Z, GraphLinksModel: Dq, TreeModel: Gq, Binding: Ei, Transaction: ef, UndoManager: ff, CommandHandler: Gk, Tool: kf, DraggingTool: xf, DraggingInfo: Of, LinkingBaseTool: rg, LinkingTool: Ig, RelinkingTool: Nf, LinkReshapingTool: Pg, ResizingTool: Wg, RotatingTool: bh, ClickSelectingTool: ch, ActionTool: dh, ClickCreatingTool: eh, HTMLInfo: uf, ContextMenuTool: jh, DragSelectingTool: gh, PanningTool: hh, TextEditingTool: uh, ToolManager: Ua, AnimationManager: Oh, Layer: fi, Diagram: P, Palette: Ak, Overview: Ck, Brush: il, GraphObject: Y, Panel: X, RowColumnDefinition: Pj, Shape: W, TextBlock: vh, TextBlockMetrics: Jm, Picture: Yj, Part: T, Adornment: pf, Node: V, Link: S, Placeholder: Xg, Layout: yi, LayoutNetwork: xp, LayoutVertex: Ap, LayoutEdge: Bp, GridLayout: Bk, PanelLayout: Cl, CircularLayout: Hq, CircularNetwork: Zq, CircularVertex: lr, CircularEdge: mr, ForceDirectedLayout: nr, ForceDirectedNetwork: or, ForceDirectedVertex: Ar, ForceDirectedEdge: Br, LayeredDigraphLayout: Cr, LayeredDigraphNetwork: Hr, LayeredDigraphVertex: ws, LayeredDigraphEdge: xs, TreeLayout: ys, TreeNetwork: Es, TreeVertex: Fs, TreeEdge: Jt, }; Kt && Kt.version !== Lt.version && A( 'WARNING: a `go` object on the root object is already defined with a version mismatch.' + Kt.version + '. Replaced with version: ' + Lt.version, ); w.go = Lt; ('undefined' === typeof w || 'undefined' === typeof w.module || 'object' !== typeof w.module.exports) && w.define && 'function' === typeof w.define && w.define.amd && w.define(Lt); 'undefined' !== typeof module && 'object' === typeof module.exports && (module.exports = 'undefined' !== typeof global ? global.go : self.go); })();