From 7dd0eb54723370dfe7859aae3f92f3ef62a0cf46 Mon Sep 17 00:00:00 2001 From: pbanddev <202373785+PBandDev@users.noreply.github.com> Date: Thu, 8 Jan 2026 06:30:05 -0600 Subject: [PATCH] chore: remove coverage artifacts, add to gitignore --- .gitignore | 3 +- coverage/base.css | 224 -- coverage/block-navigation.js | 87 - coverage/clover.xml | 993 -------- coverage/coverage-final.json | 12 - coverage/favicon.png | Bin 445 -> 0 bytes coverage/index.html | 131 - coverage/prettify.css | 1 - coverage/prettify.js | 2 - coverage/sort-arrow-sprite.png | Bin 138 -> 0 bytes coverage/sorter.js | 210 -- coverage/src/debug.ts.html | 163 -- coverage/src/index.html | 116 - coverage/src/layout/bin-pack.ts.html | 760 ------ coverage/src/layout/graph-builder.ts.html | 1780 ------------- coverage/src/layout/groups.ts.html | 526 ---- coverage/src/layout/index.html | 251 -- coverage/src/layout/index.ts.html | 394 --- coverage/src/layout/layer-assign.ts.html | 391 --- coverage/src/layout/layout-utils.ts.html | 442 ---- coverage/src/layout/node-classifier.ts.html | 322 --- coverage/src/layout/ordering.ts.html | 670 ----- coverage/src/layout/positioning.ts.html | 2494 ------------------- coverage/src/layout/types.ts.html | 874 ------- tests/integration/layout.test.ts | 66 - 25 files changed, 2 insertions(+), 10910 deletions(-) delete mode 100644 coverage/base.css delete mode 100644 coverage/block-navigation.js delete mode 100644 coverage/clover.xml delete mode 100644 coverage/coverage-final.json delete mode 100644 coverage/favicon.png delete mode 100644 coverage/index.html delete mode 100644 coverage/prettify.css delete mode 100644 coverage/prettify.js delete mode 100644 coverage/sort-arrow-sprite.png delete mode 100644 coverage/sorter.js delete mode 100644 coverage/src/debug.ts.html delete mode 100644 coverage/src/index.html delete mode 100644 coverage/src/layout/bin-pack.ts.html delete mode 100644 coverage/src/layout/graph-builder.ts.html delete mode 100644 coverage/src/layout/groups.ts.html delete mode 100644 coverage/src/layout/index.html delete mode 100644 coverage/src/layout/index.ts.html delete mode 100644 coverage/src/layout/layer-assign.ts.html delete mode 100644 coverage/src/layout/layout-utils.ts.html delete mode 100644 coverage/src/layout/node-classifier.ts.html delete mode 100644 coverage/src/layout/ordering.ts.html delete mode 100644 coverage/src/layout/positioning.ts.html delete mode 100644 coverage/src/layout/types.ts.html diff --git a/.gitignore b/.gitignore index 0a92364..7e05bac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ node_modules/ __pycache__/ -dist/ +dist/ +coverage/ .DS_Store .env .env.local diff --git a/coverage/base.css b/coverage/base.css deleted file mode 100644 index f418035..0000000 --- a/coverage/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/coverage/block-navigation.js b/coverage/block-navigation.js deleted file mode 100644 index 530d1ed..0000000 --- a/coverage/block-navigation.js +++ /dev/null @@ -1,87 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selector that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - if ( - document.getElementById('fileSearch') === document.activeElement && - document.activeElement != null - ) { - // if we're currently focused on the search input, we don't want to navigate - return; - } - - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/coverage/clover.xml b/coverage/clover.xml deleted file mode 100644 index 0d0e2b7..0000000 --- a/coverage/clover.xml +++ /dev/null @@ -1,993 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json deleted file mode 100644 index 7855129..0000000 --- a/coverage/coverage-final.json +++ /dev/null @@ -1,12 +0,0 @@ -{"C:\\Projects\\comfy-node-organizer\\src\\debug.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\debug.ts","statementMap":{"0":{"start":{"line":2,"column":24},"end":{"line":2,"column":null}},"1":{"start":{"line":3,"column":21},"end":{"line":5,"column":null}},"2":{"start":{"line":9,"column":2},"end":{"line":18,"column":null}},"3":{"start":{"line":11,"column":4},"end":{"line":14,"column":null}},"4":{"start":{"line":12,"column":19},"end":{"line":12,"column":null}},"5":{"start":{"line":13,"column":6},"end":{"line":13,"column":null}},"6":{"start":{"line":15,"column":4},"end":{"line":15,"column":null}},"7":{"start":{"line":17,"column":4},"end":{"line":17,"column":null}},"8":{"start":{"line":23,"column":2},"end":{"line":25,"column":null}},"9":{"start":{"line":24,"column":4},"end":{"line":24,"column":null}}},"fnMap":{"0":{"name":"isDebugEnabled","decl":{"start":{"line":8,"column":16},"end":{"line":8,"column":42}},"loc":{"start":{"line":8,"column":42},"end":{"line":19,"column":null}},"line":8},"1":{"name":"debugLog","decl":{"start":{"line":22,"column":16},"end":{"line":22,"column":25}},"loc":{"start":{"line":22,"column":68},"end":{"line":26,"column":null}},"line":22}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":4},"end":{"line":14,"column":null}},"type":"if","locations":[{"start":{"line":11,"column":4},"end":{"line":14,"column":null}},{"start":{},"end":{}}],"line":11},"1":{"loc":{"start":{"line":11,"column":8},"end":{"line":11,"column":66}},"type":"binary-expr","locations":[{"start":{"line":11,"column":8},"end":{"line":11,"column":45}},{"start":{"line":11,"column":45},"end":{"line":11,"column":66}}],"line":11},"2":{"loc":{"start":{"line":13,"column":13},"end":{"line":13,"column":null}},"type":"binary-expr","locations":[{"start":{"line":13,"column":13},"end":{"line":13,"column":89}},{"start":{"line":13,"column":89},"end":{"line":13,"column":null}}],"line":13},"3":{"loc":{"start":{"line":23,"column":2},"end":{"line":25,"column":null}},"type":"if","locations":[{"start":{"line":23,"column":2},"end":{"line":25,"column":null}},{"start":{},"end":{}}],"line":23}},"s":{"0":1,"1":1,"2":624,"3":624,"4":0,"5":0,"6":624,"7":0,"8":624,"9":0},"f":{"0":624,"1":624},"b":{"0":[0,624],"1":[624,624],"2":[0,0],"3":[0,624]},"meta":{"lastBranch":4,"lastFunction":2,"lastStatement":10,"seen":{"s:2:24:2:Infinity":0,"s:3:21:5:Infinity":1,"f:8:16:8:42":0,"s:9:2:18:Infinity":2,"b:11:4:14:Infinity:undefined:undefined:undefined:undefined":0,"s:11:4:14:Infinity":3,"b:11:8:11:45:11:45:11:66":1,"s:12:19:12:Infinity":4,"s:13:6:13:Infinity":5,"b:13:13:13:89:13:89:13:Infinity":2,"s:15:4:15:Infinity":6,"s:17:4:17:Infinity":7,"f:22:16:22:25":1,"b:23:2:25:Infinity:undefined:undefined:undefined:undefined":3,"s:23:2:25:Infinity":8,"s:24:4:24:Infinity":9}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\bin-pack.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\bin-pack.ts","statementMap":{"0":{"start":{"line":29,"column":2},"end":{"line":29,"column":null}},"1":{"start":{"line":29,"column":28},"end":{"line":29,"column":null}},"2":{"start":{"line":32,"column":2},"end":{"line":35,"column":null}},"3":{"start":{"line":34,"column":4},"end":{"line":34,"column":null}},"4":{"start":{"line":38,"column":32},"end":{"line":45,"column":null}},"5":{"start":{"line":39,"column":17},"end":{"line":39,"column":null}},"6":{"start":{"line":40,"column":4},"end":{"line":44,"column":null}},"7":{"start":{"line":48,"column":2},"end":{"line":48,"column":null}},"8":{"start":{"line":48,"column":27},"end":{"line":48,"column":46}},"9":{"start":{"line":50,"column":2},"end":{"line":53,"column":null}},"10":{"start":{"line":52,"column":4},"end":{"line":52,"column":null}},"11":{"start":{"line":56,"column":2},"end":{"line":56,"column":null}},"12":{"start":{"line":67,"column":28},"end":{"line":67,"column":null}},"13":{"start":{"line":68,"column":16},"end":{"line":68,"column":null}},"14":{"start":{"line":70,"column":2},"end":{"line":83,"column":null}},"15":{"start":{"line":71,"column":17},"end":{"line":71,"column":null}},"16":{"start":{"line":72,"column":19},"end":{"line":72,"column":null}},"17":{"start":{"line":73,"column":18},"end":{"line":73,"column":null}},"18":{"start":{"line":75,"column":4},"end":{"line":80,"column":null}},"19":{"start":{"line":82,"column":4},"end":{"line":82,"column":null}},"20":{"start":{"line":85,"column":2},"end":{"line":85,"column":null}},"21":{"start":{"line":98,"column":28},"end":{"line":98,"column":null}},"22":{"start":{"line":99,"column":31},"end":{"line":99,"column":null}},"23":{"start":{"line":101,"column":2},"end":{"line":118,"column":null}},"24":{"start":{"line":102,"column":4},"end":{"line":102,"column":null}},"25":{"start":{"line":104,"column":4},"end":{"line":117,"column":null}},"26":{"start":{"line":106,"column":24},"end":{"line":106,"column":null}},"27":{"start":{"line":106,"column":58},"end":{"line":106,"column":66}},"28":{"start":{"line":107,"column":23},"end":{"line":107,"column":null}},"29":{"start":{"line":107,"column":53},"end":{"line":107,"column":68}},"30":{"start":{"line":109,"column":6},"end":{"line":114,"column":null}},"31":{"start":{"line":110,"column":37},"end":{"line":110,"column":41}},"32":{"start":{"line":116,"column":6},"end":{"line":116,"column":null}},"33":{"start":{"line":121,"column":2},"end":{"line":131,"column":null}},"34":{"start":{"line":122,"column":22},"end":{"line":122,"column":null}},"35":{"start":{"line":122,"column":56},"end":{"line":122,"column":64}},"36":{"start":{"line":123,"column":21},"end":{"line":123,"column":null}},"37":{"start":{"line":123,"column":51},"end":{"line":123,"column":66}},"38":{"start":{"line":125,"column":4},"end":{"line":130,"column":null}},"39":{"start":{"line":126,"column":35},"end":{"line":126,"column":39}},"40":{"start":{"line":134,"column":16},"end":{"line":134,"column":null}},"41":{"start":{"line":135,"column":2},"end":{"line":138,"column":null}},"42":{"start":{"line":136,"column":4},"end":{"line":136,"column":null}},"43":{"start":{"line":137,"column":4},"end":{"line":137,"column":null}},"44":{"start":{"line":140,"column":2},"end":{"line":140,"column":null}},"45":{"start":{"line":157,"column":7},"end":{"line":157,"column":null}},"46":{"start":{"line":159,"column":2},"end":{"line":188,"column":null}},"47":{"start":{"line":161,"column":17},"end":{"line":161,"column":null}},"48":{"start":{"line":163,"column":4},"end":{"line":178,"column":null}},"49":{"start":{"line":164,"column":23},"end":{"line":164,"column":null}},"50":{"start":{"line":168,"column":26},"end":{"line":168,"column":null}},"51":{"start":{"line":169,"column":31},"end":{"line":169,"column":null}},"52":{"start":{"line":171,"column":6},"end":{"line":177,"column":null}},"53":{"start":{"line":172,"column":8},"end":{"line":172,"column":null}},"54":{"start":{"line":173,"column":8},"end":{"line":173,"column":null}},"55":{"start":{"line":174,"column":8},"end":{"line":174,"column":null}},"56":{"start":{"line":175,"column":8},"end":{"line":175,"column":null}},"57":{"start":{"line":176,"column":8},"end":{"line":176,"column":null}},"58":{"start":{"line":180,"column":4},"end":{"line":187,"column":null}},"59":{"start":{"line":182,"column":6},"end":{"line":186,"column":null}},"60":{"start":{"line":191,"column":2},"end":{"line":191,"column":null}},"61":{"start":{"line":191,"column":22},"end":{"line":191,"column":41}},"62":{"start":{"line":194,"column":30},"end":{"line":194,"column":null}},"63":{"start":{"line":195,"column":16},"end":{"line":195,"column":null}},"64":{"start":{"line":197,"column":2},"end":{"line":206,"column":null}},"65":{"start":{"line":198,"column":4},"end":{"line":203,"column":null}},"66":{"start":{"line":199,"column":34},"end":{"line":199,"column":38}},"67":{"start":{"line":205,"column":4},"end":{"line":205,"column":null}},"68":{"start":{"line":208,"column":2},"end":{"line":208,"column":null}},"69":{"start":{"line":215,"column":2},"end":{"line":215,"column":null}},"70":{"start":{"line":215,"column":25},"end":{"line":215,"column":null}},"71":{"start":{"line":216,"column":18},"end":{"line":216,"column":null}},"72":{"start":{"line":217,"column":2},"end":{"line":217,"column":null}},"73":{"start":{"line":224,"column":2},"end":{"line":224,"column":null}},"74":{"start":{"line":224,"column":40},"end":{"line":224,"column":47}}},"fnMap":{"0":{"name":"packNodesIntoRows","decl":{"start":{"line":24,"column":16},"end":{"line":24,"column":null}},"loc":{"start":{"line":28,"column":15},"end":{"line":57,"column":null}},"line":28},"1":{"name":"(anonymous_1)","decl":{"start":{"line":38,"column":44},"end":{"line":38,"column":45}},"loc":{"start":{"line":38,"column":52},"end":{"line":45,"column":3}},"line":38},"2":{"name":"(anonymous_2)","decl":{"start":{"line":48,"column":17},"end":{"line":48,"column":18}},"loc":{"start":{"line":48,"column":27},"end":{"line":48,"column":46}},"line":48},"3":{"name":"packVertically","decl":{"start":{"line":62,"column":9},"end":{"line":62,"column":null}},"loc":{"start":{"line":66,"column":15},"end":{"line":86,"column":null}},"line":66},"4":{"name":"packFixedColumns","decl":{"start":{"line":92,"column":9},"end":{"line":92,"column":null}},"loc":{"start":{"line":96,"column":15},"end":{"line":141,"column":null}},"line":96},"5":{"name":"(anonymous_5)","decl":{"start":{"line":106,"column":51},"end":{"line":106,"column":52}},"loc":{"start":{"line":106,"column":58},"end":{"line":106,"column":66}},"line":106},"6":{"name":"(anonymous_6)","decl":{"start":{"line":107,"column":41},"end":{"line":107,"column":42}},"loc":{"start":{"line":107,"column":53},"end":{"line":107,"column":68}},"line":107},"7":{"name":"(anonymous_7)","decl":{"start":{"line":110,"column":30},"end":{"line":110,"column":31}},"loc":{"start":{"line":110,"column":37},"end":{"line":110,"column":41}},"line":110},"8":{"name":"(anonymous_8)","decl":{"start":{"line":122,"column":49},"end":{"line":122,"column":50}},"loc":{"start":{"line":122,"column":56},"end":{"line":122,"column":64}},"line":122},"9":{"name":"(anonymous_9)","decl":{"start":{"line":123,"column":39},"end":{"line":123,"column":40}},"loc":{"start":{"line":123,"column":51},"end":{"line":123,"column":66}},"line":123},"10":{"name":"(anonymous_10)","decl":{"start":{"line":126,"column":28},"end":{"line":126,"column":29}},"loc":{"start":{"line":126,"column":35},"end":{"line":126,"column":39}},"line":126},"11":{"name":"packByWidth","decl":{"start":{"line":147,"column":9},"end":{"line":147,"column":null}},"loc":{"start":{"line":152,"column":15},"end":{"line":209,"column":null}},"line":152},"12":{"name":"(anonymous_12)","decl":{"start":{"line":191,"column":12},"end":{"line":191,"column":13}},"loc":{"start":{"line":191,"column":22},"end":{"line":191,"column":41}},"line":191},"13":{"name":"(anonymous_13)","decl":{"start":{"line":199,"column":27},"end":{"line":199,"column":28}},"loc":{"start":{"line":199,"column":34},"end":{"line":199,"column":38}},"line":199},"14":{"name":"getPackedHeight","decl":{"start":{"line":214,"column":16},"end":{"line":214,"column":32}},"loc":{"start":{"line":214,"column":59},"end":{"line":218,"column":null}},"line":214},"15":{"name":"getPackedWidth","decl":{"start":{"line":223,"column":16},"end":{"line":223,"column":31}},"loc":{"start":{"line":223,"column":58},"end":{"line":225,"column":null}},"line":223},"16":{"name":"(anonymous_16)","decl":{"start":{"line":224,"column":33},"end":{"line":224,"column":34}},"loc":{"start":{"line":224,"column":40},"end":{"line":224,"column":47}},"line":224}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":2},"end":{"line":29,"column":null}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":29,"column":null}},{"start":{},"end":{}}],"line":29},"1":{"loc":{"start":{"line":32,"column":2},"end":{"line":35,"column":null}},"type":"if","locations":[{"start":{"line":32,"column":2},"end":{"line":35,"column":null}},{"start":{},"end":{}}],"line":32},"2":{"loc":{"start":{"line":42,"column":13},"end":{"line":42,"column":null}},"type":"binary-expr","locations":[{"start":{"line":42,"column":13},"end":{"line":42,"column":28}},{"start":{"line":42,"column":28},"end":{"line":42,"column":null}}],"line":42},"3":{"loc":{"start":{"line":43,"column":14},"end":{"line":43,"column":null}},"type":"binary-expr","locations":[{"start":{"line":43,"column":14},"end":{"line":43,"column":30}},{"start":{"line":43,"column":30},"end":{"line":43,"column":null}}],"line":43},"4":{"loc":{"start":{"line":50,"column":2},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":50,"column":2},"end":{"line":53,"column":null}},{"start":{},"end":{}}],"line":50},"5":{"loc":{"start":{"line":72,"column":19},"end":{"line":72,"column":null}},"type":"binary-expr","locations":[{"start":{"line":72,"column":19},"end":{"line":72,"column":35}},{"start":{"line":72,"column":35},"end":{"line":72,"column":null}}],"line":72},"6":{"loc":{"start":{"line":73,"column":18},"end":{"line":73,"column":null}},"type":"binary-expr","locations":[{"start":{"line":73,"column":18},"end":{"line":73,"column":33}},{"start":{"line":73,"column":33},"end":{"line":73,"column":null}}],"line":73},"7":{"loc":{"start":{"line":104,"column":4},"end":{"line":117,"column":null}},"type":"if","locations":[{"start":{"line":104,"column":4},"end":{"line":117,"column":null}},{"start":{},"end":{}}],"line":104},"8":{"loc":{"start":{"line":121,"column":2},"end":{"line":131,"column":null}},"type":"if","locations":[{"start":{"line":121,"column":2},"end":{"line":131,"column":null}},{"start":{},"end":{}}],"line":121},"9":{"loc":{"start":{"line":168,"column":26},"end":{"line":168,"column":null}},"type":"cond-expr","locations":[{"start":{"line":168,"column":43},"end":{"line":168,"column":70}},{"start":{"line":168,"column":70},"end":{"line":168,"column":null}}],"line":168},"10":{"loc":{"start":{"line":169,"column":31},"end":{"line":169,"column":null}},"type":"binary-expr","locations":[{"start":{"line":169,"column":31},"end":{"line":169,"column":53}},{"start":{"line":169,"column":53},"end":{"line":169,"column":null}}],"line":169},"11":{"loc":{"start":{"line":171,"column":6},"end":{"line":177,"column":null}},"type":"if","locations":[{"start":{"line":171,"column":6},"end":{"line":177,"column":null}},{"start":{},"end":{}}],"line":171},"12":{"loc":{"start":{"line":171,"column":10},"end":{"line":171,"column":55}},"type":"binary-expr","locations":[{"start":{"line":171,"column":10},"end":{"line":171,"column":37}},{"start":{"line":171,"column":37},"end":{"line":171,"column":55}}],"line":171},"13":{"loc":{"start":{"line":180,"column":4},"end":{"line":187,"column":null}},"type":"if","locations":[{"start":{"line":180,"column":4},"end":{"line":187,"column":null}},{"start":{},"end":{}}],"line":180},"14":{"loc":{"start":{"line":215,"column":2},"end":{"line":215,"column":null}},"type":"if","locations":[{"start":{"line":215,"column":2},"end":{"line":215,"column":null}},{"start":{},"end":{}}],"line":215}},"s":{"0":205,"1":0,"2":205,"3":23,"4":182,"5":245,"6":245,"7":182,"8":77,"9":182,"10":0,"11":182,"12":23,"13":23,"14":23,"15":52,"16":52,"17":52,"18":52,"19":52,"20":23,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":182,"46":182,"47":245,"48":245,"49":70,"50":70,"51":70,"52":70,"53":21,"54":21,"55":21,"56":21,"57":21,"58":245,"59":224,"60":182,"61":42,"62":182,"63":182,"64":182,"65":224,"66":245,"67":224,"68":182,"69":0,"70":0,"71":0,"72":0,"73":112,"74":126},"f":{"0":205,"1":245,"2":77,"3":23,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":182,"12":42,"13":245,"14":0,"15":112,"16":126},"b":{"0":[0,205],"1":[23,182],"2":[245,0],"3":[245,0],"4":[0,182],"5":[52,0],"6":[52,0],"7":[0,0],"8":[0,0],"9":[70,0],"10":[70,56],"11":[21,49],"12":[70,35],"13":[224,21],"14":[0,0]},"meta":{"lastBranch":15,"lastFunction":17,"lastStatement":75,"seen":{"f:24:16:24:Infinity":0,"b:29:2:29:Infinity:undefined:undefined:undefined:undefined":0,"s:29:2:29:Infinity":0,"s:29:28:29:Infinity":1,"b:32:2:35:Infinity:undefined:undefined:undefined:undefined":1,"s:32:2:35:Infinity":2,"s:34:4:34:Infinity":3,"s:38:32:45:Infinity":4,"f:38:44:38:45":1,"s:39:17:39:Infinity":5,"s:40:4:44:Infinity":6,"b:42:13:42:28:42:28:42:Infinity":2,"b:43:14:43:30:43:30:43:Infinity":3,"s:48:2:48:Infinity":7,"f:48:17:48:18":2,"s:48:27:48:46":8,"b:50:2:53:Infinity:undefined:undefined:undefined:undefined":4,"s:50:2:53:Infinity":9,"s:52:4:52:Infinity":10,"s:56:2:56:Infinity":11,"f:62:9:62:Infinity":3,"s:67:28:67:Infinity":12,"s:68:16:68:Infinity":13,"s:70:2:83:Infinity":14,"s:71:17:71:Infinity":15,"s:72:19:72:Infinity":16,"b:72:19:72:35:72:35:72:Infinity":5,"s:73:18:73:Infinity":17,"b:73:18:73:33:73:33:73:Infinity":6,"s:75:4:80:Infinity":18,"s:82:4:82:Infinity":19,"s:85:2:85:Infinity":20,"f:92:9:92:Infinity":4,"s:98:28:98:Infinity":21,"s:99:31:99:Infinity":22,"s:101:2:118:Infinity":23,"s:102:4:102:Infinity":24,"b:104:4:117:Infinity:undefined:undefined:undefined:undefined":7,"s:104:4:117:Infinity":25,"s:106:24:106:Infinity":26,"f:106:51:106:52":5,"s:106:58:106:66":27,"s:107:23:107:Infinity":28,"f:107:41:107:42":6,"s:107:53:107:68":29,"s:109:6:114:Infinity":30,"f:110:30:110:31":7,"s:110:37:110:41":31,"s:116:6:116:Infinity":32,"b:121:2:131:Infinity:undefined:undefined:undefined:undefined":8,"s:121:2:131:Infinity":33,"s:122:22:122:Infinity":34,"f:122:49:122:50":8,"s:122:56:122:64":35,"s:123:21:123:Infinity":36,"f:123:39:123:40":9,"s:123:51:123:66":37,"s:125:4:130:Infinity":38,"f:126:28:126:29":10,"s:126:35:126:39":39,"s:134:16:134:Infinity":40,"s:135:2:138:Infinity":41,"s:136:4:136:Infinity":42,"s:137:4:137:Infinity":43,"s:140:2:140:Infinity":44,"f:147:9:147:Infinity":11,"s:157:7:157:Infinity":45,"s:159:2:188:Infinity":46,"s:161:17:161:Infinity":47,"s:163:4:178:Infinity":48,"s:164:23:164:Infinity":49,"s:168:26:168:Infinity":50,"b:168:43:168:70:168:70:168:Infinity":9,"s:169:31:169:Infinity":51,"b:169:31:169:53:169:53:169:Infinity":10,"b:171:6:177:Infinity:undefined:undefined:undefined:undefined":11,"s:171:6:177:Infinity":52,"b:171:10:171:37:171:37:171:55":12,"s:172:8:172:Infinity":53,"s:173:8:173:Infinity":54,"s:174:8:174:Infinity":55,"s:175:8:175:Infinity":56,"s:176:8:176:Infinity":57,"b:180:4:187:Infinity:undefined:undefined:undefined:undefined":13,"s:180:4:187:Infinity":58,"s:182:6:186:Infinity":59,"s:191:2:191:Infinity":60,"f:191:12:191:13":12,"s:191:22:191:41":61,"s:194:30:194:Infinity":62,"s:195:16:195:Infinity":63,"s:197:2:206:Infinity":64,"s:198:4:203:Infinity":65,"f:199:27:199:28":13,"s:199:34:199:38":66,"s:205:4:205:Infinity":67,"s:208:2:208:Infinity":68,"f:214:16:214:32":14,"b:215:2:215:Infinity:undefined:undefined:undefined:undefined":14,"s:215:2:215:Infinity":69,"s:215:25:215:Infinity":70,"s:216:18:216:Infinity":71,"s:217:2:217:Infinity":72,"f:223:16:223:31":15,"s:224:2:224:Infinity":73,"f:224:33:224:34":16,"s:224:40:224:47":74}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\graph-builder.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\graph-builder.ts","statementMap":{"0":{"start":{"line":31,"column":2},"end":{"line":31,"column":null}},"1":{"start":{"line":31,"column":39},"end":{"line":31,"column":null}},"2":{"start":{"line":32,"column":20},"end":{"line":32,"column":null}},"3":{"start":{"line":34,"column":2},"end":{"line":34,"column":null}},"4":{"start":{"line":34,"column":40},"end":{"line":34,"column":null}},"5":{"start":{"line":36,"column":14},"end":{"line":36,"column":null}},"6":{"start":{"line":37,"column":15},"end":{"line":37,"column":null}},"7":{"start":{"line":38,"column":2},"end":{"line":38,"column":null}},"8":{"start":{"line":38,"column":72},"end":{"line":38,"column":null}},"9":{"start":{"line":39,"column":2},"end":{"line":39,"column":null}},"10":{"start":{"line":39,"column":75},"end":{"line":39,"column":null}},"11":{"start":{"line":40,"column":2},"end":{"line":40,"column":null}},"12":{"start":{"line":47,"column":2},"end":{"line":55,"column":null}},"13":{"start":{"line":59,"column":27},"end":{"line":59,"column":null}},"14":{"start":{"line":65,"column":13},"end":{"line":65,"column":null}},"15":{"start":{"line":66,"column":13},"end":{"line":66,"column":null}},"16":{"start":{"line":67,"column":13},"end":{"line":67,"column":null}},"17":{"start":{"line":68,"column":13},"end":{"line":68,"column":null}},"18":{"start":{"line":70,"column":13},"end":{"line":70,"column":null}},"19":{"start":{"line":71,"column":13},"end":{"line":71,"column":null}},"20":{"start":{"line":72,"column":13},"end":{"line":72,"column":null}},"21":{"start":{"line":73,"column":13},"end":{"line":73,"column":null}},"22":{"start":{"line":76,"column":2},"end":{"line":76,"column":null}},"23":{"start":{"line":85,"column":2},"end":{"line":104,"column":null}},"24":{"start":{"line":86,"column":41},"end":{"line":86,"column":null}},"25":{"start":{"line":87,"column":19},"end":{"line":87,"column":null}},"26":{"start":{"line":89,"column":4},"end":{"line":98,"column":null}},"27":{"start":{"line":90,"column":6},"end":{"line":90,"column":null}},"28":{"start":{"line":90,"column":27},"end":{"line":90,"column":null}},"29":{"start":{"line":91,"column":6},"end":{"line":97,"column":null}},"30":{"start":{"line":92,"column":21},"end":{"line":92,"column":null}},"31":{"start":{"line":93,"column":8},"end":{"line":96,"column":null}},"32":{"start":{"line":94,"column":10},"end":{"line":94,"column":null}},"33":{"start":{"line":95,"column":10},"end":{"line":95,"column":null}},"34":{"start":{"line":100,"column":4},"end":{"line":100,"column":null}},"35":{"start":{"line":101,"column":4},"end":{"line":103,"column":null}},"36":{"start":{"line":102,"column":6},"end":{"line":102,"column":null}},"37":{"start":{"line":107,"column":16},"end":{"line":107,"column":null}},"38":{"start":{"line":107,"column":43},"end":{"line":107,"column":57}},"39":{"start":{"line":108,"column":62},"end":{"line":110,"column":null}},"40":{"start":{"line":109,"column":12},"end":{"line":109,"column":null}},"41":{"start":{"line":112,"column":2},"end":{"line":120,"column":null}},"42":{"start":{"line":113,"column":17},"end":{"line":113,"column":null}},"43":{"start":{"line":114,"column":4},"end":{"line":114,"column":null}},"44":{"start":{"line":114,"column":15},"end":{"line":114,"column":null}},"45":{"start":{"line":115,"column":29},"end":{"line":115,"column":null}},"46":{"start":{"line":116,"column":4},"end":{"line":116,"column":null}},"47":{"start":{"line":117,"column":4},"end":{"line":119,"column":null}},"48":{"start":{"line":118,"column":6},"end":{"line":118,"column":null}},"49":{"start":{"line":127,"column":13},"end":{"line":127,"column":null}},"50":{"start":{"line":128,"column":13},"end":{"line":128,"column":null}},"51":{"start":{"line":129,"column":13},"end":{"line":129,"column":null}},"52":{"start":{"line":130,"column":13},"end":{"line":130,"column":null}},"53":{"start":{"line":132,"column":13},"end":{"line":132,"column":null}},"54":{"start":{"line":133,"column":13},"end":{"line":133,"column":null}},"55":{"start":{"line":135,"column":2},"end":{"line":135,"column":null}},"56":{"start":{"line":146,"column":35},"end":{"line":146,"column":null}},"57":{"start":{"line":147,"column":16},"end":{"line":147,"column":null}},"58":{"start":{"line":148,"column":32},"end":{"line":148,"column":null}},"59":{"start":{"line":151,"column":21},"end":{"line":151,"column":null}},"60":{"start":{"line":152,"column":19},"end":{"line":152,"column":null}},"61":{"start":{"line":154,"column":2},"end":{"line":157,"column":null}},"62":{"start":{"line":155,"column":4},"end":{"line":155,"column":null}},"63":{"start":{"line":155,"column":40},"end":{"line":155,"column":null}},"64":{"start":{"line":156,"column":4},"end":{"line":156,"column":null}},"65":{"start":{"line":161,"column":18},"end":{"line":161,"column":null}},"66":{"start":{"line":164,"column":19},"end":{"line":164,"column":null}},"67":{"start":{"line":165,"column":2},"end":{"line":171,"column":null}},"68":{"start":{"line":166,"column":22},"end":{"line":166,"column":null}},"69":{"start":{"line":167,"column":28},"end":{"line":167,"column":null}},"70":{"start":{"line":168,"column":4},"end":{"line":168,"column":null}},"71":{"start":{"line":169,"column":4},"end":{"line":169,"column":null}},"72":{"start":{"line":170,"column":4},"end":{"line":170,"column":null}},"73":{"start":{"line":172,"column":2},"end":{"line":178,"column":null}},"74":{"start":{"line":173,"column":23},"end":{"line":173,"column":null}},"75":{"start":{"line":174,"column":29},"end":{"line":174,"column":null}},"76":{"start":{"line":175,"column":4},"end":{"line":175,"column":null}},"77":{"start":{"line":176,"column":4},"end":{"line":176,"column":null}},"78":{"start":{"line":177,"column":4},"end":{"line":177,"column":null}},"79":{"start":{"line":181,"column":8},"end":{"line":181,"column":null}},"80":{"start":{"line":182,"column":28},"end":{"line":182,"column":null}},"81":{"start":{"line":185,"column":38},"end":{"line":185,"column":null}},"82":{"start":{"line":186,"column":28},"end":{"line":186,"column":null}},"83":{"start":{"line":188,"column":2},"end":{"line":191,"column":null}},"84":{"start":{"line":189,"column":4},"end":{"line":189,"column":null}},"85":{"start":{"line":190,"column":4},"end":{"line":190,"column":null}},"86":{"start":{"line":194,"column":22},"end":{"line":194,"column":null}},"87":{"start":{"line":196,"column":2},"end":{"line":210,"column":null}},"88":{"start":{"line":197,"column":4},"end":{"line":197,"column":null}},"89":{"start":{"line":197,"column":45},"end":{"line":197,"column":null}},"90":{"start":{"line":199,"column":37},"end":{"line":207,"column":null}},"91":{"start":{"line":209,"column":4},"end":{"line":209,"column":null}},"92":{"start":{"line":213,"column":2},"end":{"line":213,"column":null}},"93":{"start":{"line":218,"column":22},"end":{"line":218,"column":null}},"94":{"start":{"line":220,"column":2},"end":{"line":237,"column":null}},"95":{"start":{"line":221,"column":40},"end":{"line":221,"column":null}},"96":{"start":{"line":222,"column":19},"end":{"line":222,"column":null}},"97":{"start":{"line":224,"column":4},"end":{"line":231,"column":null}},"98":{"start":{"line":225,"column":6},"end":{"line":230,"column":null}},"99":{"start":{"line":226,"column":8},"end":{"line":229,"column":null}},"100":{"start":{"line":227,"column":10},"end":{"line":227,"column":null}},"101":{"start":{"line":228,"column":10},"end":{"line":228,"column":null}},"102":{"start":{"line":233,"column":4},"end":{"line":236,"column":null}},"103":{"start":{"line":234,"column":6},"end":{"line":234,"column":null}},"104":{"start":{"line":235,"column":6},"end":{"line":235,"column":null}},"105":{"start":{"line":240,"column":2},"end":{"line":247,"column":null}},"106":{"start":{"line":241,"column":23},"end":{"line":243,"column":null}},"107":{"start":{"line":244,"column":4},"end":{"line":246,"column":null}},"108":{"start":{"line":251,"column":19},"end":{"line":251,"column":null}},"109":{"start":{"line":251,"column":52},"end":{"line":251,"column":59}},"110":{"start":{"line":252,"column":41},"end":{"line":252,"column":null}},"111":{"start":{"line":254,"column":2},"end":{"line":256,"column":null}},"112":{"start":{"line":254,"column":15},"end":{"line":254,"column":18}},"113":{"start":{"line":255,"column":4},"end":{"line":255,"column":null}},"114":{"start":{"line":255,"column":44},"end":{"line":255,"column":57}},"115":{"start":{"line":259,"column":2},"end":{"line":288,"column":null}},"116":{"start":{"line":259,"column":19},"end":{"line":259,"column":29}},"117":{"start":{"line":260,"column":4},"end":{"line":287,"column":null}},"118":{"start":{"line":262,"column":59},"end":{"line":266,"column":null}},"119":{"start":{"line":268,"column":23},"end":{"line":268,"column":null}},"120":{"start":{"line":269,"column":24},"end":{"line":269,"column":null}},"121":{"start":{"line":273,"column":30},"end":{"line":273,"column":null}},"122":{"start":{"line":274,"column":6},"end":{"line":277,"column":null}},"123":{"start":{"line":275,"column":8},"end":{"line":275,"column":null}},"124":{"start":{"line":276,"column":8},"end":{"line":276,"column":null}},"125":{"start":{"line":278,"column":6},"end":{"line":280,"column":null}},"126":{"start":{"line":279,"column":8},"end":{"line":279,"column":null}},"127":{"start":{"line":281,"column":6},"end":{"line":281,"column":null}},"128":{"start":{"line":284,"column":6},"end":{"line":284,"column":null}},"129":{"start":{"line":285,"column":6},"end":{"line":286,"column":null}},"130":{"start":{"line":295,"column":31},"end":{"line":295,"column":null}},"131":{"start":{"line":297,"column":2},"end":{"line":354,"column":null}},"132":{"start":{"line":299,"column":4},"end":{"line":301,"column":null}},"133":{"start":{"line":300,"column":6},"end":{"line":300,"column":null}},"134":{"start":{"line":304,"column":4},"end":{"line":306,"column":null}},"135":{"start":{"line":305,"column":6},"end":{"line":305,"column":null}},"136":{"start":{"line":308,"column":18},"end":{"line":308,"column":null}},"137":{"start":{"line":310,"column":4},"end":{"line":353,"column":null}},"138":{"start":{"line":313,"column":28},"end":{"line":313,"column":null}},"139":{"start":{"line":315,"column":6},"end":{"line":334,"column":null}},"140":{"start":{"line":317,"column":8},"end":{"line":317,"column":null}},"141":{"start":{"line":320,"column":8},"end":{"line":333,"column":null}},"142":{"start":{"line":338,"column":28},"end":{"line":338,"column":null}},"143":{"start":{"line":339,"column":6},"end":{"line":352,"column":null}},"144":{"start":{"line":359,"column":16},"end":{"line":359,"column":null}},"145":{"start":{"line":360,"column":2},"end":{"line":423,"column":null}},"146":{"start":{"line":367,"column":4},"end":{"line":375,"column":null}},"147":{"start":{"line":368,"column":6},"end":{"line":368,"column":null}},"148":{"start":{"line":369,"column":4},"end":{"line":375,"column":null}},"149":{"start":{"line":371,"column":6},"end":{"line":371,"column":null}},"150":{"start":{"line":371,"column":43},"end":{"line":371,"column":61}},"151":{"start":{"line":374,"column":6},"end":{"line":374,"column":null}},"152":{"start":{"line":374,"column":58},"end":{"line":374,"column":81}},"153":{"start":{"line":377,"column":4},"end":{"line":422,"column":null}},"154":{"start":{"line":378,"column":6},"end":{"line":378,"column":null}},"155":{"start":{"line":378,"column":45},"end":{"line":378,"column":null}},"156":{"start":{"line":379,"column":6},"end":{"line":379,"column":null}},"157":{"start":{"line":379,"column":84},"end":{"line":379,"column":null}},"158":{"start":{"line":381,"column":21},"end":{"line":381,"column":null}},"159":{"start":{"line":382,"column":21},"end":{"line":382,"column":null}},"160":{"start":{"line":385,"column":6},"end":{"line":387,"column":null}},"161":{"start":{"line":386,"column":8},"end":{"line":386,"column":null}},"162":{"start":{"line":390,"column":26},"end":{"line":390,"column":null}},"163":{"start":{"line":391,"column":26},"end":{"line":391,"column":null}},"164":{"start":{"line":393,"column":6},"end":{"line":396,"column":null}},"165":{"start":{"line":394,"column":25},"end":{"line":394,"column":null}},"166":{"start":{"line":395,"column":8},"end":{"line":395,"column":null}},"167":{"start":{"line":397,"column":6},"end":{"line":400,"column":null}},"168":{"start":{"line":398,"column":25},"end":{"line":398,"column":null}},"169":{"start":{"line":399,"column":8},"end":{"line":399,"column":null}},"170":{"start":{"line":403,"column":6},"end":{"line":409,"column":null}},"171":{"start":{"line":404,"column":26},"end":{"line":404,"column":null}},"172":{"start":{"line":405,"column":26},"end":{"line":405,"column":null}},"173":{"start":{"line":406,"column":8},"end":{"line":408,"column":null}},"174":{"start":{"line":407,"column":10},"end":{"line":407,"column":null}},"175":{"start":{"line":411,"column":25},"end":{"line":411,"column":null}},"176":{"start":{"line":412,"column":25},"end":{"line":412,"column":null}},"177":{"start":{"line":414,"column":6},"end":{"line":421,"column":null}},"178":{"start":{"line":415,"column":8},"end":{"line":417,"column":null}},"179":{"start":{"line":416,"column":10},"end":{"line":416,"column":null}},"180":{"start":{"line":418,"column":8},"end":{"line":420,"column":null}},"181":{"start":{"line":419,"column":10},"end":{"line":419,"column":null}},"182":{"start":{"line":426,"column":2},"end":{"line":468,"column":null}},"183":{"start":{"line":427,"column":10},"end":{"line":427,"column":null}},"184":{"start":{"line":429,"column":4},"end":{"line":467,"column":null}},"185":{"start":{"line":431,"column":26},"end":{"line":431,"column":null}},"186":{"start":{"line":432,"column":30},"end":{"line":432,"column":null}},"187":{"start":{"line":433,"column":6},"end":{"line":436,"column":null}},"188":{"start":{"line":434,"column":25},"end":{"line":434,"column":null}},"189":{"start":{"line":435,"column":8},"end":{"line":435,"column":null}},"190":{"start":{"line":438,"column":25},"end":{"line":438,"column":null}},"191":{"start":{"line":439,"column":6},"end":{"line":439,"column":null}},"192":{"start":{"line":439,"column":23},"end":{"line":439,"column":null}},"193":{"start":{"line":441,"column":6},"end":{"line":466,"column":null}},"194":{"start":{"line":443,"column":28},"end":{"line":443,"column":null}},"195":{"start":{"line":444,"column":32},"end":{"line":444,"column":null}},"196":{"start":{"line":445,"column":8},"end":{"line":448,"column":null}},"197":{"start":{"line":446,"column":27},"end":{"line":446,"column":null}},"198":{"start":{"line":447,"column":10},"end":{"line":447,"column":null}},"199":{"start":{"line":450,"column":27},"end":{"line":450,"column":null}},"200":{"start":{"line":451,"column":8},"end":{"line":451,"column":null}},"201":{"start":{"line":451,"column":25},"end":{"line":451,"column":null}},"202":{"start":{"line":454,"column":8},"end":{"line":458,"column":null}},"203":{"start":{"line":455,"column":28},"end":{"line":455,"column":null}},"204":{"start":{"line":456,"column":28},"end":{"line":456,"column":null}},"205":{"start":{"line":457,"column":10},"end":{"line":457,"column":null}},"206":{"start":{"line":457,"column":39},"end":{"line":457,"column":null}},"207":{"start":{"line":460,"column":8},"end":{"line":462,"column":null}},"208":{"start":{"line":461,"column":10},"end":{"line":461,"column":null}},"209":{"start":{"line":463,"column":8},"end":{"line":465,"column":null}},"210":{"start":{"line":464,"column":10},"end":{"line":464,"column":null}},"211":{"start":{"line":470,"column":2},"end":{"line":481,"column":null}},"212":{"start":{"line":494,"column":22},"end":{"line":496,"column":null}},"213":{"start":{"line":495,"column":17},"end":{"line":495,"column":33}},"214":{"start":{"line":496,"column":36},"end":{"line":496,"column":51}},"215":{"start":{"line":498,"column":2},"end":{"line":500,"column":null}},"216":{"start":{"line":499,"column":4},"end":{"line":499,"column":null}},"217":{"start":{"line":503,"column":8},"end":{"line":503,"column":null}},"218":{"start":{"line":505,"column":2},"end":{"line":553,"column":null}},"219":{"start":{"line":507,"column":10},"end":{"line":507,"column":null}},"220":{"start":{"line":508,"column":21},"end":{"line":508,"column":null}},"221":{"start":{"line":509,"column":20},"end":{"line":509,"column":null}},"222":{"start":{"line":511,"column":4},"end":{"line":529,"column":null}},"223":{"start":{"line":512,"column":6},"end":{"line":512,"column":null}},"224":{"start":{"line":512,"column":30},"end":{"line":512,"column":null}},"225":{"start":{"line":514,"column":26},"end":{"line":514,"column":null}},"226":{"start":{"line":515,"column":24},"end":{"line":515,"column":null}},"227":{"start":{"line":517,"column":6},"end":{"line":520,"column":null}},"228":{"start":{"line":518,"column":8},"end":{"line":518,"column":null}},"229":{"start":{"line":519,"column":8},"end":{"line":519,"column":null}},"230":{"start":{"line":523,"column":6},"end":{"line":525,"column":null}},"231":{"start":{"line":524,"column":8},"end":{"line":524,"column":null}},"232":{"start":{"line":527,"column":6},"end":{"line":527,"column":null}},"233":{"start":{"line":528,"column":6},"end":{"line":528,"column":null}},"234":{"start":{"line":532,"column":4},"end":{"line":534,"column":null}},"235":{"start":{"line":533,"column":6},"end":{"line":533,"column":null}},"236":{"start":{"line":536,"column":4},"end":{"line":536,"column":null}},"237":{"start":{"line":539,"column":19},"end":{"line":539,"column":null}},"238":{"start":{"line":540,"column":22},"end":{"line":540,"column":null}},"239":{"start":{"line":542,"column":4},"end":{"line":545,"column":null}},"240":{"start":{"line":543,"column":6},"end":{"line":543,"column":null}},"241":{"start":{"line":544,"column":6},"end":{"line":544,"column":null}},"242":{"start":{"line":548,"column":4},"end":{"line":550,"column":null}},"243":{"start":{"line":549,"column":6},"end":{"line":549,"column":null}},"244":{"start":{"line":552,"column":4},"end":{"line":552,"column":null}},"245":{"start":{"line":560,"column":16},"end":{"line":560,"column":null}},"246":{"start":{"line":561,"column":2},"end":{"line":563,"column":null}},"247":{"start":{"line":562,"column":4},"end":{"line":562,"column":null}},"248":{"start":{"line":564,"column":2},"end":{"line":564,"column":null}}},"fnMap":{"0":{"name":"isValidIONode","decl":{"start":{"line":30,"column":9},"end":{"line":30,"column":23}},"loc":{"start":{"line":30,"column":59},"end":{"line":41,"column":null}},"line":30},"1":{"name":"ioNodeToLGraphNode","decl":{"start":{"line":46,"column":9},"end":{"line":46,"column":28}},"loc":{"start":{"line":46,"column":89},"end":{"line":56,"column":null}},"line":46},"2":{"name":"groupContainsGroup","decl":{"start":{"line":64,"column":9},"end":{"line":64,"column":28}},"loc":{"start":{"line":64,"column":77},"end":{"line":77,"column":null}},"line":64},"3":{"name":"buildGroupHierarchy","decl":{"start":{"line":83,"column":9},"end":{"line":83,"column":29}},"loc":{"start":{"line":83,"column":64},"end":{"line":121,"column":null}},"line":83},"4":{"name":"(anonymous_4)","decl":{"start":{"line":107,"column":36},"end":{"line":107,"column":37}},"loc":{"start":{"line":107,"column":43},"end":{"line":107,"column":57}},"line":107},"5":{"name":"(anonymous_5)","decl":{"start":{"line":109,"column":4},"end":{"line":109,"column":5}},"loc":{"start":{"line":109,"column":12},"end":{"line":109,"column":null}},"line":109},"6":{"name":"nodeInsideGroup","decl":{"start":{"line":126,"column":9},"end":{"line":126,"column":25}},"loc":{"start":{"line":126,"column":72},"end":{"line":136,"column":null}},"line":126},"7":{"name":"buildLayoutGraph","decl":{"start":{"line":142,"column":16},"end":{"line":142,"column":null}},"loc":{"start":{"line":145,"column":15},"end":{"line":482,"column":null}},"line":145},"8":{"name":"(anonymous_8)","decl":{"start":{"line":251,"column":45},"end":{"line":251,"column":46}},"loc":{"start":{"line":251,"column":52},"end":{"line":251,"column":59}},"line":251},"9":{"name":"(anonymous_9)","decl":{"start":{"line":255,"column":37},"end":{"line":255,"column":38}},"loc":{"start":{"line":255,"column":44},"end":{"line":255,"column":57}},"line":255},"10":{"name":"(anonymous_10)","decl":{"start":{"line":371,"column":30},"end":{"line":371,"column":31}},"loc":{"start":{"line":371,"column":43},"end":{"line":371,"column":61}},"line":371},"11":{"name":"(anonymous_11)","decl":{"start":{"line":374,"column":46},"end":{"line":374,"column":47}},"loc":{"start":{"line":374,"column":58},"end":{"line":374,"column":81}},"line":374},"12":{"name":"calculateGroupMemberDimensions","decl":{"start":{"line":489,"column":9},"end":{"line":489,"column":null}},"loc":{"start":{"line":493,"column":37},"end":{"line":554,"column":null}},"line":493},"13":{"name":"(anonymous_13)","decl":{"start":{"line":495,"column":9},"end":{"line":495,"column":10}},"loc":{"start":{"line":495,"column":17},"end":{"line":495,"column":33}},"line":495},"14":{"name":"(anonymous_14)","decl":{"start":{"line":496,"column":12},"end":{"line":496,"column":13}},"loc":{"start":{"line":496,"column":36},"end":{"line":496,"column":51}},"line":496},"15":{"name":"getTopLevelGroup","decl":{"start":{"line":559,"column":9},"end":{"line":559,"column":26}},"loc":{"start":{"line":559,"column":59},"end":{"line":565,"column":null}},"line":559}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":2},"end":{"line":31,"column":null}},"type":"if","locations":[{"start":{"line":31,"column":2},"end":{"line":31,"column":null}},{"start":{},"end":{}}],"line":31},"1":{"loc":{"start":{"line":31,"column":6},"end":{"line":31,"column":39}},"type":"binary-expr","locations":[{"start":{"line":31,"column":6},"end":{"line":31,"column":14}},{"start":{"line":31,"column":14},"end":{"line":31,"column":39}}],"line":31},"2":{"loc":{"start":{"line":34,"column":2},"end":{"line":34,"column":null}},"type":"if","locations":[{"start":{"line":34,"column":2},"end":{"line":34,"column":null}},{"start":{},"end":{}}],"line":34},"3":{"loc":{"start":{"line":38,"column":2},"end":{"line":38,"column":null}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":38,"column":null}},{"start":{},"end":{}}],"line":38},"4":{"loc":{"start":{"line":38,"column":6},"end":{"line":38,"column":72}},"type":"binary-expr","locations":[{"start":{"line":38,"column":6},"end":{"line":38,"column":14}},{"start":{"line":38,"column":14},"end":{"line":38,"column":44}},{"start":{"line":38,"column":44},"end":{"line":38,"column":72}}],"line":38},"5":{"loc":{"start":{"line":39,"column":2},"end":{"line":39,"column":null}},"type":"if","locations":[{"start":{"line":39,"column":2},"end":{"line":39,"column":null}},{"start":{},"end":{}}],"line":39},"6":{"loc":{"start":{"line":39,"column":6},"end":{"line":39,"column":75}},"type":"binary-expr","locations":[{"start":{"line":39,"column":6},"end":{"line":39,"column":15}},{"start":{"line":39,"column":15},"end":{"line":39,"column":46}},{"start":{"line":39,"column":46},"end":{"line":39,"column":75}}],"line":39},"7":{"loc":{"start":{"line":50,"column":11},"end":{"line":50,"column":null}},"type":"cond-expr","locations":[{"start":{"line":50,"column":30},"end":{"line":50,"column":40}},{"start":{"line":50,"column":40},"end":{"line":50,"column":null}}],"line":50},"8":{"loc":{"start":{"line":76,"column":9},"end":{"line":76,"column":null}},"type":"binary-expr","locations":[{"start":{"line":76,"column":9},"end":{"line":76,"column":21}},{"start":{"line":76,"column":21},"end":{"line":76,"column":33}},{"start":{"line":76,"column":33},"end":{"line":76,"column":55}},{"start":{"line":76,"column":55},"end":{"line":76,"column":null}}],"line":76},"9":{"loc":{"start":{"line":90,"column":6},"end":{"line":90,"column":null}},"type":"if","locations":[{"start":{"line":90,"column":6},"end":{"line":90,"column":null}},{"start":{},"end":{}}],"line":90},"10":{"loc":{"start":{"line":91,"column":6},"end":{"line":97,"column":null}},"type":"if","locations":[{"start":{"line":91,"column":6},"end":{"line":97,"column":null}},{"start":{},"end":{}}],"line":91},"11":{"loc":{"start":{"line":93,"column":8},"end":{"line":96,"column":null}},"type":"if","locations":[{"start":{"line":93,"column":8},"end":{"line":96,"column":null}},{"start":{},"end":{}}],"line":93},"12":{"loc":{"start":{"line":101,"column":4},"end":{"line":103,"column":null}},"type":"if","locations":[{"start":{"line":101,"column":4},"end":{"line":103,"column":null}},{"start":{},"end":{}}],"line":101},"13":{"loc":{"start":{"line":114,"column":4},"end":{"line":114,"column":null}},"type":"if","locations":[{"start":{"line":114,"column":4},"end":{"line":114,"column":null}},{"start":{},"end":{}}],"line":114},"14":{"loc":{"start":{"line":132,"column":13},"end":{"line":132,"column":null}},"type":"binary-expr","locations":[{"start":{"line":132,"column":13},"end":{"line":132,"column":30}},{"start":{"line":132,"column":30},"end":{"line":132,"column":null}}],"line":132},"15":{"loc":{"start":{"line":133,"column":13},"end":{"line":133,"column":null}},"type":"binary-expr","locations":[{"start":{"line":133,"column":13},"end":{"line":133,"column":30}},{"start":{"line":133,"column":30},"end":{"line":133,"column":null}}],"line":133},"16":{"loc":{"start":{"line":135,"column":9},"end":{"line":135,"column":null}},"type":"binary-expr","locations":[{"start":{"line":135,"column":9},"end":{"line":135,"column":21}},{"start":{"line":135,"column":21},"end":{"line":135,"column":37}},{"start":{"line":135,"column":37},"end":{"line":135,"column":49}},{"start":{"line":135,"column":49},"end":{"line":135,"column":null}}],"line":135},"17":{"loc":{"start":{"line":144,"column":2},"end":{"line":144,"column":null}},"type":"default-arg","locations":[{"start":{"line":144,"column":34},"end":{"line":144,"column":null}}],"line":144},"18":{"loc":{"start":{"line":151,"column":21},"end":{"line":151,"column":null}},"type":"binary-expr","locations":[{"start":{"line":151,"column":21},"end":{"line":151,"column":37}},{"start":{"line":151,"column":37},"end":{"line":151,"column":null}}],"line":151},"19":{"loc":{"start":{"line":155,"column":4},"end":{"line":155,"column":null}},"type":"if","locations":[{"start":{"line":155,"column":4},"end":{"line":155,"column":null}},{"start":{},"end":{}}],"line":155},"20":{"loc":{"start":{"line":155,"column":8},"end":{"line":155,"column":40}},"type":"binary-expr","locations":[{"start":{"line":155,"column":8},"end":{"line":155,"column":17}},{"start":{"line":155,"column":17},"end":{"line":155,"column":40}}],"line":155},"21":{"loc":{"start":{"line":165,"column":2},"end":{"line":171,"column":null}},"type":"if","locations":[{"start":{"line":165,"column":2},"end":{"line":171,"column":null}},{"start":{},"end":{}}],"line":165},"22":{"loc":{"start":{"line":172,"column":2},"end":{"line":178,"column":null}},"type":"if","locations":[{"start":{"line":172,"column":2},"end":{"line":178,"column":null}},{"start":{},"end":{}}],"line":172},"23":{"loc":{"start":{"line":188,"column":2},"end":{"line":191,"column":null}},"type":"if","locations":[{"start":{"line":188,"column":2},"end":{"line":191,"column":null}},{"start":{},"end":{}}],"line":188},"24":{"loc":{"start":{"line":188,"column":6},"end":{"line":188,"column":67}},"type":"binary-expr","locations":[{"start":{"line":188,"column":6},"end":{"line":188,"column":37}},{"start":{"line":188,"column":37},"end":{"line":188,"column":67}}],"line":188},"25":{"loc":{"start":{"line":194,"column":22},"end":{"line":194,"column":null}},"type":"binary-expr","locations":[{"start":{"line":194,"column":22},"end":{"line":194,"column":39}},{"start":{"line":194,"column":39},"end":{"line":194,"column":null}}],"line":194},"26":{"loc":{"start":{"line":197,"column":4},"end":{"line":197,"column":null}},"type":"if","locations":[{"start":{"line":197,"column":4},"end":{"line":197,"column":null}},{"start":{},"end":{}}],"line":197},"27":{"loc":{"start":{"line":197,"column":8},"end":{"line":197,"column":45}},"type":"binary-expr","locations":[{"start":{"line":197,"column":8},"end":{"line":197,"column":18}},{"start":{"line":197,"column":18},"end":{"line":197,"column":32}},{"start":{"line":197,"column":32},"end":{"line":197,"column":45}}],"line":197},"28":{"loc":{"start":{"line":225,"column":6},"end":{"line":230,"column":null}},"type":"if","locations":[{"start":{"line":225,"column":6},"end":{"line":230,"column":null}},{"start":{},"end":{}}],"line":225},"29":{"loc":{"start":{"line":226,"column":8},"end":{"line":229,"column":null}},"type":"if","locations":[{"start":{"line":226,"column":8},"end":{"line":229,"column":null}},{"start":{},"end":{}}],"line":226},"30":{"loc":{"start":{"line":233,"column":4},"end":{"line":236,"column":null}},"type":"if","locations":[{"start":{"line":233,"column":4},"end":{"line":236,"column":null}},{"start":{},"end":{}}],"line":233},"31":{"loc":{"start":{"line":241,"column":23},"end":{"line":243,"column":null}},"type":"cond-expr","locations":[{"start":{"line":242,"column":8},"end":{"line":242,"column":null}},{"start":{"line":243,"column":8},"end":{"line":243,"column":null}}],"line":241},"32":{"loc":{"start":{"line":278,"column":6},"end":{"line":280,"column":null}},"type":"if","locations":[{"start":{"line":278,"column":6},"end":{"line":280,"column":null}},{"start":{},"end":{}}],"line":278},"33":{"loc":{"start":{"line":278,"column":10},"end":{"line":278,"column":53}},"type":"binary-expr","locations":[{"start":{"line":278,"column":10},"end":{"line":278,"column":30}},{"start":{"line":278,"column":30},"end":{"line":278,"column":53}}],"line":278},"34":{"loc":{"start":{"line":299,"column":4},"end":{"line":301,"column":null}},"type":"if","locations":[{"start":{"line":299,"column":4},"end":{"line":301,"column":null}},{"start":{},"end":{}}],"line":299},"35":{"loc":{"start":{"line":304,"column":4},"end":{"line":306,"column":null}},"type":"if","locations":[{"start":{"line":304,"column":4},"end":{"line":306,"column":null}},{"start":{},"end":{}}],"line":304},"36":{"loc":{"start":{"line":310,"column":4},"end":{"line":353,"column":null}},"type":"if","locations":[{"start":{"line":310,"column":4},"end":{"line":353,"column":null}},{"start":{"line":336,"column":11},"end":{"line":353,"column":null}}],"line":310},"37":{"loc":{"start":{"line":315,"column":6},"end":{"line":334,"column":null}},"type":"if","locations":[{"start":{"line":315,"column":6},"end":{"line":334,"column":null}},{"start":{},"end":{}}],"line":315},"38":{"loc":{"start":{"line":346,"column":15},"end":{"line":346,"column":null}},"type":"binary-expr","locations":[{"start":{"line":346,"column":15},"end":{"line":346,"column":33}},{"start":{"line":346,"column":33},"end":{"line":346,"column":null}}],"line":346},"39":{"loc":{"start":{"line":347,"column":16},"end":{"line":347,"column":null}},"type":"binary-expr","locations":[{"start":{"line":347,"column":16},"end":{"line":347,"column":34}},{"start":{"line":347,"column":34},"end":{"line":347,"column":null}}],"line":347},"40":{"loc":{"start":{"line":360,"column":2},"end":{"line":423,"column":null}},"type":"if","locations":[{"start":{"line":360,"column":2},"end":{"line":423,"column":null}},{"start":{},"end":{}}],"line":360},"41":{"loc":{"start":{"line":367,"column":4},"end":{"line":375,"column":null}},"type":"if","locations":[{"start":{"line":367,"column":4},"end":{"line":375,"column":null}},{"start":{"line":369,"column":4},"end":{"line":375,"column":null}}],"line":367},"42":{"loc":{"start":{"line":369,"column":4},"end":{"line":375,"column":null}},"type":"if","locations":[{"start":{"line":369,"column":4},"end":{"line":375,"column":null}},{"start":{"line":372,"column":11},"end":{"line":375,"column":null}}],"line":369},"43":{"loc":{"start":{"line":378,"column":6},"end":{"line":378,"column":null}},"type":"if","locations":[{"start":{"line":378,"column":6},"end":{"line":378,"column":null}},{"start":{},"end":{}}],"line":378},"44":{"loc":{"start":{"line":378,"column":10},"end":{"line":378,"column":45}},"type":"binary-expr","locations":[{"start":{"line":378,"column":10},"end":{"line":378,"column":19}},{"start":{"line":378,"column":19},"end":{"line":378,"column":45}}],"line":378},"45":{"loc":{"start":{"line":379,"column":6},"end":{"line":379,"column":null}},"type":"if","locations":[{"start":{"line":379,"column":6},"end":{"line":379,"column":null}},{"start":{},"end":{}}],"line":379},"46":{"loc":{"start":{"line":379,"column":10},"end":{"line":379,"column":84}},"type":"binary-expr","locations":[{"start":{"line":379,"column":10},"end":{"line":379,"column":48}},{"start":{"line":379,"column":48},"end":{"line":379,"column":84}}],"line":379},"47":{"loc":{"start":{"line":385,"column":6},"end":{"line":387,"column":null}},"type":"if","locations":[{"start":{"line":385,"column":6},"end":{"line":387,"column":null}},{"start":{},"end":{}}],"line":385},"48":{"loc":{"start":{"line":385,"column":10},"end":{"line":385,"column":82}},"type":"binary-expr","locations":[{"start":{"line":385,"column":10},"end":{"line":385,"column":47}},{"start":{"line":385,"column":47},"end":{"line":385,"column":82}}],"line":385},"49":{"loc":{"start":{"line":393,"column":6},"end":{"line":396,"column":null}},"type":"if","locations":[{"start":{"line":393,"column":6},"end":{"line":396,"column":null}},{"start":{},"end":{}}],"line":393},"50":{"loc":{"start":{"line":397,"column":6},"end":{"line":400,"column":null}},"type":"if","locations":[{"start":{"line":397,"column":6},"end":{"line":400,"column":null}},{"start":{},"end":{}}],"line":397},"51":{"loc":{"start":{"line":403,"column":6},"end":{"line":409,"column":null}},"type":"if","locations":[{"start":{"line":403,"column":6},"end":{"line":409,"column":null}},{"start":{},"end":{}}],"line":403},"52":{"loc":{"start":{"line":403,"column":10},"end":{"line":403,"column":38}},"type":"binary-expr","locations":[{"start":{"line":403,"column":10},"end":{"line":403,"column":25}},{"start":{"line":403,"column":25},"end":{"line":403,"column":38}}],"line":403},"53":{"loc":{"start":{"line":406,"column":8},"end":{"line":408,"column":null}},"type":"if","locations":[{"start":{"line":406,"column":8},"end":{"line":408,"column":null}},{"start":{},"end":{}}],"line":406},"54":{"loc":{"start":{"line":414,"column":6},"end":{"line":421,"column":null}},"type":"if","locations":[{"start":{"line":414,"column":6},"end":{"line":421,"column":null}},{"start":{},"end":{}}],"line":414},"55":{"loc":{"start":{"line":414,"column":10},"end":{"line":414,"column":36}},"type":"binary-expr","locations":[{"start":{"line":414,"column":10},"end":{"line":414,"column":24}},{"start":{"line":414,"column":24},"end":{"line":414,"column":36}}],"line":414},"56":{"loc":{"start":{"line":415,"column":8},"end":{"line":417,"column":null}},"type":"if","locations":[{"start":{"line":415,"column":8},"end":{"line":417,"column":null}},{"start":{},"end":{}}],"line":415},"57":{"loc":{"start":{"line":418,"column":8},"end":{"line":420,"column":null}},"type":"if","locations":[{"start":{"line":418,"column":8},"end":{"line":420,"column":null}},{"start":{},"end":{}}],"line":418},"58":{"loc":{"start":{"line":426,"column":2},"end":{"line":468,"column":null}},"type":"if","locations":[{"start":{"line":426,"column":2},"end":{"line":468,"column":null}},{"start":{},"end":{}}],"line":426},"59":{"loc":{"start":{"line":433,"column":6},"end":{"line":436,"column":null}},"type":"if","locations":[{"start":{"line":433,"column":6},"end":{"line":436,"column":null}},{"start":{},"end":{}}],"line":433},"60":{"loc":{"start":{"line":439,"column":6},"end":{"line":439,"column":null}},"type":"if","locations":[{"start":{"line":439,"column":6},"end":{"line":439,"column":null}},{"start":{},"end":{}}],"line":439},"61":{"loc":{"start":{"line":445,"column":8},"end":{"line":448,"column":null}},"type":"if","locations":[{"start":{"line":445,"column":8},"end":{"line":448,"column":null}},{"start":{},"end":{}}],"line":445},"62":{"loc":{"start":{"line":451,"column":8},"end":{"line":451,"column":null}},"type":"if","locations":[{"start":{"line":451,"column":8},"end":{"line":451,"column":null}},{"start":{},"end":{}}],"line":451},"63":{"loc":{"start":{"line":454,"column":8},"end":{"line":458,"column":null}},"type":"if","locations":[{"start":{"line":454,"column":8},"end":{"line":458,"column":null}},{"start":{},"end":{}}],"line":454},"64":{"loc":{"start":{"line":454,"column":12},"end":{"line":454,"column":40}},"type":"binary-expr","locations":[{"start":{"line":454,"column":12},"end":{"line":454,"column":27}},{"start":{"line":454,"column":27},"end":{"line":454,"column":40}}],"line":454},"65":{"loc":{"start":{"line":457,"column":10},"end":{"line":457,"column":null}},"type":"if","locations":[{"start":{"line":457,"column":10},"end":{"line":457,"column":null}},{"start":{},"end":{}}],"line":457},"66":{"loc":{"start":{"line":460,"column":8},"end":{"line":462,"column":null}},"type":"if","locations":[{"start":{"line":460,"column":8},"end":{"line":462,"column":null}},{"start":{},"end":{}}],"line":460},"67":{"loc":{"start":{"line":463,"column":8},"end":{"line":465,"column":null}},"type":"if","locations":[{"start":{"line":463,"column":8},"end":{"line":465,"column":null}},{"start":{},"end":{}}],"line":463},"68":{"loc":{"start":{"line":498,"column":2},"end":{"line":500,"column":null}},"type":"if","locations":[{"start":{"line":498,"column":2},"end":{"line":500,"column":null}},{"start":{},"end":{}}],"line":498},"69":{"loc":{"start":{"line":505,"column":2},"end":{"line":553,"column":null}},"type":"if","locations":[{"start":{"line":505,"column":2},"end":{"line":553,"column":null}},{"start":{"line":537,"column":9},"end":{"line":553,"column":null}}],"line":505},"70":{"loc":{"start":{"line":512,"column":6},"end":{"line":512,"column":null}},"type":"if","locations":[{"start":{"line":512,"column":6},"end":{"line":512,"column":null}},{"start":{},"end":{}}],"line":512},"71":{"loc":{"start":{"line":518,"column":48},"end":{"line":518,"column":69}},"type":"binary-expr","locations":[{"start":{"line":518,"column":48},"end":{"line":518,"column":66}},{"start":{"line":518,"column":66},"end":{"line":518,"column":69}}],"line":518},"72":{"loc":{"start":{"line":519,"column":24},"end":{"line":519,"column":49}},"type":"binary-expr","locations":[{"start":{"line":519,"column":24},"end":{"line":519,"column":42}},{"start":{"line":519,"column":42},"end":{"line":519,"column":49}}],"line":519},"73":{"loc":{"start":{"line":523,"column":6},"end":{"line":525,"column":null}},"type":"if","locations":[{"start":{"line":523,"column":6},"end":{"line":525,"column":null}},{"start":{},"end":{}}],"line":523},"74":{"loc":{"start":{"line":532,"column":4},"end":{"line":534,"column":null}},"type":"if","locations":[{"start":{"line":532,"column":4},"end":{"line":534,"column":null}},{"start":{},"end":{}}],"line":532},"75":{"loc":{"start":{"line":543,"column":36},"end":{"line":543,"column":57}},"type":"binary-expr","locations":[{"start":{"line":543,"column":36},"end":{"line":543,"column":54}},{"start":{"line":543,"column":54},"end":{"line":543,"column":57}}],"line":543},"76":{"loc":{"start":{"line":544,"column":22},"end":{"line":544,"column":47}},"type":"binary-expr","locations":[{"start":{"line":544,"column":22},"end":{"line":544,"column":40}},{"start":{"line":544,"column":40},"end":{"line":544,"column":47}}],"line":544},"77":{"loc":{"start":{"line":548,"column":4},"end":{"line":550,"column":null}},"type":"if","locations":[{"start":{"line":548,"column":4},"end":{"line":550,"column":null}},{"start":{},"end":{}}],"line":548}},"s":{"0":60,"1":60,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":1,"14":364,"15":364,"16":364,"17":364,"18":364,"19":364,"20":364,"21":364,"22":364,"23":30,"24":98,"25":98,"26":98,"27":462,"28":98,"29":364,"30":28,"31":28,"32":28,"33":28,"34":98,"35":98,"36":28,"37":30,"38":98,"39":30,"40":70,"41":30,"42":98,"43":98,"44":0,"45":98,"46":98,"47":98,"48":28,"49":1533,"50":1533,"51":1533,"52":1533,"53":1533,"54":1533,"55":1533,"56":30,"57":30,"58":30,"59":30,"60":30,"61":30,"62":374,"63":0,"64":374,"65":30,"66":30,"67":30,"68":0,"69":0,"70":0,"71":0,"72":0,"73":30,"74":0,"75":0,"76":0,"77":0,"78":0,"79":30,"80":30,"81":30,"82":30,"83":30,"84":0,"85":0,"86":30,"87":30,"88":98,"89":0,"90":98,"91":98,"92":30,"93":30,"94":30,"95":374,"96":374,"97":374,"98":1533,"99":203,"100":189,"101":189,"102":374,"103":175,"104":175,"105":30,"106":98,"107":98,"108":30,"109":98,"110":30,"111":30,"112":30,"113":44,"114":161,"115":44,"116":44,"117":44,"118":98,"119":98,"120":98,"121":98,"122":98,"123":28,"124":28,"125":98,"126":14,"127":98,"128":98,"129":98,"130":30,"131":30,"132":374,"133":73,"134":301,"135":0,"136":301,"137":301,"138":154,"139":154,"140":70,"141":70,"142":147,"143":147,"144":30,"145":30,"146":30,"147":30,"148":0,"149":0,"150":0,"151":0,"152":0,"153":30,"154":420,"155":0,"156":420,"157":0,"158":420,"159":420,"160":420,"161":0,"162":420,"163":420,"164":420,"165":231,"166":231,"167":420,"168":140,"169":140,"170":420,"171":98,"172":98,"173":98,"174":42,"175":378,"176":378,"177":378,"178":378,"179":280,"180":378,"181":280,"182":30,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":30,"212":98,"213":175,"214":175,"215":98,"216":7,"217":91,"218":91,"219":21,"220":21,"221":21,"222":21,"223":49,"224":0,"225":49,"226":49,"227":49,"228":77,"229":77,"230":49,"231":49,"232":49,"233":49,"234":21,"235":21,"236":21,"237":70,"238":70,"239":70,"240":98,"241":98,"242":70,"243":70,"244":70,"245":721,"246":721,"247":63,"248":721},"f":{"0":60,"1":0,"2":364,"3":30,"4":98,"5":70,"6":1533,"7":30,"8":98,"9":161,"10":0,"11":0,"12":98,"13":175,"14":175,"15":721},"b":{"0":[60,0],"1":[60,0],"2":[0,0],"3":[0,0],"4":[0,0,0],"5":[0,0],"6":[0,0,0],"7":[0,0],"8":[364,204,131,42],"9":[98,364],"10":[28,336],"11":[28,0],"12":[28,70],"13":[0,98],"14":[1533,0],"15":[1533,0],"16":[1533,1036,357,293],"17":[30],"18":[30,0],"19":[0,374],"20":[374,374],"21":[0,30],"22":[0,30],"23":[0,30],"24":[30,30],"25":[30,0],"26":[0,98],"27":[98,98,98],"28":[203,1330],"29":[189,14],"30":[175,199],"31":[28,70],"32":[14,84],"33":[98,91],"34":[73,301],"35":[0,301],"36":[154,147],"37":[70,84],"38":[147,0],"39":[147,0],"40":[30,0],"41":[30,0],"42":[0,0],"43":[0,420],"44":[420,420],"45":[0,420],"46":[420,420],"47":[0,420],"48":[420,420],"49":[231,189],"50":[140,280],"51":[98,322],"52":[420,231],"53":[42,56],"54":[378,0],"55":[378,378],"56":[280,98],"57":[280,98],"58":[0,30],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[7,91],"69":[21,70],"70":[0,49],"71":[77,0],"72":[77,0],"73":[49,0],"74":[21,0],"75":[98,0],"76":[98,0],"77":[70,0]},"meta":{"lastBranch":78,"lastFunction":16,"lastStatement":249,"seen":{"f:30:9:30:23":0,"b:31:2:31:Infinity:undefined:undefined:undefined:undefined":0,"s:31:2:31:Infinity":0,"b:31:6:31:14:31:14:31:39":1,"s:31:39:31:Infinity":1,"s:32:20:32:Infinity":2,"b:34:2:34:Infinity:undefined:undefined:undefined:undefined":2,"s:34:2:34:Infinity":3,"s:34:40:34:Infinity":4,"s:36:14:36:Infinity":5,"s:37:15:37:Infinity":6,"b:38:2:38:Infinity:undefined:undefined:undefined:undefined":3,"s:38:2:38:Infinity":7,"b:38:6:38:14:38:14:38:44:38:44:38:72":4,"s:38:72:38:Infinity":8,"b:39:2:39:Infinity:undefined:undefined:undefined:undefined":5,"s:39:2:39:Infinity":9,"b:39:6:39:15:39:15:39:46:39:46:39:75":6,"s:39:75:39:Infinity":10,"s:40:2:40:Infinity":11,"f:46:9:46:28":1,"s:47:2:55:Infinity":12,"b:50:30:50:40:50:40:50:Infinity":7,"s:59:27:59:Infinity":13,"f:64:9:64:28":2,"s:65:13:65:Infinity":14,"s:66:13:66:Infinity":15,"s:67:13:67:Infinity":16,"s:68:13:68:Infinity":17,"s:70:13:70:Infinity":18,"s:71:13:71:Infinity":19,"s:72:13:72:Infinity":20,"s:73:13:73:Infinity":21,"s:76:2:76:Infinity":22,"b:76:9:76:21:76:21:76:33:76:33:76:55:76:55:76:Infinity":8,"f:83:9:83:29":3,"s:85:2:104:Infinity":23,"s:86:41:86:Infinity":24,"s:87:19:87:Infinity":25,"s:89:4:98:Infinity":26,"b:90:6:90:Infinity:undefined:undefined:undefined:undefined":9,"s:90:6:90:Infinity":27,"s:90:27:90:Infinity":28,"b:91:6:97:Infinity:undefined:undefined:undefined:undefined":10,"s:91:6:97:Infinity":29,"s:92:21:92:Infinity":30,"b:93:8:96:Infinity:undefined:undefined:undefined:undefined":11,"s:93:8:96:Infinity":31,"s:94:10:94:Infinity":32,"s:95:10:95:Infinity":33,"s:100:4:100:Infinity":34,"b:101:4:103:Infinity:undefined:undefined:undefined:undefined":12,"s:101:4:103:Infinity":35,"s:102:6:102:Infinity":36,"s:107:16:107:Infinity":37,"f:107:36:107:37":4,"s:107:43:107:57":38,"s:108:62:110:Infinity":39,"f:109:4:109:5":5,"s:109:12:109:Infinity":40,"s:112:2:120:Infinity":41,"s:113:17:113:Infinity":42,"b:114:4:114:Infinity:undefined:undefined:undefined:undefined":13,"s:114:4:114:Infinity":43,"s:114:15:114:Infinity":44,"s:115:29:115:Infinity":45,"s:116:4:116:Infinity":46,"s:117:4:119:Infinity":47,"s:118:6:118:Infinity":48,"f:126:9:126:25":6,"s:127:13:127:Infinity":49,"s:128:13:128:Infinity":50,"s:129:13:129:Infinity":51,"s:130:13:130:Infinity":52,"s:132:13:132:Infinity":53,"b:132:13:132:30:132:30:132:Infinity":14,"s:133:13:133:Infinity":54,"b:133:13:133:30:133:30:133:Infinity":15,"s:135:2:135:Infinity":55,"b:135:9:135:21:135:21:135:37:135:37:135:49:135:49:135:Infinity":16,"f:142:16:142:Infinity":7,"b:144:34:144:Infinity":17,"s:146:35:146:Infinity":56,"s:147:16:147:Infinity":57,"s:148:32:148:Infinity":58,"s:151:21:151:Infinity":59,"b:151:21:151:37:151:37:151:Infinity":18,"s:152:19:152:Infinity":60,"s:154:2:157:Infinity":61,"b:155:4:155:Infinity:undefined:undefined:undefined:undefined":19,"s:155:4:155:Infinity":62,"b:155:8:155:17:155:17:155:40":20,"s:155:40:155:Infinity":63,"s:156:4:156:Infinity":64,"s:161:18:161:Infinity":65,"s:164:19:164:Infinity":66,"b:165:2:171:Infinity:undefined:undefined:undefined:undefined":21,"s:165:2:171:Infinity":67,"s:166:22:166:Infinity":68,"s:167:28:167:Infinity":69,"s:168:4:168:Infinity":70,"s:169:4:169:Infinity":71,"s:170:4:170:Infinity":72,"b:172:2:178:Infinity:undefined:undefined:undefined:undefined":22,"s:172:2:178:Infinity":73,"s:173:23:173:Infinity":74,"s:174:29:174:Infinity":75,"s:175:4:175:Infinity":76,"s:176:4:176:Infinity":77,"s:177:4:177:Infinity":78,"s:181:8:181:Infinity":79,"s:182:28:182:Infinity":80,"s:185:38:185:Infinity":81,"s:186:28:186:Infinity":82,"b:188:2:191:Infinity:undefined:undefined:undefined:undefined":23,"s:188:2:191:Infinity":83,"b:188:6:188:37:188:37:188:67":24,"s:189:4:189:Infinity":84,"s:190:4:190:Infinity":85,"s:194:22:194:Infinity":86,"b:194:22:194:39:194:39:194:Infinity":25,"s:196:2:210:Infinity":87,"b:197:4:197:Infinity:undefined:undefined:undefined:undefined":26,"s:197:4:197:Infinity":88,"b:197:8:197:18:197:18:197:32:197:32:197:45":27,"s:197:45:197:Infinity":89,"s:199:37:207:Infinity":90,"s:209:4:209:Infinity":91,"s:213:2:213:Infinity":92,"s:218:22:218:Infinity":93,"s:220:2:237:Infinity":94,"s:221:40:221:Infinity":95,"s:222:19:222:Infinity":96,"s:224:4:231:Infinity":97,"b:225:6:230:Infinity:undefined:undefined:undefined:undefined":28,"s:225:6:230:Infinity":98,"b:226:8:229:Infinity:undefined:undefined:undefined:undefined":29,"s:226:8:229:Infinity":99,"s:227:10:227:Infinity":100,"s:228:10:228:Infinity":101,"b:233:4:236:Infinity:undefined:undefined:undefined:undefined":30,"s:233:4:236:Infinity":102,"s:234:6:234:Infinity":103,"s:235:6:235:Infinity":104,"s:240:2:247:Infinity":105,"s:241:23:243:Infinity":106,"b:242:8:242:Infinity:243:8:243:Infinity":31,"s:244:4:246:Infinity":107,"s:251:19:251:Infinity":108,"f:251:45:251:46":8,"s:251:52:251:59":109,"s:252:41:252:Infinity":110,"s:254:2:256:Infinity":111,"s:254:15:254:18":112,"s:255:4:255:Infinity":113,"f:255:37:255:38":9,"s:255:44:255:57":114,"s:259:2:288:Infinity":115,"s:259:19:259:29":116,"s:260:4:287:Infinity":117,"s:262:59:266:Infinity":118,"s:268:23:268:Infinity":119,"s:269:24:269:Infinity":120,"s:273:30:273:Infinity":121,"s:274:6:277:Infinity":122,"s:275:8:275:Infinity":123,"s:276:8:276:Infinity":124,"b:278:6:280:Infinity:undefined:undefined:undefined:undefined":32,"s:278:6:280:Infinity":125,"b:278:10:278:30:278:30:278:53":33,"s:279:8:279:Infinity":126,"s:281:6:281:Infinity":127,"s:284:6:284:Infinity":128,"s:285:6:286:Infinity":129,"s:295:31:295:Infinity":130,"s:297:2:354:Infinity":131,"b:299:4:301:Infinity:undefined:undefined:undefined:undefined":34,"s:299:4:301:Infinity":132,"s:300:6:300:Infinity":133,"b:304:4:306:Infinity:undefined:undefined:undefined:undefined":35,"s:304:4:306:Infinity":134,"s:305:6:305:Infinity":135,"s:308:18:308:Infinity":136,"b:310:4:353:Infinity:336:11:353:Infinity":36,"s:310:4:353:Infinity":137,"s:313:28:313:Infinity":138,"b:315:6:334:Infinity:undefined:undefined:undefined:undefined":37,"s:315:6:334:Infinity":139,"s:317:8:317:Infinity":140,"s:320:8:333:Infinity":141,"s:338:28:338:Infinity":142,"s:339:6:352:Infinity":143,"b:346:15:346:33:346:33:346:Infinity":38,"b:347:16:347:34:347:34:347:Infinity":39,"s:359:16:359:Infinity":144,"b:360:2:423:Infinity:undefined:undefined:undefined:undefined":40,"s:360:2:423:Infinity":145,"b:367:4:375:Infinity:369:4:375:Infinity":41,"s:367:4:375:Infinity":146,"s:368:6:368:Infinity":147,"b:369:4:375:Infinity:372:11:375:Infinity":42,"s:369:4:375:Infinity":148,"s:371:6:371:Infinity":149,"f:371:30:371:31":10,"s:371:43:371:61":150,"s:374:6:374:Infinity":151,"f:374:46:374:47":11,"s:374:58:374:81":152,"s:377:4:422:Infinity":153,"b:378:6:378:Infinity:undefined:undefined:undefined:undefined":43,"s:378:6:378:Infinity":154,"b:378:10:378:19:378:19:378:45":44,"s:378:45:378:Infinity":155,"b:379:6:379:Infinity:undefined:undefined:undefined:undefined":45,"s:379:6:379:Infinity":156,"b:379:10:379:48:379:48:379:84":46,"s:379:84:379:Infinity":157,"s:381:21:381:Infinity":158,"s:382:21:382:Infinity":159,"b:385:6:387:Infinity:undefined:undefined:undefined:undefined":47,"s:385:6:387:Infinity":160,"b:385:10:385:47:385:47:385:82":48,"s:386:8:386:Infinity":161,"s:390:26:390:Infinity":162,"s:391:26:391:Infinity":163,"b:393:6:396:Infinity:undefined:undefined:undefined:undefined":49,"s:393:6:396:Infinity":164,"s:394:25:394:Infinity":165,"s:395:8:395:Infinity":166,"b:397:6:400:Infinity:undefined:undefined:undefined:undefined":50,"s:397:6:400:Infinity":167,"s:398:25:398:Infinity":168,"s:399:8:399:Infinity":169,"b:403:6:409:Infinity:undefined:undefined:undefined:undefined":51,"s:403:6:409:Infinity":170,"b:403:10:403:25:403:25:403:38":52,"s:404:26:404:Infinity":171,"s:405:26:405:Infinity":172,"b:406:8:408:Infinity:undefined:undefined:undefined:undefined":53,"s:406:8:408:Infinity":173,"s:407:10:407:Infinity":174,"s:411:25:411:Infinity":175,"s:412:25:412:Infinity":176,"b:414:6:421:Infinity:undefined:undefined:undefined:undefined":54,"s:414:6:421:Infinity":177,"b:414:10:414:24:414:24:414:36":55,"b:415:8:417:Infinity:undefined:undefined:undefined:undefined":56,"s:415:8:417:Infinity":178,"s:416:10:416:Infinity":179,"b:418:8:420:Infinity:undefined:undefined:undefined:undefined":57,"s:418:8:420:Infinity":180,"s:419:10:419:Infinity":181,"b:426:2:468:Infinity:undefined:undefined:undefined:undefined":58,"s:426:2:468:Infinity":182,"s:427:10:427:Infinity":183,"s:429:4:467:Infinity":184,"s:431:26:431:Infinity":185,"s:432:30:432:Infinity":186,"b:433:6:436:Infinity:undefined:undefined:undefined:undefined":59,"s:433:6:436:Infinity":187,"s:434:25:434:Infinity":188,"s:435:8:435:Infinity":189,"s:438:25:438:Infinity":190,"b:439:6:439:Infinity:undefined:undefined:undefined:undefined":60,"s:439:6:439:Infinity":191,"s:439:23:439:Infinity":192,"s:441:6:466:Infinity":193,"s:443:28:443:Infinity":194,"s:444:32:444:Infinity":195,"b:445:8:448:Infinity:undefined:undefined:undefined:undefined":61,"s:445:8:448:Infinity":196,"s:446:27:446:Infinity":197,"s:447:10:447:Infinity":198,"s:450:27:450:Infinity":199,"b:451:8:451:Infinity:undefined:undefined:undefined:undefined":62,"s:451:8:451:Infinity":200,"s:451:25:451:Infinity":201,"b:454:8:458:Infinity:undefined:undefined:undefined:undefined":63,"s:454:8:458:Infinity":202,"b:454:12:454:27:454:27:454:40":64,"s:455:28:455:Infinity":203,"s:456:28:456:Infinity":204,"b:457:10:457:Infinity:undefined:undefined:undefined:undefined":65,"s:457:10:457:Infinity":205,"s:457:39:457:Infinity":206,"b:460:8:462:Infinity:undefined:undefined:undefined:undefined":66,"s:460:8:462:Infinity":207,"s:461:10:461:Infinity":208,"b:463:8:465:Infinity:undefined:undefined:undefined:undefined":67,"s:463:8:465:Infinity":209,"s:464:10:464:Infinity":210,"s:470:2:481:Infinity":211,"f:489:9:489:Infinity":12,"s:494:22:496:Infinity":212,"f:495:9:495:10":13,"s:495:17:495:33":213,"f:496:12:496:13":14,"s:496:36:496:51":214,"b:498:2:500:Infinity:undefined:undefined:undefined:undefined":68,"s:498:2:500:Infinity":215,"s:499:4:499:Infinity":216,"s:503:8:503:Infinity":217,"b:505:2:553:Infinity:537:9:553:Infinity":69,"s:505:2:553:Infinity":218,"s:507:10:507:Infinity":219,"s:508:21:508:Infinity":220,"s:509:20:509:Infinity":221,"s:511:4:529:Infinity":222,"b:512:6:512:Infinity:undefined:undefined:undefined:undefined":70,"s:512:6:512:Infinity":223,"s:512:30:512:Infinity":224,"s:514:26:514:Infinity":225,"s:515:24:515:Infinity":226,"s:517:6:520:Infinity":227,"s:518:8:518:Infinity":228,"b:518:48:518:66:518:66:518:69":71,"s:519:8:519:Infinity":229,"b:519:24:519:42:519:42:519:49":72,"b:523:6:525:Infinity:undefined:undefined:undefined:undefined":73,"s:523:6:525:Infinity":230,"s:524:8:524:Infinity":231,"s:527:6:527:Infinity":232,"s:528:6:528:Infinity":233,"b:532:4:534:Infinity:undefined:undefined:undefined:undefined":74,"s:532:4:534:Infinity":234,"s:533:6:533:Infinity":235,"s:536:4:536:Infinity":236,"s:539:19:539:Infinity":237,"s:540:22:540:Infinity":238,"s:542:4:545:Infinity":239,"s:543:6:543:Infinity":240,"b:543:36:543:54:543:54:543:57":75,"s:544:6:544:Infinity":241,"b:544:22:544:40:544:40:544:47":76,"b:548:4:550:Infinity:undefined:undefined:undefined:undefined":77,"s:548:4:550:Infinity":242,"s:549:6:549:Infinity":243,"s:552:4:552:Infinity":244,"f:559:9:559:26":15,"s:560:16:560:Infinity":245,"s:561:2:563:Infinity":246,"s:562:4:562:Infinity":247,"s:564:2:564:Infinity":248}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\groups.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\groups.ts","statementMap":{"0":{"start":{"line":5,"column":27},"end":{"line":5,"column":null}},"1":{"start":{"line":12,"column":46},"end":{"line":12,"column":null}},"2":{"start":{"line":14,"column":2},"end":{"line":17,"column":null}},"3":{"start":{"line":15,"column":4},"end":{"line":15,"column":null}},"4":{"start":{"line":16,"column":4},"end":{"line":16,"column":null}},"5":{"start":{"line":19,"column":21},"end":{"line":19,"column":null}},"6":{"start":{"line":20,"column":19},"end":{"line":20,"column":null}},"7":{"start":{"line":23,"column":2},"end":{"line":91,"column":null}},"8":{"start":{"line":23,"column":19},"end":{"line":23,"column":29}},"9":{"start":{"line":24,"column":4},"end":{"line":90,"column":null}},"10":{"start":{"line":25,"column":48},"end":{"line":25,"column":null}},"11":{"start":{"line":28,"column":6},"end":{"line":31,"column":null}},"12":{"start":{"line":29,"column":8},"end":{"line":29,"column":null}},"13":{"start":{"line":30,"column":8},"end":{"line":30,"column":null}},"14":{"start":{"line":34,"column":17},"end":{"line":34,"column":null}},"15":{"start":{"line":35,"column":17},"end":{"line":35,"column":null}},"16":{"start":{"line":36,"column":17},"end":{"line":36,"column":null}},"17":{"start":{"line":37,"column":17},"end":{"line":37,"column":null}},"18":{"start":{"line":40,"column":6},"end":{"line":53,"column":null}},"19":{"start":{"line":41,"column":21},"end":{"line":41,"column":null}},"20":{"start":{"line":42,"column":8},"end":{"line":42,"column":null}},"21":{"start":{"line":42,"column":19},"end":{"line":42,"column":null}},"22":{"start":{"line":44,"column":19},"end":{"line":44,"column":null}},"23":{"start":{"line":45,"column":19},"end":{"line":45,"column":null}},"24":{"start":{"line":46,"column":19},"end":{"line":46,"column":null}},"25":{"start":{"line":47,"column":19},"end":{"line":47,"column":null}},"26":{"start":{"line":49,"column":8},"end":{"line":49,"column":null}},"27":{"start":{"line":50,"column":8},"end":{"line":50,"column":null}},"28":{"start":{"line":51,"column":8},"end":{"line":51,"column":null}},"29":{"start":{"line":52,"column":8},"end":{"line":52,"column":null}},"30":{"start":{"line":56,"column":6},"end":{"line":67,"column":null}},"31":{"start":{"line":57,"column":19},"end":{"line":57,"column":null}},"32":{"start":{"line":58,"column":19},"end":{"line":58,"column":null}},"33":{"start":{"line":59,"column":19},"end":{"line":59,"column":null}},"34":{"start":{"line":60,"column":19},"end":{"line":60,"column":null}},"35":{"start":{"line":61,"column":19},"end":{"line":61,"column":null}},"36":{"start":{"line":63,"column":8},"end":{"line":63,"column":null}},"37":{"start":{"line":64,"column":8},"end":{"line":64,"column":null}},"38":{"start":{"line":65,"column":8},"end":{"line":65,"column":null}},"39":{"start":{"line":66,"column":8},"end":{"line":66,"column":null}},"40":{"start":{"line":70,"column":6},"end":{"line":73,"column":null}},"41":{"start":{"line":71,"column":8},"end":{"line":71,"column":null}},"42":{"start":{"line":72,"column":8},"end":{"line":72,"column":null}},"43":{"start":{"line":76,"column":22},"end":{"line":76,"column":null}},"44":{"start":{"line":77,"column":19},"end":{"line":77,"column":null}},"45":{"start":{"line":78,"column":19},"end":{"line":78,"column":null}},"46":{"start":{"line":79,"column":23},"end":{"line":79,"column":null}},"47":{"start":{"line":80,"column":24},"end":{"line":80,"column":null}},"48":{"start":{"line":82,"column":6},"end":{"line":84,"column":null}},"49":{"start":{"line":87,"column":6},"end":{"line":87,"column":null}},"50":{"start":{"line":89,"column":6},"end":{"line":89,"column":null}},"51":{"start":{"line":93,"column":2},"end":{"line":93,"column":null}},"52":{"start":{"line":107,"column":2},"end":{"line":110,"column":null}},"53":{"start":{"line":108,"column":4},"end":{"line":108,"column":null}},"54":{"start":{"line":109,"column":4},"end":{"line":109,"column":null}},"55":{"start":{"line":111,"column":2},"end":{"line":114,"column":null}},"56":{"start":{"line":112,"column":4},"end":{"line":112,"column":null}},"57":{"start":{"line":113,"column":4},"end":{"line":113,"column":null}},"58":{"start":{"line":117,"column":12},"end":{"line":117,"column":null}},"59":{"start":{"line":121,"column":2},"end":{"line":124,"column":null}},"60":{"start":{"line":122,"column":4},"end":{"line":122,"column":null}},"61":{"start":{"line":123,"column":4},"end":{"line":123,"column":null}},"62":{"start":{"line":125,"column":2},"end":{"line":128,"column":null}},"63":{"start":{"line":126,"column":4},"end":{"line":126,"column":null}},"64":{"start":{"line":127,"column":4},"end":{"line":127,"column":null}},"65":{"start":{"line":131,"column":2},"end":{"line":137,"column":null}},"66":{"start":{"line":132,"column":14},"end":{"line":132,"column":null}},"67":{"start":{"line":133,"column":4},"end":{"line":133,"column":null}},"68":{"start":{"line":134,"column":4},"end":{"line":134,"column":null}},"69":{"start":{"line":135,"column":4},"end":{"line":135,"column":null}},"70":{"start":{"line":136,"column":4},"end":{"line":136,"column":null}},"71":{"start":{"line":140,"column":15},"end":{"line":140,"column":null}},"72":{"start":{"line":141,"column":2},"end":{"line":146,"column":null}},"73":{"start":{"line":142,"column":4},"end":{"line":142,"column":null}},"74":{"start":{"line":143,"column":4},"end":{"line":143,"column":null}},"75":{"start":{"line":144,"column":4},"end":{"line":144,"column":null}},"76":{"start":{"line":145,"column":4},"end":{"line":145,"column":null}}},"fnMap":{"0":{"name":"resizeGroupsToFit","decl":{"start":{"line":11,"column":16},"end":{"line":11,"column":34}},"loc":{"start":{"line":11,"column":62},"end":{"line":94,"column":null}},"line":11},"1":{"name":"updateGroupBounds","decl":{"start":{"line":99,"column":9},"end":{"line":99,"column":null}},"loc":{"start":{"line":105,"column":8},"end":{"line":147,"column":null}},"line":105}},"branchMap":{"0":{"loc":{"start":{"line":14,"column":2},"end":{"line":17,"column":null}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":17,"column":null}},{"start":{},"end":{}}],"line":14},"1":{"loc":{"start":{"line":14,"column":6},"end":{"line":14,"column":35}},"type":"binary-expr","locations":[{"start":{"line":14,"column":6},"end":{"line":14,"column":24}},{"start":{"line":14,"column":24},"end":{"line":14,"column":35}}],"line":14},"2":{"loc":{"start":{"line":28,"column":6},"end":{"line":31,"column":null}},"type":"if","locations":[{"start":{"line":28,"column":6},"end":{"line":31,"column":null}},{"start":{},"end":{}}],"line":28},"3":{"loc":{"start":{"line":28,"column":10},"end":{"line":28,"column":60}},"type":"binary-expr","locations":[{"start":{"line":28,"column":10},"end":{"line":28,"column":34}},{"start":{"line":28,"column":34},"end":{"line":28,"column":60}}],"line":28},"4":{"loc":{"start":{"line":42,"column":8},"end":{"line":42,"column":null}},"type":"if","locations":[{"start":{"line":42,"column":8},"end":{"line":42,"column":null}},{"start":{},"end":{}}],"line":42},"5":{"loc":{"start":{"line":44,"column":19},"end":{"line":44,"column":null}},"type":"binary-expr","locations":[{"start":{"line":44,"column":19},"end":{"line":44,"column":36}},{"start":{"line":44,"column":36},"end":{"line":44,"column":null}}],"line":44},"6":{"loc":{"start":{"line":45,"column":19},"end":{"line":45,"column":null}},"type":"binary-expr","locations":[{"start":{"line":45,"column":19},"end":{"line":45,"column":36}},{"start":{"line":45,"column":36},"end":{"line":45,"column":null}}],"line":45},"7":{"loc":{"start":{"line":46,"column":19},"end":{"line":46,"column":null}},"type":"binary-expr","locations":[{"start":{"line":46,"column":19},"end":{"line":46,"column":37}},{"start":{"line":46,"column":37},"end":{"line":46,"column":null}}],"line":46},"8":{"loc":{"start":{"line":47,"column":19},"end":{"line":47,"column":null}},"type":"binary-expr","locations":[{"start":{"line":47,"column":19},"end":{"line":47,"column":37}},{"start":{"line":47,"column":37},"end":{"line":47,"column":null}}],"line":47},"9":{"loc":{"start":{"line":70,"column":6},"end":{"line":73,"column":null}},"type":"if","locations":[{"start":{"line":70,"column":6},"end":{"line":73,"column":null}},{"start":{},"end":{}}],"line":70},"10":{"loc":{"start":{"line":107,"column":2},"end":{"line":110,"column":null}},"type":"if","locations":[{"start":{"line":107,"column":2},"end":{"line":110,"column":null}},{"start":{},"end":{}}],"line":107},"11":{"loc":{"start":{"line":111,"column":2},"end":{"line":114,"column":null}},"type":"if","locations":[{"start":{"line":111,"column":2},"end":{"line":114,"column":null}},{"start":{},"end":{}}],"line":111},"12":{"loc":{"start":{"line":121,"column":2},"end":{"line":124,"column":null}},"type":"if","locations":[{"start":{"line":121,"column":2},"end":{"line":124,"column":null}},{"start":{},"end":{}}],"line":121},"13":{"loc":{"start":{"line":125,"column":2},"end":{"line":128,"column":null}},"type":"if","locations":[{"start":{"line":125,"column":2},"end":{"line":128,"column":null}},{"start":{},"end":{}}],"line":125},"14":{"loc":{"start":{"line":131,"column":2},"end":{"line":137,"column":null}},"type":"if","locations":[{"start":{"line":131,"column":2},"end":{"line":137,"column":null}},{"start":{},"end":{}}],"line":131},"15":{"loc":{"start":{"line":141,"column":2},"end":{"line":146,"column":null}},"type":"if","locations":[{"start":{"line":141,"column":2},"end":{"line":146,"column":null}},{"start":{},"end":{}}],"line":141}},"s":{"0":1,"1":30,"2":30,"3":0,"4":0,"5":30,"6":30,"7":30,"8":30,"9":44,"10":98,"11":98,"12":0,"13":0,"14":98,"15":98,"16":98,"17":98,"18":98,"19":175,"20":175,"21":0,"22":175,"23":175,"24":175,"25":175,"26":175,"27":175,"28":175,"29":175,"30":98,"31":28,"32":28,"33":28,"34":28,"35":28,"36":28,"37":28,"38":28,"39":28,"40":98,"41":0,"42":0,"43":98,"44":98,"45":98,"46":98,"47":98,"48":98,"49":98,"50":98,"51":30,"52":98,"53":98,"54":98,"55":98,"56":98,"57":98,"58":98,"59":98,"60":0,"61":0,"62":98,"63":0,"64":0,"65":98,"66":0,"67":0,"68":0,"69":0,"70":0,"71":98,"72":98,"73":0,"74":0,"75":0,"76":0},"f":{"0":30,"1":98},"b":{"0":[0,30],"1":[30,30],"2":[0,98],"3":[98,7],"4":[0,175],"5":[175,0],"6":[175,0],"7":[175,0],"8":[175,0],"9":[0,98],"10":[98,0],"11":[98,0],"12":[0,98],"13":[0,98],"14":[0,98],"15":[0,98]},"meta":{"lastBranch":16,"lastFunction":2,"lastStatement":77,"seen":{"s:5:27:5:Infinity":0,"f:11:16:11:34":0,"s:12:46:12:Infinity":1,"b:14:2:17:Infinity:undefined:undefined:undefined:undefined":0,"s:14:2:17:Infinity":2,"b:14:6:14:24:14:24:14:35":1,"s:15:4:15:Infinity":3,"s:16:4:16:Infinity":4,"s:19:21:19:Infinity":5,"s:20:19:20:Infinity":6,"s:23:2:91:Infinity":7,"s:23:19:23:29":8,"s:24:4:90:Infinity":9,"s:25:48:25:Infinity":10,"b:28:6:31:Infinity:undefined:undefined:undefined:undefined":2,"s:28:6:31:Infinity":11,"b:28:10:28:34:28:34:28:60":3,"s:29:8:29:Infinity":12,"s:30:8:30:Infinity":13,"s:34:17:34:Infinity":14,"s:35:17:35:Infinity":15,"s:36:17:36:Infinity":16,"s:37:17:37:Infinity":17,"s:40:6:53:Infinity":18,"s:41:21:41:Infinity":19,"b:42:8:42:Infinity:undefined:undefined:undefined:undefined":4,"s:42:8:42:Infinity":20,"s:42:19:42:Infinity":21,"s:44:19:44:Infinity":22,"b:44:19:44:36:44:36:44:Infinity":5,"s:45:19:45:Infinity":23,"b:45:19:45:36:45:36:45:Infinity":6,"s:46:19:46:Infinity":24,"b:46:19:46:37:46:37:46:Infinity":7,"s:47:19:47:Infinity":25,"b:47:19:47:37:47:37:47:Infinity":8,"s:49:8:49:Infinity":26,"s:50:8:50:Infinity":27,"s:51:8:51:Infinity":28,"s:52:8:52:Infinity":29,"s:56:6:67:Infinity":30,"s:57:19:57:Infinity":31,"s:58:19:58:Infinity":32,"s:59:19:59:Infinity":33,"s:60:19:60:Infinity":34,"s:61:19:61:Infinity":35,"s:63:8:63:Infinity":36,"s:64:8:64:Infinity":37,"s:65:8:65:Infinity":38,"s:66:8:66:Infinity":39,"b:70:6:73:Infinity:undefined:undefined:undefined:undefined":9,"s:70:6:73:Infinity":40,"s:71:8:71:Infinity":41,"s:72:8:72:Infinity":42,"s:76:22:76:Infinity":43,"s:77:19:77:Infinity":44,"s:78:19:78:Infinity":45,"s:79:23:79:Infinity":46,"s:80:24:80:Infinity":47,"s:82:6:84:Infinity":48,"s:87:6:87:Infinity":49,"s:89:6:89:Infinity":50,"s:93:2:93:Infinity":51,"f:99:9:99:Infinity":1,"b:107:2:110:Infinity:undefined:undefined:undefined:undefined":10,"s:107:2:110:Infinity":52,"s:108:4:108:Infinity":53,"s:109:4:109:Infinity":54,"b:111:2:114:Infinity:undefined:undefined:undefined:undefined":11,"s:111:2:114:Infinity":55,"s:112:4:112:Infinity":56,"s:113:4:113:Infinity":57,"s:117:12:117:Infinity":58,"b:121:2:124:Infinity:undefined:undefined:undefined:undefined":12,"s:121:2:124:Infinity":59,"s:122:4:122:Infinity":60,"s:123:4:123:Infinity":61,"b:125:2:128:Infinity:undefined:undefined:undefined:undefined":13,"s:125:2:128:Infinity":62,"s:126:4:126:Infinity":63,"s:127:4:127:Infinity":64,"b:131:2:137:Infinity:undefined:undefined:undefined:undefined":14,"s:131:2:137:Infinity":65,"s:132:14:132:Infinity":66,"s:133:4:133:Infinity":67,"s:134:4:134:Infinity":68,"s:135:4:135:Infinity":69,"s:136:4:136:Infinity":70,"s:140:15:140:Infinity":71,"b:141:2:146:Infinity:undefined:undefined:undefined:undefined":15,"s:141:2:146:Infinity":72,"s:142:4:142:Infinity":73,"s:143:4:143:Infinity":74,"s:144:4:144:Infinity":75,"s:145:4:145:Infinity":76}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\index.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\index.ts","statementMap":{"0":{"start":{"line":33,"column":20},"end":{"line":33,"column":null}},"1":{"start":{"line":34,"column":35},"end":{"line":34,"column":null}},"2":{"start":{"line":37,"column":19},"end":{"line":37,"column":null}},"3":{"start":{"line":38,"column":2},"end":{"line":45,"column":null}},"4":{"start":{"line":39,"column":4},"end":{"line":44,"column":null}},"5":{"start":{"line":48,"column":8},"end":{"line":48,"column":null}},"6":{"start":{"line":51,"column":2},"end":{"line":51,"column":null}},"7":{"start":{"line":54,"column":2},"end":{"line":54,"column":null}},"8":{"start":{"line":57,"column":2},"end":{"line":57,"column":null}},"9":{"start":{"line":58,"column":2},"end":{"line":58,"column":null}},"10":{"start":{"line":62,"column":2},"end":{"line":62,"column":null}},"11":{"start":{"line":65,"column":2},"end":{"line":65,"column":null}},"12":{"start":{"line":68,"column":2},"end":{"line":68,"column":null}},"13":{"start":{"line":71,"column":8},"end":{"line":71,"column":null}},"14":{"start":{"line":75,"column":2},"end":{"line":75,"column":null}},"15":{"start":{"line":78,"column":2},"end":{"line":80,"column":null}},"16":{"start":{"line":79,"column":4},"end":{"line":79,"column":null}},"17":{"start":{"line":82,"column":22},"end":{"line":82,"column":null}},"18":{"start":{"line":85,"column":28},"end":{"line":85,"column":null}},"19":{"start":{"line":86,"column":23},"end":{"line":86,"column":null}},"20":{"start":{"line":86,"column":63},"end":{"line":86,"column":85}},"21":{"start":{"line":87,"column":21},"end":{"line":87,"column":null}},"22":{"start":{"line":89,"column":2},"end":{"line":91,"column":null}},"23":{"start":{"line":93,"column":2},"end":{"line":98,"column":null}}},"fnMap":{"0":{"name":"layoutGraph","decl":{"start":{"line":29,"column":16},"end":{"line":29,"column":null}},"loc":{"start":{"line":32,"column":16},"end":{"line":99,"column":null}},"line":32},"1":{"name":"(anonymous_1)","decl":{"start":{"line":86,"column":51},"end":{"line":86,"column":52}},"loc":{"start":{"line":86,"column":63},"end":{"line":86,"column":85}},"line":86}},"branchMap":{"0":{"loc":{"start":{"line":37,"column":19},"end":{"line":37,"column":null}},"type":"binary-expr","locations":[{"start":{"line":37,"column":19},"end":{"line":37,"column":35}},{"start":{"line":37,"column":35},"end":{"line":37,"column":null}}],"line":37},"1":{"loc":{"start":{"line":38,"column":2},"end":{"line":45,"column":null}},"type":"if","locations":[{"start":{"line":38,"column":2},"end":{"line":45,"column":null}},{"start":{},"end":{}}],"line":38},"2":{"loc":{"start":{"line":78,"column":2},"end":{"line":80,"column":null}},"type":"if","locations":[{"start":{"line":78,"column":2},"end":{"line":80,"column":null}},{"start":{},"end":{}}],"line":78},"3":{"loc":{"start":{"line":85,"column":28},"end":{"line":85,"column":null}},"type":"binary-expr","locations":[{"start":{"line":85,"column":28},"end":{"line":85,"column":61}},{"start":{"line":85,"column":61},"end":{"line":85,"column":null}}],"line":85},"4":{"loc":{"start":{"line":86,"column":23},"end":{"line":86,"column":null}},"type":"binary-expr","locations":[{"start":{"line":86,"column":23},"end":{"line":86,"column":91}},{"start":{"line":86,"column":91},"end":{"line":86,"column":null}}],"line":86}},"s":{"0":31,"1":31,"2":31,"3":31,"4":1,"5":30,"6":30,"7":30,"8":30,"9":30,"10":30,"11":30,"12":30,"13":30,"14":30,"15":30,"16":0,"17":30,"18":30,"19":31,"20":0,"21":31,"22":31,"23":31},"f":{"0":31,"1":0},"b":{"0":[31,0],"1":[1,30],"2":[0,30],"3":[30,0],"4":[31,0]},"meta":{"lastBranch":5,"lastFunction":2,"lastStatement":24,"seen":{"f:29:16:29:Infinity":0,"s:33:20:33:Infinity":0,"s:34:35:34:Infinity":1,"s:37:19:37:Infinity":2,"b:37:19:37:35:37:35:37:Infinity":0,"b:38:2:45:Infinity:undefined:undefined:undefined:undefined":1,"s:38:2:45:Infinity":3,"s:39:4:44:Infinity":4,"s:48:8:48:Infinity":5,"s:51:2:51:Infinity":6,"s:54:2:54:Infinity":7,"s:57:2:57:Infinity":8,"s:58:2:58:Infinity":9,"s:62:2:62:Infinity":10,"s:65:2:65:Infinity":11,"s:68:2:68:Infinity":12,"s:71:8:71:Infinity":13,"s:75:2:75:Infinity":14,"b:78:2:80:Infinity:undefined:undefined:undefined:undefined":2,"s:78:2:80:Infinity":15,"s:79:4:79:Infinity":16,"s:82:22:82:Infinity":17,"s:85:28:85:Infinity":18,"b:85:28:85:61:85:61:85:Infinity":3,"s:86:23:86:Infinity":19,"b:86:23:86:91:86:91:86:Infinity":4,"f:86:51:86:52":1,"s:86:63:86:85":20,"s:87:21:87:Infinity":21,"s:89:2:91:Infinity":22,"s:93:2:98:Infinity":23}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\layer-assign.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\layer-assign.ts","statementMap":{"0":{"start":{"line":9,"column":20},"end":{"line":9,"column":null}},"1":{"start":{"line":12,"column":19},"end":{"line":12,"column":null}},"2":{"start":{"line":13,"column":26},"end":{"line":13,"column":null}},"3":{"start":{"line":14,"column":26},"end":{"line":14,"column":null}},"4":{"start":{"line":17,"column":2},"end":{"line":22,"column":null}},"5":{"start":{"line":18,"column":4},"end":{"line":18,"column":null}},"6":{"start":{"line":19,"column":4},"end":{"line":21,"column":null}},"7":{"start":{"line":20,"column":6},"end":{"line":20,"column":null}},"8":{"start":{"line":25,"column":2},"end":{"line":37,"column":null}},"9":{"start":{"line":26,"column":19},"end":{"line":26,"column":null}},"10":{"start":{"line":27,"column":4},"end":{"line":27,"column":null}},"11":{"start":{"line":29,"column":17},"end":{"line":29,"column":null}},"12":{"start":{"line":30,"column":4},"end":{"line":36,"column":null}},"13":{"start":{"line":31,"column":12},"end":{"line":31,"column":null}},"14":{"start":{"line":32,"column":6},"end":{"line":32,"column":null}},"15":{"start":{"line":33,"column":6},"end":{"line":35,"column":null}},"16":{"start":{"line":34,"column":8},"end":{"line":34,"column":null}},"17":{"start":{"line":40,"column":2},"end":{"line":44,"column":null}},"18":{"start":{"line":41,"column":4},"end":{"line":43,"column":null}},"19":{"start":{"line":42,"column":6},"end":{"line":42,"column":null}},"20":{"start":{"line":47,"column":2},"end":{"line":64,"column":null}},"21":{"start":{"line":48,"column":17},"end":{"line":48,"column":null}},"22":{"start":{"line":50,"column":4},"end":{"line":63,"column":null}},"23":{"start":{"line":52,"column":6},"end":{"line":52,"column":null}},"24":{"start":{"line":55,"column":25},"end":{"line":55,"column":null}},"25":{"start":{"line":56,"column":6},"end":{"line":61,"column":null}},"26":{"start":{"line":57,"column":21},"end":{"line":57,"column":null}},"27":{"start":{"line":58,"column":8},"end":{"line":60,"column":null}},"28":{"start":{"line":59,"column":10},"end":{"line":59,"column":null}},"29":{"start":{"line":62,"column":6},"end":{"line":62,"column":null}},"30":{"start":{"line":67,"column":2},"end":{"line":71,"column":null}},"31":{"start":{"line":68,"column":4},"end":{"line":70,"column":null}},"32":{"start":{"line":69,"column":6},"end":{"line":69,"column":null}},"33":{"start":{"line":74,"column":19},"end":{"line":74,"column":null}},"34":{"start":{"line":75,"column":2},"end":{"line":79,"column":null}},"35":{"start":{"line":76,"column":16},"end":{"line":76,"column":null}},"36":{"start":{"line":77,"column":4},"end":{"line":77,"column":null}},"37":{"start":{"line":78,"column":4},"end":{"line":78,"column":null}},"38":{"start":{"line":82,"column":29},"end":{"line":82,"column":null}},"39":{"start":{"line":82,"column":65},"end":{"line":82,"column":70}},"40":{"start":{"line":83,"column":26},"end":{"line":83,"column":null}},"41":{"start":{"line":85,"column":2},"end":{"line":99,"column":null}},"42":{"start":{"line":86,"column":23},"end":{"line":86,"column":null}},"43":{"start":{"line":88,"column":4},"end":{"line":88,"column":null}},"44":{"start":{"line":88,"column":30},"end":{"line":88,"column":41}},"45":{"start":{"line":89,"column":4},"end":{"line":91,"column":null}},"46":{"start":{"line":90,"column":6},"end":{"line":90,"column":null}},"47":{"start":{"line":93,"column":4},"end":{"line":98,"column":null}},"48":{"start":{"line":97,"column":50},"end":{"line":97,"column":57}},"49":{"start":{"line":101,"column":2},"end":{"line":101,"column":null}}},"fnMap":{"0":{"name":"assignLayers","decl":{"start":{"line":8,"column":16},"end":{"line":8,"column":29}},"loc":{"start":{"line":8,"column":55},"end":{"line":102,"column":null}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":82,"column":55},"end":{"line":82,"column":56}},"loc":{"start":{"line":82,"column":65},"end":{"line":82,"column":70}},"line":82},"2":{"name":"(anonymous_2)","decl":{"start":{"line":88,"column":20},"end":{"line":88,"column":21}},"loc":{"start":{"line":88,"column":30},"end":{"line":88,"column":41}},"line":88},"3":{"name":"(anonymous_3)","decl":{"start":{"line":89,"column":23},"end":{"line":89,"column":24}},"loc":{"start":{"line":89,"column":33},"end":{"line":91,"column":5}},"line":89},"4":{"name":"(anonymous_4)","decl":{"start":{"line":97,"column":43},"end":{"line":97,"column":44}},"loc":{"start":{"line":97,"column":50},"end":{"line":97,"column":57}},"line":97}},"branchMap":{"0":{"loc":{"start":{"line":19,"column":4},"end":{"line":21,"column":null}},"type":"if","locations":[{"start":{"line":19,"column":4},"end":{"line":21,"column":null}},{"start":{},"end":{}}],"line":19},"1":{"loc":{"start":{"line":31,"column":19},"end":{"line":31,"column":48}},"type":"binary-expr","locations":[{"start":{"line":31,"column":19},"end":{"line":31,"column":43}},{"start":{"line":31,"column":43},"end":{"line":31,"column":48}}],"line":31},"2":{"loc":{"start":{"line":33,"column":6},"end":{"line":35,"column":null}},"type":"if","locations":[{"start":{"line":33,"column":6},"end":{"line":35,"column":null}},{"start":{},"end":{}}],"line":33},"3":{"loc":{"start":{"line":41,"column":4},"end":{"line":43,"column":null}},"type":"if","locations":[{"start":{"line":41,"column":4},"end":{"line":43,"column":null}},{"start":{},"end":{}}],"line":41},"4":{"loc":{"start":{"line":50,"column":4},"end":{"line":63,"column":null}},"type":"if","locations":[{"start":{"line":50,"column":4},"end":{"line":63,"column":null}},{"start":{"line":53,"column":11},"end":{"line":63,"column":null}}],"line":50},"5":{"loc":{"start":{"line":58,"column":8},"end":{"line":60,"column":null}},"type":"if","locations":[{"start":{"line":58,"column":8},"end":{"line":60,"column":null}},{"start":{},"end":{}}],"line":58},"6":{"loc":{"start":{"line":58,"column":12},"end":{"line":58,"column":37}},"type":"binary-expr","locations":[{"start":{"line":58,"column":12},"end":{"line":58,"column":20}},{"start":{"line":58,"column":20},"end":{"line":58,"column":37}}],"line":58},"7":{"loc":{"start":{"line":68,"column":4},"end":{"line":70,"column":null}},"type":"if","locations":[{"start":{"line":68,"column":4},"end":{"line":70,"column":null}},{"start":{},"end":{}}],"line":68},"8":{"loc":{"start":{"line":76,"column":16},"end":{"line":76,"column":null}},"type":"binary-expr","locations":[{"start":{"line":76,"column":16},"end":{"line":76,"column":44}},{"start":{"line":76,"column":44},"end":{"line":76,"column":null}}],"line":76}},"s":{"0":30,"1":30,"2":30,"3":30,"4":30,"5":217,"6":217,"7":63,"8":30,"9":217,"10":217,"11":217,"12":217,"13":280,"14":280,"15":280,"16":154,"17":30,"18":217,"19":0,"20":30,"21":217,"22":217,"23":63,"24":154,"25":154,"26":280,"27":280,"28":280,"29":154,"30":30,"31":217,"32":0,"33":30,"34":30,"35":217,"36":217,"37":217,"38":30,"39":196,"40":30,"41":30,"42":154,"43":154,"44":77,"45":154,"46":217,"47":154,"48":217,"49":30},"f":{"0":30,"1":196,"2":77,"3":217,"4":217},"b":{"0":[63,154],"1":[280,0],"2":[154,126],"3":[0,217],"4":[63,154],"5":[280,0],"6":[280,280],"7":[0,217],"8":[217,154]},"meta":{"lastBranch":9,"lastFunction":5,"lastStatement":50,"seen":{"f:8:16:8:29":0,"s:9:20:9:Infinity":0,"s:12:19:12:Infinity":1,"s:13:26:13:Infinity":2,"s:14:26:14:Infinity":3,"s:17:2:22:Infinity":4,"s:18:4:18:Infinity":5,"b:19:4:21:Infinity:undefined:undefined:undefined:undefined":0,"s:19:4:21:Infinity":6,"s:20:6:20:Infinity":7,"s:25:2:37:Infinity":8,"s:26:19:26:Infinity":9,"s:27:4:27:Infinity":10,"s:29:17:29:Infinity":11,"s:30:4:36:Infinity":12,"s:31:12:31:Infinity":13,"b:31:19:31:43:31:43:31:48":1,"s:32:6:32:Infinity":14,"b:33:6:35:Infinity:undefined:undefined:undefined:undefined":2,"s:33:6:35:Infinity":15,"s:34:8:34:Infinity":16,"s:40:2:44:Infinity":17,"b:41:4:43:Infinity:undefined:undefined:undefined:undefined":3,"s:41:4:43:Infinity":18,"s:42:6:42:Infinity":19,"s:47:2:64:Infinity":20,"s:48:17:48:Infinity":21,"b:50:4:63:Infinity:53:11:63:Infinity":4,"s:50:4:63:Infinity":22,"s:52:6:52:Infinity":23,"s:55:25:55:Infinity":24,"s:56:6:61:Infinity":25,"s:57:21:57:Infinity":26,"b:58:8:60:Infinity:undefined:undefined:undefined:undefined":5,"s:58:8:60:Infinity":27,"b:58:12:58:20:58:20:58:37":6,"s:59:10:59:Infinity":28,"s:62:6:62:Infinity":29,"s:67:2:71:Infinity":30,"b:68:4:70:Infinity:undefined:undefined:undefined:undefined":7,"s:68:4:70:Infinity":31,"s:69:6:69:Infinity":32,"s:74:19:74:Infinity":33,"s:75:2:79:Infinity":34,"s:76:16:76:Infinity":35,"b:76:16:76:44:76:44:76:Infinity":8,"s:77:4:77:Infinity":36,"s:78:4:78:Infinity":37,"s:82:29:82:Infinity":38,"f:82:55:82:56":1,"s:82:65:82:70":39,"s:83:26:83:Infinity":40,"s:85:2:99:Infinity":41,"s:86:23:86:Infinity":42,"s:88:4:88:Infinity":43,"f:88:20:88:21":2,"s:88:30:88:41":44,"s:89:4:91:Infinity":45,"f:89:23:89:24":3,"s:90:6:90:Infinity":46,"s:93:4:98:Infinity":47,"f:97:43:97:44":4,"s:97:50:97:57":48,"s:101:2:101:Infinity":49}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\layout-utils.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\layout-utils.ts","statementMap":{"0":{"start":{"line":11,"column":41},"end":{"line":11,"column":null}},"1":{"start":{"line":14,"column":23},"end":{"line":14,"column":null}},"2":{"start":{"line":15,"column":2},"end":{"line":26,"column":null}},"3":{"start":{"line":16,"column":17},"end":{"line":16,"column":null}},"4":{"start":{"line":17,"column":4},"end":{"line":17,"column":null}},"5":{"start":{"line":17,"column":24},"end":{"line":17,"column":null}},"6":{"start":{"line":19,"column":4},"end":{"line":25,"column":null}},"7":{"start":{"line":20,"column":6},"end":{"line":24,"column":null}},"8":{"start":{"line":21,"column":8},"end":{"line":23,"column":null}},"9":{"start":{"line":22,"column":10},"end":{"line":22,"column":null}},"10":{"start":{"line":29,"column":2},"end":{"line":41,"column":null}},"11":{"start":{"line":30,"column":17},"end":{"line":30,"column":null}},"12":{"start":{"line":31,"column":4},"end":{"line":31,"column":null}},"13":{"start":{"line":31,"column":23},"end":{"line":31,"column":null}},"14":{"start":{"line":33,"column":4},"end":{"line":40,"column":null}},"15":{"start":{"line":34,"column":6},"end":{"line":39,"column":null}},"16":{"start":{"line":35,"column":25},"end":{"line":35,"column":null}},"17":{"start":{"line":36,"column":8},"end":{"line":38,"column":null}},"18":{"start":{"line":37,"column":10},"end":{"line":37,"column":null}},"19":{"start":{"line":43,"column":2},"end":{"line":43,"column":null}},"20":{"start":{"line":56,"column":21},"end":{"line":56,"column":null}},"21":{"start":{"line":57,"column":19},"end":{"line":57,"column":null}},"22":{"start":{"line":59,"column":2},"end":{"line":62,"column":null}},"23":{"start":{"line":60,"column":4},"end":{"line":60,"column":null}},"24":{"start":{"line":61,"column":4},"end":{"line":61,"column":null}},"25":{"start":{"line":64,"column":2},"end":{"line":67,"column":null}},"26":{"start":{"line":65,"column":4},"end":{"line":65,"column":null}},"27":{"start":{"line":66,"column":4},"end":{"line":66,"column":null}},"28":{"start":{"line":70,"column":20},"end":{"line":70,"column":null}},"29":{"start":{"line":71,"column":26},"end":{"line":71,"column":null}},"30":{"start":{"line":74,"column":2},"end":{"line":79,"column":null}},"31":{"start":{"line":75,"column":4},"end":{"line":78,"column":null}},"32":{"start":{"line":76,"column":6},"end":{"line":76,"column":null}},"33":{"start":{"line":77,"column":6},"end":{"line":77,"column":null}},"34":{"start":{"line":81,"column":2},"end":{"line":97,"column":null}},"35":{"start":{"line":82,"column":20},"end":{"line":82,"column":null}},"36":{"start":{"line":83,"column":25},"end":{"line":83,"column":null}},"37":{"start":{"line":85,"column":4},"end":{"line":96,"column":null}},"38":{"start":{"line":87,"column":24},"end":{"line":87,"column":null}},"39":{"start":{"line":88,"column":6},"end":{"line":88,"column":null}},"40":{"start":{"line":91,"column":12},"end":{"line":91,"column":null}},"41":{"start":{"line":92,"column":6},"end":{"line":92,"column":null}},"42":{"start":{"line":93,"column":6},"end":{"line":95,"column":null}},"43":{"start":{"line":94,"column":8},"end":{"line":94,"column":null}},"44":{"start":{"line":100,"column":2},"end":{"line":104,"column":null}},"45":{"start":{"line":101,"column":4},"end":{"line":103,"column":null}},"46":{"start":{"line":102,"column":6},"end":{"line":102,"column":null}},"47":{"start":{"line":107,"column":19},"end":{"line":107,"column":null}},"48":{"start":{"line":108,"column":33},"end":{"line":108,"column":null}},"49":{"start":{"line":108,"column":76},"end":{"line":108,"column":78}},"50":{"start":{"line":110,"column":2},"end":{"line":116,"column":null}},"51":{"start":{"line":111,"column":17},"end":{"line":111,"column":null}},"52":{"start":{"line":112,"column":4},"end":{"line":115,"column":null}},"53":{"start":{"line":113,"column":20},"end":{"line":113,"column":null}},"54":{"start":{"line":114,"column":6},"end":{"line":114,"column":null}},"55":{"start":{"line":118,"column":2},"end":{"line":118,"column":null}}},"fnMap":{"0":{"name":"getInternalEdges","decl":{"start":{"line":7,"column":16},"end":{"line":7,"column":null}},"loc":{"start":{"line":10,"column":27},"end":{"line":44,"column":null}},"line":10},"1":{"name":"assignMemberLayers","decl":{"start":{"line":50,"column":16},"end":{"line":50,"column":null}},"loc":{"start":{"line":54,"column":18},"end":{"line":119,"column":null}},"line":54},"2":{"name":"(anonymous_2)","decl":{"start":{"line":108,"column":70},"end":{"line":108,"column":76}},"loc":{"start":{"line":108,"column":76},"end":{"line":108,"column":78}},"line":108}},"branchMap":{"0":{"loc":{"start":{"line":17,"column":4},"end":{"line":17,"column":null}},"type":"if","locations":[{"start":{"line":17,"column":4},"end":{"line":17,"column":null}},{"start":{},"end":{}}],"line":17},"1":{"loc":{"start":{"line":20,"column":6},"end":{"line":24,"column":null}},"type":"if","locations":[{"start":{"line":20,"column":6},"end":{"line":24,"column":null}},{"start":{},"end":{}}],"line":20},"2":{"loc":{"start":{"line":31,"column":4},"end":{"line":31,"column":null}},"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":31,"column":null}},{"start":{},"end":{}}],"line":31},"3":{"loc":{"start":{"line":34,"column":6},"end":{"line":39,"column":null}},"type":"if","locations":[{"start":{"line":34,"column":6},"end":{"line":39,"column":null}},{"start":{},"end":{}}],"line":34},"4":{"loc":{"start":{"line":34,"column":10},"end":{"line":34,"column":59}},"type":"binary-expr","locations":[{"start":{"line":34,"column":10},"end":{"line":34,"column":33}},{"start":{"line":34,"column":33},"end":{"line":34,"column":59}}],"line":34},"5":{"loc":{"start":{"line":36,"column":8},"end":{"line":38,"column":null}},"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":38,"column":null}},{"start":{},"end":{}}],"line":36},"6":{"loc":{"start":{"line":36,"column":12},"end":{"line":36,"column":63}},"type":"binary-expr","locations":[{"start":{"line":36,"column":12},"end":{"line":36,"column":38}},{"start":{"line":36,"column":38},"end":{"line":36,"column":63}}],"line":36},"7":{"loc":{"start":{"line":66,"column":26},"end":{"line":66,"column":55}},"type":"binary-expr","locations":[{"start":{"line":66,"column":26},"end":{"line":66,"column":50}},{"start":{"line":66,"column":50},"end":{"line":66,"column":55}}],"line":66},"8":{"loc":{"start":{"line":75,"column":4},"end":{"line":78,"column":null}},"type":"if","locations":[{"start":{"line":75,"column":4},"end":{"line":78,"column":null}},{"start":{},"end":{}}],"line":75},"9":{"loc":{"start":{"line":75,"column":9},"end":{"line":75,"column":36}},"type":"binary-expr","locations":[{"start":{"line":75,"column":9},"end":{"line":75,"column":29}},{"start":{"line":75,"column":29},"end":{"line":75,"column":36}}],"line":75},"10":{"loc":{"start":{"line":83,"column":25},"end":{"line":83,"column":null}},"type":"binary-expr","locations":[{"start":{"line":83,"column":25},"end":{"line":83,"column":51}},{"start":{"line":83,"column":51},"end":{"line":83,"column":null}}],"line":83},"11":{"loc":{"start":{"line":85,"column":23},"end":{"line":85,"column":54}},"type":"binary-expr","locations":[{"start":{"line":85,"column":23},"end":{"line":85,"column":50}},{"start":{"line":85,"column":50},"end":{"line":85,"column":54}}],"line":85},"12":{"loc":{"start":{"line":87,"column":24},"end":{"line":87,"column":null}},"type":"binary-expr","locations":[{"start":{"line":87,"column":24},"end":{"line":87,"column":47}},{"start":{"line":87,"column":47},"end":{"line":87,"column":null}}],"line":87},"13":{"loc":{"start":{"line":91,"column":27},"end":{"line":91,"column":54}},"type":"binary-expr","locations":[{"start":{"line":91,"column":27},"end":{"line":91,"column":49}},{"start":{"line":91,"column":49},"end":{"line":91,"column":54}}],"line":91},"14":{"loc":{"start":{"line":93,"column":6},"end":{"line":95,"column":null}},"type":"if","locations":[{"start":{"line":93,"column":6},"end":{"line":95,"column":null}},{"start":{},"end":{}}],"line":93},"15":{"loc":{"start":{"line":101,"column":4},"end":{"line":103,"column":null}},"type":"if","locations":[{"start":{"line":101,"column":4},"end":{"line":103,"column":null}},{"start":{},"end":{}}],"line":101},"16":{"loc":{"start":{"line":112,"column":4},"end":{"line":115,"column":null}},"type":"if","locations":[{"start":{"line":112,"column":4},"end":{"line":115,"column":null}},{"start":{},"end":{}}],"line":112},"17":{"loc":{"start":{"line":113,"column":20},"end":{"line":113,"column":null}},"type":"binary-expr","locations":[{"start":{"line":113,"column":20},"end":{"line":113,"column":41}},{"start":{"line":113,"column":41},"end":{"line":113,"column":null}}],"line":113}},"s":{"0":189,"1":189,"2":189,"3":350,"4":350,"5":0,"6":350,"7":490,"8":406,"9":462,"10":189,"11":350,"12":350,"13":0,"14":350,"15":308,"16":280,"17":280,"18":84,"19":189,"20":42,"21":42,"22":42,"23":154,"24":154,"25":42,"26":84,"27":84,"28":42,"29":42,"30":42,"31":154,"32":70,"33":70,"34":42,"35":154,"36":154,"37":154,"38":84,"39":84,"40":84,"41":84,"42":84,"43":84,"44":42,"45":154,"46":0,"47":42,"48":42,"49":98,"50":42,"51":154,"52":154,"53":154,"54":154,"55":42},"f":{"0":189,"1":42,"2":98},"b":{"0":[0,350],"1":[406,84],"2":[0,350],"3":[280,28],"4":[308,280],"5":[84,196],"6":[280,84],"7":[84,0],"8":[70,84],"9":[154,0],"10":[154,0],"11":[154,0],"12":[84,84],"13":[84,0],"14":[84,0],"15":[0,154],"16":[154,0],"17":[154,0]},"meta":{"lastBranch":18,"lastFunction":3,"lastStatement":56,"seen":{"f:7:16:7:Infinity":0,"s:11:41:11:Infinity":0,"s:14:23:14:Infinity":1,"s:15:2:26:Infinity":2,"s:16:17:16:Infinity":3,"b:17:4:17:Infinity:undefined:undefined:undefined:undefined":0,"s:17:4:17:Infinity":4,"s:17:24:17:Infinity":5,"s:19:4:25:Infinity":6,"b:20:6:24:Infinity:undefined:undefined:undefined:undefined":1,"s:20:6:24:Infinity":7,"s:21:8:23:Infinity":8,"s:22:10:22:Infinity":9,"s:29:2:41:Infinity":10,"s:30:17:30:Infinity":11,"b:31:4:31:Infinity:undefined:undefined:undefined:undefined":2,"s:31:4:31:Infinity":12,"s:31:23:31:Infinity":13,"s:33:4:40:Infinity":14,"b:34:6:39:Infinity:undefined:undefined:undefined:undefined":3,"s:34:6:39:Infinity":15,"b:34:10:34:33:34:33:34:59":4,"s:35:25:35:Infinity":16,"b:36:8:38:Infinity:undefined:undefined:undefined:undefined":5,"s:36:8:38:Infinity":17,"b:36:12:36:38:36:38:36:63":6,"s:37:10:37:Infinity":18,"s:43:2:43:Infinity":19,"f:50:16:50:Infinity":1,"s:56:21:56:Infinity":20,"s:57:19:57:Infinity":21,"s:59:2:62:Infinity":22,"s:60:4:60:Infinity":23,"s:61:4:61:Infinity":24,"s:64:2:67:Infinity":25,"s:65:4:65:Infinity":26,"s:66:4:66:Infinity":27,"b:66:26:66:50:66:50:66:55":7,"s:70:20:70:Infinity":28,"s:71:26:71:Infinity":29,"s:74:2:79:Infinity":30,"b:75:4:78:Infinity:undefined:undefined:undefined:undefined":8,"s:75:4:78:Infinity":31,"b:75:9:75:29:75:29:75:36":9,"s:76:6:76:Infinity":32,"s:77:6:77:Infinity":33,"s:81:2:97:Infinity":34,"s:82:20:82:Infinity":35,"s:83:25:83:Infinity":36,"b:83:25:83:51:83:51:83:Infinity":10,"s:85:4:96:Infinity":37,"b:85:23:85:50:85:50:85:54":11,"s:87:24:87:Infinity":38,"b:87:24:87:47:87:47:87:Infinity":12,"s:88:6:88:Infinity":39,"s:91:12:91:Infinity":40,"b:91:27:91:49:91:49:91:54":13,"s:92:6:92:Infinity":41,"b:93:6:95:Infinity:undefined:undefined:undefined:undefined":14,"s:93:6:95:Infinity":42,"s:94:8:94:Infinity":43,"s:100:2:104:Infinity":44,"b:101:4:103:Infinity:undefined:undefined:undefined:undefined":15,"s:101:4:103:Infinity":45,"s:102:6:102:Infinity":46,"s:107:19:107:Infinity":47,"s:108:33:108:Infinity":48,"f:108:70:108:76":2,"s:108:76:108:78":49,"s:110:2:116:Infinity":50,"s:111:17:111:Infinity":51,"b:112:4:115:Infinity:undefined:undefined:undefined:undefined":16,"s:112:4:115:Infinity":52,"s:113:20:113:Infinity":53,"b:113:20:113:41:113:41:113:Infinity":17,"s:114:6:114:Infinity":54,"s:118:2:118:Infinity":55}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\node-classifier.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\node-classifier.ts","statementMap":{"0":{"start":{"line":10,"column":2},"end":{"line":22,"column":null}},"1":{"start":{"line":11,"column":4},"end":{"line":13,"column":null}},"2":{"start":{"line":12,"column":6},"end":{"line":12,"column":null}},"3":{"start":{"line":12,"column":16},"end":{"line":12,"column":null}},"4":{"start":{"line":14,"column":2},"end":{"line":22,"column":null}},"5":{"start":{"line":15,"column":4},"end":{"line":17,"column":null}},"6":{"start":{"line":16,"column":6},"end":{"line":16,"column":null}},"7":{"start":{"line":16,"column":16},"end":{"line":16,"column":null}},"8":{"start":{"line":19,"column":4},"end":{"line":21,"column":null}},"9":{"start":{"line":20,"column":6},"end":{"line":20,"column":null}},"10":{"start":{"line":20,"column":16},"end":{"line":20,"column":null}},"11":{"start":{"line":33,"column":19},"end":{"line":33,"column":null}},"12":{"start":{"line":36,"column":2},"end":{"line":45,"column":null}},"13":{"start":{"line":37,"column":4},"end":{"line":44,"column":null}},"14":{"start":{"line":38,"column":6},"end":{"line":40,"column":null}},"15":{"start":{"line":39,"column":8},"end":{"line":39,"column":null}},"16":{"start":{"line":41,"column":6},"end":{"line":43,"column":null}},"17":{"start":{"line":42,"column":8},"end":{"line":42,"column":null}},"18":{"start":{"line":47,"column":20},"end":{"line":47,"column":null}},"19":{"start":{"line":48,"column":23},"end":{"line":48,"column":null}},"20":{"start":{"line":49,"column":19},"end":{"line":49,"column":null}},"21":{"start":{"line":51,"column":16},"end":{"line":51,"column":null}},"22":{"start":{"line":52,"column":2},"end":{"line":72,"column":null}},"23":{"start":{"line":53,"column":4},"end":{"line":53,"column":null}},"24":{"start":{"line":53,"column":40},"end":{"line":53,"column":null}},"25":{"start":{"line":55,"column":21},"end":{"line":55,"column":null}},"26":{"start":{"line":59,"column":22},"end":{"line":59,"column":null}},"27":{"start":{"line":61,"column":4},"end":{"line":71,"column":null}},"28":{"start":{"line":62,"column":6},"end":{"line":62,"column":null}},"29":{"start":{"line":64,"column":6},"end":{"line":66,"column":null}},"30":{"start":{"line":65,"column":8},"end":{"line":65,"column":null}},"31":{"start":{"line":67,"column":4},"end":{"line":71,"column":null}},"32":{"start":{"line":68,"column":6},"end":{"line":68,"column":null}},"33":{"start":{"line":70,"column":6},"end":{"line":70,"column":null}},"34":{"start":{"line":74,"column":2},"end":{"line":76,"column":null}},"35":{"start":{"line":78,"column":2},"end":{"line":78,"column":null}}},"fnMap":{"0":{"name":"iterateLinks","decl":{"start":{"line":7,"column":10},"end":{"line":7,"column":null}},"loc":{"start":{"line":9,"column":20},"end":{"line":23,"column":null}},"line":9},"1":{"name":"classifyNodes","decl":{"start":{"line":32,"column":16},"end":{"line":32,"column":30}},"loc":{"start":{"line":32,"column":62},"end":{"line":79,"column":null}},"line":32}},"branchMap":{"0":{"loc":{"start":{"line":10,"column":2},"end":{"line":22,"column":null}},"type":"if","locations":[{"start":{"line":10,"column":2},"end":{"line":22,"column":null}},{"start":{"line":14,"column":2},"end":{"line":22,"column":null}}],"line":10},"1":{"loc":{"start":{"line":12,"column":6},"end":{"line":12,"column":null}},"type":"if","locations":[{"start":{"line":12,"column":6},"end":{"line":12,"column":null}},{"start":{},"end":{}}],"line":12},"2":{"loc":{"start":{"line":14,"column":2},"end":{"line":22,"column":null}},"type":"if","locations":[{"start":{"line":14,"column":2},"end":{"line":22,"column":null}},{"start":{"line":18,"column":9},"end":{"line":22,"column":null}}],"line":14},"3":{"loc":{"start":{"line":16,"column":6},"end":{"line":16,"column":null}},"type":"if","locations":[{"start":{"line":16,"column":6},"end":{"line":16,"column":null}},{"start":{},"end":{}}],"line":16},"4":{"loc":{"start":{"line":20,"column":6},"end":{"line":20,"column":null}},"type":"if","locations":[{"start":{"line":20,"column":6},"end":{"line":20,"column":null}},{"start":{},"end":{}}],"line":20},"5":{"loc":{"start":{"line":36,"column":2},"end":{"line":45,"column":null}},"type":"if","locations":[{"start":{"line":36,"column":2},"end":{"line":45,"column":null}},{"start":{},"end":{}}],"line":36},"6":{"loc":{"start":{"line":38,"column":6},"end":{"line":40,"column":null}},"type":"if","locations":[{"start":{"line":38,"column":6},"end":{"line":40,"column":null}},{"start":{},"end":{}}],"line":38},"7":{"loc":{"start":{"line":41,"column":6},"end":{"line":43,"column":null}},"type":"if","locations":[{"start":{"line":41,"column":6},"end":{"line":43,"column":null}},{"start":{},"end":{}}],"line":41},"8":{"loc":{"start":{"line":51,"column":16},"end":{"line":51,"column":null}},"type":"binary-expr","locations":[{"start":{"line":51,"column":16},"end":{"line":51,"column":32}},{"start":{"line":51,"column":32},"end":{"line":51,"column":null}}],"line":51},"9":{"loc":{"start":{"line":53,"column":4},"end":{"line":53,"column":null}},"type":"if","locations":[{"start":{"line":53,"column":4},"end":{"line":53,"column":null}},{"start":{},"end":{}}],"line":53},"10":{"loc":{"start":{"line":53,"column":8},"end":{"line":53,"column":40}},"type":"binary-expr","locations":[{"start":{"line":53,"column":8},"end":{"line":53,"column":17}},{"start":{"line":53,"column":17},"end":{"line":53,"column":40}}],"line":53},"11":{"loc":{"start":{"line":55,"column":21},"end":{"line":55,"column":null}},"type":"binary-expr","locations":[{"start":{"line":55,"column":21},"end":{"line":55,"column":34}},{"start":{"line":55,"column":34},"end":{"line":55,"column":null}}],"line":55},"12":{"loc":{"start":{"line":59,"column":22},"end":{"line":59,"column":null}},"type":"binary-expr","locations":[{"start":{"line":59,"column":22},"end":{"line":59,"column":48}},{"start":{"line":59,"column":48},"end":{"line":59,"column":null}}],"line":59},"13":{"loc":{"start":{"line":61,"column":4},"end":{"line":71,"column":null}},"type":"if","locations":[{"start":{"line":61,"column":4},"end":{"line":71,"column":null}},{"start":{"line":67,"column":4},"end":{"line":71,"column":null}}],"line":61},"14":{"loc":{"start":{"line":64,"column":6},"end":{"line":66,"column":null}},"type":"if","locations":[{"start":{"line":64,"column":6},"end":{"line":66,"column":null}},{"start":{},"end":{}}],"line":64},"15":{"loc":{"start":{"line":67,"column":4},"end":{"line":71,"column":null}},"type":"if","locations":[{"start":{"line":67,"column":4},"end":{"line":71,"column":null}},{"start":{"line":69,"column":11},"end":{"line":71,"column":null}}],"line":67}},"s":{"0":30,"1":30,"2":420,"3":420,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":30,"12":30,"13":30,"14":420,"15":420,"16":420,"17":420,"18":30,"19":30,"20":30,"21":30,"22":30,"23":374,"24":0,"25":374,"26":374,"27":374,"28":0,"29":0,"30":0,"31":374,"32":301,"33":73,"34":30,"35":30},"f":{"0":30,"1":30},"b":{"0":[30,0],"1":[420,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[30,0],"6":[420,0],"7":[420,0],"8":[30,0],"9":[0,374],"10":[374,374],"11":[374,0],"12":[374,374],"13":[0,374],"14":[0,0],"15":[301,73]},"meta":{"lastBranch":16,"lastFunction":2,"lastStatement":36,"seen":{"f:7:10:7:Infinity":0,"b:10:2:22:Infinity:14:2:22:Infinity":0,"s:10:2:22:Infinity":0,"s:11:4:13:Infinity":1,"b:12:6:12:Infinity:undefined:undefined:undefined:undefined":1,"s:12:6:12:Infinity":2,"s:12:16:12:Infinity":3,"b:14:2:22:Infinity:18:9:22:Infinity":2,"s:14:2:22:Infinity":4,"s:15:4:17:Infinity":5,"b:16:6:16:Infinity:undefined:undefined:undefined:undefined":3,"s:16:6:16:Infinity":6,"s:16:16:16:Infinity":7,"s:19:4:21:Infinity":8,"b:20:6:20:Infinity:undefined:undefined:undefined:undefined":4,"s:20:6:20:Infinity":9,"s:20:16:20:Infinity":10,"f:32:16:32:30":1,"s:33:19:33:Infinity":11,"b:36:2:45:Infinity:undefined:undefined:undefined:undefined":5,"s:36:2:45:Infinity":12,"s:37:4:44:Infinity":13,"b:38:6:40:Infinity:undefined:undefined:undefined:undefined":6,"s:38:6:40:Infinity":14,"s:39:8:39:Infinity":15,"b:41:6:43:Infinity:undefined:undefined:undefined:undefined":7,"s:41:6:43:Infinity":16,"s:42:8:42:Infinity":17,"s:47:20:47:Infinity":18,"s:48:23:48:Infinity":19,"s:49:19:49:Infinity":20,"s:51:16:51:Infinity":21,"b:51:16:51:32:51:32:51:Infinity":8,"s:52:2:72:Infinity":22,"b:53:4:53:Infinity:undefined:undefined:undefined:undefined":9,"s:53:4:53:Infinity":23,"b:53:8:53:17:53:17:53:40":10,"s:53:40:53:Infinity":24,"s:55:21:55:Infinity":25,"b:55:21:55:34:55:34:55:Infinity":11,"s:59:22:59:Infinity":26,"b:59:22:59:48:59:48:59:Infinity":12,"b:61:4:71:Infinity:67:4:71:Infinity":13,"s:61:4:71:Infinity":27,"s:62:6:62:Infinity":28,"b:64:6:66:Infinity:undefined:undefined:undefined:undefined":14,"s:64:6:66:Infinity":29,"s:65:8:65:Infinity":30,"b:67:4:71:Infinity:69:11:71:Infinity":15,"s:67:4:71:Infinity":31,"s:68:6:68:Infinity":32,"s:70:6:70:Infinity":33,"s:74:2:76:Infinity":34,"s:78:2:78:Infinity":35}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\ordering.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\ordering.ts","statementMap":{"0":{"start":{"line":9,"column":36},"end":{"line":9,"column":null}},"1":{"start":{"line":11,"column":2},"end":{"line":11,"column":null}},"2":{"start":{"line":11,"column":25},"end":{"line":11,"column":null}},"3":{"start":{"line":14,"column":2},"end":{"line":19,"column":null}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":null}},"5":{"start":{"line":15,"column":31},"end":{"line":15,"column":50}},"6":{"start":{"line":16,"column":4},"end":{"line":18,"column":null}},"7":{"start":{"line":17,"column":6},"end":{"line":17,"column":null}},"8":{"start":{"line":22,"column":26},"end":{"line":22,"column":null}},"9":{"start":{"line":23,"column":2},"end":{"line":23,"column":null}},"10":{"start":{"line":26,"column":2},"end":{"line":33,"column":null}},"11":{"start":{"line":26,"column":18},"end":{"line":26,"column":21}},"12":{"start":{"line":28,"column":6},"end":{"line":30,"column":null}},"13":{"start":{"line":32,"column":4},"end":{"line":32,"column":null}},"14":{"start":{"line":32,"column":19},"end":{"line":32,"column":null}},"15":{"start":{"line":45,"column":2},"end":{"line":52,"column":null}},"16":{"start":{"line":46,"column":12},"end":{"line":46,"column":null}},"17":{"start":{"line":47,"column":4},"end":{"line":51,"column":null}},"18":{"start":{"line":49,"column":6},"end":{"line":49,"column":null}},"19":{"start":{"line":50,"column":6},"end":{"line":50,"column":null}},"20":{"start":{"line":65,"column":17},"end":{"line":65,"column":null}},"21":{"start":{"line":67,"column":2},"end":{"line":121,"column":null}},"22":{"start":{"line":67,"column":15},"end":{"line":67,"column":18}},"23":{"start":{"line":68,"column":22},"end":{"line":68,"column":null}},"24":{"start":{"line":71,"column":24},"end":{"line":71,"column":null}},"25":{"start":{"line":73,"column":4},"end":{"line":96,"column":null}},"26":{"start":{"line":74,"column":6},"end":{"line":95,"column":null}},"27":{"start":{"line":75,"column":18},"end":{"line":75,"column":null}},"28":{"start":{"line":76,"column":20},"end":{"line":76,"column":null}},"29":{"start":{"line":78,"column":8},"end":{"line":86,"column":null}},"30":{"start":{"line":79,"column":23},"end":{"line":79,"column":null}},"31":{"start":{"line":80,"column":10},"end":{"line":85,"column":null}},"32":{"start":{"line":82,"column":24},"end":{"line":82,"column":null}},"33":{"start":{"line":83,"column":12},"end":{"line":83,"column":null}},"34":{"start":{"line":84,"column":12},"end":{"line":84,"column":null}},"35":{"start":{"line":88,"column":8},"end":{"line":92,"column":null}},"36":{"start":{"line":89,"column":10},"end":{"line":89,"column":null}},"37":{"start":{"line":91,"column":10},"end":{"line":91,"column":null}},"38":{"start":{"line":94,"column":8},"end":{"line":94,"column":null}},"39":{"start":{"line":99,"column":21},"end":{"line":99,"column":null}},"40":{"start":{"line":99,"column":48},"end":{"line":99,"column":52}},"41":{"start":{"line":100,"column":4},"end":{"line":105,"column":null}},"42":{"start":{"line":101,"column":19},"end":{"line":101,"column":null}},"43":{"start":{"line":102,"column":19},"end":{"line":102,"column":null}},"44":{"start":{"line":103,"column":19},"end":{"line":103,"column":null}},"45":{"start":{"line":104,"column":6},"end":{"line":104,"column":null}},"46":{"start":{"line":108,"column":4},"end":{"line":110,"column":null}},"47":{"start":{"line":109,"column":6},"end":{"line":109,"column":null}},"48":{"start":{"line":113,"column":12},"end":{"line":113,"column":null}},"49":{"start":{"line":114,"column":4},"end":{"line":117,"column":null}},"50":{"start":{"line":115,"column":6},"end":{"line":115,"column":null}},"51":{"start":{"line":116,"column":6},"end":{"line":116,"column":null}},"52":{"start":{"line":119,"column":21},"end":{"line":119,"column":null}},"53":{"start":{"line":119,"column":48},"end":{"line":119,"column":52}},"54":{"start":{"line":120,"column":4},"end":{"line":120,"column":null}},"55":{"start":{"line":120,"column":31},"end":{"line":120,"column":null}},"56":{"start":{"line":123,"column":2},"end":{"line":123,"column":null}},"57":{"start":{"line":136,"column":17},"end":{"line":136,"column":null}},"58":{"start":{"line":138,"column":2},"end":{"line":192,"column":null}},"59":{"start":{"line":138,"column":15},"end":{"line":138,"column":34}},"60":{"start":{"line":139,"column":22},"end":{"line":139,"column":null}},"61":{"start":{"line":142,"column":24},"end":{"line":142,"column":null}},"62":{"start":{"line":144,"column":4},"end":{"line":167,"column":null}},"63":{"start":{"line":145,"column":6},"end":{"line":166,"column":null}},"64":{"start":{"line":146,"column":18},"end":{"line":146,"column":null}},"65":{"start":{"line":147,"column":20},"end":{"line":147,"column":null}},"66":{"start":{"line":149,"column":8},"end":{"line":157,"column":null}},"67":{"start":{"line":150,"column":23},"end":{"line":150,"column":null}},"68":{"start":{"line":151,"column":10},"end":{"line":156,"column":null}},"69":{"start":{"line":153,"column":24},"end":{"line":153,"column":null}},"70":{"start":{"line":154,"column":12},"end":{"line":154,"column":null}},"71":{"start":{"line":155,"column":12},"end":{"line":155,"column":null}},"72":{"start":{"line":159,"column":8},"end":{"line":163,"column":null}},"73":{"start":{"line":160,"column":10},"end":{"line":160,"column":null}},"74":{"start":{"line":162,"column":10},"end":{"line":162,"column":null}},"75":{"start":{"line":165,"column":8},"end":{"line":165,"column":null}},"76":{"start":{"line":170,"column":21},"end":{"line":170,"column":null}},"77":{"start":{"line":170,"column":48},"end":{"line":170,"column":52}},"78":{"start":{"line":171,"column":4},"end":{"line":176,"column":null}},"79":{"start":{"line":172,"column":19},"end":{"line":172,"column":null}},"80":{"start":{"line":173,"column":19},"end":{"line":173,"column":null}},"81":{"start":{"line":174,"column":19},"end":{"line":174,"column":null}},"82":{"start":{"line":175,"column":6},"end":{"line":175,"column":null}},"83":{"start":{"line":179,"column":4},"end":{"line":181,"column":null}},"84":{"start":{"line":180,"column":6},"end":{"line":180,"column":null}},"85":{"start":{"line":184,"column":12},"end":{"line":184,"column":null}},"86":{"start":{"line":185,"column":4},"end":{"line":188,"column":null}},"87":{"start":{"line":186,"column":6},"end":{"line":186,"column":null}},"88":{"start":{"line":187,"column":6},"end":{"line":187,"column":null}},"89":{"start":{"line":190,"column":21},"end":{"line":190,"column":null}},"90":{"start":{"line":190,"column":48},"end":{"line":190,"column":52}},"91":{"start":{"line":191,"column":4},"end":{"line":191,"column":null}},"92":{"start":{"line":191,"column":31},"end":{"line":191,"column":null}},"93":{"start":{"line":194,"column":2},"end":{"line":194,"column":null}}},"fnMap":{"0":{"name":"minimizeCrossings","decl":{"start":{"line":8,"column":16},"end":{"line":8,"column":34}},"loc":{"start":{"line":8,"column":60},"end":{"line":34,"column":null}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":21},"end":{"line":15,"column":22}},"loc":{"start":{"line":15,"column":31},"end":{"line":15,"column":50}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":16,"column":24},"end":{"line":16,"column":25}},"loc":{"start":{"line":16,"column":34},"end":{"line":18,"column":5}},"line":16},"3":{"name":"updateHeightPositions","decl":{"start":{"line":40,"column":9},"end":{"line":40,"column":null}},"loc":{"start":{"line":44,"column":8},"end":{"line":53,"column":null}},"line":44},"4":{"name":"sweepForward","decl":{"start":{"line":59,"column":9},"end":{"line":59,"column":null}},"loc":{"start":{"line":64,"column":11},"end":{"line":124,"column":null}},"line":64},"5":{"name":"(anonymous_5)","decl":{"start":{"line":99,"column":41},"end":{"line":99,"column":42}},"loc":{"start":{"line":99,"column":48},"end":{"line":99,"column":52}},"line":99},"6":{"name":"(anonymous_6)","decl":{"start":{"line":100,"column":25},"end":{"line":100,"column":26}},"loc":{"start":{"line":100,"column":35},"end":{"line":105,"column":5}},"line":100},"7":{"name":"(anonymous_7)","decl":{"start":{"line":108,"column":28},"end":{"line":108,"column":29}},"loc":{"start":{"line":108,"column":40},"end":{"line":110,"column":5}},"line":108},"8":{"name":"(anonymous_8)","decl":{"start":{"line":119,"column":41},"end":{"line":119,"column":42}},"loc":{"start":{"line":119,"column":48},"end":{"line":119,"column":52}},"line":119},"9":{"name":"sweepBackward","decl":{"start":{"line":130,"column":9},"end":{"line":130,"column":null}},"loc":{"start":{"line":135,"column":11},"end":{"line":195,"column":null}},"line":135},"10":{"name":"(anonymous_10)","decl":{"start":{"line":170,"column":41},"end":{"line":170,"column":42}},"loc":{"start":{"line":170,"column":48},"end":{"line":170,"column":52}},"line":170},"11":{"name":"(anonymous_11)","decl":{"start":{"line":171,"column":25},"end":{"line":171,"column":26}},"loc":{"start":{"line":171,"column":35},"end":{"line":176,"column":5}},"line":171},"12":{"name":"(anonymous_12)","decl":{"start":{"line":179,"column":28},"end":{"line":179,"column":29}},"loc":{"start":{"line":179,"column":40},"end":{"line":181,"column":5}},"line":179},"13":{"name":"(anonymous_13)","decl":{"start":{"line":190,"column":41},"end":{"line":190,"column":42}},"loc":{"start":{"line":190,"column":48},"end":{"line":190,"column":52}},"line":190}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":null}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":11,"column":null}},{"start":{},"end":{}}],"line":11},"1":{"loc":{"start":{"line":28,"column":6},"end":{"line":30,"column":null}},"type":"cond-expr","locations":[{"start":{"line":29,"column":10},"end":{"line":29,"column":null}},{"start":{"line":30,"column":10},"end":{"line":30,"column":null}}],"line":28},"2":{"loc":{"start":{"line":32,"column":4},"end":{"line":32,"column":null}},"type":"if","locations":[{"start":{"line":32,"column":4},"end":{"line":32,"column":null}},{"start":{},"end":{}}],"line":32},"3":{"loc":{"start":{"line":74,"column":6},"end":{"line":95,"column":null}},"type":"if","locations":[{"start":{"line":74,"column":6},"end":{"line":95,"column":null}},{"start":{"line":93,"column":13},"end":{"line":95,"column":null}}],"line":74},"4":{"loc":{"start":{"line":80,"column":10},"end":{"line":85,"column":null}},"type":"if","locations":[{"start":{"line":80,"column":10},"end":{"line":85,"column":null}},{"start":{},"end":{}}],"line":80},"5":{"loc":{"start":{"line":80,"column":14},"end":{"line":80,"column":44}},"type":"binary-expr","locations":[{"start":{"line":80,"column":14},"end":{"line":80,"column":22}},{"start":{"line":80,"column":22},"end":{"line":80,"column":44}}],"line":80},"6":{"loc":{"start":{"line":82,"column":24},"end":{"line":82,"column":null}},"type":"binary-expr","locations":[{"start":{"line":82,"column":24},"end":{"line":82,"column":55}},{"start":{"line":82,"column":55},"end":{"line":82,"column":null}}],"line":82},"7":{"loc":{"start":{"line":88,"column":8},"end":{"line":92,"column":null}},"type":"if","locations":[{"start":{"line":88,"column":8},"end":{"line":92,"column":null}},{"start":{"line":90,"column":15},"end":{"line":92,"column":null}}],"line":88},"8":{"loc":{"start":{"line":91,"column":35},"end":{"line":91,"column":68}},"type":"binary-expr","locations":[{"start":{"line":91,"column":35},"end":{"line":91,"column":67}},{"start":{"line":91,"column":67},"end":{"line":91,"column":68}}],"line":91},"9":{"loc":{"start":{"line":94,"column":33},"end":{"line":94,"column":66}},"type":"binary-expr","locations":[{"start":{"line":94,"column":33},"end":{"line":94,"column":65}},{"start":{"line":94,"column":65},"end":{"line":94,"column":66}}],"line":94},"10":{"loc":{"start":{"line":101,"column":19},"end":{"line":101,"column":null}},"type":"binary-expr","locations":[{"start":{"line":101,"column":19},"end":{"line":101,"column":44}},{"start":{"line":101,"column":44},"end":{"line":101,"column":null}}],"line":101},"11":{"loc":{"start":{"line":102,"column":19},"end":{"line":102,"column":null}},"type":"binary-expr","locations":[{"start":{"line":102,"column":19},"end":{"line":102,"column":44}},{"start":{"line":102,"column":44},"end":{"line":102,"column":null}}],"line":102},"12":{"loc":{"start":{"line":104,"column":13},"end":{"line":104,"column":null}},"type":"cond-expr","locations":[{"start":{"line":104,"column":26},"end":{"line":104,"column":33}},{"start":{"line":104,"column":33},"end":{"line":104,"column":null}}],"line":104},"13":{"loc":{"start":{"line":120,"column":4},"end":{"line":120,"column":null}},"type":"if","locations":[{"start":{"line":120,"column":4},"end":{"line":120,"column":null}},{"start":{},"end":{}}],"line":120},"14":{"loc":{"start":{"line":145,"column":6},"end":{"line":166,"column":null}},"type":"if","locations":[{"start":{"line":145,"column":6},"end":{"line":166,"column":null}},{"start":{"line":164,"column":13},"end":{"line":166,"column":null}}],"line":145},"15":{"loc":{"start":{"line":151,"column":10},"end":{"line":156,"column":null}},"type":"if","locations":[{"start":{"line":151,"column":10},"end":{"line":156,"column":null}},{"start":{},"end":{}}],"line":151},"16":{"loc":{"start":{"line":151,"column":14},"end":{"line":151,"column":44}},"type":"binary-expr","locations":[{"start":{"line":151,"column":14},"end":{"line":151,"column":22}},{"start":{"line":151,"column":22},"end":{"line":151,"column":44}}],"line":151},"17":{"loc":{"start":{"line":153,"column":24},"end":{"line":153,"column":null}},"type":"binary-expr","locations":[{"start":{"line":153,"column":24},"end":{"line":153,"column":55}},{"start":{"line":153,"column":55},"end":{"line":153,"column":null}}],"line":153},"18":{"loc":{"start":{"line":159,"column":8},"end":{"line":163,"column":null}},"type":"if","locations":[{"start":{"line":159,"column":8},"end":{"line":163,"column":null}},{"start":{"line":161,"column":15},"end":{"line":163,"column":null}}],"line":159},"19":{"loc":{"start":{"line":162,"column":35},"end":{"line":162,"column":68}},"type":"binary-expr","locations":[{"start":{"line":162,"column":35},"end":{"line":162,"column":67}},{"start":{"line":162,"column":67},"end":{"line":162,"column":68}}],"line":162},"20":{"loc":{"start":{"line":165,"column":33},"end":{"line":165,"column":66}},"type":"binary-expr","locations":[{"start":{"line":165,"column":33},"end":{"line":165,"column":65}},{"start":{"line":165,"column":65},"end":{"line":165,"column":66}}],"line":165},"21":{"loc":{"start":{"line":172,"column":19},"end":{"line":172,"column":null}},"type":"binary-expr","locations":[{"start":{"line":172,"column":19},"end":{"line":172,"column":44}},{"start":{"line":172,"column":44},"end":{"line":172,"column":null}}],"line":172},"22":{"loc":{"start":{"line":173,"column":19},"end":{"line":173,"column":null}},"type":"binary-expr","locations":[{"start":{"line":173,"column":19},"end":{"line":173,"column":44}},{"start":{"line":173,"column":44},"end":{"line":173,"column":null}}],"line":173},"23":{"loc":{"start":{"line":175,"column":13},"end":{"line":175,"column":null}},"type":"cond-expr","locations":[{"start":{"line":175,"column":26},"end":{"line":175,"column":33}},{"start":{"line":175,"column":33},"end":{"line":175,"column":null}}],"line":175},"24":{"loc":{"start":{"line":191,"column":4},"end":{"line":191,"column":null}},"type":"if","locations":[{"start":{"line":191,"column":4},"end":{"line":191,"column":null}},{"start":{},"end":{}}],"line":191}},"s":{"0":30,"1":30,"2":2,"3":28,"4":154,"5":84,"6":154,"7":217,"8":28,"9":28,"10":28,"11":28,"12":42,"13":42,"14":28,"15":28,"16":154,"17":154,"18":217,"19":217,"20":28,"21":28,"22":28,"23":126,"24":126,"25":126,"26":154,"27":154,"28":154,"29":154,"30":280,"31":280,"32":175,"33":175,"34":175,"35":154,"36":154,"37":0,"38":0,"39":126,"40":154,"41":126,"42":42,"43":42,"44":42,"45":42,"46":126,"47":154,"48":126,"49":126,"50":154,"51":154,"52":126,"53":154,"54":126,"55":21,"56":126,"57":14,"58":14,"59":14,"60":70,"61":70,"62":70,"63":126,"64":126,"65":126,"66":126,"67":189,"68":189,"69":119,"70":119,"71":119,"72":126,"73":98,"74":28,"75":0,"76":70,"77":126,"78":70,"79":56,"80":56,"81":56,"82":56,"83":70,"84":126,"85":70,"86":70,"87":126,"88":126,"89":70,"90":126,"91":70,"92":0,"93":70},"f":{"0":30,"1":84,"2":217,"3":28,"4":28,"5":154,"6":42,"7":154,"8":154,"9":14,"10":126,"11":56,"12":126,"13":126},"b":{"0":[2,28],"1":[28,14],"2":[28,14],"3":[154,0],"4":[175,105],"5":[280,280],"6":[175,0],"7":[154,0],"8":[0,0],"9":[0,0],"10":[42,0],"11":[42,0],"12":[21,21],"13":[21,105],"14":[126,0],"15":[119,70],"16":[189,189],"17":[119,0],"18":[98,28],"19":[28,0],"20":[0,0],"21":[56,0],"22":[56,0],"23":[42,14],"24":[0,70]},"meta":{"lastBranch":25,"lastFunction":14,"lastStatement":94,"seen":{"f:8:16:8:34":0,"s:9:36:9:Infinity":0,"b:11:2:11:Infinity:undefined:undefined:undefined:undefined":0,"s:11:2:11:Infinity":1,"s:11:25:11:Infinity":2,"s:14:2:19:Infinity":3,"s:15:4:15:Infinity":4,"f:15:21:15:22":1,"s:15:31:15:50":5,"s:16:4:18:Infinity":6,"f:16:24:16:25":2,"s:17:6:17:Infinity":7,"s:22:26:22:Infinity":8,"s:23:2:23:Infinity":9,"s:26:2:33:Infinity":10,"s:26:18:26:21":11,"s:28:6:30:Infinity":12,"b:29:10:29:Infinity:30:10:30:Infinity":1,"b:32:4:32:Infinity:undefined:undefined:undefined:undefined":2,"s:32:4:32:Infinity":13,"s:32:19:32:Infinity":14,"f:40:9:40:Infinity":3,"s:45:2:52:Infinity":15,"s:46:12:46:Infinity":16,"s:47:4:51:Infinity":17,"s:49:6:49:Infinity":18,"s:50:6:50:Infinity":19,"f:59:9:59:Infinity":4,"s:65:17:65:Infinity":20,"s:67:2:121:Infinity":21,"s:67:15:67:18":22,"s:68:22:68:Infinity":23,"s:71:24:71:Infinity":24,"s:73:4:96:Infinity":25,"b:74:6:95:Infinity:93:13:95:Infinity":3,"s:74:6:95:Infinity":26,"s:75:18:75:Infinity":27,"s:76:20:76:Infinity":28,"s:78:8:86:Infinity":29,"s:79:23:79:Infinity":30,"b:80:10:85:Infinity:undefined:undefined:undefined:undefined":4,"s:80:10:85:Infinity":31,"b:80:14:80:22:80:22:80:44":5,"s:82:24:82:Infinity":32,"b:82:24:82:55:82:55:82:Infinity":6,"s:83:12:83:Infinity":33,"s:84:12:84:Infinity":34,"b:88:8:92:Infinity:90:15:92:Infinity":7,"s:88:8:92:Infinity":35,"s:89:10:89:Infinity":36,"s:91:10:91:Infinity":37,"b:91:35:91:67:91:67:91:68":8,"s:94:8:94:Infinity":38,"b:94:33:94:65:94:65:94:66":9,"s:99:21:99:Infinity":39,"f:99:41:99:42":5,"s:99:48:99:52":40,"s:100:4:105:Infinity":41,"f:100:25:100:26":6,"s:101:19:101:Infinity":42,"b:101:19:101:44:101:44:101:Infinity":10,"s:102:19:102:Infinity":43,"b:102:19:102:44:102:44:102:Infinity":11,"s:103:19:103:Infinity":44,"s:104:6:104:Infinity":45,"b:104:26:104:33:104:33:104:Infinity":12,"s:108:4:110:Infinity":46,"f:108:28:108:29":7,"s:109:6:109:Infinity":47,"s:113:12:113:Infinity":48,"s:114:4:117:Infinity":49,"s:115:6:115:Infinity":50,"s:116:6:116:Infinity":51,"s:119:21:119:Infinity":52,"f:119:41:119:42":8,"s:119:48:119:52":53,"b:120:4:120:Infinity:undefined:undefined:undefined:undefined":13,"s:120:4:120:Infinity":54,"s:120:31:120:Infinity":55,"s:123:2:123:Infinity":56,"f:130:9:130:Infinity":9,"s:136:17:136:Infinity":57,"s:138:2:192:Infinity":58,"s:138:15:138:34":59,"s:139:22:139:Infinity":60,"s:142:24:142:Infinity":61,"s:144:4:167:Infinity":62,"b:145:6:166:Infinity:164:13:166:Infinity":14,"s:145:6:166:Infinity":63,"s:146:18:146:Infinity":64,"s:147:20:147:Infinity":65,"s:149:8:157:Infinity":66,"s:150:23:150:Infinity":67,"b:151:10:156:Infinity:undefined:undefined:undefined:undefined":15,"s:151:10:156:Infinity":68,"b:151:14:151:22:151:22:151:44":16,"s:153:24:153:Infinity":69,"b:153:24:153:55:153:55:153:Infinity":17,"s:154:12:154:Infinity":70,"s:155:12:155:Infinity":71,"b:159:8:163:Infinity:161:15:163:Infinity":18,"s:159:8:163:Infinity":72,"s:160:10:160:Infinity":73,"s:162:10:162:Infinity":74,"b:162:35:162:67:162:67:162:68":19,"s:165:8:165:Infinity":75,"b:165:33:165:65:165:65:165:66":20,"s:170:21:170:Infinity":76,"f:170:41:170:42":10,"s:170:48:170:52":77,"s:171:4:176:Infinity":78,"f:171:25:171:26":11,"s:172:19:172:Infinity":79,"b:172:19:172:44:172:44:172:Infinity":21,"s:173:19:173:Infinity":80,"b:173:19:173:44:173:44:173:Infinity":22,"s:174:19:174:Infinity":81,"s:175:6:175:Infinity":82,"b:175:26:175:33:175:33:175:Infinity":23,"s:179:4:181:Infinity":83,"f:179:28:179:29":12,"s:180:6:180:Infinity":84,"s:184:12:184:Infinity":85,"s:185:4:188:Infinity":86,"s:186:6:186:Infinity":87,"s:187:6:187:Infinity":88,"s:190:21:190:Infinity":89,"f:190:41:190:42":13,"s:190:48:190:52":90,"b:191:4:191:Infinity:undefined:undefined:undefined:undefined":24,"s:191:4:191:Infinity":91,"s:191:31:191:Infinity":92,"s:194:2:194:Infinity":93}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\positioning.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\positioning.ts","statementMap":{"0":{"start":{"line":27,"column":27},"end":{"line":27,"column":null}},"1":{"start":{"line":33,"column":50},"end":{"line":33,"column":null}},"2":{"start":{"line":35,"column":2},"end":{"line":37,"column":null}},"3":{"start":{"line":36,"column":4},"end":{"line":36,"column":null}},"4":{"start":{"line":39,"column":17},"end":{"line":39,"column":null}},"5":{"start":{"line":40,"column":2},"end":{"line":45,"column":null}},"6":{"start":{"line":41,"column":17},"end":{"line":41,"column":null}},"7":{"start":{"line":42,"column":4},"end":{"line":44,"column":null}},"8":{"start":{"line":43,"column":6},"end":{"line":43,"column":null}},"9":{"start":{"line":46,"column":2},"end":{"line":46,"column":null}},"10":{"start":{"line":54,"column":29},"end":{"line":54,"column":null}},"11":{"start":{"line":55,"column":32},"end":{"line":55,"column":null}},"12":{"start":{"line":57,"column":10},"end":{"line":57,"column":null}},"13":{"start":{"line":58,"column":2},"end":{"line":61,"column":null}},"14":{"start":{"line":59,"column":4},"end":{"line":59,"column":null}},"15":{"start":{"line":60,"column":4},"end":{"line":60,"column":null}},"16":{"start":{"line":70,"column":29},"end":{"line":70,"column":null}},"17":{"start":{"line":71,"column":32},"end":{"line":71,"column":null}},"18":{"start":{"line":74,"column":22},"end":{"line":74,"column":null}},"19":{"start":{"line":75,"column":2},"end":{"line":79,"column":null}},"20":{"start":{"line":76,"column":4},"end":{"line":78,"column":null}},"21":{"start":{"line":77,"column":6},"end":{"line":77,"column":null}},"22":{"start":{"line":82,"column":10},"end":{"line":82,"column":null}},"23":{"start":{"line":83,"column":2},"end":{"line":86,"column":null}},"24":{"start":{"line":84,"column":4},"end":{"line":84,"column":null}},"25":{"start":{"line":85,"column":4},"end":{"line":85,"column":null}},"26":{"start":{"line":89,"column":2},"end":{"line":94,"column":null}},"27":{"start":{"line":90,"column":4},"end":{"line":93,"column":null}},"28":{"start":{"line":91,"column":21},"end":{"line":91,"column":null}},"29":{"start":{"line":92,"column":6},"end":{"line":92,"column":null}},"30":{"start":{"line":103,"column":29},"end":{"line":103,"column":null}},"31":{"start":{"line":106,"column":21},"end":{"line":106,"column":null}},"32":{"start":{"line":108,"column":2},"end":{"line":166,"column":null}},"33":{"start":{"line":110,"column":23},"end":{"line":110,"column":null}},"34":{"start":{"line":110,"column":49},"end":{"line":110,"column":72}},"35":{"start":{"line":111,"column":28},"end":{"line":111,"column":null}},"36":{"start":{"line":111,"column":54},"end":{"line":111,"column":78}},"37":{"start":{"line":113,"column":12},"end":{"line":113,"column":null}},"38":{"start":{"line":114,"column":68},"end":{"line":114,"column":null}},"39":{"start":{"line":117,"column":4},"end":{"line":122,"column":null}},"40":{"start":{"line":118,"column":6},"end":{"line":118,"column":null}},"41":{"start":{"line":119,"column":6},"end":{"line":119,"column":null}},"42":{"start":{"line":120,"column":6},"end":{"line":120,"column":null}},"43":{"start":{"line":121,"column":6},"end":{"line":121,"column":null}},"44":{"start":{"line":125,"column":4},"end":{"line":165,"column":null}},"45":{"start":{"line":127,"column":20},"end":{"line":127,"column":null}},"46":{"start":{"line":128,"column":6},"end":{"line":130,"column":null}},"47":{"start":{"line":129,"column":8},"end":{"line":129,"column":null}},"48":{"start":{"line":133,"column":22},"end":{"line":133,"column":null}},"49":{"start":{"line":133,"column":49},"end":{"line":133,"column":53}},"50":{"start":{"line":134,"column":12},"end":{"line":134,"column":null}},"51":{"start":{"line":136,"column":6},"end":{"line":136,"column":null}},"52":{"start":{"line":139,"column":6},"end":{"line":158,"column":null}},"53":{"start":{"line":140,"column":19},"end":{"line":140,"column":null}},"54":{"start":{"line":141,"column":19},"end":{"line":141,"column":null}},"55":{"start":{"line":144,"column":8},"end":{"line":148,"column":null}},"56":{"start":{"line":145,"column":10},"end":{"line":147,"column":null}},"57":{"start":{"line":146,"column":12},"end":{"line":146,"column":null}},"58":{"start":{"line":150,"column":8},"end":{"line":157,"column":null}},"59":{"start":{"line":151,"column":23},"end":{"line":151,"column":null}},"60":{"start":{"line":151,"column":51},"end":{"line":151,"column":66}},"61":{"start":{"line":152,"column":10},"end":{"line":156,"column":null}},"62":{"start":{"line":153,"column":12},"end":{"line":153,"column":null}},"63":{"start":{"line":154,"column":12},"end":{"line":154,"column":null}},"64":{"start":{"line":155,"column":12},"end":{"line":155,"column":null}},"65":{"start":{"line":161,"column":12},"end":{"line":161,"column":null}},"66":{"start":{"line":162,"column":6},"end":{"line":164,"column":null}},"67":{"start":{"line":163,"column":8},"end":{"line":163,"column":null}},"68":{"start":{"line":168,"column":2},"end":{"line":168,"column":null}},"69":{"start":{"line":176,"column":63},"end":{"line":176,"column":null}},"70":{"start":{"line":178,"column":2},"end":{"line":180,"column":null}},"71":{"start":{"line":179,"column":4},"end":{"line":179,"column":null}},"72":{"start":{"line":183,"column":43},"end":{"line":183,"column":null}},"73":{"start":{"line":184,"column":2},"end":{"line":189,"column":null}},"74":{"start":{"line":185,"column":4},"end":{"line":187,"column":null}},"75":{"start":{"line":186,"column":6},"end":{"line":186,"column":null}},"76":{"start":{"line":188,"column":4},"end":{"line":188,"column":null}},"77":{"start":{"line":191,"column":2},"end":{"line":194,"column":null}},"78":{"start":{"line":192,"column":4},"end":{"line":192,"column":null}},"79":{"start":{"line":193,"column":4},"end":{"line":193,"column":null}},"80":{"start":{"line":197,"column":16},"end":{"line":197,"column":null}},"81":{"start":{"line":198,"column":2},"end":{"line":206,"column":null}},"82":{"start":{"line":199,"column":17},"end":{"line":199,"column":null}},"83":{"start":{"line":200,"column":4},"end":{"line":205,"column":null}},"84":{"start":{"line":201,"column":6},"end":{"line":204,"column":null}},"85":{"start":{"line":209,"column":8},"end":{"line":212,"column":null}},"86":{"start":{"line":215,"column":12},"end":{"line":215,"column":null}},"87":{"start":{"line":216,"column":12},"end":{"line":216,"column":null}},"88":{"start":{"line":218,"column":2},"end":{"line":230,"column":null}},"89":{"start":{"line":219,"column":4},"end":{"line":229,"column":null}},"90":{"start":{"line":220,"column":19},"end":{"line":220,"column":null}},"91":{"start":{"line":221,"column":6},"end":{"line":228,"column":null}},"92":{"start":{"line":223,"column":8},"end":{"line":225,"column":null}},"93":{"start":{"line":224,"column":10},"end":{"line":224,"column":null}},"94":{"start":{"line":226,"column":8},"end":{"line":226,"column":null}},"95":{"start":{"line":227,"column":8},"end":{"line":227,"column":null}},"96":{"start":{"line":232,"column":2},"end":{"line":234,"column":null}},"97":{"start":{"line":243,"column":83},"end":{"line":243,"column":null}},"98":{"start":{"line":246,"column":2},"end":{"line":274,"column":null}},"99":{"start":{"line":247,"column":4},"end":{"line":250,"column":null}},"100":{"start":{"line":249,"column":6},"end":{"line":249,"column":null}},"101":{"start":{"line":253,"column":4},"end":{"line":260,"column":null}},"102":{"start":{"line":254,"column":6},"end":{"line":254,"column":null}},"103":{"start":{"line":255,"column":6},"end":{"line":255,"column":null}},"104":{"start":{"line":256,"column":6},"end":{"line":258,"column":null}},"105":{"start":{"line":259,"column":6},"end":{"line":259,"column":null}},"106":{"start":{"line":262,"column":22},"end":{"line":262,"column":null}},"107":{"start":{"line":265,"column":4},"end":{"line":267,"column":null}},"108":{"start":{"line":266,"column":6},"end":{"line":266,"column":null}},"109":{"start":{"line":270,"column":4},"end":{"line":273,"column":null}},"110":{"start":{"line":271,"column":6},"end":{"line":271,"column":null}},"111":{"start":{"line":272,"column":6},"end":{"line":272,"column":null}},"112":{"start":{"line":277,"column":2},"end":{"line":294,"column":null}},"113":{"start":{"line":279,"column":27},"end":{"line":279,"column":null}},"114":{"start":{"line":279,"column":48},"end":{"line":279,"column":62}},"115":{"start":{"line":281,"column":4},"end":{"line":293,"column":null}},"116":{"start":{"line":282,"column":20},"end":{"line":282,"column":null}},"117":{"start":{"line":283,"column":6},"end":{"line":283,"column":null}},"118":{"start":{"line":283,"column":31},"end":{"line":283,"column":null}},"119":{"start":{"line":285,"column":22},"end":{"line":285,"column":null}},"120":{"start":{"line":286,"column":6},"end":{"line":286,"column":null}},"121":{"start":{"line":286,"column":20},"end":{"line":286,"column":null}},"122":{"start":{"line":289,"column":21},"end":{"line":289,"column":null}},"123":{"start":{"line":290,"column":21},"end":{"line":290,"column":null}},"124":{"start":{"line":292,"column":6},"end":{"line":292,"column":null}},"125":{"start":{"line":297,"column":2},"end":{"line":297,"column":null}},"126":{"start":{"line":300,"column":2},"end":{"line":338,"column":null}},"127":{"start":{"line":302,"column":22},"end":{"line":302,"column":null}},"128":{"start":{"line":303,"column":18},"end":{"line":303,"column":null}},"129":{"start":{"line":305,"column":4},"end":{"line":312,"column":null}},"130":{"start":{"line":306,"column":6},"end":{"line":308,"column":null}},"131":{"start":{"line":307,"column":8},"end":{"line":307,"column":null}},"132":{"start":{"line":309,"column":6},"end":{"line":311,"column":null}},"133":{"start":{"line":310,"column":8},"end":{"line":310,"column":null}},"134":{"start":{"line":315,"column":4},"end":{"line":318,"column":null}},"135":{"start":{"line":316,"column":6},"end":{"line":316,"column":null}},"136":{"start":{"line":317,"column":6},"end":{"line":317,"column":null}},"137":{"start":{"line":321,"column":4},"end":{"line":321,"column":null}},"138":{"start":{"line":324,"column":4},"end":{"line":333,"column":null}},"139":{"start":{"line":325,"column":6},"end":{"line":332,"column":null}},"140":{"start":{"line":326,"column":20},"end":{"line":326,"column":null}},"141":{"start":{"line":327,"column":21},"end":{"line":327,"column":null}},"142":{"start":{"line":328,"column":8},"end":{"line":331,"column":null}},"143":{"start":{"line":329,"column":10},"end":{"line":329,"column":null}},"144":{"start":{"line":330,"column":10},"end":{"line":330,"column":null}},"145":{"start":{"line":335,"column":4},"end":{"line":337,"column":null}},"146":{"start":{"line":354,"column":32},"end":{"line":354,"column":null}},"147":{"start":{"line":355,"column":2},"end":{"line":360,"column":null}},"148":{"start":{"line":356,"column":17},"end":{"line":356,"column":null}},"149":{"start":{"line":357,"column":4},"end":{"line":357,"column":null}},"150":{"start":{"line":357,"column":15},"end":{"line":357,"column":null}},"151":{"start":{"line":358,"column":4},"end":{"line":358,"column":null}},"152":{"start":{"line":358,"column":43},"end":{"line":358,"column":null}},"153":{"start":{"line":359,"column":4},"end":{"line":359,"column":null}},"154":{"start":{"line":363,"column":2},"end":{"line":365,"column":null}},"155":{"start":{"line":364,"column":4},"end":{"line":364,"column":null}},"156":{"start":{"line":367,"column":2},"end":{"line":367,"column":null}},"157":{"start":{"line":370,"column":8},"end":{"line":370,"column":null}},"158":{"start":{"line":372,"column":15},"end":{"line":372,"column":null}},"159":{"start":{"line":374,"column":2},"end":{"line":438,"column":null}},"160":{"start":{"line":375,"column":4},"end":{"line":437,"column":null}},"161":{"start":{"line":377,"column":12},"end":{"line":377,"column":null}},"162":{"start":{"line":379,"column":14},"end":{"line":379,"column":null}},"163":{"start":{"line":380,"column":6},"end":{"line":403,"column":null}},"164":{"start":{"line":380,"column":26},"end":{"line":380,"column":29}},"165":{"start":{"line":381,"column":22},"end":{"line":381,"column":null}},"166":{"start":{"line":382,"column":8},"end":{"line":382,"column":null}},"167":{"start":{"line":382,"column":32},"end":{"line":382,"column":null}},"168":{"start":{"line":385,"column":8},"end":{"line":385,"column":null}},"169":{"start":{"line":385,"column":23},"end":{"line":385,"column":72}},"170":{"start":{"line":387,"column":16},"end":{"line":387,"column":null}},"171":{"start":{"line":388,"column":28},"end":{"line":388,"column":null}},"172":{"start":{"line":390,"column":8},"end":{"line":399,"column":null}},"173":{"start":{"line":391,"column":10},"end":{"line":395,"column":null}},"174":{"start":{"line":392,"column":12},"end":{"line":392,"column":null}},"175":{"start":{"line":393,"column":12},"end":{"line":393,"column":null}},"176":{"start":{"line":394,"column":12},"end":{"line":394,"column":null}},"177":{"start":{"line":397,"column":10},"end":{"line":397,"column":null}},"178":{"start":{"line":398,"column":10},"end":{"line":398,"column":null}},"179":{"start":{"line":401,"column":8},"end":{"line":401,"column":null}},"180":{"start":{"line":402,"column":8},"end":{"line":402,"column":null}},"181":{"start":{"line":407,"column":6},"end":{"line":407,"column":null}},"182":{"start":{"line":407,"column":23},"end":{"line":407,"column":72}},"183":{"start":{"line":410,"column":20},"end":{"line":410,"column":null}},"184":{"start":{"line":411,"column":6},"end":{"line":416,"column":null}},"185":{"start":{"line":412,"column":8},"end":{"line":415,"column":null}},"186":{"start":{"line":419,"column":22},"end":{"line":419,"column":null}},"187":{"start":{"line":419,"column":41},"end":{"line":419,"column":45}},"188":{"start":{"line":420,"column":12},"end":{"line":420,"column":null}},"189":{"start":{"line":422,"column":14},"end":{"line":422,"column":null}},"190":{"start":{"line":423,"column":6},"end":{"line":435,"column":null}},"191":{"start":{"line":424,"column":16},"end":{"line":424,"column":null}},"192":{"start":{"line":425,"column":8},"end":{"line":433,"column":null}},"193":{"start":{"line":426,"column":23},"end":{"line":426,"column":null}},"194":{"start":{"line":427,"column":10},"end":{"line":432,"column":null}},"195":{"start":{"line":428,"column":12},"end":{"line":428,"column":null}},"196":{"start":{"line":429,"column":12},"end":{"line":429,"column":null}},"197":{"start":{"line":430,"column":12},"end":{"line":430,"column":null}},"198":{"start":{"line":431,"column":12},"end":{"line":431,"column":null}},"199":{"start":{"line":434,"column":8},"end":{"line":434,"column":null}},"200":{"start":{"line":436,"column":6},"end":{"line":436,"column":null}},"201":{"start":{"line":441,"column":2},"end":{"line":457,"column":null}},"202":{"start":{"line":443,"column":24},"end":{"line":443,"column":null}},"203":{"start":{"line":444,"column":24},"end":{"line":444,"column":null}},"204":{"start":{"line":447,"column":22},"end":{"line":447,"column":null}},"205":{"start":{"line":450,"column":4},"end":{"line":454,"column":null}},"206":{"start":{"line":451,"column":6},"end":{"line":451,"column":null}},"207":{"start":{"line":452,"column":6},"end":{"line":452,"column":null}},"208":{"start":{"line":453,"column":6},"end":{"line":453,"column":null}},"209":{"start":{"line":456,"column":4},"end":{"line":456,"column":null}},"210":{"start":{"line":459,"column":2},"end":{"line":459,"column":null}},"211":{"start":{"line":468,"column":2},"end":{"line":468,"column":null}},"212":{"start":{"line":468,"column":26},"end":{"line":468,"column":null}},"213":{"start":{"line":470,"column":13},"end":{"line":470,"column":null}},"214":{"start":{"line":471,"column":13},"end":{"line":471,"column":null}},"215":{"start":{"line":473,"column":2},"end":{"line":476,"column":null}},"216":{"start":{"line":474,"column":4},"end":{"line":474,"column":null}},"217":{"start":{"line":475,"column":4},"end":{"line":475,"column":null}},"218":{"start":{"line":478,"column":2},"end":{"line":478,"column":null}},"219":{"start":{"line":478,"column":25},"end":{"line":478,"column":null}},"220":{"start":{"line":479,"column":2},"end":{"line":479,"column":null}},"221":{"start":{"line":488,"column":21},"end":{"line":488,"column":null}},"222":{"start":{"line":492,"column":23},"end":{"line":492,"column":null}},"223":{"start":{"line":494,"column":2},"end":{"line":507,"column":null}},"224":{"start":{"line":495,"column":28},"end":{"line":495,"column":null}},"225":{"start":{"line":495,"column":54},"end":{"line":495,"column":78}},"226":{"start":{"line":497,"column":4},"end":{"line":500,"column":null}},"227":{"start":{"line":499,"column":6},"end":{"line":499,"column":null}},"228":{"start":{"line":502,"column":19},"end":{"line":502,"column":null}},"229":{"start":{"line":503,"column":4},"end":{"line":503,"column":null}},"230":{"start":{"line":503,"column":17},"end":{"line":503,"column":null}},"231":{"start":{"line":505,"column":24},"end":{"line":505,"column":null}},"232":{"start":{"line":506,"column":4},"end":{"line":506,"column":null}},"233":{"start":{"line":510,"column":2},"end":{"line":510,"column":null}},"234":{"start":{"line":510,"column":28},"end":{"line":510,"column":null}},"235":{"start":{"line":513,"column":2},"end":{"line":525,"column":null}},"236":{"start":{"line":514,"column":4},"end":{"line":514,"column":null}},"237":{"start":{"line":514,"column":34},"end":{"line":514,"column":null}},"238":{"start":{"line":516,"column":19},"end":{"line":516,"column":null}},"239":{"start":{"line":517,"column":4},"end":{"line":517,"column":null}},"240":{"start":{"line":517,"column":17},"end":{"line":517,"column":null}},"241":{"start":{"line":519,"column":24},"end":{"line":519,"column":null}},"242":{"start":{"line":520,"column":10},"end":{"line":520,"column":null}},"243":{"start":{"line":522,"column":4},"end":{"line":524,"column":null}},"244":{"start":{"line":523,"column":6},"end":{"line":523,"column":null}},"245":{"start":{"line":533,"column":35},"end":{"line":533,"column":null}},"246":{"start":{"line":534,"column":63},"end":{"line":534,"column":null}},"247":{"start":{"line":536,"column":2},"end":{"line":536,"column":null}},"248":{"start":{"line":536,"column":17},"end":{"line":536,"column":null}},"249":{"start":{"line":539,"column":2},"end":{"line":556,"column":null}},"250":{"start":{"line":540,"column":4},"end":{"line":540,"column":null}},"251":{"start":{"line":540,"column":24},"end":{"line":540,"column":null}},"252":{"start":{"line":541,"column":14},"end":{"line":541,"column":null}},"253":{"start":{"line":542,"column":14},"end":{"line":542,"column":null}},"254":{"start":{"line":543,"column":4},"end":{"line":555,"column":null}},"255":{"start":{"line":559,"column":2},"end":{"line":578,"column":null}},"256":{"start":{"line":560,"column":4},"end":{"line":560,"column":null}},"257":{"start":{"line":560,"column":34},"end":{"line":560,"column":null}},"258":{"start":{"line":561,"column":4},"end":{"line":561,"column":null}},"259":{"start":{"line":561,"column":43},"end":{"line":561,"column":null}},"260":{"start":{"line":563,"column":27},"end":{"line":563,"column":null}},"261":{"start":{"line":564,"column":14},"end":{"line":564,"column":null}},"262":{"start":{"line":565,"column":14},"end":{"line":565,"column":null}},"263":{"start":{"line":566,"column":4},"end":{"line":577,"column":null}},"264":{"start":{"line":580,"column":2},"end":{"line":580,"column":null}},"265":{"start":{"line":594,"column":19},"end":{"line":594,"column":null}},"266":{"start":{"line":595,"column":19},"end":{"line":595,"column":null}},"267":{"start":{"line":596,"column":24},"end":{"line":596,"column":null}},"268":{"start":{"line":598,"column":16},"end":{"line":598,"column":null}},"269":{"start":{"line":599,"column":2},"end":{"line":630,"column":null}},"270":{"start":{"line":600,"column":4},"end":{"line":600,"column":null}},"271":{"start":{"line":601,"column":4},"end":{"line":601,"column":null}},"272":{"start":{"line":604,"column":4},"end":{"line":604,"column":null}},"273":{"start":{"line":604,"column":28},"end":{"line":604,"column":92}},"274":{"start":{"line":606,"column":4},"end":{"line":629,"column":null}},"275":{"start":{"line":606,"column":17},"end":{"line":606,"column":20}},"276":{"start":{"line":607,"column":21},"end":{"line":607,"column":null}},"277":{"start":{"line":609,"column":6},"end":{"line":628,"column":null}},"278":{"start":{"line":609,"column":19},"end":{"line":609,"column":26}},"279":{"start":{"line":610,"column":23},"end":{"line":610,"column":null}},"280":{"start":{"line":614,"column":10},"end":{"line":615,"column":null}},"281":{"start":{"line":616,"column":8},"end":{"line":616,"column":null}},"282":{"start":{"line":616,"column":23},"end":{"line":616,"column":null}},"283":{"start":{"line":619,"column":26},"end":{"line":619,"column":null}},"284":{"start":{"line":620,"column":8},"end":{"line":627,"column":null}},"285":{"start":{"line":622,"column":21},"end":{"line":622,"column":null}},"286":{"start":{"line":623,"column":10},"end":{"line":623,"column":null}},"287":{"start":{"line":624,"column":10},"end":{"line":624,"column":null}},"288":{"start":{"line":625,"column":10},"end":{"line":625,"column":null}},"289":{"start":{"line":626,"column":10},"end":{"line":626,"column":null}},"290":{"start":{"line":632,"column":2},"end":{"line":634,"column":null}},"291":{"start":{"line":633,"column":4},"end":{"line":633,"column":null}},"292":{"start":{"line":635,"column":2},"end":{"line":635,"column":null}},"293":{"start":{"line":649,"column":19},"end":{"line":649,"column":null}},"294":{"start":{"line":650,"column":19},"end":{"line":650,"column":null}},"295":{"start":{"line":651,"column":24},"end":{"line":651,"column":null}},"296":{"start":{"line":653,"column":16},"end":{"line":653,"column":null}},"297":{"start":{"line":654,"column":2},"end":{"line":685,"column":null}},"298":{"start":{"line":655,"column":4},"end":{"line":655,"column":null}},"299":{"start":{"line":656,"column":4},"end":{"line":656,"column":null}},"300":{"start":{"line":659,"column":4},"end":{"line":659,"column":null}},"301":{"start":{"line":659,"column":28},"end":{"line":659,"column":92}},"302":{"start":{"line":661,"column":4},"end":{"line":684,"column":null}},"303":{"start":{"line":661,"column":17},"end":{"line":661,"column":20}},"304":{"start":{"line":662,"column":21},"end":{"line":662,"column":null}},"305":{"start":{"line":664,"column":6},"end":{"line":683,"column":null}},"306":{"start":{"line":664,"column":19},"end":{"line":664,"column":26}},"307":{"start":{"line":665,"column":23},"end":{"line":665,"column":null}},"308":{"start":{"line":669,"column":10},"end":{"line":670,"column":null}},"309":{"start":{"line":671,"column":8},"end":{"line":671,"column":null}},"310":{"start":{"line":671,"column":23},"end":{"line":671,"column":null}},"311":{"start":{"line":674,"column":26},"end":{"line":674,"column":null}},"312":{"start":{"line":675,"column":8},"end":{"line":682,"column":null}},"313":{"start":{"line":677,"column":21},"end":{"line":677,"column":null}},"314":{"start":{"line":678,"column":10},"end":{"line":678,"column":null}},"315":{"start":{"line":679,"column":10},"end":{"line":679,"column":null}},"316":{"start":{"line":680,"column":10},"end":{"line":680,"column":null}},"317":{"start":{"line":681,"column":10},"end":{"line":681,"column":null}},"318":{"start":{"line":687,"column":2},"end":{"line":689,"column":null}},"319":{"start":{"line":688,"column":4},"end":{"line":688,"column":null}},"320":{"start":{"line":690,"column":2},"end":{"line":690,"column":null}},"321":{"start":{"line":703,"column":2},"end":{"line":709,"column":null}},"322":{"start":{"line":704,"column":17},"end":{"line":704,"column":null}},"323":{"start":{"line":705,"column":4},"end":{"line":708,"column":null}},"324":{"start":{"line":706,"column":6},"end":{"line":706,"column":null}},"325":{"start":{"line":707,"column":6},"end":{"line":707,"column":null}},"326":{"start":{"line":711,"column":2},"end":{"line":717,"column":null}},"327":{"start":{"line":712,"column":4},"end":{"line":715,"column":null}},"328":{"start":{"line":713,"column":6},"end":{"line":713,"column":null}},"329":{"start":{"line":714,"column":6},"end":{"line":714,"column":null}},"330":{"start":{"line":716,"column":4},"end":{"line":716,"column":null}},"331":{"start":{"line":729,"column":2},"end":{"line":735,"column":null}},"332":{"start":{"line":730,"column":4},"end":{"line":733,"column":null}},"333":{"start":{"line":731,"column":6},"end":{"line":731,"column":null}},"334":{"start":{"line":732,"column":6},"end":{"line":732,"column":null}},"335":{"start":{"line":734,"column":4},"end":{"line":734,"column":null}},"336":{"start":{"line":746,"column":2},"end":{"line":774,"column":null}},"337":{"start":{"line":747,"column":15},"end":{"line":747,"column":null}},"338":{"start":{"line":748,"column":15},"end":{"line":748,"column":null}},"339":{"start":{"line":751,"column":4},"end":{"line":751,"column":null}},"340":{"start":{"line":751,"column":52},"end":{"line":751,"column":null}},"341":{"start":{"line":753,"column":4},"end":{"line":773,"column":null}},"342":{"start":{"line":755,"column":6},"end":{"line":758,"column":null}},"343":{"start":{"line":756,"column":8},"end":{"line":756,"column":null}},"344":{"start":{"line":757,"column":8},"end":{"line":757,"column":null}},"345":{"start":{"line":760,"column":6},"end":{"line":766,"column":null}},"346":{"start":{"line":761,"column":21},"end":{"line":761,"column":null}},"347":{"start":{"line":762,"column":8},"end":{"line":765,"column":null}},"348":{"start":{"line":763,"column":10},"end":{"line":763,"column":null}},"349":{"start":{"line":764,"column":10},"end":{"line":764,"column":null}},"350":{"start":{"line":768,"column":6},"end":{"line":768,"column":null}},"351":{"start":{"line":769,"column":4},"end":{"line":773,"column":null}},"352":{"start":{"line":771,"column":6},"end":{"line":771,"column":null}},"353":{"start":{"line":772,"column":6},"end":{"line":772,"column":null}},"354":{"start":{"line":784,"column":31},"end":{"line":784,"column":null}},"355":{"start":{"line":785,"column":2},"end":{"line":785,"column":null}},"356":{"start":{"line":785,"column":17},"end":{"line":785,"column":null}},"357":{"start":{"line":787,"column":19},"end":{"line":787,"column":null}},"358":{"start":{"line":788,"column":2},"end":{"line":791,"column":null}},"359":{"start":{"line":789,"column":4},"end":{"line":789,"column":null}},"360":{"start":{"line":790,"column":4},"end":{"line":790,"column":null}},"361":{"start":{"line":794,"column":2},"end":{"line":794,"column":null}},"362":{"start":{"line":797,"column":2},"end":{"line":797,"column":null}},"363":{"start":{"line":800,"column":2},"end":{"line":800,"column":null}},"364":{"start":{"line":802,"column":2},"end":{"line":802,"column":null}}},"fnMap":{"0":{"name":"getDisconnectedZoneWidth","decl":{"start":{"line":32,"column":9},"end":{"line":32,"column":34}},"loc":{"start":{"line":32,"column":62},"end":{"line":47,"column":null}},"line":32},"1":{"name":"assignLayerXPositions","decl":{"start":{"line":53,"column":16},"end":{"line":53,"column":38}},"loc":{"start":{"line":53,"column":64},"end":{"line":62,"column":null}},"line":53},"2":{"name":"recalculateLayerXPositions","decl":{"start":{"line":69,"column":16},"end":{"line":69,"column":43}},"loc":{"start":{"line":69,"column":69},"end":{"line":95,"column":null}},"line":69},"3":{"name":"assignNodeYPositions","decl":{"start":{"line":102,"column":16},"end":{"line":102,"column":37}},"loc":{"start":{"line":102,"column":63},"end":{"line":169,"column":null}},"line":102},"4":{"name":"(anonymous_4)","decl":{"start":{"line":110,"column":42},"end":{"line":110,"column":43}},"loc":{"start":{"line":110,"column":49},"end":{"line":110,"column":72}},"line":110},"5":{"name":"(anonymous_5)","decl":{"start":{"line":111,"column":47},"end":{"line":111,"column":48}},"loc":{"start":{"line":111,"column":54},"end":{"line":111,"column":78}},"line":111},"6":{"name":"(anonymous_6)","decl":{"start":{"line":133,"column":42},"end":{"line":133,"column":43}},"loc":{"start":{"line":133,"column":49},"end":{"line":133,"column":53}},"line":133},"7":{"name":"(anonymous_7)","decl":{"start":{"line":151,"column":44},"end":{"line":151,"column":45}},"loc":{"start":{"line":151,"column":51},"end":{"line":151,"column":66}},"line":151},"8":{"name":"placeDisconnectedNodes","decl":{"start":{"line":175,"column":16},"end":{"line":175,"column":39}},"loc":{"start":{"line":175,"column":65},"end":{"line":235,"column":null}},"line":175},"9":{"name":"applyPositions","decl":{"start":{"line":242,"column":16},"end":{"line":242,"column":31}},"loc":{"start":{"line":242,"column":57},"end":{"line":339,"column":null}},"line":242},"10":{"name":"(anonymous_10)","decl":{"start":{"line":279,"column":41},"end":{"line":279,"column":42}},"loc":{"start":{"line":279,"column":48},"end":{"line":279,"column":62}},"line":279},"11":{"name":"positionGroupContents","decl":{"start":{"line":346,"column":9},"end":{"line":346,"column":null}},"loc":{"start":{"line":352,"column":10},"end":{"line":460,"column":null}},"line":352},"12":{"name":"(anonymous_12)","decl":{"start":{"line":385,"column":19},"end":{"line":385,"column":20}},"loc":{"start":{"line":385,"column":23},"end":{"line":385,"column":72}},"line":385},"13":{"name":"(anonymous_13)","decl":{"start":{"line":407,"column":19},"end":{"line":407,"column":20}},"loc":{"start":{"line":407,"column":23},"end":{"line":407,"column":72}},"line":407},"14":{"name":"(anonymous_14)","decl":{"start":{"line":419,"column":34},"end":{"line":419,"column":35}},"loc":{"start":{"line":419,"column":41},"end":{"line":419,"column":45}},"line":419},"15":{"name":"getLayerBounds","decl":{"start":{"line":467,"column":9},"end":{"line":467,"column":24}},"loc":{"start":{"line":467,"column":84},"end":{"line":480,"column":null}},"line":467},"16":{"name":"compactVertically","decl":{"start":{"line":487,"column":16},"end":{"line":487,"column":34}},"loc":{"start":{"line":487,"column":60},"end":{"line":526,"column":null}},"line":487},"17":{"name":"(anonymous_17)","decl":{"start":{"line":495,"column":47},"end":{"line":495,"column":48}},"loc":{"start":{"line":495,"column":54},"end":{"line":495,"column":78}},"line":495},"18":{"name":"collectEntities","decl":{"start":{"line":532,"column":9},"end":{"line":532,"column":25}},"loc":{"start":{"line":532,"column":61},"end":{"line":581,"column":null}},"line":532},"19":{"name":"scanlineResolveX","decl":{"start":{"line":590,"column":9},"end":{"line":590,"column":null}},"loc":{"start":{"line":593,"column":11},"end":{"line":636,"column":null}},"line":593},"20":{"name":"(anonymous_20)","decl":{"start":{"line":604,"column":18},"end":{"line":604,"column":19}},"loc":{"start":{"line":604,"column":28},"end":{"line":604,"column":92}},"line":604},"21":{"name":"scanlineResolveY","decl":{"start":{"line":645,"column":9},"end":{"line":645,"column":null}},"loc":{"start":{"line":648,"column":11},"end":{"line":691,"column":null}},"line":648},"22":{"name":"(anonymous_22)","decl":{"start":{"line":659,"column":18},"end":{"line":659,"column":19}},"loc":{"start":{"line":659,"column":28},"end":{"line":659,"column":92}},"line":659},"23":{"name":"shiftGroupContentsRecursively","decl":{"start":{"line":696,"column":9},"end":{"line":696,"column":null}},"loc":{"start":{"line":701,"column":8},"end":{"line":718,"column":null}},"line":701},"24":{"name":"shiftChildGroups","decl":{"start":{"line":723,"column":9},"end":{"line":723,"column":null}},"loc":{"start":{"line":728,"column":8},"end":{"line":736,"column":null}},"line":728},"25":{"name":"applyFinalPositions","decl":{"start":{"line":742,"column":9},"end":{"line":742,"column":null}},"loc":{"start":{"line":745,"column":8},"end":{"line":775,"column":null}},"line":745},"26":{"name":"resolveAllOverlaps","decl":{"start":{"line":783,"column":16},"end":{"line":783,"column":35}},"loc":{"start":{"line":783,"column":61},"end":{"line":803,"column":null}},"line":783}},"branchMap":{"0":{"loc":{"start":{"line":35,"column":2},"end":{"line":37,"column":null}},"type":"if","locations":[{"start":{"line":35,"column":2},"end":{"line":37,"column":null}},{"start":{},"end":{}}],"line":35},"1":{"loc":{"start":{"line":35,"column":6},"end":{"line":35,"column":71}},"type":"binary-expr","locations":[{"start":{"line":35,"column":6},"end":{"line":35,"column":28}},{"start":{"line":35,"column":28},"end":{"line":35,"column":60}},{"start":{"line":35,"column":60},"end":{"line":35,"column":71}}],"line":35},"2":{"loc":{"start":{"line":42,"column":4},"end":{"line":44,"column":null}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":44,"column":null}},{"start":{},"end":{}}],"line":42},"3":{"loc":{"start":{"line":43,"column":36},"end":{"line":43,"column":57}},"type":"binary-expr","locations":[{"start":{"line":43,"column":36},"end":{"line":43,"column":54}},{"start":{"line":43,"column":54},"end":{"line":43,"column":57}}],"line":43},"4":{"loc":{"start":{"line":91,"column":21},"end":{"line":91,"column":null}},"type":"binary-expr","locations":[{"start":{"line":91,"column":21},"end":{"line":91,"column":49}},{"start":{"line":91,"column":49},"end":{"line":91,"column":null}}],"line":91},"5":{"loc":{"start":{"line":125,"column":4},"end":{"line":165,"column":null}},"type":"if","locations":[{"start":{"line":125,"column":4},"end":{"line":165,"column":null}},{"start":{},"end":{}}],"line":125},"6":{"loc":{"start":{"line":145,"column":10},"end":{"line":147,"column":null}},"type":"if","locations":[{"start":{"line":145,"column":10},"end":{"line":147,"column":null}},{"start":{},"end":{}}],"line":145},"7":{"loc":{"start":{"line":145,"column":14},"end":{"line":145,"column":70}},"type":"binary-expr","locations":[{"start":{"line":145,"column":14},"end":{"line":145,"column":38}},{"start":{"line":145,"column":38},"end":{"line":145,"column":70}}],"line":145},"8":{"loc":{"start":{"line":152,"column":10},"end":{"line":156,"column":null}},"type":"if","locations":[{"start":{"line":152,"column":10},"end":{"line":156,"column":null}},{"start":{},"end":{}}],"line":152},"9":{"loc":{"start":{"line":162,"column":6},"end":{"line":164,"column":null}},"type":"if","locations":[{"start":{"line":162,"column":6},"end":{"line":164,"column":null}},{"start":{},"end":{}}],"line":162},"10":{"loc":{"start":{"line":178,"column":2},"end":{"line":180,"column":null}},"type":"if","locations":[{"start":{"line":178,"column":2},"end":{"line":180,"column":null}},{"start":{},"end":{}}],"line":178},"11":{"loc":{"start":{"line":178,"column":6},"end":{"line":178,"column":71}},"type":"binary-expr","locations":[{"start":{"line":178,"column":6},"end":{"line":178,"column":28}},{"start":{"line":178,"column":28},"end":{"line":178,"column":60}},{"start":{"line":178,"column":60},"end":{"line":178,"column":71}}],"line":178},"12":{"loc":{"start":{"line":185,"column":4},"end":{"line":187,"column":null}},"type":"if","locations":[{"start":{"line":185,"column":4},"end":{"line":187,"column":null}},{"start":{},"end":{}}],"line":185},"13":{"loc":{"start":{"line":191,"column":2},"end":{"line":194,"column":null}},"type":"if","locations":[{"start":{"line":191,"column":2},"end":{"line":194,"column":null}},{"start":{},"end":{}}],"line":191},"14":{"loc":{"start":{"line":200,"column":4},"end":{"line":205,"column":null}},"type":"if","locations":[{"start":{"line":200,"column":4},"end":{"line":205,"column":null}},{"start":{},"end":{}}],"line":200},"15":{"loc":{"start":{"line":202,"column":15},"end":{"line":202,"column":null}},"type":"binary-expr","locations":[{"start":{"line":202,"column":15},"end":{"line":202,"column":33}},{"start":{"line":202,"column":33},"end":{"line":202,"column":null}}],"line":202},"16":{"loc":{"start":{"line":203,"column":16},"end":{"line":203,"column":null}},"type":"binary-expr","locations":[{"start":{"line":203,"column":16},"end":{"line":203,"column":34}},{"start":{"line":203,"column":34},"end":{"line":203,"column":null}}],"line":203},"17":{"loc":{"start":{"line":221,"column":6},"end":{"line":228,"column":null}},"type":"if","locations":[{"start":{"line":221,"column":6},"end":{"line":228,"column":null}},{"start":{},"end":{}}],"line":221},"18":{"loc":{"start":{"line":221,"column":10},"end":{"line":221,"column":28}},"type":"binary-expr","locations":[{"start":{"line":221,"column":10},"end":{"line":221,"column":18}},{"start":{"line":221,"column":18},"end":{"line":221,"column":28}}],"line":221},"19":{"loc":{"start":{"line":223,"column":8},"end":{"line":225,"column":null}},"type":"if","locations":[{"start":{"line":223,"column":8},"end":{"line":225,"column":null}},{"start":{},"end":{}}],"line":223},"20":{"loc":{"start":{"line":223,"column":12},"end":{"line":223,"column":47}},"type":"binary-expr","locations":[{"start":{"line":223,"column":12},"end":{"line":223,"column":34}},{"start":{"line":223,"column":34},"end":{"line":223,"column":47}}],"line":223},"21":{"loc":{"start":{"line":247,"column":4},"end":{"line":250,"column":null}},"type":"if","locations":[{"start":{"line":247,"column":4},"end":{"line":250,"column":null}},{"start":{},"end":{}}],"line":247},"22":{"loc":{"start":{"line":253,"column":4},"end":{"line":260,"column":null}},"type":"if","locations":[{"start":{"line":253,"column":4},"end":{"line":260,"column":null}},{"start":{},"end":{}}],"line":253},"23":{"loc":{"start":{"line":253,"column":8},"end":{"line":253,"column":61}},"type":"binary-expr","locations":[{"start":{"line":253,"column":8},"end":{"line":253,"column":35}},{"start":{"line":253,"column":35},"end":{"line":253,"column":61}}],"line":253},"24":{"loc":{"start":{"line":265,"column":4},"end":{"line":267,"column":null}},"type":"if","locations":[{"start":{"line":265,"column":4},"end":{"line":267,"column":null}},{"start":{},"end":{}}],"line":265},"25":{"loc":{"start":{"line":265,"column":8},"end":{"line":265,"column":53}},"type":"binary-expr","locations":[{"start":{"line":265,"column":8},"end":{"line":265,"column":35}},{"start":{"line":265,"column":35},"end":{"line":265,"column":53}}],"line":265},"26":{"loc":{"start":{"line":270,"column":4},"end":{"line":273,"column":null}},"type":"if","locations":[{"start":{"line":270,"column":4},"end":{"line":273,"column":null}},{"start":{},"end":{}}],"line":270},"27":{"loc":{"start":{"line":277,"column":2},"end":{"line":294,"column":null}},"type":"if","locations":[{"start":{"line":277,"column":2},"end":{"line":294,"column":null}},{"start":{},"end":{}}],"line":277},"28":{"loc":{"start":{"line":277,"column":6},"end":{"line":277,"column":50}},"type":"binary-expr","locations":[{"start":{"line":277,"column":6},"end":{"line":277,"column":30}},{"start":{"line":277,"column":30},"end":{"line":277,"column":42}},{"start":{"line":277,"column":42},"end":{"line":277,"column":50}}],"line":277},"29":{"loc":{"start":{"line":283,"column":6},"end":{"line":283,"column":null}},"type":"if","locations":[{"start":{"line":283,"column":6},"end":{"line":283,"column":null}},{"start":{},"end":{}}],"line":283},"30":{"loc":{"start":{"line":286,"column":6},"end":{"line":286,"column":null}},"type":"if","locations":[{"start":{"line":286,"column":6},"end":{"line":286,"column":null}},{"start":{},"end":{}}],"line":286},"31":{"loc":{"start":{"line":300,"column":2},"end":{"line":338,"column":null}},"type":"if","locations":[{"start":{"line":300,"column":2},"end":{"line":338,"column":null}},{"start":{},"end":{}}],"line":300},"32":{"loc":{"start":{"line":300,"column":6},"end":{"line":300,"column":61}},"type":"binary-expr","locations":[{"start":{"line":300,"column":6},"end":{"line":300,"column":23}},{"start":{"line":300,"column":23},"end":{"line":300,"column":51}},{"start":{"line":300,"column":51},"end":{"line":300,"column":61}}],"line":300},"33":{"loc":{"start":{"line":306,"column":6},"end":{"line":308,"column":null}},"type":"if","locations":[{"start":{"line":306,"column":6},"end":{"line":308,"column":null}},{"start":{},"end":{}}],"line":306},"34":{"loc":{"start":{"line":309,"column":6},"end":{"line":311,"column":null}},"type":"if","locations":[{"start":{"line":309,"column":6},"end":{"line":311,"column":null}},{"start":{},"end":{}}],"line":309},"35":{"loc":{"start":{"line":328,"column":8},"end":{"line":331,"column":null}},"type":"if","locations":[{"start":{"line":328,"column":8},"end":{"line":331,"column":null}},{"start":{},"end":{}}],"line":328},"36":{"loc":{"start":{"line":328,"column":12},"end":{"line":328,"column":37}},"type":"binary-expr","locations":[{"start":{"line":328,"column":12},"end":{"line":328,"column":19}},{"start":{"line":328,"column":19},"end":{"line":328,"column":27}},{"start":{"line":328,"column":27},"end":{"line":328,"column":37}}],"line":328},"37":{"loc":{"start":{"line":357,"column":4},"end":{"line":357,"column":null}},"type":"if","locations":[{"start":{"line":357,"column":4},"end":{"line":357,"column":null}},{"start":{},"end":{}}],"line":357},"38":{"loc":{"start":{"line":358,"column":4},"end":{"line":358,"column":null}},"type":"if","locations":[{"start":{"line":358,"column":4},"end":{"line":358,"column":null}},{"start":{},"end":{}}],"line":358},"39":{"loc":{"start":{"line":358,"column":8},"end":{"line":358,"column":43}},"type":"binary-expr","locations":[{"start":{"line":358,"column":8},"end":{"line":358,"column":30}},{"start":{"line":358,"column":30},"end":{"line":358,"column":43}}],"line":358},"40":{"loc":{"start":{"line":363,"column":2},"end":{"line":365,"column":null}},"type":"if","locations":[{"start":{"line":363,"column":2},"end":{"line":365,"column":null}},{"start":{},"end":{}}],"line":363},"41":{"loc":{"start":{"line":363,"column":6},"end":{"line":363,"column":62}},"type":"binary-expr","locations":[{"start":{"line":363,"column":6},"end":{"line":363,"column":30}},{"start":{"line":363,"column":30},"end":{"line":363,"column":62}}],"line":363},"42":{"loc":{"start":{"line":374,"column":2},"end":{"line":438,"column":null}},"type":"if","locations":[{"start":{"line":374,"column":2},"end":{"line":438,"column":null}},{"start":{},"end":{}}],"line":374},"43":{"loc":{"start":{"line":375,"column":4},"end":{"line":437,"column":null}},"type":"if","locations":[{"start":{"line":375,"column":4},"end":{"line":437,"column":null}},{"start":{"line":404,"column":11},"end":{"line":437,"column":null}}],"line":375},"44":{"loc":{"start":{"line":382,"column":8},"end":{"line":382,"column":null}},"type":"if","locations":[{"start":{"line":382,"column":8},"end":{"line":382,"column":null}},{"start":{},"end":{}}],"line":382},"45":{"loc":{"start":{"line":385,"column":30},"end":{"line":385,"column":53}},"type":"binary-expr","locations":[{"start":{"line":385,"column":30},"end":{"line":385,"column":45}},{"start":{"line":385,"column":45},"end":{"line":385,"column":53}}],"line":385},"46":{"loc":{"start":{"line":385,"column":53},"end":{"line":385,"column":72}},"type":"binary-expr","locations":[{"start":{"line":385,"column":53},"end":{"line":385,"column":68}},{"start":{"line":385,"column":68},"end":{"line":385,"column":72}}],"line":385},"47":{"loc":{"start":{"line":391,"column":10},"end":{"line":395,"column":null}},"type":"if","locations":[{"start":{"line":391,"column":10},"end":{"line":395,"column":null}},{"start":{},"end":{}}],"line":391},"48":{"loc":{"start":{"line":397,"column":50},"end":{"line":397,"column":71}},"type":"binary-expr","locations":[{"start":{"line":397,"column":50},"end":{"line":397,"column":68}},{"start":{"line":397,"column":68},"end":{"line":397,"column":71}}],"line":397},"49":{"loc":{"start":{"line":398,"column":16},"end":{"line":398,"column":41}},"type":"binary-expr","locations":[{"start":{"line":398,"column":16},"end":{"line":398,"column":34}},{"start":{"line":398,"column":34},"end":{"line":398,"column":41}}],"line":398},"50":{"loc":{"start":{"line":407,"column":30},"end":{"line":407,"column":53}},"type":"binary-expr","locations":[{"start":{"line":407,"column":30},"end":{"line":407,"column":45}},{"start":{"line":407,"column":45},"end":{"line":407,"column":53}}],"line":407},"51":{"loc":{"start":{"line":407,"column":53},"end":{"line":407,"column":72}},"type":"binary-expr","locations":[{"start":{"line":407,"column":53},"end":{"line":407,"column":68}},{"start":{"line":407,"column":68},"end":{"line":407,"column":72}}],"line":407},"52":{"loc":{"start":{"line":413,"column":17},"end":{"line":413,"column":null}},"type":"binary-expr","locations":[{"start":{"line":413,"column":17},"end":{"line":413,"column":35}},{"start":{"line":413,"column":35},"end":{"line":413,"column":null}}],"line":413},"53":{"loc":{"start":{"line":414,"column":18},"end":{"line":414,"column":null}},"type":"binary-expr","locations":[{"start":{"line":414,"column":18},"end":{"line":414,"column":36}},{"start":{"line":414,"column":36},"end":{"line":414,"column":null}}],"line":414},"54":{"loc":{"start":{"line":427,"column":10},"end":{"line":432,"column":null}},"type":"if","locations":[{"start":{"line":427,"column":10},"end":{"line":432,"column":null}},{"start":{},"end":{}}],"line":427},"55":{"loc":{"start":{"line":431,"column":18},"end":{"line":431,"column":43}},"type":"binary-expr","locations":[{"start":{"line":431,"column":18},"end":{"line":431,"column":36}},{"start":{"line":431,"column":36},"end":{"line":431,"column":43}}],"line":431},"56":{"loc":{"start":{"line":450,"column":4},"end":{"line":454,"column":null}},"type":"if","locations":[{"start":{"line":450,"column":4},"end":{"line":454,"column":null}},{"start":{},"end":{}}],"line":450},"57":{"loc":{"start":{"line":468,"column":2},"end":{"line":468,"column":null}},"type":"if","locations":[{"start":{"line":468,"column":2},"end":{"line":468,"column":null}},{"start":{},"end":{}}],"line":468},"58":{"loc":{"start":{"line":478,"column":2},"end":{"line":478,"column":null}},"type":"if","locations":[{"start":{"line":478,"column":2},"end":{"line":478,"column":null}},{"start":{},"end":{}}],"line":478},"59":{"loc":{"start":{"line":497,"column":4},"end":{"line":500,"column":null}},"type":"if","locations":[{"start":{"line":497,"column":4},"end":{"line":500,"column":null}},{"start":{},"end":{}}],"line":497},"60":{"loc":{"start":{"line":503,"column":4},"end":{"line":503,"column":null}},"type":"if","locations":[{"start":{"line":503,"column":4},"end":{"line":503,"column":null}},{"start":{},"end":{}}],"line":503},"61":{"loc":{"start":{"line":510,"column":2},"end":{"line":510,"column":null}},"type":"if","locations":[{"start":{"line":510,"column":2},"end":{"line":510,"column":null}},{"start":{},"end":{}}],"line":510},"62":{"loc":{"start":{"line":514,"column":4},"end":{"line":514,"column":null}},"type":"if","locations":[{"start":{"line":514,"column":4},"end":{"line":514,"column":null}},{"start":{},"end":{}}],"line":514},"63":{"loc":{"start":{"line":517,"column":4},"end":{"line":517,"column":null}},"type":"if","locations":[{"start":{"line":517,"column":4},"end":{"line":517,"column":null}},{"start":{},"end":{}}],"line":517},"64":{"loc":{"start":{"line":536,"column":2},"end":{"line":536,"column":null}},"type":"if","locations":[{"start":{"line":536,"column":2},"end":{"line":536,"column":null}},{"start":{},"end":{}}],"line":536},"65":{"loc":{"start":{"line":539,"column":19},"end":{"line":539,"column":33}},"type":"binary-expr","locations":[{"start":{"line":539,"column":19},"end":{"line":539,"column":29}},{"start":{"line":539,"column":29},"end":{"line":539,"column":33}}],"line":539},"66":{"loc":{"start":{"line":540,"column":4},"end":{"line":540,"column":null}},"type":"if","locations":[{"start":{"line":540,"column":4},"end":{"line":540,"column":null}},{"start":{},"end":{}}],"line":540},"67":{"loc":{"start":{"line":541,"column":14},"end":{"line":541,"column":null}},"type":"binary-expr","locations":[{"start":{"line":541,"column":14},"end":{"line":541,"column":35}},{"start":{"line":541,"column":35},"end":{"line":541,"column":null}}],"line":541},"68":{"loc":{"start":{"line":542,"column":14},"end":{"line":542,"column":null}},"type":"binary-expr","locations":[{"start":{"line":542,"column":14},"end":{"line":542,"column":35}},{"start":{"line":542,"column":35},"end":{"line":542,"column":null}}],"line":542},"69":{"loc":{"start":{"line":544,"column":19},"end":{"line":544,"column":52}},"type":"binary-expr","locations":[{"start":{"line":544,"column":19},"end":{"line":544,"column":37}},{"start":{"line":544,"column":37},"end":{"line":544,"column":52}}],"line":544},"70":{"loc":{"start":{"line":549,"column":13},"end":{"line":549,"column":null}},"type":"binary-expr","locations":[{"start":{"line":549,"column":13},"end":{"line":549,"column":35}},{"start":{"line":549,"column":35},"end":{"line":549,"column":null}}],"line":549},"71":{"loc":{"start":{"line":550,"column":14},"end":{"line":550,"column":null}},"type":"binary-expr","locations":[{"start":{"line":550,"column":14},"end":{"line":550,"column":36}},{"start":{"line":550,"column":36},"end":{"line":550,"column":null}}],"line":550},"72":{"loc":{"start":{"line":560,"column":4},"end":{"line":560,"column":null}},"type":"if","locations":[{"start":{"line":560,"column":4},"end":{"line":560,"column":null}},{"start":{},"end":{}}],"line":560},"73":{"loc":{"start":{"line":561,"column":4},"end":{"line":561,"column":null}},"type":"if","locations":[{"start":{"line":561,"column":4},"end":{"line":561,"column":null}},{"start":{},"end":{}}],"line":561},"74":{"loc":{"start":{"line":561,"column":8},"end":{"line":561,"column":43}},"type":"binary-expr","locations":[{"start":{"line":561,"column":8},"end":{"line":561,"column":30}},{"start":{"line":561,"column":30},"end":{"line":561,"column":43}}],"line":561},"75":{"loc":{"start":{"line":563,"column":27},"end":{"line":563,"column":null}},"type":"binary-expr","locations":[{"start":{"line":563,"column":27},"end":{"line":563,"column":61}},{"start":{"line":563,"column":61},"end":{"line":563,"column":null}}],"line":563},"76":{"loc":{"start":{"line":564,"column":14},"end":{"line":564,"column":null}},"type":"binary-expr","locations":[{"start":{"line":564,"column":14},"end":{"line":564,"column":31}},{"start":{"line":564,"column":31},"end":{"line":564,"column":null}}],"line":564},"77":{"loc":{"start":{"line":565,"column":14},"end":{"line":565,"column":null}},"type":"binary-expr","locations":[{"start":{"line":565,"column":14},"end":{"line":565,"column":31}},{"start":{"line":565,"column":31},"end":{"line":565,"column":null}}],"line":565},"78":{"loc":{"start":{"line":569,"column":16},"end":{"line":569,"column":null}},"type":"cond-expr","locations":[{"start":{"line":569,"column":33},"end":{"line":569,"column":38}},{"start":{"line":569,"column":38},"end":{"line":569,"column":null}}],"line":569},"79":{"loc":{"start":{"line":572,"column":13},"end":{"line":572,"column":null}},"type":"binary-expr","locations":[{"start":{"line":572,"column":13},"end":{"line":572,"column":31}},{"start":{"line":572,"column":31},"end":{"line":572,"column":null}}],"line":572},"80":{"loc":{"start":{"line":573,"column":14},"end":{"line":573,"column":null}},"type":"binary-expr","locations":[{"start":{"line":573,"column":14},"end":{"line":573,"column":32}},{"start":{"line":573,"column":32},"end":{"line":573,"column":null}}],"line":573},"81":{"loc":{"start":{"line":599,"column":9},"end":{"line":599,"column":48}},"type":"binary-expr","locations":[{"start":{"line":599,"column":9},"end":{"line":599,"column":20}},{"start":{"line":599,"column":20},"end":{"line":599,"column":48}}],"line":599},"82":{"loc":{"start":{"line":604,"column":28},"end":{"line":604,"column":92}},"type":"binary-expr","locations":[{"start":{"line":604,"column":28},"end":{"line":604,"column":41}},{"start":{"line":604,"column":41},"end":{"line":604,"column":68}},{"start":{"line":604,"column":68},"end":{"line":604,"column":92}}],"line":604},"83":{"loc":{"start":{"line":614,"column":10},"end":{"line":615,"column":null}},"type":"binary-expr","locations":[{"start":{"line":614,"column":10},"end":{"line":614,"column":null}},{"start":{"line":615,"column":10},"end":{"line":615,"column":null}}],"line":614},"84":{"loc":{"start":{"line":616,"column":8},"end":{"line":616,"column":null}},"type":"if","locations":[{"start":{"line":616,"column":8},"end":{"line":616,"column":null}},{"start":{},"end":{}}],"line":616},"85":{"loc":{"start":{"line":620,"column":8},"end":{"line":627,"column":null}},"type":"if","locations":[{"start":{"line":620,"column":8},"end":{"line":627,"column":null}},{"start":{},"end":{}}],"line":620},"86":{"loc":{"start":{"line":632,"column":2},"end":{"line":634,"column":null}},"type":"if","locations":[{"start":{"line":632,"column":2},"end":{"line":634,"column":null}},{"start":{},"end":{}}],"line":632},"87":{"loc":{"start":{"line":654,"column":9},"end":{"line":654,"column":48}},"type":"binary-expr","locations":[{"start":{"line":654,"column":9},"end":{"line":654,"column":20}},{"start":{"line":654,"column":20},"end":{"line":654,"column":48}}],"line":654},"88":{"loc":{"start":{"line":659,"column":28},"end":{"line":659,"column":92}},"type":"binary-expr","locations":[{"start":{"line":659,"column":28},"end":{"line":659,"column":41}},{"start":{"line":659,"column":41},"end":{"line":659,"column":68}},{"start":{"line":659,"column":68},"end":{"line":659,"column":92}}],"line":659},"89":{"loc":{"start":{"line":669,"column":10},"end":{"line":670,"column":null}},"type":"binary-expr","locations":[{"start":{"line":669,"column":10},"end":{"line":669,"column":null}},{"start":{"line":670,"column":10},"end":{"line":670,"column":null}}],"line":669},"90":{"loc":{"start":{"line":671,"column":8},"end":{"line":671,"column":null}},"type":"if","locations":[{"start":{"line":671,"column":8},"end":{"line":671,"column":null}},{"start":{},"end":{}}],"line":671},"91":{"loc":{"start":{"line":675,"column":8},"end":{"line":682,"column":null}},"type":"if","locations":[{"start":{"line":675,"column":8},"end":{"line":682,"column":null}},{"start":{},"end":{}}],"line":675},"92":{"loc":{"start":{"line":687,"column":2},"end":{"line":689,"column":null}},"type":"if","locations":[{"start":{"line":687,"column":2},"end":{"line":689,"column":null}},{"start":{},"end":{}}],"line":687},"93":{"loc":{"start":{"line":705,"column":4},"end":{"line":708,"column":null}},"type":"if","locations":[{"start":{"line":705,"column":4},"end":{"line":708,"column":null}},{"start":{},"end":{}}],"line":705},"94":{"loc":{"start":{"line":712,"column":4},"end":{"line":715,"column":null}},"type":"if","locations":[{"start":{"line":712,"column":4},"end":{"line":715,"column":null}},{"start":{},"end":{}}],"line":712},"95":{"loc":{"start":{"line":730,"column":4},"end":{"line":733,"column":null}},"type":"if","locations":[{"start":{"line":730,"column":4},"end":{"line":733,"column":null}},{"start":{},"end":{}}],"line":730},"96":{"loc":{"start":{"line":751,"column":4},"end":{"line":751,"column":null}},"type":"if","locations":[{"start":{"line":751,"column":4},"end":{"line":751,"column":null}},{"start":{},"end":{}}],"line":751},"97":{"loc":{"start":{"line":751,"column":8},"end":{"line":751,"column":52}},"type":"binary-expr","locations":[{"start":{"line":751,"column":8},"end":{"line":751,"column":31}},{"start":{"line":751,"column":31},"end":{"line":751,"column":52}}],"line":751},"98":{"loc":{"start":{"line":753,"column":4},"end":{"line":773,"column":null}},"type":"if","locations":[{"start":{"line":753,"column":4},"end":{"line":773,"column":null}},{"start":{"line":769,"column":4},"end":{"line":773,"column":null}}],"line":753},"99":{"loc":{"start":{"line":753,"column":8},"end":{"line":753,"column":71}},"type":"binary-expr","locations":[{"start":{"line":753,"column":8},"end":{"line":753,"column":35}},{"start":{"line":753,"column":35},"end":{"line":753,"column":51}},{"start":{"line":753,"column":51},"end":{"line":753,"column":71}}],"line":753},"100":{"loc":{"start":{"line":755,"column":6},"end":{"line":758,"column":null}},"type":"if","locations":[{"start":{"line":755,"column":6},"end":{"line":758,"column":null}},{"start":{},"end":{}}],"line":755},"101":{"loc":{"start":{"line":762,"column":8},"end":{"line":765,"column":null}},"type":"if","locations":[{"start":{"line":762,"column":8},"end":{"line":765,"column":null}},{"start":{},"end":{}}],"line":762},"102":{"loc":{"start":{"line":769,"column":4},"end":{"line":773,"column":null}},"type":"if","locations":[{"start":{"line":769,"column":4},"end":{"line":773,"column":null}},{"start":{},"end":{}}],"line":769},"103":{"loc":{"start":{"line":769,"column":15},"end":{"line":769,"column":59}},"type":"binary-expr","locations":[{"start":{"line":769,"column":15},"end":{"line":769,"column":41}},{"start":{"line":769,"column":41},"end":{"line":769,"column":59}}],"line":769},"104":{"loc":{"start":{"line":785,"column":2},"end":{"line":785,"column":null}},"type":"if","locations":[{"start":{"line":785,"column":2},"end":{"line":785,"column":null}},{"start":{},"end":{}}],"line":785},"105":{"loc":{"start":{"line":788,"column":2},"end":{"line":791,"column":null}},"type":"if","locations":[{"start":{"line":788,"column":2},"end":{"line":791,"column":null}},{"start":{},"end":{}}],"line":788}},"s":{"0":1,"1":60,"2":60,"3":14,"4":46,"5":46,"6":146,"7":146,"8":146,"9":46,"10":30,"11":30,"12":30,"13":30,"14":154,"15":154,"16":30,"17":30,"18":30,"19":30,"20":154,"21":217,"22":30,"23":30,"24":154,"25":154,"26":30,"27":154,"28":217,"29":217,"30":30,"31":30,"32":30,"33":154,"34":217,"35":154,"36":217,"37":154,"38":154,"39":154,"40":70,"41":70,"42":70,"43":70,"44":154,"45":112,"46":112,"47":147,"48":112,"49":147,"50":112,"51":112,"52":112,"53":126,"54":126,"55":126,"56":14,"57":0,"58":126,"59":147,"60":189,"61":147,"62":147,"63":147,"64":147,"65":112,"66":112,"67":14,"68":30,"69":30,"70":30,"71":7,"72":23,"73":23,"74":73,"75":21,"76":52,"77":23,"78":0,"79":0,"80":23,"81":23,"82":52,"83":52,"84":52,"85":23,"86":23,"87":23,"88":23,"89":52,"90":52,"91":52,"92":52,"93":0,"94":52,"95":52,"96":23,"97":30,"98":30,"99":217,"100":70,"101":147,"102":0,"103":0,"104":0,"105":0,"106":147,"107":147,"108":0,"109":147,"110":147,"111":147,"112":30,"113":30,"114":98,"115":30,"116":70,"117":70,"118":0,"119":70,"120":70,"121":0,"122":70,"123":70,"124":70,"125":30,"126":30,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":98,"147":98,"148":175,"149":175,"150":0,"151":175,"152":0,"153":175,"154":98,"155":0,"156":98,"157":98,"158":98,"159":98,"160":91,"161":21,"162":21,"163":21,"164":21,"165":49,"166":49,"167":0,"168":49,"169":28,"170":49,"171":49,"172":49,"173":77,"174":77,"175":77,"176":77,"177":77,"178":77,"179":49,"180":49,"181":70,"182":28,"183":70,"184":70,"185":98,"186":70,"187":98,"188":70,"189":70,"190":70,"191":98,"192":98,"193":98,"194":98,"195":98,"196":98,"197":98,"198":98,"199":98,"200":70,"201":98,"202":28,"203":28,"204":28,"205":28,"206":28,"207":28,"208":28,"209":28,"210":98,"211":266,"212":0,"213":266,"214":266,"215":266,"216":364,"217":364,"218":266,"219":0,"220":266,"221":30,"222":30,"223":30,"224":154,"225":217,"226":154,"227":42,"228":112,"229":112,"230":0,"231":112,"232":112,"233":30,"234":2,"235":28,"236":154,"237":0,"238":154,"239":154,"240":0,"241":154,"242":154,"243":154,"244":217,"245":30,"246":30,"247":30,"248":0,"249":30,"250":98,"251":28,"252":70,"253":98,"254":98,"255":30,"256":374,"257":175,"258":199,"259":0,"260":199,"261":374,"262":374,"263":374,"264":30,"265":29,"266":29,"267":29,"268":29,"269":29,"270":36,"271":36,"272":36,"273":624,"274":36,"275":36,"276":331,"277":331,"278":331,"279":1485,"280":1485,"281":1485,"282":344,"283":1141,"284":1141,"285":7,"286":7,"287":7,"288":7,"289":7,"290":29,"291":7,"292":29,"293":29,"294":29,"295":29,"296":29,"297":29,"298":29,"299":29,"300":29,"301":624,"302":29,"303":29,"304":268,"305":268,"306":268,"307":1233,"308":1233,"309":1233,"310":1127,"311":106,"312":106,"313":0,"314":0,"315":0,"316":0,"317":0,"318":29,"319":0,"320":29,"321":7,"322":7,"323":7,"324":7,"325":7,"326":7,"327":0,"328":0,"329":0,"330":0,"331":7,"332":7,"333":7,"334":7,"335":7,"336":29,"337":268,"338":268,"339":268,"340":261,"341":7,"342":7,"343":7,"344":7,"345":7,"346":14,"347":14,"348":14,"349":14,"350":7,"351":0,"352":0,"353":0,"354":30,"355":30,"356":0,"357":30,"358":30,"359":1,"360":1,"361":29,"362":29,"363":29,"364":29},"f":{"0":60,"1":30,"2":30,"3":30,"4":217,"5":217,"6":147,"7":189,"8":30,"9":30,"10":98,"11":98,"12":28,"13":28,"14":98,"15":266,"16":30,"17":217,"18":30,"19":29,"20":624,"21":29,"22":624,"23":7,"24":7,"25":29,"26":30},"b":{"0":[14,46],"1":[60,60,46],"2":[146,0],"3":[146,0],"4":[217,0],"5":[112,42],"6":[0,14],"7":[14,0],"8":[147,0],"9":[14,98],"10":[7,23],"11":[30,30,23],"12":[21,52],"13":[0,23],"14":[52,0],"15":[52,0],"16":[52,0],"17":[52,0],"18":[52,52],"19":[0,52],"20":[52,52],"21":[70,147],"22":[0,147],"23":[147,0],"24":[0,147],"25":[147,147],"26":[147,0],"27":[30,0],"28":[30,30,30],"29":[0,70],"30":[0,70],"31":[0,30],"32":[30,30,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0,0],"37":[0,175],"38":[0,175],"39":[175,175],"40":[0,98],"41":[98,7],"42":[91,7],"43":[21,70],"44":[0,49],"45":[28,0],"46":[28,0],"47":[77,0],"48":[77,0],"49":[77,0],"50":[28,0],"51":[28,0],"52":[98,0],"53":[98,0],"54":[98,0],"55":[98,0],"56":[28,0],"57":[0,266],"58":[0,266],"59":[42,112],"60":[0,112],"61":[2,28],"62":[0,154],"63":[0,154],"64":[0,30],"65":[30,0],"66":[28,70],"67":[70,0],"68":[98,0],"69":[98,0],"70":[98,0],"71":[98,0],"72":[175,199],"73":[0,199],"74":[199,199],"75":[199,0],"76":[374,0],"77":[374,0],"78":[52,147],"79":[374,0],"80":[374,0],"81":[29,36],"82":[624,106,99],"83":[1485,1310],"84":[344,1141],"85":[7,1134],"86":[7,22],"87":[29,29],"88":[624,56,28],"89":[1233,575],"90":[1127,106],"91":[0,106],"92":[0,29],"93":[7,0],"94":[0,0],"95":[7,0],"96":[261,7],"97":[268,261],"98":[7,0],"99":[7,7,7],"100":[7,0],"101":[14,0],"102":[0,0],"103":[0,0],"104":[0,30],"105":[1,29]},"meta":{"lastBranch":106,"lastFunction":27,"lastStatement":365,"seen":{"s:27:27:27:Infinity":0,"f:32:9:32:34":0,"s:33:50:33:Infinity":1,"b:35:2:37:Infinity:undefined:undefined:undefined:undefined":0,"s:35:2:37:Infinity":2,"b:35:6:35:28:35:28:35:60:35:60:35:71":1,"s:36:4:36:Infinity":3,"s:39:17:39:Infinity":4,"s:40:2:45:Infinity":5,"s:41:17:41:Infinity":6,"b:42:4:44:Infinity:undefined:undefined:undefined:undefined":2,"s:42:4:44:Infinity":7,"s:43:6:43:Infinity":8,"b:43:36:43:54:43:54:43:57":3,"s:46:2:46:Infinity":9,"f:53:16:53:38":1,"s:54:29:54:Infinity":10,"s:55:32:55:Infinity":11,"s:57:10:57:Infinity":12,"s:58:2:61:Infinity":13,"s:59:4:59:Infinity":14,"s:60:4:60:Infinity":15,"f:69:16:69:43":2,"s:70:29:70:Infinity":16,"s:71:32:71:Infinity":17,"s:74:22:74:Infinity":18,"s:75:2:79:Infinity":19,"s:76:4:78:Infinity":20,"s:77:6:77:Infinity":21,"s:82:10:82:Infinity":22,"s:83:2:86:Infinity":23,"s:84:4:84:Infinity":24,"s:85:4:85:Infinity":25,"s:89:2:94:Infinity":26,"s:90:4:93:Infinity":27,"s:91:21:91:Infinity":28,"b:91:21:91:49:91:49:91:Infinity":4,"s:92:6:92:Infinity":29,"f:102:16:102:37":3,"s:103:29:103:Infinity":30,"s:106:21:106:Infinity":31,"s:108:2:166:Infinity":32,"s:110:23:110:Infinity":33,"f:110:42:110:43":4,"s:110:49:110:72":34,"s:111:28:111:Infinity":35,"f:111:47:111:48":5,"s:111:54:111:78":36,"s:113:12:113:Infinity":37,"s:114:68:114:Infinity":38,"s:117:4:122:Infinity":39,"s:118:6:118:Infinity":40,"s:119:6:119:Infinity":41,"s:120:6:120:Infinity":42,"s:121:6:121:Infinity":43,"b:125:4:165:Infinity:undefined:undefined:undefined:undefined":5,"s:125:4:165:Infinity":44,"s:127:20:127:Infinity":45,"s:128:6:130:Infinity":46,"s:129:8:129:Infinity":47,"s:133:22:133:Infinity":48,"f:133:42:133:43":6,"s:133:49:133:53":49,"s:134:12:134:Infinity":50,"s:136:6:136:Infinity":51,"s:139:6:158:Infinity":52,"s:140:19:140:Infinity":53,"s:141:19:141:Infinity":54,"s:144:8:148:Infinity":55,"b:145:10:147:Infinity:undefined:undefined:undefined:undefined":6,"s:145:10:147:Infinity":56,"b:145:14:145:38:145:38:145:70":7,"s:146:12:146:Infinity":57,"s:150:8:157:Infinity":58,"s:151:23:151:Infinity":59,"f:151:44:151:45":7,"s:151:51:151:66":60,"b:152:10:156:Infinity:undefined:undefined:undefined:undefined":8,"s:152:10:156:Infinity":61,"s:153:12:153:Infinity":62,"s:154:12:154:Infinity":63,"s:155:12:155:Infinity":64,"s:161:12:161:Infinity":65,"b:162:6:164:Infinity:undefined:undefined:undefined:undefined":9,"s:162:6:164:Infinity":66,"s:163:8:163:Infinity":67,"s:168:2:168:Infinity":68,"f:175:16:175:39":8,"s:176:63:176:Infinity":69,"b:178:2:180:Infinity:undefined:undefined:undefined:undefined":10,"s:178:2:180:Infinity":70,"b:178:6:178:28:178:28:178:60:178:60:178:71":11,"s:179:4:179:Infinity":71,"s:183:43:183:Infinity":72,"s:184:2:189:Infinity":73,"b:185:4:187:Infinity:undefined:undefined:undefined:undefined":12,"s:185:4:187:Infinity":74,"s:186:6:186:Infinity":75,"s:188:4:188:Infinity":76,"b:191:2:194:Infinity:undefined:undefined:undefined:undefined":13,"s:191:2:194:Infinity":77,"s:192:4:192:Infinity":78,"s:193:4:193:Infinity":79,"s:197:16:197:Infinity":80,"s:198:2:206:Infinity":81,"s:199:17:199:Infinity":82,"b:200:4:205:Infinity:undefined:undefined:undefined:undefined":14,"s:200:4:205:Infinity":83,"s:201:6:204:Infinity":84,"b:202:15:202:33:202:33:202:Infinity":15,"b:203:16:203:34:203:34:203:Infinity":16,"s:209:8:212:Infinity":85,"s:215:12:215:Infinity":86,"s:216:12:216:Infinity":87,"s:218:2:230:Infinity":88,"s:219:4:229:Infinity":89,"s:220:19:220:Infinity":90,"b:221:6:228:Infinity:undefined:undefined:undefined:undefined":17,"s:221:6:228:Infinity":91,"b:221:10:221:18:221:18:221:28":18,"b:223:8:225:Infinity:undefined:undefined:undefined:undefined":19,"s:223:8:225:Infinity":92,"b:223:12:223:34:223:34:223:47":20,"s:224:10:224:Infinity":93,"s:226:8:226:Infinity":94,"s:227:8:227:Infinity":95,"s:232:2:234:Infinity":96,"f:242:16:242:31":9,"s:243:83:243:Infinity":97,"s:246:2:274:Infinity":98,"b:247:4:250:Infinity:undefined:undefined:undefined:undefined":21,"s:247:4:250:Infinity":99,"s:249:6:249:Infinity":100,"b:253:4:260:Infinity:undefined:undefined:undefined:undefined":22,"s:253:4:260:Infinity":101,"b:253:8:253:35:253:35:253:61":23,"s:254:6:254:Infinity":102,"s:255:6:255:Infinity":103,"s:256:6:258:Infinity":104,"s:259:6:259:Infinity":105,"s:262:22:262:Infinity":106,"b:265:4:267:Infinity:undefined:undefined:undefined:undefined":24,"s:265:4:267:Infinity":107,"b:265:8:265:35:265:35:265:53":25,"s:266:6:266:Infinity":108,"b:270:4:273:Infinity:undefined:undefined:undefined:undefined":26,"s:270:4:273:Infinity":109,"s:271:6:271:Infinity":110,"s:272:6:272:Infinity":111,"b:277:2:294:Infinity:undefined:undefined:undefined:undefined":27,"s:277:2:294:Infinity":112,"b:277:6:277:30:277:30:277:42:277:42:277:50":28,"s:279:27:279:Infinity":113,"f:279:41:279:42":10,"s:279:48:279:62":114,"s:281:4:293:Infinity":115,"s:282:20:282:Infinity":116,"b:283:6:283:Infinity:undefined:undefined:undefined:undefined":29,"s:283:6:283:Infinity":117,"s:283:31:283:Infinity":118,"s:285:22:285:Infinity":119,"b:286:6:286:Infinity:undefined:undefined:undefined:undefined":30,"s:286:6:286:Infinity":120,"s:286:20:286:Infinity":121,"s:289:21:289:Infinity":122,"s:290:21:290:Infinity":123,"s:292:6:292:Infinity":124,"s:297:2:297:Infinity":125,"b:300:2:338:Infinity:undefined:undefined:undefined:undefined":31,"s:300:2:338:Infinity":126,"b:300:6:300:23:300:23:300:51:300:51:300:61":32,"s:302:22:302:Infinity":127,"s:303:18:303:Infinity":128,"s:305:4:312:Infinity":129,"b:306:6:308:Infinity:undefined:undefined:undefined:undefined":33,"s:306:6:308:Infinity":130,"s:307:8:307:Infinity":131,"b:309:6:311:Infinity:undefined:undefined:undefined:undefined":34,"s:309:6:311:Infinity":132,"s:310:8:310:Infinity":133,"s:315:4:318:Infinity":134,"s:316:6:316:Infinity":135,"s:317:6:317:Infinity":136,"s:321:4:321:Infinity":137,"s:324:4:333:Infinity":138,"s:325:6:332:Infinity":139,"s:326:20:326:Infinity":140,"s:327:21:327:Infinity":141,"b:328:8:331:Infinity:undefined:undefined:undefined:undefined":35,"s:328:8:331:Infinity":142,"b:328:12:328:19:328:19:328:27:328:27:328:37":36,"s:329:10:329:Infinity":143,"s:330:10:330:Infinity":144,"s:335:4:337:Infinity":145,"f:346:9:346:Infinity":11,"s:354:32:354:Infinity":146,"s:355:2:360:Infinity":147,"s:356:17:356:Infinity":148,"b:357:4:357:Infinity:undefined:undefined:undefined:undefined":37,"s:357:4:357:Infinity":149,"s:357:15:357:Infinity":150,"b:358:4:358:Infinity:undefined:undefined:undefined:undefined":38,"s:358:4:358:Infinity":151,"b:358:8:358:30:358:30:358:43":39,"s:358:43:358:Infinity":152,"s:359:4:359:Infinity":153,"b:363:2:365:Infinity:undefined:undefined:undefined:undefined":40,"s:363:2:365:Infinity":154,"b:363:6:363:30:363:30:363:62":41,"s:364:4:364:Infinity":155,"s:367:2:367:Infinity":156,"s:370:8:370:Infinity":157,"s:372:15:372:Infinity":158,"b:374:2:438:Infinity:undefined:undefined:undefined:undefined":42,"s:374:2:438:Infinity":159,"b:375:4:437:Infinity:404:11:437:Infinity":43,"s:375:4:437:Infinity":160,"s:377:12:377:Infinity":161,"s:379:14:379:Infinity":162,"s:380:6:403:Infinity":163,"s:380:26:380:29":164,"s:381:22:381:Infinity":165,"b:382:8:382:Infinity:undefined:undefined:undefined:undefined":44,"s:382:8:382:Infinity":166,"s:382:32:382:Infinity":167,"s:385:8:385:Infinity":168,"f:385:19:385:20":12,"s:385:23:385:72":169,"b:385:30:385:45:385:45:385:53":45,"b:385:53:385:68:385:68:385:72":46,"s:387:16:387:Infinity":170,"s:388:28:388:Infinity":171,"s:390:8:399:Infinity":172,"b:391:10:395:Infinity:undefined:undefined:undefined:undefined":47,"s:391:10:395:Infinity":173,"s:392:12:392:Infinity":174,"s:393:12:393:Infinity":175,"s:394:12:394:Infinity":176,"s:397:10:397:Infinity":177,"b:397:50:397:68:397:68:397:71":48,"s:398:10:398:Infinity":178,"b:398:16:398:34:398:34:398:41":49,"s:401:8:401:Infinity":179,"s:402:8:402:Infinity":180,"s:407:6:407:Infinity":181,"f:407:19:407:20":13,"s:407:23:407:72":182,"b:407:30:407:45:407:45:407:53":50,"b:407:53:407:68:407:68:407:72":51,"s:410:20:410:Infinity":183,"s:411:6:416:Infinity":184,"s:412:8:415:Infinity":185,"b:413:17:413:35:413:35:413:Infinity":52,"b:414:18:414:36:414:36:414:Infinity":53,"s:419:22:419:Infinity":186,"f:419:34:419:35":14,"s:419:41:419:45":187,"s:420:12:420:Infinity":188,"s:422:14:422:Infinity":189,"s:423:6:435:Infinity":190,"s:424:16:424:Infinity":191,"s:425:8:433:Infinity":192,"s:426:23:426:Infinity":193,"b:427:10:432:Infinity:undefined:undefined:undefined:undefined":54,"s:427:10:432:Infinity":194,"s:428:12:428:Infinity":195,"s:429:12:429:Infinity":196,"s:430:12:430:Infinity":197,"s:431:12:431:Infinity":198,"b:431:18:431:36:431:36:431:43":55,"s:434:8:434:Infinity":199,"s:436:6:436:Infinity":200,"s:441:2:457:Infinity":201,"s:443:24:443:Infinity":202,"s:444:24:444:Infinity":203,"s:447:22:447:Infinity":204,"b:450:4:454:Infinity:undefined:undefined:undefined:undefined":56,"s:450:4:454:Infinity":205,"s:451:6:451:Infinity":206,"s:452:6:452:Infinity":207,"s:453:6:453:Infinity":208,"s:456:4:456:Infinity":209,"s:459:2:459:Infinity":210,"f:467:9:467:24":15,"b:468:2:468:Infinity:undefined:undefined:undefined:undefined":57,"s:468:2:468:Infinity":211,"s:468:26:468:Infinity":212,"s:470:13:470:Infinity":213,"s:471:13:471:Infinity":214,"s:473:2:476:Infinity":215,"s:474:4:474:Infinity":216,"s:475:4:475:Infinity":217,"b:478:2:478:Infinity:undefined:undefined:undefined:undefined":58,"s:478:2:478:Infinity":218,"s:478:25:478:Infinity":219,"s:479:2:479:Infinity":220,"f:487:16:487:34":16,"s:488:21:488:Infinity":221,"s:492:23:492:Infinity":222,"s:494:2:507:Infinity":223,"s:495:28:495:Infinity":224,"f:495:47:495:48":17,"s:495:54:495:78":225,"b:497:4:500:Infinity:undefined:undefined:undefined:undefined":59,"s:497:4:500:Infinity":226,"s:499:6:499:Infinity":227,"s:502:19:502:Infinity":228,"b:503:4:503:Infinity:undefined:undefined:undefined:undefined":60,"s:503:4:503:Infinity":229,"s:503:17:503:Infinity":230,"s:505:24:505:Infinity":231,"s:506:4:506:Infinity":232,"b:510:2:510:Infinity:undefined:undefined:undefined:undefined":61,"s:510:2:510:Infinity":233,"s:510:28:510:Infinity":234,"s:513:2:525:Infinity":235,"b:514:4:514:Infinity:undefined:undefined:undefined:undefined":62,"s:514:4:514:Infinity":236,"s:514:34:514:Infinity":237,"s:516:19:516:Infinity":238,"b:517:4:517:Infinity:undefined:undefined:undefined:undefined":63,"s:517:4:517:Infinity":239,"s:517:17:517:Infinity":240,"s:519:24:519:Infinity":241,"s:520:10:520:Infinity":242,"s:522:4:524:Infinity":243,"s:523:6:523:Infinity":244,"f:532:9:532:25":18,"s:533:35:533:Infinity":245,"s:534:63:534:Infinity":246,"b:536:2:536:Infinity:undefined:undefined:undefined:undefined":64,"s:536:2:536:Infinity":247,"s:536:17:536:Infinity":248,"s:539:2:556:Infinity":249,"b:539:19:539:29:539:29:539:33":65,"b:540:4:540:Infinity:undefined:undefined:undefined:undefined":66,"s:540:4:540:Infinity":250,"s:540:24:540:Infinity":251,"s:541:14:541:Infinity":252,"b:541:14:541:35:541:35:541:Infinity":67,"s:542:14:542:Infinity":253,"b:542:14:542:35:542:35:542:Infinity":68,"s:543:4:555:Infinity":254,"b:544:19:544:37:544:37:544:52":69,"b:549:13:549:35:549:35:549:Infinity":70,"b:550:14:550:36:550:36:550:Infinity":71,"s:559:2:578:Infinity":255,"b:560:4:560:Infinity:undefined:undefined:undefined:undefined":72,"s:560:4:560:Infinity":256,"s:560:34:560:Infinity":257,"b:561:4:561:Infinity:undefined:undefined:undefined:undefined":73,"s:561:4:561:Infinity":258,"b:561:8:561:30:561:30:561:43":74,"s:561:43:561:Infinity":259,"s:563:27:563:Infinity":260,"b:563:27:563:61:563:61:563:Infinity":75,"s:564:14:564:Infinity":261,"b:564:14:564:31:564:31:564:Infinity":76,"s:565:14:565:Infinity":262,"b:565:14:565:31:565:31:565:Infinity":77,"s:566:4:577:Infinity":263,"b:569:33:569:38:569:38:569:Infinity":78,"b:572:13:572:31:572:31:572:Infinity":79,"b:573:14:573:32:573:32:573:Infinity":80,"s:580:2:580:Infinity":264,"f:590:9:590:Infinity":19,"s:594:19:594:Infinity":265,"s:595:19:595:Infinity":266,"s:596:24:596:Infinity":267,"s:598:16:598:Infinity":268,"s:599:2:630:Infinity":269,"b:599:9:599:20:599:20:599:48":81,"s:600:4:600:Infinity":270,"s:601:4:601:Infinity":271,"s:604:4:604:Infinity":272,"f:604:18:604:19":20,"s:604:28:604:92":273,"b:604:28:604:41:604:41:604:68:604:68:604:92":82,"s:606:4:629:Infinity":274,"s:606:17:606:20":275,"s:607:21:607:Infinity":276,"s:609:6:628:Infinity":277,"s:609:19:609:26":278,"s:610:23:610:Infinity":279,"s:614:10:615:Infinity":280,"b:614:10:614:Infinity:615:10:615:Infinity":83,"b:616:8:616:Infinity:undefined:undefined:undefined:undefined":84,"s:616:8:616:Infinity":281,"s:616:23:616:Infinity":282,"s:619:26:619:Infinity":283,"b:620:8:627:Infinity:undefined:undefined:undefined:undefined":85,"s:620:8:627:Infinity":284,"s:622:21:622:Infinity":285,"s:623:10:623:Infinity":286,"s:624:10:624:Infinity":287,"s:625:10:625:Infinity":288,"s:626:10:626:Infinity":289,"b:632:2:634:Infinity:undefined:undefined:undefined:undefined":86,"s:632:2:634:Infinity":290,"s:633:4:633:Infinity":291,"s:635:2:635:Infinity":292,"f:645:9:645:Infinity":21,"s:649:19:649:Infinity":293,"s:650:19:650:Infinity":294,"s:651:24:651:Infinity":295,"s:653:16:653:Infinity":296,"s:654:2:685:Infinity":297,"b:654:9:654:20:654:20:654:48":87,"s:655:4:655:Infinity":298,"s:656:4:656:Infinity":299,"s:659:4:659:Infinity":300,"f:659:18:659:19":22,"s:659:28:659:92":301,"b:659:28:659:41:659:41:659:68:659:68:659:92":88,"s:661:4:684:Infinity":302,"s:661:17:661:20":303,"s:662:21:662:Infinity":304,"s:664:6:683:Infinity":305,"s:664:19:664:26":306,"s:665:23:665:Infinity":307,"s:669:10:670:Infinity":308,"b:669:10:669:Infinity:670:10:670:Infinity":89,"b:671:8:671:Infinity:undefined:undefined:undefined:undefined":90,"s:671:8:671:Infinity":309,"s:671:23:671:Infinity":310,"s:674:26:674:Infinity":311,"b:675:8:682:Infinity:undefined:undefined:undefined:undefined":91,"s:675:8:682:Infinity":312,"s:677:21:677:Infinity":313,"s:678:10:678:Infinity":314,"s:679:10:679:Infinity":315,"s:680:10:680:Infinity":316,"s:681:10:681:Infinity":317,"b:687:2:689:Infinity:undefined:undefined:undefined:undefined":92,"s:687:2:689:Infinity":318,"s:688:4:688:Infinity":319,"s:690:2:690:Infinity":320,"f:696:9:696:Infinity":23,"s:703:2:709:Infinity":321,"s:704:17:704:Infinity":322,"b:705:4:708:Infinity:undefined:undefined:undefined:undefined":93,"s:705:4:708:Infinity":323,"s:706:6:706:Infinity":324,"s:707:6:707:Infinity":325,"s:711:2:717:Infinity":326,"b:712:4:715:Infinity:undefined:undefined:undefined:undefined":94,"s:712:4:715:Infinity":327,"s:713:6:713:Infinity":328,"s:714:6:714:Infinity":329,"s:716:4:716:Infinity":330,"f:723:9:723:Infinity":24,"s:729:2:735:Infinity":331,"b:730:4:733:Infinity:undefined:undefined:undefined:undefined":95,"s:730:4:733:Infinity":332,"s:731:6:731:Infinity":333,"s:732:6:732:Infinity":334,"s:734:4:734:Infinity":335,"f:742:9:742:Infinity":25,"s:746:2:774:Infinity":336,"s:747:15:747:Infinity":337,"s:748:15:748:Infinity":338,"b:751:4:751:Infinity:undefined:undefined:undefined:undefined":96,"s:751:4:751:Infinity":339,"b:751:8:751:31:751:31:751:52":97,"s:751:52:751:Infinity":340,"b:753:4:773:Infinity:769:4:773:Infinity":98,"s:753:4:773:Infinity":341,"b:753:8:753:35:753:35:753:51:753:51:753:71":99,"b:755:6:758:Infinity:undefined:undefined:undefined:undefined":100,"s:755:6:758:Infinity":342,"s:756:8:756:Infinity":343,"s:757:8:757:Infinity":344,"s:760:6:766:Infinity":345,"s:761:21:761:Infinity":346,"b:762:8:765:Infinity:undefined:undefined:undefined:undefined":101,"s:762:8:765:Infinity":347,"s:763:10:763:Infinity":348,"s:764:10:764:Infinity":349,"s:768:6:768:Infinity":350,"b:769:4:773:Infinity:undefined:undefined:undefined:undefined":102,"s:769:4:773:Infinity":351,"b:769:15:769:41:769:41:769:59":103,"s:771:6:771:Infinity":352,"s:772:6:772:Infinity":353,"f:783:16:783:35":26,"s:784:31:784:Infinity":354,"b:785:2:785:Infinity:undefined:undefined:undefined:undefined":104,"s:785:2:785:Infinity":355,"s:785:17:785:Infinity":356,"s:787:19:787:Infinity":357,"b:788:2:791:Infinity:undefined:undefined:undefined:undefined":105,"s:788:2:791:Infinity":358,"s:789:4:789:Infinity":359,"s:790:4:790:Infinity":360,"s:794:2:794:Infinity":361,"s:797:2:797:Infinity":362,"s:800:2:800:Infinity":363,"s:802:2:802:Infinity":364}}} -,"C:\\Projects\\comfy-node-organizer\\src\\layout\\types.ts": {"path":"C:\\Projects\\comfy-node-organizer\\src\\layout\\types.ts","statementMap":{"0":{"start":{"line":180,"column":44},"end":{"line":191,"column":null}}},"fnMap":{},"branchMap":{},"s":{"0":1},"f":{},"b":{},"meta":{"lastBranch":0,"lastFunction":0,"lastStatement":1,"seen":{"s:180:44:191:Infinity":0}}} -} diff --git a/coverage/favicon.png b/coverage/favicon.png deleted file mode 100644 index c1525b811a167671e9de1fa78aab9f5c0b61cef7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445 zcmV;u0Yd(XP))rP{nL}Ln%S7`m{0DjX9TLF* zFCb$4Oi7vyLOydb!7n&^ItCzb-%BoB`=x@N2jll2Nj`kauio%aw_@fe&*}LqlFT43 z8doAAe))z_%=P%v^@JHp3Hjhj^6*Kr_h|g_Gr?ZAa&y>wxHE99Gk>A)2MplWz2xdG zy8VD2J|Uf#EAw*bo5O*PO_}X2Tob{%bUoO2G~T`@%S6qPyc}VkhV}UifBuRk>%5v( z)x7B{I~z*k<7dv#5tC+m{km(D087J4O%+<<;K|qwefb6@GSX45wCK}Sn*> - - - - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- 81.19% - Statements - 842/1037 -
- - -
- 62.04% - Branches - 371/598 -
- - -
- 86.66% - Functions - 78/90 -
- - -
- 83.75% - Lines - 794/948 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
src -
-
60%6/1050%4/8100%2/260%6/10
src/layout -
-
81.4%836/102762.2%367/59086.36%76/8884%788/938
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/prettify.css b/coverage/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/coverage/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/prettify.js b/coverage/prettify.js deleted file mode 100644 index b322523..0000000 --- a/coverage/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/sort-arrow-sprite.png b/coverage/sort-arrow-sprite.png deleted file mode 100644 index 6ed68316eb3f65dec9063332d2f69bf3093bbfab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qh}Z>jv*C{$p!i!8j}?a+@3A= zIAGwzjijN=FBi!|L1t?LM;Q;gkwn>2cAy-KV{dn nf0J1DIvEHQu*n~6U}x}qyky7vi4|9XhBJ7&`njxgN@xNA8m%nc diff --git a/coverage/sorter.js b/coverage/sorter.js deleted file mode 100644 index 4ed70ae..0000000 --- a/coverage/sorter.js +++ /dev/null @@ -1,210 +0,0 @@ -/* eslint-disable */ -var addSorting = (function() { - 'use strict'; - var cols, - currentSort = { - index: 0, - desc: false - }; - - // returns the summary table element - function getTable() { - return document.querySelector('.coverage-summary'); - } - // returns the thead element of the summary table - function getTableHeader() { - return getTable().querySelector('thead tr'); - } - // returns the tbody element of the summary table - function getTableBody() { - return getTable().querySelector('tbody'); - } - // returns the th element for nth column - function getNthColumn(n) { - return getTableHeader().querySelectorAll('th')[n]; - } - - function onFilterInput() { - const searchValue = document.getElementById('fileSearch').value; - const rows = document.getElementsByTagName('tbody')[0].children; - - // Try to create a RegExp from the searchValue. If it fails (invalid regex), - // it will be treated as a plain text search - let searchRegex; - try { - searchRegex = new RegExp(searchValue, 'i'); // 'i' for case-insensitive - } catch (error) { - searchRegex = null; - } - - for (let i = 0; i < rows.length; i++) { - const row = rows[i]; - let isMatch = false; - - if (searchRegex) { - // If a valid regex was created, use it for matching - isMatch = searchRegex.test(row.textContent); - } else { - // Otherwise, fall back to the original plain text search - isMatch = row.textContent - .toLowerCase() - .includes(searchValue.toLowerCase()); - } - - row.style.display = isMatch ? '' : 'none'; - } - } - - // loads the search box - function addSearchBox() { - var template = document.getElementById('filterTemplate'); - var templateClone = template.content.cloneNode(true); - templateClone.getElementById('fileSearch').oninput = onFilterInput; - template.parentElement.appendChild(templateClone); - } - - // loads all columns - function loadColumns() { - var colNodes = getTableHeader().querySelectorAll('th'), - colNode, - cols = [], - col, - i; - - for (i = 0; i < colNodes.length; i += 1) { - colNode = colNodes[i]; - col = { - key: colNode.getAttribute('data-col'), - sortable: !colNode.getAttribute('data-nosort'), - type: colNode.getAttribute('data-type') || 'string' - }; - cols.push(col); - if (col.sortable) { - col.defaultDescSort = col.type === 'number'; - colNode.innerHTML = - colNode.innerHTML + ''; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSearchBox(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/coverage/src/debug.ts.html b/coverage/src/debug.ts.html deleted file mode 100644 index 8cef0f8..0000000 --- a/coverage/src/debug.ts.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - Code coverage report for src/debug.ts - - - - - - - - - -
-
-

All files / src debug.ts

-
- -
- 60% - Statements - 6/10 -
- - -
- 50% - Branches - 4/8 -
- - -
- 100% - Functions - 2/2 -
- - -
- 60% - Lines - 6/10 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27  -1x -1x -  -  -  -  -  -624x -  -624x -  -  -  -624x -  -  -  -  -  -  -  -624x -  -  -  - 
/** Setting ID for debug logging */
-const SETTINGS_PREFIX = "Node Organizer";
-const SETTINGS_IDS = {
-  DEBUG_LOGGING: `${SETTINGS_PREFIX}.Debug Logging`,
-};
- 
-/** Check if debug logging is enabled */
-export function isDebugEnabled(): boolean {
-  try {
-    // Access app only if it exists (not in test environment)
-    Iif (typeof globalThis !== "undefined" && "app" in globalThis) {
-      const app = (globalThis as { app?: { extensionManager?: { setting?: { get: <T>(id: string) => T } } } }).app;
-      return app?.extensionManager?.setting?.get<boolean>(SETTINGS_IDS.DEBUG_LOGGING) ?? false;
-    }
-    return false;
-  } catch {
-    return false;
-  }
-}
- 
-/** Log message only if debug logging is enabled */
-export function debugLog(message: string, ...args: unknown[]): void {
-  Iif (isDebugEnabled()) {
-    console.log(`[node-organizer] ${message}`, ...args);
-  }
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/index.html b/coverage/src/index.html deleted file mode 100644 index 6f0382a..0000000 --- a/coverage/src/index.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - Code coverage report for src - - - - - - - - - -
-
-

All files src

-
- -
- 60% - Statements - 6/10 -
- - -
- 50% - Branches - 4/8 -
- - -
- 100% - Functions - 2/2 -
- - -
- 60% - Lines - 6/10 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
debug.ts -
-
60%6/1050%4/8100%2/260%6/10
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/bin-pack.ts.html b/coverage/src/layout/bin-pack.ts.html deleted file mode 100644 index c3b1eef..0000000 --- a/coverage/src/layout/bin-pack.ts.html +++ /dev/null @@ -1,760 +0,0 @@ - - - - - - Code coverage report for src/layout/bin-pack.ts - - - - - - - - - -
-
-

All files / src/layout bin-pack.ts

-
- -
- 60% - Statements - 45/75 -
- - -
- 56.66% - Branches - 17/30 -
- - -
- 52.94% - Functions - 9/17 -
- - -
- 63.63% - Lines - 42/66 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -205x -  -  -205x -  -23x -  -  -  -182x -245x -245x -  -  -  -  -  -  -  -182x -  -182x -  -  -  -  -  -182x -  -  -  -  -  -  -  -  -  -  -23x -23x -  -23x -52x -52x -52x -  -52x -  -  -  -  -  -  -52x -  -  -23x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -182x -  -182x -  -245x -  -245x -70x -  -  -  -70x -70x -  -70x -21x -21x -21x -21x -21x -  -  -  -245x -  -224x -  -  -  -  -  -  -  -  -182x -  -  -182x -182x -  -182x -224x -245x -  -  -  -  -  -224x -  -  -182x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -126x -  - 
import type { PackedRow, LayoutConfig } from "./types";
- 
-/** Node size info for packing */
-interface NodeSize {
-  id: number;
-  width: number;
-  height: number;
-}
- 
-/**
- * Pack nodes into rows using First-Fit Decreasing Height (FFDH) algorithm
- *
- * Strategy:
- * 1. Sort nodes by height descending (tall nodes first)
- * 2. For each node, try to fit into existing row
- * 3. If no row fits, create new row
- * 4. Rows are sorted by height for visual consistency
- *
- * @param nodeIds - Node IDs to pack
- * @param sizes - Map of node ID to size
- * @param config - Layout configuration
- * @returns Array of packed rows
- */
-export function packNodesIntoRows(
-  nodeIds: number[],
-  sizes: Map<number, { width: number; height: number }>,
-  config: LayoutConfig
-): PackedRow[] {
-  Iif (nodeIds.length === 0) return [];
- 
-  // maxColumns: 0=auto, 1=disabled (vertical stack), 2+=fixed columns
-  if (config.maxColumns === 1) {
-    // Vertical stacking - one node per row
-    return packVertically(nodeIds, sizes, config.verticalGap);
-  }
- 
-  // Build sized node list
-  const nodeSizes: NodeSize[] = nodeIds.map((id) => {
-    const size = sizes.get(id);
-    return {
-      id,
-      width: size?.width ?? 200,
-      height: size?.height ?? 100,
-    };
-  });
- 
-  // Sort by height descending (FFDH: tall nodes first)
-  nodeSizes.sort((a, b) => b.height - a.height);
- 
-  Iif (config.maxColumns >= 2) {
-    // Fixed column count
-    return packFixedColumns(nodeSizes, config.maxColumns, config.verticalGap);
-  }
- 
-  // Auto mode: use maxRowWidth
-  return packByWidth(nodeSizes, config.maxRowWidth, config.horizontalGap, config.verticalGap);
-}
- 
-/**
- * Pack nodes vertically (one per row) - legacy behavior
- */
-function packVertically(
-  nodeIds: number[],
-  sizes: Map<number, { width: number; height: number }>,
-  verticalGap: number
-): PackedRow[] {
-  const rows: PackedRow[] = [];
-  let yOffset = 0;
- 
-  for (const id of nodeIds) {
-    const size = sizes.get(id);
-    const height = size?.height ?? 100;
-    const width = size?.width ?? 200;
- 
-    rows.push({
-      nodes: [id],
-      height,
-      yOffset,
-      width,
-    });
- 
-    yOffset += height + verticalGap;
-  }
- 
-  return rows;
-}
- 
-/**
- * Pack nodes into fixed number of columns
- * Distributes nodes round-robin by height to balance columns
- */
-function packFixedColumns(
-  nodeSizes: NodeSize[],
-  columnCount: number,
-  verticalGap: number
-): PackedRow[] {
-  // Group nodes by similar height into rows
-  const rows: PackedRow[] = [];
-  let currentRow: NodeSize[] = [];
- 
-  for (const node of nodeSizes) {
-    currentRow.push(node);
- 
-    if (currentRow.length >= columnCount) {
-      // Row is full
-      const rowHeight = Math.max(...currentRow.map((n) => n.height));
-      const rowWidth = currentRow.reduce((sum, n) => sum + n.width, 0);
- 
-      rows.push({
-        nodes: currentRow.map((n) => n.id),
-        height: rowHeight,
-        yOffset: 0, // Set later
-        width: rowWidth,
-      });
- 
-      currentRow = [];
-    }
-  }
- 
-  // Handle remaining nodes in last partial row
-  if (currentRow.length > 0) {
-    const rowHeight = Math.max(...currentRow.map((n) => n.height));
-    const rowWidth = currentRow.reduce((sum, n) => sum + n.width, 0);
- 
-    rows.push({
-      nodes: currentRow.map((n) => n.id),
-      height: rowHeight,
-      yOffset: 0,
-      width: rowWidth,
-    });
-  }
- 
-  // Calculate y offsets
-  let yOffset = 0;
-  for (const row of rows) {
-    row.yOffset = yOffset;
-    yOffset += row.height + verticalGap;
-  }
- 
-  return rows;
-}
- 
-/**
- * Pack nodes by maximum row width (auto column count)
- * Uses FFDH: First-Fit Decreasing Height
- */
-function packByWidth(
-  nodeSizes: NodeSize[],
-  maxRowWidth: number,
-  horizontalGap: number,
-  verticalGap: number
-): PackedRow[] {
-  const rows: Array<{
-    nodes: NodeSize[];
-    height: number;
-    currentWidth: number;
-  }> = [];
- 
-  for (const node of nodeSizes) {
-    // Try to fit into existing row
-    let placed = false;
- 
-    for (const row of rows) {
-      const newWidth = row.currentWidth + horizontalGap + node.width;
- 
-      // Check if node fits and heights are compatible
-      // Allow 50% height variance to keep rows visually balanced
-      const heightRatio = row.height > 0 ? node.height / row.height : 1;
-      const heightCompatible = heightRatio >= 0.5 && heightRatio <= 2.0;
- 
-      if (newWidth <= maxRowWidth && heightCompatible) {
-        row.nodes.push(node);
-        row.currentWidth = newWidth;
-        row.height = Math.max(row.height, node.height);
-        placed = true;
-        break;
-      }
-    }
- 
-    if (!placed) {
-      // Create new row
-      rows.push({
-        nodes: [node],
-        height: node.height,
-        currentWidth: node.width,
-      });
-    }
-  }
- 
-  // Sort rows by their tallest node height (tallest first for visual hierarchy)
-  rows.sort((a, b) => b.height - a.height);
- 
-  // Convert to PackedRow format with y offsets
-  const result: PackedRow[] = [];
-  let yOffset = 0;
- 
-  for (const row of rows) {
-    result.push({
-      nodes: row.nodes.map((n) => n.id),
-      height: row.height,
-      yOffset,
-      width: row.currentWidth,
-    });
- 
-    yOffset += row.height + verticalGap;
-  }
- 
-  return result;
-}
- 
-/**
- * Calculate total height of packed rows
- */
-export function getPackedHeight(rows: PackedRow[]): number {
-  if (rows.length === 0) return 0;
-  const lastRow = rows[rows.length - 1];
-  return lastRow.yOffset + lastRow.height;
-}
- 
-/**
- * Calculate max width across all packed rows
- */
-export function getPackedWidth(rows: PackedRow[]): number {
-  return Math.max(0, ...rows.map((r) => r.width));
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/graph-builder.ts.html b/coverage/src/layout/graph-builder.ts.html deleted file mode 100644 index 22ff6e4..0000000 --- a/coverage/src/layout/graph-builder.ts.html +++ /dev/null @@ -1,1780 +0,0 @@ - - - - - - Code coverage report for src/layout/graph-builder.ts - - - - - - - - - -
-
-

All files / src/layout graph-builder.ts

-
- -
- 74.29% - Statements - 185/249 -
- - -
- 59.87% - Branches - 97/162 -
- - -
- 81.25% - Functions - 13/16 -
- - -
- 78.07% - Lines - 178/228 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -60x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -364x -364x -364x -364x -  -364x -364x -364x -364x -  -  -364x -  -  -  -  -  -  -  -  -30x -98x -98x -  -98x -462x -364x -28x -28x -28x -28x -  -  -  -  -98x -98x -28x -  -  -  -  -98x -30x -70x -  -  -30x -98x -98x -98x -98x -98x -28x -  -  -  -  -  -  -  -  -1533x -1533x -1533x -1533x -  -1533x -1533x -  -1533x -  -  -  -  -  -  -  -  -  -  -30x -30x -30x -  -  -30x -30x -  -30x -374x -374x -  -  -  -  -30x -  -  -30x -30x -  -  -  -  -  -  -30x -  -  -  -  -  -  -  -  -30x -30x -  -  -30x -30x -  -30x -  -  -  -  -  -30x -  -30x -98x -  -98x -  -  -  -  -  -  -  -  -  -98x -  -  -  -30x -  -  -  -  -30x -  -30x -374x -374x -  -374x -1533x -203x -189x -189x -  -  -  -  -374x -175x -175x -  -  -  -  -30x -98x -  -  -98x -  -  -  -  -  -  -98x -30x -  -30x -161x -  -  -  -44x -44x -  -98x -  -  -  -  -  -98x -98x -  -  -  -98x -98x -28x -28x -  -98x -14x -  -98x -  -  -98x -98x -  -  -  -  -  -  -  -  -  -30x -  -30x -  -374x -73x -  -  -  -301x -  -  -  -301x -  -301x -  -  -154x -  -154x -  -70x -  -  -70x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -147x -147x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -30x -30x -  -  -  -  -  -  -30x -30x -  -  -  -  -  -  -  -  -30x -420x -420x -  -420x -420x -  -  -420x -  -  -  -  -420x -420x -  -420x -231x -231x -  -420x -140x -140x -  -  -  -420x -98x -98x -98x -42x -  -  -  -378x -378x -  -378x -378x -280x -  -378x -280x -  -  -  -  -  -  -30x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -30x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -98x -175x -175x -  -98x -7x -  -  -  -91x -  -91x -  -21x -21x -21x -  -21x -49x -  -49x -49x -  -49x -77x -77x -  -  -  -49x -49x -  -  -49x -49x -  -  -  -21x -21x -  -  -21x -  -  -70x -70x -  -70x -98x -98x -  -  -  -70x -70x -  -  -70x -  -  -  -  -  -  -  -721x -721x -63x -  -721x -  - 
import type {
-  LGraph,
-  LGraphNode,
-  LGraphGroup,
-  LayoutNode,
-  LayoutGroup,
-  LayoutState,
-  LayoutConfig,
-  RerouteChain,
-} from "./types";
-import { DEFAULT_CONFIG } from "./types";
-import { classifyNodes } from "./node-classifier";
-import { findRerouteChains, getRerouteNodeIds, getVirtualEdges } from "./reroute-collapse";
-import { getInternalEdges, assignMemberLayers } from "./layout-utils";
-import { debugLog } from "../debug";
- 
-/**
- * Runtime subgraph I/O node (has pos/size like regular nodes, not bounding)
- */
-interface RuntimeIONode {
-  id: number;
-  pos: [number, number];
-  size: [number, number];
-}
- 
-/**
- * Check if an object looks like a subgraph I/O node at runtime
- * Runtime has pos/size (not bounding like JSON export)
- */
-function isValidIONode(obj: unknown): obj is RuntimeIONode {
-  Eif (!obj || typeof obj !== "object") return false;
-  const candidate = obj as Record<string, unknown>;
-  // Must have numeric id
-  if (typeof candidate.id !== "number") return false;
-  // Use duck typing - pos/size may be getters returning array-like objects
-  const pos = candidate.pos as [number, number] | undefined;
-  const size = candidate.size as [number, number] | undefined;
-  if (!pos || typeof pos[0] !== "number" || typeof pos[1] !== "number") return false;
-  if (!size || typeof size[0] !== "number" || typeof size[1] !== "number") return false;
-  return true;
-}
- 
-/**
- * Convert runtime I/O node to LGraphNode-like object for layout
- */
-function ioNodeToLGraphNode(ioNode: RuntimeIONode, type: "input" | "output"): LGraphNode {
-  return {
-    id: ioNode.id,
-    type: `subgraph_${type}`,
-    title: type === "input" ? "Input" : "Output",
-    pos: [ioNode.pos[0], ioNode.pos[1]],
-    size: [ioNode.size[0], ioNode.size[1]],
-    inputs: [],
-    outputs: [],
-  };
-}
- 
-/** Title bar height for groups */
-const GROUP_TITLE_HEIGHT = 50;
- 
-/**
- * Check if outer group's bounds fully contain inner group's bounds
- */
-function groupContainsGroup(outer: LGraphGroup, inner: LGraphGroup): boolean {
-  const ox = outer.pos[0];
-  const oy = outer.pos[1];
-  const ow = outer.size[0];
-  const oh = outer.size[1];
- 
-  const ix = inner.pos[0];
-  const iy = inner.pos[1];
-  const iw = inner.size[0];
-  const ih = inner.size[1];
- 
-  // Inner's bounds must be fully within outer's bounds
-  return ix >= ox && iy >= oy && ix + iw <= ox + ow && iy + ih <= oy + oh;
-}
- 
-/**
- * Build parent-child hierarchy for groups based on bounds containment
- * Assigns parentGroup, childGroups, and depth to each LayoutGroup
- */
-function buildGroupHierarchy(layoutGroups: LayoutGroup[]): void {
-  // For each group, find its parent (smallest containing group)
-  for (const inner of layoutGroups) {
-    let bestParent: LayoutGroup | null = null;
-    let bestArea = Infinity;
- 
-    for (const outer of layoutGroups) {
-      if (outer === inner) continue;
-      if (groupContainsGroup(outer.group, inner.group)) {
-        const area = outer.group.size[0] * outer.group.size[1];
-        Eif (area < bestArea) {
-          bestArea = area;
-          bestParent = outer;
-        }
-      }
-    }
- 
-    inner.parentGroup = bestParent;
-    if (bestParent) {
-      bestParent.childGroups.push(inner);
-    }
-  }
- 
-  // Calculate depths using BFS from roots
-  const roots = layoutGroups.filter((g) => !g.parentGroup);
-  const queue: Array<{ group: LayoutGroup; depth: number }> = roots.map(
-    (g) => ({ group: g, depth: 0 })
-  );
- 
-  while (queue.length > 0) {
-    const item = queue.shift();
-    Iif (!item) break;
-    const { group, depth } = item;
-    group.depth = depth;
-    for (const child of group.childGroups) {
-      queue.push({ group: child, depth: depth + 1 });
-    }
-  }
-}
- 
-/**
- * Check if a node's origin is inside a group's content area
- */
-function nodeInsideGroup(node: LGraphNode, group: LGraphGroup): boolean {
-  const gx = group.pos[0];
-  const gy = group.pos[1] + GROUP_TITLE_HEIGHT;
-  const gw = group.size[0];
-  const gh = group.size[1] - GROUP_TITLE_HEIGHT;
- 
-  const nx = node.pos?.[0] ?? 0;
-  const ny = node.pos?.[1] ?? 0;
- 
-  return nx >= gx && nx < gx + gw && ny >= gy && ny < gy + gh;
-}
- 
-/**
- * Build layout graph from ComfyUI graph
- * Groups are treated as "mega-nodes" with full hierarchy support
- */
-export function buildLayoutGraph(
-  graph: LGraph,
-  config: Partial<LayoutConfig> = {}
-): LayoutState {
-  const fullConfig: LayoutConfig = { ...DEFAULT_CONFIG, ...config };
-  const nodes = new Map<number, LayoutNode>();
-  const groups: LayoutGroup[] = [];
- 
-  // First pass: Extract all nodes
-  const graphNodes = graph._nodes ?? [];
-  const allNodes = new Map<number, LGraphNode>();
- 
-  for (const node of graphNodes) {
-    Iif (!node || node.id === undefined) continue;
-    allNodes.set(node.id, node);
-  }
- 
-  // Track subgraph I/O nodes separately (they need special position handling)
-  // Runtime I/O nodes have pos/size like regular nodes
-  const ioNodes = new Map<number, RuntimeIONode>();
- 
-  // Check for subgraph I/O nodes (Subgraph extends LGraph)
-  const graphAny = graph as unknown as Record<string, unknown>;
-  Iif (isValidIONode(graphAny.inputNode)) {
-    const inputNode = graphAny.inputNode as RuntimeIONode;
-    const inputLGraphNode = ioNodeToLGraphNode(inputNode, "input");
-    allNodes.set(inputNode.id, inputLGraphNode);
-    ioNodes.set(inputNode.id, inputNode);
-    debugLog(`Found subgraph input node id=${inputNode.id} at [${inputNode.pos}]`);
-  }
-  Iif (isValidIONode(graphAny.outputNode)) {
-    const outputNode = graphAny.outputNode as RuntimeIONode;
-    const outputLGraphNode = ioNodeToLGraphNode(outputNode, "output");
-    allNodes.set(outputNode.id, outputLGraphNode);
-    ioNodes.set(outputNode.id, outputNode);
-    debugLog(`Found subgraph output node id=${outputNode.id} at [${outputNode.pos}]`);
-  }
- 
-  // Classify nodes into connected/disconnected/reroutes
-  const classified = classifyNodes(graph);
-  const disconnectedNodes = classified.disconnected;
- 
-  // Find and collapse reroute chains if enabled
-  let rerouteChains: RerouteChain[] = [];
-  let collapsedRerouteIds = new Set<number>();
- 
-  Iif (fullConfig.collapseReroutes && classified.reroutes.size > 0) {
-    rerouteChains = findRerouteChains(graph, classified.reroutes);
-    collapsedRerouteIds = getRerouteNodeIds(rerouteChains);
-  }
- 
-  // Second pass: Create LayoutGroup objects (without hierarchy yet)
-  const graphGroups = graph._groups ?? [];
- 
-  for (const group of graphGroups) {
-    Iif (!group || !group.pos || !group.size) continue;
- 
-    const layoutGroup: LayoutGroup = {
-      group,
-      memberIds: new Set<number>(),
-      childGroups: [],
-      parentGroup: null,
-      depth: 0,
-      width: 0,
-      height: 0,
-    };
- 
-    groups.push(layoutGroup);
-  }
- 
-  // Third pass: Build group hierarchy (parent-child relationships)
-  buildGroupHierarchy(groups);
- 
-  // Fourth pass: Assign nodes to their INNERMOST containing group
-  // A node belongs only to the deepest group that contains it
-  // Membership is determined from original workflow positions (user's design intent)
-  const nodeToGroup = new Map<number, LayoutGroup>();
- 
-  for (const [nodeId, node] of allNodes) {
-    let bestGroup: LayoutGroup | null = null;
-    let maxDepth = -1;
- 
-    for (const layoutGroup of groups) {
-      if (nodeInsideGroup(node, layoutGroup.group)) {
-        if (layoutGroup.depth > maxDepth) {
-          maxDepth = layoutGroup.depth;
-          bestGroup = layoutGroup;
-        }
-      }
-    }
- 
-    if (bestGroup) {
-      bestGroup.memberIds.add(nodeId);
-      nodeToGroup.set(nodeId, bestGroup);
-    }
-  }
- 
-  // Log group membership
-  for (const layoutGroup of groups) {
-    const parentInfo = layoutGroup.parentGroup
-      ? ` (inside "${layoutGroup.parentGroup.group.title}")`
-      : "";
-    debugLog(
-      `Group "${layoutGroup.group.title}": ${layoutGroup.memberIds.size} direct members, ${layoutGroup.childGroups.length} child groups${parentInfo}`
-    );
-  }
- 
-  // Fifth pass: Calculate group sizes bottom-up (deepest first)
-  // Build groupsByDepth array for bottom-up processing
-  const maxDepth = Math.max(0, ...groups.map((g) => g.depth));
-  const groupsByDepth: LayoutGroup[][] = [];
- 
-  for (let d = 0; d <= maxDepth; d++) {
-    groupsByDepth.push(groups.filter((g) => g.depth === d));
-  }
- 
-  // Process from deepest to shallowest
-  for (let depth = maxDepth; depth >= 0; depth--) {
-    for (const layoutGroup of groupsByDepth[depth]) {
-      // Calculate dimensions based on internal structure
-      const { width: memberWidth, height: memberHeight } = calculateGroupMemberDimensions(
-        layoutGroup,
-        allNodes,
-        fullConfig
-      );
- 
-      let totalWidth = memberWidth;
-      let totalHeight = memberHeight;
- 
-      // Include child groups (already calculated in previous iterations)
-      // Child groups add to height below members
-      let childGroupsHeight = 0;
-      for (const child of layoutGroup.childGroups) {
-        totalWidth = Math.max(totalWidth, child.width);
-        childGroupsHeight += child.height + fullConfig.verticalGap;
-      }
-      if (memberHeight > 0 && childGroupsHeight > 0) {
-        totalHeight += fullConfig.verticalGap; // Gap between members and children
-      }
-      totalHeight += childGroupsHeight;
- 
-      // Add padding and title
-      layoutGroup.width = totalWidth + fullConfig.groupPadding * 2;
-      layoutGroup.height =
-        totalHeight + fullConfig.groupPadding * 2 + GROUP_TITLE_HEIGHT;
-    }
-  }
- 
-  // Sixth pass: Create LayoutNodes
-  // - Standalone connected nodes become regular layout nodes
-  // - Top-level groups get a representative node
-  // - Nested groups are handled internally by their parent
-  // - Disconnected nodes and collapsed reroutes are EXCLUDED (placed separately later)
-  const groupRepresentatives = new Map<LayoutGroup, number>();
- 
-  for (const [id, node] of allNodes) {
-    // Skip disconnected nodes - they'll be placed in a separate zone
-    if (disconnectedNodes.has(id)) {
-      continue;
-    }
- 
-    // Skip collapsed reroute nodes - they'll be restored after layout
-    Iif (collapsedRerouteIds.has(id)) {
-      continue;
-    }
- 
-    const group = nodeToGroup.get(id);
- 
-    if (group) {
-      // This node is in a group
-      // Only create representative for top-level groups
-      const topLevelGroup = getTopLevelGroup(group);
- 
-      if (!groupRepresentatives.has(topLevelGroup)) {
-        // First member becomes the representative for the top-level group
-        groupRepresentatives.set(topLevelGroup, id);
- 
-        // Create layout node with TOP-LEVEL GROUP dimensions
-        nodes.set(id, {
-          node,
-          id,
-          layer: -1,
-          orderInLayer: 0,
-          predecessors: [],
-          successors: [],
-          width: topLevelGroup.width,
-          height: topLevelGroup.height,
-          x: 0,
-          y: 0,
-          isGroupRepresentative: true,
-          group: topLevelGroup,
-        });
-      }
-      // Skip non-representative group members - they'll be positioned relative to group
-    } else {
-      // Standalone node (or I/O node)
-      const runtimeIONode = ioNodes.get(id);
-      nodes.set(id, {
-        node,
-        id,
-        layer: -1,
-        orderInLayer: 0,
-        predecessors: [],
-        successors: [],
-        width: node.size?.[0] ?? 200,
-        height: node.size?.[1] ?? 100,
-        x: 0,
-        y: 0,
-        isSubgraphIO: runtimeIONode !== undefined,
-        runtimeIONode,
-      });
-    }
-  }
- 
-  // Seventh pass: Build adjacency from links
-  // For group members, redirect connections to the top-level group representative
-  // Skip links involving collapsed reroutes (handled via virtual edges)
-  const links = graph.links;
-  Eif (links) {
-    // Handle different link storage formats:
-    // - Map<number, LLink> (newer ComfyUI)
-    // - Record<number, LLink> (object with numeric keys)
-    // - LLink[] (array, common in subgraphs)
-    let linkEntries: Iterable<[number, { origin_id: number; target_id: number } | null]>;
- 
-    if (links instanceof Map) {
-      linkEntries = links.entries();
-    E} else if (Array.isArray(links)) {
-      // Array of link objects (subgraph format)
-      linkEntries = links.map((link, i) => [i, link] as const);
-    } else {
-      // Object with numeric keys
-      linkEntries = Object.entries(links).map(([k, v]) => [Number(k), v] as const);
-    }
- 
-    for (const [, link] of linkEntries) {
-      Iif (!link || typeof link !== "object") continue;
-      Iif (typeof link.origin_id !== "number" || typeof link.target_id !== "number") continue;
- 
-      let sourceId = link.origin_id;
-      let targetId = link.target_id;
- 
-      // Skip links involving collapsed reroutes (handled via virtual edges)
-      Iif (collapsedRerouteIds.has(sourceId) || collapsedRerouteIds.has(targetId)) {
-        continue;
-      }
- 
-      // Redirect group members to their top-level group representative
-      const sourceGroup = nodeToGroup.get(sourceId);
-      const targetGroup = nodeToGroup.get(targetId);
- 
-      if (sourceGroup) {
-        const topLevel = getTopLevelGroup(sourceGroup);
-        sourceId = groupRepresentatives.get(topLevel)!;
-      }
-      if (targetGroup) {
-        const topLevel = getTopLevelGroup(targetGroup);
-        targetId = groupRepresentatives.get(topLevel)!;
-      }
- 
-      // Skip internal group connections (within same top-level group)
-      if (sourceGroup && targetGroup) {
-        const sourceTop = getTopLevelGroup(sourceGroup);
-        const targetTop = getTopLevelGroup(targetGroup);
-        if (sourceTop === targetTop) {
-          continue;
-        }
-      }
- 
-      const sourceNode = nodes.get(sourceId);
-      const targetNode = nodes.get(targetId);
- 
-      Eif (sourceNode && targetNode) {
-        if (!sourceNode.successors.includes(targetId)) {
-          sourceNode.successors.push(targetId);
-        }
-        if (!targetNode.predecessors.includes(sourceId)) {
-          targetNode.predecessors.push(sourceId);
-        }
-      }
-    }
-  }
- 
-  // Eighth pass: Add virtual edges from collapsed reroute chains
-  Iif (rerouteChains.length > 0) {
-    const virtualEdges = getVirtualEdges(rerouteChains);
- 
-    for (const [sourceId, targetIds] of virtualEdges) {
-      // Handle group redirection for source
-      const sourceGroup = nodeToGroup.get(sourceId);
-      let effectiveSourceId = sourceId;
-      if (sourceGroup) {
-        const topLevel = getTopLevelGroup(sourceGroup);
-        effectiveSourceId = groupRepresentatives.get(topLevel)!;
-      }
- 
-      const sourceNode = nodes.get(effectiveSourceId);
-      if (!sourceNode) continue;
- 
-      for (const targetId of targetIds) {
-        // Handle group redirection for target
-        const targetGroup = nodeToGroup.get(targetId);
-        let effectiveTargetId = targetId;
-        if (targetGroup) {
-          const topLevel = getTopLevelGroup(targetGroup);
-          effectiveTargetId = groupRepresentatives.get(topLevel)!;
-        }
- 
-        const targetNode = nodes.get(effectiveTargetId);
-        if (!targetNode) continue;
- 
-        // Skip if same group
-        if (sourceGroup && targetGroup) {
-          const sourceTop = getTopLevelGroup(sourceGroup);
-          const targetTop = getTopLevelGroup(targetGroup);
-          if (sourceTop === targetTop) continue;
-        }
- 
-        if (!sourceNode.successors.includes(effectiveTargetId)) {
-          sourceNode.successors.push(effectiveTargetId);
-        }
-        if (!targetNode.predecessors.includes(effectiveSourceId)) {
-          targetNode.predecessors.push(effectiveSourceId);
-        }
-      }
-    }
-  }
- 
-  return {
-    nodes,
-    layers: [],
-    groups,
-    config: fullConfig,
-    nodeToGroup,
-    groupRepresentatives,
-    allNodes,
-    groupsByDepth,
-    disconnectedNodes,
-    rerouteChains,
-  };
-}
- 
-/**
- * Calculate group member dimensions based on internal structure
- * For groups with internal connections: uses layer-aware sizing (width = sum of layer widths, height = max layer height)
- * For groups without internal connections: uses simple vertical stacking (width = max, height = sum)
- */
-function calculateGroupMemberDimensions(
-  layoutGroup: LayoutGroup,
-  allNodes: Map<number, LGraphNode>,
-  config: LayoutConfig
-): { width: number; height: number } {
-  const memberNodes = [...layoutGroup.memberIds]
-    .map((id) => allNodes.get(id))
-    .filter((n): n is LGraphNode => n !== undefined);
- 
-  if (memberNodes.length === 0) {
-    return { width: 0, height: 0 };
-  }
- 
-  // Check for internal connections between members
-  const edges = getInternalEdges(layoutGroup.memberIds, allNodes);
- 
-  if (edges.length > 0) {
-    // Has internal layers - calculate per-layer dimensions
-    const layers = assignMemberLayers(layoutGroup.memberIds, edges, allNodes);
-    let totalWidth = 0;
-    let maxHeight = 0;
- 
-    for (const layer of layers) {
-      Iif (layer.length === 0) continue;
- 
-      let layerMaxWidth = 0;
-      let layerHeight = 0;
- 
-      for (const node of layer) {
-        layerMaxWidth = Math.max(layerMaxWidth, node.size?.[0] ?? 200);
-        layerHeight += (node.size?.[1] ?? 100) + config.verticalGap;
-      }
- 
-      // Remove trailing gap
-      Eif (layerHeight > 0) {
-        layerHeight -= config.verticalGap;
-      }
- 
-      totalWidth += layerMaxWidth + config.horizontalGap;
-      maxHeight = Math.max(maxHeight, layerHeight);
-    }
- 
-    // Remove trailing gap
-    Eif (totalWidth > 0) {
-      totalWidth -= config.horizontalGap;
-    }
- 
-    return { width: totalWidth, height: maxHeight };
-  } else {
-    // No internal connections - simple vertical stacking
-    let maxWidth = 0;
-    let totalHeight = 0;
- 
-    for (const node of memberNodes) {
-      maxWidth = Math.max(maxWidth, node.size?.[0] ?? 200);
-      totalHeight += (node.size?.[1] ?? 100) + config.verticalGap;
-    }
- 
-    // Remove trailing gap
-    Eif (totalHeight > 0) {
-      totalHeight -= config.verticalGap;
-    }
- 
-    return { width: maxWidth, height: totalHeight };
-  }
-}
- 
-/**
- * Get the top-level group (root of hierarchy) for a given group
- */
-function getTopLevelGroup(group: LayoutGroup): LayoutGroup {
-  let current = group;
-  while (current.parentGroup) {
-    current = current.parentGroup;
-  }
-  return current;
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/groups.ts.html b/coverage/src/layout/groups.ts.html deleted file mode 100644 index 83e1dda..0000000 --- a/coverage/src/layout/groups.ts.html +++ /dev/null @@ -1,526 +0,0 @@ - - - - - - Code coverage report for src/layout/groups.ts - - - - - - - - - -
-
-

All files / src/layout groups.ts

-
- -
- 74.02% - Statements - 57/77 -
- - -
- 56.25% - Branches - 18/32 -
- - -
- 100% - Functions - 2/2 -
- - -
- 74.66% - Lines - 56/75 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148  -  -  -  -1x -  -  -  -  -  -  -30x -  -30x -  -  -  -  -30x -30x -  -  -30x -44x -98x -  -  -98x -  -  -  -  -  -98x -98x -98x -98x -  -  -98x -175x -175x -  -175x -175x -175x -175x -  -175x -175x -175x -175x -  -  -  -98x -28x -28x -28x -28x -28x -  -28x -28x -28x -28x -  -  -  -98x -  -  -  -  -  -98x -98x -98x -98x -98x -  -98x -  -  -  -  -98x -  -98x -  -  -  -30x -  -  -  -  -  -  -  -  -  -  -  -  -  -98x -98x -98x -  -98x -98x -98x -  -  -  -98x -  -  -  -98x -  -  -  -98x -  -  -  -  -  -98x -  -  -  -  -  -  -  -  -98x -98x -  -  -  -  -  -  - 
import type { LayoutState, LGraphGroup } from "./types";
-import { debugLog } from "../debug";
- 
-/** Title bar height for groups */
-const GROUP_TITLE_HEIGHT = 50;
- 
-/**
- * Resize groups to fit their contents after layout
- * Uses bottom-up processing: deepest groups first, then parents
- */
-export function resizeGroupsToFit(state: LayoutState): number {
-  const { groupsByDepth, allNodes, config } = state;
- 
-  Iif (!groupsByDepth || !allNodes) {
-    debugLog("Missing groupsByDepth or allNodes");
-    return 0;
-  }
- 
-  let resizedCount = 0;
-  const maxDepth = groupsByDepth.length - 1;
- 
-  // Process from deepest to shallowest (bottom-up)
-  for (let depth = maxDepth; depth >= 0; depth--) {
-    for (const layoutGroup of groupsByDepth[depth]) {
-      const { group, memberIds, childGroups } = layoutGroup;
- 
-      // Skip groups with no content
-      Iif (memberIds.size === 0 && childGroups.length === 0) {
-        debugLog(`Skipping empty group "${group.title}"`);
-        continue;
-      }
- 
-      // Calculate bounding box from positioned members and child groups
-      let minX = Infinity;
-      let minY = Infinity;
-      let maxX = -Infinity;
-      let maxY = -Infinity;
- 
-      // Include direct member nodes
-      for (const nodeId of memberIds) {
-        const node = allNodes.get(nodeId);
-        Iif (!node) continue;
- 
-        const nx = node.pos?.[0] ?? 0;
-        const ny = node.pos?.[1] ?? 0;
-        const nw = node.size?.[0] ?? 200;
-        const nh = node.size?.[1] ?? 100;
- 
-        minX = Math.min(minX, nx);
-        minY = Math.min(minY, ny);
-        maxX = Math.max(maxX, nx + nw);
-        maxY = Math.max(maxY, ny + nh);
-      }
- 
-      // Include child groups (already resized in previous iterations)
-      for (const child of childGroups) {
-        const cg = child.group;
-        const cx = cg.pos[0];
-        const cy = cg.pos[1];
-        const cw = cg.size[0];
-        const ch = cg.size[1];
- 
-        minX = Math.min(minX, cx);
-        minY = Math.min(minY, cy);
-        maxX = Math.max(maxX, cx + cw);
-        maxY = Math.max(maxY, cy + ch);
-      }
- 
-      // Handle empty bounds (shouldn't happen but be safe)
-      Iif (minX === Infinity) {
-        debugLog(`No content bounds for group "${group.title}"`);
-        continue;
-      }
- 
-      // Calculate final group bounds with padding
-      const padding = config.groupPadding;
-      const newX = minX - padding;
-      const newY = minY - padding - GROUP_TITLE_HEIGHT;
-      const newWidth = maxX - minX + padding * 2;
-      const newHeight = maxY - minY + padding * 2 + GROUP_TITLE_HEIGHT;
- 
-      debugLog(
-        `Resizing group "${group.title}" (depth ${layoutGroup.depth}) to [${newX}, ${newY}, ${newWidth}, ${newHeight}]`
-      );
- 
-      // Update group bounds
-      updateGroupBounds(group, newX, newY, newWidth, newHeight);
- 
-      resizedCount++;
-    }
-  }
- 
-  return resizedCount;
-}
- 
-/**
- * Update group bounds using multiple methods for compatibility
- */
-function updateGroupBounds(
-  group: LGraphGroup,
-  x: number,
-  y: number,
-  width: number,
-  height: number
-): void {
-  // Method 1: Direct pos/size array mutation (most common)
-  Eif (Array.isArray(group.pos)) {
-    group.pos[0] = x;
-    group.pos[1] = y;
-  }
-  Eif (Array.isArray(group.size)) {
-    group.size[0] = width;
-    group.size[1] = height;
-  }
- 
-  // Method 2: Try _pos/_size internal properties
-  const g = group as LGraphGroup & {
-    _pos?: [number, number];
-    _size?: [number, number];
-  };
-  Iif (Array.isArray(g._pos)) {
-    g._pos[0] = x;
-    g._pos[1] = y;
-  }
-  Iif (Array.isArray(g._size)) {
-    g._size[0] = width;
-    g._size[1] = height;
-  }
- 
-  // Method 3: Update _bounding Rectangle if present
-  Iif (group._bounding) {
-    const b = group._bounding;
-    b.x = x;
-    b.y = y;
-    b.width = width;
-    b.height = height;
-  }
- 
-  // Method 4: Try bounding array (older format)
-  const gAny = group as LGraphGroup & { bounding?: number[] };
-  Iif (Array.isArray(gAny.bounding)) {
-    gAny.bounding[0] = x;
-    gAny.bounding[1] = y;
-    gAny.bounding[2] = width;
-    gAny.bounding[3] = height;
-  }
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/index.html b/coverage/src/layout/index.html deleted file mode 100644 index d2271ad..0000000 --- a/coverage/src/layout/index.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - Code coverage report for src/layout - - - - - - - - - -
-
-

All files src/layout

-
- -
- 81.4% - Statements - 836/1027 -
- - -
- 62.2% - Branches - 367/590 -
- - -
- 86.36% - Functions - 76/88 -
- - -
- 84% - Lines - 788/938 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
bin-pack.ts -
-
60%45/7556.66%17/3052.94%9/1763.63%42/66
graph-builder.ts -
-
74.29%185/24959.87%97/16281.25%13/1678.07%178/228
groups.ts -
-
74.02%57/7756.25%18/32100%2/274.66%56/75
index.ts -
-
91.66%22/2460%6/1050%1/295.65%22/23
layer-assign.ts -
-
96%48/5077.77%14/18100%5/595.83%46/48
layout-utils.ts -
-
94.64%53/5669.44%25/36100%3/398.11%52/53
node-classifier.ts -
-
69.44%25/3646.87%15/32100%2/275%24/32
ordering.ts -
-
95.74%90/9466%33/50100%14/1496.34%79/82
positioning.ts -
-
84.93%310/36564.54%142/220100%27/2787.27%288/330
types.ts -
-
100%1/1100%0/0100%0/0100%1/1
-
-
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/index.ts.html b/coverage/src/layout/index.ts.html deleted file mode 100644 index 74723a8..0000000 --- a/coverage/src/layout/index.ts.html +++ /dev/null @@ -1,394 +0,0 @@ - - - - - - Code coverage report for src/layout/index.ts - - - - - - - - - -
-
-

All files / src/layout index.ts

-
- -
- 91.66% - Statements - 22/24 -
- - -
- 60% - Branches - 6/10 -
- - -
- 50% - Functions - 1/2 -
- - -
- 95.65% - Lines - 22/23 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -31x -31x -  -  -31x -31x -1x -  -  -  -  -  -  -  -  -30x -  -  -30x -  -  -30x -  -  -30x -30x -  -  -  -30x -  -  -30x -  -  -30x -  -  -30x -  -  -  -30x -  -  -30x -  -  -  -30x -  -  -30x -31x -31x -  -31x -  -  -  -31x -  -  -  -  -  -  -  -  -  -  - 
import type { LGraph, LayoutConfig, LayoutResult } from "./types";
-import { DEFAULT_CONFIG } from "./types";
-import { buildLayoutGraph } from "./graph-builder";
-import { assignLayers } from "./layer-assign";
-import { minimizeCrossings } from "./ordering";
-import {
-  assignLayerXPositions,
-  assignNodeYPositions,
-  recalculateLayerXPositions,
-  applyPositions,
-  compactVertically,
-  resolveAllOverlaps,
-} from "./positioning";
-import { resizeGroupsToFit } from "./groups";
-import { debugLog } from "../debug";
- 
-/**
- * Main entry point: layout the entire graph
- *
- * Pipeline:
- * 1. Build layout graph (classify nodes, collapse reroutes, filter disconnected)
- * 2. Assign layers via longest-path algorithm
- * 3. Minimize edge crossings via size-aware barycenter heuristic
- * 4. Assign X/Y coordinates with bin packing
- * 5. Compact vertically to reduce gaps
- * 6. Apply positions (includes disconnected zone and reroute restoration)
- * 7. Resize groups to fit their members
- */
-export function layoutGraph(
-  graph: LGraph,
-  config?: Partial<LayoutConfig>
-): LayoutResult {
-  const startTime = performance.now();
-  const fullConfig: LayoutConfig = { ...DEFAULT_CONFIG, ...config };
- 
-  // Handle empty graph
-  const nodeList = graph._nodes ?? [];
-  if (nodeList.length === 0) {
-    return {
-      nodeCount: 0,
-      layerCount: 0,
-      groupCount: 0,
-      executionMs: 0,
-    };
-  }
- 
-  // Phase 1: Build layout graph (includes classification and reroute collapse)
-  const state = buildLayoutGraph(graph, fullConfig);
- 
-  // Phase 2: Assign layers
-  assignLayers(state);
- 
-  // Phase 3: Minimize crossings (size-aware barycenter)
-  minimizeCrossings(state);
- 
-  // Phase 4: Assign coordinates (with bin packing)
-  assignLayerXPositions(state);
-  assignNodeYPositions(state);
- 
-  // Phase 4b: Recalculate X after bin packing updates maxWidth
-  // (bin packing may place multiple nodes in a row, making layer wider)
-  recalculateLayerXPositions(state);
- 
-  // Phase 5: Compact vertically
-  compactVertically(state);
- 
-  // Phase 6: Apply to ComfyUI nodes (includes disconnected and reroute handling)
-  applyPositions(state);
- 
-  // Phase 7: Resize groups
-  const groupCount = resizeGroupsToFit(state);
- 
-  // Phase 8: Resolve all overlaps (groups + nodes unified)
-  // Uses scanline algorithm with priority-based monotonic pushing
-  resolveAllOverlaps(state);
- 
-  // Trigger canvas redraw
-  Iif (graph.setDirtyCanvas) {
-    graph.setDirtyCanvas(true, true);
-  }
- 
-  const executionMs = performance.now() - startTime;
- 
-  // Count total nodes including disconnected and reroutes
-  const disconnectedCount = state.disconnectedNodes?.size ?? 0;
-  const rerouteCount = state.rerouteChains?.reduce((sum, c) => sum + c.nodes.length, 0) ?? 0;
-  const totalNodes = state.nodes.size + disconnectedCount + rerouteCount;
- 
-  debugLog(
-    `Layout complete: ${totalNodes} nodes (${state.nodes.size} in DAG, ${disconnectedCount} disconnected, ${rerouteCount} reroutes), ${state.layers.length} layers in ${executionMs.toFixed(1)}ms`
-  );
- 
-  return {
-    nodeCount: totalNodes,
-    layerCount: state.layers.length,
-    groupCount,
-    executionMs,
-  };
-}
- 
-// Re-export types and config
-export type { LayoutConfig, LayoutResult } from "./types";
-export { DEFAULT_CONFIG } from "./types";
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/layer-assign.ts.html b/coverage/src/layout/layer-assign.ts.html deleted file mode 100644 index 7f76a1b..0000000 --- a/coverage/src/layout/layer-assign.ts.html +++ /dev/null @@ -1,391 +0,0 @@ - - - - - - Code coverage report for src/layout/layer-assign.ts - - - - - - - - - -
-
-

All files / src/layout layer-assign.ts

-
- -
- 96% - Statements - 48/50 -
- - -
- 77.77% - Branches - 14/18 -
- - -
- 100% - Functions - 5/5 -
- - -
- 95.83% - Lines - 46/48 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103  -  -  -  -  -  -  -  -30x -  -  -30x -30x -30x -  -  -30x -217x -217x -63x -  -  -  -  -30x -217x -217x -  -217x -217x -280x -280x -280x -154x -  -  -  -  -  -30x -217x -  -  -  -  -  -30x -217x -  -217x -  -63x -  -  -154x -154x -280x -280x -280x -  -  -154x -  -  -  -  -30x -217x -  -  -  -  -  -30x -30x -217x -217x -217x -  -  -  -196x -30x -  -30x -154x -  -154x -154x -217x -  -  -154x -  -  -  -217x -  -  -  -30x -  - 
import type { LayoutState, LayoutNode, Layer } from "./types";
- 
-/**
- * Assign layers to nodes using longest-path algorithm
- * Sources (no predecessors) get layer 0
- * Each node gets max(predecessor layers) + 1
- */
-export function assignLayers(state: LayoutState): void {
-  const { nodes } = state;
- 
-  // Topological sort via Kahn's algorithm
-  const inDegree = new Map<number, number>();
-  const queue: number[] = [];
-  const order: number[] = [];
- 
-  // Initialize in-degrees
-  for (const [id, node] of nodes) {
-    inDegree.set(id, node.predecessors.length);
-    if (node.predecessors.length === 0) {
-      queue.push(id);
-    }
-  }
- 
-  // Process nodes in topological order
-  while (queue.length > 0) {
-    const nodeId = queue.shift()!;
-    order.push(nodeId);
- 
-    const node = nodes.get(nodeId)!;
-    for (const succId of node.successors) {
-      const deg = (inDegree.get(succId) ?? 1) - 1;
-      inDegree.set(succId, deg);
-      if (deg === 0) {
-        queue.push(succId);
-      }
-    }
-  }
- 
-  // Handle cycles: add remaining nodes (shouldn't happen in valid DAG)
-  for (const [id] of nodes) {
-    Iif (!order.includes(id)) {
-      order.push(id);
-    }
-  }
- 
-  // Assign layers via longest path from sources
-  for (const nodeId of order) {
-    const node = nodes.get(nodeId)!;
- 
-    if (node.predecessors.length === 0) {
-      // Source node: layer 0
-      node.layer = 0;
-    } else {
-      // Max layer of predecessors + 1
-      let maxPredLayer = 0;
-      for (const predId of node.predecessors) {
-        const pred = nodes.get(predId);
-        Eif (pred && pred.layer >= 0) {
-          maxPredLayer = Math.max(maxPredLayer, pred.layer + 1);
-        }
-      }
-      node.layer = maxPredLayer;
-    }
-  }
- 
-  // Ensure all nodes have valid layer (handle edge cases)
-  for (const node of nodes.values()) {
-    Iif (node.layer < 0) {
-      node.layer = 0;
-    }
-  }
- 
-  // Build layer structures
-  const layerMap = new Map<number, LayoutNode[]>();
-  for (const node of nodes.values()) {
-    const arr = layerMap.get(node.layer) ?? [];
-    arr.push(node);
-    layerMap.set(node.layer, arr);
-  }
- 
-  // Sort layers by index and create Layer objects
-  const sortedLayerIndices = [...layerMap.keys()].sort((a, b) => a - b);
-  const layers: Layer[] = [];
- 
-  for (const index of sortedLayerIndices) {
-    const layerNodes = layerMap.get(index)!;
-    // Sort nodes in layer by ID for initial deterministic order
-    layerNodes.sort((a, b) => a.id - b.id);
-    layerNodes.forEach((n, i) => {
-      n.orderInLayer = i;
-    });
- 
-    layers.push({
-      index,
-      nodes: layerNodes,
-      x: 0,
-      maxWidth: Math.max(...layerNodes.map((n) => n.width), 100),
-    });
-  }
- 
-  state.layers = layers;
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/layout-utils.ts.html b/coverage/src/layout/layout-utils.ts.html deleted file mode 100644 index 1252aec..0000000 --- a/coverage/src/layout/layout-utils.ts.html +++ /dev/null @@ -1,442 +0,0 @@ - - - - - - Code coverage report for src/layout/layout-utils.ts - - - - - - - - - -
-
-

All files / src/layout layout-utils.ts

-
- -
- 94.64% - Statements - 53/56 -
- - -
- 69.44% - Branches - 25/36 -
- - -
- 100% - Functions - 3/3 -
- - -
- 98.11% - Lines - 52/53 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120  -  -  -  -  -  -  -  -  -  -189x -  -  -189x -189x -350x -350x -  -350x -490x -406x -462x -  -  -  -  -  -  -189x -350x -350x -  -350x -308x -280x -280x -84x -  -  -  -  -  -189x -  -  -  -  -  -  -  -  -  -  -  -  -42x -42x -  -42x -154x -154x -  -  -42x -84x -84x -  -  -  -42x -42x -  -  -42x -154x -70x -70x -  -  -  -42x -154x -154x -  -154x -  -84x -84x -  -  -84x -84x -84x -84x -  -  -  -  -  -42x -154x -  -  -  -  -  -42x -98x -  -42x -154x -154x -154x -154x -  -  -  -42x -  - 
import type { LGraphNode } from "./types";
- 
-/**
- * Get internal edges between group members by examining node connections
- * Returns array of [sourceId, targetId] pairs where both are in the group
- */
-export function getInternalEdges(
-  memberIds: Set<number>,
-  allNodes: Map<number, LGraphNode>
-): Array<[number, number]> {
-  const edges: Array<[number, number]> = [];
- 
-  // Build a map of linkId -> sourceNodeId for all member outputs
-  const linkToSource = new Map<number, number>();
-  for (const memberId of memberIds) {
-    const node = allNodes.get(memberId);
-    Iif (!node?.outputs) continue;
- 
-    for (const output of node.outputs) {
-      if (output.links) {
-        for (const linkId of output.links) {
-          linkToSource.set(linkId, memberId);
-        }
-      }
-    }
-  }
- 
-  // Check each member's inputs to find internal connections
-  for (const memberId of memberIds) {
-    const node = allNodes.get(memberId);
-    Iif (!node?.inputs) continue;
- 
-    for (const input of node.inputs) {
-      if (input.link !== null && input.link !== undefined) {
-        const sourceId = linkToSource.get(input.link);
-        if (sourceId !== undefined && memberIds.has(sourceId)) {
-          edges.push([sourceId, memberId]);
-        }
-      }
-    }
-  }
- 
-  return edges;
-}
- 
-/**
- * Assign layers to group members using longest-path algorithm
- * Returns members grouped by layer (index 0 = sources)
- */
-export function assignMemberLayers(
-  memberIds: Set<number>,
-  edges: Array<[number, number]>,
-  allNodes: Map<number, LGraphNode>
-): LGraphNode[][] {
-  // Build adjacency and in-degree
-  const successors = new Map<number, number[]>();
-  const inDegree = new Map<number, number>();
- 
-  for (const id of memberIds) {
-    successors.set(id, []);
-    inDegree.set(id, 0);
-  }
- 
-  for (const [source, target] of edges) {
-    successors.get(source)!.push(target);
-    inDegree.set(target, (inDegree.get(target) ?? 0) + 1);
-  }
- 
-  // Longest-path layer assignment via topological sort
-  const nodeLayer = new Map<number, number>();
-  const queue: number[] = [];
- 
-  // Start with sources (in-degree 0)
-  for (const id of memberIds) {
-    if ((inDegree.get(id) ?? 0) === 0) {
-      queue.push(id);
-      nodeLayer.set(id, 0);
-    }
-  }
- 
-  while (queue.length > 0) {
-    const current = queue.shift()!;
-    const currentLayer = nodeLayer.get(current) ?? 0;
- 
-    for (const succ of successors.get(current) ?? []) {
-      // Update successor layer to max of current paths
-      const succLayer = nodeLayer.get(succ) ?? 0;
-      nodeLayer.set(succ, Math.max(succLayer, currentLayer + 1));
- 
-      // Decrease in-degree and add to queue when all predecessors processed
-      const newInDegree = (inDegree.get(succ) ?? 1) - 1;
-      inDegree.set(succ, newInDegree);
-      Eif (newInDegree === 0) {
-        queue.push(succ);
-      }
-    }
-  }
- 
-  // Handle any unvisited nodes (cycles or disconnected)
-  for (const id of memberIds) {
-    Iif (!nodeLayer.has(id)) {
-      nodeLayer.set(id, 0);
-    }
-  }
- 
-  // Group by layer
-  const maxLayer = Math.max(...nodeLayer.values(), 0);
-  const layers: LGraphNode[][] = Array.from({ length: maxLayer + 1 }, () => []);
- 
-  for (const id of memberIds) {
-    const node = allNodes.get(id);
-    Eif (node) {
-      const layer = nodeLayer.get(id) ?? 0;
-      layers[layer].push(node);
-    }
-  }
- 
-  return layers;
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/node-classifier.ts.html b/coverage/src/layout/node-classifier.ts.html deleted file mode 100644 index 37331a8..0000000 --- a/coverage/src/layout/node-classifier.ts.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - Code coverage report for src/layout/node-classifier.ts - - - - - - - - - -
-
-

All files / src/layout node-classifier.ts

-
- -
- 69.44% - Statements - 25/36 -
- - -
- 46.87% - Branches - 15/32 -
- - -
- 100% - Functions - 2/2 -
- - -
- 75% - Lines - 24/32 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80  -  -  -  -  -  -  -  -  -30x -30x -420x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -30x -  -  -30x -30x -420x -420x -  -420x -420x -  -  -  -  -30x -30x -30x -  -30x -30x -374x -  -374x -  -  -  -374x -  -374x -  -  -  -  -  -374x -301x -  -73x -  -  -  -30x -  -  -  -30x -  - 
import type { LGraph, LLink, ClassifiedNodes } from "./types";
-import { debugLog } from "../debug";
- 
-/**
- * Iterate over links in a graph (handles Map, Record, and Array formats)
- */
-function* iterateLinks(
-  links: Map<number, LLink> | Record<number, LLink> | LLink[]
-): Generator<LLink> {
-  if (links instanceof Map) {
-    for (const link of links.values()) {
-      Eif (link) yield link;
-    }
-  E} else if (Array.isArray(links)) {
-    for (const link of links) {
-      if (link) yield link;
-    }
-  } else {
-    for (const link of Object.values(links)) {
-      if (link) yield link;
-    }
-  }
-}
- 
-/**
- * Classify nodes into connected, disconnected, and reroutes
- *
- * - connected: nodes with at least one link
- * - disconnected: nodes with no links (annotations, bookmarks, etc.)
- * - reroutes: nodes with type "Reroute" (handled separately for chain collapse)
- */
-export function classifyNodes(graph: LGraph): ClassifiedNodes {
-  const hasLinks = new Set<number>();
- 
-  // Mark all nodes that appear in any link
-  Eif (graph.links) {
-    for (const link of iterateLinks(graph.links)) {
-      Eif (typeof link.origin_id === "number") {
-        hasLinks.add(link.origin_id);
-      }
-      Eif (typeof link.target_id === "number") {
-        hasLinks.add(link.target_id);
-      }
-    }
-  }
- 
-  const connected = new Set<number>();
-  const disconnected = new Set<number>();
-  const reroutes = new Set<number>();
- 
-  const nodes = graph._nodes ?? [];
-  for (const node of nodes) {
-    Iif (!node || node.id === undefined) continue;
- 
-    const nodeType = node.type ?? "";
- 
-    // Check if this is a reroute node
-    // Common reroute types: "Reroute", "Reroute (rgthree)", etc.
-    const isReroute = nodeType === "Reroute" || nodeType.startsWith("Reroute ");
- 
-    Iif (isReroute) {
-      reroutes.add(node.id);
-      // Reroutes are also tracked as connected if they have links
-      if (hasLinks.has(node.id)) {
-        connected.add(node.id);
-      }
-    } else if (hasLinks.has(node.id)) {
-      connected.add(node.id);
-    } else {
-      disconnected.add(node.id);
-    }
-  }
- 
-  debugLog(
-    `Classified: ${connected.size} connected, ${disconnected.size} disconnected, ${reroutes.size} reroutes`
-  );
- 
-  return { connected, disconnected, reroutes };
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/ordering.ts.html b/coverage/src/layout/ordering.ts.html deleted file mode 100644 index 0d5d3ed..0000000 --- a/coverage/src/layout/ordering.ts.html +++ /dev/null @@ -1,670 +0,0 @@ - - - - - - Code coverage report for src/layout/ordering.ts - - - - - - - - - -
-
-

All files / src/layout ordering.ts

-
- -
- 95.74% - Statements - 90/94 -
- - -
- 66% - Branches - 33/50 -
- - -
- 100% - Functions - 14/14 -
- - -
- 96.34% - Lines - 79/82 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196  -  -  -  -  -  -  -  -30x -  -30x -  -  -28x -154x -154x -217x -  -  -  -  -28x -28x -  -  -28x -  -42x -  -  -  -42x -  -  -  -  -  -  -  -  -  -  -  -  -28x -154x -154x -  -217x -217x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -28x -  -28x -126x -  -  -126x -  -126x -154x -154x -154x -  -154x -280x -280x -  -175x -175x -175x -  -  -  -154x -154x -  -  -  -  -  -  -  -  -  -154x -126x -42x -42x -42x -42x -  -  -  -126x -154x -  -  -  -126x -126x -154x -154x -  -  -154x -126x -  -  -126x -  -  -  -  -  -  -  -  -  -  -  -  -14x -  -14x -70x -  -  -70x -  -70x -126x -126x -126x -  -126x -189x -189x -  -119x -119x -119x -  -  -  -126x -98x -  -28x -  -  -  -  -  -  -  -126x -70x -56x -56x -56x -56x -  -  -  -70x -126x -  -  -  -70x -70x -126x -126x -  -  -126x -70x -  -  -70x -  - 
import type { LayoutState, Layer, LayoutNode } from "./types";
- 
-/**
- * Minimize edge crossings using size-aware barycenter heuristic
- * Uses cumulative height positions instead of simple indices
- * Alternates forward and backward sweeps
- */
-export function minimizeCrossings(state: LayoutState): void {
-  const { layers, nodes, config } = state;
- 
-  if (layers.length < 2) return;
- 
-  // Initial ordering: sort by node height (tall nodes first reduces gaps)
-  for (const layer of layers) {
-    layer.nodes.sort((a, b) => b.height - a.height);
-    layer.nodes.forEach((n, i) => {
-      n.orderInLayer = i;
-    });
-  }
- 
-  // Pre-compute cumulative height positions for size-aware barycenter
-  const heightPositions = new Map<number, number>();
-  updateHeightPositions(layers, heightPositions, config.verticalGap);
- 
-  // Iterative improvement with forward/backward sweeps
-  for (let iter = 0; iter < config.maxIterations; iter++) {
-    const improved =
-      iter % 2 === 0
-        ? sweepForward(layers, nodes, heightPositions, config.verticalGap)
-        : sweepBackward(layers, nodes, heightPositions, config.verticalGap);
- 
-    if (!improved) break;
-  }
-}
- 
-/**
- * Compute cumulative height positions for each node
- * This gives a position-like weight for size-aware ordering
- */
-function updateHeightPositions(
-  layers: Layer[],
-  positions: Map<number, number>,
-  verticalGap: number
-): void {
-  for (const layer of layers) {
-    let y = 0;
-    for (const node of layer.nodes) {
-      // Position is center of node
-      positions.set(node.id, y + node.height / 2);
-      y += node.height + verticalGap;
-    }
-  }
-}
- 
-/**
- * Forward sweep: order each layer based on predecessors in previous layer
- * Uses height-aware positions for better size consideration
- */
-function sweepForward(
-  layers: Layer[],
-  nodes: Map<number, LayoutNode>,
-  heightPositions: Map<number, number>,
-  verticalGap: number
-): boolean {
-  let improved = false;
- 
-  for (let i = 1; i < layers.length; i++) {
-    const currLayer = layers[i];
- 
-    // Compute size-aware barycenter for each node
-    const barycenters = new Map<number, number>();
- 
-    for (const node of currLayer.nodes) {
-      if (node.predecessors.length > 0) {
-        let sum = 0;
-        let count = 0;
- 
-        for (const predId of node.predecessors) {
-          const pred = nodes.get(predId);
-          if (pred && pred.layer === i - 1) {
-            // Use height position instead of simple index
-            const pos = heightPositions.get(predId) ?? pred.orderInLayer;
-            sum += pos;
-            count++;
-          }
-        }
- 
-        if (count > 0) {
-          barycenters.set(node.id, sum / count);
-        } else E{
-          barycenters.set(node.id, heightPositions.get(node.id) ?? 0);
-        }
-      } else E{
-        barycenters.set(node.id, heightPositions.get(node.id) ?? 0);
-      }
-    }
- 
-    // Sort by barycenter, tie-break by ID for determinism
-    const oldOrder = currLayer.nodes.map((n) => n.id).join(",");
-    currLayer.nodes.sort((a, b) => {
-      const aBar = barycenters.get(a.id) ?? 0;
-      const bBar = barycenters.get(b.id) ?? 0;
-      const diff = aBar - bBar;
-      return diff !== 0 ? diff : a.id - b.id;
-    });
- 
-    // Reassign integer order
-    currLayer.nodes.forEach((n, idx) => {
-      n.orderInLayer = idx;
-    });
- 
-    // Update height positions for next iteration
-    let y = 0;
-    for (const node of currLayer.nodes) {
-      heightPositions.set(node.id, y + node.height / 2);
-      y += node.height + verticalGap;
-    }
- 
-    const newOrder = currLayer.nodes.map((n) => n.id).join(",");
-    if (oldOrder !== newOrder) improved = true;
-  }
- 
-  return improved;
-}
- 
-/**
- * Backward sweep: order each layer based on successors in next layer
- * Uses height-aware positions for better size consideration
- */
-function sweepBackward(
-  layers: Layer[],
-  nodes: Map<number, LayoutNode>,
-  heightPositions: Map<number, number>,
-  verticalGap: number
-): boolean {
-  let improved = false;
- 
-  for (let i = layers.length - 2; i >= 0; i--) {
-    const currLayer = layers[i];
- 
-    // Compute size-aware barycenter for each node based on successors
-    const barycenters = new Map<number, number>();
- 
-    for (const node of currLayer.nodes) {
-      if (node.successors.length > 0) {
-        let sum = 0;
-        let count = 0;
- 
-        for (const succId of node.successors) {
-          const succ = nodes.get(succId);
-          if (succ && succ.layer === i + 1) {
-            // Use height position instead of simple index
-            const pos = heightPositions.get(succId) ?? succ.orderInLayer;
-            sum += pos;
-            count++;
-          }
-        }
- 
-        if (count > 0) {
-          barycenters.set(node.id, sum / count);
-        } else {
-          barycenters.set(node.id, heightPositions.get(node.id) ?? 0);
-        }
-      } else E{
-        barycenters.set(node.id, heightPositions.get(node.id) ?? 0);
-      }
-    }
- 
-    // Sort by barycenter, tie-break by ID for determinism
-    const oldOrder = currLayer.nodes.map((n) => n.id).join(",");
-    currLayer.nodes.sort((a, b) => {
-      const aBar = barycenters.get(a.id) ?? 0;
-      const bBar = barycenters.get(b.id) ?? 0;
-      const diff = aBar - bBar;
-      return diff !== 0 ? diff : a.id - b.id;
-    });
- 
-    // Reassign integer order
-    currLayer.nodes.forEach((n, idx) => {
-      n.orderInLayer = idx;
-    });
- 
-    // Update height positions for next iteration
-    let y = 0;
-    for (const node of currLayer.nodes) {
-      heightPositions.set(node.id, y + node.height / 2);
-      y += node.height + verticalGap;
-    }
- 
-    const newOrder = currLayer.nodes.map((n) => n.id).join(",");
-    Iif (oldOrder !== newOrder) improved = true;
-  }
- 
-  return improved;
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/positioning.ts.html b/coverage/src/layout/positioning.ts.html deleted file mode 100644 index 0755913..0000000 --- a/coverage/src/layout/positioning.ts.html +++ /dev/null @@ -1,2494 +0,0 @@ - - - - - - Code coverage report for src/layout/positioning.ts - - - - - - - - - -
-
-

All files / src/layout positioning.ts

-
- -
- 84.93% - Statements - 310/365 -
- - -
- 64.54% - Branches - 142/220 -
- - -
- 100% - Functions - 27/27 -
- - -
- 87.27% - Lines - 288/330 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 -653 -654 -655 -656 -657 -658 -659 -660 -661 -662 -663 -664 -665 -666 -667 -668 -669 -670 -671 -672 -673 -674 -675 -676 -677 -678 -679 -680 -681 -682 -683 -684 -685 -686 -687 -688 -689 -690 -691 -692 -693 -694 -695 -696 -697 -698 -699 -700 -701 -702 -703 -704 -705 -706 -707 -708 -709 -710 -711 -712 -713 -714 -715 -716 -717 -718 -719 -720 -721 -722 -723 -724 -725 -726 -727 -728 -729 -730 -731 -732 -733 -734 -735 -736 -737 -738 -739 -740 -741 -742 -743 -744 -745 -746 -747 -748 -749 -750 -751 -752 -753 -754 -755 -756 -757 -758 -759 -760 -761 -762 -763 -764 -765 -766 -767 -768 -769 -770 -771 -772 -773 -774 -775 -776 -777 -778 -779 -780 -781 -782 -783 -784 -785 -786 -787 -788 -789 -790 -791 -792 -793 -794 -795 -796 -797 -798 -799 -800 -801 -802 -803 -804  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -60x -  -60x -14x -  -  -46x -46x -146x -146x -146x -  -  -46x -  -  -  -  -  -  -  -30x -30x -  -30x -30x -154x -154x -  -  -  -  -  -  -  -  -  -30x -30x -  -  -30x -30x -154x -217x -  -  -  -  -30x -30x -154x -154x -  -  -  -30x -154x -217x -217x -  -  -  -  -  -  -  -  -  -  -30x -  -  -30x -  -30x -  -217x -217x -  -154x -154x -  -  -154x -70x -70x -70x -70x -  -  -  -154x -  -112x -112x -147x -  -  -  -147x -112x -  -112x -  -  -112x -126x -126x -  -  -126x -14x -  -  -  -  -126x -189x -147x -147x -147x -147x -  -  -  -  -  -112x -112x -14x -  -  -  -  -30x -  -  -  -  -  -  -  -30x -  -30x -7x -  -  -  -23x -23x -73x -21x -  -52x -  -  -23x -  -  -  -  -  -23x -23x -52x -52x -52x -  -  -  -  -  -  -  -23x -  -  -  -  -  -23x -23x -  -23x -52x -52x -52x -  -52x -  -  -52x -52x -  -  -  -  -23x -  -  -  -  -  -  -  -  -  -  -30x -  -  -30x -217x -  -70x -  -  -  -147x -  -  -  -  -  -  -  -  -147x -  -  -147x -  -  -  -  -147x -147x -147x -  -  -  -  -30x -  -98x -  -30x -70x -70x -  -70x -70x -  -  -70x -70x -  -70x -  -  -  -  -30x -  -  -30x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -98x -98x -175x -175x -175x -175x -  -  -  -98x -  -  -  -98x -  -  -98x -  -98x -  -98x -91x -  -21x -  -21x -21x -49x -49x -  -  -49x -  -49x -49x -  -49x -77x -77x -77x -77x -  -  -77x -77x -  -  -49x -49x -  -  -  -  -70x -  -  -70x -70x -98x -  -  -  -  -  -  -98x -70x -  -70x -70x -98x -98x -98x -98x -98x -98x -98x -98x -  -  -98x -  -70x -  -  -  -  -98x -  -28x -28x -  -  -28x -  -  -28x -28x -28x -28x -  -  -28x -  -  -98x -  -  -  -  -  -  -  -  -266x -  -266x -266x -  -266x -364x -364x -  -  -266x -266x -  -  -  -  -  -  -  -  -30x -  -  -  -30x -  -30x -217x -  -154x -  -42x -  -  -112x -112x -  -112x -112x -  -  -  -30x -  -  -28x -154x -  -154x -154x -  -154x -154x -  -154x -217x -  -  -  -  -  -  -  -  -  -30x -30x -  -30x -  -  -30x -98x -70x -98x -98x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -30x -374x -199x -  -199x -374x -374x -374x -  -  -  -  -  -  -  -  -  -  -  -  -  -30x -  -  -  -  -  -  -  -  -  -  -  -  -  -29x -29x -29x -  -29x -29x -36x -36x -  -  -624x -  -36x -331x -  -331x -1485x -  -  -  -1485x -  -1485x -  -  -1141x -1141x -  -7x -7x -7x -7x -7x -  -  -  -  -  -29x -7x -  -29x -  -  -  -  -  -  -  -  -  -  -  -  -  -29x -29x -29x -  -29x -29x -29x -29x -  -  -624x -  -29x -268x -  -268x -1233x -  -  -  -1233x -  -1233x -  -  -106x -106x -  -  -  -  -  -  -  -  -  -  -  -29x -  -  -29x -  -  -  -  -  -  -  -  -  -  -  -  -7x -7x -7x -7x -7x -  -  -  -7x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -7x -7x -7x -7x -  -7x -  -  -  -  -  -  -  -  -  -  -  -29x -268x -268x -  -  -268x -  -7x -  -7x -7x -7x -  -  -7x -14x -14x -14x -14x -  -  -  -7x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -30x -30x -  -30x -30x -1x -1x -  -  -  -29x -  -  -29x -  -  -29x -  -29x -  - 
import type { LayoutState, LayoutGroup, LGraphNode, LGraphGroup, LayoutConfig, PackedRow, LayoutNode } from "./types";
- 
-/**
- * Entity type for unified overlap resolution
- * Represents either a group or a standalone node
- */
-interface LayoutEntity {
-  id: string;
-  type: "group" | "node";
-  priority: number;
-  x: number;
-  y: number;
-  width: number;
-  height: number;
-  initialX: number;  // Original position before overlap resolution
-  initialY: number;  // Original position before overlap resolution
-  group?: LGraphGroup;
-  node?: LGraphNode;
-  layoutGroup?: LayoutGroup;
-}
-import { packNodesIntoRows, getPackedWidth } from "./bin-pack";
-import { restoreReroutePositions } from "./reroute-collapse";
-import { getInternalEdges, assignMemberLayers } from "./layout-utils";
-import { debugLog } from "../debug";
- 
-/** Title bar height for groups */
-const GROUP_TITLE_HEIGHT = 50;
- 
-/**
- * Calculate disconnected zone width if there are disconnected nodes
- */
-function getDisconnectedZoneWidth(state: LayoutState): number {
-  const { disconnectedNodes, allNodes, config } = state;
- 
-  if (!disconnectedNodes || disconnectedNodes.size === 0 || !allNodes) {
-    return 0;
-  }
- 
-  let maxWidth = 0;
-  for (const nodeId of disconnectedNodes) {
-    const node = allNodes.get(nodeId);
-    Eif (node) {
-      maxWidth = Math.max(maxWidth, node.size?.[0] ?? 200);
-    }
-  }
-  return maxWidth + config.disconnectedGap;
-}
- 
-/**
- * Assign X coordinates to layers
- * Accounts for disconnected zone on the left if present
- */
-export function assignLayerXPositions(state: LayoutState): void {
-  const { layers, config } = state;
-  const disconnectedZoneWidth = getDisconnectedZoneWidth(state);
- 
-  let x = config.startX + disconnectedZoneWidth;
-  for (const layer of layers) {
-    layer.x = x;
-    x += layer.maxWidth + config.horizontalGap;
-  }
-}
- 
-/**
- * Recalculate layer X positions after bin packing updates maxWidth
- * Also updates node X positions to maintain their offset within each layer
- * Must be called AFTER assignNodeYPositions which updates layer.maxWidth
- */
-export function recalculateLayerXPositions(state: LayoutState): void {
-  const { layers, config } = state;
-  const disconnectedZoneWidth = getDisconnectedZoneWidth(state);
- 
-  // Store each node's offset from its layer's current X
-  const nodeOffsets = new Map<number, number>();
-  for (const layer of layers) {
-    for (const node of layer.nodes) {
-      nodeOffsets.set(node.id, node.x - layer.x);
-    }
-  }
- 
-  // Recalculate layer X positions using updated maxWidth
-  let x = config.startX + disconnectedZoneWidth;
-  for (const layer of layers) {
-    layer.x = x;
-    x += layer.maxWidth + config.horizontalGap;
-  }
- 
-  // Update node X positions based on new layer X + original offset
-  for (const layer of layers) {
-    for (const node of layer.nodes) {
-      const offset = nodeOffsets.get(node.id) ?? 0;
-      node.x = layer.x + offset;
-    }
-  }
-}
- 
-/**
- * Assign Y coordinates to nodes within each layer using bin packing
- * Supports multi-column layout based on config.maxColumns
- * Tracks reserved regions to prevent group/node overlaps within same layer
- */
-export function assignNodeYPositions(state: LayoutState): void {
-  const { layers, config } = state;
- 
-  // Store packed rows for reference
-  const packedRows = new Map<number, PackedRow[]>();
- 
-  for (const layer of layers) {
-    // Separate groups (placed first, full width) from standalone nodes
-    const groupNodes = layer.nodes.filter((n) => n.isGroupRepresentative);
-    const standaloneNodes = layer.nodes.filter((n) => !n.isGroupRepresentative);
- 
-    let y = config.startY;
-    const reservedRegions: Array<{ top: number; bottom: number }> = [];
- 
-    // Position groups first, tracking their Y regions
-    for (const node of groupNodes) {
-      node.x = layer.x;
-      node.y = y;
-      reservedRegions.push({ top: y, bottom: y + node.height });
-      y += node.height + config.verticalGap;
-    }
- 
-    // Bin pack standalone nodes, avoiding reserved regions
-    if (standaloneNodes.length > 0) {
-      // Build size map for bin packing
-      const sizes = new Map<number, { width: number; height: number }>();
-      for (const node of standaloneNodes) {
-        sizes.set(node.id, { width: node.width, height: node.height });
-      }
- 
-      // Pack nodes into rows
-      const nodeIds = standaloneNodes.map((n) => n.id);
-      const rows = packNodesIntoRows(nodeIds, sizes, config);
- 
-      packedRows.set(layer.index, rows);
- 
-      // Assign positions based on packed rows
-      for (const row of rows) {
-        let rowX = layer.x;
-        let rowY = y + row.yOffset;
- 
-        // Check if row overlaps any reserved region
-        for (const region of reservedRegions) {
-          Iif (rowY < region.bottom && rowY + row.height > region.top) {
-            rowY = region.bottom + config.verticalGap;
-          }
-        }
- 
-        for (const nodeId of row.nodes) {
-          const node = standaloneNodes.find((n) => n.id === nodeId);
-          Eif (node) {
-            node.x = rowX;
-            node.y = rowY;
-            rowX += node.width + config.horizontalGap;
-          }
-        }
-      }
- 
-      // Update layer maxWidth to account for packed rows
-      const maxRowWidth = getPackedWidth(rows);
-      if (maxRowWidth > layer.maxWidth) {
-        layer.maxWidth = maxRowWidth;
-      }
-    }
-  }
- 
-  state.packedRows = packedRows;
-}
- 
-/**
- * Place disconnected nodes in the left margin zone
- * Uses bin packing for compact arrangement
- */
-export function placeDisconnectedNodes(state: LayoutState): void {
-  const { disconnectedNodes, allNodes, nodeToGroup, config } = state;
- 
-  if (!disconnectedNodes || disconnectedNodes.size === 0 || !allNodes) {
-    return;
-  }
- 
-  // Filter out disconnected nodes that are inside groups - they're positioned with their group
-  const standaloneDisconnected: number[] = [];
-  for (const nodeId of disconnectedNodes) {
-    if (nodeToGroup?.has(nodeId)) {
-      continue; // Skip - this node is inside a group
-    }
-    standaloneDisconnected.push(nodeId);
-  }
- 
-  Iif (standaloneDisconnected.length === 0) {
-    debugLog(`All ${disconnectedNodes.size} disconnected nodes are inside groups`);
-    return;
-  }
- 
-  // Build size map
-  const sizes = new Map<number, { width: number; height: number }>();
-  for (const nodeId of standaloneDisconnected) {
-    const node = allNodes.get(nodeId);
-    Eif (node) {
-      sizes.set(nodeId, {
-        width: node.size?.[0] ?? 200,
-        height: node.size?.[1] ?? 100,
-      });
-    }
-  }
- 
-  // Pack into rows using config settings
-  const rows = packNodesIntoRows(standaloneDisconnected, sizes, {
-    ...config,
-    maxColumns: 1, // Stack vertically in left margin
-  });
- 
-  // Position at startX, startY (left of main DAG)
-  const x = config.startX;
-  const y = config.startY;
- 
-  for (const row of rows) {
-    for (const nodeId of row.nodes) {
-      const node = allNodes.get(nodeId);
-      Eif (node && node.pos) {
-        // Skip locked/pinned nodes
-        Iif (node.flags?.pinned || node.locked) {
-          continue;
-        }
-        node.pos[0] = x;
-        node.pos[1] = y + row.yOffset;
-      }
-    }
-  }
- 
-  debugLog(
-    `Placed ${standaloneDisconnected.length} disconnected nodes in left margin (${disconnectedNodes.size - standaloneDisconnected.length} inside groups)`
-  );
-}
- 
-/**
- * Apply computed positions to actual ComfyUI nodes
- * Handles standalone nodes, subgraph I/O nodes, top-level groups, and nested groups recursively
- * Also restores reroute positions and places disconnected nodes
- */
-export function applyPositions(state: LayoutState): void {
-  const { nodes, groupRepresentatives, allNodes, groups, config, rerouteChains } = state;
- 
-  // First: Apply positions to standalone nodes (including I/O nodes)
-  for (const layoutNode of nodes.values()) {
-    if (layoutNode.isGroupRepresentative) {
-      // This is a group - handled below with recursive positioning
-      continue;
-    }
- 
-    // Handle subgraph I/O nodes (update pos array directly)
-    Iif (layoutNode.isSubgraphIO && layoutNode.runtimeIONode) {
-      layoutNode.runtimeIONode.pos[0] = layoutNode.x;
-      layoutNode.runtimeIONode.pos[1] = layoutNode.y;
-      debugLog(
-        `Positioned I/O node id=${layoutNode.id} to [${layoutNode.x}, ${layoutNode.y}]`
-      );
-      continue;
-    }
- 
-    const comfyNode = layoutNode.node;
- 
-    // Skip locked/pinned nodes
-    Iif (comfyNode.flags?.pinned || comfyNode.locked) {
-      continue;
-    }
- 
-    // Update position
-    Eif (comfyNode.pos) {
-      comfyNode.pos[0] = layoutNode.x;
-      comfyNode.pos[1] = layoutNode.y;
-    }
-  }
- 
-  // Second: Position group contents recursively (top-level groups only)
-  Eif (groupRepresentatives && allNodes && groups) {
-    // Find top-level groups (no parent)
-    const topLevelGroups = groups.filter((g) => !g.parentGroup);
- 
-    for (const topGroup of topLevelGroups) {
-      const repId = groupRepresentatives.get(topGroup);
-      Iif (repId === undefined) continue;
- 
-      const repNode = nodes.get(repId);
-      Iif (!repNode) continue;
- 
-      // Start positioning at the group's content area
-      const startX = repNode.x + config.groupPadding;
-      const startY = repNode.y + config.groupPadding + GROUP_TITLE_HEIGHT;
- 
-      positionGroupContents(topGroup, startX, startY, allNodes, config);
-    }
-  }
- 
-  // Third: Place disconnected nodes in left margin
-  placeDisconnectedNodes(state);
- 
-  // Fourth: Restore reroute positions along their chain edges
-  Iif (rerouteChains && rerouteChains.length > 0 && allNodes) {
-    // Build positions and sizes maps from actual nodes
-    const positions = new Map<number, { x: number; y: number }>();
-    const sizes = new Map<number, { width: number; height: number }>();
- 
-    for (const [id, node] of allNodes) {
-      if (node.pos) {
-        positions.set(id, { x: node.pos[0], y: node.pos[1] });
-      }
-      if (node.size) {
-        sizes.set(id, { width: node.size[0], height: node.size[1] });
-      }
-    }
- 
-    // Also include layout node positions (for nodes we just positioned)
-    for (const layoutNode of nodes.values()) {
-      positions.set(layoutNode.id, { x: layoutNode.x, y: layoutNode.y });
-      sizes.set(layoutNode.id, { width: layoutNode.width, height: layoutNode.height });
-    }
- 
-    // Restore reroute positions
-    restoreReroutePositions(rerouteChains, positions, sizes);
- 
-    // Apply restored positions to actual nodes
-    for (const chain of rerouteChains) {
-      for (const rerouteId of chain.nodes) {
-        const pos = positions.get(rerouteId);
-        const node = allNodes.get(rerouteId);
-        if (pos && node && node.pos) {
-          node.pos[0] = pos.x;
-          node.pos[1] = pos.y;
-        }
-      }
-    }
- 
-    debugLog(
-      `Restored ${rerouteChains.length} reroute chains`
-    );
-  }
-}
- 
-/**
- * Re-layout group contents using proper Sugiyama-style layout for connected members
- * or bin packing for disconnected members
- * Returns the final Y position after all contents
- */
-function positionGroupContents(
-  group: LayoutGroup,
-  startX: number,
-  startY: number,
-  allNodes: Map<number, LGraphNode>,
-  config: LayoutConfig
-): number {
-  // Collect non-locked members
-  const members: LGraphNode[] = [];
-  for (const nodeId of group.memberIds) {
-    const node = allNodes.get(nodeId);
-    Iif (!node) continue;
-    Iif (node.flags?.pinned || node.locked) continue;
-    members.push(node);
-  }
- 
-  // Handle empty group
-  Iif (members.length === 0 && group.childGroups.length === 0) {
-    return startY;
-  }
- 
-  debugLog(`layoutGroupContents "${group.group.title}": startX=${startX}, members=${members.length}, childGroups=${group.childGroups.length}`);
- 
-  // Get internal edges between members
-  const edges = getInternalEdges(group.memberIds, allNodes);
- 
-  let finalY = startY;
- 
-  if (members.length > 0) {
-    if (edges.length > 0) {
-      // Has internal connections - use layer-based layout
-      const layers = assignMemberLayers(group.memberIds, edges, allNodes);
- 
-      let x = startX;
-      for (let layerIdx = 0; layerIdx < layers.length; layerIdx++) {
-        const layer = layers[layerIdx];
-        Iif (layer.length === 0) continue;
- 
-        // Sort layer by height (tallest first for stable layout)
-        layer.sort((a, b) => (b.size?.[1] ?? 100) - (a.size?.[1] ?? 100));
- 
-        let y = startY;
-        let layerMaxWidth = 0;
- 
-        for (const node of layer) {
-          Eif (node.pos) {
-            node.pos[0] = x;
-            node.pos[1] = y;
-            debugLog(`  Member ${node.id} (${node.type}): layer ${layerIdx}, pos [${x}, ${y}]`);
-          }
- 
-          layerMaxWidth = Math.max(layerMaxWidth, node.size?.[0] ?? 200);
-          y += (node.size?.[1] ?? 100) + config.verticalGap;
-        }
- 
-        finalY = Math.max(finalY, y - config.verticalGap);
-        x += layerMaxWidth + config.horizontalGap;
-      }
-    } else {
-      // No internal connections - use simple vertical stacking with bin pack
-      // Sort by height for consistent layout
-      members.sort((a, b) => (b.size?.[1] ?? 100) - (a.size?.[1] ?? 100));
- 
-      // Build sizes map
-      const sizes = new Map<number, { width: number; height: number }>();
-      for (const node of members) {
-        sizes.set(node.id, {
-          width: node.size?.[0] ?? 200,
-          height: node.size?.[1] ?? 100,
-        });
-      }
- 
-      // Pack into rows
-      const nodeIds = members.map((n) => n.id);
-      const rows = packNodesIntoRows(nodeIds, sizes, config);
- 
-      let y = startY;
-      for (const row of rows) {
-        let x = startX;
-        for (const nodeId of row.nodes) {
-          const node = allNodes.get(nodeId);
-          Eif (node?.pos) {
-            node.pos[0] = x;
-            node.pos[1] = y;
-            debugLog(`  Member ${node.id} (${node.type}): packed pos [${x}, ${y}]`);
-            x += (node.size?.[0] ?? 200) + config.horizontalGap;
-          }
-        }
-        y += row.height + config.verticalGap;
-      }
-      finalY = y - config.verticalGap;
-    }
-  }
- 
-  // Position child groups after members
-  for (const child of group.childGroups) {
-    // Calculate child group's content area
-    const childStartX = startX;
-    const childStartY = finalY + config.verticalGap;
- 
-    // First, layout the child group's contents
-    const childEndY = positionGroupContents(child, childStartX, childStartY + GROUP_TITLE_HEIGHT, allNodes, config);
- 
-    // Update child group position
-    Eif (child.group.pos) {
-      child.group.pos[0] = childStartX - config.groupPadding;
-      child.group.pos[1] = childStartY - config.groupPadding;
-      debugLog(`  Child group "${child.group.title}": pos [${child.group.pos[0]}, ${child.group.pos[1]}]`);
-    }
- 
-    finalY = childEndY + config.groupPadding;
-  }
- 
-  return finalY;
-}
- 
-/**
- * Calculate vertical bounds of nodes in a layer
- * Returns actual min/max Y by iterating all nodes, not assuming array order
- * (Array order is by barycenter, not Y position after bin-packing)
- */
-function getLayerBounds(nodes: LayoutNode[]): { minY: number; maxY: number } | null {
-  Iif (nodes.length === 0) return null;
- 
-  let minY = Infinity;
-  let maxY = -Infinity;
- 
-  for (const node of nodes) {
-    minY = Math.min(minY, node.y);
-    maxY = Math.max(maxY, node.y + node.height);
-  }
- 
-  Iif (minY === Infinity) return null;
-  return { minY, maxY };
-}
- 
-/**
- * Compact vertical layout to reduce gaps
- * Centers layers against the tallest non-group layer
- * Groups are excluded from max calculation to prevent Y explosion
- */
-export function compactVertically(state: LayoutState): void {
-  const { layers } = state;
- 
-  // Calculate max height from STANDALONE nodes only (exclude groups)
-  // Groups are outliers that can be 4000px+, which would push all other layers down
-  let maxTotalHeight = 0;
- 
-  for (const layer of layers) {
-    const standaloneNodes = layer.nodes.filter((n) => !n.isGroupRepresentative);
- 
-    if (standaloneNodes.length === 0) {
-      // Layer is all groups, skip from max calculation
-      continue;
-    }
- 
-    const bounds = getLayerBounds(standaloneNodes);
-    Iif (!bounds) continue;
- 
-    const layerHeight = bounds.maxY - bounds.minY;
-    maxTotalHeight = Math.max(maxTotalHeight, layerHeight);
-  }
- 
-  // If no standalone layers, skip centering entirely
-  if (maxTotalHeight === 0) return;
- 
-  // Center each layer against maxTotalHeight
-  for (const layer of layers) {
-    Iif (layer.nodes.length === 0) continue;
- 
-    const bounds = getLayerBounds(layer.nodes);
-    Iif (!bounds) continue;
- 
-    const layerHeight = bounds.maxY - bounds.minY;
-    const offset = (maxTotalHeight - layerHeight) / 2;
- 
-    for (const node of layer.nodes) {
-      node.y += offset;
-    }
-  }
-}
- 
-/**
- * Collect all entities (groups and standalone nodes) for overlap resolution
- * Assigns priority: groups=100, connected nodes=50, disconnected=10
- */
-function collectEntities(state: LayoutState): LayoutEntity[] {
-  const entities: LayoutEntity[] = [];
-  const { groups, allNodes, nodeToGroup, disconnectedNodes } = state;
- 
-  Iif (!allNodes) return entities;
- 
-  // Add top-level groups (high priority - they anchor)
-  for (const lg of groups ?? []) {
-    if (lg.parentGroup) continue; // Skip nested, handled with parent
-    const x = lg.group.pos?.[0] ?? 0;
-    const y = lg.group.pos?.[1] ?? 0;
-    entities.push({
-      id: `group_${lg.group.title ?? entities.length}`,
-      type: "group",
-      priority: 100,
-      x,
-      y,
-      width: lg.group.size?.[0] ?? 0,
-      height: lg.group.size?.[1] ?? 0,
-      initialX: x,
-      initialY: y,
-      group: lg.group,
-      layoutGroup: lg,
-    });
-  }
- 
-  // Add standalone nodes (lower priority)
-  for (const [nodeId, node] of allNodes) {
-    if (nodeToGroup?.has(nodeId)) continue; // Inside group
-    Iif (node.flags?.pinned || node.locked) continue;
- 
-    const isDisconnected = disconnectedNodes?.has(nodeId) ?? false;
-    const x = node.pos?.[0] ?? 0;
-    const y = node.pos?.[1] ?? 0;
-    entities.push({
-      id: `node_${nodeId}`,
-      type: "node",
-      priority: isDisconnected ? 10 : 50,
-      x,
-      y,
-      width: node.size?.[0] ?? 200,
-      height: node.size?.[1] ?? 100,
-      initialX: x,
-      initialY: y,
-      node,
-    });
-  }
- 
-  return entities;
-}
- 
-/**
- * Scanline overlap resolution for X-axis (push right)
- * Entities are sorted by X, overlapping entities are pushed right
- * Higher priority entities anchor, lower priority pushed
- * Only updates entity.x/y - does NOT modify node.pos (deferred to applyFinalPositions)
- * Returns true if any entity was moved
- */
-function scanlineResolveX(
-  entities: LayoutEntity[],
-  config: LayoutConfig
-): boolean {
-  let anyChanged = false;
-  let iterations = 0;
-  const maxIterations = entities.length * 2;
- 
-  let changed = true;
-  while (changed && iterations < maxIterations) {
-    changed = false;
-    iterations++;
- 
-    // Sort by X position, then priority, then ID (deterministic)
-    entities.sort((a, b) => a.x - b.x || b.priority - a.priority || a.id.localeCompare(b.id));
- 
-    for (let i = 0; i < entities.length; i++) {
-      const anchor = entities[i];
- 
-      for (let j = i + 1; j < entities.length; j++) {
-        const pushed = entities[j];
- 
-        // Check Y overlap (must overlap on Y axis to need X separation)
-        const yOverlap =
-          anchor.y < pushed.y + pushed.height + config.verticalGap &&
-          pushed.y < anchor.y + anchor.height + config.verticalGap;
-        if (!yOverlap) continue;
- 
-        // Check X overlap
-        const requiredX = anchor.x + anchor.width + config.horizontalGap;
-        if (pushed.x < requiredX) {
-          // Overlap! Push entity j to the right (entity only, not node.pos)
-          const dx = requiredX - pushed.x;
-          pushed.x = requiredX;
-          changed = true;
-          anyChanged = true;
-          debugLog(`Scanline X: ${pushed.id} right ${dx.toFixed(0)}px (avoid ${anchor.id})`);
-        }
-      }
-    }
-  }
- 
-  if (iterations > 1) {
-    debugLog(`X-axis scanline: ${iterations} iterations`);
-  }
-  return anyChanged;
-}
- 
-/**
- * Scanline overlap resolution for Y-axis (push down)
- * Entities are sorted by Y, overlapping entities are pushed down
- * Higher priority entities anchor, lower priority pushed
- * Only updates entity.x/y - does NOT modify node.pos (deferred to applyFinalPositions)
- * Returns true if any entity was moved
- */
-function scanlineResolveY(
-  entities: LayoutEntity[],
-  config: LayoutConfig
-): boolean {
-  let anyChanged = false;
-  let iterations = 0;
-  const maxIterations = entities.length * 2;
- 
-  let changed = true;
-  while (changed && iterations < maxIterations) {
-    changed = false;
-    iterations++;
- 
-    // Sort by Y position, then priority, then ID (deterministic)
-    entities.sort((a, b) => a.y - b.y || b.priority - a.priority || a.id.localeCompare(b.id));
- 
-    for (let i = 0; i < entities.length; i++) {
-      const anchor = entities[i];
- 
-      for (let j = i + 1; j < entities.length; j++) {
-        const pushed = entities[j];
- 
-        // Check X overlap (must overlap on X axis to need Y separation)
-        const xOverlap =
-          anchor.x < pushed.x + pushed.width + config.horizontalGap &&
-          pushed.x < anchor.x + anchor.width + config.horizontalGap;
-        if (!xOverlap) continue;
- 
-        // Check Y overlap
-        const requiredY = anchor.y + anchor.height + config.verticalGap;
-        Iif (pushed.y < requiredY) {
-          // Overlap! Push entity j down (entity only, not node.pos)
-          const dy = requiredY - pushed.y;
-          pushed.y = requiredY;
-          changed = true;
-          anyChanged = true;
-          debugLog(`Scanline Y: ${pushed.id} down ${dy.toFixed(0)}px (avoid ${anchor.id})`);
-        }
-      }
-    }
-  }
- 
-  Iif (iterations > 1) {
-    debugLog(`Y-axis scanline: ${iterations} iterations`);
-  }
-  return anyChanged;
-}
- 
-/**
- * Recursively shift all member nodes and nested child groups
- */
-function shiftGroupContentsRecursively(
-  layoutGroup: LayoutGroup,
-  dx: number,
-  dy: number,
-  allNodes: Map<number, LGraphNode>
-): void {
-  // Shift member nodes of this group
-  for (const nodeId of layoutGroup.memberIds) {
-    const node = allNodes.get(nodeId);
-    Eif (node?.pos) {
-      node.pos[0] += dx;
-      node.pos[1] += dy;
-    }
-  }
-  // Shift child groups and their contents recursively
-  for (const child of layoutGroup.childGroups) {
-    if (child.group.pos) {
-      child.group.pos[0] += dx;
-      child.group.pos[1] += dy;
-    }
-    shiftGroupContentsRecursively(child, dx, dy, allNodes);
-  }
-}
- 
-/**
- * Recursively shift child groups and their members
- */
-function shiftChildGroups(
-  layoutGroup: LayoutGroup,
-  dx: number,
-  dy: number,
-  allNodes: Map<number, LGraphNode>
-): void {
-  for (const child of layoutGroup.childGroups) {
-    Eif (child.group.pos) {
-      child.group.pos[0] += dx;
-      child.group.pos[1] += dy;
-    }
-    shiftGroupContentsRecursively(child, dx, dy, allNodes);
-  }
-}
- 
-/**
- * Apply final entity positions to node.pos after scanline resolution
- * Calculates deltas from initial positions and applies to groups/nodes
- */
-function applyFinalPositions(
-  entities: LayoutEntity[],
-  allNodes: Map<number, LGraphNode>
-): void {
-  for (const entity of entities) {
-    const dx = entity.x - entity.initialX;
-    const dy = entity.y - entity.initialY;
- 
-    // Skip if no movement
-    if (Math.abs(dx) < 0.01 && Math.abs(dy) < 0.01) continue;
- 
-    if (entity.type === "group" && entity.group && entity.layoutGroup) {
-      // Set group's final position
-      Eif (entity.group.pos) {
-        entity.group.pos[0] = entity.x;
-        entity.group.pos[1] = entity.y;
-      }
-      // Shift all member nodes by the same delta
-      for (const nodeId of entity.layoutGroup.memberIds) {
-        const node = allNodes.get(nodeId);
-        Eif (node?.pos) {
-          node.pos[0] += dx;
-          node.pos[1] += dy;
-        }
-      }
-      // Shift child groups recursively
-      shiftChildGroups(entity.layoutGroup, dx, dy, allNodes);
-    E} else if (entity.type === "node" && entity.node?.pos) {
-      // Set node's final position
-      entity.node.pos[0] = entity.x;
-      entity.node.pos[1] = entity.y;
-    }
-  }
-}
- 
-/**
- * Unified overlap resolution using scanline algorithm
- * Uses priority-based monotonic pushing (right/down only) to prevent oscillation
- * Groups have highest priority and anchor in place
- * Idempotent: decouples entity tracking from node.pos writes
- */
-export function resolveAllOverlaps(state: LayoutState): void {
-  const { allNodes, config } = state;
-  Iif (!allNodes) return;
- 
-  const entities = collectEntities(state);
-  if (entities.length < 2) {
-    debugLog(`Overlap resolution: ${entities.length} entities (skipped)`);
-    return;
-  }
- 
-  // Pass 1: X-axis (left-to-right pushing) - updates entity.x only
-  scanlineResolveX(entities, config);
- 
-  // Pass 2: Y-axis (top-to-bottom pushing) - updates entity.y only
-  scanlineResolveY(entities, config);
- 
-  // Pass 3: Apply final positions to node.pos
-  applyFinalPositions(entities, allNodes);
- 
-  debugLog(`Overlap resolution: ${entities.length} entities processed`);
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/coverage/src/layout/types.ts.html b/coverage/src/layout/types.ts.html deleted file mode 100644 index 3f27305..0000000 --- a/coverage/src/layout/types.ts.html +++ /dev/null @@ -1,874 +0,0 @@ - - - - - - Code coverage report for src/layout/types.ts - - - - - - - - - -
-
-

All files / src/layout types.ts

-
- -
- 100% - Statements - 1/1 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 0/0 -
- - -
- 100% - Lines - 1/1 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

- -
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -1x -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - 
/**
- * Minimal type definitions for ComfyUI/LiteGraph
- * These match the runtime global objects, not the package exports
- */
- 
-/** Point as [x, y] */
-export type Point = [x: number, y: number];
- 
-/** Size as [width, height] */
-export type Size = [width: number, height: number];
- 
-/** Node input slot */
-export interface NodeInputSlot {
-  name: string;
-  type: string;
-  link: number | null;
-}
- 
-/** Node output slot */
-export interface NodeOutputSlot {
-  name: string;
-  type: string;
-  links: number[] | null;
-}
- 
-/** Node flags */
-export interface NodeFlags {
-  pinned?: boolean;
-  collapsed?: boolean;
-}
- 
-/** LiteGraph Node */
-export interface LGraphNode {
-  id: number;
-  type: string;
-  title: string;
-  pos: Point;
-  size: Size;
-  inputs: NodeInputSlot[];
-  outputs: NodeOutputSlot[];
-  flags?: NodeFlags;
-  locked?: boolean;
-  order?: number;
-}
- 
-/** LiteGraph Group */
-export interface LGraphGroup {
-  id: number;
-  title: string;
-  pos: Point;
-  size: Size;
-  _nodes?: LGraphNode[];
-  _children?: Set<{ id: number }>;
-  _bounding?: {
-    x: number;
-    y: number;
-    width: number;
-    height: number;
-    set?: (x: number, y: number, w: number, h: number) => void;
-  };
-  resizeTo?: (items: Iterable<LGraphNode>, padding?: number) => void;
-}
- 
-/** LiteGraph Link */
-export interface LLink {
-  id: number;
-  origin_id: number;
-  origin_slot: number;
-  target_id: number;
-  target_slot: number;
-  type: string;
-}
- 
-/** Subgraph I/O node (uses bounding array format) */
-export interface SubgraphIONode {
-  id: number;
-  bounding: [x: number, y: number, width: number, height: number];
-}
- 
-/** LiteGraph Graph (or Subgraph with I/O nodes) */
-export interface LGraph {
-  _nodes: LGraphNode[];
-  _groups: LGraphGroup[];
-  /** Links can be Map, Record, or Array depending on context */
-  links: Map<number, LLink> | Record<number, LLink> | LLink[];
-  setDirtyCanvas?: (fg: boolean, bg: boolean) => void;
-  /** Subgraph input node (only on Subgraph, not root LGraph) */
-  inputNode?: SubgraphIONode;
-  /** Subgraph output node (only on Subgraph, not root LGraph) */
-  outputNode?: SubgraphIONode;
-}
- 
-/** Layout node with computed metadata */
-export interface LayoutNode {
-  /** Reference to ComfyUI node */
-  node: LGraphNode;
-  /** Node ID */
-  id: number;
-  /** DAG depth (0 = sources/inputs) */
-  layer: number;
-  /** Vertical position within layer */
-  orderInLayer: number;
-  /** Node IDs this depends on (predecessors) */
-  predecessors: number[];
-  /** Node IDs that depend on this (successors) */
-  successors: number[];
-  /** Node width (or group width if representative) */
-  width: number;
-  /** Node height (or group height if representative) */
-  height: number;
-  /** Computed X coordinate */
-  x: number;
-  /** Computed Y coordinate */
-  y: number;
-  /** True if this node represents a group in the layout */
-  isGroupRepresentative?: boolean;
-  /** The group this node represents (if isGroupRepresentative) */
-  group?: LayoutGroup;
-  /** True if this is a subgraph I/O node (input or output boundary) */
-  isSubgraphIO?: boolean;
-  /** Reference to runtime I/O node for position updates (has pos/size) */
-  runtimeIONode?: { id: number; pos: [number, number]; size: [number, number] };
-}
- 
-/** Layer = vertical column of nodes */
-export interface Layer {
-  /** Layer index (0 = leftmost) */
-  index: number;
-  /** Nodes in this layer */
-  nodes: LayoutNode[];
-  /** Computed X position for this layer */
-  x: number;
-  /** Max node width in this layer */
-  maxWidth: number;
-}
- 
-/** Layout group tracking with hierarchy support */
-export interface LayoutGroup {
-  /** Reference to ComfyUI group */
-  group: LGraphGroup;
-  /** Node IDs directly contained (not in child groups) */
-  memberIds: Set<number>;
-  /** Child groups (nested inside this group) */
-  childGroups: LayoutGroup[];
-  /** Parent group (group containing this one), null for top-level */
-  parentGroup: LayoutGroup | null;
-  /** Nesting depth (0 = top-level) */
-  depth: number;
-  /** Calculated width for the group */
-  width: number;
-  /** Calculated height for the group */
-  height: number;
-}
- 
-/** Layout configuration */
-export interface LayoutConfig {
-  /** Horizontal gap between layers */
-  horizontalGap: number;
-  /** Vertical gap between nodes in same layer */
-  verticalGap: number;
-  /** Padding inside groups */
-  groupPadding: number;
-  /** Layout origin X */
-  startX: number;
-  /** Layout origin Y */
-  startY: number;
-  /** Max barycenter iterations */
-  maxIterations: number;
-  /** Max columns per layer (0=auto, 1=disabled/vertical stack, 2+=fixed) */
-  maxColumns: number;
-  /** Max row width before new row when maxColumns=0 */
-  maxRowWidth: number;
-  /** Collapse reroute chains into edge waypoints */
-  collapseReroutes: boolean;
-  /** Gap between disconnected zone and DAG */
-  disconnectedGap: number;
-}
- 
-/** Default configuration */
-export const DEFAULT_CONFIG: LayoutConfig = {
-  horizontalGap: 100,
-  verticalGap: 40,
-  groupPadding: 30,
-  startX: 100,
-  startY: 100,
-  maxIterations: 24,
-  maxColumns: 0,
-  maxRowWidth: 800,
-  collapseReroutes: true,
-  disconnectedGap: 150,
-};
- 
-/** Node classification result */
-export interface ClassifiedNodes {
-  /** Nodes with connections (participate in DAG) */
-  connected: Set<number>;
-  /** Nodes without any connections */
-  disconnected: Set<number>;
-  /** Reroute nodes (for special handling) */
-  reroutes: Set<number>;
-}
- 
-/** Reroute chain for collapse/restore */
-export interface RerouteChain {
-  /** Reroute node IDs in order */
-  nodes: number[];
-  /** Source node before chain */
-  sourceNode: number;
-  /** Source slot index */
-  sourceSlot: number;
-  /** Target nodes after chain */
-  targets: Array<{ node: number; slot: number }>;
-}
- 
-/** Packed row within a layer (for bin packing) */
-export interface PackedRow {
-  /** Node IDs in this row */
-  nodes: number[];
-  /** Max node height in row */
-  height: number;
-  /** Vertical offset from layer start */
-  yOffset: number;
-  /** Total width of nodes + gaps in row */
-  width: number;
-}
- 
-/** Graph layout state */
-export interface LayoutState {
-  /** All layout nodes by ID (includes group representatives) */
-  nodes: Map<number, LayoutNode>;
-  /** Layers of nodes */
-  layers: Layer[];
-  /** Groups */
-  groups: LayoutGroup[];
-  /** Config */
-  config: LayoutConfig;
-  /** Maps node ID to its group (if any) */
-  nodeToGroup?: Map<number, LayoutGroup>;
-  /** Maps group to its representative node ID */
-  groupRepresentatives?: Map<LayoutGroup, number>;
-  /** All original ComfyUI nodes by ID */
-  allNodes?: Map<number, LGraphNode>;
-  /** Groups organized by depth (index 0 = deepest) for bottom-up processing */
-  groupsByDepth?: LayoutGroup[][];
-  /** Disconnected node IDs (placed in separate zone) */
-  disconnectedNodes?: Set<number>;
-  /** Collapsed reroute chains (restored after layout) */
-  rerouteChains?: RerouteChain[];
-  /** Packed rows per layer (for bin-packed layout) */
-  packedRows?: Map<number, PackedRow[]>;
-}
- 
-/** Layout result */
-export interface LayoutResult {
-  /** Number of nodes processed */
-  nodeCount: number;
-  /** Number of layers */
-  layerCount: number;
-  /** Number of groups resized */
-  groupCount: number;
-  /** Execution time in ms */
-  executionMs: number;
-}
- 
- -
-
- - - - - - - - \ No newline at end of file diff --git a/tests/integration/layout.test.ts b/tests/integration/layout.test.ts index bd46917..3b61e3a 100644 --- a/tests/integration/layout.test.ts +++ b/tests/integration/layout.test.ts @@ -24,13 +24,6 @@ describe("layoutGraph regression tests", () => { "complex-parallel.json", // 26 nodes, parallel KSampler High/Low, 5 groups ]; - // Fixtures with known issues (documented for future fixes) - // These use test.skip() to document expected failures - const knownIssueFixtures: Array<{ name: string; issues: string[] }> = [ - // All fixtures now pass - keeping array for future regression tracking - ]; - - // Test passing fixtures with all invariants for (const fixture of passingFixtures) { describe(fixture, () => { let graph: LGraph; @@ -67,65 +60,6 @@ describe("layoutGraph regression tests", () => { }); }); } - - // Test fixtures with known issues - skip failing tests - for (const { name, issues } of knownIssueFixtures) { - describe(name, () => { - let graph: LGraph; - let originalGraph: LGraph; - - beforeEach(() => { - graph = loadFixture(name); - originalGraph = cloneGraph(graph); - layoutGraph(graph); - }); - - // Skip overlap test if known issue - if (issues.includes("overlap")) { - it.skip("has no overlapping entities (KNOWN ISSUE)", () => { - assertNoOverlaps(graph); - }); - } else { - it("has no overlapping entities", () => { - assertNoOverlaps(graph); - }); - } - - it("keeps nodes inside their groups", () => { - assertNodesInsideGroups(graph); - }); - - it("has finite coordinates", () => { - assertFiniteCoordinates(graph); - }); - - it("preserves topological order", () => { - assertTopologicalOrder(graph); - }); - - // Skip idempotent test if known issue - if (issues.includes("idempotent")) { - it.skip("is idempotent (KNOWN ISSUE)", () => { - assertIdempotent(graph); - }); - } else { - it("is idempotent (stable after multiple runs)", () => { - assertIdempotent(graph); - }); - } - - // Skip membership test if known issue - if (issues.includes("membership")) { - it.skip("preserves group membership (KNOWN ISSUE)", () => { - assertGroupMembershipPreserved(originalGraph, graph); - }); - } else { - it("preserves group membership", () => { - assertGroupMembershipPreserved(originalGraph, graph); - }); - } - }); - } }); describe("layout algorithm properties", () => {